PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.18
UiCore Elements – Free widgets and templates for Elementor v1.3.18
1.3.18 1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 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.2.0 1.2.1 1.2.2 1.2.3 All 42 releases
← All changes | includes/widgets/highlighted-text.php +619 -602 1.0.12 → 1.3.18 View file →
@@ -1,602 +1,619 @@
1 -<?php
2 -namespace UiCoreElements;
3 -
4 -use Elementor\Controls_Manager;
5 -use Elementor\Repeater;
6 -use Elementor\Group_Control_Typography;
7 -use Elementor\Core\Kits\Documents\Tabs\Global_Colors;
8 -use UiCoreElements\UiCoreWidget;
9 -
10 -defined('ABSPATH') || exit();
11 -
12 -/**
13 - * Highlighted Text
14 - *
15 - * @author Andrei Voica <[email protected]>
16 - * @since 1.0.3
17 - */
18 -class HighlightedText extends UiCoreWidget
19 -{
20 - public function __construct($data = [], $args = null)
21 - {
22 - parent::__construct($data, $args);
23 - }
24 -
25 - public function get_name()
26 - {
27 - return 'highlighted-text';
28 - }
29 - public function get_categories()
30 - {
31 - return ['uicore'];
32 - }
33 -
34 - public function get_title()
35 - {
36 - return __('Highlighted Text', 'uicore-elements');
37 - }
38 -
39 - public function get_icon()
40 - {
41 - return 'eicon-animated-headline ui-e-widget';
42 - }
43 -
44 - public function get_keywords()
45 - {
46 - return [ 'headline', 'heading', 'animation', 'title', 'text' ];
47 - }
48 -
49 - public function get_styles() {
50 - return [
51 - 'highlighted-text'
52 - ];
53 - }
54 -
55 - public function get_scripts()
56 - {
57 - return [
58 - 'highlighted-text' => [
59 - 'condition' => [
60 - 'shape_animation' => 'animate',
61 - ],
62 - // 'deps' => [
63 - // 'uicore-frontend',
64 - // ],
65 - ]
66 - ];
67 - }
68 -
69 - protected function register_controls()
70 - {
71 - $this->start_controls_section(
72 - 'text_elements',
73 - [
74 - 'label' => __( 'Text', 'uicore-elements' ),
75 - ]
76 - );
77 - $repeater = new Repeater();
78 -
79 - $repeater->add_control(
80 - 'type',
81 - [
82 - 'label' => esc_html__( 'Type', 'uicore-elements' ),
83 - 'type' => \Elementor\Controls_Manager::SELECT,
84 - 'default' => 'text',
85 - 'options' => [
86 - 'text' => esc_html__( 'Text', 'uicore-elements' ),
87 - 'icon' => esc_html__( 'Icon', 'uicore-elements' ),
88 - 'image' => esc_html__( 'Image', 'uicore-elements' ),
89 - ],
90 - 'selectors' => [
91 - '{{WRAPPER}} .uicore-repeater-selector' => 'border-style: {{VALUE}};',
92 - ],
93 - 'render_type' => 'template',
94 - ]
95 - );
96 -
97 - $repeater->add_control(
98 - 'text',
99 - [
100 - 'label' => __( 'Text', 'uicore-elements' ),
101 - 'type' => Controls_Manager::TEXT,
102 - 'label_block' => true,
103 - 'placeholder' => __( 'Some Text', 'uicore-elements' ),
104 - 'default' => __( 'Some Text', 'uicore-elements' ),
105 - 'condition' => [ 'type' => 'text' ],
106 - ]
107 - );
108 -
109 - $repeater->add_control(
110 - 'headline_style',
111 - [
112 - 'label' => __( 'Highlight Style', 'uicore-elements' ),
113 - 'type' => Controls_Manager::SELECT,
114 - 'default' => 'none',
115 - 'options' => [
116 - 'none' => __( 'None', 'uicore-elements' ),
117 - 'color' => __( 'No Stroke', 'uicore-elements' ),
118 - 'stroke1' => __( 'Stroke 1', 'uicore-elements' ),
119 - 'stroke2' => __( 'Stroke 2', 'uicore-elements' ),
120 - 'stroke3' => __( 'Stroke 3', 'uicore-elements' ),
121 - 'stroke4' => __( 'Stroke 4', 'uicore-elements' ),
122 - 'stroke5' => __( 'Stroke 5', 'uicore-elements' ),
123 - 'stroke6' => __( 'Stroke 6', 'uicore-elements' ),
124 - 'stroke7' => __( 'Stroke 7', 'uicore-elements' ),
125 - 'stroke8' => __( 'Stroke 8', 'uicore-elements' ),
126 - 'stroke9' => __( 'Stroke 9', 'uicore-elements' ),
127 - ],
128 - 'render_type' => 'template',
129 - 'condition' => [ 'type' => 'text' ],
130 - ]
131 - );
132 -
133 - $repeater->add_control(
134 - 'icon',
135 - [
136 - 'label' => esc_html__( 'Icon', 'uicore-elements' ),
137 - 'type' => \Elementor\Controls_Manager::ICONS,
138 - 'default' => [
139 - 'value' => 'fas fa-circle',
140 - 'library' => 'fa-solid',
141 - ],
142 - 'recommended' => [
143 - 'fa-solid' => [
144 - 'circle',
145 - 'dot-circle',
146 - 'square-full',
147 - ],
148 - 'fa-regular' => [
149 - 'circle',
150 - 'dot-circle',
151 - 'square-full',
152 - ],
153 - ],
154 - 'condition' => [ 'type' => 'icon' ],
155 - ]
156 - );
157 -
158 - $repeater->add_control(
159 - 'icon_color',
160 - [
161 - 'label' => esc_html__( 'Color', 'uicore-elements' ),
162 - 'type' => \Elementor\Controls_Manager::COLOR,
163 - 'selectors' => [
164 - '{{WRAPPER}} {{CURRENT_ITEM}}.ui-e-highlight-icon, {{WRAPPER}} {{CURRENT_ITEM}}' => 'color: {{VALUE}}; fill: {{VALUE}}', //icon as a font + svg
165 -
166 - ],
167 - 'condition' => [ 'type' => ['icon','text'] ],
168 - ]
169 - );
170 - $repeater->add_group_control(
171 - \Elementor\Group_Control_Background::get_type(),
172 - [
173 - 'name' => 'background_color',
174 - 'condition' => [ 'type' => ['icon','text'] ],
175 - 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.ui-e-highlight-icon, {{WRAPPER}} {{CURRENT_ITEM}} .ui-e-headline-text',
176 - ]
177 - );
178 - $repeater->add_control(
179 - 'background_color_as_text',
180 - [
181 - 'label' => esc_html__( 'Use Background Color as Text Color', 'uicore-elements' ),
182 - 'type' => \Elementor\Controls_Manager::SWITCHER,
183 - 'default' => false,
184 - 'render_type' => 'template',
185 - 'condition' => [ 'type' => ['icon','text'] ],
186 - 'selectors' => [
187 - '{{WRAPPER}} {{CURRENT_ITEM}}.ui-e-highlight-icon, {{WRAPPER}} {{CURRENT_ITEM}} .ui-e-headline-text' => 'background-color: transparent;-webkit-background-clip: text;background-clip: text;-webkit-text-fill-color: transparent;',
188 - ],
189 - ]
190 - );
191 - $repeater->add_control(
192 - 'stroke_color',
193 - [
194 - 'label' => esc_html__( 'Stroke Color', 'uicore-elements' ),
195 - 'type' => \Elementor\Controls_Manager::COLOR,
196 - 'selectors' => [
197 - '{{WRAPPER}} {{CURRENT_ITEM}} svg path' => 'stroke: {{VALUE}}',
198 -
199 - ],
200 - 'condition' => [ 'headline_style!' => ['none','color'] ],
201 - ]
202 - );
203 -
204 - $repeater->add_control(
205 - 'image',
206 - [
207 - 'label' => esc_html__( 'Choose Image', 'uicore-elements' ),
208 - 'type' => \Elementor\Controls_Manager::MEDIA,
209 - 'default' => [
210 - 'url' => \Elementor\Utils::get_placeholder_image_src(),
211 - ],
212 - 'condition' => [ 'type' => 'image' ],
213 - ]
214 - );
215 -
216 - $repeater->add_control(
217 - 'size',
218 - [
219 - 'label' => __('Size', 'uicore-elements'),
220 - 'type' => \Elementor\Controls_Manager::SLIDER,
221 - 'default' => [
222 - 'size' => 100,
223 - 'unit' => '%',
224 - ],
225 - 'range' => [
226 - '%' => [
227 - 'min' => 0,
228 - 'max' => 150,
229 - ],
230 - ],
231 - 'selectors' => [
232 - '{{WRAPPER}} {{CURRENT_ITEM}}' => '--ui-e-asset-size: calc({{SIZE}} / 100);',
233 - ],
234 - 'condition' => [ 'type' => ['icon', 'image'] ],
235 - ]
236 - );
237 -
238 - $this->add_control(
239 - 'content',
240 - [
241 - 'label' => __( 'Content', 'uicore-elements' ),
242 - 'type' => Controls_Manager::REPEATER,
243 - 'fields' => $repeater->get_controls(),
244 - 'default' => [
245 - [
246 - 'text' => __( 'This is my awesome', 'uicore-elements' ),
247 - 'headline_style' => 'none',
248 - ],
249 - [
250 - 'text' => __( 'highlight', 'uicore-elements' ),
251 - 'headline_style' => 'stroke1',
252 - ],
253 - [
254 - 'text' => __( 'text.', 'uicore-elements' ),
255 - 'headline_style' => 'none',
256 - ],
257 - ],
258 - 'title_field' => '{{{ type == "text" ? text : type }}}',
259 - 'render_type' => 'template',
260 - ]
261 - );
262 -
263 - $this->add_responsive_control(
264 - 'alignment',
265 - [
266 - 'label' => __( 'Alignment', 'uicore-elements' ),
267 - 'type' => Controls_Manager::CHOOSE,
268 - 'options' => [
269 - 'left' => [
270 - 'title' => __( 'Left', 'uicore-elements' ),
271 - 'icon' => 'eicon-text-align-left',
272 - ],
273 - 'center' => [
274 - 'title' => __( 'Center', 'uicore-elements' ),
275 - 'icon' => 'eicon-text-align-center',
276 - ],
277 - 'right' => [
278 - 'title' => __( 'Right', 'uicore-elements' ),
279 - 'icon' => 'eicon-text-align-right',
280 - ],
281 - ],
282 - 'default' => 'center',
283 - 'selectors' => [
284 - '{{WRAPPER}}' => 'text-align: {{VALUE}}',
285 - ],
286 - ]
287 - );
288 -
289 - $this->add_control(
290 - 'tag',
291 - [
292 - 'label' => __( 'HTML Tag', 'uicore-elements' ),
293 - 'type' => Controls_Manager::SELECT,
294 - 'options' => [
295 - 'h1' => 'H1',
296 - 'h2' => 'H2',
297 - 'h3' => 'H3',
298 - 'h4' => 'H4',
299 - 'h5' => 'H5',
300 - 'h6' => 'H6',
301 - 'div' => 'div',
302 - 'span' => 'span',
303 - 'p' => 'p',
304 - ],
305 - 'default' => 'h2',
306 - ]
307 - );
308 -
309 - $this->end_controls_section();
310 -
311 - $this->start_controls_section(
312 - 'section_style_marker',
313 - [
314 - 'label' => __( 'Shape', 'uicore-elements' ),
315 - 'tab' => Controls_Manager::TAB_STYLE,
316 - ]
317 - );
318 -
319 - $this->add_control(
320 - 'marker_color',
321 - [
322 - 'label' => __( 'Color', 'uicore-elements' ),
323 - 'type' => Controls_Manager::COLOR,
324 - 'global' => [
325 - 'default' => '#F1F200',
326 - ],
327 - 'selectors' => [
328 - '{{WRAPPER}} .ui-e-headline-text path' => 'stroke: {{VALUE}}',
329 - ],
330 - ]
331 - );
332 -
333 - $this->add_control(
334 - 'stroke_width',
335 - [
336 - 'label' => __( 'Width', 'uicore-elements' ),
337 - 'type' => Controls_Manager::SLIDER,
338 - 'range' => [
339 - 'px' => [
340 - 'min' => 1,
341 - 'max' => 100,
342 - ],
343 - ],
344 - 'default' => [
345 - 'size' => '40',
346 - 'unit' => 'px'
347 - ],
348 - 'selectors' => [
349 - '{{WRAPPER}} .ui-e-headline-text path' => 'stroke-width: {{SIZE}}',
350 - ],
351 - ]
352 - );
353 -
354 - $this->add_control(
355 - 'vertical_offset',
356 - [
357 - 'label' => __( 'Vertical Offset', 'uicore-elements' ),
358 - 'type' => Controls_Manager::SLIDER,
359 - 'range' => [
360 - '%' => [
361 - 'min' => -100,
362 - 'max' => 100,
363 - ],
364 - 'px' => [
365 - 'min' => -100,
366 - 'max' => 100,
367 - ],
368 - ],
369 - 'default' => [
370 - 'size' => '0',
371 - 'unit' => '%',
372 - ],
373 - 'size_units'=>['%', 'px'],
374 - 'selectors' => [
375 - '{{WRAPPER}} .ui-e-headline-text svg' => 'bottom: {{SIZE}}{{UNIT}}',
376 - ],
377 - ]
378 - );
379 - $this->add_control(
380 - 'shape_animation',
381 - [
382 - 'label' => __( 'Animation', 'uicore-elements' ),
383 - 'type' => Controls_Manager::SWITCHER,
384 - 'label_on' => __( 'On', 'uicore-elements' ),
385 - 'label_off' => __( 'Off', 'uicore-elements' ),
386 - 'default' => 'animate',
387 - 'separator' => 'before',
388 - 'return_value' =>'animate',
389 - 'prefix_class' => 'ui-e-a-',
390 - ]
391 - );
392 -
393 - $this->add_control(
394 - 'shape_animation_delay',
395 - [
396 - 'label' => __( 'Animation Delay', 'uicore-elements' ) . ' (ms)',
397 - 'type' => Controls_Manager::NUMBER,
398 - 'default' => '',
399 - 'min' => 0,
400 - 'step' => 100,
401 - 'condition' => [
402 - 'shape_animation' => 'animate',
403 - ],
404 - 'render_type' => 'template'
405 - ]
406 - );
407 -
408 -
409 - $this->end_controls_section();
410 -
411 - $this->start_controls_section(
412 - 'section_style_text',
413 - [
414 - 'label' => __( 'Headline', 'uicore-elements' ),
415 - 'tab' => Controls_Manager::TAB_STYLE,
416 - ]
417 - );
418 -
419 - $this->add_control(
420 - 'title_color',
421 - [
422 - 'label' => __( 'Text Color', 'uicore-elements' ),
423 - 'type' => Controls_Manager::COLOR,
424 - 'selectors' => [
425 - '{{WRAPPER}} .ui-e-highlight-icon, {{WRAPPER}} .ui-e-headline-text' => 'color: {{VALUE}}',
426 - ],
427 - ]
428 - );
429 -
430 -
431 - $this->add_group_control(
432 - Group_Control_Typography::get_type(),
433 - [
434 - 'name' => 'title_typography',
435 - 'selector' => '{{WRAPPER}} .ui-e-highlight-icon, {{WRAPPER}} .ui-e-headline-text, {{WRAPPER}} .ui-e-highlight-image',
436 - ]
437 - );
438 -
439 - $this->add_control(
440 - 'higlighted_title_color',
441 - [
442 - 'label' => __( 'Highlighted Text Color', 'uicore-elements' ),
443 - 'type' => Controls_Manager::COLOR,
444 - 'selectors' => [
445 - '{{WRAPPER}} .ui-e-headline-highlighted' => 'color: {{VALUE}}',
446 - ],
447 - ]
448 - );
449 - $this->add_group_control(
450 - Group_Control_Typography::get_type(),
451 - [
452 - 'name' => 'higlighted_title_typography',
453 - 'selector' => '{{WRAPPER}} .ui-e-headline-highlighted',
454 - ]
455 - );
456 -
457 -
458 - $this->end_controls_section();
459 -
460 -
461 - }
462 -
463 -
464 - protected function get_svg($return,$type='')
465 - {
466 - $paths = [
467 - 'none'=> null,
468 - 'color'=> null,
469 - 'stroke1'=>"<path d='M15.2,133.3L15.2,133.3c121.9-7.6,244-9.9,366.1-6.8c34.6,0.9,69.1,2.3,103.7,4'/>",
470 -
471 - 'stroke2'=>"<path d='M479,122c-13.3-1-26.8-1-40.4-2.3c-31.8-1.2-63.7,0.4-95.3,0.6c-38.5,1.5-77,2.3-115.5,5.2
472 - c-41.6,1.2-83.3,5-124.9,5.2c-5.4,0.4-11,1-16.4,0.8c-21.9-0.4-44.1,1.9-65.6-3.5'/>",
473 -
474 - 'stroke3'=>"<path d='M15,133.4c19-12.7,48.1-11.4,69.2-8.2
475 - c6.3,1.1,12.9,2.1,19.2,3.4c16.5,3.2,33.5,6.3,50.6,5.5c12.7-0.6,24.9-3.4,36.7-6.1c11-2.5,22.4-5.1,34.2-5.9
476 - c24.3-1.9,48.5,3.4,71.9,8.4c27.6,6.1,53.8,11.8,80.4,6.8c9.9-1.9,19.2-5.3,28.3-8.4c8.2-3,16.9-5.9,25.9-8
477 - c20.3-4.4,45.8-1.1,53.6,12.2'/>",
478 -
479 - 'stroke4'=>"<path d='M18,122.6c42.3-4.6,87.4-5.1,130.3-1.6'/>
480 - <path d='M166.7,121.3c29.6,1.6,60,3.3,90.1,1.8c12.4-0.5,24.8-1.6,36.9-2.7c7.3-0.7,14.8-1.3,22.3-1.8
481 - c55.5-4.2,112.6-1.8,166,1.1'/>
482 - <path d='M57.8,133c30.8-0.7,62,1.1,92.1,2.7c30.5,1.8,62,3.6,93.2,2.7c20.4-0.5,41.1-2.4,61.1-4
483 - c37.6-3.1,76.5-6.4,113.7-2'/>",
484 -
485 - 'stroke5'=>"<path d='M53.4,135.8c-12.8-1.5-25.6-1.3-38.3,0.7'/>
486 - <path d='M111.2,136c-12.2-0.2-24.4-0.5-36.7-0.8'/>
487 - <path d='M163.3,135.2c-12.2,0.2-24.4,0.5-36.6,0.8'/>
488 - <path d='M217.8,134.7c-12.5,0.6-24.9,1.2-37.4,1.8'/>
489 - <path d='M274.7,135.5c-12.8,0.1-25.5,0.1-38.3,0.2'/>
490 - <path d='M327.6,135.1c-13.6-0.8-27.2-0.3-40.7,1.4'/>
491 - <path d='M378.8,134.7c-12.2,0.6-24.4,1.2-36.6,1.8'/>
492 - <path d='M432.5,136.4c-12.2-0.6-24.4-1.1-36.6-1.7'/>
493 - <path d='M487.9,136.1c-11.6-1.3-23.3-1.4-35-0.2'/>",
494 -
495 - 'stroke6'=>"<path d='M14.4,111.6c0,0,202.9-33.7,471.2,0c0,0-194-8.9-397.3,24.7c0,0,141.9-5.9,309.2,0'/>",
496 -
497 - 'stroke7'=>"<path d='M15.2 133.3H485'/>",
498 - 'stroke8'=>'<path d="M1.65186 148.981C1.65186 148.981 73.8781 98.5943 206.859 93.0135C339.841 87.4327 489.874 134.065 489.874 134.065"/>',
499 - 'stroke9'=>'<path d="M7 74.5C7 74.5 104 127 252 117C400 107 494.5 49 494.5 49C494.5 49 473.5 59 461.5 74.5C449.5 90 449.5 107 449.5 107"/>
500 - <path d="M20.5 101.5C20.5 101.5 93 133.5 180.5 142.5C268 151.5 347 127.5 347 127.5"/>'
501 - ];
502 -
503 - if($return === 'list'){
504 - foreach($paths as $name => $path){
505 - if($name === 'none'){
506 - $svg[$name] = "";
507 - }else{
508 - $svg[$name] = '<span class="uicore-svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 150" preserveAspectRatio="none">'.$path.'</svg></span>';
509 - }
510 - }
511 - }else{
512 - if($type === 'none'){
513 - $svg = "";
514 - }else{
515 - $svg = '<span class="uicore-svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 150" preserveAspectRatio="none">'.$paths[$type].'</svg></span>';
516 - }
517 - }
518 -
519 - return $svg;
520 - }
521 -
522 - protected function render()
523 - {
524 - $settings = $this->get_settings_for_display();
525 - $tag = $settings['tag'];
526 - $content = $settings['content'];
527 - $delay = $settings['shape_animation_delay'];
528 - ?>
529 - <<?php echo esc_html($tag); echo $delay ? ' data-delay="'.esc_attr($delay).'"' : ''; ?> class="ui-e--highlighted-text" >
530 - <?php
531 -
532 -
533 - foreach($content as $item){
534 - $svg_markup = null;
535 - switch ($item['type']) {
536 - case 'text':
537 - if($item['headline_style'] === 'none'){
538 - echo '<span class="ui-e-headline-text elementor-repeater-item-' . esc_attr($item['_id']) . '">' . Helper::esc_string($item['text']) . '</span>';
539 - }else{
540 - $svg_markup = $this->get_svg('single',$item['headline_style']);
541 - echo '<span class="ui-e-headline-text elementor-repeater-item-' . esc_attr($item['_id']) . ' ui-e-headline-'.esc_attr($item['headline_style']).'">
542 - <span class="whitespace"> </span><span><span class="ui-e-headline-text ui-e-headline-highlighted">'.Helper::esc_string($item['text']) .'</span>' . Helper::esc_svg($svg_markup) .'</span><span class="whitespace"> </span></span>';
543 - }
544 - break;
545 - case 'icon':
546 - echo "<span class='ui-e-highlight-icon elementor-repeater-item-" . esc_attr($item['_id']) . "'>";
547 - \Elementor\Icons_Manager::render_icon($item['icon'], ['aria-hidden' => 'true', 'class'=>'char']);
548 - echo "</span>";
549 - break;
550 - case 'image':
551 - echo '<span class="ui-e-highlight-image elementor-repeater-item-' . esc_attr($item['_id']) . '">'.wp_get_attachment_image($item['image']['id'], "medium", false, ["loading" => false, "class"=>'char']).'</span>';
552 - break;
553 - default:
554 - break;
555 - }
556 -
557 - }
558 - ?>
559 - </<?php echo esc_html($tag); ?>>
560 - <?php
561 -
562 - }
563 - protected function content_template() {
564 - ?>
565 - <#
566 - var svgs = <?php echo wp_json_encode($this->get_svg('list')); ?>;
567 - #>
568 - <{{{ settings.tag }}} class="ui-e--highlighted-text">
569 - <#
570 - settings.content.forEach( function (item){
571 - switch (item.type) {
572 - case 'text':
573 - if(item.headline_style === 'none'){
574 - #><span class="ui-e-headline-text elementor-repeater-item-{{{ item._id }}}">{{{ item.text }}}</span><#
575 - }else{
576 - #><span class="ui-e-headline-text {{{ 'ui-e-headline-' + item.headline_style }}} elementor-repeater-item-{{{ item._id }}}"><span class="whitespace"> </span><span><span class="ui-e-headline-text ui-e-headline-highlighted">{{{ item.text }}}</span>{{{svgs[item.headline_style]}}}</span><span class="whitespace"> </span></span><#
577 - }
578 - break;
579 - case 'icon':
580 - #><span class="char ui-e-highlight-icon elementor-repeater-item-{{{ item._id }}}">{{{ elementor.helpers.renderIcon( view, item.icon, { 'aria-hidden': true }, 'i' , 'value' ) }}}</span><#
581 - break;
582 - case 'image':
583 - var image = {
584 - id: item.image.id,
585 - url: item.image.url,
586 - size: item.thumbnail_size,
587 - dimension: item.thumbnail_custom_dimension,
588 - model: view.getEditModel()
589 - };
590 - var image_url = elementor.imagesManager.getImageUrl( image );
591 - #><span class="ui-e-highlight-image elementor-repeater-item-{{{ item._id }}}"><img class="char" src="{{{ image_url }}}" /></span><#
592 - break;
593 - default:
594 - break;
595 - }
596 - });
597 - #>
598 - </{{{ settings.tag }}}>
599 - <?php
600 - }
601 -}
602 -\Elementor\Plugin::instance()->widgets_manager->register(new HighlightedText());
1 +<?php
2 +
3 +namespace UiCoreElements;
4 +
5 +use Elementor\Controls_Manager;
6 +use Elementor\Repeater;
7 +use Elementor\Group_Control_Typography;
8 +use Elementor\Core\Kits\Documents\Tabs\Global_Colors;
9 +use UiCoreElements\UiCoreWidget;
10 +
11 +defined('ABSPATH') || exit();
12 +
13 +/**
14 + * Highlighted Text
15 + *
16 + * @author Andrei Voica <[email protected]>
17 + * @since 1.0.3
18 + */
19 +class HighlightedText extends UiCoreWidget
20 +{
21 + public function __construct($data = [], $args = null)
22 + {
23 + parent::__construct($data, $args);
24 + }
25 +
26 + public function get_name()
27 + {
28 + return 'highlighted-text';
29 + }
30 + public function get_categories()
31 + {
32 + return ['uicore'];
33 + }
34 +
35 + public function get_title()
36 + {
37 + return __('Highlighted Text', 'uicore-elements');
38 + }
39 +
40 + public function get_icon()
41 + {
42 + return 'eicon-animated-headline ui-e-widget';
43 + }
44 +
45 + public function get_keywords()
46 + {
47 + return ['headline', 'heading', 'animation', 'title', 'text'];
48 + }
49 +
50 + public function get_styles()
51 + {
52 + return [
53 + 'highlighted-text'
54 + ];
55 + }
56 +
57 + public function get_scripts()
58 + {
59 + return [
60 + 'highlighted-text' => [
61 + 'condition' => [
62 + 'shape_animation' => 'animate',
63 + ],
64 + ]
65 + ];
66 + }
67 + public function has_widget_inner_wrapper(): bool
68 + {
69 + // TODO: remove after Optmized Markup experiment is merged to the core
70 + return ! \Elementor\Plugin::$instance->experiments->is_feature_active('e_optimized_markup');
71 + }
72 +
73 + protected function register_controls()
74 + {
75 + $this->start_controls_section(
76 + 'text_elements',
77 + [
78 + 'label' => __('Text', 'uicore-elements'),
79 + ]
80 + );
81 + $repeater = new Repeater();
82 +
83 + $repeater->add_control(
84 + 'type',
85 + [
86 + 'label' => esc_html__('Type', 'uicore-elements'),
87 + 'type' => \Elementor\Controls_Manager::SELECT,
88 + 'default' => 'text',
89 + 'options' => [
90 + 'text' => esc_html__('Text', 'uicore-elements'),
91 + 'icon' => esc_html__('Icon', 'uicore-elements'),
92 + 'image' => esc_html__('Image', 'uicore-elements'),
93 + ],
94 + 'selectors' => [
95 + '{{WRAPPER}} .uicore-repeater-selector' => 'border-style: {{VALUE}};',
96 + ],
97 + 'render_type' => 'template',
98 + ]
99 + );
100 +
101 + $repeater->add_control(
102 + 'text',
103 + [
104 + 'label' => __('Text', 'uicore-elements'),
105 + 'type' => Controls_Manager::TEXT,
106 + 'label_block' => true,
107 + 'placeholder' => __('Some Text', 'uicore-elements'),
108 + 'default' => __('Some Text', 'uicore-elements'),
109 + 'condition' => ['type' => 'text'],
110 + 'dynamic' => ['active' => true],
111 + ]
112 + );
113 +
114 + $repeater->add_control(
115 + 'headline_style',
116 + [
117 + 'label' => __('Highlight Style', 'uicore-elements'),
118 + 'type' => Controls_Manager::SELECT,
119 + 'default' => 'none',
120 + 'options' => [
121 + 'none' => __('None', 'uicore-elements'),
122 + 'color' => __('No Stroke', 'uicore-elements'),
123 + 'stroke1' => __('Stroke 1', 'uicore-elements'),
124 + 'stroke2' => __('Stroke 2', 'uicore-elements'),
125 + 'stroke3' => __('Stroke 3', 'uicore-elements'),
126 + 'stroke4' => __('Stroke 4', 'uicore-elements'),
127 + 'stroke5' => __('Stroke 5', 'uicore-elements'),
128 + 'stroke6' => __('Stroke 6', 'uicore-elements'),
129 + 'stroke7' => __('Stroke 7', 'uicore-elements'),
130 + 'stroke8' => __('Stroke 8', 'uicore-elements'),
131 + 'stroke9' => __('Stroke 9', 'uicore-elements'),
132 + ],
133 + 'render_type' => 'template',
134 + 'condition' => ['type' => 'text'],
135 + ]
136 + );
137 +
138 + $repeater->add_control(
139 + 'icon',
140 + [
141 + 'label' => esc_html__('Icon', 'uicore-elements'),
142 + 'type' => \Elementor\Controls_Manager::ICONS,
143 + 'default' => [
144 + 'value' => 'fas fa-circle',
145 + 'library' => 'fa-solid',
146 + ],
147 + 'recommended' => [
148 + 'fa-solid' => [
149 + 'circle',
150 + 'dot-circle',
151 + 'square-full',
152 + ],
153 + 'fa-regular' => [
154 + 'circle',
155 + 'dot-circle',
156 + 'square-full',
157 + ],
158 + ],
159 + 'condition' => ['type' => 'icon'],
160 + ]
161 + );
162 +
163 + $repeater->add_control(
164 + 'icon_color',
165 + [
166 + 'label' => esc_html__('Color', 'uicore-elements'),
167 + 'type' => \Elementor\Controls_Manager::COLOR,
168 + 'selectors' => [
169 + '{{WRAPPER}} {{CURRENT_ITEM}}.ui-e-highlight-icon, {{WRAPPER}} {{CURRENT_ITEM}}' => 'color: {{VALUE}}; fill: {{VALUE}}', //icon as a font + svg
170 +
171 + ],
172 + 'condition' => ['type' => ['icon', 'text']],
173 + ]
174 + );
175 + $repeater->add_group_control(
176 + \Elementor\Group_Control_Background::get_type(),
177 + [
178 + 'name' => 'background_color',
179 + 'condition' => ['type' => ['icon', 'text']],
180 + 'selector' => '{{WRAPPER}} {{CURRENT_ITEM}}.ui-e-highlight-icon, {{WRAPPER}} {{CURRENT_ITEM}} .ui-e-headline-text',
181 + ]
182 + );
183 + $repeater->add_control(
184 + 'background_color_as_text',
185 + [
186 + 'label' => esc_html__('Use Background Color as Text Color', 'uicore-elements'),
187 + 'type' => \Elementor\Controls_Manager::SWITCHER,
188 + 'default' => false,
189 + 'render_type' => 'template',
190 + 'condition' => ['type' => ['icon', 'text']],
191 + 'selectors' => [
192 + '{{WRAPPER}} {{CURRENT_ITEM}}.ui-e-highlight-icon, {{WRAPPER}} {{CURRENT_ITEM}} .ui-e-headline-text' => 'background-color: transparent;-webkit-background-clip: text;background-clip: text;-webkit-text-fill-color: transparent;',
193 + ],
194 + ]
195 + );
196 + $repeater->add_control(
197 + 'stroke_color',
198 + [
199 + 'label' => esc_html__('Stroke Color', 'uicore-elements'),
200 + 'type' => \Elementor\Controls_Manager::COLOR,
201 + 'selectors' => [
202 + '{{WRAPPER}} {{CURRENT_ITEM}} svg path' => 'stroke: {{VALUE}}',
203 +
204 + ],
205 + 'condition' => ['headline_style!' => ['none', 'color']],
206 + ]
207 + );
208 +
209 + $repeater->add_control(
210 + 'image',
211 + [
212 + 'label' => esc_html__('Choose Image', 'uicore-elements'),
213 + 'type' => \Elementor\Controls_Manager::MEDIA,
214 + 'default' => [
215 + 'url' => \Elementor\Utils::get_placeholder_image_src(),
216 + ],
217 + 'condition' => ['type' => 'image'],
218 + ]
219 + );
220 +
221 + $repeater->add_control(
222 + 'size',
223 + [
224 + 'label' => __('Size', 'uicore-elements'),
225 + 'type' => \Elementor\Controls_Manager::SLIDER,
226 + 'default' => [
227 + 'size' => 100,
228 + 'unit' => '%',
229 + ],
230 + 'range' => [
231 + '%' => [
232 + 'min' => 0,
233 + 'max' => 150,
234 + ],
235 + ],
236 + 'selectors' => [
237 + '{{WRAPPER}} {{CURRENT_ITEM}}' => '--ui-e-asset-size: calc({{SIZE}} / 100);',
238 + ],
239 + 'condition' => ['type' => ['icon', 'image']],
240 + ]
241 + );
242 +
243 + $this->add_control(
244 + 'content',
245 + [
246 + 'label' => __('Content', 'uicore-elements'),
247 + 'type' => Controls_Manager::REPEATER,
248 + 'fields' => $repeater->get_controls(),
249 + 'default' => [
250 + [
251 + 'text' => __('This is my awesome ', 'uicore-elements'),
252 + 'headline_style' => 'none',
253 + ],
254 + [
255 + 'text' => __('highlight', 'uicore-elements'),
256 + 'headline_style' => 'stroke1',
257 + ],
258 + [
259 + 'text' => __(' text.', 'uicore-elements'),
260 + 'headline_style' => 'none',
261 + ],
262 + ],
263 + 'title_field' => '{{{ type == "text" ? text : type }}}',
264 + 'render_type' => 'template',
265 + ]
266 + );
267 +
268 + $this->add_responsive_control(
269 + 'alignment',
270 + [
271 + 'label' => __('Alignment', 'uicore-elements'),
272 + 'type' => Controls_Manager::CHOOSE,
273 + 'options' => [
274 + 'left' => [
275 + 'title' => __('Left', 'uicore-elements'),
276 + 'icon' => 'eicon-text-align-left',
277 + ],
278 + 'center' => [
279 + 'title' => __('Center', 'uicore-elements'),
280 + 'icon' => 'eicon-text-align-center',
281 + ],
282 + 'right' => [
283 + 'title' => __('Right', 'uicore-elements'),
284 + 'icon' => 'eicon-text-align-right',
285 + ],
286 + ],
287 + 'default' => 'center',
288 + 'selectors' => [
289 + '{{WRAPPER}}' => 'text-align: {{VALUE}}',
290 + ],
291 + ]
292 + );
293 +
294 + $this->add_control(
295 + 'tag',
296 + [
297 + 'label' => __('HTML Tag', 'uicore-elements'),
298 + 'type' => Controls_Manager::SELECT,
299 + 'options' => [
300 + 'h1' => 'H1',
301 + 'h2' => 'H2',
302 + 'h3' => 'H3',
303 + 'h4' => 'H4',
304 + 'h5' => 'H5',
305 + 'h6' => 'H6',
306 + 'div' => 'div',
307 + 'span' => 'span',
308 + 'p' => 'p',
309 + ],
310 + 'default' => 'h2',
311 + ]
312 + );
313 +
314 + $this->end_controls_section();
315 +
316 + $this->start_controls_section(
317 + 'section_style_marker',
318 + [
319 + 'label' => __('Shape', 'uicore-elements'),
320 + 'tab' => Controls_Manager::TAB_STYLE,
321 + ]
322 + );
323 +
324 + $this->add_control(
325 + 'marker_color',
326 + [
327 + 'label' => __('Color', 'uicore-elements'),
328 + 'type' => Controls_Manager::COLOR,
329 + 'default' => 'var(--e-global-color-uicore_primary)',
330 + 'selectors' => [
331 + '{{WRAPPER}} .ui-e-headline-text path' => 'stroke: {{VALUE}}',
332 + ],
333 + ]
334 + );
335 +
336 + $this->add_control(
337 + 'stroke_width',
338 + [
339 + 'label' => __('Width', 'uicore-elements'),
340 + 'type' => Controls_Manager::SLIDER,
341 + 'range' => [
342 + 'px' => [
343 + 'min' => 1,
344 + 'max' => 100,
345 + ],
346 + ],
347 + 'default' => [
348 + 'size' => '40',
349 + 'unit' => 'px'
350 + ],
351 + 'selectors' => [
352 + '{{WRAPPER}} .ui-e-headline-text path' => 'stroke-width: {{SIZE}}',
353 + ],
354 + ]
355 + );
356 +
357 + $this->add_control(
358 + 'vertical_offset',
359 + [
360 + 'label' => __('Vertical Offset', 'uicore-elements'),
361 + 'type' => Controls_Manager::SLIDER,
362 + 'range' => [
363 + '%' => [
364 + 'min' => -100,
365 + 'max' => 100,
366 + ],
367 + 'px' => [
368 + 'min' => -100,
369 + 'max' => 100,
370 + ],
371 + ],
372 + 'default' => [
373 + 'size' => '0',
374 + 'unit' => '%',
375 + ],
376 + 'size_units' => ['%', 'px'],
377 + 'selectors' => [
378 + '{{WRAPPER}} .ui-e-headline-text svg' => 'bottom: {{SIZE}}{{UNIT}}',
379 + ],
380 + ]
381 + );
382 + $this->add_control(
383 + 'shape_animation',
384 + [
385 + 'label' => __('Animation', 'uicore-elements'),
386 + 'type' => Controls_Manager::SWITCHER,
387 + 'label_on' => __('On', 'uicore-elements'),
388 + 'label_off' => __('Off', 'uicore-elements'),
389 + 'default' => 'animate',
390 + 'separator' => 'before',
391 + 'return_value' => 'animate',
392 + 'prefix_class' => 'ui-e-a-',
393 + ]
394 + );
395 +
396 + $this->add_control(
397 + 'shape_animation_delay',
398 + [
399 + 'label' => __('Animation Delay', 'uicore-elements') . ' (ms)',
400 + 'type' => Controls_Manager::NUMBER,
401 + 'default' => '',
402 + 'min' => 0,
403 + 'step' => 100,
404 + 'condition' => [
405 + 'shape_animation' => 'animate',
406 + ],
407 + 'render_type' => 'template'
408 + ]
409 + );
410 +
411 +
412 + $this->end_controls_section();
413 +
414 + $this->start_controls_section(
415 + 'section_style_text',
416 + [
417 + 'label' => __('Headline', 'uicore-elements'),
418 + 'tab' => Controls_Manager::TAB_STYLE,
419 + ]
420 + );
421 +
422 + $this->add_control(
423 + 'title_color',
424 + [
425 + 'label' => __('Text Color', 'uicore-elements'),
426 + 'type' => Controls_Manager::COLOR,
427 + 'selectors' => [
428 + '{{WRAPPER}} .ui-e-highlight-icon, {{WRAPPER}} .ui-e-headline-text' => 'color: {{VALUE}}',
429 + ],
430 + ]
431 + );
432 +
433 +
434 + $this->add_group_control(
435 + Group_Control_Typography::get_type(),
436 + [
437 + 'name' => 'title_typography',
438 + 'selector' => '{{WRAPPER}} .ui-e-highlight-icon, {{WRAPPER}} .ui-e-headline-text, {{WRAPPER}} .ui-e-highlight-image',
439 + ]
440 + );
441 +
442 + $this->add_control(
443 + 'higlighted_title_color',
444 + [
445 + 'label' => __('Highlighted Text Color', 'uicore-elements'),
446 + 'type' => Controls_Manager::COLOR,
447 + 'selectors' => [
448 + '{{WRAPPER}} .ui-e-headline-highlighted' => 'color: {{VALUE}}',
449 + ],
450 + ]
451 + );
452 + $this->add_group_control(
453 + Group_Control_Typography::get_type(),
454 + [
455 + 'name' => 'higlighted_title_typography',
456 + 'selector' => '{{WRAPPER}} .ui-e-headline-highlighted',
457 + ]
458 + );
459 +
460 +
461 + $this->end_controls_section();
462 + }
463 +
464 +
465 + protected function get_svg($return, $type = '')
466 + {
467 + $paths = [
468 + 'none' => null,
469 + 'color' => null,
470 + 'stroke1' => "<path d='M15.2,133.3L15.2,133.3c121.9-7.6,244-9.9,366.1-6.8c34.6,0.9,69.1,2.3,103.7,4'/>",
471 +
472 + 'stroke2' => "<path d='M479,122c-13.3-1-26.8-1-40.4-2.3c-31.8-1.2-63.7,0.4-95.3,0.6c-38.5,1.5-77,2.3-115.5,5.2
473 + c-41.6,1.2-83.3,5-124.9,5.2c-5.4,0.4-11,1-16.4,0.8c-21.9-0.4-44.1,1.9-65.6-3.5'/>",
474 +
475 + 'stroke3' => "<path d='M15,133.4c19-12.7,48.1-11.4,69.2-8.2
476 + c6.3,1.1,12.9,2.1,19.2,3.4c16.5,3.2,33.5,6.3,50.6,5.5c12.7-0.6,24.9-3.4,36.7-6.1c11-2.5,22.4-5.1,34.2-5.9
477 + c24.3-1.9,48.5,3.4,71.9,8.4c27.6,6.1,53.8,11.8,80.4,6.8c9.9-1.9,19.2-5.3,28.3-8.4c8.2-3,16.9-5.9,25.9-8
478 + c20.3-4.4,45.8-1.1,53.6,12.2'/>",
479 +
480 + 'stroke4' => "<path d='M18,122.6c42.3-4.6,87.4-5.1,130.3-1.6'/>
481 + <path d='M166.7,121.3c29.6,1.6,60,3.3,90.1,1.8c12.4-0.5,24.8-1.6,36.9-2.7c7.3-0.7,14.8-1.3,22.3-1.8
482 + c55.5-4.2,112.6-1.8,166,1.1'/>
483 + <path d='M57.8,133c30.8-0.7,62,1.1,92.1,2.7c30.5,1.8,62,3.6,93.2,2.7c20.4-0.5,41.1-2.4,61.1-4
484 + c37.6-3.1,76.5-6.4,113.7-2'/>",
485 +
486 + 'stroke5' => "<path d='M53.4,135.8c-12.8-1.5-25.6-1.3-38.3,0.7'/>
487 + <path d='M111.2,136c-12.2-0.2-24.4-0.5-36.7-0.8'/>
488 + <path d='M163.3,135.2c-12.2,0.2-24.4,0.5-36.6,0.8'/>
489 + <path d='M217.8,134.7c-12.5,0.6-24.9,1.2-37.4,1.8'/>
490 + <path d='M274.7,135.5c-12.8,0.1-25.5,0.1-38.3,0.2'/>
491 + <path d='M327.6,135.1c-13.6-0.8-27.2-0.3-40.7,1.4'/>
492 + <path d='M378.8,134.7c-12.2,0.6-24.4,1.2-36.6,1.8'/>
493 + <path d='M432.5,136.4c-12.2-0.6-24.4-1.1-36.6-1.7'/>
494 + <path d='M487.9,136.1c-11.6-1.3-23.3-1.4-35-0.2'/>",
495 +
496 + 'stroke6' => "<path d='M14.4,111.6c0,0,202.9-33.7,471.2,0c0,0-194-8.9-397.3,24.7c0,0,141.9-5.9,309.2,0'/>",
497 +
498 + 'stroke7' => "<path d='M15.2 133.3H485'/>",
499 + 'stroke8' => '<path d="M1.65186 148.981C1.65186 148.981 73.8781 98.5943 206.859 93.0135C339.841 87.4327 489.874 134.065 489.874 134.065"/>',
500 + 'stroke9' => '<path d="M7 74.5C7 74.5 104 127 252 117C400 107 494.5 49 494.5 49C494.5 49 473.5 59 461.5 74.5C449.5 90 449.5 107 449.5 107"/>
501 + <path d="M20.5 101.5C20.5 101.5 93 133.5 180.5 142.5C268 151.5 347 127.5 347 127.5"/>'
502 + ];
503 +
504 + if ($return === 'list') {
505 + foreach ($paths as $name => $path) {
506 + if ($name === 'none') {
507 + $svg[$name] = "";
508 + } else {
509 + $svg[$name] = '<span class="uicore-svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 150" preserveAspectRatio="none">' . $path . '</svg></span>';
510 + }
511 + }
512 + } else {
513 + if ($type === 'none') {
514 + $svg = "";
515 + } else {
516 + $svg = '<span class="uicore-svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 150" preserveAspectRatio="none">' . $paths[$type] . '</svg></span>';
517 + }
518 + }
519 +
520 + return $svg;
521 + }
522 +
523 + protected function render()
524 + {
525 + $settings = $this->get_settings_for_display();
526 + $tag = $settings['tag'];
527 + $content = $settings['content'];
528 + $delay = $settings['shape_animation_delay'];
529 +?>
530 + <<?php echo Helper::esc_tag($tag);
531 + echo $delay ? ' data-delay="' . esc_attr($delay) . '"' : ''; ?> class="ui-e--highlighted-text">
532 + <?php
533 +
534 +
535 + foreach ($content as $item) {
536 + $svg_markup = null;
537 + switch ($item['type']) {
538 + case 'text':
539 + if ($item['headline_style'] === 'none') {
540 + echo '<span class="ui-e-headline-text elementor-repeater-item-'
541 + . esc_attr($item['_id']) . '">'
542 + . Helper::esc_string($item['text']) //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
543 + . '</span>';
544 + } else {
545 + $svg_markup = $this->get_svg('single', $item['headline_style']);
546 + echo '<span class="ui-e-headline-text elementor-repeater-item-'
547 + . esc_attr($item['_id'])
548 + . ' ui-e-headline-' . esc_attr($item['headline_style']) . '">
549 + <span class="whitespace"></span>
550 + <span>
551 + <span class="ui-e-headline-text ui-e-headline-highlighted">'
552 + . Helper::esc_string($item['text']) //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
553 + . '</span>'
554 + . Helper::esc_svg($svg_markup) //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
555 + . '</span> <span class="whitespace"> </span></span>';
556 + }
557 + break;
558 + case 'icon':
559 + echo "<span class='ui-e-highlight-icon elementor-repeater-item-" . esc_attr($item['_id']) . "'>";
560 + \Elementor\Icons_Manager::render_icon($item['icon'], ['aria-hidden' => 'true', 'class' => 'char']);
561 + echo "</span>";
562 + break;
563 + case 'image':
564 + echo '<span class="ui-e-highlight-image elementor-repeater-item-' . esc_attr($item['_id']) . '">' . wp_get_attachment_image($item['image']['id'], "medium", false, ["loading" => false, "class" => 'char']) . '</span>';
565 + break;
566 + default:
567 + break;
568 + }
569 + }
570 + ?>
571 + </<?php echo Helper::esc_tag($tag); ?>>
572 + <?php
573 +
574 + }
575 + protected function content_template()
576 + {
577 + ?>
578 + <#
579 + var svgs=<?php echo wp_json_encode($this->get_svg('list')); ?>;
580 + #>
581 + <{{{ settings.tag }}} class="ui-e--highlighted-text">
582 + <#
583 + settings.content.forEach( function (item){
584 + switch (item.type) {
585 + case 'text' :
586 + if(item.headline_style==='none' ){
587 + #><span class="ui-e-headline-text elementor-repeater-item-{{{ item._id }}}">{{{ item.text }}}</span>
588 + <#
589 + }else{
590 + #><span class="ui-e-headline-text {{{ 'ui-e-headline-' + item.headline_style }}} elementor-repeater-item-{{{ item._id }}}"><span class="whitespace"> </span><span><span class="ui-e-headline-text ui-e-headline-highlighted">{{{ item.text }}}</span>{{{svgs[item.headline_style]}}}</span><span class="whitespace"> </span></span>
591 + <#
592 + }
593 + break;
594 + case 'icon' :
595 + #><span class="char ui-e-highlight-icon elementor-repeater-item-{{{ item._id }}}">{{{ elementor.helpers.renderIcon( view, item.icon, { 'aria-hidden': true }, 'i' , 'value' ) }}}</span>
596 + <#
597 + break;
598 + case 'image' :
599 + var image={
600 + id: item.image.id,
601 + url: item.image.url,
602 + size: item.thumbnail_size,
603 + dimension: item.thumbnail_custom_dimension,
604 + model: view.getEditModel()
605 + };
606 + var image_url=elementor.imagesManager.getImageUrl( image );
607 + #><span class="ui-e-highlight-image elementor-repeater-item-{{{ item._id }}}"><img class="char" src="{{{ image_url }}}" /></span>
608 + <#
609 + break;
610 + default:
611 + break;
612 + }
613 + });
614 + #>
615 + </{{{ settings.tag }}}>
616 + <?php
617 + }
618 +}
619 +\Elementor\Plugin::instance()->widgets_manager->register(new HighlightedText());