PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.17
UiCore Elements – Free widgets and templates for Elementor v1.3.17
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 1.2.4 All 41 releases
← All changes | includes/widgets/highlighted-text.php +451 -434 1.0.161.3.17 View file →
@@ -1,5 +1,6 @@
1 1 <?php
2 +
2 3 namespace UiCoreElements;
3 4
4 5 use Elementor\Controls_Manager;
5 6 use Elementor\Repeater;
@@ -42,217 +43,221 @@
42 43 }
43 44
44 45 public function get_keywords()
45 46 {
46 - return [ 'headline', 'heading', 'animation', 'title', 'text' ];
47 + return ['headline', 'heading', 'animation', 'title', 'text'];
47 48 }
48 49
49 - public function get_styles() {
50 - return [
51 - 'highlighted-text'
52 - ];
53 - }
50 + public function get_styles()
51 + {
52 + return [
53 + 'highlighted-text'
54 + ];
55 + }
54 56
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 - }
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 + }
68 72
69 73 protected function register_controls()
70 74 {
71 75 $this->start_controls_section(
72 - 'text_elements',
73 - [
74 - 'label' => __( 'Text', 'uicore-elements' ),
75 - ]
76 + 'text_elements',
77 + [
78 + 'label' => __('Text', 'uicore-elements'),
79 + ]
76 80 );
77 81 $repeater = new Repeater();
78 82
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 - );
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 + );
96 100
97 101 $repeater->add_control(
98 102 'text',
99 103 [
100 - 'label' => __( 'Text', 'uicore-elements' ),
104 + 'label' => __('Text', 'uicore-elements'),
101 105 'type' => Controls_Manager::TEXT,
102 106 'label_block' => true,
103 - 'placeholder' => __( 'Some Text', 'uicore-elements' ),
104 - 'default' => __( 'Some Text', 'uicore-elements' ),
105 - 'condition' => [ 'type' => 'text' ],
107 + 'placeholder' => __('Some Text', 'uicore-elements'),
108 + 'default' => __('Some Text', 'uicore-elements'),
109 + 'condition' => ['type' => 'text'],
110 + 'dynamic' => ['active' => true],
106 111 ]
107 112 );
108 113
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 - ]
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 + ]
131 136 );
132 137
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 - );
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 + );
157 162
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
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
165 170
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}}',
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}}',
198 203
199 - ],
200 - 'condition' => [ 'headline_style!' => ['none','color'] ],
201 - ]
202 - );
204 + ],
205 + 'condition' => ['headline_style!' => ['none', 'color']],
206 + ]
207 + );
203 208
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 - );
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 + );
215 220
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 - );
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 + );
237 242
238 243 $this->add_control(
239 244 'content',
240 245 [
241 - 'label' => __( 'Content', 'uicore-elements' ),
246 + 'label' => __('Content', 'uicore-elements'),
242 247 'type' => Controls_Manager::REPEATER,
243 248 'fields' => $repeater->get_controls(),
244 249 'default' => [
245 250 [
246 - 'text' => __( 'This is my awesome', 'uicore-elements' ),
251 + 'text' => __('This is my awesome ', 'uicore-elements'),
247 252 'headline_style' => 'none',
248 253 ],
249 254 [
250 - 'text' => __( 'highlight', 'uicore-elements' ),
255 + 'text' => __('highlight', 'uicore-elements'),
251 256 'headline_style' => 'stroke1',
252 257 ],
253 258 [
254 - 'text' => __( 'text.', 'uicore-elements' ),
259 + 'text' => __(' text.', 'uicore-elements'),
255 260 'headline_style' => 'none',
256 261 ],
257 262 ],
258 263 'title_field' => '{{{ type == "text" ? text : type }}}',
@@ -257,233 +262,229 @@
257 262 ],
258 263 'title_field' => '{{{ type == "text" ? text : type }}}',
259 264 'render_type' => 'template',
260 265 ]
261 - );
266 + );
262 267
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 - );
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 + );
288 293
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 - );
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 + );
308 313
309 - $this->end_controls_section();
314 + $this->end_controls_section();
310 315
311 - $this->start_controls_section(
312 - 'section_style_marker',
313 - [
314 - 'label' => __( 'Shape', 'uicore-elements' ),
315 - 'tab' => Controls_Manager::TAB_STYLE,
316 - ]
317 - );
316 + $this->start_controls_section(
317 + 'section_style_marker',
318 + [
319 + 'label' => __('Shape', 'uicore-elements'),
320 + 'tab' => Controls_Manager::TAB_STYLE,
321 + ]
322 + );
318 323
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 - );
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 + );
332 335
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 - ],
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 + ],
343 346 ],
344 347 'default' => [
345 348 'size' => '40',
346 349 'unit' => 'px'
347 - ],
348 - 'selectors' => [
349 - '{{WRAPPER}} .ui-e-headline-text path' => 'stroke-width: {{SIZE}}',
350 - ],
351 - ]
350 + ],
351 + 'selectors' => [
352 + '{{WRAPPER}} .ui-e-headline-text path' => 'stroke-width: {{SIZE}}',
353 + ],
354 + ]
352 355 );
353 356
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 - ],
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 + ],
368 371 ],
369 372 'default' => [
370 373 'size' => '0',
371 374 'unit' => '%',
372 - ],
373 - 'size_units'=>['%', 'px'],
374 - 'selectors' => [
375 - '{{WRAPPER}} .ui-e-headline-text svg' => 'bottom: {{SIZE}}{{UNIT}}',
376 - ],
377 - ]
375 + ],
376 + 'size_units' => ['%', 'px'],
377 + 'selectors' => [
378 + '{{WRAPPER}} .ui-e-headline-text svg' => 'bottom: {{SIZE}}{{UNIT}}',
379 + ],
380 + ]
378 381 );
379 382 $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' ),
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'),
386 389 'default' => 'animate',
387 390 'separator' => 'before',
388 - 'return_value' =>'animate',
391 + 'return_value' => 'animate',
389 392 'prefix_class' => 'ui-e-a-',
390 - ]
391 - );
393 + ]
394 + );
392 395
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 - );
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 + );
407 410
408 411
409 - $this->end_controls_section();
412 + $this->end_controls_section();
410 413
411 - $this->start_controls_section(
412 - 'section_style_text',
413 - [
414 - 'label' => __( 'Headline', 'uicore-elements' ),
415 - 'tab' => Controls_Manager::TAB_STYLE,
416 - ]
417 - );
414 + $this->start_controls_section(
415 + 'section_style_text',
416 + [
417 + 'label' => __('Headline', 'uicore-elements'),
418 + 'tab' => Controls_Manager::TAB_STYLE,
419 + ]
420 + );
418 421
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 - );
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 + );
429 432
430 433
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 - );
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 + );
438 441
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 - );
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 + );
456 459
457 460
458 - $this->end_controls_section();
459 -
460 -
461 + $this->end_controls_section();
461 462 }
462 463
463 464
464 - protected function get_svg($return,$type='')
465 + protected function get_svg($return, $type = '')
465 466 {
466 467 $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'/>",
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'/>",
470 471
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 + '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 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'/>",
473 474
474 - 'stroke3'=>"<path d='M15,133.4c19-12.7,48.1-11.4,69.2-8.2
475 + 'stroke3' => "<path d='M15,133.4c19-12.7,48.1-11.4,69.2-8.2
475 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
476 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
477 478 c20.3-4.4,45.8-1.1,53.6,12.2'/>",
478 479
479 - 'stroke4'=>"<path d='M18,122.6c42.3-4.6,87.4-5.1,130.3-1.6'/>
480 + 'stroke4' => "<path d='M18,122.6c42.3-4.6,87.4-5.1,130.3-1.6'/>
480 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
481 482 c55.5-4.2,112.6-1.8,166,1.1'/>
482 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
483 484 c37.6-3.1,76.5-6.4,113.7-2'/>",
484 485
485 - 'stroke5'=>"<path d='M53.4,135.8c-12.8-1.5-25.6-1.3-38.3,0.7'/>
486 + 'stroke5' => "<path d='M53.4,135.8c-12.8-1.5-25.6-1.3-38.3,0.7'/>
486 487 <path d='M111.2,136c-12.2-0.2-24.4-0.5-36.7-0.8'/>
487 488 <path d='M163.3,135.2c-12.2,0.2-24.4,0.5-36.6,0.8'/>
488 489 <path d='M217.8,134.7c-12.5,0.6-24.9,1.2-37.4,1.8'/>
489 490 <path d='M274.7,135.5c-12.8,0.1-25.5,0.1-38.3,0.2'/>
@@ -491,112 +492,128 @@
491 492 <path d='M378.8,134.7c-12.2,0.6-24.4,1.2-36.6,1.8'/>
492 493 <path d='M432.5,136.4c-12.2-0.6-24.4-1.1-36.6-1.7'/>
493 494 <path d='M487.9,136.1c-11.6-1.3-23.3-1.4-35-0.2'/>",
494 495
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 + '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
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"/>
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"/>
500 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"/>'
501 502 ];
502 503
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'){
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') {
513 514 $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>';
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>';
516 517 }
517 - }
518 + }
518 519
519 - return $svg;
520 + return $svg;
520 521 }
521 522
522 - protected function render()
523 + protected function render()
523 524 {
524 525 $settings = $this->get_settings_for_display();
525 526 $tag = $settings['tag'];
526 527 $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
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
531 533
532 534
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 - }
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
556 573
557 - }
558 - ?>
559 - </<?php echo esc_html($tag); ?>>
560 - <?php
561 -
562 574 }
563 - protected function content_template() {
564 - ?>
575 + protected function content_template()
576 + {
577 + ?>
565 578 <#
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 - }
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 + }
601 618 }
602 619 \Elementor\Plugin::instance()->widgets_manager->register(new HighlightedText());