PluginProbe
Easy Elements for Elementor – Addons & Website Templates / 1.0.7
Easy Elements for Elementor – Addons & Website Templates v1.0.7
1.5.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.6 1.4.7 1.4.8 1.4.5 1.4.4 1.4.3 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 All 47 releases
easy-elements / widgets / heading / heading.php

heading.php in Easy Elements for Elementor – Addons & Website Templates 1.0.7, at widgets/heading/heading.php

1,277 lines 38.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 use Elementor\Controls_Manager;
3 use Elementor\Group_Control_Typography;
4 use Elementor\Widget_Base;
5 use Elementor\Group_Control_Background;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit;
9 }
10
11 class Easyel_Heading_Widget extends \Elementor\Widget_Base {
12
13 public function get_style_depends() {
14 $handle = 'eel-heading-style';
15 $css_path = plugin_dir_path( __FILE__ ) . 'css/heading.css';
16
17 if ( ! wp_style_is( $handle, 'registered' ) && file_exists( $css_path ) ) {
18 wp_register_style( $handle, plugins_url( 'css/heading.css', __FILE__ ), [], defined( 'WP_DEBUG' ) && WP_DEBUG ? filemtime( $css_path ) : '1.0.0' );
19 }
20 return [ $handle ];
21 }
22
23 public function get_name() {
24 return 'eel-heading';
25 }
26
27 public function get_title() {
28 return __( 'Heading', 'easy-elements' );
29 }
30
31 public function get_icon() {
32 return 'easyicon easyelIcon-heading';
33 }
34
35 public function get_categories() {
36 return [ 'easyelements_category' ];
37 }
38 public function get_keywords() {
39 return [ 'heading', 'title', 'link', 'click', 'text' ];
40 }
41
42 protected function register_controls() {
43
44 $this->start_controls_section(
45 'content_section',
46 [
47 'label' => esc_html__('Easy Heading Settings', 'easy-elements'),
48 'tab' => Controls_Manager::TAB_CONTENT,
49 ]
50 );
51
52 $this->add_control(
53 'title',
54 [
55 'label' => esc_html__('Heading Text', 'easy-elements'),
56 'type' => Controls_Manager::TEXTAREA,
57 'default' => esc_html__('Heading Here', 'easy-elements'),
58 'label_block' => true,
59 'description' => esc_html__('You can highlight part of the text using double curly brackets. Example: Heading {{Here}} will highlight "Here".', 'easy-elements'),
60 ]
61 );
62
63 $this->add_control(
64 'show_border_title',
65 [
66 'label' => esc_html__( 'Show Border', 'easy-elements' ),
67 'type' => \Elementor\Controls_Manager::SWITCHER,
68 'label_on' => esc_html__( 'Show', 'easy-elements' ),
69 'label_off' => esc_html__( 'Hide', 'easy-elements' ),
70 'return_value' => 'yes',
71 'default' => '',
72 ]
73 );
74
75 $this->add_control(
76 'show_gradient_title',
77 [
78 'label' => esc_html__( 'Gradient Text', 'easy-elements' ),
79 'type' => \Elementor\Controls_Manager::SWITCHER,
80 'label_on' => esc_html__( 'Show', 'easy-elements' ),
81 'label_off' => esc_html__( 'Hide', 'easy-elements' ),
82 'return_value' => 'yes',
83 'default' => '',
84 ]
85 );
86
87 $this->add_control(
88 'border_position',
89 [
90 'label' => esc_html__( 'Border Position', 'easy-elements' ),
91 'type' => \Elementor\Controls_Manager::SELECT,
92 'default' => 'eel_title_start',
93 'options' => [
94 'eel_title_start' => esc_html__( 'Only Start Title', 'easy-elements' ),
95 'eel_title_end' => esc_html__( 'Only Title End', 'easy-elements' ),
96 'eel_full_title_start' => esc_html__( 'Full Title Part Start', 'easy-elements' ),
97 'eel_full_title_end' => esc_html__( 'Full Title Part End', 'easy-elements' ),
98 ],
99 'condition' => [
100 'show_border_title' => 'yes',
101 ],
102 ]
103 );
104
105
106 $this->add_control(
107 'border_color',
108 [
109 'label' => esc_html__('Border Color', 'easy-elements'),
110 'type' => Controls_Manager::COLOR,
111 'selectors' => [
112 '{{WRAPPER}} .eel_full_title_end, {{WRAPPER}} .eel_title_end .e-e-title, {{WRAPPER}} .eel_full_title_start, {{WRAPPER}} .eel_title_start .e-e-title' => 'border-color: {{VALUE}};',
113 ],
114 'condition' => [
115 'show_border_title' => 'yes',
116 ],
117 ]
118 );
119
120 $this->add_responsive_control(
121 'title_border_padding',
122 [
123 'label' => esc_html__( 'Padding', 'easy-elements' ),
124 'type' => \Elementor\Controls_Manager::DIMENSIONS,
125 'size_units' => [ 'px', '%', 'em' ],
126 'selectors' => [
127 '{{WRAPPER}} .eel_full_title_end, {{WRAPPER}} .eel_title_end .e-e-title, {{WRAPPER}} .eel_full_title_start, {{WRAPPER}} .eel_title_start .e-e-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
128 ],
129 'condition' => [
130 'show_border_title' => 'yes',
131 ],
132 ]
133 );
134
135
136 $this->add_control(
137 'link',
138 [
139 'label' => __( 'Link', 'easy-elements' ),
140 'type' => \Elementor\Controls_Manager::URL,
141 'placeholder' => 'https://your-link.com',
142 'default' => [
143 'url' => '',
144 'is_external' => false,
145 'nofollow' => false,
146 ],
147 'show_external' => true,
148 'description' => esc_html__( 'Set a URL to make the heading clickable. Supports opening in a new tab and nofollow attribute.', 'easy-elements' ),
149 ]
150 );
151
152 $this->add_control(
153 'title_tag',
154 [
155 'label' => esc_html__('Select Tag', 'easy-elements'),
156 'type' => Controls_Manager::SELECT,
157 'default' => 'h2',
158 'options' => [
159 'h1' => 'H1',
160 'h2' => 'H2',
161 'h3' => 'H3',
162 'h4' => 'H4',
163 'h5' => 'H5',
164 'h6' => 'H6',
165 'div' => 'div',
166 ],
167 ]
168 );
169
170 $this->add_control(
171 'description',
172 [
173 'label' => esc_html__('Description', 'easy-elements'),
174 'type' => Controls_Manager::TEXTAREA,
175 'label_block' => true,
176 ]
177 );
178
179
180 $this->add_responsive_control(
181 'align',
182 [
183 'label' => esc_html__('Alignment', 'easy-elements'),
184 'type' => Controls_Manager::CHOOSE,
185 'options' => [
186 'left' => [
187 'title' => esc_html__('Left', 'easy-elements'),
188 'icon' => 'eicon-text-align-left',
189 ],
190 'center' => [
191 'title' => esc_html__('Center', 'easy-elements'),
192 'icon' => 'eicon-text-align-center',
193 ],
194 'right' => [
195 'title' => esc_html__('Right', 'easy-elements'),
196 'icon' => 'eicon-text-align-right',
197 ],
198 'justify' => [
199 'title' => esc_html__('Justify', 'easy-elements'),
200 'icon' => 'eicon-text-align-justify',
201 ],
202 ],
203 'toggle' => true,
204 'selectors' => [
205 '{{WRAPPER}} .e-e-heading' => 'text-align: {{VALUE}}',
206 '{{WRAPPER}} .image-heading' => 'justify-content: {{VALUE}}',
207 ],
208 ]
209 );
210
211 $this->end_controls_section();
212
213 $this->start_controls_section(
214 'sub_heading_section',
215 [
216 'label' => esc_html__('Sub Heading Settings', 'easy-elements'),
217 'tab' => Controls_Manager::TAB_CONTENT,
218 ]
219 );
220
221 $this->add_control(
222 'sub_title',
223 [
224 'label' => esc_html__( 'Sub Heading', 'easy-elements' ),
225 'type' => \Elementor\Controls_Manager::TEXTAREA,
226 'label_block' => true,
227 ]
228 );
229
230 $this->add_control(
231 'show_gradient_border',
232 [
233 'label' => esc_html__( 'Show Gradient Border', 'easy-elements' ),
234 'type' => \Elementor\Controls_Manager::SWITCHER,
235 'label_on' => esc_html__( 'Show', 'easy-elements' ),
236 'label_off' => esc_html__( 'Hide', 'easy-elements' ),
237 'return_value' => 'yes',
238 'default' => '',
239 ]
240 );
241
242 $this->add_control(
243 'gradient_color_1',
244 [
245 'label' => esc_html__( 'Gradient Color 1', 'easy-elements' ),
246 'type' => \Elementor\Controls_Manager::COLOR,
247 'default' => 'rgba(0, 0, 0, 0.15)',
248 'selectors' => [
249 '{{WRAPPER}} .easy_gradiant_border::before' => '--grad-color-1: {{VALUE}};',
250 ],
251 'condition' => [
252 'show_gradient_border' => 'yes',
253 ],
254 ]
255 );
256
257 $this->add_control(
258 'gradient_color_2',
259 [
260 'label' => esc_html__( 'Gradient Color 2', 'easy-elements' ),
261 'type' => \Elementor\Controls_Manager::COLOR,
262 'default' => 'rgba(0, 0, 0, 0.30)',
263 'selectors' => [
264 '{{WRAPPER}} .easy_gradiant_border::before' => '--grad-color-2: {{VALUE}};',
265 ],
266 'condition' => [
267 'show_gradient_border' => 'yes',
268 ],
269 ]
270 );
271
272 $this->add_control(
273 'gradient_color_3',
274 [
275 'label' => esc_html__( 'Gradient Color 3', 'easy-elements' ),
276 'type' => \Elementor\Controls_Manager::COLOR,
277 'default' => 'rgba(0, 0, 0, 0.50)',
278 'selectors' => [
279 '{{WRAPPER}} .easy_gradiant_border::before' => '--grad-color-3: {{VALUE}};',
280 ],
281 'condition' => [
282 'show_gradient_border' => 'yes',
283 ],
284 ]
285 );
286
287
288 $this->add_responsive_control(
289 'sub_gradient_border_padding',
290 [
291 'label' => __('Gradient Border Padding', 'easy-elements'),
292 'type' => \Elementor\Controls_Manager::DIMENSIONS,
293 'size_units' => ['px', '%', 'em'],
294 'selectors' => [
295 '{{WRAPPER}} .easy_gradiant_border' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
296 ],
297 'condition' => [
298 'show_gradient_border' => 'yes',
299 ],
300 ]
301 );
302
303 $this->add_responsive_control(
304 'gradient_border_radius',
305 [
306 'label' => esc_html__( 'Border Radius', 'easy-elements' ),
307 'type' => \Elementor\Controls_Manager::SLIDER,
308 'size_units' => [ 'px', '%' ],
309 'range' => [
310 'px' => [
311 'min' => 0,
312 'max' => 200,
313 ],
314 '%' => [
315 'min' => 0,
316 'max' => 100,
317 ],
318 ],
319 'default' => [
320 'unit' => 'px',
321 'size' => 40,
322 ],
323 'selectors' => [
324 '{{WRAPPER}} .easy_gradiant_border::before' => '--grad-border-radius: {{SIZE}}{{UNIT}};',
325 ],
326 ]
327 );
328
329
330 $this->add_control(
331 'sub_heading_type',
332 [
333 'label' => esc_html__( 'Sub Heading Type', 'easy-elements' ),
334 'type' => \Elementor\Controls_Manager::CHOOSE,
335 'options' => [
336 'none' => [
337 'title' => esc_html__( 'None', 'easy-elements' ),
338 'icon' => 'eicon-ban',
339 ],
340 'icon' => [
341 'title' => esc_html__( 'Icon', 'easy-elements' ),
342 'icon' => 'eicon-star',
343 ],
344 'image' => [
345 'title' => esc_html__( 'Image', 'easy-elements' ),
346 'icon' => 'eicon-image-bold',
347 ],
348 ],
349 'default' => 'none',
350 'toggle' => false,
351 ]
352 );
353
354 $this->add_control(
355 'sub_heading_icon',
356 [
357 'label' => esc_html__( 'Select Icon', 'easy-elements' ),
358 'type' => \Elementor\Controls_Manager::ICONS,
359 'default' => [
360 'value' => 'fas fa-heart',
361 'library' => 'fa-solid',
362 ],
363 'condition' => [
364 'sub_heading_type' => 'icon',
365 ],
366 ]
367 );
368
369 $this->add_control(
370 'sub_heading_image',
371 [
372 'label' => esc_html__( 'Upload Image', 'easy-elements' ),
373 'type' => \Elementor\Controls_Manager::MEDIA,
374 'default' => [
375 'url' => \Elementor\Utils::get_placeholder_image_src(),
376 ],
377 'condition' => [
378 'sub_heading_type' => 'image',
379 ],
380 ]
381 );
382
383 $this->add_control(
384 'icon_color',
385 [
386 'label' => esc_html__('Color', 'easy-elements'),
387 'type' => Controls_Manager::COLOR,
388 'selectors' => [
389 '{{WRAPPER}} .eel-sub-heading i, {{WRAPPER}} .eel-sub-heading svg' => 'color: {{VALUE}}; fill: {{VALUE}};',
390 ],
391 'condition' => [
392 'sub_heading_type' => ['icon'],
393 ],
394 ]
395 );
396
397 $this->add_responsive_control(
398 'sub_heading_icon_margin',
399 [
400 'label' => esc_html__( 'Icon Spacing', 'easy-elements' ),
401 'type' => \Elementor\Controls_Manager::DIMENSIONS,
402 'size_units' => [ 'px', '%', 'em' ],
403 'selectors' => [
404 '{{WRAPPER}} .eel-sub-heading span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
405 ],
406 'condition' => [
407 'sub_heading_type' => ['image', 'icon'],
408 ],
409 ]
410 );
411
412 $this->add_control(
413 'icon_direction',
414 [
415 'label' => esc_html__( 'Direction', 'easy-elements' ),
416 'type' => \Elementor\Controls_Manager::CHOOSE,
417 'default' => 'top',
418 'options' => [
419 'left' => [
420 'title' => esc_html__( 'Left', 'easy-elements' ),
421 'icon' => 'eicon-h-align-left',
422 ],
423 'top' => [
424 'title' => esc_html__( 'Top', 'easy-elements' ),
425 'icon' => 'eicon-v-align-top',
426 ],
427 'right' => [
428 'title' => esc_html__( 'Right', 'easy-elements' ),
429 'icon' => 'eicon-h-align-right',
430 ],
431 ],
432 'toggle' => false,
433 ]
434 );
435 $this->end_controls_section();
436
437 $this->start_controls_section(
438 'separator_section',
439 [
440 'label' => esc_html__('Separator Settings', 'easy-elements'),
441 'tab' => Controls_Manager::TAB_CONTENT,
442 ]
443 );
444
445 $this->add_control(
446 'separator_',
447 [
448 'label' => __( 'Choose Option', 'easy-elements' ),
449 'type' => \Elementor\Controls_Manager::SELECT,
450 'options' => [
451 'none' => __( 'None', 'easy-elements' ),
452 'dotted' => __( 'Dotted', 'easy-elements' ),
453 'solid' => __( 'Solid', 'easy-elements' ),
454 'icon' => __( 'Icon', 'easy-elements' ),
455 'image' => __( 'Image', 'easy-elements' ),
456 ],
457 'default' => 'none',
458 ]
459 );
460
461 $this->add_control(
462 'solid_color',
463 [
464 'label' => esc_html__('Separator Color', 'easy-elements'),
465 'type' => \Elementor\Controls_Manager::COLOR,
466 'selectors' => [
467 '{{WRAPPER}} .eel--separator-icon.dotted::before, {{WRAPPER}} .eel--separator-icon' => 'color: {{VALUE}}; background-color: {{VALUE}};',
468 ],
469 'condition' => [
470 'separator_' => ['solid', 'dotted'],
471 ],
472 ]
473 );
474
475 $this->add_control(
476 'select_icon_',
477 [
478 'label' => esc_html__( 'Select/Upload Icon', 'easy-elements' ),
479 'type' => \Elementor\Controls_Manager::ICONS,
480 'default' => [
481 'value' => 'fas fa-heart',
482 'library' => 'fa-solid',
483 ],
484 'description' => esc_html__( 'You can upload an SVG image or choose a font icon.', 'easy-elements' ),
485 'condition' => [
486 'separator_' => ['icon'],
487 ],
488 ]
489 );
490
491 $this->add_control(
492 'sep_image',
493 [
494 'label' => esc_html__( 'Upload Image', 'easy-elements' ),
495 'type' => \Elementor\Controls_Manager::MEDIA,
496 'default' => [
497 'url' => \Elementor\Utils::get_placeholder_image_src(),
498 ],
499 'condition' => [
500 'separator_' => 'image',
501 ],
502 ]
503 );
504
505 $this->add_control(
506 'separator_position',
507 [
508 'label' => esc_html__( 'Position', 'easy-elements' ),
509 'type' => \Elementor\Controls_Manager::SELECT,
510 'default' => 'below',
511 'options' => [
512 'top' => esc_html__( 'Top', 'easy-elements' ),
513 'above' => esc_html__( 'Above Title', 'easy-elements' ),
514 'below' => esc_html__( 'Title Below', 'easy-elements' ),
515 'bottom' => esc_html__( 'Bottom', 'easy-elements' ),
516 ],
517 ]
518 );
519
520 $this->add_control(
521 'separator_margin',
522 [
523 'label' => esc_html__( 'Margin', 'easy-elements' ),
524 'type' => \Elementor\Controls_Manager::DIMENSIONS,
525 'size_units' => [ 'px', '%', 'em' ],
526 'selectors' => [
527 '{{WRAPPER}} .eel--separator-icon, {{WRAPPER}} .eel--separator-icon-wrap' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
528 ],
529 ]
530 );
531
532 $this->end_controls_section();
533
534
535 $this->start_controls_section(
536 'water_mark_section',
537 [
538 'label' => esc_html__('WaterMark Settings', 'easy-elements'),
539 'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
540 ]
541 );
542
543 $this->add_control(
544 'water_mark',
545 [
546 'label' => esc_html__('WaterMark Text', 'easy-elements'),
547 'type' => \Elementor\Controls_Manager::TEXTAREA,
548 'label_block' => 'true',
549 ]
550 );
551
552 $this->add_control(
553 'water_mark_font_size',
554 [
555 'label' => esc_html__('Font Size', 'easy-elements'),
556 'type' => \Elementor\Controls_Manager::SLIDER,
557 'size_units' => ['px', 'em', 'rem', '%'],
558 'range' => [
559 'px' => ['min' => 10, 'max' => 300],
560 'em' => ['min' => 0.5, 'max' => 20],
561 'rem' => ['min' => 0.5, 'max' => 20],
562 '%' => ['min' => 10, 'max' => 500],
563 ],
564 'default' => [
565 'size' => '',
566 'unit' => 'px',
567 ],
568 'selectors' => [
569 '{{WRAPPER}} .eel-watermark' => 'font-size: {{SIZE}}{{UNIT}};',
570 ],
571 ]
572 );
573
574 $this->add_control(
575 '_mark_color',
576 [
577 'label' => esc_html__('Color', 'easy-elements'),
578 'type' => \Elementor\Controls_Manager::COLOR,
579 'default' => '',
580 'selectors' => [
581 '{{WRAPPER}} .eel-watermark' => 'color: {{VALUE}};',
582 ],
583 ]
584 );
585
586 $this->add_control(
587 'water_mark_color',
588 [
589 'label' => esc_html__('Stroke Color', 'easy-elements'),
590 'type' => \Elementor\Controls_Manager::COLOR,
591 'default' => 'rgba(0, 0, 0, 0.3)',
592 'selectors' => [
593 '{{WRAPPER}} .eel-watermark' => '-webkit-text-stroke-color: {{VALUE}}; text-stroke-color: {{VALUE}};',
594 ],
595 ]
596 );
597
598 $this->add_control(
599 'water_mark_stroke_width',
600 [
601 'label' => esc_html__('Stroke Width (px)', 'easy-elements'),
602 'type' => \Elementor\Controls_Manager::SLIDER,
603 'default' => [
604 'size' => 1,
605 'unit' => 'px',
606 ],
607 'range' => [
608 'px' => [
609 'min' => 0,
610 'max' => 10,
611 ],
612 ],
613 'selectors' => [
614 '{{WRAPPER}} .eel-watermark' => '-webkit-text-stroke-width: {{SIZE}}{{UNIT}}; text-stroke-width: {{SIZE}}{{UNIT}};',
615 ],
616 ]
617 );
618
619 $this->add_responsive_control(
620 'water_mark_top',
621 [
622 'label' => esc_html__('Top / Bottom', 'easy-elements'),
623 'type' => \Elementor\Controls_Manager::SLIDER,
624 'size_units' => ['px', '%', 'em'],
625 'range' => [
626 'px' => ['min' => -500, 'max' => 500],
627 '%' => ['min' => -100, 'max' => 100],
628 'em' => ['min' => -50, 'max' => 50],
629 ],
630 'selectors' => [
631 '{{WRAPPER}} .eel-watermark' => 'top: {{SIZE}}{{UNIT}};',
632 ],
633 ]
634 );
635
636 $this->add_responsive_control(
637 'water_mark_left',
638 [
639 'label' => esc_html__('Left / Right', 'easy-elements'),
640 'type' => \Elementor\Controls_Manager::SLIDER,
641 'size_units' => ['px', '%', 'em'],
642 'range' => [
643 'px' => ['min' => -500, 'max' => 500],
644 '%' => ['min' => 0, 'max' => 100],
645 'em' => ['min' => 0, 'max' => 50],
646 ],
647 'selectors' => [
648 '{{WRAPPER}} .eel-watermark' => 'left: {{SIZE}}{{UNIT}};',
649 ],
650 ]
651 );
652
653 $this->add_responsive_control(
654 'water_mark_z_index',
655 [
656 'label' => esc_html__('Z-Index', 'easy-elements'),
657 'type' => \Elementor\Controls_Manager::SLIDER,
658 'default' => [
659 'size' => -1,
660 ],
661 'range' => [
662 'px' => [
663 'min' => 0,
664 'max' => 9999,
665 ],
666 ],
667 'selectors' => [
668 '{{WRAPPER}} .eel-watermark' => 'z-index: {{SIZE}};',
669 ],
670 ]
671 );
672
673
674 $this->end_controls_section();
675
676
677
678 // Heading
679 $this->start_controls_section(
680 'section_heading_style',
681 [
682 'label' => esc_html__('Heading', 'easy-elements'),
683 'tab' => Controls_Manager::TAB_STYLE,
684 ]
685 );
686
687 $this->add_control(
688 'title_color',
689 [
690 'label' => esc_html__('Color', 'easy-elements'),
691 'type' => Controls_Manager::COLOR,
692 'selectors' => [
693 '{{WRAPPER}} .e-e-heading .e-e-title' => 'color: {{VALUE}};',
694 ],
695 'condition' => [
696 'show_gradient_title' => '',
697 ],
698 ]
699 );
700
701 $this->add_control(
702 'title_color_gradient_heading',
703 [
704 'label' => esc_html__('Text Gradient Color', 'easy-elements'),
705 'type' => Controls_Manager::HEADING,
706 'separator' => 'before',
707 'condition' => [
708 'show_gradient_title' => 'yes',
709 ]
710 ]
711 );
712
713 $this->add_group_control(
714 Group_Control_Background::get_type(),
715 [
716 'name' => 'title_gradient_color',
717 'label' => __( 'Title Color', 'easy-elements' ),
718 'types' => [ 'classic', 'gradient' ],
719 'selector' => '{{WRAPPER}} .e-e-heading .e-e-title.e-e-gradient-title',
720 'condition' => [
721 'show_gradient_title' => 'yes',
722 ],
723 ]
724 );
725
726
727 $this->add_group_control(
728 Group_Control_Typography::get_type(),
729 [
730 'name' => 'title_typography',
731 'label' => esc_html__('Typography', 'easy-elements'),
732 'selector' => '{{WRAPPER}} .e-e-heading .e-e-title',
733 ]
734 );
735 $this->add_control(
736 'title_opacity',
737 [
738 'label' => esc_html__('Opacity', 'easy-elements'),
739 'type' => Controls_Manager::SLIDER,
740 'selectors' => [
741 '{{WRAPPER}} .e-e-heading .e-e-title' => 'opacity: {{SIZE}};',
742 ],
743 'default' => [
744 'size' => 1,
745 'unit' => 'px',
746 ],
747 ]
748 );
749
750 $this->add_control(
751 'title_text_stroke',
752 [
753 'label' => esc_html__('Stroke Width', 'easy-elements'),
754 'type' => Controls_Manager::SLIDER,
755 'selectors' => [
756 '{{WRAPPER}} .e-e-heading .e-e-title' => '-webkit-text-stroke-width: {{SIZE}}{{UNIT}};',
757 ],
758 'default' => [
759 'size' => 0,
760 'unit' => 'px',
761 ],
762 ]
763 );
764 $this->add_control(
765 'title_text_stroke_color',
766 [
767 'label' => esc_html__('Stroke Color', 'easy-elements'),
768 'type' => Controls_Manager::COLOR,
769 'selectors' => [
770 '{{WRAPPER}} .e-e-heading .e-e-title' => '-webkit-text-stroke-color: {{VALUE}};',
771 ],
772 'condition' => [
773 'title_text_stroke[size]!' => '',
774 ],
775 ]
776 );
777 // Text Shadow
778 $this->add_group_control(
779 \Elementor\Group_Control_Text_Shadow::get_type(),
780 [
781 'name' => 'title_text_shadow',
782 'label' => esc_html__('Text Shadow', 'easy-elements'),
783 'selector' => '{{WRAPPER}} .e-e-heading .e-e-title',
784 ]
785 );
786 // Mix Blend Mode
787 $this->add_control(
788 'title_blend_mode',
789 [
790 'label' => esc_html__('Blend Mode', 'easy-elements'),
791 'type' => Controls_Manager::SELECT,
792 'options' => [
793 '' => esc_html__('Default', 'easy-elements'),
794 'normal' => 'Normal',
795 'multiply' => 'Multiply',
796 'screen' => 'Screen',
797 'overlay' => 'Overlay',
798 'darken' => 'Darken',
799 'lighten' => 'Lighten',
800 'color-dodge' => 'Color Dodge',
801 'color-burn' => 'Color Burn',
802 'hard-light' => 'Hard Light',
803 'soft-light' => 'Soft Light',
804 'difference' => 'Difference',
805 'exclusion' => 'Exclusion',
806 'hue' => 'Hue',
807 'saturation' => 'Saturation',
808 'color' => 'Color',
809 'luminosity' => 'Luminosity',
810 ],
811 'selectors' => [
812 '{{WRAPPER}} .e-e-heading .e-e-title' => 'mix-blend-mode: {{VALUE}};',
813 ],
814 ]
815 );
816 $this->add_responsive_control(
817 'title_margin',
818 [
819 'label' => esc_html__('Margin', 'easy-elements'),
820 'type' => Controls_Manager::DIMENSIONS,
821 'size_units' => ['px', 'em', '%'],
822 'selectors' => [
823 '{{WRAPPER}} .e-e-heading .e-e-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
824 ],
825 ]
826 );
827
828 $this->add_responsive_control(
829 'title_padding',
830 [
831 'label' => esc_html__('Padding', 'easy-elements'),
832 'type' => Controls_Manager::DIMENSIONS,
833 'size_units' => ['px', 'em', '%'],
834 'selectors' => [
835 '{{WRAPPER}} .e-e-heading .e-e-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
836 ],
837 ]
838 );
839
840
841 $this->add_control(
842 'title_image_fill_heading',
843 [
844 'label' => esc_html__('Image Fill (Text Mask)', 'easy-elements'),
845 'type' => Controls_Manager::HEADING,
846 'separator' => 'before',
847 ]
848 );
849
850 $this->add_control(
851 'enable_title_image_fill',
852 [
853 'label' => esc_html__('Enable Image Fill', 'easy-elements'),
854 'type' => \Elementor\Controls_Manager::SWITCHER,
855 'label_on' => esc_html__('Yes', 'easy-elements'),
856 'label_off' => esc_html__('No', 'easy-elements'),
857 'return_value' => 'yes',
858 'default' => '',
859 ]
860 );
861
862 $this->add_group_control(
863 Group_Control_Background::get_type(),
864 [
865 'name' => 'title_image_fill_bg',
866 'label' => esc_html__('Image Fill', 'easy-elements'),
867 'types' => [ 'classic' ],
868 'selector' => '{{WRAPPER}} .e-e-heading .e-e-title.e-e-image-fill, {{WRAPPER}} .e-e-heading .e-e-title.e-e-image-fill div',
869 'fields_options' => [
870 'background' => [
871 'default' => 'classic',
872 ],
873 'classic' => [
874 'types' => [ 'image' ],
875 ],
876 ],
877 'condition' => [
878 'enable_title_image_fill' => 'yes',
879 ],
880 ]
881 );
882
883 $this->add_control(
884 'title_image_fill_note',
885 [
886 'type' => Controls_Manager::RAW_HTML,
887 'raw' => __('Tip: Apply this only when you want the text to be filled with an image (the image will appear inside the text).', 'easy-elements'),
888 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
889 ]
890 );
891
892 $this->end_controls_section();
893
894 //Sub Heading
895 $this->start_controls_section(
896 'section_sub_heading_style',
897 [
898 'label' => esc_html__('Sub Heading', 'easy-elements'),
899 'tab' => Controls_Manager::TAB_STYLE,
900 ]
901 );
902
903 $this->add_control(
904 'sub_heading_color',
905 [
906 'label' => esc_html__('Color', 'easy-elements'),
907 'type' => Controls_Manager::COLOR,
908 'selectors' => [
909 '{{WRAPPER}} .e-e-heading .eel-sub-heading span' => 'color: {{VALUE}};',
910 ],
911 ]
912 );
913
914 $this->add_group_control(
915 \Elementor\Group_Control_Background::get_type(),
916 [
917 'name' => 'background_subtext',
918 'types' => [ 'classic', 'gradient' ],
919 'selector' => '{{WRAPPER}} .eel-sub-heading.top',
920 'condition' => [
921 'icon_direction' => 'top',
922 ],
923 ]
924 );
925
926 $this->add_group_control(
927 \Elementor\Group_Control_Background::get_type(),
928 [
929 'name' => 'background_subtext_top',
930 'types' => [ 'classic', 'gradient' ],
931 'selector' => '{{WRAPPER}} .eel-sub-heading',
932 'condition' => [
933 'icon_direction' => ['left', 'right'],
934 ],
935 ]
936 );
937
938 $this->add_group_control(
939 Group_Control_Typography::get_type(),
940 [
941 'name' => 'sub_heading_typography',
942 'label' => esc_html__('Typography', 'easy-elements'),
943 'selector' => '{{WRAPPER}} .e-e-heading .eel-sub-heading span',
944 ]
945 );
946
947 $this->add_group_control(
948 \Elementor\Group_Control_Border::get_type(),
949 [
950 'name' => 'subtext_border',
951 'label' => esc_html__( 'Border', 'easy-elements' ),
952 'selector' => '{{WRAPPER}} .eel-sub-heading',
953 ]
954 );
955
956 $this->add_control(
957 'subtext_icon_size',
958 [
959 'label' => esc_html__( 'Icon Size', 'easy-elements' ),
960 'type' => \Elementor\Controls_Manager::SLIDER,
961 'range' => [
962 'px' => [
963 'min' => 6,
964 'max' => 100,
965 ],
966 ],
967 'selectors' => [
968 '{{WRAPPER}} .eel-sub-heading i, {{WRAPPER}} .eel-sub-heading svg' => 'font-size: {{SIZE}}{{UNIT}};',
969 ],
970 'description' => esc_html__( 'Adjust the icon size in pixels for the subheading icon.', 'easy-elements' ),
971 'condition' => [
972 'sub_heading_type' => 'icon',
973 ],
974 ]
975 );
976
977 $this->add_responsive_control(
978 'subtext_border_radius',
979 [
980 'label' => esc_html__( 'Border Radius', 'easy-elements' ),
981 'type' => \Elementor\Controls_Manager::DIMENSIONS,
982 'size_units' => [ 'px', '%', 'em' ],
983 'selectors' => [
984 '{{WRAPPER}} .eel-sub-heading' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
985 ],
986 ]
987 );
988
989 $this->add_responsive_control(
990 'subtext_padding',
991 [
992 'label' => esc_html__( 'Padding', 'easy-elements' ),
993 'type' => \Elementor\Controls_Manager::DIMENSIONS,
994 'size_units' => [ 'px', '%', 'em' ],
995 'selectors' => [
996 '{{WRAPPER}} .eel-sub-heading' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
997 ],
998 ]
999 );
1000
1001 $this->add_control(
1002 'sub_heading_margin',
1003 [
1004 'label' => esc_html__( 'Margin', 'easy-elements' ),
1005 'type' => \Elementor\Controls_Manager::DIMENSIONS,
1006 'size_units' => [ 'px', '%', 'em' ],
1007 'selectors' => [
1008 '{{WRAPPER}} .eel-sub-heading' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1009 ],
1010 ]
1011 );
1012
1013 $this->end_controls_section();
1014
1015
1016 // Highlight
1017 $this->start_controls_section(
1018 'section_highlight_style',
1019 [
1020 'label' => esc_html__('Highlight', 'easy-elements'),
1021 'tab' => Controls_Manager::TAB_STYLE,
1022 ]
1023 );
1024 $this->add_control(
1025 'highlight_color',
1026 [
1027 'label' => esc_html__('Color', 'easy-elements'),
1028 'type' => Controls_Manager::COLOR,
1029 'selectors' => [
1030 '{{WRAPPER}} .e-e-heading .e-e-title span' => 'color: {{VALUE}};',
1031 ],
1032 ]
1033 );
1034
1035 $this->add_group_control(
1036 \Elementor\Group_Control_Background::get_type(),
1037 [
1038 'name' => 'background_highlight',
1039 'types' => [ 'classic', 'gradient' ],
1040 'selector' => '{{WRAPPER}} .e-e-heading .e-e-title span',
1041 ]
1042 );
1043
1044 $this->add_group_control(
1045 Group_Control_Typography::get_type(),
1046 [
1047 'name' => 'highlight_typography',
1048 'label' => esc_html__('Highlight Typography', 'easy-elements'),
1049 'selector' => '{{WRAPPER}} .e-e-heading .e-e-title span',
1050 ]
1051 );
1052
1053 $this->add_responsive_control(
1054 'highlight_padding',
1055 [
1056 'label' => esc_html__( 'Padding', 'easy-elements' ),
1057 'type' => \Elementor\Controls_Manager::DIMENSIONS,
1058 'size_units' => [ 'px', '%', 'em' ],
1059 'selectors' => [
1060 '{{WRAPPER}} .e-e-heading .e-e-title span' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1061 ],
1062 ]
1063 );
1064
1065 $this->add_control(
1066 'highlight_margin',
1067 [
1068 'label' => esc_html__( 'Margin', 'easy-elements' ),
1069 'type' => \Elementor\Controls_Manager::DIMENSIONS,
1070 'size_units' => [ 'px', '%', 'em' ],
1071 'selectors' => [
1072 '{{WRAPPER}} .e-e-heading .e-e-title span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1073 ],
1074 ]
1075 );
1076
1077 $this->add_responsive_control(
1078 'hithlight_border_radius',
1079 [
1080 'label' => esc_html__( 'Border Radius', 'easy-elements' ),
1081 'type' => \Elementor\Controls_Manager::DIMENSIONS,
1082 'size_units' => [ 'px', '%', 'em' ],
1083 'selectors' => [
1084 '{{WRAPPER}} .e-e-heading .e-e-title span' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1085 ],
1086 ]
1087 );
1088
1089 $this->end_controls_section();
1090
1091 // Description
1092 $this->start_controls_section(
1093 'section_description_style',
1094 [
1095 'label' => esc_html__('Description', 'easy-elements'),
1096 'tab' => Controls_Manager::TAB_STYLE,
1097 ]
1098 );
1099 $this->add_control(
1100 'description_color',
1101 [
1102 'label' => esc_html__('Color', 'easy-elements'),
1103 'type' => Controls_Manager::COLOR,
1104 'selectors' => [
1105 '{{WRAPPER}} .e-e-heading .e-e-description' => 'color: {{VALUE}};',
1106 ],
1107 ]
1108 );
1109 $this->add_group_control(
1110 Group_Control_Typography::get_type(),
1111 [
1112 'name' => 'description_typography',
1113 'label' => esc_html__('Title Typography', 'easy-elements'),
1114 'selector' => '{{WRAPPER}} .e-e-heading .e-e-description',
1115 ]
1116 );
1117 $this->add_responsive_control(
1118 'description_margin',
1119 [
1120 'label' => esc_html__('Margin', 'easy-elements'),
1121 'type' => Controls_Manager::DIMENSIONS,
1122 'size_units' => ['px', 'em', '%'],
1123 'selectors' => [
1124 '{{WRAPPER}} .e-e-heading .e-e-description' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1125 ],
1126 ]
1127 );
1128 $this->add_responsive_control(
1129 'description_padding',
1130 [
1131 'label' => esc_html__('Padding', 'easy-elements'),
1132 'type' => Controls_Manager::DIMENSIONS,
1133 'size_units' => ['px', 'em', '%'],
1134 'selectors' => [
1135 '{{WRAPPER}} .e-e-heading .e-e-description' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1136 ],
1137 ]
1138 );
1139 $this->end_controls_section();
1140 }
1141
1142 protected function render_separator( $settings ) {
1143 if ( ! empty( $settings['separator_'] ) && in_array( $settings['separator_'], ['dotted', 'solid'], true ) ) {
1144 echo '<div class="eel--separator-icon ' . esc_attr( $settings['separator_'] ) . '"></div>';
1145 }
1146
1147 if ( 'icon' === $settings['separator_'] && ! empty( $settings['select_icon_']['value'] ) ) {
1148 echo '<div class="eel--separator-icon-wrap">';
1149 \Elementor\Icons_Manager::render_icon( $settings['select_icon_'], [ 'aria-hidden' => 'true' ] );
1150 echo '</div>';
1151 }
1152 if ( isset( $settings['separator_'] ) && 'image' === $settings['separator_'] && ! empty( $settings['sep_image']['url'] ) ) {
1153 echo '<div class="eel--separator-icon-wrap">';
1154 printf(
1155 '<img src="%s" alt="%s" title="%s" class="eel-separator-img" loading="lazy" decoding="async" />',
1156 esc_url( $settings['sep_image']['url'] ),
1157 esc_attr__( 'Separator Image', 'easy-elements' ),
1158 esc_attr__( 'Separator Image', 'easy-elements' )
1159 );
1160
1161 echo '</div>';
1162 }
1163 }
1164
1165 protected function render() {
1166 $settings = $this->get_settings_for_display();
1167
1168 $tag = isset($settings['title_tag']) ? $settings['title_tag'] : 'h2';
1169 $title = preg_replace_callback( '/\{\{(.*?)\}\}/', function( $matches ) {
1170 return '<span>' . esc_html( trim( $matches[1] ) ) . '</span>';
1171 }, $settings['title'] );
1172
1173 if ( ! empty( $settings['link']['url'] ) ) {
1174 $this->add_link_attributes( 'title_link', $settings['link'] );
1175 $title = sprintf(
1176 '<a %s>%s</a>',
1177 $this->get_render_attribute_string( 'title_link' ),
1178 $title
1179 );
1180 }
1181
1182 $border_position = $settings['border_position'] ?? '';
1183 $unique_id = 'eel-heading-' . $this->get_id();
1184 $animation = isset( $settings['animation_type'] ) && ! empty($settings['animation_type']) ? $settings['animation_type'] : '';
1185 ?>
1186 <div class="e-e-heading <?php echo esc_attr($border_position); ?>" <?php if(!empty($animation)) : ?>
1187 data-eel-animation="<?php echo esc_attr($animation); ?>"
1188 <?php endif; ?>>
1189 <?php
1190 $icon_direction = $settings['icon_direction'] ?? '' ;
1191 $separator_position = ! empty( $settings['separator_position'] ) ? $settings['separator_position'] : 'default';
1192
1193 if ( in_array( $separator_position, ['top'], true ) ) {
1194 if ( ! empty( $settings['separator_'] ) ) {
1195 $this->render_separator( $settings );
1196 }
1197 }
1198
1199 if ( ! empty( $settings['sub_title'] ) ) : ?>
1200 <div class="eel-sub-heading <?php echo esc_attr($icon_direction); ?> <?php echo esc_attr($settings['show_gradient_border'] == 'yes' ? 'easy_gradiant_border' : ''); ?>">
1201 <?php
1202 if ( 'icon' === $settings['sub_heading_type'] && ! empty( $settings['sub_heading_icon']['value'] ) ) {
1203 \Elementor\Icons_Manager::render_icon( $settings['sub_heading_icon'], [ 'aria-hidden' => 'true' ] );
1204 } elseif ( 'image' === $settings['sub_heading_type'] && ! empty( $settings['sub_heading_image']['url'] ) ) {
1205 if ( ! empty( $settings['sub_heading_image']['id'] ) ) {
1206 echo wp_get_attachment_image(
1207 $settings['sub_heading_image']['id'],
1208 'full',
1209 false,
1210 ['alt' => $settings['sub_heading_image']['alt'] ?? '']
1211 );
1212 } elseif ( ! empty( $settings['sub_heading_image']['url'] ) ) {
1213 echo '<img src="' . esc_url( $settings['sub_heading_image']['url'] ) . '" alt="">';
1214 }
1215 } ?>
1216 <span>
1217 <?php
1218 echo wp_kses_post( $settings['sub_title'] );
1219 ?>
1220 </span>
1221 </div>
1222 <?php endif;
1223
1224 if ( in_array( $separator_position, ['above'], true ) ) {
1225 if ( ! empty( $settings['separator_'] ) ) {
1226 $this->render_separator( $settings );
1227 }
1228 }
1229
1230 $allowed_tags = ['h1','h2','h3','h4','h5','h6','div','span'];
1231 $tag = in_array(strtolower($tag), $allowed_tags, true) ? strtolower($tag) : 'div';
1232
1233
1234 if ( ! empty( $title ) ) {
1235 $gradient_class = ! empty( $settings['show_gradient_title'] ) ? ' e-e-gradient-title' : '';
1236 $image_fill_class = ( ! empty( $settings['enable_title_image_fill'] ) ) ? ' e-e-image-fill' : '';
1237 $tag_class = 'e-e-title' . $gradient_class . $image_fill_class;
1238
1239 printf(
1240 '<%1$s class="%2$s" %3$s>%4$s</%1$s>',
1241 esc_html( $tag ),
1242 esc_attr( $tag_class ),
1243 esc_attr( $this->get_render_attribute_string( 'title' ) ),
1244 wp_kses_post( $title )
1245 );
1246 }
1247
1248
1249 if ( in_array( $separator_position, ['below'], true ) ) {
1250 if ( ! empty( $settings['separator_'] ) ) {
1251 $this->render_separator( $settings );
1252 }
1253 }
1254
1255 if ( ! empty( $settings['description'] ) ) {
1256 ?>
1257 <div class="e-e-description">
1258 <?php echo wp_kses_post( $settings['description'] ); ?>
1259 </div>
1260 <?php }
1261 if ( in_array( $separator_position, ['bottom'], true ) ) {
1262 if ( ! empty( $settings['separator_'] ) ) {
1263 $this->render_separator( $settings );
1264 }
1265 }
1266
1267 if ( ! empty( $settings['water_mark'] ) ) {
1268 echo '<div class="eel-watermark">';
1269 echo esc_html( $settings['water_mark'] );
1270 echo '</div>';
1271 }
1272
1273 ?>
1274 </div>
1275 <?php }
1276 }
1277 ?>