balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

background.php (24123B)


      1 <?php
      2 namespace Elementor;
      3 
      4 use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager;
      5 use Elementor\Modules\DynamicTags\Module as TagsModule;
      6 
      7 if ( ! defined( 'ABSPATH' ) ) {
      8 	exit; // Exit if accessed directly.
      9 }
     10 
     11 /**
     12  * Elementor background control.
     13  *
     14  * A base control for creating background control. Displays input fields to define
     15  * the background color, background image, background gradient or background video.
     16  *
     17  * @since 1.2.2
     18  */
     19 class Group_Control_Background extends Group_Control_Base {
     20 
     21 	/**
     22 	 * Fields.
     23 	 *
     24 	 * Holds all the background control fields.
     25 	 *
     26 	 * @since 1.2.2
     27 	 * @access protected
     28 	 * @static
     29 	 *
     30 	 * @var array Background control fields.
     31 	 */
     32 	protected static $fields;
     33 
     34 	/**
     35 	 * Background Types.
     36 	 *
     37 	 * Holds all the available background types.
     38 	 *
     39 	 * @since 1.2.2
     40 	 * @access private
     41 	 * @static
     42 	 *
     43 	 * @var array
     44 	 */
     45 	private static $background_types;
     46 
     47 	/**
     48 	 * Get background control type.
     49 	 *
     50 	 * Retrieve the control type, in this case `background`.
     51 	 *
     52 	 * @since 1.0.0
     53 	 * @access public
     54 	 * @static
     55 	 *
     56 	 * @return string Control type.
     57 	 */
     58 	public static function get_type() {
     59 		return 'background';
     60 	}
     61 
     62 	/**
     63 	 * Get background control types.
     64 	 *
     65 	 * Retrieve available background types.
     66 	 *
     67 	 * @since 1.2.2
     68 	 * @access public
     69 	 * @static
     70 	 *
     71 	 * @return array Available background types.
     72 	 */
     73 	public static function get_background_types() {
     74 		if ( null === self::$background_types ) {
     75 			self::$background_types = self::get_default_background_types();
     76 		}
     77 
     78 		return self::$background_types;
     79 	}
     80 
     81 	/**
     82 	 * Get Default background types.
     83 	 *
     84 	 * Retrieve background control initial types.
     85 	 *
     86 	 * @since 2.0.0
     87 	 * @access private
     88 	 * @static
     89 	 *
     90 	 * @return array Default background types.
     91 	 */
     92 	private static function get_default_background_types() {
     93 		return [
     94 			'classic' => [
     95 				'title' => _x( 'Classic', 'Background Control', 'elementor' ),
     96 				'icon' => 'eicon-paint-brush',
     97 			],
     98 			'gradient' => [
     99 				'title' => _x( 'Gradient', 'Background Control', 'elementor' ),
    100 				'icon' => 'eicon-barcode',
    101 			],
    102 			'video' => [
    103 				'title' => _x( 'Video', 'Background Control', 'elementor' ),
    104 				'icon' => 'eicon-video-camera',
    105 			],
    106 			'slideshow' => [
    107 				'title' => _x( 'Slideshow', 'Background Control', 'elementor' ),
    108 				'icon' => 'eicon-slideshow',
    109 			],
    110 		];
    111 	}
    112 
    113 	/**
    114 	 * Init fields.
    115 	 *
    116 	 * Initialize background control fields.
    117 	 *
    118 	 * @since 1.2.2
    119 	 * @access public
    120 	 *
    121 	 * @return array Control fields.
    122 	 */
    123 	public function init_fields() {
    124 		$fields = [];
    125 
    126 		$fields['background'] = [
    127 			'label' => _x( 'Background Type', 'Background Control', 'elementor' ),
    128 			'type' => Controls_Manager::CHOOSE,
    129 			'render_type' => 'ui',
    130 		];
    131 
    132 		$fields['color'] = [
    133 			'label' => _x( 'Color', 'Background Control', 'elementor' ),
    134 			'type' => Controls_Manager::COLOR,
    135 			'default' => '',
    136 			'title' => _x( 'Background Color', 'Background Control', 'elementor' ),
    137 			'selectors' => [
    138 				'{{SELECTOR}}' => 'background-color: {{VALUE}};',
    139 			],
    140 			'condition' => [
    141 				'background' => [ 'classic', 'gradient' ],
    142 			],
    143 		];
    144 
    145 		$fields['color_stop'] = [
    146 			'label' => _x( 'Location', 'Background Control', 'elementor' ),
    147 			'type' => Controls_Manager::SLIDER,
    148 			'size_units' => [ '%' ],
    149 			'default' => [
    150 				'unit' => '%',
    151 				'size' => 0,
    152 			],
    153 			'render_type' => 'ui',
    154 			'condition' => [
    155 				'background' => [ 'gradient' ],
    156 			],
    157 			'of_type' => 'gradient',
    158 		];
    159 
    160 		$fields['color_b'] = [
    161 			'label' => _x( 'Second Color', 'Background Control', 'elementor' ),
    162 			'type' => Controls_Manager::COLOR,
    163 			'default' => '#f2295b',
    164 			'render_type' => 'ui',
    165 			'condition' => [
    166 				'background' => [ 'gradient' ],
    167 			],
    168 			'of_type' => 'gradient',
    169 		];
    170 
    171 		$fields['color_b_stop'] = [
    172 			'label' => _x( 'Location', 'Background Control', 'elementor' ),
    173 			'type' => Controls_Manager::SLIDER,
    174 			'size_units' => [ '%' ],
    175 			'default' => [
    176 				'unit' => '%',
    177 				'size' => 100,
    178 			],
    179 			'render_type' => 'ui',
    180 			'condition' => [
    181 				'background' => [ 'gradient' ],
    182 			],
    183 			'of_type' => 'gradient',
    184 		];
    185 
    186 		$fields['gradient_type'] = [
    187 			'label' => _x( 'Type', 'Background Control', 'elementor' ),
    188 			'type' => Controls_Manager::SELECT,
    189 			'options' => [
    190 				'linear' => _x( 'Linear', 'Background Control', 'elementor' ),
    191 				'radial' => _x( 'Radial', 'Background Control', 'elementor' ),
    192 			],
    193 			'default' => 'linear',
    194 			'render_type' => 'ui',
    195 			'condition' => [
    196 				'background' => [ 'gradient' ],
    197 			],
    198 			'of_type' => 'gradient',
    199 		];
    200 
    201 		$fields['gradient_angle'] = [
    202 			'label' => _x( 'Angle', 'Background Control', 'elementor' ),
    203 			'type' => Controls_Manager::SLIDER,
    204 			'size_units' => [ 'deg' ],
    205 			'default' => [
    206 				'unit' => 'deg',
    207 				'size' => 180,
    208 			],
    209 			'range' => [
    210 				'deg' => [
    211 					'step' => 10,
    212 				],
    213 			],
    214 			'selectors' => [
    215 				'{{SELECTOR}}' => 'background-color: transparent; background-image: linear-gradient({{SIZE}}{{UNIT}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})',
    216 			],
    217 			'condition' => [
    218 				'background' => [ 'gradient' ],
    219 				'gradient_type' => 'linear',
    220 			],
    221 			'of_type' => 'gradient',
    222 		];
    223 
    224 		$fields['gradient_position'] = [
    225 			'label' => _x( 'Position', 'Background Control', 'elementor' ),
    226 			'type' => Controls_Manager::SELECT,
    227 			'options' => [
    228 				'center center' => _x( 'Center Center', 'Background Control', 'elementor' ),
    229 				'center left' => _x( 'Center Left', 'Background Control', 'elementor' ),
    230 				'center right' => _x( 'Center Right', 'Background Control', 'elementor' ),
    231 				'top center' => _x( 'Top Center', 'Background Control', 'elementor' ),
    232 				'top left' => _x( 'Top Left', 'Background Control', 'elementor' ),
    233 				'top right' => _x( 'Top Right', 'Background Control', 'elementor' ),
    234 				'bottom center' => _x( 'Bottom Center', 'Background Control', 'elementor' ),
    235 				'bottom left' => _x( 'Bottom Left', 'Background Control', 'elementor' ),
    236 				'bottom right' => _x( 'Bottom Right', 'Background Control', 'elementor' ),
    237 			],
    238 			'default' => 'center center',
    239 			'selectors' => [
    240 				'{{SELECTOR}}' => 'background-color: transparent; background-image: radial-gradient(at {{VALUE}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})',
    241 			],
    242 			'condition' => [
    243 				'background' => [ 'gradient' ],
    244 				'gradient_type' => 'radial',
    245 			],
    246 			'of_type' => 'gradient',
    247 		];
    248 
    249 		$fields['image'] = [
    250 			'label' => _x( 'Image', 'Background Control', 'elementor' ),
    251 			'type' => Controls_Manager::MEDIA,
    252 			'dynamic' => [
    253 				'active' => true,
    254 			],
    255 			'responsive' => true,
    256 			'title' => _x( 'Background Image', 'Background Control', 'elementor' ),
    257 			'selectors' => [
    258 				'{{SELECTOR}}' => 'background-image: url("{{URL}}");',
    259 			],
    260 			'render_type' => 'template',
    261 			'condition' => [
    262 				'background' => [ 'classic' ],
    263 			],
    264 		];
    265 
    266 		$fields['position'] = [
    267 			'label' => _x( 'Position', 'Background Control', 'elementor' ),
    268 			'type' => Controls_Manager::SELECT,
    269 			'default' => '',
    270 			'responsive' => true,
    271 			'options' => [
    272 				'' => _x( 'Default', 'Background Control', 'elementor' ),
    273 				'center center' => _x( 'Center Center', 'Background Control', 'elementor' ),
    274 				'center left' => _x( 'Center Left', 'Background Control', 'elementor' ),
    275 				'center right' => _x( 'Center Right', 'Background Control', 'elementor' ),
    276 				'top center' => _x( 'Top Center', 'Background Control', 'elementor' ),
    277 				'top left' => _x( 'Top Left', 'Background Control', 'elementor' ),
    278 				'top right' => _x( 'Top Right', 'Background Control', 'elementor' ),
    279 				'bottom center' => _x( 'Bottom Center', 'Background Control', 'elementor' ),
    280 				'bottom left' => _x( 'Bottom Left', 'Background Control', 'elementor' ),
    281 				'bottom right' => _x( 'Bottom Right', 'Background Control', 'elementor' ),
    282 				'initial' => _x( 'Custom', 'Background Control', 'elementor' ),
    283 
    284 			],
    285 			'selectors' => [
    286 				'{{SELECTOR}}' => 'background-position: {{VALUE}};',
    287 			],
    288 			'condition' => [
    289 				'background' => [ 'classic' ],
    290 				'image[url]!' => '',
    291 			],
    292 		];
    293 
    294 		$fields['xpos'] = [
    295 			'label' => _x( 'X Position', 'Background Control', 'elementor' ),
    296 			'type' => Controls_Manager::SLIDER,
    297 			'responsive' => true,
    298 			'size_units' => [ 'px', 'em', '%', 'vw' ],
    299 			'default' => [
    300 				'unit' => 'px',
    301 				'size' => 0,
    302 			],
    303 			'tablet_default' => [
    304 				'unit' => 'px',
    305 				'size' => 0,
    306 			],
    307 			'mobile_default' => [
    308 				'unit' => 'px',
    309 				'size' => 0,
    310 			],
    311 			'range' => [
    312 				'px' => [
    313 					'min' => -800,
    314 					'max' => 800,
    315 				],
    316 				'em' => [
    317 					'min' => -100,
    318 					'max' => 100,
    319 				],
    320 				'%' => [
    321 					'min' => -100,
    322 					'max' => 100,
    323 				],
    324 				'vw' => [
    325 					'min' => -100,
    326 					'max' => 100,
    327 				],
    328 			],
    329 			'selectors' => [
    330 				'{{SELECTOR}}' => 'background-position: {{SIZE}}{{UNIT}} {{ypos.SIZE}}{{ypos.UNIT}}',
    331 			],
    332 			'condition' => [
    333 				'background' => [ 'classic' ],
    334 				'position' => [ 'initial' ],
    335 				'image[url]!' => '',
    336 			],
    337 			'required' => true,
    338 			'device_args' => [
    339 				Breakpoints_Manager::BREAKPOINT_KEY_TABLET => [
    340 					'selectors' => [
    341 						'{{SELECTOR}}' => 'background-position: {{SIZE}}{{UNIT}} {{ypos_tablet.SIZE}}{{ypos_tablet.UNIT}}',
    342 					],
    343 					'condition' => [
    344 						'background' => [ 'classic' ],
    345 						'position_tablet' => [ 'initial' ],
    346 					],
    347 				],
    348 				Breakpoints_Manager::BREAKPOINT_KEY_MOBILE => [
    349 					'selectors' => [
    350 						'{{SELECTOR}}' => 'background-position: {{SIZE}}{{UNIT}} {{ypos_mobile.SIZE}}{{ypos_mobile.UNIT}}',
    351 					],
    352 					'condition' => [
    353 						'background' => [ 'classic' ],
    354 						'position_mobile' => [ 'initial' ],
    355 					],
    356 				],
    357 			],
    358 		];
    359 
    360 		$fields['ypos'] = [
    361 			'label' => _x( 'Y Position', 'Background Control', 'elementor' ),
    362 			'type' => Controls_Manager::SLIDER,
    363 			'responsive' => true,
    364 			'size_units' => [ 'px', 'em', '%', 'vh' ],
    365 			'default' => [
    366 				'unit' => 'px',
    367 				'size' => 0,
    368 			],
    369 			'tablet_default' => [
    370 				'unit' => 'px',
    371 				'size' => 0,
    372 			],
    373 			'mobile_default' => [
    374 				'unit' => 'px',
    375 				'size' => 0,
    376 			],
    377 			'range' => [
    378 				'px' => [
    379 					'min' => -800,
    380 					'max' => 800,
    381 				],
    382 				'em' => [
    383 					'min' => -100,
    384 					'max' => 100,
    385 				],
    386 				'%' => [
    387 					'min' => -100,
    388 					'max' => 100,
    389 				],
    390 				'vh' => [
    391 					'min' => -100,
    392 					'max' => 100,
    393 				],
    394 			],
    395 			'selectors' => [
    396 				'{{SELECTOR}}' => 'background-position: {{xpos.SIZE}}{{xpos.UNIT}} {{SIZE}}{{UNIT}}',
    397 			],
    398 			'condition' => [
    399 				'background' => [ 'classic' ],
    400 				'position' => [ 'initial' ],
    401 				'image[url]!' => '',
    402 			],
    403 			'required' => true,
    404 			'device_args' => [
    405 				Breakpoints_Manager::BREAKPOINT_KEY_TABLET => [
    406 					'selectors' => [
    407 						'{{SELECTOR}}' => 'background-position: {{xpos_tablet.SIZE}}{{xpos_tablet.UNIT}} {{SIZE}}{{UNIT}}',
    408 					],
    409 					'condition' => [
    410 						'background' => [ 'classic' ],
    411 						'position_tablet' => [ 'initial' ],
    412 					],
    413 				],
    414 				Breakpoints_Manager::BREAKPOINT_KEY_MOBILE => [
    415 					'selectors' => [
    416 						'{{SELECTOR}}' => 'background-position: {{xpos_mobile.SIZE}}{{xpos_mobile.UNIT}} {{SIZE}}{{UNIT}}',
    417 					],
    418 					'condition' => [
    419 						'background' => [ 'classic' ],
    420 						'position_mobile' => [ 'initial' ],
    421 					],
    422 				],
    423 			],
    424 		];
    425 
    426 		$fields['attachment'] = [
    427 			'label' => _x( 'Attachment', 'Background Control', 'elementor' ),
    428 			'type' => Controls_Manager::SELECT,
    429 			'default' => '',
    430 			'options' => [
    431 				'' => _x( 'Default', 'Background Control', 'elementor' ),
    432 				'scroll' => _x( 'Scroll', 'Background Control', 'elementor' ),
    433 				'fixed' => _x( 'Fixed', 'Background Control', 'elementor' ),
    434 			],
    435 			'selectors' => [
    436 				'(desktop+){{SELECTOR}}' => 'background-attachment: {{VALUE}};',
    437 			],
    438 			'condition' => [
    439 				'background' => [ 'classic' ],
    440 				'image[url]!' => '',
    441 			],
    442 		];
    443 
    444 		$fields['attachment_alert'] = [
    445 			'type' => Controls_Manager::RAW_HTML,
    446 			'content_classes' => 'elementor-control-field-description',
    447 			'raw' => esc_html__( 'Note: Attachment Fixed works only on desktop.', 'elementor' ),
    448 			'separator' => 'none',
    449 			'condition' => [
    450 				'background' => [ 'classic' ],
    451 				'image[url]!' => '',
    452 				'attachment' => 'fixed',
    453 			],
    454 		];
    455 
    456 		$fields['repeat'] = [
    457 			'label' => _x( 'Repeat', 'Background Control', 'elementor' ),
    458 			'type' => Controls_Manager::SELECT,
    459 			'default' => '',
    460 			'responsive' => true,
    461 			'options' => [
    462 				'' => _x( 'Default', 'Background Control', 'elementor' ),
    463 				'no-repeat' => _x( 'No-repeat', 'Background Control', 'elementor' ),
    464 				'repeat' => _x( 'Repeat', 'Background Control', 'elementor' ),
    465 				'repeat-x' => _x( 'Repeat-x', 'Background Control', 'elementor' ),
    466 				'repeat-y' => _x( 'Repeat-y', 'Background Control', 'elementor' ),
    467 			],
    468 			'selectors' => [
    469 				'{{SELECTOR}}' => 'background-repeat: {{VALUE}};',
    470 			],
    471 			'condition' => [
    472 				'background' => [ 'classic' ],
    473 				'image[url]!' => '',
    474 			],
    475 		];
    476 
    477 		$fields['size'] = [
    478 			'label' => _x( 'Size', 'Background Control', 'elementor' ),
    479 			'type' => Controls_Manager::SELECT,
    480 			'responsive' => true,
    481 			'default' => '',
    482 			'options' => [
    483 				'' => _x( 'Default', 'Background Control', 'elementor' ),
    484 				'auto' => _x( 'Auto', 'Background Control', 'elementor' ),
    485 				'cover' => _x( 'Cover', 'Background Control', 'elementor' ),
    486 				'contain' => _x( 'Contain', 'Background Control', 'elementor' ),
    487 				'initial' => _x( 'Custom', 'Background Control', 'elementor' ),
    488 			],
    489 			'selectors' => [
    490 				'{{SELECTOR}}' => 'background-size: {{VALUE}};',
    491 			],
    492 			'condition' => [
    493 				'background' => [ 'classic' ],
    494 				'image[url]!' => '',
    495 			],
    496 		];
    497 
    498 		$fields['bg_width'] = [
    499 			'label' => _x( 'Width', 'Background Control', 'elementor' ),
    500 			'type' => Controls_Manager::SLIDER,
    501 			'responsive' => true,
    502 			'size_units' => [ 'px', 'em', '%', 'vw' ],
    503 			'range' => [
    504 				'px' => [
    505 					'min' => 0,
    506 					'max' => 1000,
    507 				],
    508 				'%' => [
    509 					'min' => 0,
    510 					'max' => 100,
    511 				],
    512 				'vw' => [
    513 					'min' => 0,
    514 					'max' => 100,
    515 				],
    516 			],
    517 			'default' => [
    518 				'size' => 100,
    519 				'unit' => '%',
    520 			],
    521 			'required' => true,
    522 			'selectors' => [
    523 				'{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto',
    524 
    525 			],
    526 			'condition' => [
    527 				'background' => [ 'classic' ],
    528 				'size' => [ 'initial' ],
    529 				'image[url]!' => '',
    530 			],
    531 			'device_args' => [
    532 				Breakpoints_Manager::BREAKPOINT_KEY_TABLET => [
    533 					'selectors' => [
    534 						'{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto',
    535 					],
    536 					'condition' => [
    537 						'background' => [ 'classic' ],
    538 						'size_tablet' => [ 'initial' ],
    539 					],
    540 				],
    541 				Breakpoints_Manager::BREAKPOINT_KEY_MOBILE => [
    542 					'selectors' => [
    543 						'{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto',
    544 					],
    545 					'condition' => [
    546 						'background' => [ 'classic' ],
    547 						'size_mobile' => [ 'initial' ],
    548 					],
    549 				],
    550 			],
    551 		];
    552 
    553 		$fields['video_link'] = [
    554 			'label' => _x( 'Video Link', 'Background Control', 'elementor' ),
    555 			'type' => Controls_Manager::TEXT,
    556 			'placeholder' => 'https://www.youtube.com/watch?v=XHOmBV4js_E',
    557 			'description' => esc_html__( 'YouTube/Vimeo link, or link to video file (mp4 is recommended).', 'elementor' ),
    558 			'label_block' => true,
    559 			'default' => '',
    560 			'dynamic' => [
    561 				'active' => true,
    562 				'categories' => [
    563 					TagsModule::POST_META_CATEGORY,
    564 					TagsModule::URL_CATEGORY,
    565 				],
    566 			],
    567 			'condition' => [
    568 				'background' => [ 'video' ],
    569 			],
    570 			'of_type' => 'video',
    571 			'frontend_available' => true,
    572 		];
    573 
    574 		$fields['video_start'] = [
    575 			'label' => esc_html__( 'Start Time', 'elementor' ),
    576 			'type' => Controls_Manager::NUMBER,
    577 			'description' => esc_html__( 'Specify a start time (in seconds)', 'elementor' ),
    578 			'placeholder' => 10,
    579 			'condition' => [
    580 				'background' => [ 'video' ],
    581 			],
    582 			'of_type' => 'video',
    583 			'frontend_available' => true,
    584 		];
    585 
    586 		$fields['video_end'] = [
    587 			'label' => esc_html__( 'End Time', 'elementor' ),
    588 			'type' => Controls_Manager::NUMBER,
    589 			'description' => esc_html__( 'Specify an end time (in seconds)', 'elementor' ),
    590 			'placeholder' => 70,
    591 			'condition' => [
    592 				'background' => [ 'video' ],
    593 			],
    594 			'of_type' => 'video',
    595 			'frontend_available' => true,
    596 		];
    597 
    598 		$fields['play_once'] = [
    599 			'label' => esc_html__( 'Play Once', 'elementor' ),
    600 			'type' => Controls_Manager::SWITCHER,
    601 			'condition' => [
    602 				'background' => [ 'video' ],
    603 			],
    604 			'of_type' => 'video',
    605 			'frontend_available' => true,
    606 		];
    607 
    608 		$fields['play_on_mobile'] = [
    609 			'label' => esc_html__( 'Play On Mobile', 'elementor' ),
    610 			'type' => Controls_Manager::SWITCHER,
    611 			'condition' => [
    612 				'background' => [ 'video' ],
    613 			],
    614 			'of_type' => 'video',
    615 			'frontend_available' => true,
    616 		];
    617 
    618 		// This control was added to handle a bug with the Youtube Embed API. The bug: If there is a video with Privacy
    619 		// Mode on, and at the same time the page contains another video WITHOUT privacy mode on, one of the videos
    620 		// will not run properly. This added control allows users to align all their videos to one host (either
    621 		// youtube.com or youtube-nocookie.com, depending on whether the user wants privacy mode on or not).
    622 		$fields['privacy_mode'] = [
    623 			'label' => esc_html__( 'Privacy mode', 'elementor' ),
    624 			'type' => Controls_Manager::SWITCHER,
    625 			'description' => esc_html__( 'Only works for YouTube videos.', 'elementor' ),
    626 			'condition' => [
    627 				'background' => [ 'video' ],
    628 			],
    629 			'of_type' => 'video',
    630 			'frontend_available' => true,
    631 		];
    632 
    633 		$fields['video_fallback'] = [
    634 			'label' => _x( 'Background Fallback', 'Background Control', 'elementor' ),
    635 			'description' => esc_html__( 'This cover image will replace the background video in case that the video could not be loaded.', 'elementor' ),
    636 			'type' => Controls_Manager::MEDIA,
    637 			'dynamic' => [
    638 				'active' => true,
    639 			],
    640 			'condition' => [
    641 				'background' => [ 'video' ],
    642 			],
    643 			'selectors' => [
    644 				'{{SELECTOR}}' => 'background: url("{{URL}}") 50% 50%; background-size: cover;',
    645 			],
    646 			'of_type' => 'video',
    647 		];
    648 
    649 		$fields['slideshow_gallery'] = [
    650 			'label' => _x( 'Images', 'Background Control', 'elementor' ),
    651 			'type' => Controls_Manager::GALLERY,
    652 			'condition' => [
    653 				'background' => [ 'slideshow' ],
    654 			],
    655 			'show_label' => false,
    656 			'of_type' => 'slideshow',
    657 			'frontend_available' => true,
    658 		];
    659 
    660 		$fields['slideshow_loop'] = [
    661 			'label' => esc_html__( 'Infinite Loop', 'elementor' ),
    662 			'type' => Controls_Manager::SWITCHER,
    663 			'default' => 'yes',
    664 			'condition' => [
    665 				'background' => [ 'slideshow' ],
    666 			],
    667 			'of_type' => 'slideshow',
    668 			'frontend_available' => true,
    669 		];
    670 
    671 		$fields['slideshow_slide_duration'] = [
    672 			'label' => esc_html__( 'Duration', 'elementor' ) . ' (ms)',
    673 			'type' => Controls_Manager::NUMBER,
    674 			'default' => 5000,
    675 			'condition' => [
    676 				'background' => [ 'slideshow' ],
    677 			],
    678 			'frontend_available' => true,
    679 		];
    680 
    681 		$fields['slideshow_slide_transition'] = [
    682 			'label' => esc_html__( 'Transition', 'elementor' ),
    683 			'type' => Controls_Manager::SELECT,
    684 			'default' => 'fade',
    685 			'options' => [
    686 				'fade' => 'Fade',
    687 				'slide_right' => 'Slide Right',
    688 				'slide_left' => 'Slide Left',
    689 				'slide_up' => 'Slide Up',
    690 				'slide_down' => 'Slide Down',
    691 			],
    692 			'condition' => [
    693 				'background' => [ 'slideshow' ],
    694 			],
    695 			'of_type' => 'slideshow',
    696 			'frontend_available' => true,
    697 		];
    698 
    699 		$fields['slideshow_transition_duration'] = [
    700 			'label' => esc_html__( 'Transition Duration', 'elementor' ) . ' (ms)',
    701 			'type' => Controls_Manager::NUMBER,
    702 			'default' => 500,
    703 			'condition' => [
    704 				'background' => [ 'slideshow' ],
    705 			],
    706 			'frontend_available' => true,
    707 		];
    708 
    709 		$fields['slideshow_background_size'] = [
    710 			'label' => esc_html__( 'Background Size', 'elementor' ),
    711 			'type' => Controls_Manager::SELECT,
    712 			'responsive' => true,
    713 			'default' => '',
    714 			'options' => [
    715 				'' => esc_html__( 'Default', 'elementor' ),
    716 				'auto' => esc_html__( 'Auto', 'elementor' ),
    717 				'cover' => esc_html__( 'Cover', 'elementor' ),
    718 				'contain' => esc_html__( 'Contain', 'elementor' ),
    719 			],
    720 			'selectors' => [
    721 				'{{WRAPPER}} .elementor-background-slideshow__slide__image' => 'background-size: {{VALUE}};',
    722 			],
    723 			'condition' => [
    724 				'background' => [ 'slideshow' ],
    725 			],
    726 		];
    727 
    728 		$fields['slideshow_background_position'] = [
    729 			'label' => esc_html__( 'Background Position', 'elementor' ),
    730 			'type' => Controls_Manager::SELECT,
    731 			'default' => '',
    732 			'responsive' => true,
    733 			'options' => [
    734 				'' => esc_html__( 'Default', 'elementor' ),
    735 				'center center' => _x( 'Center Center', 'Background Control', 'elementor' ),
    736 				'center left' => _x( 'Center Left', 'Background Control', 'elementor' ),
    737 				'center right' => _x( 'Center Right', 'Background Control', 'elementor' ),
    738 				'top center' => _x( 'Top Center', 'Background Control', 'elementor' ),
    739 				'top left' => _x( 'Top Left', 'Background Control', 'elementor' ),
    740 				'top right' => _x( 'Top Right', 'Background Control', 'elementor' ),
    741 				'bottom center' => _x( 'Bottom Center', 'Background Control', 'elementor' ),
    742 				'bottom left' => _x( 'Bottom Left', 'Background Control', 'elementor' ),
    743 				'bottom right' => _x( 'Bottom Right', 'Background Control', 'elementor' ),
    744 			],
    745 			'selectors' => [
    746 				'{{WRAPPER}} .elementor-background-slideshow__slide__image' => 'background-position: {{VALUE}};',
    747 			],
    748 			'condition' => [
    749 				'background' => [ 'slideshow' ],
    750 			],
    751 		];
    752 
    753 		$fields['slideshow_ken_burns'] = [
    754 			'label' => esc_html__( 'Ken Burns Effect', 'elementor' ),
    755 			'type' => Controls_Manager::SWITCHER,
    756 			'separator' => 'before',
    757 			'condition' => [
    758 				'background' => [ 'slideshow' ],
    759 			],
    760 			'of_type' => 'slideshow',
    761 			'frontend_available' => true,
    762 		];
    763 
    764 		$fields['slideshow_ken_burns_zoom_direction'] = [
    765 			'label' => esc_html__( 'Direction', 'elementor' ),
    766 			'type' => Controls_Manager::SELECT,
    767 			'default' => 'in',
    768 			'options' => [
    769 				'in' => esc_html__( 'In', 'elementor' ),
    770 				'out' => esc_html__( 'Out', 'elementor' ),
    771 			],
    772 			'condition' => [
    773 				'background' => [ 'slideshow' ],
    774 				'slideshow_ken_burns!' => '',
    775 			],
    776 			'of_type' => 'slideshow',
    777 			'frontend_available' => true,
    778 		];
    779 
    780 		return $fields;
    781 	}
    782 
    783 	/**
    784 	 * Get child default args.
    785 	 *
    786 	 * Retrieve the default arguments for all the child controls for a specific group
    787 	 * control.
    788 	 *
    789 	 * @since 1.2.2
    790 	 * @access protected
    791 	 *
    792 	 * @return array Default arguments for all the child controls.
    793 	 */
    794 	protected function get_child_default_args() {
    795 		return [
    796 			'types' => [ 'classic', 'gradient' ],
    797 			'selector' => '{{WRAPPER}}:not(.elementor-motion-effects-element-type-background), {{WRAPPER}} > .elementor-motion-effects-container > .elementor-motion-effects-layer',
    798 		];
    799 	}
    800 
    801 	/**
    802 	 * Filter fields.
    803 	 *
    804 	 * Filter which controls to display, using `include`, `exclude`, `condition`
    805 	 * and `of_type` arguments.
    806 	 *
    807 	 * @since 1.2.2
    808 	 * @access protected
    809 	 *
    810 	 * @return array Control fields.
    811 	 */
    812 	protected function filter_fields() {
    813 		$fields = parent::filter_fields();
    814 
    815 		$args = $this->get_args();
    816 
    817 		foreach ( $fields as &$field ) {
    818 			if ( isset( $field['of_type'] ) && ! in_array( $field['of_type'], $args['types'] ) ) {
    819 				unset( $field );
    820 			}
    821 		}
    822 
    823 		return $fields;
    824 	}
    825 
    826 	/**
    827 	 * Prepare fields.
    828 	 *
    829 	 * Process background control fields before adding them to `add_control()`.
    830 	 *
    831 	 * @since 1.2.2
    832 	 * @access protected
    833 	 *
    834 	 * @param array $fields Background control fields.
    835 	 *
    836 	 * @return array Processed fields.
    837 	 */
    838 	protected function prepare_fields( $fields ) {
    839 		$args = $this->get_args();
    840 
    841 		$background_types = self::get_background_types();
    842 
    843 		$choose_types = [];
    844 
    845 		foreach ( $args['types'] as $type ) {
    846 			if ( isset( $background_types[ $type ] ) ) {
    847 				$choose_types[ $type ] = $background_types[ $type ];
    848 			}
    849 		}
    850 
    851 		$fields['background']['options'] = $choose_types;
    852 
    853 		return parent::prepare_fields( $fields );
    854 	}
    855 
    856 	/**
    857 	 * Get default options.
    858 	 *
    859 	 * Retrieve the default options of the background control. Used to return the
    860 	 * default options while initializing the background control.
    861 	 *
    862 	 * @since 1.9.0
    863 	 * @access protected
    864 	 *
    865 	 * @return array Default background control options.
    866 	 */
    867 	protected function get_default_options() {
    868 		return [
    869 			'popover' => false,
    870 		];
    871 	}
    872 }