setup_init();
$this->setup_hook();
}
/**
* Setup Classes
*/
private function setup_init() {
$this->manager = Jeg_Element::instance()->manager;
}
/**
* Setup Hooks
*/
private function setup_hook() {
add_filter( 'jeg_register_elements', array( $this, 'register_element' ) );
add_action( 'elementor/element/common/_section_style/after_section_end', array( $this, 'add_widget_options' ), 10 );
add_action( 'elementor/element/column/section_advanced/after_section_end', array( $this, 'add_column_options' ), 10, 2 );
add_action( 'elementor/element/section/section_advanced/after_section_end', array( $this, 'add_section_options' ), 10, 2 );
add_action( 'elementor/element/container/section_layout/after_section_end', array( $this, 'add_container_options' ), 10, 2 );
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 99 );
}
/**
* Get class instance
*
* @return Element
*/
public static function instance() {
if ( null === static::$instance ) {
static::$instance = new static();
}
return static::$instance;
}
/**
* Register all elements
*
* @param array $elements Elements.
*
* @return array
*/
public function register_element( $elements ) {
$element_config = get_option( 'jkit_elements_enable', array() );
foreach ( $this->list_elements() as $item ) {
$item_key = 'jkit_' . strtolower( $item );
if ( ! isset( $element_config[ $item_key ] ) || filter_var( $element_config[ $item_key ], FILTER_VALIDATE_BOOLEAN ) ) {
$namespace = '\Jeg\Elementor_Kit\Elements';
$elements[ $item_key ] = array(
'option' => $namespace . '\Options\\' . $item . '_Option',
'view' => $namespace . '\Views\\' . $item . '_View',
'elementor' => $namespace . '\Elementor\\' . $item . '_Elementor',
);
}
}
return $elements;
}
/**
* List of elements
*
* @return array
*/
public function list_elements() {
$default = array(
'Nav_Menu',
'Off_Canvas',
'Search',
'Icon_Box',
'Image_Box',
'Fun_Fact',
'Progress_Bar',
'Client_Logo',
'Testimonials',
'Accordion',
'Gallery',
'Team',
'Pie_Chart',
'Portfolio_Gallery',
'Tabs',
'Animated_Text',
'Heading',
'Countdown',
'Button',
'Dual_Button',
'Video_Button',
'Social_Share',
'Post_Block',
'Post_List',
'Category_List',
'Feature_List',
'Contact_Form_7',
'Mailchimp',
'Post_Title',
'Post_Featured_Image',
'Post_Comment',
'Post_Terms',
'Post_Excerpt',
'Post_Date',
'Post_Author',
'Post_Content',
'Banner',
);
if ( class_exists( 'WooCommerce' ) ) {
$woo_elements = array(
'Product_Grid',
'Product_Carousel',
'Product_Categories',
);
$default = array_merge( $default, $woo_elements );
}
return apply_filters( 'jkit_list_elements', $default );
}
/**
* Add custom option to elementor widgets
*
* @param \Elementor\Element_Base $element The edited element.
*/
public function add_widget_options( $element ) {
$element->start_controls_section(
'jkit_transform_section',
array(
'label' => ' ' . esc_html__( 'Transform', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
'condition' => array(
'_transform_rotate_popover!' => 'transform',
),
)
);
$element->add_responsive_control(
'jkit_transform_rotate',
array(
'label' => esc_html__( 'Rotate', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'range' => array(
'px' => array(
'min' => 0,
'max' => 360,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}:not(.e-transform) > .elementor-widget-container' => '-moz-transform: rotate({{SIZE}}deg); -webkit-transform: rotate({{SIZE}}deg); -o-transform: rotate({{SIZE}}deg); -ms-transform: rotate({{SIZE}}deg); transform: rotate({{SIZE}}deg);',
'{{WRAPPER}}.e-transform > .elementor-widget-container' => '--e-transform-rotateZ: {{SIZE}}deg;',
),
'condition' => array(
'_transform_rotate_popover!' => 'transform',
),
'description' => esc_html__( 'Since Elementor version 3.5.0, it has its own Transform settings. When you use Transform Rotate from Elementor, this setting will be hidden.', 'jeg-elementor-kit' ),
)
);
$element->end_controls_section();
$element->start_controls_section(
'jkit_glass_blur_section',
array(
'label' => ' ' . esc_html__( 'Glass Blur Effect', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$element->add_responsive_control(
'jkit_glass_blur_level',
array(
'label' => esc_html__( 'Blur', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'range' => array(
'px' => array(
'min' => 0,
'max' => 20,
'step' => 0.1,
),
),
'description' => esc_html__( 'The blur effect will be set on the widget container. Make sure to set background to transparent to see the blur effect.', 'jeg-elementor-kit' ),
'selectors' => array(
/** `--jkit-option-enabled` is to prevent CSS rendered as an option that does not have a value */
'{{WRAPPER}}.elementor-widget .elementor-widget-container, {{WRAPPER}}.elementor-widget .elementor-widget-container > *' => 'position: relative; --jkit-option-enabled: {{SIZE}}{{UNIT}}',
'{{WRAPPER}}.elementor-widget .elementor-widget-container::before' => 'content: ""; width: 100%; height: 100%; position: absolute; left: 0; top: 0; -webkit-backdrop-filter: blur({{SIZE}}{{UNIT}}); backdrop-filter: blur({{SIZE}}{{UNIT}}); border-radius: inherit; background-color: inherit;',
),
)
);
$element->end_controls_section();
}
/**
* Add custom option to elementor columns
*
* @param \Elementor\Element_Base $column The edited element.
* @param array @args The $args that sent to $element->start_controls_section.
*/
public function add_column_options( $column, $args ) {
$column->start_controls_section(
'jkit_glass_blur_section',
array(
'label' => ' ' . esc_html__( 'Glass Blur Effect', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$column->add_responsive_control(
'jkit_glass_blur_level',
array(
'label' => esc_html__( 'Blur', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'range' => array(
'px' => array(
'min' => 0,
'max' => 20,
'step' => 0.1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-column > .elementor-element-populated::before' => 'content: ""; width: 100%; height: 100%; position: absolute; left: 0; top: 0; -webkit-backdrop-filter: blur({{SIZE}}{{UNIT}}); backdrop-filter: blur({{SIZE}}{{UNIT}}); border-radius: inherit; background-color: inherit;',
),
)
);
$column->end_controls_section();
$column->start_controls_section(
'jkit_sticky_element_section',
array(
'label' => ' ' . esc_html__( 'Sticky Element', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$column->add_control(
'jkit_sticky_section',
array(
'label' => esc_html__( 'Enable Sticky Element', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'enabled',
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled' => 'position: -webkit-sticky; position: sticky; height: fit-content;',
),
'prefix_class' => 'jkit-sticky-element--',
)
);
$breakpoint_option = array( 'desktop' => 'Desktop' );
foreach ( jkit_get_responsive_breakpoints() as $list ) {
$breakpoint_option[ $list['key'] ] = ucwords( $list['key'] );
}
$column->add_control(
'jkit_sticky_device',
array(
'label' => esc_html__( 'Device', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT2,
'options' => $breakpoint_option,
'multiple' => true,
'default' => array( 'desktop', 'tablet', 'mobile' ),
'frontend_available' => true,
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
'label_block' => true,
)
);
$column->add_control(
'jkit_sticky_trigger',
array(
'label' => esc_html__( 'Sticky Trigger', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT,
'default' => 'down',
'options' => array(
'up' => esc_html__( 'On Scroll Up', 'jeg-elementor-kit' ),
'down' => esc_html__( 'On Scroll Down', 'jeg-elementor-kit' ),
'both' => esc_html__( 'On Both', 'jeg-elementor-kit' ),
),
'prefix_class' => 'jkit-sticky-element-on--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$column->add_control(
'jkit_sticky_position',
array(
'label' => esc_html__( 'Sticky Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT,
'default' => 'sticky',
'options' => array(
'sticky' => esc_html__( 'Sticky', 'jeg-elementor-kit' ),
'fixed' => esc_html__( 'Fixed', 'jeg-elementor-kit' ),
),
'prefix_class' => 'jkit-sticky-position--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger!' => 'both',
),
)
);
$column->add_control(
'jkit_sticky_top_position',
array(
'label' => esc_html__( 'Top Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 500,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'size' => 0,
'unit' => 'px',
),
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down' => 'top: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'top: {{SIZE}}{{UNIT}};',
'#wpadminbar ~ {{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down, #wpadminbar ~ * {{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down' => 'top: calc({{SIZE}}{{UNIT}} + var(--wpadminbar-height, 0px));',
'#wpadminbar ~ {{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both, #wpadminbar ~ * {{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'top: calc({{SIZE}}{{UNIT}} + var(--wpadminbar-height, 0px));',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger' => array( 'down', 'both' ),
),
'frontend_available' => true,
)
);
$column->add_control(
'jkit_sticky_bottom_position',
array(
'label' => esc_html__( 'Bottom Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 500,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'size' => 0,
'unit' => 'px',
),
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--up' => 'bottom: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'bottom: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger' => array( 'up', 'both' ),
),
'frontend_available' => true,
)
);
$column->add_control(
'jkit_sticky_background_color',
array(
'label' => esc_html__( 'Background Color', 'jeg-elementor-kit' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned' => 'background-color: {{VALUE}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$column->add_control(
'jkit_sticky_hide_on_scroll',
array(
'label' => esc_html__( 'Hide on Scroll', 'jeg-elementor-klit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'hide-on-scroll',
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => 'opacity: 0; pointer-events: none; cursor: default; transform: translate(var(--x-axis-animations, 0), var(--y-axis-animations, 0));',
),
'prefix_class' => 'jkit-sticky-element--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$column->add_control(
'jkit_sticky_hide_threshold',
array(
'label' => esc_html__( 'Scroll Threshold', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'threshold',
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled' => 'position: -webkit-sticky; position: sticky; height: fit-content;',
),
'prefix_class' => 'jkit-sticky-element--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$column->add_control(
'jkit_sticky_x_axis_animation',
array(
'label' => esc_html__( 'X Axis Animation', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%', 'em' ),
'range' => array(
'px' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'%' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'em' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => '--x-axis-animations: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$column->add_control(
'jkit_sticky_y_axis_animation',
array(
'label' => esc_html__( 'Y Axis Animation', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%', 'em' ),
'range' => array(
'px' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'%' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'em' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => '--y-axis-animations: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$column->add_control(
'jkit_sticky_transition',
array(
'label' => esc_html__( 'Transition', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'default' => array(
'size' => 0.1,
),
'range' => array(
'px' => array(
'max' => 3,
'step' => 0.1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned' => 'transition: margin {{SIZE}}s, padding {{SIZE}}s, background {{SIZE}}s, box-shadow {{SIZE}}s, transform {{SIZE}}s, opacity {{SIZE}}s;',
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled' => 'transition: margin {{SIZE}}s, padding {{SIZE}}s, background {{SIZE}}s, box-shadow {{SIZE}}s, transform {{SIZE}}s, opacity {{SIZE}}s;',
),
'conditions' => array(
'relation' => 'and',
'terms' => array(
array(
'name' => 'jkit_sticky_section',
'operator' => '===',
'value' => 'enabled',
),
array(
'relation' => 'or',
'terms' => array(
array(
'name' => 'jkit_sticky_background_color',
'operator' => '!==',
'value' => '',
),
array(
'name' => 'jkit_sticky_hide_on_scroll',
'operator' => '===',
'value' => 'hide-on-scroll',
),
),
),
),
),
)
);
$column->add_control(
'jkit_sticky_zindex',
array(
'label' => esc_html__( 'Z-Index', 'jeg-elementor-kit' ),
'type' => Controls_Manager::NUMBER,
'default' => 100,
'min' => 0,
'max' => 999,
'step' => 1,
'selectors' => array(
'{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled' => 'z-index: {{VALUE}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$column->add_group_control(
\Elementor\Group_Control_Box_Shadow::get_type(),
array(
'name' => 'jkit_sticky_shadow',
'label' => esc_html__( 'Box Shadow', 'jeg-elementor-kit' ),
'selector' => '{{WRAPPER}}.elementor-column.jkit-sticky-element--enabled.sticky-pinned',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$column->end_controls_section();
}
/**
* Add custom option to elementor sections
*
* @param \Elementor\Element_Base $section The edited element.
* @param array $args The args that sent to $element->start_controls_section.
*/
public function add_section_options( $section, $args ) {
$section->start_controls_section(
'jkit_glass_blur_section',
array(
'label' => ' ' . esc_html__( 'Glass Blur Effect', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$section->add_responsive_control(
'jkit_glass_blur_level',
array(
'label' => esc_html__( 'Blur', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'range' => array(
'px' => array(
'min' => 0,
'max' => 20,
'step' => 0.1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-section::before' => 'content: ""; width: 100%; height: 100%; position: absolute; left: 0; top: 0; -webkit-backdrop-filter: blur({{SIZE}}{{UNIT}}); backdrop-filter: blur({{SIZE}}{{UNIT}}); border-radius: inherit; background-color: inherit;',
),
)
);
$section->end_controls_section();
$section->start_controls_section(
'jkit_sticky_element_section',
array(
'label' => ' ' . esc_html__( 'Sticky Element', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$section->add_control(
'jkit_sticky_section',
array(
'label' => esc_html__( 'Enable Sticky Element', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'enabled',
'prefix_class' => 'jkit-sticky-element--',
)
);
$breakpoint_option = array( 'desktop' => 'Desktop' );
foreach ( jkit_get_responsive_breakpoints() as $list ) {
$breakpoint_option[ $list['key'] ] = ucwords( $list['key'] );
}
$section->add_control(
'jkit_sticky_device',
array(
'label' => esc_html__( 'Device', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT2,
'options' => $breakpoint_option,
'multiple' => true,
'default' => 'desktop',
'frontend_available' => true,
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
'label_block' => true,
)
);
$section->add_control(
'jkit_sticky_trigger',
array(
'label' => esc_html__( 'Sticky Trigger', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT,
'default' => 'down',
'options' => array(
'up' => esc_html__( 'On Scroll Up', 'jeg-elementor-kit' ),
'down' => esc_html__( 'On Scroll Down', 'jeg-elementor-kit' ),
'both' => esc_html__( 'On Both', 'jeg-elementor-kit' ),
),
'prefix_class' => 'jkit-sticky-element-on--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$section->add_control(
'jkit_sticky_position',
array(
'label' => esc_html__( 'Sticky Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT,
'default' => 'sticky',
'options' => array(
'sticky' => esc_html__( 'Sticky', 'jeg-elementor-kit' ),
'fixed' => esc_html__( 'Fixed', 'jeg-elementor-kit' ),
),
'prefix_class' => 'jkit-sticky-position--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger!' => 'both',
),
)
);
$section->add_control(
'jkit_sticky_top_position',
array(
'label' => esc_html__( 'Top Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 500,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'size' => 0,
'unit' => 'px',
),
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down' => 'top: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'top: {{SIZE}}{{UNIT}};',
'#wpadminbar ~ {{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down, #wpadminbar ~ * {{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down' => 'top: calc({{SIZE}}{{UNIT}} + var(--wpadminbar-height, 0px));',
'#wpadminbar ~ {{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both, #wpadminbar ~ * {{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'top: calc({{SIZE}}{{UNIT}} + var(--wpadminbar-height, 0px));',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger' => array( 'down', 'both' ),
),
'frontend_available' => true,
)
);
$section->add_control(
'jkit_sticky_bottom_position',
array(
'label' => esc_html__( 'Bottom Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 500,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'size' => 0,
'unit' => 'px',
),
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--up' => 'bottom: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'bottom: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger' => array( 'up', 'both' ),
),
'frontend_available' => true,
)
);
$section->add_control(
'jkit_sticky_background_color',
array(
'label' => esc_html__( 'Background Color', 'jeg-elementor-kit' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned' => 'background-color: {{VALUE}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$section->add_control(
'jkit_sticky_hide_on_scroll',
array(
'label' => esc_html__( 'Hide on Scroll', 'jeg-elementor-klit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'hide-on-scroll',
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => 'opacity: 0; pointer-events: none; cursor: default; transform: translate(var(--x-axis-animations, 0), var(--y-axis-animations, 0));',
),
'prefix_class' => 'jkit-sticky-element--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$section->add_control(
'jkit_sticky_hide_threshold',
array(
'label' => esc_html__( 'Scroll Threshold', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'threshold',
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled' => 'position: -webkit-sticky; position: sticky; height: fit-content;',
),
'prefix_class' => 'jkit-sticky-element--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$section->add_control(
'jkit_sticky_x_axis_animation',
array(
'label' => esc_html__( 'X Axis Animation', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%', 'em' ),
'range' => array(
'px' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'%' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'em' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => '--x-axis-animations: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$section->add_control(
'jkit_sticky_y_axis_animation',
array(
'label' => esc_html__( 'Y Axis Animation', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%', 'em' ),
'range' => array(
'px' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'%' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'em' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => '--y-axis-animations: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$section->add_control(
'jkit_sticky_transition',
array(
'label' => esc_html__( 'Transition', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'default' => array(
'size' => 0.1,
),
'range' => array(
'px' => array(
'max' => 3,
'step' => 0.1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned' => 'transition: margin {{SIZE}}s, padding {{SIZE}}s, background {{SIZE}}s, box-shadow {{SIZE}}s, transform {{SIZE}}s, opacity {{SIZE}}s;',
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled' => 'transition: margin {{SIZE}}s, padding {{SIZE}}s, background {{SIZE}}s, box-shadow {{SIZE}}s, transform {{SIZE}}s, opacity {{SIZE}}s;',
),
'conditions' => array(
'relation' => 'and',
'terms' => array(
array(
'name' => 'jkit_sticky_section',
'operator' => '===',
'value' => 'enabled',
),
array(
'relation' => 'or',
'terms' => array(
array(
'name' => 'jkit_sticky_background_color',
'operator' => '!==',
'value' => '',
),
array(
'name' => 'jkit_sticky_hide_on_scroll',
'operator' => '===',
'value' => 'hide-on-scroll',
),
),
),
),
),
)
);
$section->add_control(
'jkit_sticky_zindex',
array(
'label' => esc_html__( 'Z-Index', 'jeg-elementor-kit' ),
'type' => Controls_Manager::NUMBER,
'default' => 100,
'min' => 0,
'max' => 9999,
'step' => 1,
'selectors' => array(
'{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled' => 'z-index: {{VALUE}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$section->add_group_control(
\Elementor\Group_Control_Box_Shadow::get_type(),
array(
'name' => 'jkit_sticky_shadow',
'label' => esc_html__( 'Box Shadow', 'jeg-elementor-kit' ),
'selector' => '{{WRAPPER}}.elementor-section.jkit-sticky-element--enabled.sticky-pinned',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$section->end_controls_section();
}
/**
* Add custom option to elementor containers
*
* @param \Elementor\Element_Base $container The edited element.
* @param array $args The args that sent to $element->start_controls_section.
*/
public function add_container_options( $container, $args ) {
$container->start_controls_section(
'jkit_glass_blur_section',
array(
'label' => ' ' . esc_html__( 'Glass Blur Effect', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$container->add_responsive_control(
'jkit_glass_blur_level',
array(
'label' => esc_html__( 'Blur', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'range' => array(
'px' => array(
'min' => 0,
'max' => 20,
'step' => 0.1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex::before' => 'content: ""; width: 100%; height: 100%; position: absolute; left: 0; top: 0; -webkit-backdrop-filter: blur({{SIZE}}{{UNIT}}); backdrop-filter: blur({{SIZE}}{{UNIT}}); border-radius: inherit; background-color: inherit;',
),
)
);
$container->end_controls_section();
$container->start_controls_section(
'jkit_sticky_element_section',
array(
'label' => ' ' . esc_html__( 'Sticky Element', 'jeg-elementor-kit' ),
'tab' => Controls_Manager::TAB_ADVANCED,
)
);
$container->add_control(
'jkit_sticky_section',
array(
'label' => esc_html__( 'Enable Sticky Element', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'enabled',
'prefix_class' => 'jkit-sticky-element--',
)
);
$breakpoint_option = array( 'desktop' => 'Desktop' );
foreach ( jkit_get_responsive_breakpoints() as $list ) {
$breakpoint_option[ $list['key'] ] = ucwords( $list['key'] );
}
$container->add_control(
'jkit_sticky_device',
array(
'label' => esc_html__( 'Device', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT2,
'options' => $breakpoint_option,
'multiple' => true,
'default' => 'desktop',
'frontend_available' => true,
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
'label_block' => true,
)
);
$container->add_control(
'jkit_sticky_trigger',
array(
'label' => esc_html__( 'Sticky Trigger', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT,
'default' => 'down',
'options' => array(
'up' => esc_html__( 'On Scroll Up', 'jeg-elementor-kit' ),
'down' => esc_html__( 'On Scroll Down', 'jeg-elementor-kit' ),
'both' => esc_html__( 'On Both', 'jeg-elementor-kit' ),
),
'prefix_class' => 'jkit-sticky-element-on--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$container->add_control(
'jkit_sticky_position',
array(
'label' => esc_html__( 'Sticky Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SELECT,
'default' => 'sticky',
'options' => array(
'sticky' => esc_html__( 'Sticky', 'jeg-elementor-kit' ),
'fixed' => esc_html__( 'Fixed', 'jeg-elementor-kit' ),
),
'prefix_class' => 'jkit-sticky-position--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger!' => 'both',
),
)
);
$container->add_control(
'jkit_sticky_top_position',
array(
'label' => esc_html__( 'Top Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 500,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'size' => 0,
'unit' => 'px',
),
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down' => 'top: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'top: {{SIZE}}{{UNIT}};',
'#wpadminbar ~ {{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down, #wpadminbar ~ * {{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--down' => 'top: calc({{SIZE}}{{UNIT}} + var(--wpadminbar-height, 0px));',
'#wpadminbar ~ {{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both, #wpadminbar ~ * {{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'top: calc({{SIZE}}{{UNIT}} + var(--wpadminbar-height, 0px));',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger' => array( 'down', 'both' ),
),
'frontend_available' => true,
)
);
$container->add_control(
'jkit_sticky_bottom_position',
array(
'label' => esc_html__( 'Bottom Position', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 500,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'size' => 0,
'unit' => 'px',
),
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--up' => 'bottom: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.jkit-sticky-element-on--both' => 'bottom: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_trigger' => array( 'up', 'both' ),
),
'frontend_available' => true,
)
);
$container->add_control(
'jkit_sticky_background_color',
array(
'label' => esc_html__( 'Background Color', 'jeg-elementor-kit' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned' => 'background-color: {{VALUE}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$container->add_control(
'jkit_sticky_hide_on_scroll',
array(
'label' => esc_html__( 'Hide on Scroll', 'jeg-elementor-klit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'hide-on-scroll',
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => 'opacity: 0; pointer-events: none; cursor: default; transform: translate(var(--x-axis-animations, 0), var(--y-axis-animations, 0));',
),
'prefix_class' => 'jkit-sticky-element--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$container->add_control(
'jkit_sticky_hide_threshold',
array(
'label' => esc_html__( 'Scroll Threshold', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SWITCHER,
'return_value' => 'threshold',
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled' => 'position: -webkit-sticky; position: sticky; height: fit-content;',
),
'prefix_class' => 'jkit-sticky-element--',
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$container->add_control(
'jkit_sticky_x_axis_animation',
array(
'label' => esc_html__( 'X Axis Animation', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%', 'em' ),
'range' => array(
'px' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'%' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'em' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => '--x-axis-animations: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$container->add_control(
'jkit_sticky_y_axis_animation',
array(
'label' => esc_html__( 'Y Axis Animation', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%', 'em' ),
'range' => array(
'px' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'%' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
'em' => array(
'max' => 200,
'min' => -200,
'step' => 1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned.hide-sticky' => '--y-axis-animations: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
'jkit_sticky_hide_on_scroll' => 'hide-on-scroll',
),
)
);
$container->add_control(
'jkit_sticky_transition',
array(
'label' => esc_html__( 'Transition', 'jeg-elementor-kit' ),
'type' => Controls_Manager::SLIDER,
'default' => array(
'size' => 0.1,
),
'range' => array(
'px' => array(
'max' => 3,
'step' => 0.1,
),
),
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned' => 'transition: margin {{SIZE}}s, padding {{SIZE}}s, background {{SIZE}}s, box-shadow {{SIZE}}s, transform {{SIZE}}s, opacity {{SIZE}}s;',
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled' => 'transition: margin {{SIZE}}s, padding {{SIZE}}s, background {{SIZE}}s, box-shadow {{SIZE}}s, transform {{SIZE}}s, opacity {{SIZE}}s;',
),
'conditions' => array(
'relation' => 'and',
'terms' => array(
array(
'name' => 'jkit_sticky_section',
'operator' => '===',
'value' => 'enabled',
),
array(
'relation' => 'or',
'terms' => array(
array(
'name' => 'jkit_sticky_background_color',
'operator' => '!==',
'value' => '',
),
array(
'name' => 'jkit_sticky_hide_on_scroll',
'operator' => '===',
'value' => 'hide-on-scroll',
),
),
),
),
),
)
);
$container->add_control(
'jkit_sticky_zindex',
array(
'label' => esc_html__( 'Z-Index', 'jeg-elementor-kit' ),
'type' => Controls_Manager::NUMBER,
'default' => 100,
'min' => 0,
'max' => 9999,
'step' => 1,
'selectors' => array(
'{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled' => 'z-index: {{VALUE}};',
),
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$container->add_group_control(
\Elementor\Group_Control_Box_Shadow::get_type(),
array(
'name' => 'jkit_sticky_shadow',
'label' => esc_html__( 'Box Shadow', 'jeg-elementor-kit' ),
'selector' => '{{WRAPPER}}.elementor-element.e-flex.jkit-sticky-element--enabled.sticky-pinned',
'condition' => array(
'jkit_sticky_section' => 'enabled',
),
)
);
$container->end_controls_section();
}
/**
* Enqueue The Script of Section
*
* @param \Elementor\Controls_Stack $class The edited element.
* @param string $section_id The ID of Section.
*/
public function enqueue_scripts() {
wp_enqueue_script( 'jkit-sticky-element' );
}
}