PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.1.0
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.1.0
4.11.79 4.11.78 4.11.77 4.11.76 4.11.75 3.20.5 4.11.69 3.20.6 4.11.7 3.20.7 4.11.70 3.20.8 4.11.71 3.20.9 4.11.72 3.21.1 4.11.73 3.21.2 4.11.74 3.21.3 4.11.8 3.21.4 4.11.9 3.21.5 4.2.0 3.21.6 4.2.1 3.3.0 4.2.2 3.3.1 4.2.3 3.3.2 4.2.4 3.3.3 4.2.5 3.3.4 4.2.6 3.3.5 4.2.7 3.3.6 4.2.8 3.3.7 4.2.9 3.3.8 4.3.0 3.3.9 4.3.1 3.4.0 4.3.2 3.4.1 4.3.3 3.4.2 4.3.4 3.4.3 4.3.5 3.4.4 4.3.6 3.4.5 4.3.7 3.4.6 4.3.8 3.4.7 4.3.9 3.4.8 4.4.0 3.4.9 4.4.1 3.5.0 4.4.2 3.5.1 4.4.3 3.5.2 4.4.4 3.5.3 4.4.5 3.5.4 4.4.6 3.5.5 4.4.7 3.5.6 4.4.8 3.5.7 4.4.9 3.5.8 4.5.0 3.5.9 4.5.1 3.6.0 4.5.2 3.6.1 4.5.3 3.6.2 4.5.4 3.6.3 4.5.5 3.6.4 4.5.6 3.6.5 4.5.7 3.6.6 4.5.8 3.6.7 4.5.9 3.6.8 4.6.0 3.6.9 4.6.1 3.7.0 4.7.0 3.7.1 4.7.1 3.7.2 4.7.2 3.7.3 4.7.3 3.7.4 4.7.4 3.7.5 4.7.5 3.7.6 4.7.6 3.7.7 4.7.7 3.7.8 4.7.8 3.7.9 4.7.9 3.8.0 4.8.0 3.8.1 4.8.1 3.8.2 4.8.10 3.8.3 4.8.11 3.8.4 4.8.2 3.8.5 4.8.3 3.8.6 4.8.4 3.8.7 4.8.5 3.8.8 4.8.6 3.8.9 4.8.7 3.9.0 4.8.8 3.9.1 4.8.9 3.9.2 4.9.0 3.9.3 4.9.0-beta1 3.9.4 4.9.0-beta2 3.9.5 4.9.1 3.9.6 4.9.10 3.9.7 4.9.11 3.9.8 4.9.12 3.9.9 4.9.13 4.0.1 4.9.14 4.0.3 4.9.15 4.0.4 4.9.16 4.0.5 4.9.17 4.0.6 4.9.18 4.0.7 4.9.19 4.0.8 4.9.2 4.0.9 4.9.20 4.1.0 4.9.21 4.1.1 4.9.22 4.1.2 4.9.23 4.1.3 4.9.24 trunk 4.1.4 4.9.25 1.0 4.1.5 4.9.26 1.01 4.1.6 4.9.27 1.02 4.1.7 4.9.28 1.03 4.1.8 4.9.29 1.04 4.1.9 4.9.3 1.05 4.10.0 4.9.30 1.06 4.10.1 4.9.31 1.07 4.10.10 4.9.32 1.08 4.10.11 4.9.33 1.09 4.10.12 4.9.34 2.0 4.10.13 4.9.35 2.0.1 4.10.14 4.9.36 2.0.2 4.10.15 4.9.37 2.0.3 4.10.16 4.9.38 2.0.4 4.10.17 4.9.39 2.0.5 4.10.18 4.9.4 2.0.6 4.10.19 4.9.40 2.0.7 4.10.2 4.9.41 2.0.8 4.10.20 4.9.42 2.0.9 4.10.21 4.9.43 2.1.0 4.10.22 4.9.45 2.1.1 4.10.23 4.9.46 2.1.2 4.10.24 4.9.47 2.1.3 4.10.25 4.9.48 2.1.4 4.10.26 4.9.49 2.1.5 4.10.27 4.9.5 2.1.5-beta1 4.10.28 4.9.50 2.1.6 4.10.29 4.9.51 2.1.7 4.10.3 4.9.52 2.1.8 4.10.30 4.9.53 2.1.9 4.10.31 4.9.54 2.2.0 4.10.32 4.9.55 2.2.1 4.10.33 4.9.56 2.2.2 4.10.34 4.9.57 2.2.3 4.10.35 4.9.6 2.2.4 4.10.36 4.9.7 2.2.5 4.10.37 4.9.8 2.2.6 4.10.38 4.9.9 2.2.7 4.10.39 2.2.8 4.10.4 2.2.9 4.10.40 2.3.0 4.10.41 2.3.1 4.10.42 2.3.2 4.10.43 2.3.3 4.10.44 2.3.4 4.10.45 2.3.5 4.10.46 2.3.6 4.10.47 2.3.7 4.10.48 2.3.8 4.10.49 2.3.9 4.10.5 2.4.0 4.10.50 2.4.1 4.10.51 2.5.0 4.10.52 2.5.1 4.10.53 2.5.2 4.10.54 2.5.3 4.10.55 2.5.4 4.10.56 2.5.5 4.10.57 2.5.6 4.10.58 2.5.7 4.10.59 2.5.8 4.10.6 2.5.9 4.10.60 2.6.0 4.10.61 2.6.1 4.10.62 2.6.2 4.10.63 2.6.3 4.10.64 2.6.4 4.10.65 2.6.5 4.10.66 2.6.6 4.10.67 2.6.7 4.10.68 2.6.8 4.10.69 2.6.9 4.10.7 2.7.0 4.10.70 2.7.1 4.10.71 2.7.2 4.10.72 2.7.3 4.10.73 2.7.4 4.10.74 2.7.5 4.10.75 2.7.6 4.10.76 2.7.7 4.10.77 2.7.8 4.10.78 2.7.9 4.10.79 2.8.0 4.10.8 2.8.1 4.10.80 2.8.2 4.10.81 2.8.3 4.10.82 2.8.4 4.10.83 2.8.5 4.10.84 2.8.6 4.10.85 2.8.7 4.10.86 2.8.8 4.10.87 2.8.9 4.10.88 2.9.0 4.10.89 2.9.1 4.10.9 2.9.2 4.10.90 2.9.3 4.11.0 2.9.4 4.11.1 2.9.5 4.11.10 2.9.6 4.11.11 2.9.7 4.11.12 2.9.8 4.11.13 2.9.9 4.11.14 3.0.0 4.11.15 3.0.1 4.11.16 3.0.2 4.11.17 3.0.3 4.11.18 3.0.4 4.11.19 3.0.5 4.11.2 3.0.6 4.11.20 3.0.7 4.11.21 3.0.8 4.11.22 3.0.9 4.11.23 3.1.0 4.11.24 3.1.1 4.11.25 3.1.2 4.11.26 3.1.3 4.11.27 3.1.4 4.11.28 3.1.5 4.11.29 3.1.6 4.11.3 3.1.7 4.11.30 3.1.8 4.11.31 3.1.9 4.11.32 3.10.0 4.11.33 3.10.1 4.11.34 3.10.2 4.11.35 3.10.3 4.11.36 3.10.4 4.11.37 3.10.5 4.11.38 3.10.6 4.11.39 3.10.7 4.11.4 3.10.8 4.11.40 3.10.9 4.11.41 3.11.0 4.11.42 3.11.1 4.11.43 3.11.2 4.11.44 3.11.3 4.11.45 3.11.4 4.11.46 3.11.5 4.11.47 3.11.6 4.11.48 3.11.7 4.11.49 3.11.8 4.11.5 3.11.9 4.11.50 3.12.0 4.11.51 3.12.1 4.11.52 3.12.2 4.11.53 3.12.3 4.11.54 3.2.0 4.11.55 3.2.1 4.11.56 3.2.2 4.11.57 3.2.3 4.11.58 3.2.4 4.11.59 3.2.5 4.11.6 3.2.6 4.11.60 3.2.7 4.11.61 3.2.8 4.11.62 3.2.9 4.11.63 3.20.0 4.11.64 3.20.1 4.11.65 3.20.2 4.11.66 3.20.3 4.11.67 3.20.4 4.11.68
premium-addons-for-elementor / widgets / premium-dual-header.php
premium-addons-for-elementor / widgets Last commit date
dep 5 years ago premium-banner.php 5 years ago premium-blog.php 5 years ago premium-button.php 5 years ago premium-carousel.php 5 years ago premium-contactform.php 5 years ago premium-countdown.php 5 years ago premium-counter.php 5 years ago premium-dual-header.php 5 years ago premium-fancytext.php 5 years ago premium-grid.php 5 years ago premium-icon-list.php 5 years ago premium-image-button.php 5 years ago premium-image-scroll.php 5 years ago premium-image-separator.php 5 years ago premium-lottie.php 5 years ago premium-maps.php 5 years ago premium-modalbox.php 5 years ago premium-person.php 5 years ago premium-pricing-table.php 5 years ago premium-progressbar.php 5 years ago premium-testimonials.php 5 years ago premium-title.php 5 years ago premium-videobox.php 5 years ago premium-vscroll.php 5 years ago
premium-dual-header.php
1057 lines
1 <?php
2
3 /**
4 * Premium Dual Heading.
5 */
6 namespace PremiumAddons\Widgets;
7
8 // Elementor Classes.
9 use PremiumAddons\Includes;
10 use Elementor\Widget_Base;
11 use Elementor\Controls_Manager;
12 use Elementor\Scheme_Color;
13 use Elementor\Scheme_Typography;
14 use Elementor\Group_Control_Border;
15 use Elementor\Group_Control_Typography;
16 use Elementor\Group_Control_Text_Shadow;
17 use Elementor\Group_Control_Background;
18
19 // PremiumAddons Classes.
20 use PremiumAddons\Includes\Helper_Functions;
21 use PremiumAddons\Includes\Premium_Template_Tags;
22
23 if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
24
25 /**
26 * Class Premium_Dual_Header
27 */
28 class Premium_Dual_Header extends Widget_Base {
29
30 protected $templateInstance;
31
32 public function getTemplateInstance(){
33 return $this->templateInstance = Premium_Template_Tags::getInstance();
34 }
35
36 public function get_name() {
37 return 'premium-addon-dual-header';
38 }
39
40 public function get_title() {
41 return sprintf( '%1$s %2$s', Helper_Functions::get_prefix(), __('Dual Heading', 'premium-addons-for-elementor') );
42 }
43
44 public function get_style_depends() {
45 return [
46 'premium-addons'
47 ];
48 }
49
50 public function get_icon() {
51 return 'pa-dual-header';
52 }
53
54 public function get_categories() {
55 return [ 'premium-elements' ];
56 }
57
58 public function get_custom_help_url() {
59 return 'https://premiumaddons.com/support/';
60 }
61
62 /**
63 * Register Dual Heading controls.
64 *
65 * @since 1.0.0
66 * @access protected
67 */
68 protected function _register_controls() {
69
70 /*Start General Section*/
71 $this->start_controls_section('premium_dual_header_general_settings',
72 [
73 'label' => __('Dual Heading', 'premium-addons-for-elementor')
74 ]
75 );
76
77 /*First Header*/
78 $this->add_control('premium_dual_header_first_header_text',
79 [
80 'label' => __('First Heading', 'premium-addons-for-elementor'),
81 'type' => Controls_Manager::TEXT,
82 'dynamic' => [ 'active' => true ],
83 'default' => __('Premium', 'premium-addons-for-elementor'),
84 'label_block' => true,
85 ]
86 );
87
88 /*Second Header*/
89 $this->add_control('premium_dual_header_second_header_text',
90 [
91 'label' => __('Second Heading', 'premium-addons-for-elementor'),
92 'type' => Controls_Manager::TEXT,
93 'dynamic' => [ 'active' => true ],
94 'default' => __('Addons', 'premium-addons-for-elementor'),
95 'label_block' => true,
96 ]
97 );
98
99 /*Title Tag*/
100 $this->add_control('premium_dual_header_first_header_tag',
101 [
102 'label' => __('HTML Tag', 'premium-addons-for-elementor'),
103 'type' => Controls_Manager::SELECT,
104 'default' => 'h2',
105 'options' => [
106 'h1' => 'H1',
107 'h2' => 'H2',
108 'h3' => 'H3',
109 'h4' => 'H4',
110 'h5' => 'H5',
111 'h6' => 'H6',
112 'p' => 'p',
113 'span' => 'span',
114 ],
115 'label_block' => true,
116 ]
117 );
118
119 $this->add_responsive_control('premium_dual_header_position',
120 [
121 'label' => __( 'Display', 'premium-addons-for-elementor' ),
122 'type' => Controls_Manager::SELECT,
123 'options' => [
124 'inline'=> __('Inline', 'premium-addons-for-elementor'),
125 'block' => __('Block', 'premium-addons-for-elementor'),
126 ],
127 'default' => 'inline',
128 'selectors' => [
129 '{{WRAPPER}} .premium-dual-header-first-container span, {{WRAPPER}} .premium-dual-header-second-container' => 'display: {{VALUE}}',
130 ],
131 'label_block' => true
132 ]
133 );
134
135 $this->add_control('premium_dual_header_link_switcher',
136 [
137 'label' => __('Link', 'premium-addons-for-elementor'),
138 'type' => Controls_Manager::SWITCHER,
139 'description' => __('Enable or disable link','premium-addons-for-elementor'),
140 ]
141 );
142
143 $this->add_control('premium_dual_heading_link_selection',
144 [
145 'label' => __('Link Type', 'premium-addons-for-elementor'),
146 'type' => Controls_Manager::SELECT,
147 'options' => [
148 'url' => __('URL', 'premium-addons-for-elementor'),
149 'link' => __('Existing Page', 'premium-addons-for-elementor'),
150 ],
151 'default' => 'url',
152 'label_block' => true,
153 'condition' => [
154 'premium_dual_header_link_switcher' => 'yes',
155 ]
156 ]
157 );
158
159 $this->add_control('premium_dual_heading_link',
160 [
161 'label' => __('Link', 'premium-addons-for-elementor'),
162 'type' => Controls_Manager::URL,
163 'dynamic' => [ 'active' => true ],
164 'default' => [
165 'url' => '#',
166 ],
167 'placeholder' => 'https://premiumaddons.com/',
168 'label_block' => true,
169 'separator' => 'after',
170 'condition' => [
171 'premium_dual_header_link_switcher' => 'yes',
172 'premium_dual_heading_link_selection' => 'url'
173 ]
174 ]
175 );
176
177 $this->add_control('premium_dual_heading_existing_link',
178 [
179 'label' => __('Existing Page', 'premium-addons-for-elementor'),
180 'type' => Controls_Manager::SELECT2,
181 'options' => $this->getTemplateInstance()->get_all_posts(),
182 'condition' => [
183 'premium_dual_header_link_switcher' => 'yes',
184 'premium_dual_heading_link_selection' => 'link',
185 ],
186 'multiple' => false,
187 'separator' => 'after',
188 'label_block' => true,
189 ]
190 );
191
192 $this->add_responsive_control('premium_dual_header_text_align',
193 [
194 'label' => __( 'Alignment', 'premium-addons-for-elementor' ),
195 'type' => Controls_Manager::CHOOSE,
196 'options' => [
197 'left' => [
198 'title'=> __( 'Left', 'premium-addons-for-elementor' ),
199 'icon' => 'fa fa-align-left',
200 ],
201 'center' => [
202 'title'=> __( 'Center', 'premium-addons-for-elementor' ),
203 'icon' => 'fa fa-align-center',
204 ],
205 'right' => [
206 'title'=> __( 'Right', 'premium-addons-for-elementor' ),
207 'icon' => 'fa fa-align-right'
208 ]
209 ],
210 'default' => 'center',
211 'selectors' => [
212 '{{WRAPPER}} .premium-dual-header-container' => 'text-align: {{VALUE}};'
213 ],
214 ]
215 );
216
217 $this->add_responsive_control('rotate',
218 [
219 'label' => __('Degrees', 'premium-addons-for-elementor'),
220 'type' => Controls_Manager::NUMBER,
221 'min' => -180,
222 'max' => 180,
223 'selectors' => [
224 '{{WRAPPER}} .premium-dual-header-container' => 'transform: rotate({{VALUE}}deg);'
225 ],
226 ]
227 );
228
229 $this->add_responsive_control('transform_origin_x',
230 [
231 'label' => __( 'X Anchor Point', 'premium-addons-for-elementor' ),
232 'type' => Controls_Manager::CHOOSE,
233 'default' => 'center',
234 'options' => [
235 'left' => [
236 'title' => __( 'Left', 'premium-addons-for-elementor' ),
237 'icon' => 'eicon-h-align-left',
238 ],
239 'center' => [
240 'title' => __( 'Center', 'premium-addons-for-elementor' ),
241 'icon' => 'eicon-h-align-center',
242 ],
243 'right' => [
244 'title' => __( 'Right', 'premium-addons-for-elementor' ),
245 'icon' => 'eicon-h-align-right',
246 ],
247 ],
248 'label_block' => false,
249 'toggle' => false,
250 'render_type' => 'ui',
251 'condition' => [
252 'rotate!' => ''
253 ]
254 ]
255 );
256
257 $this->add_responsive_control('transform_origin_y',
258 [
259 'label' => __( 'Y Anchor Point', 'premium-addons-for-elementor' ),
260 'type' => Controls_Manager::CHOOSE,
261 'default' => 'center',
262 'options' => [
263 'top' => [
264 'title' => __( 'Top', 'premium-addons-for-elementor' ),
265 'icon' => 'eicon-v-align-top',
266 ],
267 'center' => [
268 'title' => __( 'Center', 'premium-addons-for-elementor' ),
269 'icon' => 'eicon-v-align-middle',
270 ],
271 'bottom' => [
272 'title' => __( 'Bottom', 'premium-addons-for-elementor' ),
273 'icon' => 'eicon-v-align-bottom',
274 ],
275 ],
276 'selectors' => [
277 '{{WRAPPER}} .premium-dual-header-container' => 'transform-origin: {{transform_origin_x.VALUE}} {{VALUE}}',
278 ],
279 'label_block' => false,
280 'toggle' => false,
281 'condition' => [
282 'rotate!' => ''
283 ]
284 ]
285 );
286
287 $this->add_control('background_text_switcher',
288 [
289 'label' => __( 'Background Text', 'premium-addons-for-elementor' ),
290 'type' => Controls_Manager::SWITCHER,
291 ]
292 );
293
294 $this->add_control('background_text',
295 [
296 'label' => __('Text', 'premium-addons-for-elementor'),
297 'type' => Controls_Manager::TEXT,
298 'default' => __('Awesome Title','premium-addons-for-elementor'),
299 'condition' => [
300 'background_text_switcher' => 'yes'
301 ]
302 ]
303 );
304
305 $this->add_control('background_text_width',
306 [
307 'label' => __('Width', 'premium-addons-for-elementor'),
308 'type' => Controls_Manager::SELECT,
309 'options' => [
310 'auto' => __('Auto', 'premium-addons-for-elementor'),
311 '100%' => __('Full Width', 'premium-addons-for-elementor'),
312 ],
313 'default' => 'auto',
314 'label_block' => true,
315 'selectors' => [
316 '{{WRAPPER}} .premium-title-bg-text:before' => 'width: {{VALUE}}',
317 ],
318 'condition' => [
319 'background_text_switcher' => 'yes'
320 ]
321 ]
322 );
323
324 $this->add_responsive_control('background_text_left',
325 [
326 'label' => __('Horizontal Offset', 'premium-addons-for-elementor'),
327 'type' => Controls_Manager::SLIDER,
328 'size_units' => [ 'px', 'em', '%' ],
329 'range' => [
330 'px' => [
331 'min' => -500,
332 'max' => 500
333 ],
334 'em' => [
335 'min' => -50,
336 'max' => 50
337 ],
338 '%' => [
339 'min' => -100,
340 'max' => 100
341 ]
342 ],
343 'selectors' => [
344 '{{WRAPPER}} .premium-title-bg-text:before' => 'left: {{SIZE}}{{UNIT}}',
345 ],
346 'condition' => [
347 'background_text_switcher' => 'yes'
348 ]
349 ]
350 );
351
352 $this->add_responsive_control('background_text_top',
353 [
354 'label' => __('Vertical Offset', 'premium-addons-for-elementor'),
355 'type' => Controls_Manager::SLIDER,
356 'size_units' => [ 'px', 'em', '%' ],
357 'range' => [
358 'px' => [
359 'min' => -500,
360 'max' => 500
361 ],
362 'em' => [
363 'min' => -50,
364 'max' => 50
365 ],
366 '%' => [
367 'min' => -100,
368 'max' => 100
369 ]
370 ],
371 'selectors' => [
372 '{{WRAPPER}} .premium-title-bg-text:before' => 'top: {{SIZE}}{{UNIT}}',
373 ],
374 'condition' => [
375 'background_text_switcher' => 'yes'
376 ]
377 ]
378 );
379
380 $this->add_responsive_control('background_text_rotate',
381 [
382 'label' => __('Rotate (degrees)', 'premium-addons-for-elementor'),
383 'type' => Controls_Manager::SLIDER,
384 'size_units' => [ 'deg' ],
385 'default' => [
386 'unit' => 'deg',
387 'size' => 0,
388 ],
389 'selectors' => [
390 '{{WRAPPER}} .premium-title-bg-text:before' => 'transform: rotate({{SIZE}}{{UNIT}})'
391 ],
392 'condition' => [
393 'background_text_switcher' => 'yes'
394 ]
395 ]
396 );
397
398 $this->end_controls_section();
399
400 $this->start_controls_section('section_pa_docs',
401 [
402 'label' => __('Helpful Documentations', 'premium-addons-for-elementor'),
403 ]
404 );
405
406 $doc1_url = Helper_Functions::get_campaign_link( 'https://premiumaddons.com/docs/dual-heading-widget-tutorial', 'editor-page', 'wp-editor', 'get-support' );
407
408 $this->add_control('doc_1',
409 [
410 'type' => Controls_Manager::RAW_HTML,
411 'raw' => sprintf( '<a href="%s" target="_blank">%s</a>', $doc1_url ,__( 'Gettings started »', 'premium-addons-for-elementor' ) ),
412 'content_classes' => 'editor-pa-doc',
413 ]
414 );
415
416 $doc2_url = Helper_Functions::get_campaign_link( 'https://premiumaddons.com/docs/how-to-add-an-outlined-heading-to-my-website', 'editor-page', 'wp-editor', 'get-support' );
417
418 $this->add_control('doc_2',
419 [
420 'type' => Controls_Manager::RAW_HTML,
421 'raw' => sprintf( '<a href="%s" target="_blank">%s</a>', $doc2_url ,__( 'How to add an outlined heading using Dual Heading widget »', 'premium-addons-for-elementor' ) ),
422 'content_classes' => 'editor-pa-doc',
423 ]
424 );
425
426 $this->end_controls_section();
427
428 $this->start_controls_section('premium_dual_header_first_style',
429 [
430 'label' => __('First Heading', 'premium-addons-for-elementor'),
431 'tab' => Controls_Manager::TAB_STYLE
432 ]
433 );
434
435 $this->add_group_control(
436 Group_Control_Typography::get_type(),
437 [
438 'name' => 'first_header_typography',
439 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
440 'selector' => '{{WRAPPER}} .premium-dual-header-first-span'
441 ]
442 );
443
444 $this->add_control('premium_dual_header_first_animated',
445 [
446 'label' => __('Animated Background', 'premium-addons-for-elementor'),
447 'type' => Controls_Manager::SWITCHER
448 ]
449 );
450
451 $this->add_control('premium_dual_header_first_back_clip',
452 [
453 'label' => __('Background Style', 'premium-addons-for-elementor'),
454 'type' => Controls_Manager::SELECT,
455 'default' => 'color',
456 'description' => __('Choose ‘Normal’ style to put a background behind the text. Choose ‘Clipped’ style so the background will be clipped on the text.','premium-addons-for-elementor'),
457 'options' => [
458 'color' => __('Normal', 'premium-addons-for-elementor'),
459 'clipped' => __('Clipped', 'premium-addons-for-elementor'),
460 ],
461 'label_block' => true
462 ]
463 );
464
465 $this->add_control('premium_dual_header_first_color',
466 [
467 'label' => __('Text Color', 'premium-addons-for-elementor'),
468 'type' => Controls_Manager::COLOR,
469 'scheme' => [
470 'type' => Scheme_Color::get_type(),
471 'value' => Scheme_Color::COLOR_1
472 ],
473 'condition' => [
474 'premium_dual_header_first_back_clip' => 'color'
475 ],
476 'selectors' => [
477 '{{WRAPPER}} .premium-dual-header-first-span' => 'color: {{VALUE}};'
478 ]
479 ]
480 );
481
482 $this->add_group_control(
483 Group_Control_Background::get_type(),
484 [
485 'name' => 'premium_dual_header_first_background',
486 'types' => [ 'classic' , 'gradient' ],
487 'condition' => [
488 'premium_dual_header_first_back_clip' => 'color'
489 ],
490 'selector' => '{{WRAPPER}} .premium-dual-header-first-span'
491 ]
492 );
493
494 $this->add_control('premium_dual_header_first_stroke',
495 [
496 'label' => __('Stroke', 'premium-addons-for-elementor'),
497 'type' => Controls_Manager::SWITCHER,
498 'condition' => [
499 'premium_dual_header_first_back_clip' => 'clipped'
500 ],
501 ]
502 );
503
504 $this->add_control('premium_dual_header_first_stroke_text_color',
505 [
506 'label' => __('Stroke Text Color', 'premium-addons-for-elementor'),
507 'type' => Controls_Manager::COLOR,
508 'condition' => [
509 'premium_dual_header_first_back_clip' => 'clipped',
510 'premium_dual_header_first_stroke' => 'yes'
511 ],
512 'selectors' => [
513 '{{WRAPPER}} .premium-dual-header-first-clip.stroke .premium-dual-header-first-span' => '-webkit-text-stroke-color: {{VALUE}};'
514 ]
515 ]
516 );
517
518 $this->add_control('premium_dual_header_first_stroke_color',
519 [
520 'label' => __('Stroke Fill Color', 'premium-addons-for-elementor'),
521 'type' => Controls_Manager::COLOR,
522 'condition' => [
523 'premium_dual_header_first_back_clip' => 'clipped',
524 'premium_dual_header_first_stroke' => 'yes'
525 ],
526 'selectors' => [
527 '{{WRAPPER}} .premium-dual-header-first-clip.stroke .premium-dual-header-first-span' => '-webkit-text-fill-color: {{VALUE}};'
528 ]
529 ]
530 );
531
532 $this->add_control('premium_dual_header_first_stroke_width',
533 [
534 'label' => __('Stroke Fill Width', 'premium-addons-for-elementor'),
535 'type' => Controls_Manager::SLIDER,
536 'condition' => [
537 'premium_dual_header_first_back_clip' => 'clipped',
538 'premium_dual_header_first_stroke' => 'yes'
539 ],
540 'selectors' => [
541 '{{WRAPPER}} .premium-dual-header-first-clip.stroke .premium-dual-header-first-span' => '-webkit-text-stroke-width: {{SIZE}}px;'
542 ]
543 ]
544 );
545
546 $this->add_group_control(
547 Group_Control_Background::get_type(),
548 [
549 'name' => 'premium_dual_header_first_clipped_background',
550 'types' => [ 'classic' , 'gradient' ],
551 'condition' => [
552 'premium_dual_header_first_back_clip' => 'clipped',
553 'premium_dual_header_first_stroke!' => 'yes'
554 ],
555 'selector' => '{{WRAPPER}} .premium-dual-header-first-span'
556 ]
557 );
558
559 $this->add_group_control(
560 Group_Control_Border::get_type(),
561 [
562 'name' => 'first_header_border',
563 'selector' => '{{WRAPPER}} .premium-dual-header-first-span',
564 'separator' => 'before'
565 ]
566 );
567
568 $this->add_control('premium_dual_header_first_border_radius',
569 [
570 'label' => __('Border Radius', 'premium-addons-for-elementor'),
571 'type' => Controls_Manager::SLIDER,
572 'size_units' => ['px', '%', 'em'],
573 'selectors' => [
574 '{{WRAPPER}} .premium-dual-header-first-span' => 'border-radius: {{SIZE}}{{UNIT}};'
575 ]
576 ]
577 );
578
579 $this->add_group_control(
580 Group_Control_Text_Shadow::get_type(),
581 [
582 'label' => __('Shadow','premium-addons-for-elementor'),
583 'name' => 'premium_dual_header_first_text_shadow',
584 'selector' => '{{WRAPPER}} .premium-dual-header-first-span'
585 ]
586 );
587
588 $this->add_responsive_control('premium_dual_header_first_margin',
589 [
590 'label' => __('Margin', 'premium-addons-for-elementor'),
591 'type' => Controls_Manager::DIMENSIONS,
592 'size_units' => [ 'px', 'em', '%' ],
593 'separator' => 'before',
594 'selectors' => [
595 '{{WRAPPER}} .premium-dual-header-first-span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}'
596 ]
597 ]
598 );
599
600 $this->add_responsive_control('premium_dual_header_first_padding',
601 [
602 'label' => __('Padding', 'premium-addons-for-elementor'),
603 'type' => Controls_Manager::DIMENSIONS,
604 'size_units' => [ 'px', 'em', '%' ],
605 'selectors' => [
606 '{{WRAPPER}} .premium-dual-header-first-span' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}'
607 ]
608 ]
609 );
610
611 $this->end_controls_section();
612
613 $this->start_controls_section('premium_dual_header_second_style',
614 [
615 'label' => __('Second Heading', 'premium-addons-for-elementor'),
616 'tab' => Controls_Manager::TAB_STYLE
617 ]
618 );
619
620 $this->add_group_control(
621 Group_Control_Typography::get_type(),
622 [
623 'name' => 'second_header_typography',
624 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
625 'selector' => '{{WRAPPER}} .premium-dual-header-second-header'
626 ]
627 );
628
629 $this->add_control('premium_dual_header_second_animated',
630 [
631 'label' => __('Animated Background', 'premium-addons-for-elementor'),
632 'type' => Controls_Manager::SWITCHER
633 ]
634 );
635
636 $this->add_control('premium_dual_header_second_back_clip',
637 [
638 'label' => __('Background Style', 'premium-addons-for-elementor'),
639 'type' => Controls_Manager::SELECT,
640 'default' => 'color',
641 'description' => __('Choose ‘Normal’ style to put a background behind the text. Choose ‘Clipped’ style so the background will be clipped on the text.','premium-addons-for-elementor'),
642 'options' => [
643 'color' => __('Normal', 'premium-addons-for-elementor'),
644 'clipped' => __('Clipped', 'premium-addons-for-elementor')
645 ],
646 'label_block' => true
647 ]
648 );
649
650 $this->add_control('premium_dual_header_second_color',
651 [
652 'label' => __('Text Color', 'premium-addons-for-elementor'),
653 'type' => Controls_Manager::COLOR,
654 'scheme' => [
655 'type' => Scheme_Color::get_type(),
656 'value' => Scheme_Color::COLOR_2
657 ],
658 'condition' => [
659 'premium_dual_header_second_back_clip' => 'color'
660 ],
661 'selectors' => [
662 '{{WRAPPER}} .premium-dual-header-second-header' => 'color: {{VALUE}};'
663 ]
664 ]
665 );
666
667 $this->add_group_control(
668 Group_Control_Background::get_type(),
669 [
670 'name' => 'premium_dual_header_second_background',
671 'types' => [ 'classic' , 'gradient' ],
672 'condition' => [
673 'premium_dual_header_second_back_clip' => 'color'
674 ],
675 'selector' => '{{WRAPPER}} .premium-dual-header-second-header'
676 ]
677 );
678
679 $this->add_control('premium_dual_header_second_stroke',
680 [
681 'label' => __('Stroke', 'premium-addons-for-elementor'),
682 'type' => Controls_Manager::SWITCHER,
683 'condition' => [
684 'premium_dual_header_second_back_clip' => 'clipped'
685 ],
686 ]
687 );
688
689 $this->add_control('premium_dual_header_second_stroke_text_color',
690 [
691 'label' => __('Stroke Text Color', 'premium-addons-for-elementor'),
692 'type' => Controls_Manager::COLOR,
693 'condition' => [
694 'premium_dual_header_second_back_clip' => 'clipped',
695 'premium_dual_header_second_stroke' => 'yes'
696 ],
697 'selectors' => [
698 '{{WRAPPER}} .premium-dual-header-second-clip.stroke' => '-webkit-text-stroke-color: {{VALUE}};'
699 ]
700 ]
701 );
702
703 $this->add_control('premium_dual_header_second_stroke_color',
704 [
705 'label' => __('Stroke Fill Color', 'premium-addons-for-elementor'),
706 'type' => Controls_Manager::COLOR,
707 'condition' => [
708 'premium_dual_header_second_back_clip' => 'clipped',
709 'premium_dual_header_second_stroke' => 'yes'
710 ],
711 'selectors' => [
712 '{{WRAPPER}} .premium-dual-header-second-clip.stroke' => '-webkit-text-fill-color: {{VALUE}};'
713 ]
714 ]
715 );
716
717 $this->add_control('premium_dual_header_second_stroke_width',
718 [
719 'label' => __('Stroke Fill Width', 'premium-addons-for-elementor'),
720 'type' => Controls_Manager::SLIDER,
721 'condition' => [
722 'premium_dual_header_second_back_clip' => 'clipped',
723 'premium_dual_header_second_stroke' => 'yes'
724 ],
725 'selectors' => [
726 '{{WRAPPER}} .premium-dual-header-second-clip.stroke' => '-webkit-text-stroke-width: {{SIZE}}px;'
727 ]
728 ]
729 );
730
731 $this->add_group_control(
732 Group_Control_Background::get_type(),
733 [
734 'name' => 'premium_dual_header_second_clipped_background',
735 'types' => [ 'classic' , 'gradient' ],
736 'condition' => [
737 'premium_dual_header_second_back_clip' => 'clipped',
738 'premium_dual_header_second_stroke!' => 'yes'
739 ],
740 'selector' => '{{WRAPPER}} .premium-dual-header-second-header'
741 ]
742 );
743
744 $this->add_group_control(
745 Group_Control_Border::get_type(),
746 [
747 'name' => 'second_header_border',
748 'selector' => '{{WRAPPER}} .premium-dual-header-second-header',
749 'separator' => 'before'
750 ]
751 );
752
753 $this->add_control('premium_dual_header_second_border_radius',
754 [
755 'label' => __('Border Radius', 'premium-addons-for-elementor'),
756 'type' => Controls_Manager::SLIDER,
757 'size_units' => ['px', '%', 'em'],
758 'selectors' => [
759 '{{WRAPPER}} .premium-dual-header-second-header' => 'border-radius: {{SIZE}}{{UNIT}};'
760 ]
761 ]
762 );
763
764 $this->add_group_control(
765 Group_Control_Text_Shadow::get_type(),
766 [
767 'label' => __('Shadow','premium-addons-for-elementor'),
768 'name' => 'premium_dual_header_second_text_shadow',
769 'selector' => '{{WRAPPER}} .premium-dual-header-second-header'
770 ]
771 );
772
773 $this->add_responsive_control('premium_dual_header_second_margin',
774 [
775 'label' => __('Margin', 'premium-addons-for-elementor'),
776 'type' => Controls_Manager::DIMENSIONS,
777 'separator' => 'before',
778 'size_units' => [ 'px', 'em', '%' ],
779 'selectors' => [
780 '{{WRAPPER}} .premium-dual-header-second-header' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}'
781 ]
782 ]
783 );
784
785 $this->add_responsive_control('premium_dual_header_second_padding',
786 [
787 'label' => __('Padding', 'premium-addons-for-elementor'),
788 'type' => Controls_Manager::DIMENSIONS,
789 'size_units' => [ 'px', 'em', '%' ],
790 'selectors' => [
791 '{{WRAPPER}} .premium-dual-header-second-header' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
792 ]
793 ]
794 );
795
796 $this->end_controls_section();
797
798 $this->start_controls_section('background_text_style_section',
799 [
800 'label' => __('Background Text', 'premium-addons-for-elementor'),
801 'tab' => Controls_Manager::TAB_STYLE,
802 'condition' => [
803 'background_text_switcher' =>'yes'
804 ]
805 ]
806 );
807
808 $this->add_control('background_text_color',
809 [
810 'label' => __('Color', 'premium-addons-for-elementor'),
811 'type' => Controls_Manager::COLOR,
812 'scheme' => [
813 'type' => Scheme_Color::get_type(),
814 'value' => Scheme_Color::COLOR_1,
815 ],
816 'selectors' => [
817 '{{WRAPPER}} .premium-title-bg-text:before' => 'color: {{VALUE}}',
818 ],
819 ]
820 );
821
822 $this->add_group_control(
823 Group_Control_Typography::get_type(),
824 [
825 'name' => 'background_text_typography',
826 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
827 'selector' => '{{WRAPPER}} .premium-title-bg-text:before',
828 ]
829 );
830
831 $this->add_group_control(
832 Group_Control_Text_Shadow::get_type(),
833 [
834 'name' => 'background_text_shadow',
835 'selector' => '{{WRAPPER}} .premium-title-bg-text:before',
836 ]
837 );
838
839 $this->add_control('background_text_mix_blend',
840 [
841 'label' => __( 'Blend Mode', 'elementor' ),
842 'type' => Controls_Manager::SELECT,
843 'options' => [
844 '' => __( 'Normal', 'elementor' ),
845 'multiply' => 'Multiply',
846 'screen' => 'Screen',
847 'overlay' => 'Overlay',
848 'darken' => 'Darken',
849 'lighten' => 'Lighten',
850 'color-dodge' => 'Color Dodge',
851 'saturation' => 'Saturation',
852 'color' => 'Color',
853 'luminosity' => 'Luminosity',
854 ],
855 'separator' => 'before',
856 'selectors' => [
857 '{{WRAPPER}} .premium-title-bg-text:before' => 'mix-blend-mode: {{VALUE}}',
858 ],
859 ]
860 );
861
862 $this->add_control('background_text_zindex',
863 [
864 'label' => __( 'z-Index', 'premium-addons-for-elementor' ),
865 'type' => Controls_Manager::NUMBER,
866 'min' => -10,
867 'max' => 20,
868 'step' => 1,
869 'selectors' => [
870 '{{WRAPPER}} .premium-title-bg-text:before' => 'z-index: {{VALUE}}',
871 ]
872 ]
873 );
874
875 $this->end_controls_section();
876
877 }
878
879 /**
880 * Render Dual Heading widget output on the frontend.
881 *
882 * Written in PHP and used to generate the final HTML.
883 *
884 * @since 1.0.0
885 * @access protected
886 */
887 protected function render() {
888
889 $settings = $this->get_settings_for_display();
890
891 $this->add_inline_editing_attributes('premium_dual_header_first_header_text');
892
893 $this->add_inline_editing_attributes('premium_dual_header_second_header_text');
894
895 $first_title_tag = $settings['premium_dual_header_first_header_tag'];
896
897 $first_title_text = $settings['premium_dual_header_first_header_text'] . ' ';
898
899 $second_title_text = $settings['premium_dual_header_second_header_text'];
900
901 $first_clip = '';
902
903 $second_clip = '';
904
905 $first_stroke = '';
906
907 $second_stroke = '';
908
909 if( 'clipped' === $settings['premium_dual_header_first_back_clip'] ) : $first_clip = "premium-dual-header-first-clip"; endif;
910
911 if( 'clipped' === $settings['premium_dual_header_second_back_clip'] ) : $second_clip = "premium-dual-header-second-clip"; endif;
912
913 if( ! empty( $first_clip ) && 'yes' === $settings['premium_dual_header_first_stroke'] ) : $first_stroke = " stroke"; endif;
914
915 if( ! empty( $second_clip ) && 'yes' === $settings['premium_dual_header_second_stroke'] ) : $second_stroke = " stroke"; endif;
916
917 $first_grad = $settings['premium_dual_header_first_animated'] === 'yes' ? ' gradient' : '';
918
919 $second_grad = $settings['premium_dual_header_second_animated'] === 'yes' ? ' gradient' : '';
920
921 $full_title = '<' . $first_title_tag . ' class="premium-dual-header-first-header ' . $first_clip . $first_stroke . $first_grad . '"><span class="premium-dual-header-first-span">'. $first_title_text . '</span><span class="premium-dual-header-second-header ' . $second_clip . $second_stroke . $second_grad . '">'. $second_title_text . '</span></' . $settings['premium_dual_header_first_header_tag'] . '> ';
922
923 $link = '';
924 if( $settings['premium_dual_header_link_switcher'] === 'yes' ) {
925
926 if( $settings['premium_dual_heading_link_selection'] === 'link' ) {
927
928 $link = get_permalink( $settings['premium_dual_heading_existing_link'] );
929
930 } else {
931
932 $link = $settings['premium_dual_heading_link']['url'];
933
934 }
935 }
936
937 $this->add_render_attribute( 'container', 'class', 'premium-dual-header-container' );
938
939 if( $settings['background_text_switcher'] === 'yes') {
940 $this->add_render_attribute( 'container', [
941 'class' => 'premium-title-bg-text',
942 'data-background' => $settings['background_text']
943 ]);
944 }
945
946
947 ?>
948
949 <div <?php echo $this->get_render_attribute_string('container');?>>
950 <?php if( ! empty ( $link ) ) : ?>
951 <a href="<?php echo esc_attr( $link ); ?>" <?php if( ! empty( $settings['premium_dual_heading_link']['is_external'] ) ) : ?> target="_blank" <?php endif; ?><?php if( ! empty( $settings['premium_dual_heading_link']['nofollow'] ) ) : ?> rel="nofollow" <?php endif; ?>>
952 <?php endif; ?>
953 <div class="premium-dual-header-first-container">
954 <?php echo $full_title; ?>
955 </div>
956 <?php if( ! empty ( $link ) ) : ?>
957 </a>
958 <?php endif; ?>
959 </div>
960
961 <?php
962 }
963
964 /**
965 * Render Dual Heading widget output in the editor.
966 *
967 * Written as a Backbone JavaScript template and used to generate the live preview.
968 *
969 * @since 1.0.0
970 * @access protected
971 */
972 protected function content_template()
973 {
974 ?>
975 <#
976
977 view.addInlineEditingAttributes('premium_dual_header_first_header_text');
978
979 view.addInlineEditingAttributes('premium_dual_header_second_header_text');
980
981 var firstTag = settings.premium_dual_header_first_header_tag,
982
983 firstText = settings.premium_dual_header_first_header_text + ' ',
984
985 secondText = settings.premium_dual_header_second_header_text,
986
987 firstClip = '',
988
989 secondClip = '',
990
991 firstStroke = '',
992
993 secondStroke = '';
994
995 if( 'clipped' === settings.premium_dual_header_first_back_clip )
996 firstClip = "premium-dual-header-first-clip";
997
998 if( 'clipped' === settings.premium_dual_header_second_back_clip )
999 secondClip = "premium-dual-header-second-clip";
1000
1001 if( 'yes' === settings.premium_dual_header_first_stroke )
1002 firstStroke = "stroke";
1003
1004 if( 'yes' === settings.premium_dual_header_second_stroke )
1005 secondStroke = "stroke";
1006
1007 var firstGrad = 'yes' === settings.premium_dual_header_first_animated ? ' gradient' : '',
1008
1009 secondGrad = 'yes' === settings.premium_dual_header_second_animated ? ' gradient' : '';
1010
1011 view.addRenderAttribute('first_title', 'class', ['premium-dual-header-first-header', firstClip, firstGrad, firstStroke ] );
1012 view.addRenderAttribute('second_title', 'class', ['premium-dual-header-second-header', secondClip, secondGrad, secondStroke ] );
1013
1014 var link = '';
1015 if( 'yes' === settings.premium_dual_header_link_switcher ) {
1016
1017 if( 'link' === settings.premium_dual_heading_link_selection ) {
1018
1019 link = settings.premium_dual_heading_existing_link;
1020
1021 } else {
1022
1023 link = settings.premium_dual_heading_link.url;
1024
1025 }
1026 }
1027
1028 view.addRenderAttribute('container', 'class', 'premium-dual-header-container' );
1029
1030 if( 'yes' === settings.background_text_switcher ) {
1031 view.addRenderAttribute( 'container', {
1032 'class': 'premium-title-bg-text',
1033 'data-background': settings.background_text
1034 });
1035 }
1036
1037
1038 #>
1039
1040 <div {{{ view.getRenderAttributeString('container') }}}>
1041 <# if( 'yes' === settings.premium_dual_header_link_switcher && '' !== link ) { #>
1042 <a href="{{ link }}">
1043 <# } #>
1044 <div class="premium-dual-header-first-container">
1045 <{{{firstTag}}} {{{ view.getRenderAttributeString('first_title') }}}>
1046 <span class="premium-dual-header-first-span">{{{ firstText }}}</span><span {{{ view.getRenderAttributeString('second_title') }}}>{{{ secondText }}}</span>
1047 </{{{firstTag}}}>
1048
1049 </div>
1050 <# if( 'yes' == settings.premium_dual_header_link_switcher && '' !== link ) { #>
1051 </a>
1052 <# } #>
1053 </div>
1054
1055 <?php
1056 }
1057 }