Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../includes/elements
File: container.php
<?php
[0] Fix | Delete
namespace Elementor\Includes\Elements;
[1] Fix | Delete
[2] Fix | Delete
use Elementor\Controls_Manager;
[3] Fix | Delete
use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager;
[4] Fix | Delete
use Elementor\Element_Base;
[5] Fix | Delete
use Elementor\Embed;
[6] Fix | Delete
use Elementor\Group_Control_Background;
[7] Fix | Delete
use Elementor\Group_Control_Border;
[8] Fix | Delete
use Elementor\Group_Control_Box_Shadow;
[9] Fix | Delete
use Elementor\Group_Control_Css_Filter;
[10] Fix | Delete
use Elementor\Group_Control_Flex_Container;
[11] Fix | Delete
use Elementor\Group_Control_Flex_Item;
[12] Fix | Delete
use Elementor\Group_Control_Grid_Container;
[13] Fix | Delete
use Elementor\Plugin;
[14] Fix | Delete
use Elementor\Shapes;
[15] Fix | Delete
use Elementor\Utils;
[16] Fix | Delete
[17] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[18] Fix | Delete
exit; // Exit if accessed directly.
[19] Fix | Delete
}
[20] Fix | Delete
[21] Fix | Delete
class Container extends Element_Base {
[22] Fix | Delete
[23] Fix | Delete
/**
[24] Fix | Delete
* @var \Elementor\Core\Kits\Documents\Kit
[25] Fix | Delete
*/
[26] Fix | Delete
private $active_kit;
[27] Fix | Delete
[28] Fix | Delete
protected function is_dynamic_content(): bool {
[29] Fix | Delete
return false;
[30] Fix | Delete
}
[31] Fix | Delete
[32] Fix | Delete
/**
[33] Fix | Delete
* Container constructor.
[34] Fix | Delete
*
[35] Fix | Delete
* @param array $data
[36] Fix | Delete
* @param array|null $args
[37] Fix | Delete
*
[38] Fix | Delete
* @return void
[39] Fix | Delete
*/
[40] Fix | Delete
public function __construct( array $data = [], array $args = null ) {
[41] Fix | Delete
parent::__construct( $data, $args );
[42] Fix | Delete
[43] Fix | Delete
$this->active_kit = Plugin::$instance->kits_manager->get_active_kit();
[44] Fix | Delete
}
[45] Fix | Delete
[46] Fix | Delete
/**
[47] Fix | Delete
* Get the element type.
[48] Fix | Delete
*
[49] Fix | Delete
* @return string
[50] Fix | Delete
*/
[51] Fix | Delete
public static function get_type() {
[52] Fix | Delete
return 'container';
[53] Fix | Delete
}
[54] Fix | Delete
[55] Fix | Delete
/**
[56] Fix | Delete
* Get the element name.
[57] Fix | Delete
*
[58] Fix | Delete
* @return string
[59] Fix | Delete
*/
[60] Fix | Delete
public function get_name() {
[61] Fix | Delete
return 'container';
[62] Fix | Delete
}
[63] Fix | Delete
[64] Fix | Delete
/**
[65] Fix | Delete
* Get the element display name.
[66] Fix | Delete
*
[67] Fix | Delete
* @return string
[68] Fix | Delete
*/
[69] Fix | Delete
public function get_title() {
[70] Fix | Delete
return esc_html__( 'Container', 'elementor' );
[71] Fix | Delete
}
[72] Fix | Delete
[73] Fix | Delete
/**
[74] Fix | Delete
* Get the element display icon.
[75] Fix | Delete
*
[76] Fix | Delete
* @return string
[77] Fix | Delete
*/
[78] Fix | Delete
public function get_icon() {
[79] Fix | Delete
return 'eicon-container';
[80] Fix | Delete
}
[81] Fix | Delete
[82] Fix | Delete
public function get_keywords() {
[83] Fix | Delete
return [ 'Container', 'Flex', 'Flexbox', 'Flexbox Container', 'Grid', 'Grid Container', 'CSS Grid', 'Layout' ];
[84] Fix | Delete
}
[85] Fix | Delete
[86] Fix | Delete
public function get_panel_presets() {
[87] Fix | Delete
return [
[88] Fix | Delete
'container_grid' => [
[89] Fix | Delete
'replacements' => [
[90] Fix | Delete
'name' => 'container_grid',
[91] Fix | Delete
'controls' => [
[92] Fix | Delete
'container_type' => [ 'default' => 'grid' ],
[93] Fix | Delete
],
[94] Fix | Delete
'title' => esc_html__( 'Grid', 'elementor' ),
[95] Fix | Delete
'icon' => 'eicon-container-grid',
[96] Fix | Delete
'custom' => [
[97] Fix | Delete
'isPreset' => true,
[98] Fix | Delete
'originalWidget' => $this->get_name(),
[99] Fix | Delete
'presetWidget' => 'container_grid',
[100] Fix | Delete
'preset_settings' => [
[101] Fix | Delete
'container_type' => 'grid',
[102] Fix | Delete
'presetTitle' => esc_html__( 'Grid', 'elementor' ),
[103] Fix | Delete
'presetIcon' => 'eicon-container-grid',
[104] Fix | Delete
],
[105] Fix | Delete
],
[106] Fix | Delete
],
[107] Fix | Delete
],
[108] Fix | Delete
];
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
/**
[112] Fix | Delete
* Override the render attributes to add a custom wrapper class.
[113] Fix | Delete
*
[114] Fix | Delete
* @return void
[115] Fix | Delete
*/
[116] Fix | Delete
protected function add_render_attributes() {
[117] Fix | Delete
parent::add_render_attributes();
[118] Fix | Delete
[119] Fix | Delete
$is_nested_class_name = $this->get_data( 'isInner' ) ? 'e-child' : 'e-parent';
[120] Fix | Delete
[121] Fix | Delete
$this->add_render_attribute( '_wrapper', [
[122] Fix | Delete
'class' => [
[123] Fix | Delete
'e-con',
[124] Fix | Delete
$is_nested_class_name,
[125] Fix | Delete
],
[126] Fix | Delete
] );
[127] Fix | Delete
}
[128] Fix | Delete
[129] Fix | Delete
/**
[130] Fix | Delete
* Override the initial element config to display the Container in the panel.
[131] Fix | Delete
*
[132] Fix | Delete
* @return array
[133] Fix | Delete
*/
[134] Fix | Delete
protected function get_initial_config() {
[135] Fix | Delete
$config = parent::get_initial_config();
[136] Fix | Delete
[137] Fix | Delete
$config['controls'] = $this->get_controls();
[138] Fix | Delete
$config['tabs_controls'] = $this->get_tabs_controls();
[139] Fix | Delete
$config['show_in_panel'] = true;
[140] Fix | Delete
$config['categories'] = [ 'layout' ];
[141] Fix | Delete
[142] Fix | Delete
return $config;
[143] Fix | Delete
}
[144] Fix | Delete
[145] Fix | Delete
/**
[146] Fix | Delete
* Render the element JS template.
[147] Fix | Delete
*
[148] Fix | Delete
* @return void
[149] Fix | Delete
*/
[150] Fix | Delete
protected function content_template() {
[151] Fix | Delete
?>
[152] Fix | Delete
<# if ( 'boxed' === settings.content_width ) { #>
[153] Fix | Delete
<div class="e-con-inner">
[154] Fix | Delete
<#
[155] Fix | Delete
}
[156] Fix | Delete
if ( settings.background_video_link ) {
[157] Fix | Delete
let videoAttributes = 'autoplay muted playsinline';
[158] Fix | Delete
[159] Fix | Delete
if ( ! settings.background_play_once ) {
[160] Fix | Delete
videoAttributes += ' loop';
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
view.addRenderAttribute(
[164] Fix | Delete
'background-video-container',
[165] Fix | Delete
{
[166] Fix | Delete
'class': 'elementor-background-video-container',
[167] Fix | Delete
'aria-hidden': 'true',
[168] Fix | Delete
}
[169] Fix | Delete
);
[170] Fix | Delete
[171] Fix | Delete
if ( ! settings.background_play_on_mobile ) {
[172] Fix | Delete
view.addRenderAttribute( 'background-video-container', 'class', 'elementor-hidden-mobile' );
[173] Fix | Delete
}
[174] Fix | Delete
#>
[175] Fix | Delete
<div {{{ view.getRenderAttributeString( 'background-video-container' ) }}}>
[176] Fix | Delete
<div class="elementor-background-video-embed"></div>
[177] Fix | Delete
<video class="elementor-background-video-hosted" {{ videoAttributes }}></video>
[178] Fix | Delete
</div>
[179] Fix | Delete
<# } #>
[180] Fix | Delete
<div class="elementor-shape elementor-shape-top" aria-hidden="true"></div>
[181] Fix | Delete
<div class="elementor-shape elementor-shape-bottom" aria-hidden="true"></div>
[182] Fix | Delete
<# if ( 'boxed' === settings.content_width ) { #>
[183] Fix | Delete
</div>
[184] Fix | Delete
<# } #>
[185] Fix | Delete
<?php
[186] Fix | Delete
}
[187] Fix | Delete
[188] Fix | Delete
/**
[189] Fix | Delete
* Render the video background markup.
[190] Fix | Delete
*
[191] Fix | Delete
* @return void
[192] Fix | Delete
*/
[193] Fix | Delete
protected function render_video_background() {
[194] Fix | Delete
$settings = $this->get_settings_for_display();
[195] Fix | Delete
[196] Fix | Delete
if ( 'video' !== $settings['background_background'] ) {
[197] Fix | Delete
return;
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
if ( ! $settings['background_video_link'] ) {
[201] Fix | Delete
return;
[202] Fix | Delete
}
[203] Fix | Delete
[204] Fix | Delete
$video_properties = Embed::get_video_properties( $settings['background_video_link'] );
[205] Fix | Delete
[206] Fix | Delete
$this->add_render_attribute(
[207] Fix | Delete
'background-video-container',
[208] Fix | Delete
[
[209] Fix | Delete
'class' => 'elementor-background-video-container',
[210] Fix | Delete
'aria-hidden' => 'true',
[211] Fix | Delete
]
[212] Fix | Delete
);
[213] Fix | Delete
[214] Fix | Delete
if ( ! $settings['background_play_on_mobile'] ) {
[215] Fix | Delete
$this->add_render_attribute( 'background-video-container', 'class', 'elementor-hidden-mobile' );
[216] Fix | Delete
}
[217] Fix | Delete
[218] Fix | Delete
?><div <?php $this->print_render_attribute_string( 'background-video-container' ); ?>>
[219] Fix | Delete
<?php if ( $video_properties ) : ?>
[220] Fix | Delete
<div class="elementor-background-video-embed"></div>
[221] Fix | Delete
<?php
[222] Fix | Delete
else :
[223] Fix | Delete
$video_tag_attributes = 'autoplay muted playsinline';
[224] Fix | Delete
[225] Fix | Delete
if ( 'yes' !== $settings['background_play_once'] ) {
[226] Fix | Delete
$video_tag_attributes .= ' loop';
[227] Fix | Delete
}
[228] Fix | Delete
?>
[229] Fix | Delete
<video class="elementor-background-video-hosted" <?php echo esc_attr( $video_tag_attributes ); ?>></video>
[230] Fix | Delete
<?php endif; ?>
[231] Fix | Delete
</div><?php
[232] Fix | Delete
}
[233] Fix | Delete
[234] Fix | Delete
/**
[235] Fix | Delete
* Render the Container's shape divider.
[236] Fix | Delete
* TODO: Copied from `section.php`.
[237] Fix | Delete
*
[238] Fix | Delete
* Used to generate the shape dividers HTML.
[239] Fix | Delete
*
[240] Fix | Delete
* @param string $side - Shape divider side, used to set the shape key.
[241] Fix | Delete
*
[242] Fix | Delete
* @return void
[243] Fix | Delete
*/
[244] Fix | Delete
protected function render_shape_divider( $side ) {
[245] Fix | Delete
$settings = $this->get_active_settings();
[246] Fix | Delete
$base_setting_key = "shape_divider_$side";
[247] Fix | Delete
$negative = ! empty( $settings[ $base_setting_key . '_negative' ] );
[248] Fix | Delete
$shape_path = Shapes::get_shape_path( $settings[ $base_setting_key ], $negative );
[249] Fix | Delete
[250] Fix | Delete
if ( ! is_file( $shape_path ) || ! is_readable( $shape_path ) ) {
[251] Fix | Delete
return;
[252] Fix | Delete
}
[253] Fix | Delete
?>
[254] Fix | Delete
<div class="elementor-shape elementor-shape-<?php echo esc_attr( $side ); ?>" aria-hidden="true" data-negative="<?php
[255] Fix | Delete
Utils::print_unescaped_internal_string( $negative ? 'true' : 'false' );
[256] Fix | Delete
?>">
[257] Fix | Delete
<?php
[258] Fix | Delete
// PHPCS - The file content is being read from a strict file path structure.
[259] Fix | Delete
echo Utils::file_get_contents( $shape_path ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[260] Fix | Delete
?>
[261] Fix | Delete
</div>
[262] Fix | Delete
<?php
[263] Fix | Delete
}
[264] Fix | Delete
[265] Fix | Delete
/**
[266] Fix | Delete
* Print safe HTML tag for the element based on the element settings.
[267] Fix | Delete
*
[268] Fix | Delete
* @return void
[269] Fix | Delete
*/
[270] Fix | Delete
protected function print_html_tag() {
[271] Fix | Delete
$html_tag = $this->get_settings( 'html_tag' );
[272] Fix | Delete
[273] Fix | Delete
if ( empty( $html_tag ) ) {
[274] Fix | Delete
$html_tag = 'div';
[275] Fix | Delete
}
[276] Fix | Delete
[277] Fix | Delete
Utils::print_validated_html_tag( $html_tag );
[278] Fix | Delete
}
[279] Fix | Delete
[280] Fix | Delete
/**
[281] Fix | Delete
* Before rendering the container content. (Print the opening tag, etc.)
[282] Fix | Delete
*
[283] Fix | Delete
* @return void
[284] Fix | Delete
*/
[285] Fix | Delete
public function before_render() {
[286] Fix | Delete
$settings = $this->get_settings_for_display();
[287] Fix | Delete
$link = $settings['link'];
[288] Fix | Delete
[289] Fix | Delete
if ( ! empty( $link['url'] ) ) {
[290] Fix | Delete
$this->add_link_attributes( '_wrapper', $link );
[291] Fix | Delete
}
[292] Fix | Delete
[293] Fix | Delete
?><<?php $this->print_html_tag(); ?> <?php $this->print_render_attribute_string( '_wrapper' ); ?>>
[294] Fix | Delete
<?php
[295] Fix | Delete
if ( $this->is_boxed_container( $settings ) ) { ?>
[296] Fix | Delete
<div class="e-con-inner">
[297] Fix | Delete
<?php }
[298] Fix | Delete
[299] Fix | Delete
$this->render_video_background();
[300] Fix | Delete
[301] Fix | Delete
if ( ! empty( $settings['shape_divider_top'] ) ) {
[302] Fix | Delete
$this->render_shape_divider( 'top' );
[303] Fix | Delete
}
[304] Fix | Delete
[305] Fix | Delete
if ( ! empty( $settings['shape_divider_bottom'] ) ) {
[306] Fix | Delete
$this->render_shape_divider( 'bottom' );
[307] Fix | Delete
}
[308] Fix | Delete
}
[309] Fix | Delete
[310] Fix | Delete
/**
[311] Fix | Delete
* After rendering the Container content. (Print the closing tag, etc.)
[312] Fix | Delete
*
[313] Fix | Delete
* @return void
[314] Fix | Delete
*/
[315] Fix | Delete
public function after_render() {
[316] Fix | Delete
$settings = $this->get_settings_for_display();
[317] Fix | Delete
if ( $this->is_boxed_container( $settings ) ) { ?>
[318] Fix | Delete
</div>
[319] Fix | Delete
<?php } ?>
[320] Fix | Delete
</<?php $this->print_html_tag(); ?>>
[321] Fix | Delete
<?php
[322] Fix | Delete
}
[323] Fix | Delete
[324] Fix | Delete
protected function is_boxed_container( array $settings ) {
[325] Fix | Delete
return ! empty( $settings['content_width'] ) && 'boxed' === $settings['content_width'];
[326] Fix | Delete
}
[327] Fix | Delete
[328] Fix | Delete
/**
[329] Fix | Delete
* Override the default child type to allow widgets & containers as children.
[330] Fix | Delete
*
[331] Fix | Delete
* @param array $element_data
[332] Fix | Delete
*
[333] Fix | Delete
* @return \Elementor\Element_Base|\Elementor\Widget_Base|null
[334] Fix | Delete
*/
[335] Fix | Delete
protected function _get_default_child_type( array $element_data ) {
[336] Fix | Delete
$el_types = array_keys( Plugin::$instance->elements_manager->get_element_types() );
[337] Fix | Delete
[338] Fix | Delete
if ( in_array( $element_data['elType'], $el_types, true ) ) {
[339] Fix | Delete
return Plugin::$instance->elements_manager->get_element_types( $element_data['elType'] );
[340] Fix | Delete
}
[341] Fix | Delete
[342] Fix | Delete
return Plugin::$instance->widgets_manager->get_widget_types( $element_data['widgetType'] );
[343] Fix | Delete
}
[344] Fix | Delete
[345] Fix | Delete
/**
[346] Fix | Delete
* Register the Container's layout controls.
[347] Fix | Delete
*
[348] Fix | Delete
* @return void
[349] Fix | Delete
*/
[350] Fix | Delete
protected function register_container_layout_controls() {
[351] Fix | Delete
$this->start_controls_section(
[352] Fix | Delete
'section_layout_container',
[353] Fix | Delete
[
[354] Fix | Delete
'label' => esc_html__( 'Container', 'elementor' ),
[355] Fix | Delete
'tab' => Controls_Manager::TAB_LAYOUT,
[356] Fix | Delete
]
[357] Fix | Delete
);
[358] Fix | Delete
[359] Fix | Delete
$active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints();
[360] Fix | Delete
[361] Fix | Delete
if ( array_key_exists( Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA, $active_breakpoints ) ) {
[362] Fix | Delete
$min_affected_device = Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA;
[363] Fix | Delete
} else {
[364] Fix | Delete
$min_affected_device = Breakpoints_Manager::BREAKPOINT_KEY_TABLET;
[365] Fix | Delete
}
[366] Fix | Delete
[367] Fix | Delete
$this->add_control(
[368] Fix | Delete
'container_type',
[369] Fix | Delete
[
[370] Fix | Delete
'label' => esc_html__( 'Container Layout', 'elementor' ),
[371] Fix | Delete
'type' => Controls_Manager::SELECT,
[372] Fix | Delete
'default' => 'flex',
[373] Fix | Delete
'prefix_class' => 'e-',
[374] Fix | Delete
'options' => [
[375] Fix | Delete
'flex' => esc_html__( 'Flexbox', 'elementor' ),
[376] Fix | Delete
'grid' => esc_html__( 'Grid', 'elementor' ),
[377] Fix | Delete
],
[378] Fix | Delete
'selectors' => [
[379] Fix | Delete
'{{WRAPPER}}' => '--display: {{VALUE}}',
[380] Fix | Delete
],
[381] Fix | Delete
'separator' => 'after',
[382] Fix | Delete
'editor_available' => true,
[383] Fix | Delete
]
[384] Fix | Delete
);
[385] Fix | Delete
[386] Fix | Delete
$this->add_control(
[387] Fix | Delete
'content_width',
[388] Fix | Delete
[
[389] Fix | Delete
'label' => esc_html__( 'Content Width', 'elementor' ),
[390] Fix | Delete
'type' => Controls_Manager::SELECT,
[391] Fix | Delete
'default' => 'boxed',
[392] Fix | Delete
'options' => [
[393] Fix | Delete
'boxed' => esc_html__( 'Boxed', 'elementor' ),
[394] Fix | Delete
'full' => esc_html__( 'Full Width', 'elementor' ),
[395] Fix | Delete
],
[396] Fix | Delete
'render_type' => 'template',
[397] Fix | Delete
'prefix_class' => 'e-con-',
[398] Fix | Delete
'editor_available' => true,
[399] Fix | Delete
]
[400] Fix | Delete
);
[401] Fix | Delete
[402] Fix | Delete
$width_control_settings = [
[403] Fix | Delete
'label' => esc_html__( 'Width', 'elementor' ),
[404] Fix | Delete
'type' => Controls_Manager::SLIDER,
[405] Fix | Delete
'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ],
[406] Fix | Delete
'range' => [
[407] Fix | Delete
'px' => [
[408] Fix | Delete
'min' => 500,
[409] Fix | Delete
'max' => 1600,
[410] Fix | Delete
],
[411] Fix | Delete
],
[412] Fix | Delete
'default' => [
[413] Fix | Delete
'unit' => '%',
[414] Fix | Delete
],
[415] Fix | Delete
'min_affected_device' => [
[416] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP => $min_affected_device,
[417] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_LAPTOP => $min_affected_device,
[418] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_TABLET_EXTRA => $min_affected_device,
[419] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_TABLET => $min_affected_device,
[420] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_MOBILE_EXTRA => $min_affected_device,
[421] Fix | Delete
],
[422] Fix | Delete
];
[423] Fix | Delete
[424] Fix | Delete
$this->add_responsive_control(
[425] Fix | Delete
'width',
[426] Fix | Delete
array_merge( $width_control_settings, [
[427] Fix | Delete
'selectors' => [
[428] Fix | Delete
'{{WRAPPER}}' => '--width: {{SIZE}}{{UNIT}};',
[429] Fix | Delete
],
[430] Fix | Delete
'condition' => [
[431] Fix | Delete
'content_width' => 'full',
[432] Fix | Delete
],
[433] Fix | Delete
'device_args' => [
[434] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP => [
[435] Fix | Delete
'placeholder' => [
[436] Fix | Delete
'size' => 100,
[437] Fix | Delete
'unit' => '%',
[438] Fix | Delete
],
[439] Fix | Delete
],
[440] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_MOBILE => [
[441] Fix | Delete
// The mobile width is not inherited from the higher breakpoint width controls.
[442] Fix | Delete
'placeholder' => [
[443] Fix | Delete
'size' => 100,
[444] Fix | Delete
'unit' => '%',
[445] Fix | Delete
],
[446] Fix | Delete
],
[447] Fix | Delete
],
[448] Fix | Delete
] )
[449] Fix | Delete
);
[450] Fix | Delete
[451] Fix | Delete
$this->add_responsive_control(
[452] Fix | Delete
'boxed_width',
[453] Fix | Delete
array_merge( $width_control_settings, [
[454] Fix | Delete
'selectors' => [
[455] Fix | Delete
'{{WRAPPER}}' => '--content-width: {{SIZE}}{{UNIT}};',
[456] Fix | Delete
],
[457] Fix | Delete
'condition' => [
[458] Fix | Delete
'content_width' => 'boxed',
[459] Fix | Delete
],
[460] Fix | Delete
'default' => [
[461] Fix | Delete
'unit' => 'px',
[462] Fix | Delete
],
[463] Fix | Delete
'device_args' => [
[464] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP => [
[465] Fix | Delete
// Use the default width from the kit as a placeholder.
[466] Fix | Delete
'placeholder' => $this->active_kit->get_settings_for_display( 'container_width' ),
[467] Fix | Delete
],
[468] Fix | Delete
Breakpoints_Manager::BREAKPOINT_KEY_MOBILE => [
[469] Fix | Delete
// The mobile width is not inherited from the higher breakpoint width controls.
[470] Fix | Delete
'placeholder' => [
[471] Fix | Delete
'size' => 100,
[472] Fix | Delete
'unit' => '%',
[473] Fix | Delete
],
[474] Fix | Delete
],
[475] Fix | Delete
],
[476] Fix | Delete
] )
[477] Fix | Delete
);
[478] Fix | Delete
[479] Fix | Delete
$this->add_responsive_control(
[480] Fix | Delete
'min_height',
[481] Fix | Delete
[
[482] Fix | Delete
'label' => esc_html__( 'Min Height', 'elementor' ),
[483] Fix | Delete
'type' => Controls_Manager::SLIDER,
[484] Fix | Delete
'size_units' => [ 'px', 'em', 'rem', 'vh', 'custom' ],
[485] Fix | Delete
'range' => [
[486] Fix | Delete
'px' => [
[487] Fix | Delete
'max' => 1440,
[488] Fix | Delete
],
[489] Fix | Delete
],
[490] Fix | Delete
'description' => sprintf(
[491] Fix | Delete
esc_html__( 'To achieve full height Container use %s.', 'elementor' ),
[492] Fix | Delete
'100vh'
[493] Fix | Delete
),
[494] Fix | Delete
'selectors' => [
[495] Fix | Delete
'{{WRAPPER}}' => '--min-height: {{SIZE}}{{UNIT}};',
[496] Fix | Delete
],
[497] Fix | Delete
]
[498] Fix | Delete
);
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function