PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.83
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.83
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Auto_Scrolling_Text / Auto_Scrolling_Text.php

Auto_Scrolling_Text.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.83, at includes/widgets/Auto_Scrolling_Text/Auto_Scrolling_Text.php

1,145 lines 46.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php /** @noinspection SpellCheckingInspection, DuplicatedCode, PhpUnused */
2
3 namespace King_Addons;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Group_Control_Background;
7 use Elementor\Group_Control_Border;
8 use Elementor\Group_Control_Box_Shadow;
9 use Elementor\Group_Control_Image_Size;
10 use Elementor\Group_Control_Typography;
11 use Elementor\Repeater;
12 use Elementor\Utils;
13 use Elementor\Widget_Base;
14
15 if (!defined('ABSPATH')) {
16 exit; // Exit if accessed directly.
17 }
18
19
20
21 class Auto_Scrolling_Text extends Widget_Base
22 {
23
24
25 public function get_name(): string
26 {
27 return 'king-addons-auto-scrolling-text';
28 }
29
30 public function get_title(): string
31 {
32 return esc_html__('Auto-Scrolling Text', 'king-addons');
33 }
34
35 public function get_icon(): string
36 {
37 /** @noinspection SpellCheckingInspection */
38 return 'king-addons-icon king-addons-auto-scrolling-text';
39 }
40
41 public function get_style_depends(): array
42 {
43 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-auto-scrolling-text-style'];
44 }
45
46 public function get_script_depends(): array
47 {
48 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-auto-scrolling-text-script'];
49 }
50
51 public function get_categories(): array
52 {
53 return ['king-addons'];
54 }
55
56 public function get_keywords(): array
57 {
58 return ['card', 'carousel', 'slider', 'scroller', 'swiper', 'content', 'button', 'dot', 'dots', 'navigation',
59 'cards', 'wheel', 'touch', 'nav', 'navigation', 'animation', 'effect', 'animated', 'template', 'link',
60 'left', 'right', 'top', 'bottom', 'vertical', 'horizontal', 'mouse', 'dragging', 'hover', 'over',
61 'hover over', 'picture', 'float', 'floating', 'sticky', 'click', 'target', 'point', 'king', 'addons',
62 'mouseover', 'page', 'card carousel', 'kingaddons', 'king-addons', 'team', 'members', 'testimonial',
63 'testimonials', 'reviews', ' team memebers', 'drag', 'tabs', 'tab',
64 'image', 'images', 'txt', 'typography', 'text', 'animation', 'animated', 'build', 'complex', 'effect',
65 'interactive', 'click', 'target', 'point', 'builder', 'link', 'point', 'points', 'color', 'mouse', 'hover',
66 'over', 'hover over', 'picture', 'font', 'size', 'heading',
67 'header', 'paragraph', 'section', 'article', 'particle', 'document', 'writing', 'style', 'format', 'complex',
68 'auto', 'scroll', 'scrolling', 'auto-scroll', 'auto-scrolling', 'head', 'heading', 'title', 'subtitle'];
69 }
70
71 public function get_custom_help_url()
72 {
73 return 'mailto:bug@kingaddons.com?subject=Bug Report - King Addons&body=Please describe the issue';
74 }
75
76 protected function register_controls(): void
77 {
78 /** START TAB: CONTENT ===================== */
79 /** SECTION: Texts ===================== */
80 $this->start_controls_section(
81 'kng_auto_scroll_txt_content_section_content',
82 [
83 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Content', 'king-addons'),
84 'tab' => Controls_Manager::TAB_CONTENT,
85 ]
86 );
87
88 $repeater = new Repeater();
89
90 $repeater->add_control(
91 'kng_auto_scroll_txt_content_type',
92 [
93 'label' => '<b>' . esc_html__('Type of content', 'king-addons') . '</b>',
94 'type' => Controls_Manager::SELECT,
95 'options' => [
96 'text' => esc_html__('Text', 'king-addons'),
97 'image' => esc_html__('Image', 'king-addons'),
98 ],
99 'default' => 'text',
100 'separator' => 'after',
101 ]
102 );
103
104 $repeater->add_group_control(
105 Group_Control_Typography::get_type(),
106 [
107 'label' => esc_html__('Typography', 'king-addons'),
108 'name' => 'kng_auto_scroll_txt_typography',
109 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text',
110 'condition' => [
111 'kng_auto_scroll_txt_content_type' => 'text'
112 ]
113 ]
114 );
115
116 $repeater->add_control(
117 'kng_auto_scroll_txt_color',
118 [
119 'label' => esc_html__('Color', 'king-addons'),
120 'type' => Controls_Manager::COLOR,
121 'selectors' => [
122 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'color: {{VALUE}};',
123 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text a' => 'color: {{VALUE}};',
124 ],
125 'condition' => [
126 'kng_auto_scroll_txt_content_type' => 'text'
127 ]
128 ]
129 );
130
131 $repeater->add_group_control(
132 Group_Control_Background::get_type(),
133 [
134 'name' => 'kng_auto_scroll_txt_bg_color',
135 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text',
136 'condition' => [
137 'kng_auto_scroll_txt_content_type' => 'text'
138 ],
139 'separator' => 'before',
140 ]
141 );
142
143 $repeater->add_control(
144 'kng_auto_scroll_txt_custom_vertical_align',
145 [
146 'label' => esc_html__('Custom Vertical Align', 'king-addons'),
147 'type' => Controls_Manager::SWITCHER,
148 'condition' => [
149 'kng_auto_scroll_txt_content_type' => 'text'
150 ],
151 'separator' => 'before',
152 ]
153 );
154
155 $repeater->add_responsive_control(
156 'kng_auto_scroll_txt_vertical_align',
157 [
158 'label' => esc_html__('Vertical Align', 'king-addons'),
159 'type' => Controls_Manager::SELECT,
160 'options' => [
161 'baseline' => esc_html__('baseline', 'king-addons'),
162 'top' => esc_html__('top', 'king-addons'),
163 'bottom' => esc_html__('bottom', 'king-addons'),
164 'sub' => esc_html__('sub', 'king-addons'),
165 'super' => esc_html__('super', 'king-addons'),
166 'text-top' => esc_html__('text-top', 'king-addons'),
167 'text-bottom' => esc_html__('text-bottom', 'king-addons'),
168 'middle' => esc_html__('middle', 'king-addons'),
169 ],
170 'default' => 'baseline',
171 'selectors' => [
172 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'vertical-align: {{VALUE}};',
173 ],
174 'condition' => [
175 'kng_auto_scroll_txt_custom_vertical_align!' => '',
176 'kng_auto_scroll_txt_content_type' => 'text'
177 ]
178 ]
179 );
180
181 $repeater->add_control(
182 'kng_auto_scroll_txt_padding_switcher',
183 [
184 'label' => esc_html__('Custom Padding', 'king-addons'),
185 'type' => Controls_Manager::SWITCHER,
186 'condition' => [
187 'kng_auto_scroll_txt_content_type' => 'text'
188 ]
189 ]
190 );
191
192 $repeater->add_responsive_control(
193 'kng_auto_scroll_txt_padding',
194 [
195 'label' => esc_html__('Padding', 'king-addons'),
196 'type' => Controls_Manager::DIMENSIONS,
197 'size_units' => ['px', 'em', '%'],
198 'default' => [
199 'top' => 0,
200 'right' => 0,
201 'bottom' => 0,
202 'left' => 0,
203 ],
204 'selectors' => [
205 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
206 ],
207 'condition' => [
208 'kng_auto_scroll_txt_padding_switcher!' => '',
209 'kng_auto_scroll_txt_content_type' => 'text'
210 ]
211 ]
212 );
213
214 $repeater->add_control(
215 'kng_auto_scroll_txt_margin_switcher',
216 [
217 'label' => esc_html__('Custom Margin', 'king-addons'),
218 'type' => Controls_Manager::SWITCHER,
219 'condition' => [
220 'kng_auto_scroll_txt_content_type' => 'text'
221 ]
222 ]
223 );
224
225 $repeater->add_responsive_control(
226 'kng_auto_scroll_txt_margin_left',
227 [
228 'label' => esc_html__('Margin Left', 'king-addons'),
229 'type' => Controls_Manager::NUMBER,
230 'step' => 1,
231 'selectors' => [
232 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'margin-left: {{SIZE}}px;',
233 ],
234 'condition' => [
235 'kng_auto_scroll_txt_margin_switcher!' => '',
236 'kng_auto_scroll_txt_content_type' => 'text'
237 ]
238 ]
239 );
240
241 $repeater->add_responsive_control(
242 'kng_auto_scroll_txt_margin_right',
243 [
244 'label' => esc_html__('Margin Right', 'king-addons'),
245 'type' => Controls_Manager::NUMBER,
246 'step' => 1,
247 'selectors' => [
248 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'margin-right: {{SIZE}}px;',
249 ],
250 'condition' => [
251 'kng_auto_scroll_txt_margin_switcher!' => '',
252 'kng_auto_scroll_txt_content_type' => 'text'
253 ]
254 ]
255 );
256
257 $repeater->add_control(
258 'kng_auto_scroll_txt_margin_info',
259 [
260 'type' => Controls_Manager::ALERT,
261 'alert_type' => 'info',
262 'content' => esc_html__('For vertical spacing use the line-height parameter in Typography, or optionally Custom Padding - top and bottom. Margin top and bottom parameters are available when Custom Width value is set. This is because of current HTML/CSS limitations for multiline text.', 'king-addons'),
263 'condition' => [
264 'kng_auto_scroll_txt_margin_switcher!' => '',
265 'kng_auto_scroll_txt_content_type' => 'text'
266 ]
267 ]
268 );
269
270 $repeater->add_control(
271 'kng_auto_scroll_txt_custom_border',
272 [
273 'label' => esc_html__('Custom Border', 'king-addons'),
274 'type' => Controls_Manager::SWITCHER,
275 'condition' => [
276 'kng_auto_scroll_txt_content_type' => 'text'
277 ]
278 ]
279 );
280
281 $repeater->add_group_control(
282 Group_Control_Border::get_type(),
283 [
284 'name' => 'kng_auto_scroll_txt_border',
285 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text',
286 'condition' => [
287 'kng_auto_scroll_txt_custom_border!' => '',
288 'kng_auto_scroll_txt_content_type' => 'text'
289 ]
290 ]
291 );
292
293 $repeater->add_responsive_control(
294 'kng_auto_scroll_txt_border_radius',
295 [
296 'label' => esc_html__('Border Radius', 'king-addons'),
297 'type' => Controls_Manager::DIMENSIONS,
298 'size_units' => ['px', '%'],
299 'default' => [
300 'top' => 0,
301 'right' => 0,
302 'bottom' => 0,
303 'left' => 0,
304 ],
305 'selectors' => [
306 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
307 ],
308 'condition' => [
309 'kng_auto_scroll_txt_custom_border!' => '',
310 'kng_auto_scroll_txt_content_type' => 'text'
311 ]
312 ]
313 );
314
315 $repeater->add_control(
316 'kng_auto_scroll_txt_custom_width_switcher',
317 [
318 'label' => esc_html__('Custom Width', 'king-addons'),
319 'type' => Controls_Manager::SWITCHER,
320 'condition' => [
321 'kng_auto_scroll_txt_content_type' => 'text'
322 ]
323 ]
324 );
325
326 $repeater->add_responsive_control(
327 'kng_auto_scroll_txt_custom_width',
328 [
329 'label' => esc_html__('Width (px)', 'king-addons'),
330 'description' => esc_html__('The custom width of the current content item is useful for creating multiline text snippets or limiting the image size.', 'king-addons'),
331 'type' => Controls_Manager::NUMBER,
332 'min' => 0,
333 'step' => 1,
334 'selectors' => [
335 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'width: {{SIZE}}px; display: inline-block;',
336 ],
337 'condition' => [
338 'kng_auto_scroll_txt_custom_width_switcher!' => '',
339 'kng_auto_scroll_txt_content_type' => 'text'
340 ]
341 ]
342 );
343
344 $repeater->add_responsive_control(
345 'kng_auto_scroll_txt_margin_top',
346 [
347 'label' => esc_html__('Margin Top', 'king-addons'),
348 'type' => Controls_Manager::NUMBER,
349 'step' => 1,
350 'selectors' => [
351 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'margin-top: {{SIZE}}px;',
352 ],
353 'condition' => [
354 'kng_auto_scroll_txt_custom_width_switcher!' => '',
355 'kng_auto_scroll_txt_content_type' => 'text'
356 ]
357 ]
358 );
359
360 $repeater->add_responsive_control(
361 'kng_auto_scroll_txt_margin_bottom',
362 [
363 'label' => esc_html__('Margin Bottom', 'king-addons'),
364 'type' => Controls_Manager::NUMBER,
365 'step' => 1,
366 'selectors' => [
367 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'margin-bottom: {{SIZE}}px;',
368 ],
369 'condition' => [
370 'kng_auto_scroll_txt_custom_width_switcher!' => '',
371 'kng_auto_scroll_txt_content_type' => 'text'
372 ]
373 ]
374 );
375
376 /** ====================================================== */
377 /** TEXT EFFECTS ========================================== */
378 $repeater->add_control(
379 'kng_auto_scroll_txt_effect',
380 [
381 'label' => '<b>' . esc_html__('Text Effect', 'king-addons') . '</b>',
382 'type' => Controls_Manager::SELECT,
383 'options' => [
384 'none' => esc_html__('None', 'king-addons'),
385 'text-gradient' => esc_html__('Text Gradient', 'king-addons'),
386 'underline-gradient' => esc_html__('Underline Gradient', 'king-addons'),
387 'outline-stroke' => esc_html__('Outline Stroke', 'king-addons'),
388 ],
389 'label_block' => true,
390 'default' => 'none',
391 'separator' => 'before',
392 'condition' => [
393 'kng_auto_scroll_txt_content_type' => 'text'
394 ]
395 ]
396 );
397
398 /** Outline Stroke ========================================== */
399 $repeater->add_control(
400 'kng_auto_scroll_txt_effect_stroke_txt_color',
401 [
402 'label' => esc_html__('Text Color', 'king-addons'),
403 'type' => Controls_Manager::COLOR,
404 'default' => '#0000',
405 'selectors' => [
406 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner span' => 'color: {{VALUE}};'
407 ],
408 'condition' => [
409 'kng_auto_scroll_txt_effect' => 'outline-stroke',
410 'kng_auto_scroll_txt_content_type' => 'text'
411 ]
412 ]
413 );
414
415 $repeater->add_control(
416 'kng_auto_scroll_txt_effect_stroke_stroke_color',
417 [
418 'label' => esc_html__('Stroke Color', 'king-addons'),
419 'type' => Controls_Manager::COLOR,
420 'default' => '#dbdbdb',
421 'selectors' => [
422 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner span' => '-webkit-text-stroke-color: {{VALUE}};'
423 ],
424 'condition' => [
425 'kng_auto_scroll_txt_effect' => 'outline-stroke',
426 'kng_auto_scroll_txt_content_type' => 'text'
427 ]
428 ]
429 );
430
431 $repeater->add_control(
432 'kng_auto_scroll_txt_effect_stroke_width',
433 [
434 'label' => esc_html__('Stroke Width (px)', 'king-addons'),
435 'type' => Controls_Manager::NUMBER,
436 'min' => 1,
437 'step' => 1,
438 'default' => 1,
439 'selectors' => [
440 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner span' => '-webkit-text-stroke-width: {{SIZE}}px;',
441 ],
442 'condition' => [
443 'kng_auto_scroll_txt_effect' => 'outline-stroke',
444 'kng_auto_scroll_txt_content_type' => 'text'
445 ]
446 ]
447 );
448 /** END Outline Stroke ========================================== */
449
450 /** Text Gradient ========================================== */
451 $repeater->add_group_control(
452 Group_Control_Background::get_type(),
453 [
454 'name' => 'kng_auto_scroll_txt_effect_gradient',
455 'types' => ['gradient'],
456 'fields_options' => [
457 'color' => [
458 'default' => '#574ff7',
459 ],
460 'background' => [
461 'default' => 'gradient',
462 ]
463 ],
464 'exclude' => ['classic', 'image'],
465 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner',
466 'condition' => [
467 'kng_auto_scroll_txt_effect' => 'text-gradient',
468 'kng_auto_scroll_txt_content_type' => 'text'
469 ]
470 ]
471 );
472 /** END: Text Gradient ========================================== */
473
474 /** Underline Gradient ========================================== */
475 $repeater->add_group_control(
476 Group_Control_Background::get_type(),
477 [
478 'name' => 'kng_auto_scroll_txt_underline_effects_gradient',
479 'types' => ['gradient'],
480 'fields_options' => [
481 'color' => [
482 'default' => '#84fab0',
483 ],
484 'color_b' => [
485 'default' => '#8fd3f4',
486 ],
487 'background' => [
488 'default' => 'gradient',
489 ],
490 'gradient_type' => [
491 'default' => 'linear'
492 ],
493 'gradient_angle' => [
494 'default' => [
495 'unit' => 'deg',
496 'size' => 120,
497 ],
498 ]
499 ],
500 'exclude' => ['classic', 'image'],
501 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner',
502 'condition' => [
503 'kng_auto_scroll_txt_effect' => 'underline-gradient',
504 'kng_auto_scroll_txt_content_type' => 'text'
505 ]
506 ]
507 );
508
509 $repeater->add_control(
510 'kng_auto_scroll_txt_underline_effects_bg_position',
511 [
512 'label' => esc_html__('Vertical Position (%)', 'king-addons'),
513 'type' => Controls_Manager::SLIDER,
514 'size_units' => ['%'],
515 'range' => [
516 '%' => [
517 'min' => 0,
518 'max' => 100,
519 'step' => 1,
520 ],
521 ],
522 'default' => [
523 'unit' => '%',
524 'size' => 88,
525 ],
526 'separator' => 'before',
527 'selectors' => [
528 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner' => 'background-position: 0 {{SIZE}}{{UNIT}}; background-repeat: no-repeat;',
529 ],
530 'condition' => [
531 'kng_auto_scroll_txt_effect' => 'underline-gradient',
532 'kng_auto_scroll_txt_content_type' => 'text'
533 ]
534 ]
535 );
536
537 $repeater->add_control(
538 'kng_auto_scroll_txt_underline_effects_bg_height',
539 [
540 'label' => esc_html__('Height (%)', 'king-addons'),
541 'type' => Controls_Manager::SLIDER,
542 'size_units' => ['%'],
543 'range' => [
544 '%' => [
545 'min' => 0,
546 'max' => 100,
547 'step' => 1,
548 ],
549 ],
550 'default' => [
551 'unit' => '%',
552 'size' => 20,
553 ],
554 'selectors' => [
555 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner' => 'background-size: 100% {{SIZE}}{{UNIT}};',
556 ],
557 'condition' => [
558 'kng_auto_scroll_txt_effect' => 'underline-gradient',
559 'kng_auto_scroll_txt_content_type' => 'text'
560 ]
561 ]
562 );
563
564 $repeater->add_control(
565 'kng_auto_scroll_txt_underline_effects_bg_height_hover',
566 [
567 'label' => esc_html__('Height on mouse hover (%)', 'king-addons'),
568 'type' => Controls_Manager::SLIDER,
569 'size_units' => ['%'],
570 'range' => [
571 '%' => [
572 'min' => 0,
573 'max' => 100,
574 'step' => 1,
575 ],
576 ],
577 'default' => [
578 'unit' => '%',
579 'size' => 88,
580 ],
581 'selectors' => [
582 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner:hover' => 'background-size: 100% {{SIZE}}{{UNIT}};',
583 ],
584 'condition' => [
585 'kng_auto_scroll_txt_effect' => 'underline-gradient',
586 'kng_auto_scroll_txt_content_type' => 'text'
587 ]
588 ]
589 );
590
591 /** END: Underline Gradient ========================================== */
592
593 /** END: TEXT EFFECTS ========================================== */
594 /** =========================================================== */
595
596 $repeater->add_control(
597 'kng_auto_scroll_txt_content',
598 [
599 'label' => '<b>' . esc_html__('Text', 'king-addons') . '</b>',
600 'type' => Controls_Manager::TEXTAREA,
601 'default' => esc_html__('Text', 'king-addons'),
602 'condition' => [
603 'kng_auto_scroll_txt_content_type' => 'text'
604 ],
605 'separator' => 'before',
606 ]
607 );
608 /** END: Content Type TEXT ========================================== */
609
610 /** Content Type IMAGE ========================================== */
611 $repeater->add_control(
612 'kng_auto_scroll_txt_image',
613 [
614 'label' => esc_html__('Image', 'king-addons'),
615 'type' => Controls_Manager::MEDIA,
616 'default' => [
617 'url' => Utils::get_placeholder_image_src(),
618 ],
619 'condition' => [
620 'kng_auto_scroll_txt_content_type' => 'image'
621 ]
622 ]
623 );
624
625 $repeater->add_group_control(
626 Group_Control_Image_Size::get_type(),
627 [
628 'name' => 'kng_auto_scroll_txt_image_size',
629 'default' => 'full',
630 'separator' => 'before',
631 'condition' => [
632 'kng_auto_scroll_txt_content_type' => 'image'
633 ]
634 ]
635 );
636
637 $repeater->add_responsive_control(
638 'kng_image_comparison_box_max_width',
639 [
640 'label' => esc_html__('Width (px)', 'king-addons'),
641 'type' => Controls_Manager::NUMBER,
642 'min' => 0,
643 'step' => 1,
644 'default' => 50,
645 'selectors' => [
646 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text img' => 'width: {{SIZE}}px;'
647 ],
648 'condition' => [
649 'kng_auto_scroll_txt_content_type' => 'image'
650 ]
651 ]
652 );
653
654 $repeater->add_group_control(
655 Group_Control_Box_Shadow::get_type(),
656 [
657 'name' => 'kng_auto_scroll_txt_image_shadow',
658 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text img',
659 'condition' => [
660 'kng_auto_scroll_txt_content_type' => 'image'
661 ]
662 ]
663 );
664
665 $repeater->add_group_control(
666 Group_Control_Border::get_type(),
667 [
668 'name' => 'kng_auto_scroll_txt_image_border',
669 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text img',
670 'condition' => [
671 'kng_auto_scroll_txt_content_type' => 'image'
672 ]
673 ]
674 );
675
676 $repeater->add_responsive_control(
677 'kng_auto_scroll_txt_image_border_radius',
678 [
679 'label' => esc_html__('Border Radius', 'king-addons'),
680 'type' => Controls_Manager::DIMENSIONS,
681 'size_units' => ['px', '%'],
682 'selectors' => [
683 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
684 ],
685 'condition' => [
686 'kng_auto_scroll_txt_content_type' => 'image'
687 ]
688 ]
689 );
690
691 $repeater->add_control(
692 'kng_auto_scroll_txt_image_custom_vertical_align',
693 [
694 'label' => esc_html__('Custom Vertical Align', 'king-addons'),
695 'type' => Controls_Manager::SWITCHER,
696 'condition' => [
697 'kng_auto_scroll_txt_content_type' => 'image'
698 ]
699 ]
700 );
701
702 $repeater->add_responsive_control(
703 'kng_auto_scroll_txt_image_vertical_align',
704 [
705 'label' => esc_html__('Vertical Align', 'king-addons'),
706 'type' => Controls_Manager::SELECT,
707 'options' => [
708 'baseline' => esc_html__('baseline', 'king-addons'),
709 'top' => esc_html__('top', 'king-addons'),
710 'bottom' => esc_html__('bottom', 'king-addons'),
711 'sub' => esc_html__('sub', 'king-addons'),
712 'super' => esc_html__('super', 'king-addons'),
713 'text-top' => esc_html__('text-top', 'king-addons'),
714 'text-bottom' => esc_html__('text-bottom', 'king-addons'),
715 'middle' => esc_html__('middle', 'king-addons'),
716 ],
717 'default' => 'baseline',
718 'selectors' => [
719 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text img' => 'vertical-align: {{VALUE}};',
720 ],
721 'condition' => [
722 'kng_auto_scroll_txt_image_custom_vertical_align!' => '',
723 'kng_auto_scroll_txt_content_type' => 'image'
724 ]
725 ]
726 );
727
728 $repeater->add_control(
729 'kng_auto_scroll_txt_image_margin_switcher',
730 [
731 'label' => esc_html__('Custom Margin', 'king-addons'),
732 'type' => Controls_Manager::SWITCHER,
733 'condition' => [
734 'kng_auto_scroll_txt_content_type' => 'image'
735 ]
736 ]
737 );
738
739 $repeater->add_responsive_control(
740 'kng_auto_scroll_txt_image_margin',
741 [
742 'label' => esc_html__('Margin', 'king-addons'),
743 'type' => Controls_Manager::DIMENSIONS,
744 'size_units' => ['px', '%'],
745 'default' => [
746 'top' => 0,
747 'right' => 0,
748 'bottom' => 0,
749 'left' => 0,
750 ],
751 'selectors' => [
752 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'margin: 0;',
753 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text img' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
754 ],
755 'condition' => [
756 'kng_auto_scroll_txt_image_margin_switcher!' => '',
757 'kng_auto_scroll_txt_content_type' => 'image'
758 ]
759 ]
760 );
761 /** END: Content Type IMAGE ========================================== */
762
763 $repeater->add_control(
764 'kng_auto_scroll_txt_content_common_for_all_types_head',
765 [
766 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Common for all types', 'king-addons'),
767 'type' => Controls_Manager::HEADING,
768 ]
769 );
770
771 $repeater->add_control(
772 'kng_auto_scroll_txt_custom_css_class_switcher',
773 [
774 'label' => esc_html__('Custom CSS Class', 'king-addons'),
775 'type' => Controls_Manager::SWITCHER,
776 ]
777 );
778
779 $repeater->add_control(
780 'kng_auto_scroll_txt_custom_css_class',
781 [
782 'label' => esc_html__('CSS Class', 'king-addons'),
783 'type' => Controls_Manager::TEXT,
784 'placeholder' => esc_html__('Type or paste the class', 'king-addons'),
785 'ai' => [
786 'active' => false,
787 ],
788 'separator' => 'after',
789 'condition' => [
790 'kng_auto_scroll_txt_custom_css_class_switcher!' => '',
791 ]
792 ]
793 );
794
795 $repeater->add_control(
796 'kng_auto_scroll_txt_transform_switcher',
797 [
798 'label' => esc_html__('Transform', 'king-addons'),
799 'type' => Controls_Manager::SWITCHER,
800 ]
801 );
802
803 $repeater->add_responsive_control(
804 'kng_auto_scroll_txt_transform_rotate',
805 [
806 'label' => esc_html__('Rotate', 'king-addons') . ' (deg)',
807 'type' => Controls_Manager::NUMBER,
808 'min' => -360,
809 'max' => 360,
810 'step' => 5,
811 'default' => 0,
812 'selectors' => [
813 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner' => 'transform: rotateZ({{SIZE}}deg); display: inline-block;',
814 ],
815 'condition' => [
816 'kng_auto_scroll_txt_transform_switcher!' => '',
817 ],
818 'frontend_available' => true,
819 ]
820 );
821
822 $repeater->add_responsive_control(
823 'kng_auto_scroll_txt_transform_offset_X',
824 [
825 'label' => esc_html__('Offset X', 'king-addons'),
826 'type' => Controls_Manager::SLIDER,
827 'size_units' => ['px', '%', 'em', 'rem', 'vw', 'custom'],
828 'range' => [
829 '%' => [
830 'min' => -100,
831 'max' => 100,
832 ],
833 'px' => [
834 'min' => -1000,
835 'max' => 1000,
836 ],
837 ],
838 'condition' => [
839 'kng_auto_scroll_txt_transform_switcher!' => '',
840 ],
841 'selectors' => [
842 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner span' => 'transform: translateX({{SIZE}}{{UNIT}}); display: inline-block;',
843 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text .king-addons-auto-scrolling-text-inner img' => 'transform: translateX({{SIZE}}{{UNIT}}); display: inline-block;',
844 ],
845 'frontend_available' => true,
846 ]
847 );
848
849 $repeater->add_responsive_control(
850 'kng_auto_scroll_txt_transform_offset_Y',
851 [
852 'label' => esc_html__('Offset Y', 'king-addons'),
853 'type' => Controls_Manager::SLIDER,
854 'size_units' => ['px', '%', 'em', 'rem', 'vh', 'custom'],
855 'range' => [
856 '%' => [
857 'min' => -100,
858 'max' => 100,
859 ],
860 'px' => [
861 'min' => -1000,
862 'max' => 1000,
863 ],
864 ],
865 'condition' => [
866 'kng_auto_scroll_txt_transform_switcher!' => '',
867 ],
868 'selectors' => [
869 '{{WRAPPER}} {{CURRENT_ITEM}}.king-addons-auto-scrolling-text' => 'transform: translateY({{SIZE}}{{UNIT}}); display: inline-block;',
870 ],
871 'frontend_available' => true,
872 ]
873 );
874
875 $repeater->add_control(
876 'kng_auto_scroll_txt_link_switcher',
877 [
878 'label' => esc_html__('Link', 'king-addons'),
879 'type' => Controls_Manager::SWITCHER,
880 ]
881 );
882
883 $repeater->add_control(
884 'kng_auto_scroll_txt_link',
885 [
886 'label' => esc_html__('Link', 'king-addons'),
887 'type' => Controls_Manager::URL,
888 'condition' => [
889 'kng_auto_scroll_txt_link_switcher!' => '',
890 ]
891 ]
892 );
893
894 $this->add_control(
895 'kng_auto_scroll_txt_content_items',
896 [
897 'type' => Controls_Manager::REPEATER,
898 'fields' => $repeater->get_controls(),
899 'default' => [
900 [
901 'kng_auto_scroll_txt_content_type' => 'text',
902 'kng_auto_scroll_txt_content' => esc_html__('King Addons', 'king-addons'),
903 ],
904 [
905 'kng_auto_scroll_txt_content_type' => 'text',
906 'kng_auto_scroll_txt_content' => esc_html__('King Addons', 'king-addons'),
907 ],
908 [
909 'kng_auto_scroll_txt_content_type' => 'text',
910 'kng_auto_scroll_txt_content' => esc_html__('King Addons', 'king-addons'),
911 ]
912 ],
913 'title_field' => '<# if( "text" === kng_auto_scroll_txt_content_type ) { #> {{kng_auto_scroll_txt_content}} <# } else if( "image" === kng_auto_scroll_txt_content_type) {#> <img class="king-addons-repeater-list-img-icon" src="{{kng_auto_scroll_txt_image.url}}"> <# } #>',
914 ]
915 );
916
917 $this->end_controls_section();
918 /** END SECTION: Texts ===================== */
919
920 /** SECTION: Carousel Settings */
921 $this->start_controls_section(
922 'kng_auto_scroll_txt_content_section_caousel_settings',
923 [
924 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Carousel Settings', 'king-addons'),
925 'tab' => Controls_Manager::TAB_CONTENT,
926 ]
927 );
928
929 $this->add_responsive_control(
930 'kng_auto_scroll_txt_space_between_items',
931 [
932 'label' => esc_html__('Space between items (px)', 'king-addons'),
933 'type' => Controls_Manager::NUMBER,
934 'min' => 0,
935 'step' => 1,
936 'default' => 50,
937 'selectors' => [
938 '{{WRAPPER}} .king-addons-auto-scrolling-text' => 'margin-right: {{VALUE}}px;',
939 ],
940 ]
941 );
942
943 $this->add_responsive_control(
944 'kng_auto_scroll_txt_animation_speed',
945 [
946 'label' => esc_html__('Animation Speed (s)', 'king-addons'),
947 'type' => Controls_Manager::NUMBER,
948 'min' => 0,
949 'step' => 1,
950 'default' => 80,
951 'selectors' => [
952 '{{WRAPPER}} .king-addons-auto-scrolling-text-wrapper' => 'animation-duration: {{VALUE}}s;',
953 ],
954 ]
955 );
956
957 $this->end_controls_section();
958 /** END SECTION: Carousel Settings */
959
960 /** END TAB: CONTENT ===================== */
961
962 /** START TAB: STYLE ===================== */
963 /** SECTION: Common Styles ===================== */
964 $this->start_controls_section(
965 'kng_auto_scroll_txt_style_section_commmon_styles',
966 [
967 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Common Styles', 'king-addons'),
968 'tab' => Controls_Manager::TAB_STYLE,
969 ]
970 );
971
972 $this->add_group_control(
973 Group_Control_Typography::get_type(),
974 [
975 'label' => esc_html__('Typography', 'king-addons'),
976 'name' => 'kng_auto_scroll_txt_common_typography',
977 'selector' => '{{WRAPPER}} .king-addons-auto-scrolling-text',
978 'fields_options' => [
979 'font_size' => [
980 'default' => [
981 'size' => 50,
982 'unit' => 'px'
983 ],
984 ],
985 'typography' => [
986 'default' => 'custom',
987 ]
988 ],
989 ]
990 );
991
992 $this->add_control(
993 'kng_auto_scroll_txt_common_color',
994 [
995 'label' => esc_html__('Text Color', 'king-addons'),
996 'type' => Controls_Manager::COLOR,
997 'selectors' => [
998 '{{WRAPPER}} .king-addons-auto-scrolling-text' => 'color: {{VALUE}};',
999 ],
1000 ]
1001 );
1002
1003 $this->add_responsive_control(
1004 'kng_auto_scroll_txt_common_items_padding',
1005 [
1006 'label' => esc_html__('Items Padding', 'king-addons'),
1007 'type' => Controls_Manager::DIMENSIONS,
1008 'size_units' => ['px', 'em', '%'],
1009 'default' => [
1010 'top' => 0,
1011 'right' => 0,
1012 'bottom' => 0,
1013 'left' => 0,
1014 'unit' => 'px',
1015 ],
1016 'selectors' => [
1017 '{{WRAPPER}} .king-addons-auto-scrolling-text' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1018 ],
1019 'separator' => 'before',
1020 ]
1021 );
1022
1023 $this->end_controls_section();
1024 /** END SECTION: Common Styles ===================== */
1025 /** END TAB: STYLE ===================== */
1026 }
1027
1028 protected function render(): void
1029 {
1030 $settings = Core::displaySettings($this);
1031 $this_ID = $this->get_id();
1032 ?>
1033 <div class="king-addons-auto-scrolling-text-items-wrapper">
1034 <div class="king-addons-auto-scrolling-text-items king-addons-auto-scrolling-text-items-<?php echo esc_attr($this_ID); ?>">
1035 <div class="king-addons-auto-scrolling-text-wrapper king-addons-auto-scrolling-text-wrapper-<?php echo esc_attr($this_ID); ?>">
1036 <div class="king-addons-auto-scrolling-text-group">
1037 <?php
1038
1039 $item_count = 0;
1040
1041 /** @noinspection PhpUnusedLocalVariableInspection */
1042 foreach ($settings['kng_auto_scroll_txt_content_items'] as $key => $item) {
1043
1044 $content_type = $item['kng_auto_scroll_txt_content_type'];
1045 $item_tag = 'span';
1046
1047 $this->add_render_attribute('kng_auto_scroll_txt_content_inner_attribute' . $item_count, 'class', 'king-addons-auto-scrolling-text-inner');
1048
1049 // If the item has link
1050 if ('yes' === $item['kng_auto_scroll_txt_link_switcher']) {
1051 if ('' !== $item['kng_auto_scroll_txt_link']['url']) {
1052
1053 $item_tag = 'a';
1054
1055 $this->add_render_attribute('kng_auto_scroll_txt_content_inner_attribute' . $item_count, 'href', esc_url($item['kng_auto_scroll_txt_link']['url']));
1056
1057 if ($item['kng_auto_scroll_txt_link']['is_external']) {
1058 $this->add_render_attribute('kng_auto_scroll_txt_content_inner_attribute' . $item_count, 'target', '_blank');
1059 }
1060
1061 if ($item['kng_auto_scroll_txt_link']['nofollow']) {
1062 $this->add_render_attribute('kng_auto_scroll_txt_content_inner_attribute' . $item_count, 'rel', 'nofollow');
1063 }
1064
1065 }
1066 }
1067
1068 // If the item has custom CSS class
1069 if ('yes' === $item['kng_auto_scroll_txt_custom_css_class_switcher']) {
1070 if ('' !== $item['kng_auto_scroll_txt_custom_css_class']) {
1071 $this->add_render_attribute('kng_auto_scroll_txt_content_inner_attribute' . $item_count, 'class', esc_attr($item['kng_auto_scroll_txt_custom_css_class']));
1072 }
1073 }
1074
1075 /** START: Text Item ===================== */
1076 if ('text' === $content_type) {
1077
1078 $txt_effect = $item['kng_auto_scroll_txt_effect'];
1079 $txt_effect_class = '';
1080
1081 switch ($txt_effect) {
1082 case 'text-gradient':
1083 $txt_effect_class = ' king-addons-auto-scrolling-text-gradient';
1084 break;
1085 case 'underline-gradient':
1086 $txt_effect_class = ' king-addons-auto-scrolling-text-underline-gradient';
1087 break;
1088 }
1089
1090 if ('' !== $item['kng_auto_scroll_txt_content']) {
1091
1092 echo '<span class="elementor-repeater-item-' .
1093 esc_attr($item['_id']) .
1094 esc_attr($txt_effect_class) . ' king-addons-auto-scrolling-text">';
1095
1096 $html = '<' . esc_attr($item_tag) . ' ' . $this->get_render_attribute_string('kng_auto_scroll_txt_content_inner_attribute' . $item_count) . '>';
1097 echo wp_kses($html, wp_kses_allowed_html('post'));
1098
1099 echo '<span>' . wp_kses_post($item['kng_auto_scroll_txt_content']) . '</span>';
1100 echo '</' . esc_attr($item_tag) . '></span>';
1101
1102 }
1103
1104 }
1105 /** END: Text Item ===================== */
1106
1107 /** START: Image Item ===================== */
1108 if ('image' === $content_type) {
1109
1110 if ('' !== $item['kng_auto_scroll_txt_image']) {
1111
1112 echo '<span class="elementor-repeater-item-' .
1113 esc_attr($item['_id']) . ' king-addons-auto-scrolling-text">';
1114
1115 $html = '<' . esc_attr($item_tag) . ' ' . $this->get_render_attribute_string('kng_auto_scroll_txt_content_inner_attribute' . $item_count) . '>';
1116 echo wp_kses($html, wp_kses_allowed_html('post'));
1117
1118 $image_html = Group_Control_Image_Size::get_attachment_image_html($item, 'kng_auto_scroll_txt_image_size', 'kng_auto_scroll_txt_image');
1119
1120 // Define allowed tags and attributes
1121 $allowed_tags = wp_kses_allowed_html('post');
1122 $allowed_tags['img']['srcset'] = true; // Allow srcset attribute for img tag
1123 $allowed_tags['img']['sizes'] = true; // Allow sizes attribute for img tag
1124 $allowed_tags['img']['decoding'] = true; // Allow decoding attribute for img tag
1125 $allowed_tags['img']['loading'] = true; // Allow loading attribute for img tag. It is for the lazy loading possibility.
1126
1127 // Sanitize the image HTML using the extended set of allowed tags and attributes
1128 echo wp_kses($image_html, $allowed_tags);
1129
1130 echo '</' . esc_attr($item_tag) . '></span>';
1131
1132 }
1133
1134 }
1135 /** END: Image Item ===================== */
1136
1137 $item_count++;
1138 } ?>
1139 </div>
1140 </div>
1141 </div>
1142 </div>
1143 <?php
1144 }
1145 }