PluginProbe ʕ •ᴥ•ʔ
Elementor Website Builder – more than just a page builder / 4.0.0-dev3
Elementor Website Builder – more than just a page builder v4.0.0-dev3
4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.22.0-dev1 4.0.0-beta3 3.22.0-dev2 4.0.0-beta4 3.22.0-dev3 4.0.0-beta5 3.22.0-dev4 4.0.0-dev1 3.22.0-dev5 4.0.0-dev2 3.22.0-dev6 4.0.0-dev3 3.22.1 4.0.0-dev4 3.22.2 4.0.0-dev5 3.22.3 4.0.1 3.23.0 4.0.2 3.23.0-beta1 3.23.0-beta2 3.23.0-beta3 3.23.0-beta4 3.23.0-beta5 3.23.0-beta6 3.23.0-dev1 3.23.0-dev2 3.23.0-dev3 3.23.0-dev4 3.23.0-dev5 3.23.0-dev6 3.23.1 3.23.2 3.23.3 3.23.4 3.24.0 3.24.0-beta1 3.24.0-beta2 3.24.0-beta3 3.24.0-dev1 3.24.0-dev2 3.24.0-dev3 3.24.1 3.24.2 3.24.3 3.24.4 3.24.5 3.24.6 3.24.7 3.24.8 3.25.0 3.25.0-beta1 3.25.0-beta2 3.25.0-beta3 3.25.0-dev1 3.25.0-dev2 3.25.0-dev3 3.25.1 3.25.10 3.25.11 3.25.2 3.25.3 3.25.4 3.25.5 3.25.6 3.25.7 3.25.8 3.25.9 3.26.0 3.26.0-beta1 3.26.0-beta2 3.26.0-beta3 3.26.0-beta4 3.26.0-beta5 3.26.0-dev1 3.26.0-dev2 3.26.0-dev3 3.26.0-dev4 3.26.0-dev5 3.26.1 3.26.2 3.26.3 3.26.4 3.26.5 3.27.0 3.27.0-beta1 3.27.0-beta2 3.27.0-dev1 3.27.0-dev2 3.27.1 3.27.2 3.27.3 3.27.4 3.27.5 3.27.6 3.27.7 3.28.0 3.28.0-beta1 3.28.0-beta2 3.28.0-beta3 3.28.0-dev1 3.28.0-dev2 3.28.0-dev3 3.28.1 3.28.2 3.28.3 3.28.4 3.29.0 3.29.0-beta1 trunk 3.29.0-beta2 3.0.0 3.29.0-beta3 3.0.1 3.29.0-beta4 3.0.10 3.29.0-dev1 3.0.11 3.29.0-dev2 3.0.12 3.29.0-dev3 3.0.13 3.29.0-dev4 3.0.14 3.29.1 3.0.15 3.29.2 3.0.16 3.3.0 3.0.2 3.3.1 3.0.3 3.30.0 3.0.4 3.30.0-beta1 3.0.5 3.30.0-beta2 3.0.6 3.30.0-beta3 3.0.7 3.30.0-dev1 3.0.8 3.30.0-dev2 3.0.8.1 3.30.0-dev3 3.0.9 3.30.1 3.1.0 3.30.2 3.1.0-beta1 3.30.3 3.1.0-beta2 3.30.4 3.1.0-beta3 3.31.0 3.1.0-beta4 3.31.0-beta1 3.1.0-dev1 3.31.0-beta2 3.1.0-dev2 3.31.0-dev1 3.1.0-dev3 3.31.0-dev2 3.1.1 3.31.1 3.1.2 3.31.2 3.1.3 3.31.3 3.1.4 3.31.4 3.10.0 3.31.5 3.10.0-dev1 3.32.0 3.10.1 3.32.0-beta1 3.10.2 3.32.0-beta2 3.11.0 3.32.0-beta3 3.11.0-beta1 3.32.0-dev1 3.11.0-beta2 3.32.0-dev2 3.11.0-beta3 3.32.0-dev3 3.11.0-dev1 3.32.1 3.11.0-dev2 3.32.2 3.11.0-dev3 3.32.3 3.11.1 3.32.4 3.11.2 3.32.5 3.11.3 3.33.0 3.11.4 3.33.0-beta1 3.11.5 3.33.0-beta2 3.12.0 3.33.0-beta3 3.12.1 3.33.0-beta4 3.12.2 3.33.0-dev1 3.13.0 3.33.0-dev2 3.13.0-beta1 3.33.0-dev3 3.13.0-beta2 3.33.0-dev4 3.13.0-beta3 3.33.1 3.13.0-dev3 3.33.2 3.13.0-dev4 3.33.3 3.13.1 3.33.4 3.13.2 3.33.5 3.13.3 3.33.6 3.13.4 3.34.0 3.14.0 3.34.0-beta1 3.14.0-beta1 3.34.0-beta2 3.14.0-beta2 3.34.0-beta3 3.14.0-beta3 3.34.0-dev1 3.14.0-beta4 3.34.0-dev2 3.14.0-beta5 3.34.1 3.14.1 3.34.2 3.15.0 3.34.3 3.15.1 3.34.4 3.15.2 3.35.0 3.15.3 3.35.0-beta1 3.16.0 3.35.0-beta2 3.16.0-beta3 3.35.0-beta3 3.16.0-beta4 3.35.0-beta4 3.16.0-dev1 3.35.0-dev1 3.16.0-dev2 3.35.0-dev2 3.16.1 3.35.0-dev3 3.16.2 3.35.0-dev4 3.16.3 3.35.1 3.16.4 3.35.2 3.16.5 3.35.3 3.16.6 3.35.4 3.17.0 3.35.5 3.17.0-dev2 3.35.6 3.17.0-dev3 3.35.7 3.17.0-dev4 3.35.8 3.17.1 3.35.9 3.17.2 3.4.0 3.17.3 3.4.0-dev7 3.18.0 3.4.0-dev8 3.18.0-beta1 3.4.0-dev9 3.18.0-beta2 3.4.1 3.18.0-beta3 3.4.2 3.18.0-beta4 3.4.3 3.18.0-dev1 3.4.4 3.18.1 3.4.5 3.18.2 3.4.6 3.18.3 3.4.7 3.19.0 3.4.8 3.19.0-beta1 3.5.0 3.19.0-beta2 3.5.0-beta1 3.19.0-beta3 3.5.0-beta2 3.19.0-beta4 3.5.0-beta3 3.19.0-beta5 3.5.0-beta4 3.19.0-beta6 3.5.0-beta5 3.19.0-dev1 3.5.0-beta7 3.19.0-dev2 3.5.0-beta8 3.19.0-dev3 3.5.0-dev8 3.19.0-dev4 3.5.0-dev9 3.19.0-dev5 3.5.1 3.19.0-dev6 3.5.2 3.19.1 3.5.3 3.19.2 3.5.4 3.19.3 3.5.5 3.19.4 3.5.6 3.2.0 3.6.0 3.2.1 3.6.0-beta1 3.2.2 3.6.0-beta2 3.2.3 3.6.0-beta3 3.2.4 3.6.0-beta4 3.2.5 3.6.0-beta5 3.20.0 3.6.0-dev1 3.20.0-beta1 3.6.0-dev10 3.20.0-beta2 3.6.1 3.20.0-beta3 3.6.2 3.20.0-beta4 3.6.3 3.20.0-dev1 3.6.4 3.20.0-dev2 3.6.5 3.20.0-dev3 3.6.6 3.20.0-dev4 3.6.7 3.20.1 3.6.8 3.20.2 3.7.0 3.20.3 3.7.0-beta1 3.20.4 3.7.0-beta2 3.21.0 3.7.0-beta3 3.21.0-beta1 3.7.0-beta4 3.21.0-beta2 3.7.0-dev1 3.21.0-beta3 3.7.1 3.21.0-dev1 3.7.2 3.21.0-dev2 3.7.3 3.21.0-dev3 3.7.4 3.21.1 3.7.5 3.21.2 3.7.6 3.21.3 3.7.7 3.21.4 3.7.8 3.21.5 3.8.0 3.21.6 3.8.0-beta1 3.21.7 3.8.0-beta2 3.21.8 3.8.0-beta3 3.22.0 3.8.1 3.22.0-beta1 3.9.0 3.22.0-beta2 3.9.1 3.22.0-beta3 3.9.2 3.22.0-beta4 4.0.0 3.22.0-beta5 4.0.0-beta1 3.22.0-beta6 4.0.0-beta2
elementor / includes / widgets / progress.php
elementor / includes / widgets Last commit date
traits 5 months ago accordion.php 9 months ago alert.php 9 months ago audio.php 1 year ago button.php 9 months ago common-base.php 8 months ago common-optimized.php 1 year ago common.php 1 year ago counter.php 5 months ago divider.php 7 months ago google-maps.php 1 year ago heading.php 4 months ago html.php 1 year ago icon-box.php 5 months ago icon-list.php 5 months ago icon.php 5 months ago image-box.php 5 months ago image-carousel.php 5 months ago image-gallery.php 5 months ago image.php 5 months ago inner-section.php 2 years ago menu-anchor.php 1 year ago progress.php 11 months ago rating.php 9 months ago read-more.php 1 year ago shortcode.php 1 year ago sidebar.php 1 year ago social-icons.php 2 months ago spacer.php 1 year ago star-rating.php 5 months ago tabs.php 5 months ago testimonial.php 5 months ago text-editor.php 5 months ago toggle.php 9 months ago video.php 7 months ago wordpress.php 1 year ago
progress.php
579 lines
1 <?php
2 namespace Elementor;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit; // Exit if accessed directly.
6 }
7
8 use Elementor\Core\Kits\Documents\Tabs\Global_Colors;
9 use Elementor\Core\Kits\Documents\Tabs\Global_Typography;
10
11 /**
12 * Elementor progress widget.
13 *
14 * Elementor widget that displays an escalating progress bar.
15 *
16 * @since 1.0.0
17 */
18 class Widget_Progress extends Widget_Base {
19
20 /**
21 * Get widget name.
22 *
23 * Retrieve progress widget name.
24 *
25 * @since 1.0.0
26 * @access public
27 *
28 * @return string Widget name.
29 */
30 public function get_name() {
31 return 'progress';
32 }
33
34 /**
35 * Get widget title.
36 *
37 * Retrieve progress widget title.
38 *
39 * @since 1.0.0
40 * @access public
41 *
42 * @return string Widget title.
43 */
44 public function get_title() {
45 return esc_html__( 'Progress Bar', 'elementor' );
46 }
47
48 /**
49 * Get widget icon.
50 *
51 * Retrieve progress widget icon.
52 *
53 * @since 1.0.0
54 * @access public
55 *
56 * @return string Widget icon.
57 */
58 public function get_icon() {
59 return 'eicon-skill-bar';
60 }
61
62 /**
63 * Get widget keywords.
64 *
65 * Retrieve the list of keywords the widget belongs to.
66 *
67 * @since 2.1.0
68 * @access public
69 *
70 * @return array Widget keywords.
71 */
72 public function get_keywords() {
73 return [ 'progress', 'bar' ];
74 }
75
76 protected function is_dynamic_content(): bool {
77 return false;
78 }
79
80 /**
81 * Get style dependencies.
82 *
83 * Retrieve the list of style dependencies the widget requires.
84 *
85 * @since 3.24.0
86 * @access public
87 *
88 * @return array Widget style dependencies.
89 */
90 public function get_style_depends(): array {
91 return [ 'widget-progress' ];
92 }
93
94 public function has_widget_inner_wrapper(): bool {
95 return ! Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
96 }
97
98 /**
99 * Register progress widget controls.
100 *
101 * Adds different input fields to allow the user to change and customize the widget settings.
102 *
103 * @since 3.1.0
104 * @access protected
105 */
106 protected function register_controls() {
107 $this->start_controls_section(
108 'section_progress',
109 [
110 'label' => esc_html__( 'Progress Bar', 'elementor' ),
111 ]
112 );
113
114 $this->add_control(
115 'title',
116 [
117 'label' => esc_html__( 'Title', 'elementor' ),
118 'type' => Controls_Manager::TEXT,
119 'dynamic' => [
120 'active' => true,
121 ],
122 'placeholder' => esc_html__( 'Enter your title', 'elementor' ),
123 'default' => esc_html__( 'My Skill', 'elementor' ),
124 'label_block' => true,
125 ]
126 );
127
128 $this->add_control(
129 'title_tag',
130 [
131 'label' => esc_html__( 'Title HTML Tag', 'elementor' ),
132 'type' => Controls_Manager::SELECT,
133 'options' => [
134 'h1' => 'H1',
135 'h2' => 'H2',
136 'h3' => 'H3',
137 'h4' => 'H4',
138 'h5' => 'H5',
139 'h6' => 'H6',
140 'div' => 'div',
141 'span' => 'span',
142 'p' => 'p',
143 ],
144 'default' => 'span',
145 'condition' => [
146 'title!' => '',
147 ],
148 ]
149 );
150
151 $this->add_control(
152 'title_display',
153 [
154 'label' => esc_html__( 'Display Title', 'elementor' ),
155 'type' => Controls_Manager::SWITCHER,
156 'label_on' => esc_html__( 'Show', 'elementor' ),
157 'label_off' => esc_html__( 'Hide', 'elementor' ),
158 'default' => 'yes',
159 'condition' => [
160 'title!' => '',
161 ],
162 ]
163 );
164
165 $this->add_control(
166 'progress_type',
167 [
168 'label' => esc_html__( 'Type', 'elementor' ),
169 'type' => Controls_Manager::SELECT,
170 'options' => [
171 '' => esc_html__( 'Default', 'elementor' ),
172 'info' => esc_html__( 'Info', 'elementor' ),
173 'success' => esc_html__( 'Success', 'elementor' ),
174 'warning' => esc_html__( 'Warning', 'elementor' ),
175 'danger' => esc_html__( 'Danger', 'elementor' ),
176 ],
177 'default' => '',
178 'condition' => [
179 'progress_type!' => '', // a workaround to hide the control, unless it's in use (not default).
180 ],
181 'separator' => 'before',
182 ]
183 );
184
185 $this->add_control(
186 'percent',
187 [
188 'label' => esc_html__( 'Percentage', 'elementor' ),
189 'type' => Controls_Manager::SLIDER,
190 'default' => [
191 'size' => 50,
192 'unit' => '%',
193 ],
194 'dynamic' => [
195 'active' => true,
196 ],
197 'separator' => 'before',
198 ]
199 );
200
201 $this->add_control(
202 'display_percentage',
203 [
204 'label' => esc_html__( 'Display Percentage', 'elementor' ),
205 'type' => Controls_Manager::SWITCHER,
206 'label_on' => esc_html__( 'Show', 'elementor' ),
207 'label_off' => esc_html__( 'Hide', 'elementor' ),
208 'return_value' => 'show',
209 'default' => 'show',
210 'condition' => [
211 'percent!' => '',
212 ],
213 ]
214 );
215
216 $this->add_control(
217 'inner_text',
218 [
219 'label' => esc_html__( 'Inner Text', 'elementor' ),
220 'type' => Controls_Manager::TEXT,
221 'dynamic' => [
222 'active' => true,
223 ],
224 'placeholder' => esc_html__( 'e.g. Web Designer', 'elementor' ),
225 'default' => esc_html__( 'Web Designer', 'elementor' ),
226 'label_block' => true,
227 'separator' => 'before',
228 ]
229 );
230
231 $this->end_controls_section();
232
233 $this->start_controls_section(
234 'section_progress_style',
235 [
236 'label' => esc_html__( 'Progress Bar', 'elementor' ),
237 'tab' => Controls_Manager::TAB_STYLE,
238 ]
239 );
240
241 $this->add_control(
242 'title_heading',
243 [
244 'label' => esc_html__( 'Title', 'elementor' ),
245 'type' => Controls_Manager::HEADING,
246 'condition' => [
247 'title!' => '',
248 ],
249 ]
250 );
251
252 $this->add_control(
253 'title_color',
254 [
255 'label' => esc_html__( 'Text Color', 'elementor' ),
256 'type' => Controls_Manager::COLOR,
257 'selectors' => [
258 '{{WRAPPER}} .elementor-title' => 'color: {{VALUE}};',
259 ],
260 'global' => [
261 'default' => Global_Colors::COLOR_PRIMARY,
262 ],
263 'condition' => [
264 'title!' => '',
265 ],
266 ]
267 );
268
269 $this->add_group_control(
270 Group_Control_Typography::get_type(),
271 [
272 'name' => 'typography',
273 'selector' => '{{WRAPPER}} .elementor-title',
274 'global' => [
275 'default' => Global_Typography::TYPOGRAPHY_TEXT,
276 ],
277 'condition' => [
278 'title!' => '',
279 ],
280 ]
281 );
282
283 $this->add_group_control(
284 Group_Control_Text_Shadow::get_type(),
285 [
286 'name' => 'title_shadow',
287 'selector' => '{{WRAPPER}} .elementor-title',
288 'condition' => [
289 'title!' => '',
290 ],
291 ]
292 );
293
294 $this->add_control(
295 'percentage_heading',
296 [
297 'label' => esc_html__( 'Percentage', 'elementor' ),
298 'type' => Controls_Manager::HEADING,
299 'separator' => 'before',
300 ]
301 );
302
303 $this->add_control(
304 'bar_color',
305 [
306 'label' => esc_html__( 'Color', 'elementor' ),
307 'type' => Controls_Manager::COLOR,
308 'global' => [
309 'default' => Global_Colors::COLOR_PRIMARY,
310 ],
311 'selectors' => [
312 '{{WRAPPER}} .elementor-progress-wrapper .elementor-progress-bar' => 'background-color: {{VALUE}};',
313 ],
314 ]
315 );
316
317 $this->add_control(
318 'bar_bg_color',
319 [
320 'label' => esc_html__( 'Background Color', 'elementor' ),
321 'type' => Controls_Manager::COLOR,
322 'selectors' => [
323 '{{WRAPPER}} .elementor-progress-wrapper' => 'background-color: {{VALUE}};',
324 ],
325 ]
326 );
327
328 $this->add_control(
329 'bar_height',
330 [
331 'label' => esc_html__( 'Height', 'elementor' ),
332 'type' => Controls_Manager::SLIDER,
333 'size_units' => [ 'px', 'em', 'rem', 'custom' ],
334 'selectors' => [
335 '{{WRAPPER}} .elementor-progress-bar' => 'height: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}};',
336 ],
337 ]
338 );
339
340 $this->add_control(
341 'bar_border_radius',
342 [
343 'label' => esc_html__( 'Border Radius', 'elementor' ),
344 'type' => Controls_Manager::SLIDER,
345 'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
346 'selectors' => [
347 '{{WRAPPER}} .elementor-progress-wrapper' => 'border-radius: {{SIZE}}{{UNIT}}; overflow: hidden;',
348 ],
349 ]
350 );
351
352 $this->add_control(
353 'inner_text_heading',
354 [
355 'label' => esc_html__( 'Inner Text', 'elementor' ),
356 'type' => Controls_Manager::HEADING,
357 'separator' => 'before',
358 'condition' => [
359 'inner_text!' => '',
360 ],
361 ]
362 );
363
364 $this->add_control(
365 'bar_inline_color',
366 [
367 'label' => esc_html__( 'Color', 'elementor' ),
368 'type' => Controls_Manager::COLOR,
369 'selectors' => [
370 '{{WRAPPER}} .elementor-progress-bar' => 'color: {{VALUE}};',
371 ],
372 'condition' => [
373 'inner_text!' => '',
374 ],
375 ]
376 );
377
378 $this->add_group_control(
379 Group_Control_Typography::get_type(),
380 [
381 'name' => 'bar_inner_typography',
382 'selector' => '{{WRAPPER}} .elementor-progress-bar',
383 'exclude' => [
384 'line_height',
385 ],
386 'condition' => [
387 'inner_text!' => '',
388 ],
389 ]
390 );
391
392 $this->add_group_control(
393 Group_Control_Text_Shadow::get_type(),
394 [
395 'name' => 'bar_inner_shadow',
396 'selector' => '{{WRAPPER}} .elementor-progress-bar',
397 'condition' => [
398 'inner_text!' => '',
399 ],
400 ]
401 );
402
403 $this->end_controls_section();
404 }
405
406 /**
407 * Render progress widget output on the frontend.
408 * Make sure value does no exceed 100%.
409 *
410 * Written in PHP and used to generate the final HTML.
411 *
412 * @since 1.0.0
413 * @access protected
414 */
415 protected function render() {
416 $settings = $this->get_settings_for_display();
417
418 if ( empty( $settings['title'] ) && empty( $settings['percent']['size'] ) ) {
419 return;
420 }
421
422 $progressbar_id = 'elementor-progress-bar-' . $this->get_id();
423
424 $progress_percentage = is_numeric( $settings['percent']['size'] ) ? $settings['percent']['size'] : '0';
425 if ( 100 < $progress_percentage ) {
426 $progress_percentage = 100;
427 }
428
429 if ( ! Utils::is_empty( $settings['title'] ) ) {
430
431 if ( 'yes' === $settings['title_display'] ) {
432
433 $this->add_render_attribute(
434 'title',
435 [
436 'class' => 'elementor-title',
437 'id' => $progressbar_id,
438 ]
439 );
440
441 $this->add_inline_editing_attributes( 'title' );
442
443 $this->add_render_attribute( 'wrapper', 'aria-labelledby', $progressbar_id );
444
445 } else {
446
447 $this->add_render_attribute( 'wrapper', 'aria-label', $settings['title'] );
448
449 }
450 }
451
452 $this->add_render_attribute(
453 'wrapper',
454 [
455 'class' => 'elementor-progress-wrapper',
456 'role' => 'progressbar',
457 'aria-valuemin' => '0',
458 'aria-valuemax' => '100',
459 'aria-valuenow' => $progress_percentage,
460 ]
461 );
462
463 if ( ! empty( $settings['inner_text'] ) ) {
464 $this->add_render_attribute( 'wrapper', 'aria-valuetext', "{$progress_percentage}% ({$settings['inner_text']})" );
465 }
466
467 if ( ! empty( $settings['progress_type'] ) ) {
468 $this->add_render_attribute( 'wrapper', 'class', 'progress-' . $settings['progress_type'] );
469 }
470
471 $this->add_render_attribute(
472 'progress-bar',
473 [
474 'class' => 'elementor-progress-bar',
475 'data-max' => $progress_percentage,
476 ]
477 );
478
479 $this->add_render_attribute( 'inner_text', 'class', 'elementor-progress-text' );
480
481 $this->add_inline_editing_attributes( 'inner_text' );
482
483 if ( ! Utils::is_empty( $settings['title'] ) && 'yes' === $settings['title_display'] ) { ?>
484 <<?php Utils::print_validated_html_tag( $settings['title_tag'] ); ?> <?php $this->print_render_attribute_string( 'title' ); ?>>
485 <?php echo wp_kses_post( $settings['title'] ); ?>
486 </<?php Utils::print_validated_html_tag( $settings['title_tag'] ); ?>>
487 <?php } ?>
488
489 <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
490 <div <?php $this->print_render_attribute_string( 'progress-bar' ); ?>>
491 <span <?php $this->print_render_attribute_string( 'inner_text' ); ?>><?php echo wp_kses_post( $settings['inner_text'] ); ?></span>
492 <?php if ( 'show' === $settings['display_percentage'] ) { ?>
493 <span class="elementor-progress-percentage"><?php echo $progress_percentage; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>%</span>
494 <?php } ?>
495 </div>
496 </div>
497 <?php
498 }
499
500 /**
501 * Render progress widget output in the editor.
502 *
503 * Written as a Backbone JavaScript template and used to generate the live preview.
504 *
505 * @since 2.9.0
506 * @access protected
507 */
508 protected function content_template() {
509 ?>
510 <#
511 if ( '' === settings.title && '' === settings.percent.size ) {
512 return;
513 }
514
515 const title_tag = elementor.helpers.validateHTMLTag( settings.title_tag );
516 const progressbar_id = 'elementor-progress-bar-<?php echo esc_attr( $this->get_id() ); ?>';
517
518 let progress_percentage = 0;
519 if ( ! isNaN( settings.percent.size ) ) {
520 progress_percentage = 100 < settings.percent.size ? 100 : settings.percent.size;
521 }
522
523 if ( settings.title ) {
524
525 if ( 'yes' === settings.title_display ) {
526
527 view.addRenderAttribute(
528 'title',
529 {
530 'class': 'elementor-title',
531 'id': progressbar_id,
532 }
533 );
534
535 view.addInlineEditingAttributes( 'title' );
536
537 view.addRenderAttribute( 'progressWrapper', 'aria-labelledby', progressbar_id );
538
539 } else {
540
541 view.addRenderAttribute( 'progressWrapper', 'aria-label', settings.title );
542
543 }
544 }
545
546 view.addRenderAttribute(
547 'progressWrapper',
548 {
549 'class': [ 'elementor-progress-wrapper', 'progress-' + settings.progress_type ],
550 'role': 'progressbar',
551 'aria-valuemin': '0',
552 'aria-valuemax': '100',
553 'aria-valuenow': progress_percentage,
554 }
555 );
556
557 if ( '' !== settings.inner_text ) {
558 view.addRenderAttribute( 'progressWrapper', 'aria-valuetext', progress_percentage + '% (' + settings.inner_text + ')' );
559 }
560
561 view.addRenderAttribute( 'inner_text', 'class', 'elementor-progress-text' );
562
563 view.addInlineEditingAttributes( 'inner_text' );
564 #>
565 <# if ( settings.title && 'yes' === settings.title_display ) { #>
566 <{{ title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{ settings.title }}</{{ title_tag }}>
567 <# } #>
568 <div {{{ view.getRenderAttributeString( 'progressWrapper' ) }}}>
569 <div class="elementor-progress-bar" data-max="{{ progress_percentage }}">
570 <span {{{ view.getRenderAttributeString( 'inner_text' ) }}}>{{ settings.inner_text }}</span>
571 <# if ( 'show' === settings.display_percentage ) { #>
572 <span class="elementor-progress-percentage">{{{ progress_percentage }}}%</span>
573 <# } #>
574 </div>
575 </div>
576 <?php
577 }
578 }
579