Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/elementor/includes/elements/column.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
namespace Elementor;
3
+
4
+
use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager;
5
+
use Elementor\Plugin;
6
+
7
+
if ( ! defined( 'ABSPATH' ) ) {
8
+
exit; // Exit if accessed directly.
9
+
}
10
+
11
+
/**
12
+
* Elementor column element.
13
+
*
14
+
* Elementor column handler class is responsible for initializing the column
15
+
* element.
16
+
*
17
+
* @since 1.0.0
18
+
*/
19
+
class Element_Column extends Element_Base {
20
+
21
+
/**
22
+
* Get column name.
23
+
*
24
+
* Retrieve the column name.
25
+
*
26
+
* @since 1.0.0
27
+
* @access public
28
+
*
29
+
* @return string Column name.
30
+
*/
31
+
public function get_name() {
32
+
return 'column';
33
+
}
34
+
35
+
/**
36
+
* Get element type.
37
+
*
38
+
* Retrieve the element type, in this case `column`.
39
+
*
40
+
* @since 2.1.0
41
+
* @access public
42
+
* @static
43
+
*
44
+
* @return string The type.
45
+
*/
46
+
public static function get_type() {
47
+
return 'column';
48
+
}
49
+
50
+
/**
51
+
* Get column title.
52
+
*
53
+
* Retrieve the column title.
54
+
*
55
+
* @since 1.0.0
56
+
* @access public
57
+
*
58
+
* @return string Column title.
59
+
*/
60
+
public function get_title() {
61
+
return esc_html__( 'Column', 'elementor' );
62
+
}
63
+
64
+
/**
65
+
* Get column icon.
66
+
*
67
+
* Retrieve the column icon.
68
+
*
69
+
* @since 1.0.0
70
+
* @access public
71
+
*
72
+
* @return string Column icon.
73
+
*/
74
+
public function get_icon() {
75
+
return 'eicon-column';
76
+
}
77
+
78
+
protected function is_dynamic_content(): bool {
79
+
return false;
80
+
}
81
+
82
+
/**
83
+
* Get initial config.
84
+
*
85
+
* Retrieve the current section initial configuration.
86
+
*
87
+
* Adds more configuration on top of the controls list, the tabs assigned to
88
+
* the control, element name, type, icon and more. This method also adds
89
+
* section presets.
90
+
*
91
+
* @since 2.9.0
92
+
* @access protected
93
+
*
94
+
* @return array The initial config.
95
+
*/
96
+
protected function get_initial_config() {
97
+
$config = parent::get_initial_config();
98
+
99
+
$config['controls'] = $this->get_controls();
100
+
$config['tabs_controls'] = $this->get_tabs_controls();
101
+
102
+
return $config;
103
+
}
104
+
105
+
/**
106
+
* Register column controls.
107
+
*
108
+
* Used to add new controls to the column element.
109
+
*
110
+
* @since 3.1.0
111
+
* @access protected
112
+
*/
113
+
protected function register_controls() {
114
+
// Section Layout.
115
+
$this->start_controls_section(
116
+
'layout',
117
+
[
118
+
'label' => esc_html__( 'Layout', 'elementor' ),
119
+
'tab' => Controls_Manager::TAB_LAYOUT,
120
+
]
121
+
);
122
+
123
+
// Element Name for the Navigator.
124
+
$this->add_control(
125
+
'_title',
126
+
[
127
+
'label' => esc_html__( 'Title', 'elementor' ),
128
+
'type' => Controls_Manager::HIDDEN,
129
+
'render_type' => 'none',
130
+
]
131
+
);
132
+
133
+
$active_breakpoint_keys = array_reverse( array_keys( Plugin::$instance->breakpoints->get_active_breakpoints() ) );
134
+
$inline_size_device_args = [
135
+
Breakpoints_Manager::BREAKPOINT_KEY_MOBILE => [ 'placeholder' => 100 ],
136
+
];
137
+
138
+
foreach ( $active_breakpoint_keys as $breakpoint_key ) {
139
+
if ( ! isset( $inline_size_device_args[ $breakpoint_key ] ) ) {
140
+
$inline_size_device_args[ $breakpoint_key ] = [];
141
+
}
142
+
143
+
$inline_size_device_args[ $breakpoint_key ] = array_merge_recursive(
144
+
$inline_size_device_args[ $breakpoint_key ],
145
+
[
146
+
'max' => 100,
147
+
'required' => false,
148
+
]
149
+
);
150
+
}
151
+
152
+
if ( in_array( Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA, $active_breakpoint_keys, true ) ) {
153
+
$min_affected_device_value = Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA;
154
+
} else {
155
+
$min_affected_device_value = Breakpoints_Manager::BREAKPOINT_KEY_TABLET;
156
+
}
157
+
158
+
$this->add_responsive_control(
159
+
'_inline_size',
160
+
[
161
+
'label' => esc_html__( 'Column Width', 'elementor' ) . ' (%)',
162
+
'type' => Controls_Manager::NUMBER,
163
+
'min' => 2,
164
+
'max' => 98,
165
+
'required' => true,
166
+
'device_args' => $inline_size_device_args,
167
+
'min_affected_device' => [
168
+
Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP => $min_affected_device_value,
169
+
Breakpoints_Manager::BREAKPOINT_KEY_LAPTOP => $min_affected_device_value,
170
+
Breakpoints_Manager::BREAKPOINT_KEY_TABLET_EXTRA => $min_affected_device_value,
171
+
Breakpoints_Manager::BREAKPOINT_KEY_TABLET => $min_affected_device_value,
172
+
Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA => $min_affected_device_value,
173
+
],
174
+
'selectors' => [
175
+
'{{WRAPPER}}' => 'width: {{VALUE}}%',
176
+
],
177
+
]
178
+
);
179
+
180
+
$this->add_responsive_control(
181
+
'content_position',
182
+
[
183
+
'label' => esc_html__( 'Vertical Alignment', 'elementor' ),
184
+
'type' => Controls_Manager::SELECT,
185
+
'default' => '',
186
+
'options' => [
187
+
'' => esc_html__( 'Default', 'elementor' ),
188
+
'top' => esc_html__( 'Top', 'elementor' ),
189
+
'center' => esc_html__( 'Middle', 'elementor' ),
190
+
'bottom' => esc_html__( 'Bottom', 'elementor' ),
191
+
'space-between' => esc_html__( 'Space Between', 'elementor' ),
192
+
'space-around' => esc_html__( 'Space Around', 'elementor' ),
193
+
'space-evenly' => esc_html__( 'Space Evenly', 'elementor' ),
194
+
],
195
+
'selectors_dictionary' => [
196
+
'top' => 'flex-start',
197
+
'bottom' => 'flex-end',
198
+
],
199
+
'selectors' => [
200
+
// TODO: The following line is for BC since 2.7.0.
201
+
'.elementor-bc-flex-widget {{WRAPPER}}.elementor-column .elementor-widget-wrap' => 'align-items: {{VALUE}}',
202
+
// This specificity is intended to make sure column css overwrites section css on vertical alignment (content_position).
203
+
'{{WRAPPER}}.elementor-column.elementor-element[data-element_type="column"] > .elementor-widget-wrap.elementor-element-populated' => 'align-content: {{VALUE}}; align-items: {{VALUE}};',
204
+
],
205
+
]
206
+
);
207
+
208
+
$this->add_responsive_control(
209
+
'align',
210
+
[
211
+
'label' => esc_html__( 'Horizontal Alignment', 'elementor' ),
212
+
'type' => Controls_Manager::SELECT,
213
+
'default' => '',
214
+
'options' => [
215
+
'' => esc_html__( 'Default', 'elementor' ),
216
+
'flex-start' => esc_html__( 'Start', 'elementor' ),
217
+
'center' => esc_html__( 'Center', 'elementor' ),
218
+
'flex-end' => esc_html__( 'End', 'elementor' ),
219
+
'space-between' => esc_html__( 'Space Between', 'elementor' ),
220
+
'space-around' => esc_html__( 'Space Around', 'elementor' ),
221
+
'space-evenly' => esc_html__( 'Space Evenly', 'elementor' ),
222
+
],
223
+
'selectors' => [
224
+
'{{WRAPPER}}.elementor-column > .elementor-widget-wrap' => 'justify-content: {{VALUE}}',
225
+
],
226
+
]
227
+
);
228
+
229
+
$optimized_markup = Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
230
+
$space_between_widgets = $optimized_markup
231
+
? '--kit-widget-spacing: {{VALUE}}px'
232
+
: 'margin-block-end: {{VALUE}}px';
233
+
234
+
$this->add_responsive_control(
235
+
'space_between_widgets',
236
+
[
237
+
'label' => esc_html__( 'Widgets Space', 'elementor' ) . ' (px)',
238
+
'type' => Controls_Manager::NUMBER,
239
+
'placeholder' => 20,
240
+
'selectors' => [
241
+
'{{WRAPPER}} > .elementor-widget-wrap > .elementor-widget:not(.elementor-widget__width-auto):not(.elementor-widget__width-initial):not(:last-child):not(.elementor-absolute)' => $space_between_widgets, // Need the full path for exclude the inner section.
242
+
],
243
+
]
244
+
);
245
+
246
+
$possible_tags = [
247
+
'div',
248
+
'header',
249
+
'footer',
250
+
'main',
251
+
'article',
252
+
'section',
253
+
'aside',
254
+
'nav',
255
+
];
256
+
257
+
$options = [
258
+
'' => esc_html__( 'Default', 'elementor' ),
259
+
] + array_combine( $possible_tags, $possible_tags );
260
+
261
+
$this->add_control(
262
+
'html_tag',
263
+
[
264
+
'label' => esc_html__( 'HTML Tag', 'elementor' ),
265
+
'type' => Controls_Manager::SELECT,
266
+
'options' => $options,
267
+
'render_type' => 'none',
268
+
]
269
+
);
270
+
271
+
$this->end_controls_section();
272
+
273
+
$this->start_controls_section(
274
+
'section_style',
275
+
[
276
+
'label' => esc_html__( 'Background', 'elementor' ),
277
+
'tab' => Controls_Manager::TAB_STYLE,
278
+
]
279
+
);
280
+
281
+
$this->start_controls_tabs( 'tabs_background' );
282
+
283
+
$this->start_controls_tab(
284
+
'tab_background_normal',
285
+
[
286
+
'label' => esc_html__( 'Normal', 'elementor' ),
287
+
]
288
+
);
289
+
290
+
$this->add_group_control(
291
+
Group_Control_Background::get_type(),
292
+
[
293
+
'name' => 'background',
294
+
'types' => [ 'classic', 'gradient', 'slideshow' ],
295
+
'selector' => '{{WRAPPER}}:not(.elementor-motion-effects-element-type-background) > .elementor-widget-wrap, {{WRAPPER}} > .elementor-widget-wrap > .elementor-motion-effects-container > .elementor-motion-effects-layer',
296
+
'fields_options' => [
297
+
'background' => [
298
+
'frontend_available' => true,
299
+
],
300
+
],
301
+
]
302
+
);
303
+
304
+
$this->add_control(
305
+
'handle_slideshow_asset_loading',
306
+
[
307
+
'type' => Controls_Manager::HIDDEN,
308
+
'assets' => [
309
+
'styles' => [
310
+
[
311
+
'name' => 'e-swiper',
312
+
'conditions' => [
313
+
'terms' => [
314
+
[
315
+
'name' => 'background_background',
316
+
'operator' => '===',
317
+
'value' => 'slideshow',
318
+
],
319
+
],
320
+
],
321
+
],
322
+
],
323
+
'scripts' => [
324
+
[
325
+
'name' => 'swiper',
326
+
'conditions' => [
327
+
'terms' => [
328
+
[
329
+
'name' => 'background_background',
330
+
'operator' => '===',
331
+
'value' => 'slideshow',
332
+
],
333
+
],
334
+
],
335
+
],
336
+
],
337
+
],
338
+
]
339
+
);
340
+
341
+
$this->end_controls_tab();
342
+
343
+
$this->start_controls_tab(
344
+
'tab_background_hover',
345
+
[
346
+
'label' => esc_html__( 'Hover', 'elementor' ),
347
+
]
348
+
);
349
+
350
+
$this->add_group_control(
351
+
Group_Control_Background::get_type(),
352
+
[
353
+
'name' => 'background_hover',
354
+
'selector' => '{{WRAPPER}}:hover > .elementor-element-populated',
355
+
]
356
+
);
357
+
358
+
$this->add_control(
359
+
'background_hover_transition',
360
+
[
361
+
'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)',
362
+
'type' => Controls_Manager::SLIDER,
363
+
'default' => [
364
+
'size' => 0.3,
365
+
],
366
+
'range' => [
367
+
'px' => [
368
+
'min' => 0,
369
+
'max' => 3,
370
+
'step' => 0.1,
371
+
],
372
+
],
373
+
'render_type' => 'ui',
374
+
'separator' => 'before',
375
+
]
376
+
);
377
+
378
+
$this->end_controls_tab();
379
+
380
+
$this->end_controls_tabs();
381
+
382
+
$this->end_controls_section();
383
+
384
+
// Section Column Background Overlay.
385
+
$this->start_controls_section(
386
+
'section_background_overlay',
387
+
[
388
+
'label' => esc_html__( 'Background Overlay', 'elementor' ),
389
+
'tab' => Controls_Manager::TAB_STYLE,
390
+
'condition' => [
391
+
'background_background' => [ 'classic', 'gradient' ],
392
+
],
393
+
]
394
+
);
395
+
396
+
$this->start_controls_tabs( 'tabs_background_overlay' );
397
+
398
+
$this->start_controls_tab(
399
+
'tab_background_overlay_normal',
400
+
[
401
+
'label' => esc_html__( 'Normal', 'elementor' ),
402
+
]
403
+
);
404
+
405
+
$this->add_group_control(
406
+
Group_Control_Background::get_type(),
407
+
[
408
+
'name' => 'background_overlay',
409
+
'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay',
410
+
]
411
+
);
412
+
413
+
$this->add_responsive_control(
414
+
'background_overlay_opacity',
415
+
[
416
+
'label' => esc_html__( 'Opacity', 'elementor' ),
417
+
'type' => Controls_Manager::SLIDER,
418
+
'default' => [
419
+
'size' => .5,
420
+
],
421
+
'range' => [
422
+
'px' => [
423
+
'max' => 1,
424
+
'step' => 0.01,
425
+
],
426
+
],
427
+
'selectors' => [
428
+
'{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'opacity: {{SIZE}};',
429
+
],
430
+
'condition' => [
431
+
'background_overlay_background' => [ 'classic', 'gradient' ],
432
+
],
433
+
]
434
+
);
435
+
436
+
$this->add_group_control(
437
+
Group_Control_Css_Filter::get_type(),
438
+
[
439
+
'name' => 'css_filters',
440
+
'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay',
441
+
]
442
+
);
443
+
444
+
$this->add_control(
445
+
'overlay_blend_mode',
446
+
[
447
+
'label' => esc_html__( 'Blend Mode', 'elementor' ),
448
+
'type' => Controls_Manager::SELECT,
449
+
'options' => [
450
+
'' => esc_html__( 'Normal', 'elementor' ),
451
+
'multiply' => esc_html__( 'Multiply', 'elementor' ),
452
+
'screen' => esc_html__( 'Screen', 'elementor' ),
453
+
'overlay' => esc_html__( 'Overlay', 'elementor' ),
454
+
'darken' => esc_html__( 'Darken', 'elementor' ),
455
+
'lighten' => esc_html__( 'Lighten', 'elementor' ),
456
+
'color-dodge' => esc_html__( 'Color Dodge', 'elementor' ),
457
+
'saturation' => esc_html__( 'Saturation', 'elementor' ),
458
+
'color' => esc_html__( 'Color', 'elementor' ),
459
+
'difference' => esc_html__( 'Difference', 'elementor' ),
460
+
'exclusion' => esc_html__( 'Exclusion', 'elementor' ),
461
+
'hue' => esc_html__( 'Hue', 'elementor' ),
462
+
'luminosity' => esc_html__( 'Luminosity', 'elementor' ),
463
+
],
464
+
'selectors' => [
465
+
'{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}',
466
+
],
467
+
]
468
+
);
469
+
470
+
$this->end_controls_tab();
471
+
472
+
$this->start_controls_tab(
473
+
'tab_background_overlay_hover',
474
+
[
475
+
'label' => esc_html__( 'Hover', 'elementor' ),
476
+
]
477
+
);
478
+
479
+
$this->add_group_control(
480
+
Group_Control_Background::get_type(),
481
+
[
482
+
'name' => 'background_overlay_hover',
483
+
'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay',
484
+
]
485
+
);
486
+
487
+
$this->add_responsive_control(
488
+
'background_overlay_hover_opacity',
489
+
[
490
+
'label' => esc_html__( 'Opacity', 'elementor' ),
491
+
'type' => Controls_Manager::SLIDER,
492
+
'default' => [
493
+
'size' => .5,
494
+
],
495
+
'range' => [
496
+
'px' => [
497
+
'max' => 1,
498
+
'step' => 0.01,
499
+
],
500
+
],
501
+
'selectors' => [
502
+
'{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay' => 'opacity: {{SIZE}};',
503
+
],
504
+
'condition' => [
505
+
'background_overlay_hover_background' => [ 'classic', 'gradient' ],
506
+
],
507
+
]
508
+
);
509
+
510
+
$this->add_group_control(
511
+
Group_Control_Css_Filter::get_type(),
512
+
[
513
+
'name' => 'css_filters_hover',
514
+
'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay',
515
+
]
516
+
);
517
+
518
+
$this->add_control(
519
+
'background_overlay_hover_transition',
520
+
[
521
+
'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)',
522
+
'type' => Controls_Manager::SLIDER,
523
+
'default' => [
524
+
'size' => 0.3,
525
+
],
526
+
'range' => [
527
+
'px' => [
528
+
'min' => 0,
529
+
'max' => 3,
530
+
'step' => 0.1,
531
+
],
532
+
],
533
+
'render_type' => 'ui',
534
+
'separator' => 'before',
535
+
]
536
+
);
537
+
538
+
$this->end_controls_tab();
539
+
540
+
$this->end_controls_tabs();
541
+
542
+
$this->end_controls_section();
543
+
544
+
$this->start_controls_section(
545
+
'section_border',
546
+
[
547
+
'label' => esc_html__( 'Border', 'elementor' ),
548
+
'tab' => Controls_Manager::TAB_STYLE,
549
+
]
550
+
);
551
+
552
+
$this->start_controls_tabs( 'tabs_border' );
553
+
554
+
$this->start_controls_tab(
555
+
'tab_border_normal',
556
+
[
557
+
'label' => esc_html__( 'Normal', 'elementor' ),
558
+
]
559
+
);
560
+
561
+
$this->add_group_control(
562
+
Group_Control_Border::get_type(),
563
+
[
564
+
'name' => 'border',
565
+
'selector' => '{{WRAPPER}} > .elementor-element-populated',
566
+
]
567
+
);
568
+
569
+
$this->add_responsive_control(
570
+
'border_radius',
571
+
[
572
+
'label' => esc_html__( 'Border Radius', 'elementor' ),
573
+
'type' => Controls_Manager::DIMENSIONS,
574
+
'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
575
+
'selectors' => [
576
+
'{{WRAPPER}} > .elementor-element-populated, {{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay, {{WRAPPER}} > .elementor-background-slideshow' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
577
+
],
578
+
]
579
+
);
580
+
581
+
$this->add_group_control(
582
+
Group_Control_Box_Shadow::get_type(),
583
+
[
584
+
'name' => 'box_shadow',
585
+
'selector' => '{{WRAPPER}} > .elementor-element-populated',
586
+
]
587
+
);
588
+
589
+
$this->end_controls_tab();
590
+
591
+
$this->start_controls_tab(
592
+
'tab_border_hover',
593
+
[
594
+
'label' => esc_html__( 'Hover', 'elementor' ),
595
+
]
596
+
);
597
+
598
+
$this->add_group_control(
599
+
Group_Control_Border::get_type(),
600
+
[
601
+
'name' => 'border_hover',
602
+
'selector' => '{{WRAPPER}}:hover > .elementor-element-populated',
603
+
]
604
+
);
605
+
606
+
$this->add_responsive_control(
607
+
'border_radius_hover',
608
+
[
609
+
'label' => esc_html__( 'Border Radius', 'elementor' ),
610
+
'type' => Controls_Manager::DIMENSIONS,
611
+
'size_units' => [ 'px', '%', 'em', 'rem', 'custom' ],
612
+
'selectors' => [
613
+
'{{WRAPPER}}:hover > .elementor-element-populated, {{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
614
+
],
615
+
]
616
+
);
617
+
618
+
$this->add_group_control(
619
+
Group_Control_Box_Shadow::get_type(),
620
+
[
621
+
'name' => 'box_shadow_hover',
622
+
'selector' => '{{WRAPPER}}:hover > .elementor-element-populated',
623
+
]
624
+
);
625
+
626
+
$this->add_control(
627
+
'border_hover_transition',
628
+
[
629
+
'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (s)',
630
+
'type' => Controls_Manager::SLIDER,
631
+
'separator' => 'before',
632
+
'default' => [
633
+
'size' => 0.3,
634
+
],
635
+
'range' => [
636
+
'px' => [
637
+
'min' => 0,
638
+
'max' => 3,
639
+
'step' => 0.1,
640
+
],
641
+
],
642
+
'conditions' => [
643
+
'relation' => 'or',
644
+
'terms' => [
645
+
[
646
+
'name' => 'background_background',
647
+
'operator' => '!==',
648
+
'value' => '',
649
+
],
650
+
[
651
+
'name' => 'border_hover_border',
652
+
'operator' => '!==',
653
+
'value' => '',
654
+
],
655
+
],
656
+
],
657
+
'selectors' => [
658
+
'{{WRAPPER}} > .elementor-element-populated' => 'transition: background {{background_hover_transition.SIZE}}s, border {{SIZE}}s, border-radius {{SIZE}}s, box-shadow {{SIZE}}s',
659
+
'{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'transition: background {{background_overlay_hover_transition.SIZE}}s, border-radius {{SIZE}}s, opacity {{background_overlay_hover_transition.SIZE}}s',
660
+
],
661
+
]
662
+
);
663
+
664
+
$this->end_controls_tab();
665
+
666
+
$this->end_controls_tabs();
667
+
668
+
$this->end_controls_section();
669
+
670
+
// Section Typography.
671
+
$this->start_controls_section(
672
+
'section_typo',
673
+
[
674
+
'label' => esc_html__( 'Typography', 'elementor' ),
675
+
'type' => Controls_Manager::SECTION,
676
+
'tab' => Controls_Manager::TAB_STYLE,
677
+
]
678
+
);
679
+
680
+
$this->add_control(
681
+
'heading_color',
682
+
[
683
+
'label' => esc_html__( 'Heading Color', 'elementor' ),
684
+
'type' => Controls_Manager::COLOR,
685
+
'default' => '',
686
+
'selectors' => [
687
+
'{{WRAPPER}} .elementor-element-populated .elementor-heading-title' => 'color: {{VALUE}};',
688
+
],
689
+
]
690
+
);
691
+
692
+
$this->add_control(
693
+
'color_text',
694
+
[
695
+
'label' => esc_html__( 'Text Color', 'elementor' ),
696
+
'type' => Controls_Manager::COLOR,
697
+
'default' => '',
698
+
'selectors' => [
699
+
'{{WRAPPER}} > .elementor-element-populated' => 'color: {{VALUE}};',
700
+
],
701
+
]
702
+
);
703
+
704
+
$this->add_control(
705
+
'color_link',
706
+
[
707
+
'label' => esc_html__( 'Link Color', 'elementor' ),
708
+
'type' => Controls_Manager::COLOR,
709
+
'default' => '',
710
+
'selectors' => [
711
+
'{{WRAPPER}} .elementor-element-populated a' => 'color: {{VALUE}};',
712
+
],
713
+
]
714
+
);
715
+
716
+
$this->add_control(
717
+
'color_link_hover',
718
+
[
719
+
'label' => esc_html__( 'Link Hover Color', 'elementor' ),
720
+
'type' => Controls_Manager::COLOR,
721
+
'default' => '',
722
+
'selectors' => [
723
+
'{{WRAPPER}} .elementor-element-populated a:hover' => 'color: {{VALUE}};',
724
+
],
725
+
]
726
+
);
727
+
728
+
$this->add_responsive_control(
729
+
'text_align',
730
+
[
731
+
'label' => esc_html__( 'Text Align', 'elementor' ),
732
+
'type' => Controls_Manager::CHOOSE,
733
+
'options' => [
734
+
'start' => [
735
+
'title' => esc_html__( 'Start', 'elementor' ),
736
+
'icon' => 'eicon-text-align-left',
737
+
],
738
+
'center' => [
739
+
'title' => esc_html__( 'Center', 'elementor' ),
740
+
'icon' => 'eicon-text-align-center',
741
+
],
742
+
'end' => [
743
+
'title' => esc_html__( 'End', 'elementor' ),
744
+
'icon' => 'eicon-text-align-right',
745
+
],
746
+
'justify' => [
747
+
'title' => esc_html__( 'Justified', 'elementor' ),
748
+
'icon' => 'eicon-text-align-justify',
749
+
],
750
+
],
751
+
'classes' => 'elementor-control-start-end',
752
+
'selectors_dictionary' => [
753
+
'left' => is_rtl() ? 'end' : 'start',
754
+
'right' => is_rtl() ? 'start' : 'end',
755
+
],
756
+
'selectors' => [
757
+
'{{WRAPPER}} > .elementor-element-populated' => 'text-align: {{VALUE}};',
758
+
],
759
+
]
760
+
);
761
+
762
+
$this->end_controls_section();
763
+
764
+
// Section Advanced.
765
+
$this->start_controls_section(
766
+
'section_advanced',
767
+
[
768
+
'label' => esc_html__( 'Advanced', 'elementor' ),
769
+
'type' => Controls_Manager::SECTION,
770
+
'tab' => Controls_Manager::TAB_ADVANCED,
771
+
]
772
+
);
773
+
774
+
$this->add_responsive_control(
775
+
'margin',
776
+
[
777
+
'label' => esc_html__( 'Margin', 'elementor' ),
778
+
'type' => Controls_Manager::DIMENSIONS,
779
+
'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ],
780
+
'selectors' => [
781
+
'{{WRAPPER}} > .elementor-element-populated' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};
782
+
--e-column-margin-right: {{RIGHT}}{{UNIT}}; --e-column-margin-left: {{LEFT}}{{UNIT}};',
783
+
],
784
+
]
785
+
);
786
+
787
+
$this->add_responsive_control(
788
+
'padding',
789
+
[
790
+
'label' => esc_html__( 'Padding', 'elementor' ),
791
+
'type' => Controls_Manager::DIMENSIONS,
792
+
'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ],
793
+
'selectors' => [
794
+
'{{WRAPPER}} > .elementor-element-populated' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
795
+
],
796
+
]
797
+
);
798
+
799
+
$this->add_responsive_control(
800
+
'z_index',
801
+
[
802
+
'label' => esc_html__( 'Z-Index', 'elementor' ),
803
+
'type' => Controls_Manager::NUMBER,
804
+
'min' => 0,
805
+
'selectors' => [
806
+
'{{WRAPPER}}' => 'z-index: {{VALUE}};',
807
+
],
808
+
]
809
+
);
810
+
811
+
$this->add_control(
812
+
'_element_id',
813
+
[
814
+
'label' => esc_html__( 'CSS ID', 'elementor' ),
815
+
'type' => Controls_Manager::TEXT,
816
+
'default' => '',
817
+
'ai' => [
818
+
'active' => false,
819
+
],
820
+
'dynamic' => [
821
+
'active' => true,
822
+
],
823
+
'title' => esc_html__( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ),
824
+
'style_transfer' => false,
825
+
'classes' => 'elementor-control-direction-ltr',
826
+
]
827
+
);
828
+
829
+
$this->add_control(
830
+
'css_classes',
831
+
[
832
+
'label' => esc_html__( 'CSS Classes', 'elementor' ),
833
+
'type' => Controls_Manager::TEXT,
834
+
'default' => '',
835
+
'ai' => [
836
+
'active' => false,
837
+
],
838
+
'dynamic' => [
839
+
'active' => true,
840
+
],
841
+
'prefix_class' => '',
842
+
'title' => esc_html__( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor' ),
843
+
'classes' => 'elementor-control-direction-ltr',
844
+
]
845
+
);
846
+
847
+
Plugin::$instance->controls_manager->add_display_conditions_controls( $this );
848
+
849
+
// TODO: Backward comparability for deprecated controls.
850
+
$this->add_control(
851
+
'screen_sm',
852
+
[
853
+
'type' => Controls_Manager::HIDDEN,
854
+
]
855
+
);
856
+
857
+
$this->add_control(
858
+
'screen_sm_width',
859
+
[
860
+
'type' => Controls_Manager::HIDDEN,
861
+
'condition' => [
862
+
'screen_sm' => [ 'custom' ],
863
+
],
864
+
'prefix_class' => 'elementor-sm-',
865
+
]
866
+
);
867
+
// END Backward comparability.
868
+
869
+
$this->end_controls_section();
870
+
871
+
$this->start_controls_section(
872
+
'section_effects',
873
+
[
874
+
'label' => esc_html__( 'Motion Effects', 'elementor' ),
875
+
'tab' => Controls_Manager::TAB_ADVANCED,
876
+
]
877
+
);
878
+
879
+
Plugin::$instance->controls_manager->add_motion_effects_promotion_control( $this );
880
+
881
+
$this->add_responsive_control(
882
+
'animation',
883
+
[
884
+
'label' => esc_html__( 'Entrance Animation', 'elementor' ),
885
+
'type' => Controls_Manager::ANIMATION,
886
+
'frontend_available' => true,
887
+
]
888
+
);
889
+
890
+
$this->add_control(
891
+
'animation_duration',
892
+
[
893
+
'label' => esc_html__( 'Animation Duration', 'elementor' ),
894
+
'type' => Controls_Manager::SELECT,
895
+
'default' => '',
896
+
'options' => [
897
+
'slow' => esc_html__( 'Slow', 'elementor' ),
898
+
'' => esc_html__( 'Normal', 'elementor' ),
899
+
'fast' => esc_html__( 'Fast', 'elementor' ),
900
+
],
901
+
'prefix_class' => 'animated-',
902
+
'condition' => [
903
+
'animation!' => '',
904
+
],
905
+
]
906
+
);
907
+
908
+
$this->add_control(
909
+
'animation_delay',
910
+
[
911
+
'label' => esc_html__( 'Animation Delay', 'elementor' ) . ' (ms)',
912
+
'type' => Controls_Manager::NUMBER,
913
+
'default' => '',
914
+
'min' => 0,
915
+
'step' => 100,
916
+
'condition' => [
917
+
'animation!' => '',
918
+
],
919
+
'render_type' => 'none',
920
+
'frontend_available' => true,
921
+
]
922
+
);
923
+
924
+
$this->end_controls_section();
925
+
926
+
$this->start_controls_section(
927
+
'_section_responsive',
928
+
[
929
+
'label' => esc_html__( 'Responsive', 'elementor' ),
930
+
'tab' => Controls_Manager::TAB_ADVANCED,
931
+
]
932
+
);
933
+
934
+
$this->add_control(
935
+
'responsive_description',
936
+
[
937
+
'raw' => sprintf(
938
+
/* translators: 1: Link open tag, 2: Link close tag. */
939
+
esc_html__( 'Responsive visibility will take effect only on %1$s preview mode %2$s or live page, and not while editing in Elementor.', 'elementor' ),
940
+
'<a href="javascript: $e.run( \'panel/close\' )">',
941
+
'</a>'
942
+
),
943
+
'type' => Controls_Manager::RAW_HTML,
944
+
'content_classes' => 'elementor-descriptor',
945
+
]
946
+
);
947
+
948
+
$this->add_hidden_device_controls();
949
+
950
+
$this->end_controls_section();
951
+
952
+
Plugin::$instance->controls_manager->add_custom_attributes_controls( $this );
953
+
954
+
Plugin::$instance->controls_manager->add_custom_css_controls( $this );
955
+
}
956
+
957
+
/**
958
+
* Render column output in the editor.
959
+
*
960
+
* Used to generate the live preview, using a Backbone JavaScript template.
961
+
*
962
+
* @since 2.9.0
963
+
* @access protected
964
+
*/
965
+
protected function content_template() {
966
+
?>
967
+
<div class="elementor-widget-wrap">
968
+
<div class="elementor-background-overlay"></div>
969
+
</div>
970
+
<?php
971
+
}
972
+
973
+
/**
974
+
* Before column rendering.
975
+
*
976
+
* Used to add stuff before the column element.
977
+
*
978
+
* @since 1.0.0
979
+
* @access public
980
+
*/
981
+
public function before_render() {
982
+
$settings = $this->get_settings_for_display();
983
+
984
+
$overlay_background = $settings['background_overlay_background'] ?? '';
985
+
$overlay_hover_background = $settings['background_overlay_hover_background'] ?? '';
986
+
987
+
$has_background_overlay = in_array( $overlay_background, [ 'classic', 'gradient' ], true ) ||
988
+
in_array( $overlay_hover_background, [ 'classic', 'gradient' ], true );
989
+
990
+
$column_wrap_classes = [ 'elementor-widget-wrap' ];
991
+
992
+
if ( $this->get_children() ) {
993
+
$column_wrap_classes[] = 'elementor-element-populated';
994
+
}
995
+
996
+
$this->add_render_attribute( [
997
+
'_widget_wrapper' => [
998
+
'class' => $column_wrap_classes,
999
+
],
1000
+
'_background_overlay' => [
1001
+
'class' => [ 'elementor-background-overlay' ],
1002
+
],
1003
+
] );
1004
+
?>
1005
+
<<?php
1006
+
// PHPCS - the method get_html_tag is safe.
1007
+
echo $this->get_html_tag(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1008
+
?> <?php $this->print_render_attribute_string( '_wrapper' ); ?>>
1009
+
<div <?php $this->print_render_attribute_string( '_widget_wrapper' ); ?>>
1010
+
<?php if ( $has_background_overlay ) : ?>
1011
+
<div <?php $this->print_render_attribute_string( '_background_overlay' ); ?>></div>
1012
+
<?php endif; ?>
1013
+
<?php
1014
+
}
1015
+
1016
+
/**
1017
+
* After column rendering.
1018
+
*
1019
+
* Used to add stuff after the column element.
1020
+
*
1021
+
* @since 1.0.0
1022
+
* @access public
1023
+
*/
1024
+
public function after_render() {
1025
+
?>
1026
+
</div>
1027
+
</<?php
1028
+
// PHPCS - the method get_html_tag is safe.
1029
+
echo $this->get_html_tag(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
1030
+
<?php
1031
+
}
1032
+
1033
+
/**
1034
+
* Add column render attributes.
1035
+
*
1036
+
* Used to add attributes to the current column wrapper HTML tag.
1037
+
*
1038
+
* @since 1.3.0
1039
+
* @access protected
1040
+
*/
1041
+
protected function add_render_attributes() {
1042
+
1043
+
$is_inner = $this->get_data( 'isInner' );
1044
+
1045
+
$column_type = ! empty( $is_inner ) ? 'inner' : 'top';
1046
+
1047
+
$settings = $this->get_settings();
1048
+
1049
+
$this->add_render_attribute(
1050
+
'_wrapper', 'class', [
1051
+
'elementor-column',
1052
+
'elementor-col-' . $settings['_column_size'],
1053
+
'elementor-' . $column_type . '-column',
1054
+
]
1055
+
);
1056
+
1057
+
parent::add_render_attributes();
1058
+
}
1059
+
1060
+
/**
1061
+
* Get default child type.
1062
+
*
1063
+
* Retrieve the column child type based on element data.
1064
+
*
1065
+
* @since 1.0.0
1066
+
* @access protected
1067
+
*
1068
+
* @param array $element_data Element ID.
1069
+
*
1070
+
* @return Element_Base|false Column default child type.
1071
+
*/
1072
+
protected function _get_default_child_type( array $element_data ) {
1073
+
if ( 'section' === $element_data['elType'] ) {
1074
+
return Plugin::$instance->elements_manager->get_element_types( 'section' );
1075
+
}
1076
+
1077
+
if ( 'container' === $element_data['elType'] ) {
1078
+
return Plugin::$instance->elements_manager->get_element_types( 'container' );
1079
+
}
1080
+
1081
+
// If the element doesn't exists (disabled element, experiment, etc.), return false to prevent errors.
1082
+
if ( empty( $element_data['widgetType'] ) ) {
1083
+
return false;
1084
+
}
1085
+
1086
+
return Plugin::$instance->widgets_manager->get_widget_types( $element_data['widgetType'] );
1087
+
}
1088
+
1089
+
/**
1090
+
* Get HTML tag.
1091
+
*
1092
+
* Retrieve the column element HTML tag.
1093
+
*
1094
+
* @since 1.5.3
1095
+
* @access private
1096
+
*
1097
+
* @return string Column HTML tag.
1098
+
*/
1099
+
private function get_html_tag() {
1100
+
$html_tag = $this->get_settings( 'html_tag' );
1101
+
1102
+
if ( empty( $html_tag ) ) {
1103
+
$html_tag = 'div';
1104
+
}
1105
+
1106
+
return Utils::validate_html_tag( $html_tag );
1107
+
}
1108
+
}
1109
+