<?php if ( ! defined( 'ABSPATH' ) ) {exit;} // Exit if accessed directly. use Elementor\Repeater; use Elementor\Widget_Base; use Elementor\Controls_Manager; class Xtra_Elementor_Widget_carousel extends Widget_Base { protected $id = 'cz_carousel'; public function get_name() { return $this->id; } public function get_title() { return esc_html__( 'Carousel', 'codevz' ); } public function get_icon() { return 'xtra-carousel'; } public function get_categories() { return [ 'xtra' ]; } public function get_keywords() { return [ esc_html__( 'XTRA', 'codevz' ), esc_html__( 'Carousel', 'codevz' ), esc_html__( 'Slider', 'codevz' ), ]; } public function get_style_depends() { return [ $this->id, 'cz_parallax' ]; } public function get_script_depends() { return [ $this->id, 'cz_parallax' ]; } protected function register_controls() { $free = Codevz_Plus::is_free(); // General $this->start_controls_section( 'section_carousel', [ 'label' => esc_html__( 'Carousel', 'codevz' ), ] ); $repeater = new Repeater(); $repeater->add_control( 'type', [ 'label' => esc_html__( 'Content type', 'codevz' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Content', 'codevz' ), 'template' => esc_html__( 'Saved template', 'codevz' ), ] ] ); $repeater->add_control( 'xtra_elementor_template', [ 'label' => esc_html__( 'Select template', 'codevz' ), 'type' => Controls_Manager::SELECT, 'options' => Xtra_Elementor::get_templates(), 'condition' => [ 'type' => 'template' ], ] ); $repeater->add_responsive_control( 'sk_slide', [ 'label' => esc_html__( 'Slide Style', 'codevz' ), 'type' => $free ? 'stylekit_pro' : 'stylekit', 'settings' => [ 'color', 'font-size', 'background', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '{{CURRENT_ITEM}}' ) ] ); $repeater->add_control( 'content', [ 'label' => esc_html__( 'Content', 'codevz' ), 'type' => Controls_Manager::WYSIWYG, 'default' => 'Hello World ...', 'placeholder' => 'Hello World ...', 'condition' => [ 'type' => '' ], ] ); $this->add_control( 'items', [ 'label' => esc_html__( 'Add Slide(s)', 'codevz' ), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls() ] ); $this->add_responsive_control( 'slidestoshow', [ 'label' => esc_html__( 'Slides to show', 'codevz' ), 'type' => Controls_Manager::NUMBER, 'min' => 1, 'max' => 10, 'step' => 1, 'default' => 3, 'tablet_default' => 2, 'mobile_default' => 1, ] ); $this->add_responsive_control( 'slidestoscroll', [ 'label' => esc_html__( 'Slides to scroll', 'codevz' ), 'type' => Controls_Manager::NUMBER, 'min' => 1, 'max' => 10, 'step' => 1, 'default' => 1, ] ); $this->add_responsive_control( 'gap', [ 'label' => esc_html__( 'Slides gap', 'codevz' ), 'type' => Controls_Manager::SLIDER, 'default' => [ 'unit' => 'px', 'size' => 10, ], 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 100, 'step' => 1 ] ], 'selectors' => [ '{{WRAPPER}} .slick-list' => 'margin: 0 -calc({{SIZE}}{{UNIT}} / 2);clip-path:inset(0 calc({{SIZE}}{{UNIT}} / 2) 0 calc({{SIZE}}{{UNIT}} / 2));', '{{WRAPPER}} .slick-slide' => 'margin: 0 calc({{SIZE}}{{UNIT}} / 2);', ], ] ); $this->add_control( 'infinite', [ 'label' => esc_html__( 'Infinite?', 'codevz' ), 'type' => Controls_Manager::SWITCHER, ] ); $this->add_control( 'autoplay', [ 'label' => esc_html__( 'Auto play?', 'codevz' ), 'type' => Controls_Manager::SWITCHER, ] ); $this->add_control( 'autoplayspeed', [ 'label' => esc_html__( 'Autoplay delay (ms)', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::NUMBER, 'default' => 4000, 'min' => 1000, 'max' => 6000, 'step' => 500, 'condition' => [ 'autoplay!' => '' ] ] ); $this->add_control( 'centermode', [ 'label' => esc_html__( 'Center mode?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, ] ); $this->add_control( 'centerpadding', [ 'label' => esc_html__( 'Center padding', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 100, 'step' => 1, ], ], 'condition' => [ 'centermode!' => '' ] ] ); $this->end_controls_section(); //Arrows $this->start_controls_section( 'section_arrows', [ 'label' => esc_html__( 'Arrows', 'codevz' ), ] ); $this->add_control( 'arrows_position', [ 'label' => esc_html__( 'Arrows position', 'codevz' ), 'type' => Controls_Manager::SELECT, 'default' => 'arrows_mlr', 'options' => [ 'no_arrows' => esc_html__( 'None', 'codevz' ), 'arrows_tl' => esc_html__( 'Both top left', 'codevz' ), 'arrows_tc' => esc_html__( 'Both top center', 'codevz' ), 'arrows_tr' => esc_html__( 'Both top right', 'codevz' ), 'arrows_tlr' => esc_html__( 'Top left / right', 'codevz' ), 'arrows_mlr' => esc_html__( 'Middle left / right', 'codevz' ), 'arrows_blr' => esc_html__( 'Bottom left / right', 'codevz' ), 'arrows_bl' => esc_html__( 'Both bottom left', 'codevz' ), 'arrows_bc' => esc_html__( 'Both bottom center', 'codevz' ), 'arrows_br' => esc_html__( 'Both bottom right', 'codevz' ), ], ] ); $this->add_control( 'arrows_inner', [ 'label' => esc_html__( 'Arrows inside carousel?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, 'condition' => [ 'arrows_position' => [ 'arrows_tl', 'arrows_tc', 'arrows_tr', 'arrows_tlr', 'arrows_mlr', 'arrows_blr', 'arrows_bl', 'arrows_bc', 'arrows_br', ], ], ] ); $this->add_control( 'arrows_show_on_hover', [ 'label' => esc_html__( 'Show on hover?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, 'condition' => [ 'arrows_position' => [ 'arrows_tl', 'arrows_tc', 'arrows_tr', 'arrows_tlr', 'arrows_mlr', 'arrows_blr', 'arrows_bl', 'arrows_bc', 'arrows_br', ], ], ] ); $this->add_control( 'prev_icon', [ 'label' => esc_html__( 'Previous icon', 'codevz' ), 'type' => Controls_Manager::ICONS, 'skin' => 'inline', 'label_block' => false, 'default' => [ 'value' => 'fa fa-chevron-left', 'library' => 'solid', ], 'condition' => [ 'arrows_position' => [ 'arrows_tl', 'arrows_tc', 'arrows_tr', 'arrows_tlr', 'arrows_mlr', 'arrows_blr', 'arrows_bl', 'arrows_bc', 'arrows_br', ], ], ] ); $this->add_control( 'next_icon', [ 'label' => esc_html__( 'Next icon', 'codevz' ), 'type' => Controls_Manager::ICONS, 'skin' => 'inline', 'label_block' => false, 'default' => [ 'value' => 'fa fa-chevron-right', 'library' => 'solid', ], 'condition' => [ 'arrows_position' => [ 'arrows_tl', 'arrows_tc', 'arrows_tr', 'arrows_tlr', 'arrows_mlr', 'arrows_blr', 'arrows_bl', 'arrows_bc', 'arrows_br', ], ], ] ); $this->end_controls_section(); // Dots $this->start_controls_section( 'section_counts', [ 'label' => esc_html__( 'Counts', 'codevz' ), ] ); $this->add_control( 'counts', [ 'label' => esc_html__( 'Counts', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER ] ); $this->end_controls_section(); // Dots $this->start_controls_section( 'section_dots', [ 'label' => esc_html__( 'Dots', 'codevz' ), ] ); $this->add_control( 'dots_position', [ 'label' => esc_html__( 'Dots position', 'codevz' ), 'type' => Controls_Manager::SELECT, 'default' => 'no_dots', 'options' => [ 'no_dots' => esc_html__( 'None', 'codevz' ), 'dots_tl' => esc_html__( 'Top left', 'codevz' ), 'dots_tc' => esc_html__( 'Top center', 'codevz' ), 'dots_tr' => esc_html__( 'Top right', 'codevz' ), 'dots_bl' => esc_html__( 'Bottom left', 'codevz' ), 'dots_bc' => esc_html__( 'Bottom center', 'codevz' ), 'dots_br' => esc_html__( 'Bottom right', 'codevz' ), 'dots_vtl' => esc_html__( 'Vertical top left', 'codevz' ), 'dots_vml' => esc_html__( 'Vertical middle left', 'codevz' ), 'dots_vbl' => esc_html__( 'Vertical bottom left', 'codevz' ), 'dots_vtr' => esc_html__( 'Vertical top right', 'codevz' ), 'dots_vmr' => esc_html__( 'Vertical middle rigth', 'codevz' ), 'dots_vbr' => esc_html__( 'Vertical bottom right', 'codevz' ), ], ] ); $this->add_control( 'dots_style', [ 'label' => esc_html__( 'Predefined style', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SELECT, 'options' => [ '' => esc_html__( '~ Default ~', 'codevz' ), 'dots_circle' => esc_html__( 'Circle', 'codevz' ), 'dots_circle dots_circle_2' => esc_html__( 'Circle 2', 'codevz' ), 'dots_circle_outline' => esc_html__( 'Circle outline', 'codevz' ), 'dots_square' => esc_html__( 'Square', 'codevz' ), 'dots_lozenge' => esc_html__( 'Lozenge', 'codevz' ), 'dots_tiny_line' => esc_html__( 'Tiny line', 'codevz' ), 'dots_drop' => esc_html__( 'Drop', 'codevz' ), ], 'condition' => [ 'dots_position' => [ 'dots_tl', 'dots_tc', 'dots_tr', 'dots_bl', 'dots_bc', 'dots_br', 'dots_vtl', 'dots_vml', 'dots_vbl', 'dots_vtr', 'dots_vmr', 'dots_vbr', ], ], ] ); $this->add_control( 'dots_inner', [ 'label' => esc_html__( 'Dots inside carousel?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, 'condition' => [ 'dots_position' => [ 'dots_tl', 'dots_tc', 'dots_tr', 'dots_bl', 'dots_bc', 'dots_br', 'dots_vtl', 'dots_vml', 'dots_vbl', 'dots_vtr', 'dots_vmr', 'dots_vbr', ], ], ] ); $this->add_control( 'dots_show_on_hover', [ 'label' => esc_html__( 'Show on hover?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, 'condition' => [ 'dots_position' => [ 'dots_tl', 'dots_tc', 'dots_tr', 'dots_bl', 'dots_bc', 'dots_br', 'dots_vtl', 'dots_vml', 'dots_vbl', 'dots_vtr', 'dots_vmr', 'dots_vbr', ], ], ] ); $this->end_controls_section(); //Column $this->start_controls_section( 'section_more_settings', [ 'label' => esc_html__( 'More settings', 'codevz' ), ] ); $this->add_control( 'overflow_visible', [ 'label' => esc_html__( 'Overflow visible?', 'codevz' ), 'type' => Controls_Manager::SWITCHER, ] ); $this->add_control( 'fade', [ 'label' => esc_html__( 'Fade mode?', 'codevz' ), 'description' => esc_html__('Only works when slide to show is 1', 'codevz'), 'type' => Controls_Manager::SWITCHER, ] ); $this->add_control( 'mousewheel', [ 'label' => esc_html__( 'MouseWheel?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, ] ); $this->add_control( 'disable_links', [ 'label' => esc_html__( 'Disable slides links?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, ] ); $this->add_control( 'variablewidth', [ 'label' => esc_html__( 'Auto width detection?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, ] ); $this->add_control( 'vertical', [ 'label' => esc_html__( 'Vertical?', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SWITCHER, ] ); $this->add_control( 'rows', [ 'label' => esc_html__( 'Number of rows', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::NUMBER, 'min' => 1, 'max' => 5, 'step' => 1, ] ); $this->add_control( 'even_odd', [ 'label' => esc_html__( 'Custom position', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::SELECT, 'default' => '', 'options' => [ '' => esc_html__( 'Select', 'codevz' ), 'even_odd' => esc_html__( 'Even / Odd', 'codevz' ), 'odd_even' => esc_html__( 'Odd / Even', 'codevz' ), ], ] ); $this->add_control( 'selector', [ 'label' => esc_html__( 'Sync class', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::TEXT ] ); $this->add_control( 'sync', [ 'label' => esc_html__( 'Sync to', 'codevz' ), 'type' => $free ? 'codevz_pro' : Controls_Manager::TEXT ] ); $this->end_controls_section(); // Parallax settings. Xtra_Elementor::parallax_settings( $this ); $this->start_controls_section( 'section_style', [ 'label' => esc_html__( 'Style', 'codevz' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'sk_overall', [ 'label' => esc_html__( 'Container', 'codevz' ), 'type' => 'stylekit', 'settings' => [ 'background', 'padding', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.slick' ), ] ); $this->add_responsive_control( 'sk_slides', [ 'label' => esc_html__( 'Slides', 'codevz' ), 'type' => 'stylekit', 'settings' => [ 'grayscale', 'blur', 'background', 'opacity', 'z-index', 'padding', 'margin', 'border', 'box-shadow' ], 'selectors' => Xtra_Elementor::sk_selectors( 'div.slick-slide' ), ] ); $this->add_responsive_control( 'sk_center', [ 'label' => esc_html__( 'Center slide', 'codevz' ), 'type' => $free ? 'stylekit_pro' : 'stylekit', 'settings' => [ 'grayscale', 'background', 'opacity', 'z-index', 'padding', 'margin', 'border', 'box-shadow' ], 'selectors' => Xtra_Elementor::sk_selectors( 'div.slick-center' ), ] ); $this->add_responsive_control( 'sk_prev_icon', [ 'label' => esc_html__( 'Previous icon', 'codevz' ), 'type' => 'stylekit', 'settings' => [ 'color', 'font-size', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.slick-prev' ) ] ); $this->add_responsive_control( 'sk_next_icon', [ 'label' => esc_html__( 'Next icon', 'codevz' ), 'type' => 'stylekit', 'settings' => [ 'color', 'font-size', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.slick-next' ) ] ); $this->add_responsive_control( 'sk_dots_container', [ 'label' => esc_html__( 'Dots container', 'codevz' ), 'type' => 'stylekit', 'settings' => [ 'color', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.slick-dots' ), 'condition' => [ 'dots_position' => [ 'dots_tl', 'dots_tc', 'dots_tr', 'dots_bl', 'dots_bc', 'dots_br', 'dots_vtl', 'dots_vml', 'dots_vbl', 'dots_vtr', 'dots_vmr', 'dots_vbr', ], ], ] ); $this->add_responsive_control( 'sk_dots', [ 'label' => esc_html__( 'Dots', 'codevz' ), 'type' => 'stylekit', 'settings' => [ 'color', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.slick-dots li button' ), 'condition' => [ 'dots_position' => [ 'dots_tl', 'dots_tc', 'dots_tr', 'dots_bl', 'dots_bc', 'dots_br', 'dots_vtl', 'dots_vml', 'dots_vbl', 'dots_vtr', 'dots_vmr', 'dots_vbr', ], ], ] ); $this->add_responsive_control( 'sk_counts', [ 'label' => esc_html__( 'Counts', 'codevz' ), 'type' => $free ? 'stylekit_pro' : 'stylekit', 'settings' => [ 'color', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.xtra-slick-counts' ), 'condition' => [ 'counts!' => '', ], ] ); $this->add_responsive_control( 'sk_counts_numbers', [ 'label' => esc_html__( 'Counts numbers', 'codevz' ), 'type' => $free ? 'stylekit_pro' : 'stylekit', 'settings' => [ 'color', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.xtra-slick-counts .xtra-slick-current, .xtra-slick-counts .xtra-slick-all' ), 'condition' => [ 'counts!' => '', ], ] ); $this->add_responsive_control( 'sk_counts_seperator', [ 'label' => esc_html__( 'Counts seperator', 'codevz' ), 'type' => $free ? 'stylekit_pro' : 'stylekit', 'settings' => [ 'color', 'background', 'padding', 'margin', 'border' ], 'selectors' => Xtra_Elementor::sk_selectors( '.xtra-slick-counts .xtra-slick-seperator' ), 'condition' => [ 'counts!' => '', ], ] ); $this->end_controls_section(); } public function render() { $settings = $this->get_settings_for_display(); Xtra_Elementor::carousel_elementor( $settings ); } }