PK "Ð\ÎËúËÒ Ò repeater.phpnuW+A„¶get_current_tab(); if ( null !== $current_tab ) { $args = array_merge( $args, $current_tab ); } return Plugin::$instance->controls_manager->add_control_to_stack( $this, $id, $args, $options ); } /** * Get repeater fields. * * Retrieve the fields from the current repeater control. * * @since 1.5.0 * @deprecated 2.1.0 Use `Repeater::get_controls()` instead. * @access public * * @return array Repeater fields. */ public function get_fields() { _deprecated_function( __METHOD__, '2.1.0', __CLASS__ . '::get_controls()' ); return array_values( $this->get_controls() ); } /** * Get default child type. * * Retrieve the repeater child type based on element data. * * Note that repeater does not support children, therefore it returns false. * * @since 1.0.0 * @access protected * * @param array $element_data Element ID. * * @return false Repeater default child type or False if type not found. */ protected function _get_default_child_type( array $element_data ) { return false; } } PK "Ð\òMævàbàb column.phpnuW+A„¶get_controls(); $config['tabs_controls'] = $this->get_tabs_controls(); return $config; } /** * Register column controls. * * Used to add new controls to the column element. * * @since 1.0.0 * @access protected */ protected function _register_controls() { // Section Layout. $this->start_controls_section( 'layout', [ 'label' => __( 'Layout', 'elementor' ), 'tab' => Controls_Manager::TAB_LAYOUT, ] ); // Element Name for the Navigator $this->add_control( '_title', [ 'label' => __( 'Title', 'elementor' ), 'type' => Controls_Manager::HIDDEN, 'render_type' => 'none', ] ); $this->add_responsive_control( '_inline_size', [ 'label' => __( 'Column Width', 'elementor' ) . ' (%)', 'type' => Controls_Manager::NUMBER, 'min' => 2, 'max' => 98, 'required' => true, 'device_args' => [ Controls_Stack::RESPONSIVE_TABLET => [ 'max' => 100, 'required' => false, ], Controls_Stack::RESPONSIVE_MOBILE => [ 'max' => 100, 'required' => false, ], ], 'min_affected_device' => [ Controls_Stack::RESPONSIVE_DESKTOP => Controls_Stack::RESPONSIVE_TABLET, Controls_Stack::RESPONSIVE_TABLET => Controls_Stack::RESPONSIVE_TABLET, ], 'selectors' => [ '{{WRAPPER}}' => 'width: {{VALUE}}%', ], ] ); $this->add_responsive_control( 'content_position', [ 'label' => __( 'Vertical Align', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => __( 'Default', 'elementor' ), 'top' => __( 'Top', 'elementor' ), 'center' => __( 'Middle', 'elementor' ), 'bottom' => __( 'Bottom', 'elementor' ), 'space-between' => __( 'Space Between', 'elementor' ), 'space-around' => __( 'Space Around', 'elementor' ), 'space-evenly' => __( 'Space Evenly', 'elementor' ), ], 'selectors_dictionary' => [ 'top' => 'flex-start', 'bottom' => 'flex-end', ], 'selectors' => [ // TODO: The following line is for BC since 2.7.0 '.elementor-bc-flex-widget {{WRAPPER}}.elementor-column .elementor-column-wrap' => 'align-items: {{VALUE}}', // This specificity is intended to make sure column css overwrites section css on vertical alignment (content_position) '{{WRAPPER}}.elementor-column.elementor-element[data-element_type="column"] > .elementor-column-wrap.elementor-element-populated > .elementor-widget-wrap' => 'align-content: {{VALUE}}; align-items: {{VALUE}};', ], ] ); $this->add_responsive_control( 'align', [ 'label' => __( 'Horizontal Align', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => __( 'Default', 'elementor' ), 'flex-start' => __( 'Start', 'elementor' ), 'center' => __( 'Center', 'elementor' ), 'flex-end' => __( 'End', 'elementor' ), 'space-between' => __( 'Space Between', 'elementor' ), 'space-around' => __( 'Space Around', 'elementor' ), 'space-evenly' => __( 'Space Evenly', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}}.elementor-column > .elementor-column-wrap > .elementor-widget-wrap' => 'justify-content: {{VALUE}}', ], ] ); $this->add_responsive_control( 'space_between_widgets', [ 'label' => __( 'Widgets Space', 'elementor' ) . ' (px)', 'type' => Controls_Manager::NUMBER, 'placeholder' => 20, 'selectors' => [ '{{WRAPPER}} > .elementor-column-wrap > .elementor-widget-wrap > .elementor-widget:not(.elementor-widget__width-auto):not(.elementor-widget__width-initial):not(:last-child):not(.elementor-absolute)' => 'margin-bottom: {{VALUE}}px', //Need the full path for exclude the inner section ], ] ); $possible_tags = [ 'div', 'header', 'footer', 'main', 'article', 'section', 'aside', 'nav', ]; $options = [ '' => __( 'Default', 'elementor' ), ] + array_combine( $possible_tags, $possible_tags ); $this->add_control( 'html_tag', [ 'label' => __( 'HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => $options, 'render_type' => 'none', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_style', [ 'label' => __( 'Background', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'tabs_background' ); $this->start_controls_tab( 'tab_background_normal', [ 'label' => __( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background', 'types' => [ 'classic', 'gradient', 'slideshow' ], 'selector' => '{{WRAPPER}}:not(.elementor-motion-effects-element-type-background) > .elementor-column-wrap, {{WRAPPER}} > .elementor-column-wrap > .elementor-motion-effects-container > .elementor-motion-effects-layer', 'fields_options' => [ 'background' => [ 'frontend_available' => true, ], ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_background_hover', [ 'label' => __( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated', ] ); $this->add_control( 'background_hover_transition', [ 'label' => __( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], 'render_type' => 'ui', 'separator' => 'before', ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); // Section Column Background Overlay. $this->start_controls_section( 'section_background_overlay', [ 'label' => __( 'Background Overlay', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => [ 'background_background' => [ 'classic', 'gradient' ], ], ] ); $this->start_controls_tabs( 'tabs_background_overlay' ); $this->start_controls_tab( 'tab_background_overlay_normal', [ 'label' => __( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_overlay', 'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay', ] ); $this->add_control( 'background_overlay_opacity', [ 'label' => __( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => .5, ], 'range' => [ 'px' => [ 'max' => 1, 'step' => 0.01, ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'opacity: {{SIZE}};', ], 'condition' => [ 'background_overlay_background' => [ 'classic', 'gradient' ], ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters', 'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay', ] ); $this->add_control( 'overlay_blend_mode', [ 'label' => __( 'Blend Mode', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => __( 'Normal', 'elementor' ), 'multiply' => 'Multiply', 'screen' => 'Screen', 'overlay' => 'Overlay', 'darken' => 'Darken', 'lighten' => 'Lighten', 'color-dodge' => 'Color Dodge', 'saturation' => 'Saturation', 'color' => 'Color', 'luminosity' => 'Luminosity', ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_background_overlay_hover', [ 'label' => __( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_overlay_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay', ] ); $this->add_control( 'background_overlay_hover_opacity', [ 'label' => __( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => .5, ], 'range' => [ 'px' => [ 'max' => 1, 'step' => 0.01, ], ], 'selectors' => [ '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay' => 'opacity: {{SIZE}};', ], 'condition' => [ 'background_overlay_hover_background' => [ 'classic', 'gradient' ], ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay', ] ); $this->add_control( 'background_overlay_hover_transition', [ 'label' => __( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], 'render_type' => 'ui', 'separator' => 'before', ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( 'section_border', [ 'label' => __( 'Border', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'tabs_border' ); $this->start_controls_tab( 'tab_border_normal', [ 'label' => __( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'border', 'selector' => '{{WRAPPER}} > .elementor-element-populated', ] ); $this->add_responsive_control( 'border_radius', [ 'label' => __( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{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}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'box_shadow', 'selector' => '{{WRAPPER}} > .elementor-element-populated', ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_border_hover', [ 'label' => __( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'border_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated', ] ); $this->add_responsive_control( 'border_radius_hover', [ 'label' => __( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}}:hover > .elementor-element-populated, {{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'box_shadow_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated', ] ); $this->add_control( 'border_hover_transition', [ 'label' => __( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'separator' => 'before', 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'background_background', 'operator' => '!==', 'value' => '', ], [ 'name' => 'border_border', 'operator' => '!==', 'value' => '', ], ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated' => 'transition: background {{background_hover_transition.SIZE}}s, border {{SIZE}}s, border-radius {{SIZE}}s, box-shadow {{SIZE}}s', '{{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', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); // Section Typography. $this->start_controls_section( 'section_typo', [ 'label' => __( 'Typography', 'elementor' ), 'type' => Controls_Manager::SECTION, 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( in_array( Schemes\Color::get_type(), Schemes\Manager::get_enabled_schemes(), true ) ) { $this->add_control( 'colors_warning', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => __( 'Note: The following set of controls has been deprecated. Those controls are only visible if they were previously populated.', 'elementor' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger', ] ); } $this->add_control( 'heading_color', [ 'label' => __( 'Heading Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-element-populated .elementor-heading-title' => 'color: {{VALUE}};', ], 'separator' => 'none', ] ); $this->add_control( 'color_text', [ 'label' => __( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'color_link', [ 'label' => __( 'Link Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-element-populated a' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'color_link_hover', [ 'label' => __( 'Link Hover Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-element-populated a:hover' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'text_align', [ 'label' => __( 'Text Align', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => __( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => __( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => __( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated' => 'text-align: {{VALUE}};', ], ] ); $this->end_controls_section(); // Section Advanced. $this->start_controls_section( 'section_advanced', [ 'label' => __( 'Advanced', 'elementor' ), 'type' => Controls_Manager::SECTION, 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_responsive_control( 'margin', [ 'label' => __( 'Margin', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'padding', [ 'label' => __( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em', '%' ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'z_index', [ 'label' => __( 'Z-Index', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'min' => 0, 'selectors' => [ '{{WRAPPER}}' => 'z-index: {{VALUE}};', ], ] ); $this->add_control( '_element_id', [ 'label' => __( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'dynamic' => [ 'active' => true, ], 'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), 'style_transfer' => false, 'classes' => 'elementor-control-direction-ltr', ] ); $this->add_control( 'css_classes', [ 'label' => __( 'CSS Classes', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'dynamic' => [ 'active' => true, ], 'prefix_class' => '', 'title' => __( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor' ), 'classes' => 'elementor-control-direction-ltr', ] ); // TODO: Backward comparability for deprecated controls $this->add_control( 'screen_sm', [ 'type' => Controls_Manager::HIDDEN, ] ); $this->add_control( 'screen_sm_width', [ 'type' => Controls_Manager::HIDDEN, 'condition' => [ 'screen_sm' => [ 'custom' ], ], 'prefix_class' => 'elementor-sm-', ] ); // END Backward comparability $this->end_controls_section(); $this->start_controls_section( 'section_effects', [ 'label' => __( 'Motion Effects', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_responsive_control( 'animation', [ 'label' => __( 'Entrance Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'frontend_available' => true, ] ); $this->add_control( 'animation_duration', [ 'label' => __( 'Animation Duration', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ 'slow' => __( 'Slow', 'elementor' ), '' => __( 'Normal', 'elementor' ), 'fast' => __( 'Fast', 'elementor' ), ], 'prefix_class' => 'animated-', 'condition' => [ 'animation!' => '', ], ] ); $this->add_control( 'animation_delay', [ 'label' => __( 'Animation Delay', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'default' => '', 'min' => 0, 'step' => 100, 'condition' => [ 'animation!' => '', ], 'render_type' => 'none', 'frontend_available' => true, ] ); $this->end_controls_section(); $this->start_controls_section( '_section_responsive', [ 'label' => __( 'Responsive', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_control( 'responsive_description', [ 'raw' => __( 'Responsive visibility will take effect only on preview or live page, and not while editing in Elementor.', 'elementor' ), 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-descriptor', ] ); $this->add_control( 'hide_desktop', [ 'label' => __( 'Hide On Desktop', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => 'Hide', 'label_off' => 'Show', 'return_value' => 'hidden-desktop', ] ); $this->add_control( 'hide_tablet', [ 'label' => __( 'Hide On Tablet', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => 'Hide', 'label_off' => 'Show', 'return_value' => 'hidden-tablet', ] ); $this->add_control( 'hide_mobile', [ 'label' => __( 'Hide On Mobile', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => 'Hide', 'label_off' => 'Show', 'return_value' => 'hidden-phone', ] ); $this->end_controls_section(); Plugin::$instance->controls_manager->add_custom_attributes_controls( $this ); Plugin::$instance->controls_manager->add_custom_css_controls( $this ); } /** * Render column output in the editor. * * Used to generate the live preview, using a Backbone JavaScript template. * * @since 2.9.0 * @access protected */ protected function content_template() { ?>
get_settings_for_display(); $has_background_overlay = in_array( $settings['background_overlay_background'], [ 'classic', 'gradient' ], true ) || in_array( $settings['background_overlay_hover_background'], [ 'classic', 'gradient' ], true ); $column_wrap_classes = [ 'elementor-column-wrap' ]; if ( $this->get_children() ) { $column_wrap_classes[] = ' elementor-element-populated'; } $this->add_render_attribute( [ '_inner_wrapper' => [ 'class' => $column_wrap_classes, ], '_widget_wrapper' => [ 'class' => [ 'elementor-widget-wrap' ], ], '_background_overlay' => [ 'class' => [ 'elementor-background-overlay' ], ], ] ); ?> <get_html_tag() . ' ' . $this->get_render_attribute_string( '_wrapper' ); ?>>
get_render_attribute_string( '_inner_wrapper' ); ?>>
get_render_attribute_string( '_background_overlay' ); ?>>
get_render_attribute_string( '_widget_wrapper' ); ?>>
get_html_tag(); ?>> get_data( 'isInner' ); $column_type = ! empty( $is_inner ) ? 'inner' : 'top'; $settings = $this->get_settings(); $this->add_render_attribute( '_wrapper', 'class', [ 'elementor-column', 'elementor-col-' . $settings['_column_size'], 'elementor-' . $column_type . '-column', ] ); } /** * Get default child type. * * Retrieve the column child type based on element data. * * @since 1.0.0 * @access protected * * @param array $element_data Element ID. * * @return Element_Base Column default child type. */ protected function _get_default_child_type( array $element_data ) { if ( 'section' === $element_data['elType'] ) { return Plugin::$instance->elements_manager->get_element_types( 'section' ); } return Plugin::$instance->widgets_manager->get_widget_types( $element_data['widgetType'] ); } /** * Get HTML tag. * * Retrieve the column element HTML tag. * * @since 1.5.3 * @access private * * @return string Column HTML tag. */ private function get_html_tag() { $html_tag = $this->get_settings( 'html_tag' ); if ( empty( $html_tag ) ) { $html_tag = 'div'; } return $html_tag; } } PK "Ð\m`¥_ÕŽÕŽ section.phpnuW+A„¶ [ [ 'preset' => [ 33, 66 ], ], [ 'preset' => [ 66, 33 ], ], ], 3 => [ [ 'preset' => [ 25, 25, 50 ], ], [ 'preset' => [ 50, 25, 25 ], ], [ 'preset' => [ 25, 50, 25 ], ], [ 'preset' => [ 16, 66, 16 ], ], ], ]; foreach ( range( 1, 10 ) as $columns_count ) { self::$presets[ $columns_count ] = [ [ 'preset' => [], ], ]; $preset_unit = floor( 1 / $columns_count * 100 ); for ( $i = 0; $i < $columns_count; $i++ ) { self::$presets[ $columns_count ][0]['preset'][] = $preset_unit; } if ( ! empty( $additional_presets[ $columns_count ] ) ) { self::$presets[ $columns_count ] = array_merge( self::$presets[ $columns_count ], $additional_presets[ $columns_count ] ); } foreach ( self::$presets[ $columns_count ] as $preset_index => & $preset ) { $preset['key'] = $columns_count . $preset_index; } } } /** * Get initial config. * * Retrieve the current section initial configuration. * * Adds more configuration on top of the controls list, the tabs assigned to * the control, element name, type, icon and more. This method also adds * section presets. * * @since 2.9.0 * @access protected * * @return array The initial config. */ protected function get_initial_config() { $config = parent::get_initial_config(); $config['presets'] = self::get_presets(); $config['controls'] = $this->get_controls(); $config['tabs_controls'] = $this->get_tabs_controls(); return $config; } /** * Register section controls. * * Used to add new controls to the section element. * * @since 1.0.0 * @access protected */ protected function _register_controls() { $this->start_controls_section( 'section_layout', [ 'label' => __( 'Layout', 'elementor' ), 'tab' => Controls_Manager::TAB_LAYOUT, ] ); // Element Name for the Navigator $this->add_control( '_title', [ 'label' => __( 'Title', 'elementor' ), 'type' => Controls_Manager::HIDDEN, 'render_type' => 'none', ] ); $this->add_control( 'stretch_section', [ 'label' => __( 'Stretch Section', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'return_value' => 'section-stretched', 'prefix_class' => 'elementor-', 'hide_in_inner' => true, 'description' => __( 'Stretch the section to the full width of the page using JS.', 'elementor' ) . sprintf( ' %2$s', 'https://go.elementor.com/stretch-section/', __( 'Learn more.', 'elementor' ) ), 'render_type' => 'none', 'frontend_available' => true, ] ); $this->add_control( 'layout', [ 'label' => __( 'Content Width', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'boxed', 'options' => [ 'boxed' => __( 'Boxed', 'elementor' ), 'full_width' => __( 'Full Width', 'elementor' ), ], 'prefix_class' => 'elementor-section-', ] ); $this->add_control( 'content_width', [ 'label' => __( 'Content Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'min' => 500, 'max' => 1600, ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-container' => 'max-width: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'layout' => [ 'boxed' ], ], 'show_label' => false, 'separator' => 'none', ] ); $this->add_control( 'gap', [ 'label' => __( 'Columns Gap', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => __( 'Default', 'elementor' ), 'no' => __( 'No Gap', 'elementor' ), 'narrow' => __( 'Narrow', 'elementor' ), 'extended' => __( 'Extended', 'elementor' ), 'wide' => __( 'Wide', 'elementor' ), 'wider' => __( 'Wider', 'elementor' ), ], ] ); $this->add_control( 'height', [ 'label' => __( 'Height', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => __( 'Default', 'elementor' ), 'full' => __( 'Fit To Screen', 'elementor' ), 'min-height' => __( 'Min Height', 'elementor' ), ], 'prefix_class' => 'elementor-section-height-', 'hide_in_inner' => true, ] ); $this->add_responsive_control( 'custom_height', [ 'label' => __( 'Minimum Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 400, ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 1440, ], 'vh' => [ 'min' => 0, 'max' => 100, ], 'vw' => [ 'min' => 0, 'max' => 100, ], ], 'size_units' => [ 'px', 'vh', 'vw' ], 'selectors' => [ '{{WRAPPER}} > .elementor-container' => 'min-height: {{SIZE}}{{UNIT}};', '{{WRAPPER}} > .elementor-container:after' => 'content: ""; min-height: inherit;', // Hack for IE11 ], 'condition' => [ 'height' => [ 'min-height' ], ], 'hide_in_inner' => true, ] ); $this->add_control( 'height_inner', [ 'label' => __( 'Height', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => __( 'Default', 'elementor' ), 'min-height' => __( 'Min Height', 'elementor' ), ], 'prefix_class' => 'elementor-section-height-', 'hide_in_top' => true, ] ); $this->add_responsive_control( 'custom_height_inner', [ 'label' => __( 'Minimum Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 400, ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 1440, ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-container' => 'min-height: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'height_inner' => [ 'min-height' ], ], 'hide_in_top' => true, ] ); $this->add_control( 'column_position', [ 'label' => __( 'Column Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'middle', 'options' => [ 'stretch' => __( 'Stretch', 'elementor' ), 'top' => __( 'Top', 'elementor' ), 'middle' => __( 'Middle', 'elementor' ), 'bottom' => __( 'Bottom', 'elementor' ), ], 'prefix_class' => 'elementor-section-items-', 'condition' => [ 'height' => [ 'full', 'min-height' ], ], ] ); $this->add_control( 'content_position', [ 'label' => __( 'Vertical Align', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => __( 'Default', 'elementor' ), 'top' => __( 'Top', 'elementor' ), 'middle' => __( 'Middle', 'elementor' ), 'bottom' => __( 'Bottom', 'elementor' ), 'space-between' => __( 'Space Between', 'elementor' ), 'space-around' => __( 'Space Around', 'elementor' ), 'space-evenly' => __( 'Space Evenly', 'elementor' ), ], 'selectors_dictionary' => [ 'top' => 'flex-start', 'middle' => 'center', 'bottom' => 'flex-end', ], 'selectors' => [ '{{WRAPPER}} > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap > .elementor-widget-wrap' => 'align-content: {{VALUE}}; align-items: {{VALUE}};', ], // TODO: The following line is for BC since 2.7.0 'prefix_class' => 'elementor-section-content-', ] ); $this->add_control( 'overflow', [ 'label' => __( 'Overflow', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => __( 'Default', 'elementor' ), 'hidden' => __( 'Hidden', 'elementor' ), ], 'selectors' => [ '{{WRAPPER}}' => 'overflow: {{VALUE}}', ], ] ); $possible_tags = [ 'div', 'header', 'footer', 'main', 'article', 'section', 'aside', 'nav', ]; $options = [ '' => __( 'Default', 'elementor' ), ] + array_combine( $possible_tags, $possible_tags ); $this->add_control( 'html_tag', [ 'label' => __( 'HTML Tag', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => $options, 'separator' => 'before', ] ); $this->end_controls_section(); // Section Structure $this->start_controls_section( 'section_structure', [ 'label' => __( 'Structure', 'elementor' ), 'tab' => Controls_Manager::TAB_LAYOUT, ] ); $this->add_control( 'structure', [ 'label' => __( 'Structure', 'elementor' ), 'type' => Controls_Manager::STRUCTURE, 'default' => '10', 'render_type' => 'none', 'style_transfer' => false, ] ); $this->end_controls_section(); // Section background $this->start_controls_section( 'section_background', [ 'label' => __( 'Background', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'tabs_background' ); $this->start_controls_tab( 'tab_background_normal', [ 'label' => __( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background', 'types' => [ 'classic', 'gradient', 'video', 'slideshow' ], 'fields_options' => [ 'background' => [ 'frontend_available' => true, ], ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_background_hover', [ 'label' => __( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_hover', 'selector' => '{{WRAPPER}}:hover', ] ); $this->add_control( 'background_hover_transition', [ 'label' => __( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], 'render_type' => 'ui', 'separator' => 'before', ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); // Background Overlay $this->start_controls_section( 'section_background_overlay', [ 'label' => __( 'Background Overlay', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'tabs_background_overlay' ); $this->start_controls_tab( 'tab_background_overlay_normal', [ 'label' => __( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_overlay', 'selector' => '{{WRAPPER}} > .elementor-background-overlay', ] ); $this->add_control( 'background_overlay_opacity', [ 'label' => __( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => .5, ], 'range' => [ 'px' => [ 'max' => 1, 'step' => 0.01, ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-background-overlay' => 'opacity: {{SIZE}};', ], 'condition' => [ 'background_overlay_background' => [ 'classic', 'gradient' ], ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters', 'selector' => '{{WRAPPER}} .elementor-background-overlay', ] ); $this->add_control( 'overlay_blend_mode', [ 'label' => __( 'Blend Mode', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => __( 'Normal', 'elementor' ), 'multiply' => 'Multiply', 'screen' => 'Screen', 'overlay' => 'Overlay', 'darken' => 'Darken', 'lighten' => 'Lighten', 'color-dodge' => 'Color Dodge', 'saturation' => 'Saturation', 'color' => 'Color', 'luminosity' => 'Luminosity', ], 'selectors' => [ '{{WRAPPER}} > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_background_overlay_hover', [ 'label' => __( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'background_overlay_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-background-overlay', ] ); $this->add_control( 'background_overlay_hover_opacity', [ 'label' => __( 'Opacity', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => .5, ], 'range' => [ 'px' => [ 'max' => 1, 'step' => 0.01, ], ], 'selectors' => [ '{{WRAPPER}}:hover > .elementor-background-overlay' => 'opacity: {{SIZE}};', ], 'condition' => [ 'background_overlay_hover_background' => [ 'classic', 'gradient' ], ], ] ); $this->add_group_control( Group_Control_Css_Filter::get_type(), [ 'name' => 'css_filters_hover', 'selector' => '{{WRAPPER}}:hover > .elementor-background-overlay', ] ); $this->add_control( 'background_overlay_hover_transition', [ 'label' => __( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], 'render_type' => 'ui', 'separator' => 'before', ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); // Section border $this->start_controls_section( 'section_border', [ 'label' => __( 'Border', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'tabs_border' ); $this->start_controls_tab( 'tab_border_normal', [ 'label' => __( 'Normal', 'elementor' ), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'border', ] ); $this->add_responsive_control( 'border_radius', [ 'label' => __( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}}, {{WRAPPER}} > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'box_shadow', ] ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_border_hover', [ 'label' => __( 'Hover', 'elementor' ), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'border_hover', 'selector' => '{{WRAPPER}}:hover', ] ); $this->add_responsive_control( 'border_radius_hover', [ 'label' => __( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}}:hover, {{WRAPPER}}:hover > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'box_shadow_hover', 'selector' => '{{WRAPPER}}:hover', ] ); $this->add_control( 'border_hover_transition', [ 'label' => __( 'Transition Duration', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'separator' => 'before', 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'background_background', 'operator' => '!==', 'value' => '', ], [ 'name' => 'border_border', 'operator' => '!==', 'value' => '', ], ], ], 'selectors' => [ '{{WRAPPER}}' => 'transition: background {{background_hover_transition.SIZE}}s, border {{SIZE}}s, border-radius {{SIZE}}s, box-shadow {{SIZE}}s', '{{WRAPPER}} > .elementor-background-overlay' => 'transition: background {{background_overlay_hover_transition.SIZE}}s, border-radius {{SIZE}}s, opacity {{background_overlay_hover_transition.SIZE}}s', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); // Section Shape Divider $this->start_controls_section( 'section_shape_divider', [ 'label' => __( 'Shape Divider', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->start_controls_tabs( 'tabs_shape_dividers' ); $shapes_options = [ '' => __( 'None', 'elementor' ), ]; foreach ( Shapes::get_shapes() as $shape_name => $shape_props ) { $shapes_options[ $shape_name ] = $shape_props['title']; } foreach ( [ 'top' => __( 'Top', 'elementor' ), 'bottom' => __( 'Bottom', 'elementor' ), ] as $side => $side_label ) { $base_control_key = "shape_divider_$side"; $this->start_controls_tab( "tab_$base_control_key", [ 'label' => $side_label, ] ); $this->add_control( $base_control_key, [ 'label' => __( 'Type', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => $shapes_options, 'render_type' => 'none', 'frontend_available' => true, ] ); $this->add_control( $base_control_key . '_color', [ 'label' => __( 'Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ "shape_divider_$side!" => '', ], 'selectors' => [ "{{WRAPPER}} > .elementor-shape-$side .elementor-shape-fill" => 'fill: {{UNIT}};', ], ] ); $this->add_responsive_control( $base_control_key . '_width', [ 'label' => __( 'Width', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'unit' => '%', ], 'tablet_default' => [ 'unit' => '%', ], 'mobile_default' => [ 'unit' => '%', ], 'range' => [ '%' => [ 'min' => 100, 'max' => 300, ], ], 'condition' => [ "shape_divider_$side" => array_keys( Shapes::filter_shapes( 'height_only', Shapes::FILTER_EXCLUDE ) ), ], 'selectors' => [ "{{WRAPPER}} > .elementor-shape-$side svg" => 'width: calc({{SIZE}}{{UNIT}} + 1.3px)', ], ] ); $this->add_responsive_control( $base_control_key . '_height', [ 'label' => __( 'Height', 'elementor' ), 'type' => Controls_Manager::SLIDER, 'range' => [ 'px' => [ 'max' => 500, ], ], 'condition' => [ "shape_divider_$side!" => '', ], 'selectors' => [ "{{WRAPPER}} > .elementor-shape-$side svg" => 'height: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( $base_control_key . '_flip', [ 'label' => __( 'Flip', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'condition' => [ "shape_divider_$side" => array_keys( Shapes::filter_shapes( 'has_flip' ) ), ], 'selectors' => [ "{{WRAPPER}} > .elementor-shape-$side svg" => 'transform: translateX(-50%) rotateY(180deg)', ], ] ); $this->add_control( $base_control_key . '_negative', [ 'label' => __( 'Invert', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'frontend_available' => true, 'condition' => [ "shape_divider_$side" => array_keys( Shapes::filter_shapes( 'has_negative' ) ), ], 'render_type' => 'none', ] ); $this->add_control( $base_control_key . '_above_content', [ 'label' => __( 'Bring to Front', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'selectors' => [ "{{WRAPPER}} > .elementor-shape-$side" => 'z-index: 2; pointer-events: none', ], 'condition' => [ "shape_divider_$side!" => '', ], ] ); $this->end_controls_tab(); } $this->end_controls_tabs(); $this->end_controls_section(); // Section Typography $this->start_controls_section( 'section_typo', [ 'label' => __( 'Typography', 'elementor' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); if ( in_array( Schemes\Color::get_type(), Schemes\Manager::get_enabled_schemes(), true ) ) { $this->add_control( 'colors_warning', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => __( 'Note: The following set of controls has been deprecated. Those controls are only visible if they were previously populated.', 'elementor' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger', ] ); } $this->add_control( 'heading_color', [ 'label' => __( 'Heading Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-heading-title' => 'color: {{VALUE}};', ], 'separator' => 'none', ] ); $this->add_control( 'color_text', [ 'label' => __( 'Text Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}}' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'color_link', [ 'label' => __( 'Link Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} a' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'color_link_hover', [ 'label' => __( 'Link Hover Color', 'elementor' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} a:hover' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'text_align', [ 'label' => __( 'Text Align', 'elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => __( 'Left', 'elementor' ), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => __( 'Center', 'elementor' ), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => __( 'Right', 'elementor' ), 'icon' => 'eicon-text-align-right', ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-container' => 'text-align: {{VALUE}};', ], ] ); $this->end_controls_section(); // Section Advanced $this->start_controls_section( 'section_advanced', [ 'label' => __( 'Advanced', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_responsive_control( 'margin', [ 'label' => __( 'Margin', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'allowed_dimensions' => 'vertical', 'placeholder' => [ 'top' => '', 'right' => 'auto', 'bottom' => '', 'left' => 'auto', ], 'selectors' => [ '{{WRAPPER}}' => 'margin-top: {{TOP}}{{UNIT}}; margin-bottom: {{BOTTOM}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'padding', [ 'label' => __( 'Padding', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em', '%' ], 'selectors' => [ '{{WRAPPER}}' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_control( 'z_index', [ 'label' => __( 'Z-Index', 'elementor' ), 'type' => Controls_Manager::NUMBER, 'min' => 0, 'selectors' => [ '{{WRAPPER}}' => 'z-index: {{VALUE}};', ], ] ); $this->add_control( '_element_id', [ 'label' => __( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'dynamic' => [ 'active' => true, ], 'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), 'style_transfer' => false, 'classes' => 'elementor-control-direction-ltr', ] ); $this->add_control( 'css_classes', [ 'label' => __( 'CSS Classes', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'dynamic' => [ 'active' => true, ], 'prefix_class' => '', 'title' => __( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor' ), 'classes' => 'elementor-control-direction-ltr', ] ); $this->end_controls_section(); $this->start_controls_section( 'section_effects', [ 'label' => __( 'Motion Effects', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_responsive_control( 'animation', [ 'label' => __( 'Entrance Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'frontend_available' => true, ] ); $this->add_control( 'animation_duration', [ 'label' => __( 'Animation Duration', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ 'slow' => __( 'Slow', 'elementor' ), '' => __( 'Normal', 'elementor' ), 'fast' => __( 'Fast', 'elementor' ), ], 'prefix_class' => 'animated-', 'condition' => [ 'animation!' => '', ], ] ); $this->add_control( 'animation_delay', [ 'label' => __( 'Animation Delay', 'elementor' ) . ' (ms)', 'type' => Controls_Manager::NUMBER, 'default' => '', 'min' => 0, 'step' => 100, 'condition' => [ 'animation!' => '', ], 'render_type' => 'none', 'frontend_available' => true, ] ); $this->end_controls_section(); // Section Responsive $this->start_controls_section( '_section_responsive', [ 'label' => __( 'Responsive', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_control( 'reverse_order_tablet', [ 'label' => __( 'Reverse Columns', 'elementor' ) . ' (' . __( 'Tablet', 'elementor' ) . ')', 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'return_value' => 'reverse-tablet', ] ); $this->add_control( 'reverse_order_mobile', [ 'label' => __( 'Reverse Columns', 'elementor' ) . ' (' . __( 'Mobile', 'elementor' ) . ')', 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'return_value' => 'reverse-mobile', ] ); $this->add_control( 'heading_visibility', [ 'label' => __( 'Visibility', 'elementor' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ] ); $this->add_control( 'responsive_description', [ 'raw' => __( 'Responsive visibility will take effect only on preview or live page, and not while editing in Elementor.', 'elementor' ), 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-descriptor', ] ); $this->add_control( 'hide_desktop', [ 'label' => __( 'Hide On Desktop', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => __( 'Hide', 'elementor' ), 'label_off' => __( 'Show', 'elementor' ), 'return_value' => 'hidden-desktop', ] ); $this->add_control( 'hide_tablet', [ 'label' => __( 'Hide On Tablet', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => __( 'Hide', 'elementor' ), 'label_off' => __( 'Show', 'elementor' ), 'return_value' => 'hidden-tablet', ] ); $this->add_control( 'hide_mobile', [ 'label' => __( 'Hide On Mobile', 'elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'prefix_class' => 'elementor-', 'label_on' => __( 'Hide', 'elementor' ), 'label_off' => __( 'Show', 'elementor' ), 'return_value' => 'hidden-phone', ] ); $this->end_controls_section(); Plugin::$instance->controls_manager->add_custom_attributes_controls( $this ); Plugin::$instance->controls_manager->add_custom_css_controls( $this ); } /** * Render section output in the editor. * * Used to generate the live preview, using a Backbone JavaScript template. * * @since 2.9.0 * @access protected */ protected function content_template() { ?> <# if ( settings.background_video_link ) { let videoAttributes = 'autoplay muted playsinline'; if ( ! settings.background_play_once ) { videoAttributes += ' loop'; } view.addRenderAttribute( 'background-video-container', 'class', 'elementor-background-video-container' ); if ( ! settings.background_play_on_mobile ) { view.addRenderAttribute( 'background-video-container', 'class', 'elementor-hidden-phone' ); } #>
<# } #>
get_settings_for_display(); ?> <get_html_tag() ); ?> print_render_attribute_string( '_wrapper' ); ?>> add_render_attribute( 'background-video-container', 'class', 'elementor-background-video-container' ); if ( ! $settings['background_play_on_mobile'] ) { $this->add_render_attribute( 'background-video-container', 'class', 'elementor-hidden-phone' ); } ?>
get_render_attribute_string( 'background-video-container' ); ?>>
print_shape_divider( 'top' ); } if ( $settings['shape_divider_bottom'] ) { $this->print_shape_divider( 'bottom' ); } ?>
get_html_tag() ); ?>> get_data( 'isInner' ) ? 'inner' : 'top'; $this->add_render_attribute( '_wrapper', 'class', [ 'elementor-section', 'elementor-' . $section_type . '-section', ] ); } /** * Get default child type. * * Retrieve the section child type based on element data. * * @since 1.0.0 * @access protected * * @param array $element_data Element ID. * * @return Element_Base Section default child type. */ protected function _get_default_child_type( array $element_data ) { return Plugin::$instance->elements_manager->get_element_types( 'column' ); } /** * Get HTML tag. * * Retrieve the section element HTML tag. * * @since 1.5.3 * @access private * * @return string Section HTML tag. */ private function get_html_tag() { $html_tag = $this->get_settings( 'html_tag' ); if ( empty( $html_tag ) ) { $html_tag = 'section'; } return $html_tag; } /** * Print section shape divider. * * Used to generate the shape dividers HTML. * * @since 1.3.0 * @access private * * @param string $side Shape divider side, used to set the shape key. */ private function print_shape_divider( $side ) { $settings = $this->get_active_settings(); $base_setting_key = "shape_divider_$side"; $negative = ! empty( $settings[ $base_setting_key . '_negative' ] ); $shape_path = Shapes::get_shape_path( $settings[ $base_setting_key ], $negative ); if ( ! is_file( $shape_path ) || ! is_readable( $shape_path ) ) { return; } ?>
p { margin: 0 0 $size__spacing-unit; } cite { color: $color__text-light; } } @import "tables"; PKb+Ð\bB^^ _lists.scssnuW+A„¶ul, ol { padding-left: ( 1 * $size__spacing-unit ); } ul { list-style: disc; ul { list-style-type: circle; } } ol { list-style: decimal; } li { line-height: $font__line-height-body; } li > ul, li > ol { padding-left: ( 2 * $size__spacing-unit ); } dt { font-weight: bold; } dd { margin: 0 $size__spacing-unit $size__spacing-unit; } PK "Ð\ÎËúËÒ Ò repeater.phpnuW+A„¶PK "Ð\òMævàbàb  column.phpnuW+A„¶PK "Ð\m`¥_ÕŽÕŽ (osection.phpnuW+A„¶PKb+Ð\~Ûiûáá 8þ_tables.scssnuW+A„¶PKb+Ð\9AnUÿ_elements.scssnuW+A„¶PKb+Ð\bB^^ ¢_lists.scssnuW+A„¶PKÆ;