[ 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $column_label ), 'icon' => 'clone', ], 'add' => [ 'title' => sprintf( __( 'Add %s', 'elementor' ), $column_label ), 'icon' => 'plus', ], 'remove' => [ 'title' => sprintf( __( 'Remove %s', 'elementor' ), $column_label ), 'icon' => 'close', ], ]; } /** * Get column name. * * Retrieve the column name. * * @since 1.0.0 * @access public * * @return string Column name. */ public function get_name() { return 'column'; } /** * Get column title. * * Retrieve the column title. * * @since 1.0.0 * @access public * * @return string Column title. */ public function get_title() { return __( 'Column', 'elementor' ); } /** * Get column icon. * * Retrieve the column icon. * * @since 1.0.0 * @access public * * @return string Column icon. */ public function get_icon() { return 'eicon-column'; } /** * 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, ] ); $this->add_responsive_control( '_inline_size', [ 'label' => __( 'Column Width', 'elementor' ) . ' (%)', 'type' => Controls_Manager::NUMBER, 'min' => 10, 'max' => 90, '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_control( 'content_position', [ 'label' => __( 'Content Position', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => __( 'Default', 'elementor' ), 'top' => __( 'Top', 'elementor' ), 'center' => __( 'Middle', 'elementor' ), 'bottom' => __( 'Bottom', 'elementor' ), ], 'selectors_dictionary' => [ 'top' => 'flex-start', 'bottom' => 'flex-end', ], 'selectors' => [ '{{WRAPPER}}.elementor-column .elementor-column-wrap' => 'align-items: {{VALUE}}', ], ] ); $this->add_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(:last-child)' => 'margin-bottom: {{VALUE}}px',//Need the full path for exclude the inner section ], ] ); $possible_tags = [ 'div', 'article', '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, ] ); $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', 'selector' => '{{WRAPPER}} > .elementor-element-populated', ] ); $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', ] ); $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->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_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', ] ); $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_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' => '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_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, 'default' => [ 'size' => 0.3, ], 'range' => [ 'px' => [ 'max' => 3, 'step' => 0.1, ], ], '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( Scheme_Color::get_type(), Schemes_Manager::get_enabled_schemes() ) ) { $this->add_control( 'colors_warning', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => __( 'Note: The following colors won\'t work if Default Colors are enabled.', 'elementor' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', ] ); } $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' => 'fa fa-align-left', ], 'center' => [ 'title' => __( 'Center', 'elementor' ), 'icon' => 'fa fa-align-center', ], 'right' => [ 'title' => __( 'Right', 'elementor' ), 'icon' => 'fa fa-align-right', ], ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated' => 'text-align: {{VALUE}};', ], ] ); $this->end_controls_section(); // Section Advanced. $this->start_controls_section( 'section_advanced', [ 'label' => __( 'Element Style', '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, 'placeholder' => 0, 'selectors' => [ '{{WRAPPER}}' => 'z-index: {{VALUE}};', ], ] ); $this->add_control( 'animation', [ 'label' => __( 'Entrance Animation', 'elementor' ), 'type' => Controls_Manager::ANIMATION, 'default' => '', 'prefix_class' => 'animated ', 'label_block' => true, '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->add_control( '_element_id', [ 'label' => __( 'CSS ID', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'label_block' => true, 'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ), ] ); $this->add_control( 'css_classes', [ 'label' => __( 'CSS Classes', 'elementor' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'prefix_class' => '', 'label_block' => true, 'title' => __( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor' ), ] ); $this->end_controls_section(); $this->start_controls_section( 'section_responsive', [ 'label' => __( 'Responsive', 'elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); $this->add_control( 'screen_sm', [ 'label' => __( 'Mobile Width', 'elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => __( 'Default', 'elementor' ), 'custom' => __( 'Custom', 'elementor' ), ], 'classes' => 'elementor-control-deprecated', 'description' => __( 'Deprecated: Mobile Width control is no longer supported. Please use the Column Width control in the Layout tab instead.', 'elementor' ), ] ); $this->add_control( 'screen_sm_width', [ 'label' => __( 'Column Width', 'elementor' ), 'type' => Controls_Manager::SELECT, 'options' => [ '10' => '10%', '11' => '11%', '12' => '12%', '14' => '14%', '16' => '16%', '20' => '20%', '25' => '25%', '30' => '30%', '33' => '33%', '40' => '40%', '50' => '50%', '60' => '60%', '66' => '66%', '70' => '70%', '75' => '75%', '80' => '80%', '83' => '83%', '90' => '90%', '100' => '100%', ], 'default' => '100', 'condition' => [ 'screen_sm' => [ 'custom' ], ], 'prefix_class' => 'elementor-sm-', ] ); $this->end_controls_section(); Plugin::$instance->controls_manager->add_custom_css_controls( $this ); } /** * Render column edit tools. * * Used to generate the edit tools HTML. * * @since 1.8.0 * @access protected */ protected function render_edit_tools() { ?>
get_settings(); $has_background_overlay = in_array( $settings['background_overlay_background'], [ 'classic', 'gradient' ] ) || in_array( $settings['background_overlay_hover_background'], [ 'classic', 'gradient' ] ); $column_wrap_class = 'elementor-column-wrap'; if ( $this->get_children() ) { $column_wrap_class .= ' elementor-element-populated'; } ?> <get_html_tag() . ' ' . $this->get_render_attribute_string( '_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', ] ); $this->add_render_attribute( '_wrapper', 'data-element_type', $this->get_name() ); } /** * 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; } }