PluginProbe
Borderless – Addons and Templates for Elementor / trunk
Borderless – Addons and Templates for Elementor vtrunk
trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 All 78 releases
borderless / modules / elementor / widgets / marquee-text.php

marquee-text.php in Borderless – Addons and Templates for Elementor trunk, at modules/elementor/widgets/marquee-text.php

702 lines 22.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Borderless\Widgets;
4
5 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
6
7 use Elementor\Widget_Base;
8 use Elementor\Controls_Manager;
9 use Elementor\Group_Control_Border;
10 use Elementor\Group_Control_Box_Shadow;
11 use Elementor\Group_Control_Image_Size;
12 use \Elementor\Group_Control_Typography;
13 use \Elementor\Group_Control_Background;
14 use \Elementor\Core\Kits\Documents\Tabs\Global_Typography;
15 use \Elementor\Repeater;
16 use Elementor\Utils;
17
18 class Marquee_Text extends Widget_Base {
19
20 public function get_name() {
21 return 'borderless-elementor-marquee-text';
22 }
23
24 public function get_title() {
25 return 'Marquee Text';
26 }
27
28 public function get_icon() {
29 return 'borderless-icon-marquee-text';
30 }
31
32 public function get_categories() {
33 return [ 'borderless' ];
34 }
35
36 public function get_style_depends() {
37 return [ 'elementor-widget-marquee-text' ];
38 }
39
40 public function get_script_depends() {
41 return [ 'borderless-elementor-marquee-script' ];
42 }
43
44 protected function _register_controls() {
45
46 /*-----------------------------------------------------------------------------------*/
47 /* Marquee Text - Content
48 /*-----------------------------------------------------------------------------------*/
49
50 $this->start_controls_section(
51 'borderless_elementor_section_marquee_text_content',
52 [
53 'label' => esc_html__( 'Content', 'borderless' ),
54 'tab' => Controls_Manager::TAB_CONTENT,
55 ]
56 );
57
58 $repeater = new Repeater();
59
60 $repeater->add_control(
61 'borderless_elementor_marquee_text_content_type',
62 [
63 'label' => esc_html__( 'Content Type', 'borderless' ),
64 'type' => Controls_Manager::SELECT,
65 'default' => 'editor',
66 'options' => [
67 'editor' => esc_html__( 'Editor', 'borderless' ),
68 'image' => esc_html__( 'Image', 'borderless' ),
69 'icon' => esc_html__( 'Icon', 'borderless' ),
70 ],
71 ]
72 );
73
74 $repeater->add_control(
75 'borderless_elementor_marquee_text_editor_content',
76 [
77 'label' => esc_html__( 'Editor Content', 'borderless' ),
78 'type' => Controls_Manager::WYSIWYG,
79 'default' => '',
80 'condition' => [
81 'borderless_elementor_marquee_text_content_type' => 'editor',
82 ],
83 ]
84 );
85
86 $repeater->add_control(
87 'borderless_elementor_marquee_text_image_content',
88 [
89 'label' => esc_html__( 'Image', 'borderless' ),
90 'type' => Controls_Manager::MEDIA,
91 'default' => [
92 'url' => Utils::get_placeholder_image_src(),
93 ],
94 'condition' => [
95 'borderless_elementor_marquee_text_content_type' => 'image',
96 ],
97 ]
98 );
99
100 $repeater->add_control(
101 'borderless_elementor_marquee_text_image_resolution',
102 [
103 'label' => esc_html__( 'Image Resolution', 'borderless' ),
104 'type' => Controls_Manager::SELECT,
105 'default' => 'full',
106 'options' => [
107 'full' => esc_html__( 'Full', 'borderless' ),
108 'thumbnail' => esc_html__( 'Thumbnail', 'borderless' ),
109 'medium' => esc_html__( 'Medium', 'borderless' ),
110 'large' => esc_html__( 'Large', 'borderless' ),
111 ],
112 'condition' => [
113 'borderless_elementor_marquee_text_content_type' => 'image',
114 ],
115 ]
116 );
117
118 $repeater->add_control(
119 'borderless_elementor_marquee_text_image_link',
120 [
121 'label' => esc_html__( 'Link', 'borderless' ),
122 'type' => Controls_Manager::URL,
123 'placeholder' => esc_html__( 'https://your-link.com', 'borderless' ),
124 'default' => [
125 'url' => '',
126 ],
127 'condition' => [
128 'borderless_elementor_marquee_text_content_type' => 'image',
129 ],
130 ]
131 );
132
133 $repeater->add_control(
134 'borderless_elementor_marquee_text_icon_content',
135 [
136 'label' => esc_html__( 'Icon', 'borderless' ),
137 'type' => Controls_Manager::ICONS,
138 'default' => [
139 'value' => '',
140 'library' => 'fa-solid',
141 ],
142 'condition' => [
143 'borderless_elementor_marquee_text_content_type' => 'icon',
144 ],
145 ]
146 );
147
148 $repeater->add_control(
149 'borderless_elementor_marquee_text_icon_link',
150 [
151 'label' => esc_html__( 'Link', 'borderless' ),
152 'type' => Controls_Manager::URL,
153 'placeholder' => esc_html__( 'https://your-link.com', 'borderless' ),
154 'default' => [
155 'url' => '',
156 ],
157 'condition' => [
158 'borderless_elementor_marquee_text_content_type' => 'icon',
159 ],
160 ]
161 );
162
163 $this->add_control(
164 'borderless_elementor_marquee_item_strings',
165 [
166 'type' => Controls_Manager::REPEATER,
167 'show_label' => true,
168 'fields' => $repeater->get_controls(),
169 'title_field' => '{{ borderless_elementor_marquee_text_content_type }}',
170 'default' => [
171 [
172 'borderless_elementor_marquee_text_content_type' => 'editor',
173 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #1', 'borderless' ),
174 ],
175 [
176 'borderless_elementor_marquee_text_content_type' => 'editor',
177 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #2', 'borderless' ),
178 ],
179 [
180 'borderless_elementor_marquee_text_content_type' => 'editor',
181 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #3', 'borderless' ),
182 ],
183 [
184 'borderless_elementor_marquee_text_content_type' => 'editor',
185 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #4', 'borderless' ),
186 ],
187 [
188 'borderless_elementor_marquee_text_content_type' => 'editor',
189 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #5', 'borderless' ),
190 ],
191 [
192 'borderless_elementor_marquee_text_content_type' => 'editor',
193 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #6', 'borderless' ),
194 ],
195 [
196 'borderless_elementor_marquee_text_content_type' => 'editor',
197 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #7', 'borderless' ),
198 ],
199 [
200 'borderless_elementor_marquee_text_content_type' => 'editor',
201 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #8', 'borderless' ),
202 ],
203 [
204 'borderless_elementor_marquee_text_content_type' => 'editor',
205 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #9', 'borderless' ),
206 ],
207 [
208 'borderless_elementor_marquee_text_content_type' => 'editor',
209 'borderless_elementor_marquee_text_editor_content' => esc_html__( 'Item #10', 'borderless' ),
210 ],
211 ],
212 ]
213 );
214
215 $this->end_controls_section();
216
217 /*-----------------------------------------------------------------------------------*/
218 /* Marquee Text/Settings - Content (Settings Tab)
219 /*-----------------------------------------------------------------------------------*/
220
221 $this->start_controls_section(
222 'borderless_elementor_section_marquee_text_settings',
223 [
224 'label' => esc_html__( 'Settings', 'borderless' ),
225 'tab' => Controls_Manager::TAB_CONTENT,
226 ]
227 );
228
229 $this->add_responsive_control(
230 'borderless_elementor_marquee_text_start_visible',
231 [
232 'label' => __( 'Start Visible', 'borderless' ),
233 'type' => Controls_Manager::SWITCHER,
234 'return_value' => 'true',
235 'default' => 'true',
236 ]
237 );
238
239 $this->add_responsive_control(
240 'borderless_elementor_marquee_text_pause_on_hover',
241 [
242 'label' => __( 'Pause On Hover', 'borderless' ),
243 'type' => Controls_Manager::SWITCHER,
244 'return_value' => 'true',
245 'default' => 'false',
246 ]
247 );
248
249 $this->add_responsive_control(
250 'borderless_elementor_marquee_text_duplicated',
251 [
252 'label' => __( 'Duplicated', 'borderless' ),
253 'type' => Controls_Manager::SWITCHER,
254 'return_value' => 'true',
255 'default' => 'true',
256 ]
257 );
258
259 $this->add_responsive_control(
260 'borderless_elementor_marquee_text_number_of_duplicates',
261 [
262 'label' => __( 'Number Of Duplicates', 'borderless' ),
263 'type' => Controls_Manager::NUMBER,
264 'min' => 1,
265 'max' => 10,
266 'step' => 1,
267 'default' => 2,
268 'condition' => [
269 'borderless_elementor_marquee_text_duplicated' => 'true',
270 ],
271 ]
272 );
273
274 $this->add_responsive_control(
275 'borderless_elementor_marquee_text_gap_between_duplicates',
276 [
277 'label' => __( 'Gap Between Duplicates', 'borderless' ),
278 'type' => Controls_Manager::NUMBER,
279 'min' => 0,
280 'max' => 99999,
281 'step' => 1,
282 'default' => 24,
283 'condition' => [
284 'borderless_elementor_marquee_text_duplicated' => 'true',
285 ],
286 ]
287 );
288
289 $this->add_responsive_control(
290 'borderless_elementor_marquee_text_direction',
291 [
292 'label' => __( 'Direction', 'borderless' ),
293 'type' => Controls_Manager::SELECT,
294 'default' => 'left',
295 'options' => [
296 'left' => __( 'Left', 'borderless' ),
297 'right' => __( 'Right', 'borderless' ),
298 ],
299 ]
300 );
301
302 $this->add_responsive_control(
303 'borderless_elementor_marquee_text_duration',
304 [
305 'label' => __( 'Duration', 'borderless' ),
306 'type' => Controls_Manager::NUMBER,
307 'min' => 100,
308 'max' => 100000,
309 'step' => 100,
310 'default' => 5000,
311 ]
312 );
313
314 $this->add_responsive_control(
315 'borderless_elementor_marquee_text_delay_before_start',
316 [
317 'label' => __( 'Delay Before Start', 'borderless' ),
318 'type' => Controls_Manager::NUMBER,
319 'min' => 0,
320 'max' => 99999,
321 'step' => 1,
322 'default' => 0,
323 ]
324 );
325
326 $this->add_control(
327 'borderless_elementor_marquee_text_divider_enable',
328 [
329 'label' => __( 'Enable Divider', 'borderless' ),
330 'type' => Controls_Manager::SWITCHER,
331 'label_on' => __( 'Yes', 'borderless' ),
332 'label_off' => __( 'No', 'borderless' ),
333 'return_value' => 'true',
334 'default' => 'false',
335 ]
336 );
337
338 $this->add_control(
339 'borderless_elementor_marquee_text_divider_icon',
340 [
341 'label' => __( 'Divider Icon', 'borderless' ),
342 'type' => Controls_Manager::ICONS,
343 'default' => [
344 'value' => '',
345 'library' => 'fa-solid',
346 ],
347 'condition' => [
348 'borderless_elementor_marquee_text_divider_enable' => 'true',
349 ],
350 ]
351 );
352
353 $this->end_controls_section();
354
355 /*-----------------------------------------------------------------------------------*/
356 /* General - Style
357 /*-----------------------------------------------------------------------------------*/
358
359 $this->start_controls_section(
360 'borderless_elementor_section_general',
361 [
362 'label' => esc_html__( 'General', 'borderless' ),
363 'tab' => Controls_Manager::TAB_STYLE,
364 ]
365 );
366
367 $this->add_responsive_control(
368 'borderless_elementor_marquee_text_angle',
369 [
370 'label' => esc_html__( 'Angle', 'borderless' ),
371 'type' => Controls_Manager::SLIDER,
372 'size_units' => [ 'deg' ],
373 'range' => [
374 'deg' => [
375 'min' => -45,
376 'max' => 45,
377 ],
378 ],
379 'default' => [
380 'size' => 0,
381 'unit' => 'deg',
382 ],
383 'selectors' => [
384 '{{WRAPPER}} .borderless-elementor-marquee-text' => 'transform: rotate({{SIZE}}{{UNIT}});',
385 ],
386 ]
387 );
388
389 $this->add_responsive_control(
390 'borderless_elementor_marquee_text_gap_between_items',
391 [
392 'label' => __( 'Gap Between Items', 'borderless' ),
393 'type' => Controls_Manager::NUMBER,
394 'min' => 0,
395 'max' => 99999,
396 'step' => 1,
397 'default' => 24,
398 'selectors' => [
399 '{{WRAPPER}} .borderless-elementor-marquee-text .js-marquee' => 'gap: {{VALUE}}px',
400 ],
401 ]
402 );
403
404 $this->end_controls_section();
405
406 /*-----------------------------------------------------------------------------------*/
407 /* Divider - Style
408 /*-----------------------------------------------------------------------------------*/
409
410 $this->start_controls_section(
411 'borderless_elementor_section_divider',
412 [
413 'label' => esc_html__( 'Divider', 'borderless' ),
414 'tab' => Controls_Manager::TAB_STYLE,
415 ]
416 );
417
418 $this->add_responsive_control(
419 'borderless_elementor_marquee_text_divider_icon_width',
420 [
421 'label' => esc_html__( 'Width', 'borderless' ),
422 'type' => Controls_Manager::SLIDER,
423 'size_units' => [ 'px', 'em', '%', 'rem' ],
424 'range' => [
425 'px' => [
426 'min' => 10,
427 'max' => 100,
428 ],
429 'em' => [
430 'min' => 1,
431 'max' => 10,
432 ],
433 '%' => [
434 'min' => 10,
435 'max' => 100,
436 ],
437 'rem' => [
438 'min' => 1,
439 'max' => 10,
440 ],
441 ],
442 'default' => [
443 'size' => 16,
444 'unit' => 'px',
445 ],
446 'condition' => [
447 'borderless_elementor_marquee_text_divider_icon[value]!' => '',
448 ],
449 ]
450 );
451
452 $this->end_controls_section();
453
454 /*-----------------------------------------------------------------------------------*/
455 /* Marquee Text - Item (Style Tab)
456 /*-----------------------------------------------------------------------------------*/
457
458 $this->start_controls_section(
459 'borderless_elementor_section_marquee_text_item',
460 [
461 'label' => esc_html__( 'Marquee Text Item', 'borderless' ),
462 'tab' => Controls_Manager::TAB_STYLE,
463 ]
464 );
465
466 $this->add_group_control(
467 Group_Control_Typography::get_type(),
468 [
469 'name' => 'borderless_elementor_marquee_text_typography',
470 'label' => __( 'Typography', 'borderless' ),
471 'global' => [
472 'default' => Global_Typography::TYPOGRAPHY_PRIMARY,
473 ],
474 'selector' => '{{WRAPPER}} .borderless-elementor-marquee-text *',
475 ]
476 );
477
478 $this->add_group_control(
479 \Elementor\Group_Control_Text_Shadow::get_type(),
480 [
481 'name' => 'borderless_elementor_marquee_text_shadow',
482 'label' => __( 'Text Shadow', 'borderless' ),
483 'selector' => '{{WRAPPER}} .borderless-elementor-marquee-text *',
484 ]
485 );
486
487 $this->add_control(
488 'borderless_elementor_marquee_text_color',
489 [
490 'label' => __( 'Color', 'borderless' ),
491 'type' => Controls_Manager::COLOR,
492 'selectors' => [
493 '{{WRAPPER}} .borderless-elementor-marquee-text *' => 'color: {{VALUE}}; fill: {{VALUE}};',
494 ],
495 ]
496 );
497
498 $this->add_group_control(
499 Group_Control_Background::get_type(),
500 [
501 'name' => 'borderless_elementor_marquee_text_background',
502 'label' => __( 'Background', 'borderless' ),
503 'types' => [ 'classic', 'gradient' ],
504 'selector' => '{{WRAPPER}} .borderless-elementor-marquee-text .borderless-elementor-marquee-text-item',
505 ]
506 );
507
508 $this->add_responsive_control(
509 'borderless_elementor_marquee_text_padding',
510 [
511 'label' => esc_html__( 'Padding', 'borderless' ),
512 'type' => Controls_Manager::DIMENSIONS,
513 'size_units' => [ 'px', 'em', '%', 'rem' ],
514 'selectors' => [
515 '{{WRAPPER}} .js-marquee .borderless-elementor-marquee-text-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
516 ],
517 ]
518 );
519
520 $this->add_responsive_control(
521 'borderless_elementor_marquee_text_margin',
522 [
523 'label' => esc_html__( 'Margin', 'borderless' ),
524 'type' => Controls_Manager::DIMENSIONS,
525 'size_units' => [ 'px', 'em', '%', 'rem' ],
526 'selectors' => [
527 '{{WRAPPER}} .js-marquee .borderless-elementor-marquee-text-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
528 ],
529 ]
530 );
531
532 $this->add_group_control(
533 Group_Control_Border::get_type(),
534 [
535 'name' => 'borderless_elementor_marquee_text_border',
536 'label' => esc_html__( 'Border', 'borderless' ),
537 'selector' => '{{WRAPPER}} .js-marquee .borderless-elementor-marquee-text-item',
538 ]
539 );
540
541 $this->add_responsive_control(
542 'borderless_elementor_marquee_text_radius',
543 [
544 'label' => esc_html__( 'Border Radius', 'borderless' ),
545 'type' => Controls_Manager::DIMENSIONS,
546 'selectors' => [
547 '{{WRAPPER}} .js-marquee .borderless-elementor-marquee-text-item' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;',
548 ],
549 ]
550 );
551
552 $this->add_group_control(
553 Group_Control_Box_Shadow::get_type(),
554 [
555 'name' => 'borderless_elementor_marquee_text_box_shadow',
556 'exclude' => [
557 'box_shadow_position',
558 ],
559 'selector'=> '{{WRAPPER}} .js-marquee .borderless-elementor-marquee-text-item',
560 ]
561 );
562
563 $this->add_control(
564 'borderless_elementor_marquee_text_icons_divider',
565 [
566 'label' => esc_html__( 'Icons', 'borderless' ),
567 'type' => Controls_Manager::HEADING,
568 'separator' => 'before',
569 ]
570 );
571
572 $this->add_responsive_control(
573 'borderless_elementor_marquee_text_icon_width',
574 [
575 'label' => esc_html__( 'Width', 'borderless' ),
576 'type' => Controls_Manager::SLIDER,
577 'size_units' => [ 'px', 'em', '%', 'rem' ],
578 'range' => [
579 'px' => [
580 'min' => 16,
581 'max' => 320,
582 ],
583 'em' => [
584 'min' => 1,
585 'max' => 20,
586 ],
587 '%' => [
588 'min' => 10,
589 'max' => 100,
590 ],
591 'rem' => [
592 'min' => 1,
593 'max' => 20,
594 ],
595 ],
596 'default' => [
597 'size' => 16,
598 'unit' => 'px',
599 ],
600 'selectors' => [
601 '{{WRAPPER}} .borderless-elementor-marquee-text .icon' => 'width: {{SIZE}}{{UNIT}};',
602 ],
603 ]
604 );
605
606 $this->end_controls_section();
607 }
608
609 protected function render() {
610
611 $settings = $this->get_settings_for_display();
612
613 $this->add_render_attribute( 'marquee-text', 'data-direction', $settings['borderless_elementor_marquee_text_direction'] );
614 $this->add_render_attribute( 'marquee-text', 'data-duration', $settings['borderless_elementor_marquee_text_duration'] );
615 $this->add_render_attribute( 'marquee-text', 'data-delayBeforeStart', $settings['borderless_elementor_marquee_text_delay_before_start'] );
616 $this->add_render_attribute( 'marquee-text', 'data-gap', $settings['borderless_elementor_marquee_text_gap_between_duplicates'] );
617 $this->add_render_attribute( 'marquee-text', 'data-startVisible', $settings['borderless_elementor_marquee_text_start_visible'] );
618 $this->add_render_attribute( 'marquee-text', 'data-duplicated', $settings['borderless_elementor_marquee_text_duplicated'] );
619 $this->add_render_attribute( 'marquee-text', 'data-duplicateCount', $settings['borderless_elementor_marquee_text_number_of_duplicates'] );
620 $this->add_render_attribute( 'marquee-text', 'data-pauseOnHover', $settings['borderless_elementor_marquee_text_pause_on_hover'] );
621
622 $divider = '';
623 if ( ! empty( $settings['borderless_elementor_marquee_text_divider_enable'] ) && 'true' === $settings['borderless_elementor_marquee_text_divider_enable'] && ! empty( $settings['borderless_elementor_marquee_text_divider_icon']['value'] ) ) {
624 $divider_style = '';
625 if ( ! empty( $settings['borderless_elementor_marquee_text_divider_icon_width']['size'] ) ) {
626 $divider_style .= 'width:' . $settings['borderless_elementor_marquee_text_divider_icon_width']['size'] . $settings['borderless_elementor_marquee_text_divider_icon_width']['unit'] . ';';
627 }
628 ob_start();
629 \Elementor\Icons_Manager::render_icon( $settings['borderless_elementor_marquee_text_divider_icon'], [ 'aria-hidden' => 'true', 'style' => $divider_style ] );
630 $divider = ob_get_clean();
631 }
632
633 ?>
634
635 <div class="borderless-elementor-marquee-text-widget">
636 <div class="borderless-elementor-marquee-text">
637 <div class="marquee" <?php echo $this->get_render_attribute_string( 'marquee-text' ); ?>>
638 <?php
639 $items = $settings['borderless_elementor_marquee_item_strings'];
640 $count = count( $items );
641 foreach ( $items as $index => $item ) {
642 $output = '';
643 switch( $item['borderless_elementor_marquee_text_content_type'] ) {
644 case 'editor':
645 $output = wp_kses_post( $item['borderless_elementor_marquee_text_editor_content'] );
646 break;
647 case 'image':
648 if ( ! empty( $item['borderless_elementor_marquee_text_image_content']['id'] ) ) {
649 $image = wp_get_attachment_image( $item['borderless_elementor_marquee_text_image_content']['id'], $item['borderless_elementor_marquee_text_image_resolution'] );
650 } else {
651 $image = '<img src="' . esc_url( $item['borderless_elementor_marquee_text_image_content']['url'] ) . '" alt="">';
652 }
653 if ( ! empty( $item['borderless_elementor_marquee_text_image_link']['url'] ) ) {
654 $output = '<a href="' . esc_url( $item['borderless_elementor_marquee_text_image_link']['url'] ) . '" target="' . ( ! empty( $item['borderless_elementor_marquee_text_image_link']['is_external'] ) ? '_blank' : '_self' ) . '" rel="' . ( ! empty( $item['borderless_elementor_marquee_text_image_link']['nofollow'] ) ? 'nofollow' : '' ) . '">' . $image . '</a>';
655 } else {
656 $output = $image;
657 }
658 break;
659 case 'icon':
660 if ( ! empty( $item['borderless_elementor_marquee_text_icon_content']['value'] ) ) {
661 $style = '';
662 // Use global style settings for icon color, width and height
663 if ( ! empty( $settings['borderless_elementor_marquee_text_icon_width']['size'] ) ) {
664 $style .= 'width:' . $settings['borderless_elementor_marquee_text_icon_width']['size'] . $settings['borderless_elementor_marquee_text_icon_width']['unit'] . ';';
665 }
666 if ( ! empty( $settings['icon_height']['size'] ) ) {
667 $style .= 'height:' . $settings['icon_height']['size'] . $settings['icon_height']['unit'] . ';';
668 }
669 $icon_attributes = [ 'aria-hidden' => 'true', 'class' => 'icon' ];
670 if ( ! empty( $style ) ) {
671 $icon_attributes['style'] = $style;
672 }
673 ob_start();
674 \Elementor\Icons_Manager::render_icon( $item['borderless_elementor_marquee_text_icon_content'], $icon_attributes );
675 $output = ob_get_clean();
676
677 // Wrap with link if icon_link is set
678 if ( ! empty( $item['borderless_elementor_marquee_text_icon_link']['url'] ) ) {
679 $output = '<a href="' . esc_url( $item['borderless_elementor_marquee_text_icon_link']['url'] ) . '" target="' . ( ! empty( $item['borderless_elementor_marquee_text_icon_link']['is_external'] ) ? '_blank' : '_self' ) . '" rel="' . ( ! empty( $item['borderless_elementor_marquee_text_icon_link']['nofollow'] ) ? 'nofollow' : '' ) . '">' . $output . '</a>';
680 }
681 }
682 break;
683 }
684 echo '<div class="borderless-elementor-marquee-text-item">' . $output . '</div>';
685
686 if ( $index < $count - 1 && ! empty( $divider ) ) {
687 echo '<div class="borderless-elementor-marquee-divider">' . $divider . '</div>';
688 }
689 }
690 ?>
691 </div>
692 </div>
693 </div>
694
695 <?php
696 }
697
698 protected function _content_template() {
699
700 }
701 }
702