* @version * @since * @license */ namespace AbsoluteAddons; use Elementor\Controls_Manager; use Elementor\Controls_Stack; if ( ! defined( 'ABSPATH' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); die(); } trait Absp_Slider_Controller { /** * Render Slider Controls. * * @param array $options */ protected function render_slider_controller( $options = [] ) { $defaults = [ 'section' => [ 'condition' => [], 'conditions' => [], ], 'slides_to_show' => [ 'min' => 1, 'max' => 8, 'default' => 3, 'device_args' => [ Controls_Stack::RESPONSIVE_TABLET => [ 'required' => false, 'default' => 2, ], Controls_Stack::RESPONSIVE_MOBILE => [ 'required' => false, 'default' => 1, ], ], ], 'slides_to_scroll' => [ 'min' => 1, 'max' => 8, 'default' => 1, 'device_args' => [ Controls_Stack::RESPONSIVE_TABLET => [ 'required' => false, 'default' => 1, ], Controls_Stack::RESPONSIVE_MOBILE => [ 'required' => false, 'default' => 1, ], ], ], 'autoplay' => 'yes', 'slides_loop' => 'true', 'autoplay_delay' => [ 'min' => '', 'max' => '', 'default' => 5000, ], 'spacing_between' => [ 'range' => [ 'px' => [ 'max' => 100, ], ], 'default' => [ 'size' => 5, ], ], 'direction' => 'ltr', 'effect' => 'slide', 'navigation' => 'dots', 'arrows_position' => 'inside', 'arrows_color' => [ 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-prev, {{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-next' => 'color: {{VALUE}};', ], ], 'arrows_color_hover' => [ 'default' => '', 'selectors' => [ '{{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-prev:hover, {{WRAPPER}} .elementor-swiper-button.elementor-swiper-button-next:hover' => 'color: {{VALUE}};', ], ], 'dots_position' => 'outside', 'dots_position_prefix_class' => '', 'dots_color' => [ 'default' => '', 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet' => 'background: {{VALUE}};', ], ], 'dots_border_color' => [ 'default' => '', 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet' => 'border-color: {{VALUE}};', ], ], 'dots_active_color' => [ 'default' => '', 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet.swiper-pagination-bullet-active' => 'background: {{VALUE}};', ], ], 'dots_active_border_color' => [ 'default' => '', 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet.swiper-pagination-bullet-active' => 'border-color: {{VALUE}};', ], ], 'dots_size' => [ 'range' => [ 'px' => [ 'min' => 5, 'max' => 20, ], ], 'selectors' => [ '{{WRAPPER}} .swiper-pagination-bullet' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', ], ], ]; $options = absp_parse_args_recursive( $options, $defaults ); $this->start_controls_section( 'absp_section_slider', [ 'label' => esc_html__( 'Slider Options', 'absolute-addons' ), 'tab' => Controls_Manager::TAB_CONTENT, 'condition' => $options['section']['condition'], 'conditions' => $options['section']['conditions'], ] ); $this->add_responsive_control( 'slides_to_show', [ 'label' => esc_html__( 'Slides To Show', 'absolute-addons' ), 'type' => Controls_Manager::NUMBER, 'min' => $options['slides_to_show']['min'], 'max' => $options['slides_to_show']['max'], 'default' => $options['slides_to_show']['default'], 'required' => true, 'device_args' => $options['slides_to_show']['device_args'], ] ); $this->add_responsive_control( 'slides_to_scroll', [ 'label' => esc_html__( 'Slides to Scroll', 'absolute-addons' ), 'description' => esc_html__( 'Set how many slides are scrolled per swipe.', 'absolute-addons' ), 'type' => Controls_Manager::NUMBER, 'min' => $options['slides_to_scroll']['min'], 'max' => $options['slides_to_scroll']['max'], 'default' => $options['slides_to_scroll']['default'], 'required' => true, 'device_args' => $options['slides_to_scroll']['device_args'], ] ); $this->add_control( 'autoplay', [ 'label' => esc_html__( 'Autoplay', 'absolute-addons' ), 'type' => Controls_Manager::SELECT, 'default' => $options['autoplay'], 'options' => [ 'yes' => esc_html__( 'Yes', 'absolute-addons' ), 'no' => esc_html__( 'No', 'absolute-addons' ), ], ] ); $this->add_control( 'slides_loop', [ 'label' => esc_html__( 'Loop', 'absolute-addons' ), 'type' => Controls_Manager::SELECT, 'default' => $options['slides_loop'], 'options' => [ 'true' => esc_html__( 'Yes', 'absolute-addons' ), 'false' => esc_html__( 'No', 'absolute-addons' ), ], ] ); $this->add_control( 'autoplay_delay', [ 'label' => esc_html__( 'Autoplay Speed (ms)', 'absolute-addons' ), 'type' => Controls_Manager::NUMBER, 'min' => $options['autoplay_delay']['min'], 'max' => $options['autoplay_delay']['max'], 'default' => $options['autoplay_delay']['default'], 'condition' => [ 'autoplay' => 'yes', ], ] ); $this->add_control( 'spacing_between', [ 'label' => esc_html__( 'Distance between slides in px', 'absolute-addons' ), 'type' => Controls_Manager::SLIDER, 'range' => $options['spacing_between']['range'], 'default' => $options['spacing_between']['default'], ] ); $this->add_control( 'direction', [ 'label' => esc_html__( 'Direction', 'absolute-addons' ), 'type' => Controls_Manager::SELECT, 'default' => $options['direction'], 'options' => [ 'ltr' => esc_html__( 'Left', 'absolute-addons' ), 'rtl' => esc_html__( 'Right', 'absolute-addons' ), ], ] ); $this->add_control( 'effect', [ 'label' => esc_html__( 'Effect', 'absolute-addons' ), 'type' => Controls_Manager::SELECT, 'default' => $options['effect'], 'options' => [ 'slide' => esc_html__( 'Slide', 'absolute-addons' ), 'fade' => esc_html__( 'Fade', 'absolute-addons' ), ], 'description' => esc_html__( 'Fade effect works when "Slides to Show" is 1', 'absolute-addons' ), ] ); $this->add_control( 'navigation', [ 'label' => esc_html__( 'Navigation', 'absolute-addons' ), 'type' => Controls_Manager::SELECT, 'default' => $options['navigation'], 'options' => [ 'both' => esc_html__( 'Arrows and Dots', 'absolute-addons' ), 'arrows' => esc_html__( 'Arrows', 'absolute-addons' ), 'dots' => esc_html__( 'Dots', 'absolute-addons' ), 'none' => esc_html__( 'None', 'absolute-addons' ), ], ] ); $this->add_control( 'arrows_position', [ 'label' => esc_html__( 'Arrows Position', 'absolute-addons' ), 'type' => Controls_Manager::SELECT, 'default' => $options['arrows_position'], 'options' => [ 'inside' => esc_html__( 'Inside', 'absolute-addons' ), 'outside' => esc_html__( 'Outside', 'absolute-addons' ), ], 'prefix_class' => 'elementor-arrows-position-', 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_control( 'arrows_color', [ 'label' => esc_html__( 'Arrows Color', 'absolute-addons' ), 'type' => Controls_Manager::COLOR, 'default' => $options['arrows_color']['default'], 'selectors' => $options['arrows_color']['selectors'], 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_control( 'arrows_color_hover', [ 'label' => esc_html__( 'Arrows Hover Color', 'absolute-addons' ), 'type' => Controls_Manager::COLOR, 'default' => $options['arrows_color_hover']['default'], 'selectors' => $options['arrows_color_hover']['selectors'], 'condition' => [ 'navigation' => [ 'arrows', 'both' ], ], ] ); $this->add_control( 'dots_color', [ 'label' => esc_html__( 'Dots Color', 'absolute-addons' ), 'type' => Controls_Manager::COLOR, 'default' => $options['dots_color']['default'], 'selectors' => $options['dots_color']['selectors'], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_border_color', [ 'label' => esc_html__( 'Dots Border Color', 'absolute-addons' ), 'type' => Controls_Manager::COLOR, 'default' => $options['dots_border_color']['default'], 'selectors' => $options['dots_border_color']['selectors'], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_active_color', [ 'label' => esc_html__( 'Dots Active Color', 'absolute-addons' ), 'type' => Controls_Manager::COLOR, 'default' => $options['dots_active_color']['default'], 'selectors' => $options['dots_active_color']['selectors'], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_active_border_color', [ 'label' => esc_html__( 'Dots Active Border Color', 'absolute-addons' ), 'type' => Controls_Manager::COLOR, 'default' => $options['dots_active_border_color']['default'], 'selectors' => $options['dots_active_border_color']['selectors'], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->add_control( 'dots_size', [ 'label' => esc_html__( 'Dots Size', 'absolute-addons' ), 'type' => Controls_Manager::SLIDER, 'range' => $options['dots_size']['range'], 'selectors' => $options['dots_size']['selectors'], 'condition' => [ 'navigation' => [ 'dots', 'both' ], ], ] ); $this->end_controls_section(); } protected $slider_dot; protected $slider_next; protected $slider_prev; protected function generate_data_attrs( $settings = [], $spacing_between = 100 ) { if ( empty( $settings ) ) { $settings = $this->get_settings_for_display(); } $this->slider_dot = wp_unique_id( 'nav-dot-' ); $this->slider_next = wp_unique_id( 'nav-next-' ); $this->slider_prev = wp_unique_id( 'nav-prev-' ); if ( ( ! empty( $settings['spacing_between']['size'] ) && $settings['spacing_between']['size'] ) ) { $spacing_between = absint( $settings['spacing_between']['size'] ); } return [ 'data-slides-per-view' => esc_attr( $settings['slides_to_show'] ), 'data-slides-per-view-mobile' => esc_attr( $settings['slides_to_show_mobile'] ), 'data-slides-per-view-tablet' => esc_attr( $settings['slides_to_show_tablet'] ), 'data-slides-per-group' => esc_attr( $settings['slides_to_scroll'] ), 'data-slides-per-group-mobile' => esc_attr( $settings['slides_to_scroll_mobile'] ), 'data-slides-per-group-tablet' => esc_attr( $settings['slides_to_scroll_tablet'] ), 'data-autoplay' => esc_attr( $settings['autoplay'] ), 'data-autoplay-delay' => esc_attr( $settings['autoplay_delay'] ), 'data-effect' => esc_attr( $settings['effect'] ), 'data-slides-loop' => esc_attr( $settings['slides_loop'] ), 'dir' => esc_attr( $settings['direction'] ), 'data-space-between' => esc_attr( $spacing_between ), 'data-slides-dot' => esc_attr( $this->slider_dot ), 'data-slides-next' => esc_attr( $this->slider_next ), 'data-slides-prev' => esc_attr( $this->slider_prev ), ]; } /** * Slider Nav. * * @param array $settings settings */ protected function slider_nav( $settings = [] ) { if ( empty( $settings ) ) { $settings = $this->get_settings_for_display(); } if ( in_array( $settings['navigation'], [ 'dots', 'both' ], true ) ) { ?>