Advertisement
ikamal7

video

Nov 21st, 2020
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 74.97 KB | None | 0 0
  1. <?php
  2.     /**
  3.      * Image grid widget class
  4.      *
  5.      * @package Happy_Addons
  6.      */
  7.     // namespace Happy_Addons\Elementor\Widget;
  8.  
  9.     use Elementor\Controls_Manager;
  10.     use Elementor\Group_Control_Border;
  11.     use Elementor\Group_Control_Box_Shadow;
  12.     use Elementor\Group_Control_Css_Filter;
  13.     use Elementor\Group_Control_Image_Size;
  14.     use Elementor\Group_Control_Typography;
  15.     use Elementor\Repeater;
  16.     use Elementor\Scheme_Typography;
  17.     use Elementor\Widget_Base;
  18.     use Elementor\Modules\DynamicTags\Module as TagsModule;
  19.  
  20. defined( 'ABSPATH' ) || die();
  21.  
  22.     class CF_Video_gallery extends \Elementor\Widget_Base {
  23.        
  24.     /**
  25.      * Retrieve video gallery widget name.
  26.      *
  27.      * @access public
  28.      *
  29.      * @return string Widget name.
  30.      */
  31.     public function get_name() {
  32.         return  'CF_Video_Gallery';
  33.     }
  34.  
  35.     /**
  36.      * Retrieve video gallery widget title.
  37.      *
  38.      * @access public
  39.      *
  40.      * @return string Widget title.
  41.      */
  42.     public function get_title() {
  43.         return  'CF Video_Gallery';
  44.     }
  45.  
  46.     /**
  47.      * Retrieve video gallery widget icon.
  48.      *
  49.      * @access public
  50.      *
  51.      * @return string Widget icon.
  52.      */
  53.     public function get_icon() {
  54.         return 'far fa-play-circle';
  55.     }
  56.  
  57.     /**
  58.      * Get widget keywords.
  59.      *
  60.      * Retrieve the list of keywords the widget belongs to.
  61.      *
  62.      * @access public
  63.      *
  64.      * @return array Widget keywords.
  65.      */
  66.     public function get_keywords() {
  67.        
  68.     }
  69.  
  70.     /**
  71.      * Retrieve the list of scripts the video gallery widget depended on.
  72.      *
  73.      * Used to set scripts dependencies required to run the widget.
  74.      *
  75.      * @access public
  76.      *
  77.      * @return array Widget scripts dependencies.
  78.      */
  79.     public function get_script_depends() {
  80.         return array(
  81.             'jquery-fancybox',
  82.             'isotope',
  83.             'jquery-swiper',
  84.             'jquery-resize',
  85.             'imagesloaded',
  86.             'powerpack-frontend',
  87.         );
  88.     }
  89.  
  90.     /**
  91.      * Retrieve the list of styles the video gallery widget depended on.
  92.      *
  93.      * Used to set scripts dependencies required to run the widget.
  94.      *
  95.      * @access public
  96.      *
  97.      * @return array Widget scripts dependencies.
  98.      */
  99.     public function get_style_depends() {
  100.         return array(
  101.             'fancybox',
  102.         );
  103.     }
  104.  
  105.     /**
  106.      * Register video gallery widget controls.
  107.      *
  108.      * Adds different input fields to allow the user to change and customize the widget settings.
  109.      *
  110.      * @access protected
  111.      */
  112.     protected function _register_controls() { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
  113.         $this->register_controls();
  114.     }
  115.  
  116.     /**
  117.      * Register video gallery widget controls.
  118.      *
  119.      * Adds different input fields to allow the user to change and customize the widget settings.
  120.      *
  121.      * @since 2.0.3
  122.      * @access protected
  123.      */
  124.     protected function register_controls() {
  125.         /**
  126.          * Content Tab: Gallery
  127.          */
  128.         $this->start_controls_section(
  129.             'section_gallery',
  130.             array(
  131.                 'label' => __( 'Gallery', 'powerpack' ),
  132.             )
  133.         );
  134.  
  135.         $repeater = new Repeater();
  136.  
  137.         $repeater->add_control(
  138.             'video_source',
  139.             array(
  140.                 'label'   => __( 'Source', 'powerpack' ),
  141.                 'type'    => Controls_Manager::SELECT,
  142.                 'default' => 'youtube',
  143.                 'options' => array(
  144.                     'youtube'     => __( 'YouTube', 'powerpack' ),
  145.                     'vimeo'       => __( 'Vimeo', 'powerpack' ),
  146.                     'dailymotion' => __( 'Dailymotion', 'powerpack' ),
  147.                 ),
  148.             )
  149.         );
  150.  
  151.         $repeater->add_control(
  152.             'youtube_url',
  153.             array(
  154.                 'label'       => __( 'URL', 'powerpack' ),
  155.                 'type'        => Controls_Manager::TEXT,
  156.                 'dynamic'     => array(
  157.                     'active'     => true,
  158.                     'categories' => array(
  159.                         TagsModule::POST_META_CATEGORY,
  160.                         TagsModule::URL_CATEGORY,
  161.                     ),
  162.                 ),
  163.                 'placeholder' => __( 'Enter your YouTube URL', 'powerpack' ),
  164.                 'default'     => 'https://www.youtube.com/watch?v=9uOETcuFjbE',
  165.                 'label_block' => true,
  166.                 'condition'   => array(
  167.                     'video_source' => 'youtube',
  168.                 ),
  169.             )
  170.         );
  171.  
  172.         $repeater->add_control(
  173.             'vimeo_url',
  174.             array(
  175.                 'label'       => __( 'URL', 'powerpack' ),
  176.                 'type'        => Controls_Manager::TEXT,
  177.                 'dynamic'     => array(
  178.                     'active'     => true,
  179.                     'categories' => array(
  180.                         TagsModule::POST_META_CATEGORY,
  181.                         TagsModule::URL_CATEGORY,
  182.                     ),
  183.                 ),
  184.                 'placeholder' => __( 'Enter your Vimeo URL', 'powerpack' ),
  185.                 'default'     => 'https://vimeo.com/235215203',
  186.                 'label_block' => true,
  187.                 'condition'   => array(
  188.                     'video_source' => 'vimeo',
  189.                 ),
  190.             )
  191.         );
  192.  
  193.         $repeater->add_control(
  194.             'dailymotion_url',
  195.             array(
  196.                 'label'       => __( 'URL', 'powerpack' ),
  197.                 'type'        => Controls_Manager::TEXT,
  198.                 'dynamic'     => array(
  199.                     'active'     => true,
  200.                     'categories' => array(
  201.                         TagsModule::POST_META_CATEGORY,
  202.                         TagsModule::URL_CATEGORY,
  203.                     ),
  204.                 ),
  205.                 'placeholder' => __( 'Enter your Dailymotion URL', 'powerpack' ),
  206.                 'default'     => 'https://www.dailymotion.com/video/x6tqhqb',
  207.                 'label_block' => true,
  208.                 'condition'   => array(
  209.                     'video_source' => 'dailymotion',
  210.                 ),
  211.             )
  212.         );
  213.  
  214.         $repeater->add_control(
  215.             'filter_label',
  216.             [
  217.                 'label'                 => __( 'Filter Label', 'powerpack' ),
  218.                 'type'                  => Controls_Manager::TEXT,
  219.                 'default'               => '',
  220.                 'placeholder'           => '',
  221.                 'dynamic'               => [
  222.                     'active' => true,
  223.                 ],
  224.             ]
  225.         );
  226.  
  227.         $repeater->add_control(
  228.             'video_title',
  229.             [
  230.                 'label'                 => __( 'Video Title', 'powerpack' ),
  231.                 'type'                  => Controls_Manager::TEXT,
  232.                 'label_block'           => true,
  233.                 'default'               => '',
  234.                 'placeholder'           => '',
  235.                 'dynamic'               => [
  236.                     'active' => true,
  237.                 ],
  238.             ]
  239.         );
  240.  
  241.         $repeater->add_control(
  242.             'video_description',
  243.             [
  244.                 'label'                 => __( 'Description', 'powerpack' ),
  245.                 'type'                  => Controls_Manager::TEXTAREA,
  246.                 'label_block'           => true,
  247.                 'rows'                  => 3,
  248.                 'default'               => '',
  249.                 'placeholder'           => '',
  250.                 'dynamic'               => [
  251.                     'active' => true,
  252.                 ],
  253.             ]
  254.         );
  255.  
  256.         $repeater->add_control(
  257.             'thumbnail_size',
  258.             [
  259.                 'label'                 => __( 'Thumbnail Size', 'powerpack' ),
  260.                 'type'                  => Controls_Manager::SELECT,
  261.                 'default'               => 'maxresdefault',
  262.                 'options'               => [
  263.                     'maxresdefault' => __( 'Maximum Resolution', 'powerpack' ),
  264.                     'hqdefault'     => __( 'High Quality', 'powerpack' ),
  265.                     'mqdefault'     => __( 'Medium Quality', 'powerpack' ),
  266.                     'sddefault'     => __( 'Standard Quality', 'powerpack' ),
  267.                 ],
  268.                 'conditions'            => [
  269.                     'terms' => [
  270.                         [
  271.                             'name'      => 'video_source',
  272.                             'operator'  => '==',
  273.                             'value'     => 'youtube',
  274.                         ],
  275.                     ],
  276.                 ],
  277.             ]
  278.         );
  279.  
  280.         $repeater->add_control(
  281.             'custom_thumbnail',
  282.             [
  283.                 'label'                 => __( 'Custom Thumbnail', 'powerpack' ),
  284.                 'type'                  => Controls_Manager::SWITCHER,
  285.                 'default'               => '',
  286.             ]
  287.         );
  288.  
  289.         $repeater->add_control(
  290.             'custom_image',
  291.             [
  292.                 'label'                 => __( 'Image', 'powerpack' ),
  293.                 'type'                  => Controls_Manager::MEDIA,
  294.                 'default'               => [
  295.                     'url' => Utils::get_placeholder_image_src(),
  296.                 ],
  297.                 'dynamic'               => array(
  298.                     'active' => true,
  299.                 ),
  300.                 'conditions'            => [
  301.                     'terms' => [
  302.                         [
  303.                             'name'      => 'custom_thumbnail',
  304.                             'operator'  => '==',
  305.                             'value'     => 'yes',
  306.                         ],
  307.                     ],
  308.                 ],
  309.             ]
  310.         );
  311.  
  312.         $this->add_control(
  313.             'gallery_videos',
  314.             array(
  315.                 'label'       => '',
  316.                 'type'        => Controls_Manager::REPEATER,
  317.                 'default'     => array(
  318.                     array(
  319.                         'video_source' => 'youtube',
  320.                         'youtube_url'  => 'https://www.youtube.com/watch?v=9uOETcuFjbE',
  321.                     ),
  322.                     array(
  323.                         'video_source' => 'vimeo',
  324.                         'vimeo_url'    => 'https://vimeo.com/235215203',
  325.                     ),
  326.                     array(
  327.                         'video_source'    => 'dailymotion',
  328.                         'dailymotion_url' => 'https://www.dailymotion.com/video/x6tqhqb',
  329.                     ),
  330.                     array(
  331.                         'video_source' => 'vimeo',
  332.                         'vimeo_url'    => 'https://vimeo.com/235215203',
  333.                     ),
  334.                     array(
  335.                         'video_source'    => 'dailymotion',
  336.                         'dailymotion_url' => 'https://www.dailymotion.com/video/x6tqhqb',
  337.                     ),
  338.                     array(
  339.                         'video_source' => 'youtube',
  340.                         'youtube_url'  => 'https://www.youtube.com/watch?v=9uOETcuFjbE',
  341.                     ),
  342.                 ),
  343.                 'fields'      => $repeater->get_controls(),
  344.                 'title_field' => '{{{ video_title }}}',
  345.             )
  346.         );
  347.  
  348.         $this->end_controls_section();
  349.  
  350.         /**
  351.          * Content Tab: Filter
  352.          */
  353.         $this->start_controls_section(
  354.             'section_filter',
  355.             array(
  356.                 'label'     => __( 'Filter', 'powerpack' ),
  357.                 'condition' => array(
  358.                     'layout' => 'grid',
  359.                 ),
  360.             )
  361.         );
  362.  
  363.         $this->add_control(
  364.             'filter_enable',
  365.             array(
  366.                 'label'     => __( 'Enable Filter', 'powerpack' ),
  367.                 'type'      => Controls_Manager::SWITCHER,
  368.                 'default'   => '',
  369.                 'condition' => array(
  370.                     'layout' => 'grid',
  371.                 ),
  372.             )
  373.         );
  374.  
  375.         $this->add_control(
  376.             'filter_all_label',
  377.             array(
  378.                 'label'     => __( '"All" Filter Label', 'powerpack' ),
  379.                 'type'      => Controls_Manager::TEXT,
  380.                 'default'   => __( 'All', 'powerpack' ),
  381.                 'condition' => array(
  382.                     'layout'        => 'grid',
  383.                     'filter_enable' => 'yes',
  384.                 ),
  385.             )
  386.         );
  387.  
  388.         $this->add_responsive_control(
  389.             'filter_alignment',
  390.             array(
  391.                 'label'       => __( 'Alignment', 'powerpack' ),
  392.                 'label_block' => false,
  393.                 'type'        => Controls_Manager::CHOOSE,
  394.                 'default'     => 'center',
  395.                 'options'     => array(
  396.                     'left'   => array(
  397.                         'title' => __( 'Left', 'powerpack' ),
  398.                         'icon'  => 'eicon-h-align-left',
  399.                     ),
  400.                     'center' => array(
  401.                         'title' => __( 'Center', 'powerpack' ),
  402.                         'icon'  => 'eicon-h-align-center',
  403.                     ),
  404.                     'right'  => array(
  405.                         'title' => __( 'Right', 'powerpack' ),
  406.                         'icon'  => 'eicon-h-align-right',
  407.                     ),
  408.                 ),
  409.                 'selectors'   => array(
  410.                     '{{WRAPPER}} .pp-gallery-filters' => 'text-align: {{VALUE}};',
  411.                 ),
  412.                 'condition'   => array(
  413.                     'layout'        => 'grid',
  414.                     'filter_enable' => 'yes',
  415.                 ),
  416.             )
  417.         );
  418.  
  419.         $this->end_controls_section();
  420.  
  421.         /**
  422.          * Content Tab: Play Icon
  423.          */
  424.         $this->start_controls_section(
  425.             'section_play_icon_settings',
  426.             array(
  427.                 'label' => __( 'Play Icon', 'powerpack' ),
  428.             )
  429.         );
  430.  
  431.         $this->add_control(
  432.             'play_icon_type',
  433.             array(
  434.                 'label'       => __( 'Icon Type', 'powerpack' ),
  435.                 'label_block' => false,
  436.                 'toggle'      => false,
  437.                 'type'        => Controls_Manager::CHOOSE,
  438.                 'options'     => array(
  439.                     'none'  => array(
  440.                         'title' => esc_html__( 'None', 'powerpack' ),
  441.                         'icon'  => 'fa fa-ban',
  442.                     ),
  443.                     'icon'  => array(
  444.                         'title' => __( 'Icon', 'powerpack' ),
  445.                         'icon'  => 'fa fa-star',
  446.                     ),
  447.                     'image' => array(
  448.                         'title' => __( 'Image', 'powerpack' ),
  449.                         'icon'  => 'fa fa-picture-o',
  450.                     ),
  451.                 ),
  452.                 'default'     => 'icon',
  453.             )
  454.         );
  455.  
  456.         $this->add_control(
  457.             'select_play_icon',
  458.             array(
  459.                 'label'            => __( 'Select Icon', 'powerpack' ),
  460.                 'type'             => Controls_Manager::ICONS,
  461.                 'fa4compatibility' => 'play_icon',
  462.                 'default'          => array(
  463.                     'value'   => 'fas fa-play-circle',
  464.                     'library' => 'fa-solid',
  465.                 ),
  466.                 'recommended'      => array(
  467.                     'fa-regular' => array(
  468.                         'play-circle',
  469.                     ),
  470.                     'fa-solid'   => array(
  471.                         'play',
  472.                         'play-circle',
  473.                     ),
  474.                 ),
  475.                 'condition'        => array(
  476.                     'play_icon_type' => 'icon',
  477.                 ),
  478.             )
  479.         );
  480.  
  481.         $this->add_control(
  482.             'play_icon_image',
  483.             array(
  484.                 'label'     => __( 'Select Image', 'powerpack' ),
  485.                 'type'      => Controls_Manager::MEDIA,
  486.                 'default'   => array(
  487.                     'url' => Utils::get_placeholder_image_src(),
  488.                 ),
  489.                 'condition' => array(
  490.                     'play_icon_type' => 'image',
  491.                 ),
  492.             )
  493.         );
  494.  
  495.         $this->end_controls_section();
  496.  
  497.         /**
  498.          * Content Tab: Gallery Settings
  499.          */
  500.         $this->start_controls_section(
  501.             'section_settings',
  502.             array(
  503.                 'label' => __( 'Gallery Settings', 'powerpack' ),
  504.             )
  505.         );
  506.  
  507.         $this->add_control(
  508.             'layout',
  509.             array(
  510.                 'label'              => __( 'Layout', 'powerpack' ),
  511.                 'type'               => Controls_Manager::SELECT,
  512.                 'default'            => 'grid',
  513.                 'options'            => array(
  514.                     'grid'     => __( 'Grid', 'powerpack' ),
  515.                     'carousel' => __( 'Carousel', 'powerpack' ),
  516.                 ),
  517.                 'frontend_available' => true,
  518.             )
  519.         );
  520.  
  521.         $this->add_responsive_control(
  522.             'columns',
  523.             array(
  524.                 'label'          => __( 'Columns', 'powerpack' ),
  525.                 'type'           => Controls_Manager::SELECT,
  526.                 'default'        => '3',
  527.                 'tablet_default' => '2',
  528.                 'mobile_default' => '1',
  529.                 'options'        => array(
  530.                     '1' => '1',
  531.                     '2' => '2',
  532.                     '3' => '3',
  533.                     '4' => '4',
  534.                     '5' => '5',
  535.                     '6' => '6',
  536.                     '7' => '7',
  537.                     '8' => '8',
  538.                 ),
  539.                 'prefix_class'   => 'elementor-grid%s-',
  540.                 'render_type'    => 'template',
  541.             )
  542.         );
  543.  
  544.         $this->add_control(
  545.             'aspect_ratio',
  546.             array(
  547.                 'label'        => __( 'Aspect Ratio', 'powerpack' ),
  548.                 'type'         => Controls_Manager::SELECT,
  549.                 'options'      => array(
  550.                     '169' => '16:9',
  551.                     '219' => '21:9',
  552.                     '43'  => '4:3',
  553.                     '32'  => '3:2',
  554.                 ),
  555.                 'default'      => '169',
  556.                 'prefix_class' => 'elementor-aspect-ratio-',
  557.             )
  558.         );
  559.  
  560.         $this->add_control(
  561.             'mute',
  562.             array(
  563.                 'label'        => __( 'Mute', 'powerpack' ),
  564.                 'type'         => Controls_Manager::SWITCHER,
  565.                 'default'      => '',
  566.                 'label_on'     => __( 'Yes', 'powerpack' ),
  567.                 'label_off'    => __( 'No', 'powerpack' ),
  568.                 'return_value' => 'yes',
  569.             )
  570.         );
  571.  
  572.         $this->add_control(
  573.             'click_action',
  574.             array(
  575.                 'label'   => __( 'Click Action', 'powerpack' ),
  576.                 'type'    => Controls_Manager::SELECT,
  577.                 'default' => 'inline',
  578.                 'options' => array(
  579.                     'inline'   => __( 'Play Inline', 'powerpack' ),
  580.                     'lightbox' => __( 'Play in Lightbox', 'powerpack' ),
  581.                 ),
  582.             )
  583.         );
  584.  
  585.         $this->add_control(
  586.             'ordering',
  587.             array(
  588.                 'label'   => __( 'Ordering', 'powerpack' ),
  589.                 'type'    => Controls_Manager::SELECT,
  590.                 'default' => '',
  591.                 'options' => array(
  592.                     ''       => __( 'Default', 'powerpack' ),
  593.                     'random' => __( 'Random', 'powerpack' ),
  594.                 ),
  595.             )
  596.         );
  597.  
  598.         $this->end_controls_section();
  599.  
  600.         /**
  601.          * Content Tab: Carousel Settings
  602.          */
  603.         $this->start_controls_section(
  604.             'section_additional_options',
  605.             array(
  606.                 'label'     => __( 'Carousel Settings', 'powerpack' ),
  607.                 'condition' => array(
  608.                     'layout' => 'carousel',
  609.                 ),
  610.             )
  611.         );
  612.  
  613.         $this->add_control(
  614.             'animation_speed',
  615.             array(
  616.                 'label'   => __( 'Animation Speed', 'powerpack' ),
  617.                 'type'    => Controls_Manager::NUMBER,
  618.                 'default' => 600,
  619.             )
  620.         );
  621.  
  622.         $this->add_control(
  623.             'autoplay',
  624.             array(
  625.                 'label'        => __( 'Autoplay', 'powerpack' ),
  626.                 'type'         => Controls_Manager::SWITCHER,
  627.                 'default'      => 'yes',
  628.                 'label_on'     => __( 'Yes', 'powerpack' ),
  629.                 'label_off'    => __( 'No', 'powerpack' ),
  630.                 'return_value' => 'yes',
  631.             )
  632.         );
  633.  
  634.         $this->add_control(
  635.             'autoplay_speed',
  636.             array(
  637.                 'label'     => __( 'Autoplay Speed', 'powerpack' ),
  638.                 'type'      => Controls_Manager::NUMBER,
  639.                 'default'   => 3000,
  640.                 'condition' => array(
  641.                     'autoplay' => 'yes',
  642.                 ),
  643.             )
  644.         );
  645.  
  646.         $this->add_control(
  647.             'pause_on_hover',
  648.             array(
  649.                 'label'              => __( 'Pause on Hover', 'powerpack' ),
  650.                 'type'               => Controls_Manager::SWITCHER,
  651.                 'default'            => 'yes',
  652.                 'label_on'           => __( 'Yes', 'powerpack' ),
  653.                 'label_off'          => __( 'No', 'powerpack' ),
  654.                 'return_value'       => 'yes',
  655.                 'frontend_available' => true,
  656.                 'condition'          => array(
  657.                     'autoplay' => 'yes',
  658.                 ),
  659.             )
  660.         );
  661.  
  662.         $this->add_control(
  663.             'infinite_loop',
  664.             array(
  665.                 'label'        => __( 'Infinite Loop', 'powerpack' ),
  666.                 'type'         => Controls_Manager::SWITCHER,
  667.                 'default'      => 'yes',
  668.                 'label_on'     => __( 'Yes', 'powerpack' ),
  669.                 'label_off'    => __( 'No', 'powerpack' ),
  670.                 'return_value' => 'yes',
  671.             )
  672.         );
  673.  
  674.         $this->add_control(
  675.             'adaptive_height',
  676.             array(
  677.                 'label'        => __( 'Adaptive Height', 'powerpack' ),
  678.                 'type'         => Controls_Manager::SWITCHER,
  679.                 'default'      => 'yes',
  680.                 'label_on'     => __( 'Yes', 'powerpack' ),
  681.                 'label_off'    => __( 'No', 'powerpack' ),
  682.                 'return_value' => 'yes',
  683.             )
  684.         );
  685.  
  686.         $this->add_control(
  687.             'direction',
  688.             array(
  689.                 'label'       => __( 'Direction', 'powerpack' ),
  690.                 'type'        => Controls_Manager::CHOOSE,
  691.                 'label_block' => false,
  692.                 'toggle'      => false,
  693.                 'options'     => array(
  694.                     'left'  => array(
  695.                         'title' => __( 'Left', 'powerpack' ),
  696.                         'icon'  => 'eicon-h-align-left',
  697.                     ),
  698.                     'right' => array(
  699.                         'title' => __( 'Right', 'powerpack' ),
  700.                         'icon'  => 'eicon-h-align-right',
  701.                     ),
  702.                 ),
  703.                 'default'     => 'left',
  704.             )
  705.         );
  706.  
  707.         $this->add_control(
  708.             'navigation_heading',
  709.             array(
  710.                 'label'     => __( 'Navigation', 'powerpack' ),
  711.                 'type'      => Controls_Manager::HEADING,
  712.                 'separator' => 'before',
  713.             )
  714.         );
  715.  
  716.         $this->add_control(
  717.             'arrows',
  718.             array(
  719.                 'label'        => __( 'Arrows', 'powerpack' ),
  720.                 'type'         => Controls_Manager::SWITCHER,
  721.                 'default'      => 'yes',
  722.                 'label_on'     => __( 'Yes', 'powerpack' ),
  723.                 'label_off'    => __( 'No', 'powerpack' ),
  724.                 'return_value' => 'yes',
  725.             )
  726.         );
  727.  
  728.         $this->add_control(
  729.             'dots',
  730.             array(
  731.                 'label'        => __( 'Pagination', 'powerpack' ),
  732.                 'type'         => Controls_Manager::SWITCHER,
  733.                 'default'      => 'no',
  734.                 'label_on'     => __( 'Yes', 'powerpack' ),
  735.                 'label_off'    => __( 'No', 'powerpack' ),
  736.                 'return_value' => 'yes',
  737.             )
  738.         );
  739.  
  740.         $this->add_control(
  741.             'pagination_type',
  742.             array(
  743.                 'label'     => __( 'Pagination Type', 'powerpack' ),
  744.                 'type'      => Controls_Manager::SELECT,
  745.                 'default'   => 'bullets',
  746.                 'options'   => array(
  747.                     'bullets'  => __( 'Dots', 'powerpack' ),
  748.                     'fraction' => __( 'Fraction', 'powerpack' ),
  749.                 ),
  750.                 'condition' => array(
  751.                     'dots' => 'yes',
  752.                 ),
  753.             )
  754.         );
  755.  
  756.         $this->end_controls_section();
  757.  
  758.         /**
  759.          * Style Tab: Layout
  760.          */
  761.         $this->start_controls_section(
  762.             'section_layout_style',
  763.             array(
  764.                 'label' => __( 'Layout', 'powerpack' ),
  765.                 'tab'   => Controls_Manager::TAB_STYLE,
  766.             )
  767.         );
  768.  
  769.         $this->add_responsive_control(
  770.             'columns_gap',
  771.             array(
  772.                 'label'          => __( 'Columns Gap', 'powerpack' ),
  773.                 'type'           => Controls_Manager::SLIDER,
  774.                 'default'        => array(
  775.                     'size' => 20,
  776.                     'unit' => 'px',
  777.                 ),
  778.                 'size_units'     => array( 'px', '%' ),
  779.                 'range'          => array(
  780.                     'px' => array(
  781.                         'max' => 100,
  782.                     ),
  783.                 ),
  784.                 'tablet_default' => array(
  785.                     'unit' => 'px',
  786.                 ),
  787.                 'mobile_default' => array(
  788.                     'unit' => 'px',
  789.                 ),
  790.                 'selectors'      => array(
  791.                     '{{WRAPPER}} .pp-video-gallery-grid .pp-video-gallery .pp-grid-item-wrap' => 'padding-left: {{SIZE}}{{UNIT}};',
  792.                     '{{WRAPPER}} .pp-video-gallery-grid .pp-video-gallery' => 'margin-left: -{{SIZE}}{{UNIT}};',
  793.                 ),
  794.             )
  795.         );
  796.  
  797.         $this->add_responsive_control(
  798.             'rows_gap',
  799.             array(
  800.                 'label'          => __( 'Rows Gap', 'powerpack' ),
  801.                 'type'           => Controls_Manager::SLIDER,
  802.                 'default'        => array(
  803.                     'size' => 20,
  804.                     'unit' => 'px',
  805.                 ),
  806.                 'size_units'     => array( 'px', '%' ),
  807.                 'range'          => array(
  808.                     'px' => array(
  809.                         'max' => 100,
  810.                     ),
  811.                 ),
  812.                 'tablet_default' => array(
  813.                     'unit' => 'px',
  814.                 ),
  815.                 'mobile_default' => array(
  816.                     'unit' => 'px',
  817.                 ),
  818.                 'selectors'      => array(
  819.                     '{{WRAPPER}} .pp-video-gallery .pp-grid-item' => 'margin-bottom: {{SIZE}}{{UNIT}};',
  820.                 ),
  821.                 'condition'      => array(
  822.                     'layout' => 'grid',
  823.                 ),
  824.             )
  825.         );
  826.  
  827.         $this->end_controls_section();
  828.  
  829.         /**
  830.          * Style Tab: Overlay
  831.          */
  832.         $this->start_controls_section(
  833.             'section_overlay_style',
  834.             array(
  835.                 'label' => __( 'Overlay', 'powerpack' ),
  836.                 'tab'   => Controls_Manager::TAB_STYLE,
  837.             )
  838.         );
  839.  
  840.         $this->add_control(
  841.             'overlay_blend_mode',
  842.             array(
  843.                 'label'     => __( 'Blend Mode', 'powerpack' ),
  844.                 'type'      => Controls_Manager::SELECT,
  845.                 'default'   => 'normal',
  846.                 'options'   => array(
  847.                     'normal'      => __( 'Normal', 'powerpack' ),
  848.                     'multiply'    => __( 'Multiply', 'powerpack' ),
  849.                     'screen'      => __( 'Screen', 'powerpack' ),
  850.                     'overlay'     => __( 'Overlay', 'powerpack' ),
  851.                     'darken'      => __( 'Darken', 'powerpack' ),
  852.                     'lighten'     => __( 'Lighten', 'powerpack' ),
  853.                     'color-dodge' => __( 'Color Dodge', 'powerpack' ),
  854.                     'color'       => __( 'Color', 'powerpack' ),
  855.                     'hue'         => __( 'Hue', 'powerpack' ),
  856.                     'hard-light'  => __( 'Hard Light', 'powerpack' ),
  857.                     'soft-light'  => __( 'Soft Light', 'powerpack' ),
  858.                     'difference'  => __( 'Difference', 'powerpack' ),
  859.                     'exclusion'   => __( 'Exclusion', 'powerpack' ),
  860.                     'saturation'  => __( 'Saturation', 'powerpack' ),
  861.                     'luminosity'  => __( 'Luminosity', 'powerpack' ),
  862.                 ),
  863.                 'selectors' => array(
  864.                     '{{WRAPPER}} .pp-video-gallery-overlay' => 'mix-blend-mode: {{VALUE}};',
  865.                 ),
  866.             )
  867.         );
  868.  
  869.         $this->start_controls_tabs( 'tabs_overlay_style' );
  870.  
  871.         $this->start_controls_tab(
  872.             'tab_overlay_normal',
  873.             array(
  874.                 'label' => __( 'Normal', 'powerpack' ),
  875.             )
  876.         );
  877.  
  878.         $this->add_control(
  879.             'overlay_background_color_normal',
  880.             array(
  881.                 'label'     => __( 'Background Color', 'powerpack' ),
  882.                 'type'      => Controls_Manager::COLOR,
  883.                 'default'   => '',
  884.                 'selectors' => array(
  885.                     '{{WRAPPER}} .pp-video-gallery-overlay' => 'background-color: {{VALUE}};',
  886.                 ),
  887.             )
  888.         );
  889.  
  890.         $this->add_control(
  891.             'overlay_margin_normal',
  892.             array(
  893.                 'label'     => __( 'Margin', 'powerpack' ),
  894.                 'type'      => Controls_Manager::SLIDER,
  895.                 'range'     => array(
  896.                     'px' => array(
  897.                         'min'  => 0,
  898.                         'max'  => 50,
  899.                         'step' => 1,
  900.                     ),
  901.                 ),
  902.                 'selectors' => array(
  903.                     '{{WRAPPER}} .pp-video-gallery-overlay' => 'top: {{SIZE}}px; bottom: {{SIZE}}px; left: {{SIZE}}px; right: {{SIZE}}px;',
  904.                 ),
  905.             )
  906.         );
  907.  
  908.         $this->add_control(
  909.             'overlay_opacity_normal',
  910.             array(
  911.                 'label'     => __( 'Opacity', 'powerpack' ),
  912.                 'type'      => Controls_Manager::SLIDER,
  913.                 'range'     => array(
  914.                     'px' => array(
  915.                         'min'  => 0,
  916.                         'max'  => 1,
  917.                         'step' => 0.1,
  918.                     ),
  919.                 ),
  920.                 'selectors' => array(
  921.                     '{{WRAPPER}} .pp-video-gallery-overlay' => 'opacity: {{SIZE}};',
  922.                 ),
  923.             )
  924.         );
  925.  
  926.         $this->end_controls_tab();
  927.  
  928.         $this->start_controls_tab(
  929.             'tab_overlay_hover',
  930.             array(
  931.                 'label' => __( 'Hover', 'powerpack' ),
  932.             )
  933.         );
  934.  
  935.         $this->add_control(
  936.             'overlay_background_color_hover',
  937.             array(
  938.                 'label'     => __( 'Background Color', 'powerpack' ),
  939.                 'type'      => Controls_Manager::COLOR,
  940.                 'default'   => '',
  941.                 'selectors' => array(
  942.                     '{{WRAPPER}} .pp-grid-item:hover .pp-video-gallery-overlay' => 'background-color: {{VALUE}};',
  943.                 ),
  944.             )
  945.         );
  946.  
  947.         $this->add_control(
  948.             'overlay_margin_hover',
  949.             array(
  950.                 'label'     => __( 'Margin', 'powerpack' ),
  951.                 'type'      => Controls_Manager::SLIDER,
  952.                 'range'     => array(
  953.                     'px' => array(
  954.                         'min'  => 0,
  955.                         'max'  => 50,
  956.                         'step' => 1,
  957.                     ),
  958.                 ),
  959.                 'selectors' => array(
  960.                     '{{WRAPPER}} .pp-grid-item:hover .pp-video-gallery-overlay' => 'top: {{SIZE}}px; bottom: {{SIZE}}px; left: {{SIZE}}px; right: {{SIZE}}px;',
  961.                 ),
  962.             )
  963.         );
  964.  
  965.         $this->add_control(
  966.             'overlay_opacity_hover',
  967.             array(
  968.                 'label'     => __( 'Opacity', 'powerpack' ),
  969.                 'type'      => Controls_Manager::SLIDER,
  970.                 'range'     => array(
  971.                     'px' => array(
  972.                         'min'  => 0,
  973.                         'max'  => 1,
  974.                         'step' => 0.1,
  975.                     ),
  976.                 ),
  977.                 'selectors' => array(
  978.                     '{{WRAPPER}} .pp-grid-item:hover .pp-video-gallery-overlay' => 'opacity: {{SIZE}};',
  979.                 ),
  980.             )
  981.         );
  982.  
  983.         $this->end_controls_tab();
  984.  
  985.         $this->end_controls_tabs();
  986.  
  987.         $this->end_controls_section();
  988.  
  989.         /**
  990.          * Style Tab: Play Icon
  991.          */
  992.         $this->start_controls_section(
  993.             'section_play_icon_style',
  994.             array(
  995.                 'label'     => __( 'Play Icon', 'powerpack' ),
  996.                 'tab'       => Controls_Manager::TAB_STYLE,
  997.                 'condition' => array(
  998.                     'play_icon_type!' => 'none',
  999.                 ),
  1000.             )
  1001.         );
  1002.  
  1003.         $this->add_responsive_control(
  1004.             'play_icon_size',
  1005.             array(
  1006.                 'label'     => __( 'Size', 'powerpack' ),
  1007.                 'type'      => Controls_Manager::SLIDER,
  1008.                 'range'     => array(
  1009.                     'px' => array(
  1010.                         'min' => 10,
  1011.                         'max' => 400,
  1012.                     ),
  1013.                 ),
  1014.                 'default'   => array(
  1015.                     'size' => 80,
  1016.                     'unit' => 'px',
  1017.                 ),
  1018.                 'selectors' => array(
  1019.                     '{{WRAPPER}} .pp-video-play-icon' => 'font-size: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}}; width: {{SIZE}}{{UNIT}};',
  1020.                 ),
  1021.                 'condition' => array(
  1022.                     'play_icon_type!' => 'none',
  1023.                 ),
  1024.             )
  1025.         );
  1026.  
  1027.         $this->add_control(
  1028.             'play_icon_border_radius',
  1029.             array(
  1030.                 'label'      => __( 'Border Radius', 'powerpack' ),
  1031.                 'type'       => Controls_Manager::DIMENSIONS,
  1032.                 'size_units' => array( 'px', '%' ),
  1033.                 'selectors'  => array(
  1034.                     '{{WRAPPER}} .pp-video-play-icon img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  1035.                 ),
  1036.                 'condition'  => array(
  1037.                     'play_icon_type' => 'image',
  1038.                 ),
  1039.             )
  1040.         );
  1041.  
  1042.         $this->start_controls_tabs( 'tabs_play_icon_style' );
  1043.  
  1044.         $this->start_controls_tab(
  1045.             'tab_play_icon_normal',
  1046.             array(
  1047.                 'label'     => __( 'Normal', 'powerpack' ),
  1048.                 'condition' => array(
  1049.                     'play_icon_type'           => 'icon',
  1050.                     'select_play_icon[value]!' => '',
  1051.                 ),
  1052.             )
  1053.         );
  1054.  
  1055.         $this->add_control(
  1056.             'play_icon_color',
  1057.             array(
  1058.                 'label'     => __( 'Color', 'powerpack' ),
  1059.                 'type'      => Controls_Manager::COLOR,
  1060.                 'selectors' => array(
  1061.                     '{{WRAPPER}} .pp-video-play-icon'     => 'color: {{VALUE}}',
  1062.                     '{{WRAPPER}} .pp-video-play-icon svg' => 'fill: {{VALUE}}',
  1063.                 ),
  1064.                 'condition' => array(
  1065.                     'play_icon_type'           => 'icon',
  1066.                     'select_play_icon[value]!' => '',
  1067.                 ),
  1068.             )
  1069.         );
  1070.  
  1071.         $this->add_group_control(
  1072.             Group_Control_Text_Shadow::get_type(),
  1073.             array(
  1074.                 'name'      => 'play_icon_text_shadow',
  1075.                 'label'     => __( 'Shadow', 'powerpack' ),
  1076.                 'selector'  => '{{WRAPPER}} .pp-video-play-icon',
  1077.                 'condition' => array(
  1078.                     'play_icon_type'           => 'icon',
  1079.                     'select_play_icon[value]!' => '',
  1080.                 ),
  1081.             )
  1082.         );
  1083.  
  1084.         $this->add_control(
  1085.             'play_icon_opacity',
  1086.             array(
  1087.                 'label'     => __( 'Opacity', 'powerpack' ),
  1088.                 'type'      => Controls_Manager::SLIDER,
  1089.                 'range'     => array(
  1090.                     'px' => array(
  1091.                         'max'  => 1,
  1092.                         'min'  => 0,
  1093.                         'step' => 0.01,
  1094.                     ),
  1095.                 ),
  1096.                 'selectors' => array(
  1097.                     '{{WRAPPER}} .pp-video-play-icon' => 'opacity: {{SIZE}}',
  1098.                 ),
  1099.             )
  1100.         );
  1101.  
  1102.         $this->end_controls_tab();
  1103.  
  1104.         $this->start_controls_tab(
  1105.             'tab_play_icon_hover',
  1106.             array(
  1107.                 'label'     => __( 'Hover', 'powerpack' ),
  1108.                 'condition' => array(
  1109.                     'play_icon_type'           => 'icon',
  1110.                     'select_play_icon[value]!' => '',
  1111.                 ),
  1112.             )
  1113.         );
  1114.  
  1115.         $this->add_control(
  1116.             'play_icon_hover_color',
  1117.             array(
  1118.                 'label'     => __( 'Color', 'powerpack' ),
  1119.                 'type'      => Controls_Manager::COLOR,
  1120.                 'selectors' => array(
  1121.                     '{{WRAPPER}} .pp-video-container:hover .pp-video-play-icon' => 'color: {{VALUE}}',
  1122.                     '{{WRAPPER}} .pp-video-container:hover .pp-video-play-icon svg' => 'fill: {{VALUE}}',
  1123.                 ),
  1124.                 'condition' => array(
  1125.                     'play_icon_type'           => 'icon',
  1126.                     'select_play_icon[value]!' => '',
  1127.                 ),
  1128.             )
  1129.         );
  1130.  
  1131.         $this->add_group_control(
  1132.             Group_Control_Text_Shadow::get_type(),
  1133.             array(
  1134.                 'name'      => 'play_icon_hover_text_shadow',
  1135.                 'selector'  => '{{WRAPPER}} .pp-video-container:hover .pp-video-play-icon',
  1136.                 'condition' => array(
  1137.                     'play_icon_type'           => 'icon',
  1138.                     'select_play_icon[value]!' => '',
  1139.                 ),
  1140.             )
  1141.         );
  1142.  
  1143.         $this->add_control(
  1144.             'play_icon_hover_opacity',
  1145.             array(
  1146.                 'label'     => __( 'Opacity', 'powerpack' ),
  1147.                 'type'      => Controls_Manager::SLIDER,
  1148.                 'range'     => array(
  1149.                     'px' => array(
  1150.                         'max'  => 1,
  1151.                         'min'  => 0,
  1152.                         'step' => 0.01,
  1153.                     ),
  1154.                 ),
  1155.                 'selectors' => array(
  1156.                     '{{WRAPPER}} .pp-video-container:hover .pp-video-play-icon' => 'opacity: {{SIZE}}',
  1157.                 ),
  1158.                 'condition' => array(
  1159.                     'play_icon_type!' => 'none',
  1160.                 ),
  1161.             )
  1162.         );
  1163.  
  1164.         $this->end_controls_tab();
  1165.  
  1166.         $this->end_controls_tabs();
  1167.  
  1168.         $this->end_controls_section();
  1169.  
  1170.         /**
  1171.          * Style Tab: Video Title & Description
  1172.          */
  1173.         $this->start_controls_section(
  1174.             'section_video_title_style',
  1175.             array(
  1176.                 'label' => __( 'Video Title & Description', 'powerpack' ),
  1177.                 'tab'   => Controls_Manager::TAB_STYLE,
  1178.             )
  1179.         );
  1180.  
  1181.         $this->add_responsive_control(
  1182.             'video_title_text_align',
  1183.             array(
  1184.                 'label'     => __( 'Text Align', 'powerpack' ),
  1185.                 'type'      => Controls_Manager::CHOOSE,
  1186.                 'default'   => '',
  1187.                 'options'   => array(
  1188.                     'left'   => array(
  1189.                         'title' => __( 'Left', 'powerpack' ),
  1190.                         'icon'  => 'fa fa-align-left',
  1191.                     ),
  1192.                     'center' => array(
  1193.                         'title' => __( 'Center', 'powerpack' ),
  1194.                         'icon'  => 'fa fa-align-center',
  1195.                     ),
  1196.                     'right'  => array(
  1197.                         'title' => __( 'Right', 'powerpack' ),
  1198.                         'icon'  => 'fa fa-align-right',
  1199.                     ),
  1200.                 ),
  1201.                 'selectors' => array(
  1202.                     '{{WRAPPER}} .pp-video-content' => 'text-align: {{VALUE}};',
  1203.                 ),
  1204.             )
  1205.         );
  1206.  
  1207.         $this->add_control(
  1208.             'video_title_background_color',
  1209.             array(
  1210.                 'label'     => __( 'Background Color', 'powerpack' ),
  1211.                 'type'      => Controls_Manager::COLOR,
  1212.                 'default'   => '',
  1213.                 'selectors' => array(
  1214.                     '{{WRAPPER}} .pp-video-content' => 'background-color: {{VALUE}};',
  1215.                 ),
  1216.             )
  1217.         );
  1218.  
  1219.         $this->add_responsive_control(
  1220.             'video_title_padding',
  1221.             array(
  1222.                 'label'      => __( 'Padding', 'powerpack' ),
  1223.                 'type'       => Controls_Manager::DIMENSIONS,
  1224.                 'size_units' => array( 'px', '%' ),
  1225.                 'selectors'  => array(
  1226.                     '{{WRAPPER}} .pp-video-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  1227.                 ),
  1228.             )
  1229.         );
  1230.  
  1231.         $this->add_control(
  1232.             'video_title_heading',
  1233.             array(
  1234.                 'label'     => __( 'Video Title', 'powerpack' ),
  1235.                 'type'      => Controls_Manager::HEADING,
  1236.                 'separator' => 'before',
  1237.             )
  1238.         );
  1239.  
  1240.         $this->add_control(
  1241.             'video_title_color',
  1242.             array(
  1243.                 'label'     => __( 'Text Color', 'powerpack' ),
  1244.                 'type'      => Controls_Manager::COLOR,
  1245.                 'default'   => '',
  1246.                 'selectors' => array(
  1247.                     '{{WRAPPER}} .pp-video-title' => 'color: {{VALUE}};',
  1248.                 ),
  1249.             )
  1250.         );
  1251.  
  1252.         $this->add_group_control(
  1253.             Group_Control_Typography::get_type(),
  1254.             array(
  1255.                 'name'     => 'video_title_typography',
  1256.                 'label'    => __( 'Typography', 'powerpack' ),
  1257.                 'selector' => '{{WRAPPER}} .pp-video-title',
  1258.             )
  1259.         );
  1260.  
  1261.         $this->add_responsive_control(
  1262.             'video_title_spacing',
  1263.             array(
  1264.                 'label'      => __( 'Spacing', 'powerpack' ),
  1265.                 'type'       => Controls_Manager::SLIDER,
  1266.                 'range'      => array(
  1267.                     'px' => array(
  1268.                         'min'  => 0,
  1269.                         'max'  => 80,
  1270.                         'step' => 1,
  1271.                     ),
  1272.                 ),
  1273.                 'size_units' => '',
  1274.                 'selectors'  => array(
  1275.                     '{{WRAPPER}} .pp-video-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
  1276.                 ),
  1277.             )
  1278.         );
  1279.  
  1280.         $this->add_control(
  1281.             'video_description_heading',
  1282.             array(
  1283.                 'label'     => __( 'Video Description', 'powerpack' ),
  1284.                 'type'      => Controls_Manager::HEADING,
  1285.                 'separator' => 'before',
  1286.             )
  1287.         );
  1288.  
  1289.         $this->add_control(
  1290.             'video_description_color',
  1291.             array(
  1292.                 'label'     => __( 'Text Color', 'powerpack' ),
  1293.                 'type'      => Controls_Manager::COLOR,
  1294.                 'default'   => '',
  1295.                 'selectors' => array(
  1296.                     '{{WRAPPER}} .pp-video-description' => 'color: {{VALUE}};',
  1297.                 ),
  1298.             )
  1299.         );
  1300.  
  1301.         $this->add_group_control(
  1302.             Group_Control_Typography::get_type(),
  1303.             array(
  1304.                 'name'     => 'video_description_typography',
  1305.                 'label'    => __( 'Typography', 'powerpack' ),
  1306.                 'selector' => '{{WRAPPER}} .pp-video-description',
  1307.             )
  1308.         );
  1309.  
  1310.         $this->end_controls_section();
  1311.  
  1312.         /**
  1313.          * Style Tab: Filter
  1314.          */
  1315.         $this->start_controls_section(
  1316.             'section_filter_style',
  1317.             array(
  1318.                 'label'     => __( 'Filter', 'powerpack' ),
  1319.                 'tab'       => Controls_Manager::TAB_STYLE,
  1320.                 'condition' => array(
  1321.                     'layout'        => 'grid',
  1322.                     'filter_enable' => 'yes',
  1323.                 ),
  1324.             )
  1325.         );
  1326.  
  1327.         $this->add_group_control(
  1328.             Group_Control_Typography::get_type(),
  1329.             array(
  1330.                 'name'      => 'filter_typography',
  1331.                 'label'     => __( 'Typography', 'powerpack' ),
  1332.                 'selector'  => '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter-text',
  1333.                 'condition' => array(
  1334.                     'layout'        => 'grid',
  1335.                     'filter_enable' => 'yes',
  1336.                 ),
  1337.             )
  1338.         );
  1339.  
  1340.         $this->add_responsive_control(
  1341.             'filters_margin_bottom',
  1342.             array(
  1343.                 'label'      => __( 'Filters Bottom Spacing', 'powerpack' ),
  1344.                 'type'       => Controls_Manager::SLIDER,
  1345.                 'range'      => array(
  1346.                     'px' => array(
  1347.                         'min'  => 0,
  1348.                         'max'  => 80,
  1349.                         'step' => 1,
  1350.                     ),
  1351.                 ),
  1352.                 'size_units' => '',
  1353.                 'selectors'  => array(
  1354.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter' => 'margin-bottom: {{SIZE}}{{UNIT}};',
  1355.                 ),
  1356.                 'condition'  => array(
  1357.                     'layout'        => 'grid',
  1358.                     'filter_enable' => 'yes',
  1359.                 ),
  1360.             )
  1361.         );
  1362.  
  1363.         $this->start_controls_tabs( 'tabs_filter_style' );
  1364.  
  1365.         $this->start_controls_tab(
  1366.             'tab_filter_normal',
  1367.             array(
  1368.                 'label'     => __( 'Normal', 'powerpack' ),
  1369.                 'condition' => array(
  1370.                     'layout'        => 'grid',
  1371.                     'filter_enable' => 'yes',
  1372.                 ),
  1373.             )
  1374.         );
  1375.  
  1376.         $this->add_control(
  1377.             'filter_color_normal',
  1378.             array(
  1379.                 'label'     => __( 'Color', 'powerpack' ),
  1380.                 'type'      => Controls_Manager::COLOR,
  1381.                 'default'   => '',
  1382.                 'selectors' => array(
  1383.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter' => 'color: {{VALUE}};',
  1384.                 ),
  1385.                 'condition' => array(
  1386.                     'layout'        => 'grid',
  1387.                     'filter_enable' => 'yes',
  1388.                 ),
  1389.             )
  1390.         );
  1391.  
  1392.         $this->add_control(
  1393.             'filter_background_color_normal',
  1394.             array(
  1395.                 'label'     => __( 'Background Color', 'powerpack' ),
  1396.                 'type'      => Controls_Manager::COLOR,
  1397.                 'default'   => '',
  1398.                 'selectors' => array(
  1399.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter' => 'background-color: {{VALUE}};',
  1400.                 ),
  1401.                 'condition' => array(
  1402.                     'layout'        => 'grid',
  1403.                     'filter_enable' => 'yes',
  1404.                 ),
  1405.             )
  1406.         );
  1407.  
  1408.         $this->add_group_control(
  1409.             Group_Control_Border::get_type(),
  1410.             array(
  1411.                 'name'        => 'filter_border_normal',
  1412.                 'label'       => __( 'Border', 'powerpack' ),
  1413.                 'placeholder' => '1px',
  1414.                 'default'     => '1px',
  1415.                 'selector'    => '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter',
  1416.                 'condition'   => array(
  1417.                     'layout'        => 'grid',
  1418.                     'filter_enable' => 'yes',
  1419.                 ),
  1420.             )
  1421.         );
  1422.  
  1423.         $this->add_control(
  1424.             'filter_border_radius_normal',
  1425.             array(
  1426.                 'label'      => __( 'Border Radius', 'powerpack' ),
  1427.                 'type'       => Controls_Manager::DIMENSIONS,
  1428.                 'size_units' => array( 'px', '%' ),
  1429.                 'selectors'  => array(
  1430.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  1431.                 ),
  1432.                 'condition'  => array(
  1433.                     'layout'        => 'grid',
  1434.                     'filter_enable' => 'yes',
  1435.                 ),
  1436.             )
  1437.         );
  1438.  
  1439.         $this->add_responsive_control(
  1440.             'filter_padding',
  1441.             array(
  1442.                 'label'       => __( 'Padding', 'powerpack' ),
  1443.                 'type'        => Controls_Manager::DIMENSIONS,
  1444.                 'size_units'  => array( 'px', 'em', '%' ),
  1445.                 'placeholder' => array(
  1446.                     'top'    => '',
  1447.                     'right'  => '',
  1448.                     'bottom' => '',
  1449.                     'left'   => '',
  1450.                 ),
  1451.                 'selectors'   => array(
  1452.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  1453.                 ),
  1454.                 'condition'   => array(
  1455.                     'layout'        => 'grid',
  1456.                     'filter_enable' => 'yes',
  1457.                 ),
  1458.             )
  1459.         );
  1460.  
  1461.         $this->add_group_control(
  1462.             Group_Control_Box_Shadow::get_type(),
  1463.             array(
  1464.                 'name'      => 'filter_box_shadow',
  1465.                 'selector'  => '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter',
  1466.                 'condition' => array(
  1467.                     'layout'        => 'grid',
  1468.                     'filter_enable' => 'yes',
  1469.                 ),
  1470.             )
  1471.         );
  1472.  
  1473.         $this->end_controls_tab();
  1474.  
  1475.         $this->start_controls_tab(
  1476.             'tab_filter_hover',
  1477.             array(
  1478.                 'label'     => __( 'Hover', 'powerpack' ),
  1479.                 'condition' => array(
  1480.                     'layout'        => 'grid',
  1481.                     'filter_enable' => 'yes',
  1482.                 ),
  1483.             )
  1484.         );
  1485.  
  1486.         $this->add_control(
  1487.             'filter_color_hover',
  1488.             array(
  1489.                 'label'     => __( 'Color', 'powerpack' ),
  1490.                 'type'      => Controls_Manager::COLOR,
  1491.                 'default'   => '',
  1492.                 'selectors' => array(
  1493.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter:hover' => 'color: {{VALUE}};',
  1494.                 ),
  1495.                 'condition' => array(
  1496.                     'layout'        => 'grid',
  1497.                     'filter_enable' => 'yes',
  1498.                 ),
  1499.             )
  1500.         );
  1501.  
  1502.         $this->add_control(
  1503.             'filter_background_color_hover',
  1504.             array(
  1505.                 'label'     => __( 'Background Color', 'powerpack' ),
  1506.                 'type'      => Controls_Manager::COLOR,
  1507.                 'default'   => '',
  1508.                 'selectors' => array(
  1509.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter:hover' => 'background-color: {{VALUE}};',
  1510.                 ),
  1511.                 'condition' => array(
  1512.                     'layout'        => 'grid',
  1513.                     'filter_enable' => 'yes',
  1514.                 ),
  1515.             )
  1516.         );
  1517.  
  1518.         $this->add_control(
  1519.             'filter_border_color_hover',
  1520.             array(
  1521.                 'label'     => __( 'Border Color', 'powerpack' ),
  1522.                 'type'      => Controls_Manager::COLOR,
  1523.                 'default'   => '',
  1524.                 'selectors' => array(
  1525.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter:hover' => 'border-color: {{VALUE}};',
  1526.                 ),
  1527.                 'condition' => array(
  1528.                     'layout'        => 'grid',
  1529.                     'filter_enable' => 'yes',
  1530.                 ),
  1531.             )
  1532.         );
  1533.  
  1534.         $this->add_group_control(
  1535.             Group_Control_Box_Shadow::get_type(),
  1536.             array(
  1537.                 'name'      => 'filter_box_shadow_hover',
  1538.                 'selector'  => '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter:hover',
  1539.                 'condition' => array(
  1540.                     'layout'        => 'grid',
  1541.                     'filter_enable' => 'yes',
  1542.                 ),
  1543.             )
  1544.         );
  1545.  
  1546.         $this->end_controls_tab();
  1547.  
  1548.         $this->start_controls_tab(
  1549.             'tab_filter_active',
  1550.             array(
  1551.                 'label'     => __( 'Active', 'powerpack' ),
  1552.                 'condition' => array(
  1553.                     'layout'        => 'grid',
  1554.                     'filter_enable' => 'yes',
  1555.                 ),
  1556.             )
  1557.         );
  1558.  
  1559.         $this->add_control(
  1560.             'filter_color_active',
  1561.             array(
  1562.                 'label'     => __( 'Color', 'powerpack' ),
  1563.                 'type'      => Controls_Manager::COLOR,
  1564.                 'default'   => '',
  1565.                 'selectors' => array(
  1566.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter.pp-active' => 'color: {{VALUE}};',
  1567.                 ),
  1568.                 'condition' => array(
  1569.                     'layout'        => 'grid',
  1570.                     'filter_enable' => 'yes',
  1571.                 ),
  1572.             )
  1573.         );
  1574.  
  1575.         $this->add_control(
  1576.             'filter_background_color_active',
  1577.             array(
  1578.                 'label'     => __( 'Background Color', 'powerpack' ),
  1579.                 'type'      => Controls_Manager::COLOR,
  1580.                 'default'   => '',
  1581.                 'selectors' => array(
  1582.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter.pp-active' => 'background-color: {{VALUE}};',
  1583.                 ),
  1584.                 'condition' => array(
  1585.                     'layout'        => 'grid',
  1586.                     'filter_enable' => 'yes',
  1587.                 ),
  1588.             )
  1589.         );
  1590.  
  1591.         $this->add_control(
  1592.             'filter_border_color_active',
  1593.             array(
  1594.                 'label'     => __( 'Border Color', 'powerpack' ),
  1595.                 'type'      => Controls_Manager::COLOR,
  1596.                 'default'   => '',
  1597.                 'selectors' => array(
  1598.                     '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter.pp-active' => 'border-color: {{VALUE}};',
  1599.                 ),
  1600.                 'condition' => array(
  1601.                     'layout'        => 'grid',
  1602.                     'filter_enable' => 'yes',
  1603.                 ),
  1604.             )
  1605.         );
  1606.  
  1607.         $this->add_group_control(
  1608.             Group_Control_Box_Shadow::get_type(),
  1609.             array(
  1610.                 'name'      => 'filter_box_shadow_active',
  1611.                 'selector'  => '{{WRAPPER}} .pp-gallery-filters .pp-gallery-filter.pp-active',
  1612.                 'condition' => array(
  1613.                     'layout'        => 'grid',
  1614.                     'filter_enable' => 'yes',
  1615.                 ),
  1616.             )
  1617.         );
  1618.  
  1619.         $this->end_controls_tab();
  1620.  
  1621.         $this->end_controls_tabs();
  1622.  
  1623.         $this->end_controls_section();
  1624.  
  1625.         /**
  1626.          * Style Tab: Arrows
  1627.          */
  1628.         $this->start_controls_section(
  1629.             'section_arrows_style',
  1630.             array(
  1631.                 'label'     => __( 'Arrows', 'powerpack' ),
  1632.                 'tab'       => Controls_Manager::TAB_STYLE,
  1633.                 'condition' => array(
  1634.                     'layout' => 'carousel',
  1635.                     'arrows' => 'yes',
  1636.                 ),
  1637.             )
  1638.         );
  1639.  
  1640.         $this->add_control(
  1641.             'select_arrow',
  1642.             array(
  1643.                 'label'                  => __( 'Choose Arrow', 'powerpack' ),
  1644.                 'type'                   => Controls_Manager::ICONS,
  1645.                 'fa4compatibility'       => 'arrow',
  1646.                 'label_block'            => false,
  1647.                 'default'                => array(
  1648.                     'value'   => 'fas fa-angle-right',
  1649.                     'library' => 'fa-solid',
  1650.                 ),
  1651.                 'skin'                   => 'inline',
  1652.                 'exclude_inline_options' => 'svg',
  1653.                 'recommended'            => array(
  1654.                     'fa-regular' => array(
  1655.                         'arrow-alt-circle-right',
  1656.                         'caret-square-right',
  1657.                         'hand-point-right',
  1658.                     ),
  1659.                     'fa-solid'   => array(
  1660.                         'angle-right',
  1661.                         'angle-double-right',
  1662.                         'chevron-right',
  1663.                         'chevron-circle-right',
  1664.                         'arrow-right',
  1665.                         'long-arrow-alt-right',
  1666.                         'caret-right',
  1667.                         'caret-square-right',
  1668.                         'arrow-circle-right',
  1669.                         'arrow-alt-circle-right',
  1670.                         'toggle-right',
  1671.                         'hand-point-right',
  1672.                     ),
  1673.                 ),
  1674.                 'condition' => array(
  1675.                     'layout' => 'carousel',
  1676.                     'arrows' => 'yes',
  1677.                 ),
  1678.             )
  1679.         );
  1680.  
  1681.         $this->add_responsive_control(
  1682.             'arrows_size',
  1683.             array(
  1684.                 'label'      => __( 'Arrows Size', 'powerpack' ),
  1685.                 'type'       => Controls_Manager::SLIDER,
  1686.                 'default'    => array( 'size' => '22' ),
  1687.                 'range'      => array(
  1688.                     'px' => array(
  1689.                         'min'  => 15,
  1690.                         'max'  => 100,
  1691.                         'step' => 1,
  1692.                     ),
  1693.                 ),
  1694.                 'size_units' => array( 'px' ),
  1695.                 'selectors'  => array(
  1696.                     '{{WRAPPER}} .pp-slider-arrow' => 'font-size: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}; width: {{SIZE}}{{UNIT}};',
  1697.                 ),
  1698.                 'condition'  => array(
  1699.                     'layout' => 'carousel',
  1700.                     'arrows' => 'yes',
  1701.                 ),
  1702.             )
  1703.         );
  1704.  
  1705.         $this->add_responsive_control(
  1706.             'arrows_position',
  1707.             array(
  1708.                 'label'      => __( 'Align Arrows', 'powerpack' ),
  1709.                 'type'       => Controls_Manager::SLIDER,
  1710.                 'range'      => array(
  1711.                     'px' => array(
  1712.                         'min'  => -100,
  1713.                         'max'  => 50,
  1714.                         'step' => 1,
  1715.                     ),
  1716.                 ),
  1717.                 'size_units' => array( 'px' ),
  1718.                 'selectors'  => array(
  1719.                     '{{WRAPPER}} .pp-arrow-next' => 'right: {{SIZE}}{{UNIT}};',
  1720.                     '{{WRAPPER}} .pp-arrow-prev' => 'left: {{SIZE}}{{UNIT}};',
  1721.                 ),
  1722.                 'condition'  => array(
  1723.                     'layout' => 'carousel',
  1724.                     'arrows' => 'yes',
  1725.                 ),
  1726.             )
  1727.         );
  1728.  
  1729.         $this->start_controls_tabs( 'tabs_arrows_style' );
  1730.  
  1731.         $this->start_controls_tab(
  1732.             'tab_arrows_normal',
  1733.             array(
  1734.                 'label'     => __( 'Normal', 'powerpack' ),
  1735.                 'condition' => array(
  1736.                     'layout' => 'carousel',
  1737.                     'arrows' => 'yes',
  1738.                 ),
  1739.             )
  1740.         );
  1741.  
  1742.         $this->add_control(
  1743.             'arrows_bg_color_normal',
  1744.             array(
  1745.                 'label'     => __( 'Background Color', 'powerpack' ),
  1746.                 'type'      => Controls_Manager::COLOR,
  1747.                 'default'   => '',
  1748.                 'selectors' => array(
  1749.                     '{{WRAPPER}} .pp-slider-arrow' => 'background-color: {{VALUE}};',
  1750.                 ),
  1751.                 'condition' => array(
  1752.                     'layout' => 'carousel',
  1753.                     'arrows' => 'yes',
  1754.                 ),
  1755.             )
  1756.         );
  1757.  
  1758.         $this->add_control(
  1759.             'arrows_color_normal',
  1760.             array(
  1761.                 'label'     => __( 'Color', 'powerpack' ),
  1762.                 'type'      => Controls_Manager::COLOR,
  1763.                 'default'   => '',
  1764.                 'selectors' => array(
  1765.                     '{{WRAPPER}} .pp-slider-arrow' => 'color: {{VALUE}};',
  1766.                 ),
  1767.                 'condition' => array(
  1768.                     'layout' => 'carousel',
  1769.                     'arrows' => 'yes',
  1770.                 ),
  1771.             )
  1772.         );
  1773.  
  1774.         $this->add_group_control(
  1775.             Group_Control_Border::get_type(),
  1776.             array(
  1777.                 'name'        => 'arrows_border_normal',
  1778.                 'label'       => __( 'Border', 'powerpack' ),
  1779.                 'placeholder' => '1px',
  1780.                 'default'     => '1px',
  1781.                 'selector'    => '{{WRAPPER}} .pp-slider-arrow',
  1782.                 'condition'   => array(
  1783.                     'layout' => 'carousel',
  1784.                     'arrows' => 'yes',
  1785.                 ),
  1786.             )
  1787.         );
  1788.  
  1789.         $this->add_control(
  1790.             'arrows_border_radius_normal',
  1791.             array(
  1792.                 'label'      => __( 'Border Radius', 'powerpack' ),
  1793.                 'type'       => Controls_Manager::DIMENSIONS,
  1794.                 'size_units' => array( 'px', '%' ),
  1795.                 'selectors'  => array(
  1796.                     '{{WRAPPER}} .pp-slider-arrow' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  1797.                 ),
  1798.                 'condition'  => array(
  1799.                     'layout' => 'carousel',
  1800.                     'arrows' => 'yes',
  1801.                 ),
  1802.             )
  1803.         );
  1804.  
  1805.         $this->end_controls_tab();
  1806.  
  1807.         $this->start_controls_tab(
  1808.             'tab_arrows_hover',
  1809.             array(
  1810.                 'label'     => __( 'Hover', 'powerpack' ),
  1811.                 'condition' => array(
  1812.                     'layout' => 'carousel',
  1813.                     'arrows' => 'yes',
  1814.                 ),
  1815.             )
  1816.         );
  1817.  
  1818.         $this->add_control(
  1819.             'arrows_bg_color_hover',
  1820.             array(
  1821.                 'label'     => __( 'Background Color', 'powerpack' ),
  1822.                 'type'      => Controls_Manager::COLOR,
  1823.                 'default'   => '',
  1824.                 'selectors' => array(
  1825.                     '{{WRAPPER}} .pp-slider-arrow:hover' => 'background-color: {{VALUE}};',
  1826.                 ),
  1827.                 'condition' => array(
  1828.                     'layout' => 'carousel',
  1829.                     'arrows' => 'yes',
  1830.                 ),
  1831.             )
  1832.         );
  1833.  
  1834.         $this->add_control(
  1835.             'arrows_color_hover',
  1836.             array(
  1837.                 'label'     => __( 'Color', 'powerpack' ),
  1838.                 'type'      => Controls_Manager::COLOR,
  1839.                 'default'   => '',
  1840.                 'selectors' => array(
  1841.                     '{{WRAPPER}} .pp-slider-arrow:hover' => 'color: {{VALUE}};',
  1842.                 ),
  1843.                 'condition' => array(
  1844.                     'layout' => 'carousel',
  1845.                     'arrows' => 'yes',
  1846.                 ),
  1847.             )
  1848.         );
  1849.  
  1850.         $this->add_control(
  1851.             'arrows_border_color_hover',
  1852.             array(
  1853.                 'label'     => __( 'Border Color', 'powerpack' ),
  1854.                 'type'      => Controls_Manager::COLOR,
  1855.                 'default'   => '',
  1856.                 'selectors' => array(
  1857.                     '{{WRAPPER}} .pp-slider-arrow:hover',
  1858.                 ),
  1859.                 'condition' => array(
  1860.                     'layout' => 'carousel',
  1861.                     'arrows' => 'yes',
  1862.                 ),
  1863.             )
  1864.         );
  1865.  
  1866.         $this->end_controls_tab();
  1867.  
  1868.         $this->end_controls_tabs();
  1869.  
  1870.         $this->add_responsive_control(
  1871.             'arrows_padding',
  1872.             array(
  1873.                 'label'      => __( 'Padding', 'powerpack' ),
  1874.                 'type'       => Controls_Manager::DIMENSIONS,
  1875.                 'size_units' => array( 'px', '%' ),
  1876.                 'selectors'  => array(
  1877.                     '{{WRAPPER}} .pp-slider-arrow' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  1878.                 ),
  1879.                 'separator'  => 'before',
  1880.                 'condition'  => array(
  1881.                     'layout' => 'carousel',
  1882.                     'arrows' => 'yes',
  1883.                 ),
  1884.             )
  1885.         );
  1886.  
  1887.         $this->end_controls_section();
  1888.  
  1889.         /**
  1890.          * Style Tab: Dots
  1891.          */
  1892.         $this->start_controls_section(
  1893.             'section_dots_style',
  1894.             array(
  1895.                 'label'     => __( 'Pagination: Dots', 'powerpack' ),
  1896.                 'tab'       => Controls_Manager::TAB_STYLE,
  1897.                 'condition' => array(
  1898.                     'layout'          => 'carousel',
  1899.                     'dots'            => 'yes',
  1900.                     'pagination_type' => 'bullets',
  1901.                 ),
  1902.             )
  1903.         );
  1904.  
  1905.         $this->add_control(
  1906.             'dots_position',
  1907.             array(
  1908.                 'label'        => __( 'Position', 'powerpack' ),
  1909.                 'type'         => Controls_Manager::SELECT,
  1910.                 'options'      => array(
  1911.                     'inside'  => __( 'Inside', 'powerpack' ),
  1912.                     'outside' => __( 'Outside', 'powerpack' ),
  1913.                 ),
  1914.                 'default'      => 'outside',
  1915.                 'prefix_class' => 'pp-swiper-slider-pagination-',
  1916.                 'condition'    => array(
  1917.                     'layout'          => 'carousel',
  1918.                     'dots'            => 'yes',
  1919.                     'pagination_type' => 'bullets',
  1920.                 ),
  1921.             )
  1922.         );
  1923.  
  1924.         $this->add_responsive_control(
  1925.             'dots_size',
  1926.             array(
  1927.                 'label'      => __( 'Size', 'powerpack' ),
  1928.                 'type'       => Controls_Manager::SLIDER,
  1929.                 'range'      => array(
  1930.                     'px' => array(
  1931.                         'min'  => 2,
  1932.                         'max'  => 40,
  1933.                         'step' => 1,
  1934.                     ),
  1935.                 ),
  1936.                 'size_units' => '',
  1937.                 'selectors'  => array(
  1938.                     '{{WRAPPER}} .swiper-pagination-bullet' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
  1939.                 ),
  1940.                 'condition'  => array(
  1941.                     'layout'          => 'carousel',
  1942.                     'dots'            => 'yes',
  1943.                     'pagination_type' => 'bullets',
  1944.                 ),
  1945.             )
  1946.         );
  1947.  
  1948.         $this->add_responsive_control(
  1949.             'dots_spacing',
  1950.             array(
  1951.                 'label'      => __( 'Spacing', 'powerpack' ),
  1952.                 'type'       => Controls_Manager::SLIDER,
  1953.                 'range'      => array(
  1954.                     'px' => array(
  1955.                         'min'  => 1,
  1956.                         'max'  => 30,
  1957.                         'step' => 1,
  1958.                     ),
  1959.                 ),
  1960.                 'size_units' => '',
  1961.                 'selectors'  => array(
  1962.                     '{{WRAPPER}} .swiper-pagination-bullet' => 'margin-left: {{SIZE}}{{UNIT}}; margin-right: {{SIZE}}{{UNIT}}',
  1963.                 ),
  1964.                 'condition'  => array(
  1965.                     'layout'          => 'carousel',
  1966.                     'dots'            => 'yes',
  1967.                     'pagination_type' => 'bullets',
  1968.                 ),
  1969.             )
  1970.         );
  1971.  
  1972.         $this->start_controls_tabs( 'tabs_dots_style' );
  1973.  
  1974.         $this->start_controls_tab(
  1975.             'tab_dots_normal',
  1976.             array(
  1977.                 'label'     => __( 'Normal', 'powerpack' ),
  1978.                 'condition' => array(
  1979.                     'layout'          => 'carousel',
  1980.                     'dots'            => 'yes',
  1981.                     'pagination_type' => 'bullets',
  1982.                 ),
  1983.             )
  1984.         );
  1985.  
  1986.         $this->add_control(
  1987.             'dots_color_normal',
  1988.             array(
  1989.                 'label'     => __( 'Color', 'powerpack' ),
  1990.                 'type'      => Controls_Manager::COLOR,
  1991.                 'default'   => '',
  1992.                 'selectors' => array(
  1993.                     '{{WRAPPER}} .swiper-pagination-bullet' => 'background: {{VALUE}};',
  1994.                 ),
  1995.                 'condition' => array(
  1996.                     'layout'          => 'carousel',
  1997.                     'dots'            => 'yes',
  1998.                     'pagination_type' => 'bullets',
  1999.                 ),
  2000.             )
  2001.         );
  2002.  
  2003.         $this->add_control(
  2004.             'active_dot_color_normal',
  2005.             array(
  2006.                 'label'     => __( 'Active Color', 'powerpack' ),
  2007.                 'type'      => Controls_Manager::COLOR,
  2008.                 'default'   => '',
  2009.                 'selectors' => array(
  2010.                     '{{WRAPPER}} .swiper-pagination-bullet.swiper-pagination-bullet-active' => 'background: {{VALUE}};',
  2011.                 ),
  2012.                 'condition' => array(
  2013.                     'layout'          => 'carousel',
  2014.                     'dots'            => 'yes',
  2015.                     'pagination_type' => 'bullets',
  2016.                 ),
  2017.             )
  2018.         );
  2019.  
  2020.         $this->add_group_control(
  2021.             Group_Control_Border::get_type(),
  2022.             array(
  2023.                 'name'        => 'dots_border_normal',
  2024.                 'label'       => __( 'Border', 'powerpack' ),
  2025.                 'placeholder' => '1px',
  2026.                 'default'     => '1px',
  2027.                 'selector'    => '{{WRAPPER}} .swiper-pagination-bullet',
  2028.                 'condition'   => array(
  2029.                     'layout'          => 'carousel',
  2030.                     'dots'            => 'yes',
  2031.                     'pagination_type' => 'bullets',
  2032.                 ),
  2033.             )
  2034.         );
  2035.  
  2036.         $this->add_control(
  2037.             'dots_border_radius_normal',
  2038.             array(
  2039.                 'label'      => __( 'Border Radius', 'powerpack' ),
  2040.                 'type'       => Controls_Manager::DIMENSIONS,
  2041.                 'size_units' => array( 'px', '%' ),
  2042.                 'selectors'  => array(
  2043.                     '{{WRAPPER}} .swiper-pagination-bullet' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  2044.                 ),
  2045.                 'condition'  => array(
  2046.                     'layout'          => 'carousel',
  2047.                     'dots'            => 'yes',
  2048.                     'pagination_type' => 'bullets',
  2049.                 ),
  2050.             )
  2051.         );
  2052.  
  2053.         $this->add_responsive_control(
  2054.             'dots_margin',
  2055.             array(
  2056.                 'label'              => __( 'Margin', 'powerpack' ),
  2057.                 'type'               => Controls_Manager::DIMENSIONS,
  2058.                 'size_units'         => array( 'px', 'em', '%' ),
  2059.                 'allowed_dimensions' => 'vertical',
  2060.                 'placeholder'        => array(
  2061.                     'top'    => '',
  2062.                     'right'  => 'auto',
  2063.                     'bottom' => '',
  2064.                     'left'   => 'auto',
  2065.                 ),
  2066.                 'selectors'          => array(
  2067.                     '{{WRAPPER}} .swiper-pagination' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
  2068.                 ),
  2069.                 'condition'          => array(
  2070.                     'layout'          => 'carousel',
  2071.                     'dots'            => 'yes',
  2072.                     'pagination_type' => 'bullets',
  2073.                 ),
  2074.             )
  2075.         );
  2076.  
  2077.         $this->end_controls_tab();
  2078.  
  2079.         $this->start_controls_tab(
  2080.             'tab_dots_hover',
  2081.             array(
  2082.                 'label'     => __( 'Hover', 'powerpack' ),
  2083.                 'condition' => array(
  2084.                     'layout'          => 'carousel',
  2085.                     'dots'            => 'yes',
  2086.                     'pagination_type' => 'bullets',
  2087.                 ),
  2088.             )
  2089.         );
  2090.  
  2091.         $this->add_control(
  2092.             'dots_color_hover',
  2093.             array(
  2094.                 'label'     => __( 'Color', 'powerpack' ),
  2095.                 'type'      => Controls_Manager::COLOR,
  2096.                 'default'   => '',
  2097.                 'selectors' => array(
  2098.                     '{{WRAPPER}} .swiper-pagination-bullet:hover' => 'background: {{VALUE}};',
  2099.                 ),
  2100.                 'condition' => array(
  2101.                     'layout'          => 'carousel',
  2102.                     'dots'            => 'yes',
  2103.                     'pagination_type' => 'bullets',
  2104.                 ),
  2105.             )
  2106.         );
  2107.  
  2108.         $this->add_control(
  2109.             'dots_border_color_hover',
  2110.             array(
  2111.                 'label'     => __( 'Border Color', 'powerpack' ),
  2112.                 'type'      => Controls_Manager::COLOR,
  2113.                 'default'   => '',
  2114.                 'selectors' => array(
  2115.                     '{{WRAPPER}} .swiper-pagination-bullet:hover' => 'border-color: {{VALUE}};',
  2116.                 ),
  2117.                 'condition' => array(
  2118.                     'layout'          => 'carousel',
  2119.                     'dots'            => 'yes',
  2120.                     'pagination_type' => 'bullets',
  2121.                 ),
  2122.             )
  2123.         );
  2124.  
  2125.         $this->end_controls_tab();
  2126.  
  2127.         $this->end_controls_tabs();
  2128.  
  2129.         $this->end_controls_section();
  2130.  
  2131.         /**
  2132.          * Style Tab: Pagination: Dots
  2133.          * -------------------------------------------------
  2134.          */
  2135.         $this->start_controls_section(
  2136.             'section_fraction_style',
  2137.             array(
  2138.                 'label'     => __( 'Pagination: Fraction', 'powerpack' ),
  2139.                 'tab'       => Controls_Manager::TAB_STYLE,
  2140.                 'condition' => array(
  2141.                     'dots'            => 'yes',
  2142.                     'pagination_type' => 'fraction',
  2143.                 ),
  2144.             )
  2145.         );
  2146.  
  2147.         $this->add_control(
  2148.             'fraction_text_color',
  2149.             array(
  2150.                 'label'     => __( 'Text Color', 'powerpack' ),
  2151.                 'type'      => Controls_Manager::COLOR,
  2152.                 'default'   => '',
  2153.                 'selectors' => array(
  2154.                     '{{WRAPPER}} .swiper-pagination-fraction' => 'color: {{VALUE}};',
  2155.                 ),
  2156.                 'condition' => array(
  2157.                     'dots'            => 'yes',
  2158.                     'pagination_type' => 'fraction',
  2159.                 ),
  2160.             )
  2161.         );
  2162.  
  2163.         $this->add_group_control(
  2164.             Group_Control_Typography::get_type(),
  2165.             array(
  2166.                 'name'      => 'fraction_typography',
  2167.                 'label'     => __( 'Typography', 'powerpack' ),
  2168.                 'scheme'    => Scheme_Typography::TYPOGRAPHY_4,
  2169.                 'selector'  => '{{WRAPPER}} .swiper-pagination-fraction',
  2170.                 'condition' => array(
  2171.                     'dots'            => 'yes',
  2172.                     'pagination_type' => 'fraction',
  2173.                 ),
  2174.             )
  2175.         );
  2176.  
  2177.         $this->add_control(
  2178.             'fraction_position',
  2179.             array(
  2180.                 'label'        => __( 'Position', 'powerpack' ),
  2181.                 'type'         => Controls_Manager::SELECT,
  2182.                 'options'      => array(
  2183.                     'inside'  => __( 'Inside', 'powerpack' ),
  2184.                     'outside' => __( 'Outside', 'powerpack' ),
  2185.                 ),
  2186.                 'default'      => 'outside',
  2187.                 'prefix_class' => 'pp-swiper-slider-pagination-',
  2188.                 'condition'    => array(
  2189.                     'dots'            => 'yes',
  2190.                     'pagination_type' => 'fraction',
  2191.                 ),
  2192.             )
  2193.         );
  2194.  
  2195.         $this->end_controls_section();
  2196.     }
  2197.  
  2198.     /**
  2199.      * Render Video Gallery output on the frontend.
  2200.      *
  2201.      * Written in PHP and used to generate the final HTML.
  2202.      *
  2203.      * @access protected
  2204.      */
  2205.     protected function render() {
  2206.         $settings = $this->get_settings_for_display();
  2207.  
  2208.         $classes = array(
  2209.             'pp-video-gallery',
  2210.         );
  2211.  
  2212.         $this->add_render_attribute(
  2213.             array(
  2214.                 'gallery-container' => array(
  2215.                     'class' => array(
  2216.                         'pp-video-gallery-container',
  2217.                         'pp-video-gallery-' . $settings['layout'],
  2218.                     ),
  2219.                 ),
  2220.                 'gallery-wrap'      => array(
  2221.                     'class' => 'pp-video-gallery-wrapper',
  2222.                 ),
  2223.             )
  2224.         );
  2225.  
  2226.         if ( 'carousel' === $settings['layout'] ) {
  2227.             $slider_options = $this->slider_settings();
  2228.             $this->add_render_attribute( 'gallery-wrap', 'data-slider-settings', wp_json_encode( $slider_options ) );
  2229.         }
  2230.  
  2231.         if ( 'grid' === $settings['layout'] ) {
  2232.             $classes[] = 'pp-elementor-grid';
  2233.         }
  2234.  
  2235.         if ( 'grid' === $settings['layout'] && 'yes' === $settings['filter_enable'] ) {
  2236.             $classes[] = 'pp-video-gallery-filter-enabled';
  2237.         }
  2238.  
  2239.         $this->add_render_attribute(
  2240.             'gallery',
  2241.             array(
  2242.                 'class'       => $classes,
  2243.                 'data-action' => $settings['click_action'],
  2244.             )
  2245.         );
  2246.  
  2247.         if ( 'carousel' === $settings['layout'] ) {
  2248.             $direction = ( 'right' === $settings['direction'] ) ? 'rtl' : 'ltr';
  2249.  
  2250.             $this->add_render_attribute(
  2251.                 array(
  2252.                     'gallery-wrap' => array(
  2253.                         'class' => 'swiper-container-wrap',
  2254.                     ),
  2255.                     'gallery'      => array(
  2256.                         'class' => 'swiper-container',
  2257.                         'dir'   => $direction,
  2258.                     ),
  2259.                 )
  2260.             );
  2261.         }
  2262.         ?>
  2263.         <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'gallery-container' ) ); ?>>
  2264.             <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'gallery-wrap' ) ); ?>>
  2265.                 <?php $this->render_filters(); ?>
  2266.                 <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'gallery' ) ); ?>>
  2267.                     <?php if ( 'carousel' === $settings['layout'] ) { ?>
  2268.                     <div class="swiper-wrapper">
  2269.                     <?php } ?>
  2270.                         <?php $this->render_videos(); ?>
  2271.                     <?php if ( 'carousel' === $settings['layout'] ) { ?>
  2272.                     </div>
  2273.                     <?php } ?>
  2274.                 </div>
  2275.                 <?php
  2276.                     $this->render_dots();
  2277.                     $this->render_arrows();
  2278.                 ?>
  2279.             </div>
  2280.         </div>
  2281.         <?php
  2282.  
  2283.         if ( \Elementor\Plugin::instance()->editor->is_edit_mode() ) {
  2284.  
  2285.             if ( ( 'grid' === $settings['layout'] && 'yes' === $settings['filter_enable'] ) ) {
  2286.                 $this->render_editor_script();
  2287.             }
  2288.         }
  2289.     }
  2290.  
  2291.     /**
  2292.      * Carousel Settings.
  2293.      *
  2294.      * @access public
  2295.      */
  2296.     public function slider_settings() {
  2297.         $settings = $this->get_settings();
  2298.  
  2299.         $slides_to_show        = ( '' !== $settings['columns'] ) ? absint( $settings['columns'] ) : 3;
  2300.         $slides_to_show_tablet = ( '' !== $settings['columns_tablet'] ) ? absint( $settings['columns_tablet'] ) : 2;
  2301.         $slides_to_show_mobile = ( '' !== $settings['columns_mobile'] ) ? absint( $settings['columns_mobile'] ) : 2;
  2302.  
  2303.         $slider_options = array(
  2304.             'direction'      => 'horizontal',
  2305.             'speed'          => ( '' !== $settings['animation_speed'] ) ? $settings['animation_speed'] : 600,
  2306.             'slidesPerView'  => $slides_to_show,
  2307.             'slidesPerGroup' => 1,
  2308.             'spaceBetween'   => ( $settings['columns_gap']['size'] ) ? $settings['columns_gap']['size'] : 10,
  2309.             'autoHeight'     => ( 'yes' === $settings['adaptive_height'] ),
  2310.             'loop'           => ( 'yes' === $settings['infinite_loop'] ),
  2311.         );
  2312.  
  2313.         if ( 'yes' === $settings['autoplay'] && ! empty( $settings['autoplay_speed'] ) ) {
  2314.             $autoplay_speed = $settings['autoplay_speed'];
  2315.         } else {
  2316.             $autoplay_speed = 999999;
  2317.         }
  2318.  
  2319.         $slider_options['autoplay'] = array(
  2320.             'delay' => $autoplay_speed,
  2321.         );
  2322.  
  2323.         if ( 'yes' === $settings['dots'] ) {
  2324.             $slider_options['pagination'] = array(
  2325.                 'el'        => '.swiper-pagination-' . esc_attr( $this->get_id() ),
  2326.                 'type'      => $settings['pagination_type'],
  2327.                 'clickable' => true,
  2328.             );
  2329.         }
  2330.  
  2331.         if ( 'yes' === $settings['arrows'] ) {
  2332.             $slider_options['navigation'] = array(
  2333.                 'nextEl' => '.pp-swiper-button-next-' . esc_attr( $this->get_id() ),
  2334.                 'prevEl' => '.pp-swiper-button-prev-' . esc_attr( $this->get_id() ),
  2335.             );
  2336.         }
  2337.  
  2338.         $elementor_bp_lg = get_option( 'elementor_viewport_lg' );
  2339.         $elementor_bp_md = get_option( 'elementor_viewport_md' );
  2340.         $bp_desktop      = ! empty( $elementor_bp_lg ) ? $elementor_bp_lg : 1025;
  2341.         $bp_tablet       = ! empty( $elementor_bp_md ) ? $elementor_bp_md : 768;
  2342.         $bp_mobile       = 320;
  2343.  
  2344.         $slider_options['breakpoints'] = array(
  2345.             $bp_desktop => array(
  2346.                 'slidesPerView'  => ( $slides_to_show ) ? absint( $slides_to_show ) : 3,
  2347.                 'slidesPerGroup' => 1,
  2348.                 'spaceBetween'   => ( $settings['columns_gap']['size'] ) ? $settings['columns_gap']['size'] : 10,
  2349.             ),
  2350.             $bp_tablet  => array(
  2351.                 'slidesPerView'  => ( $slides_to_show_tablet ) ? absint( $slides_to_show_tablet ) : 2,
  2352.                 'slidesPerGroup' => 1,
  2353.                 'spaceBetween'   => ( $settings['columns_gap_tablet']['size'] ) ? $settings['columns_gap_tablet']['size'] : 10,
  2354.             ),
  2355.             $bp_mobile  => array(
  2356.                 'slidesPerView'  => ( $slides_to_show_mobile ) ? absint( $slides_to_show_mobile ) : 1,
  2357.                 'slidesPerGroup' => 1,
  2358.                 'spaceBetween'   => ( $settings['columns_gap_mobile']['size'] ) ? $settings['columns_gap_mobile']['size'] : 10,
  2359.             ),
  2360.         );
  2361.  
  2362.         return $slider_options;
  2363.     }
  2364.  
  2365.     /**
  2366.      * Render coupons carousel dots output on the frontend.
  2367.      *
  2368.      * Written in PHP and used to generate the final HTML.
  2369.      *
  2370.      * @access protected
  2371.      */
  2372.     protected function render_dots() {
  2373.         $settings = $this->get_settings_for_display();
  2374.  
  2375.         if ( 'yes' === $settings['dots'] ) {
  2376.             ?>
  2377.             <!-- Add Pagination -->
  2378.             <div class="swiper-pagination swiper-pagination-<?php echo esc_attr( $this->get_id() ); ?>"></div>
  2379.             <?php
  2380.         }
  2381.     }
  2382.  
  2383.     /**
  2384.      * Render coupons carousel arrows output on the frontend.
  2385.      *
  2386.      * Written in PHP and used to generate the final HTML.
  2387.      *
  2388.      * @access protected
  2389.      */
  2390.     protected function render_arrows() {
  2391.         $settings = $this->get_settings_for_display();
  2392.  
  2393.         $migration_allowed = Icons_Manager::is_migration_allowed();
  2394.  
  2395.         if ( ! isset( $settings['arrow'] ) && ! Icons_Manager::is_migration_allowed() ) {
  2396.             // add old default.
  2397.             $settings['arrow'] = 'fa fa-angle-right';
  2398.         }
  2399.  
  2400.         $has_icon = ! empty( $settings['arrow'] );
  2401.  
  2402.         if ( ! $has_icon && ! empty( $settings['select_arrow']['value'] ) ) {
  2403.             $has_icon = true;
  2404.         }
  2405.  
  2406.         $migrated = isset( $settings['__fa4_migrated']['select_arrow'] );
  2407.         $is_new = ! isset( $settings['arrow'] ) && $migration_allowed;
  2408.  
  2409.         if ( 'yes' === $settings['arrows'] ) {
  2410.             ?>
  2411.             <?php
  2412.             if ( $has_icon ) {
  2413.                 if ( $is_new || $migrated ) {
  2414.                     $pa_next_arrow = str_replace( 'left', 'right', $settings['select_arrow']['value'] );
  2415.                     $pa_prev_arrow = str_replace( 'right', 'left', $settings['select_arrow']['value'] );
  2416.                 } else {
  2417.                     $pa_next_arrow = $settings['arrow'];
  2418.                     $pa_prev_arrow = str_replace( 'right', 'left', $settings['arrow'] );
  2419.                 }
  2420.             } else {
  2421.                 $pa_next_arrow = 'fa fa-angle-right';
  2422.                 $pa_prev_arrow = 'fa fa-angle-left';
  2423.             }
  2424.             ?>
  2425.  
  2426.             <?php if ( ! empty( $settings['arrow'] ) || ( ! empty( $settings['select_arrow']['value'] ) && $is_new ) ) { ?>
  2427.                 <!-- Add Arrows -->
  2428.                 <div class="pp-swiper-button pp-swiper-button-prev pp-slider-arrow pp-arrow-prev pp-swiper-button-prev-<?php echo esc_attr( $this->get_id() ); ?>">
  2429.                     <i aria-hidden="true" class="<?php echo esc_attr( $pa_prev_arrow ); ?>"></i>
  2430.                 </div>
  2431.                 <div class="pp-swiper-button pp-swiper-button-next pp-slider-arrow pp-arrow-next pp-swiper-button-next-<?php echo esc_attr( $this->get_id() ); ?>">
  2432.                     <i aria-hidden="true" class="<?php echo esc_attr( $pa_next_arrow ); ?>"></i>
  2433.                 </div>
  2434.             <?php } ?>
  2435.             <?php
  2436.         }
  2437.     }
  2438.  
  2439.     /**
  2440.      * Render Video Gallery Filters
  2441.      *
  2442.      * @return void
  2443.      */
  2444.     protected function render_filters() {
  2445.         $settings = $this->get_settings_for_display();
  2446.  
  2447.         if ( 'grid' === $settings['layout'] && 'yes' === $settings['filter_enable'] ) {
  2448.             $all_text = ( $settings['filter_all_label'] ) ? $settings['filter_all_label'] : esc_html__( 'All', 'powerpack' );
  2449.             $gallery  = $this->get_filter_values();
  2450.             ?>
  2451.             <div class="pp-gallery-filters">
  2452.                 <div class="pp-gallery-filter pp-active" data-filter="*">
  2453.                     <span class="pp-gallery-filter-text">
  2454.                         <?php echo $all_text; ?>
  2455.                     </span>
  2456.                 </div>
  2457.                 <?php
  2458.                 foreach ( $gallery as $index => $item ) {
  2459.                     $filter_label = $item;
  2460.                     if ( $item ) {
  2461.                         ?>
  2462.                     <div class="pp-gallery-filter" data-filter=".<?php echo ( $index ); ?>">
  2463.                         <span class="pp-gallery-filter-text"><?php echo $filter_label; ?></span>
  2464.                     </div>
  2465.                     <?php } ?>
  2466.                 <?php } ?>
  2467.             </div>
  2468.             <?php
  2469.         }
  2470.     }
  2471.  
  2472.     /**
  2473.      * Render Videos
  2474.      *
  2475.      * @access protected
  2476.      */
  2477.     protected function render_videos() {
  2478.         $settings       = $this->get_settings_for_display();
  2479.         $gallery_videos = $settings['gallery_videos'];
  2480.         $gallery        = array();
  2481.  
  2482.         if ( 'random' === $settings['ordering'] ) {
  2483.  
  2484.             $keys = array_keys( $gallery_videos );
  2485.             shuffle( $keys );
  2486.  
  2487.             foreach ( $keys as $key ) {
  2488.                 $gallery[ $key ] = $gallery_videos[ $key ];
  2489.             }
  2490.         } else {
  2491.             $gallery = $gallery_videos;
  2492.         }
  2493.  
  2494.         foreach ( $gallery as $index => $item ) {
  2495.             if ( 'carousel' === $settings['layout'] ) {
  2496.                 $this->add_render_attribute( 'grid-item-wrap' . $index, 'class', array( 'pp-video-gallery-item-wrap', 'swiper-slide' ) );
  2497.             } else {
  2498.                 $tags = $this->get_filter_keys( $item );
  2499.  
  2500.                 $this->add_render_attribute( 'grid-item-wrap' . $index, 'class', array( 'pp-grid-item-wrap', 'pp-video-gallery-item-wrap' ) );
  2501.  
  2502.                 $this->add_render_attribute( 'grid-item-wrap' . $index, 'class', array_keys( $tags ) );
  2503.             }
  2504.             ?>
  2505.             <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'grid-item-wrap' . $index ) ); ?>>
  2506.                 <div class="pp-grid-item pp-video-gallery-item">
  2507.                     <div class="pp-video-title-wrap">
  2508.                         <?php
  2509.                             $video_url_src = '';
  2510.                             $thumb_size    = '';
  2511.                         if ( 'youtube' === $item['video_source'] ) {
  2512.                             $video_url_src = $item['youtube_url'];
  2513.                             $thumb_size    = $item['thumbnail_size'];
  2514.                         } elseif ( 'vimeo' === $item['video_source'] ) {
  2515.                             $video_url_src = $item['vimeo_url'];
  2516.                         } elseif ( 'dailymotion' === $item['video_source'] ) {
  2517.                             $video_url_src = $item['dailymotion_url'];
  2518.                         }
  2519.  
  2520.                             $this->add_render_attribute( 'video-container' . $index, 'class', array( 'pp-video-container', 'elementor-fit-aspect-ratio' ) );
  2521.                             $this->add_render_attribute( 'video-play' . $index, 'class', 'pp-video-play' );
  2522.  
  2523.                         if ( 'inline' === $settings['click_action'] ) {
  2524.                             $embed_params = $this->get_embed_params( $item );
  2525.                             $video_url    = Embed::get_embed_url( $video_url_src, $embed_params, array() );
  2526.  
  2527.                             $this->add_render_attribute( 'video-play' . $index, 'data-src', $video_url );
  2528.                         } else {
  2529.                             $video_url = $video_url_src;
  2530.  
  2531.                             $this->add_render_attribute( 'video-play' . $index, 'data-fancybox', 'video-gallery-' . $this->get_id() );
  2532.                         }
  2533.  
  2534.                             $this->add_render_attribute( 'video-play' . $index, 'href', $video_url );
  2535.                         ?>
  2536.                         <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'video-container' . $index ) ); ?>>
  2537.                             <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'video-play' . $index ) ); ?>>
  2538.                                 <?php
  2539.                                     // Video Overlay.
  2540.                                     echo $this->render_video_overlay( $index );
  2541.                                 ?>
  2542.                                 <div class="pp-video-player">
  2543.                                     <img class="pp-video-thumb" src="<?php echo esc_url( $this->get_video_thumbnail( $item, $thumb_size ) ); ?>" alt="<?php echo esc_attr( $item['filter_label'] ); ?>">
  2544.                                     <?php $this->render_play_icon(); ?>
  2545.                                 </div>
  2546.                             </div>
  2547.                         </div>
  2548.                     </div>
  2549.                     <?php if ( $item['video_title'] || $item['video_description'] ) { ?>
  2550.                         <div class="pp-video-content">
  2551.                             <?php if ( $item['video_title'] ) { ?>
  2552.                                 <div class="pp-video-title">
  2553.                                     <?php echo $item['video_title']; ?>
  2554.                                 </div>
  2555.                             <?php } ?>
  2556.  
  2557.                             <?php if ( $item['video_description'] ) { ?>
  2558.                                 <div class="pp-video-description">
  2559.                                     <?php echo $item['video_description']; ?>
  2560.                                 </div>
  2561.                             <?php } ?>
  2562.                         </div>
  2563.                     <?php } ?>
  2564.                 </div>
  2565.             </div>
  2566.             <?php
  2567.         }
  2568.     }
  2569.  
  2570.     /**
  2571.      * Returns Video Thumbnail.
  2572.      *
  2573.      * @param  array $item       Video.
  2574.      * @param  mixed $thumb_size Thumbnail size.
  2575.      *
  2576.      * @access protected
  2577.      */
  2578.     protected function get_video_thumbnail( $item, $thumb_size ) {
  2579.  
  2580.         $thumb_url = '';
  2581.         $video_id  = $this->get_video_id( $item );
  2582.  
  2583.         if ( 'yes' === $item['custom_thumbnail'] ) {
  2584.  
  2585.             if ( $item['custom_image']['url'] ) {
  2586.                 $thumb_url = $item['custom_image']['url'];
  2587.             }
  2588.         } elseif ( 'youtube' === $item['video_source'] ) {
  2589.  
  2590.             if ( $video_id ) {
  2591.                 $thumb_url = 'https://i.ytimg.com/vi/' . $video_id . '/' . $thumb_size . '.jpg';
  2592.             }
  2593.         } elseif ( 'vimeo' === $item['video_source'] ) {
  2594.  
  2595.             if ( $video_id ) {
  2596.                 $vimeo     = unserialize( file_get_contents( "https://vimeo.com/api/v2/video/$video_id.php" ) );
  2597.                 $thumb_url = $vimeo[0]['thumbnail_large'];
  2598.             }
  2599.         } elseif ( 'dailymotion' === $item['video_source'] ) {
  2600.  
  2601.             if ( $video_id ) {
  2602.                 $dailymotion   = 'https://api.dailymotion.com/video/' . $video_id . '?fields=thumbnail_url';
  2603.                 $get_thumbnail = json_decode( file_get_contents( $dailymotion ), true );
  2604.                 $thumb_url     = $get_thumbnail['thumbnail_url'];
  2605.             }
  2606.         }
  2607.  
  2608.         return $thumb_url;
  2609.  
  2610.     }
  2611.  
  2612.     /**
  2613.      * Returns Video ID.
  2614.      *
  2615.      * @access protected
  2616.      */
  2617.     protected function get_video_id( $item ) {
  2618.  
  2619.         $video_id = '';
  2620.  
  2621.         if ( 'youtube' === $item['video_source'] ) {
  2622.             $url = $item['youtube_url'];
  2623.  
  2624.             if ( preg_match( '#(?<=v=|v\/|vi=|vi\/|youtu.be\/)[a-zA-Z0-9_-]{11}#', $url, $matches ) ) {
  2625.                 $video_id = $matches[0];
  2626.             }
  2627.         } elseif ( 'vimeo' === $item['video_source'] ) {
  2628.             $url = $item['vimeo_url'];
  2629.  
  2630.             $video_id = preg_replace( '/[^\/]+[^0-9]|(\/)/', '', rtrim( $url, '/' ) );
  2631.  
  2632.         } elseif ( 'dailymotion' === $item['video_source'] ) {
  2633.             $url = $item['dailymotion_url'];
  2634.  
  2635.             if ( preg_match( '/^.+dailymotion.com\/(?:video|swf\/video|embed\/video|hub|swf)\/([^&?]+)/', $url, $matches ) ) {
  2636.                 $video_id = $matches[1];
  2637.             }
  2638.         }
  2639.  
  2640.         return $video_id;
  2641.  
  2642.     }
  2643.  
  2644.     /**
  2645.      * Get embed params.
  2646.      *
  2647.      * Retrieve video widget embed parameters.
  2648.      *
  2649.      * @access public
  2650.      *
  2651.      * @return array Video embed parameters.
  2652.      */
  2653.     public function get_embed_params( $item ) {
  2654.         $settings = $this->get_settings_for_display();
  2655.  
  2656.         $params = array();
  2657.  
  2658.         $params_dictionary = array();
  2659.  
  2660.         if ( 'youtube' === $item['video_source'] ) {
  2661.  
  2662.             $params_dictionary = array(
  2663.                 'mute',
  2664.             );
  2665.  
  2666.             $params['autoplay'] = 1;
  2667.  
  2668.             $params['wmode'] = 'opaque';
  2669.         } elseif ( 'vimeo' === $item['video_source'] ) {
  2670.  
  2671.             $params_dictionary = array(
  2672.                 'mute' => 'muted',
  2673.             );
  2674.  
  2675.             $params['autopause'] = '0';
  2676.             $params['autoplay']  = '1';
  2677.         } elseif ( 'dailymotion' === $item['video_source'] ) {
  2678.  
  2679.             $params_dictionary = array(
  2680.                 'mute',
  2681.             );
  2682.  
  2683.             $params['endscreen-enable'] = '0';
  2684.             $params['autoplay']         = 1;
  2685.  
  2686.         }
  2687.  
  2688.         foreach ( $params_dictionary as $key => $param_name ) {
  2689.             $setting_name = $param_name;
  2690.  
  2691.             if ( is_string( $key ) ) {
  2692.                 $setting_name = $key;
  2693.             }
  2694.  
  2695.             $setting_value = $settings[ $setting_name ] ? '1' : '0';
  2696.  
  2697.             $params[ $param_name ] = $setting_value;
  2698.         }
  2699.  
  2700.         return $params;
  2701.     }
  2702.  
  2703.     protected function render_video_overlay( $index ) {
  2704.         $overlay_setting_key = $this->get_repeater_setting_key( 'overlay', 'gallery_videos', $index );
  2705.  
  2706.         $this->add_render_attribute(
  2707.             $overlay_setting_key,
  2708.             'class',
  2709.             array(
  2710.                 'pp-media-overlay',
  2711.                 'pp-video-gallery-overlay',
  2712.             )
  2713.         );
  2714.  
  2715.         return '<div ' . $this->get_render_attribute_string( $overlay_setting_key ) . '></div>';
  2716.     }
  2717.  
  2718.     /**
  2719.      * Render play icon output on the frontend.
  2720.      *
  2721.      * Written in PHP and used to generate the final HTML.
  2722.      *
  2723.      * @access protected
  2724.      */
  2725.     protected function render_play_icon() {
  2726.         $settings = $this->get_settings_for_display();
  2727.  
  2728.         if ( 'none' === $settings['play_icon_type'] ) {
  2729.             return;
  2730.         }
  2731.  
  2732.         $this->add_render_attribute( 'play-icon', 'class', 'pp-video-play-icon' );
  2733.  
  2734.         if ( 'icon' === $settings['play_icon_type'] ) {
  2735.             $this->add_render_attribute( 'play-icon', 'class', 'pp-icon' );
  2736.  
  2737.             if ( ! isset( $settings['play_icon'] ) && ! Icons_Manager::is_migration_allowed() ) {
  2738.                 // add old default
  2739.                 $settings['play_icon'] = 'fa fa-play-circle';
  2740.             }
  2741.  
  2742.             $has_icon = ! empty( $settings['play_icon'] );
  2743.  
  2744.             if ( $has_icon ) {
  2745.                 $this->add_render_attribute( 'play-icon-i', 'class', $settings['play_icon'] );
  2746.                 $this->add_render_attribute( 'play-icon-i', 'aria-hidden', 'true' );
  2747.             }
  2748.  
  2749.             if ( ! $has_icon && ! empty( $settings['select_play_icon']['value'] ) ) {
  2750.                 $has_icon = true;
  2751.             }
  2752.             $migrated = isset( $settings['__fa4_migrated']['select_play_icon'] );
  2753.             $is_new   = ! isset( $settings['play_icon'] ) && Icons_Manager::is_migration_allowed();
  2754.             ?>
  2755.             <span <?php echo $this->get_render_attribute_string( 'play-icon' ); ?>>
  2756.                 <?php
  2757.                 if ( $is_new || $migrated ) {
  2758.                     Icons_Manager::render_icon( $settings['select_play_icon'], array( 'aria-hidden' => 'true' ) );
  2759.                 } elseif ( ! empty( $settings['play_icon'] ) ) {
  2760.                     ?>
  2761.                     <i <?php echo $this->get_render_attribute_string( 'play-icon-i' ); ?>></i>
  2762.                     <?php
  2763.                 }
  2764.                 ?>
  2765.             </span>
  2766.             <?php
  2767.  
  2768.         } elseif ( 'image' === $settings['play_icon_type'] ) {
  2769.  
  2770.             if ( $settings['play_icon_image']['url'] ) {
  2771.                 ?>
  2772.                 <span <?php echo $this->get_render_attribute_string( 'play-icon' ); ?>>
  2773.                     <img src="<?php echo esc_url( $settings['play_icon_image']['url'] ); ?>">
  2774.                 </span>
  2775.                 <?php
  2776.             }
  2777.         }
  2778.     }
  2779.  
  2780.     /**
  2781.      * Clean string - Removes spaces and special chars.
  2782.      *
  2783.      * @param  String $string String to be cleaned.
  2784.      * @return array Google Map languages List.
  2785.      */
  2786.     public function clean( $string ) {
  2787.  
  2788.         // Replaces all spaces with hyphens.
  2789.         $string = str_replace( ' ', '-', $string );
  2790.  
  2791.         // Removes special chars.
  2792.         $string = preg_replace( '/[^A-Za-z0-9\-]/', '', $string );
  2793.  
  2794.         // Turn into lower case characters.
  2795.         return strtolower( $string );
  2796.     }
  2797.  
  2798.     /**
  2799.      * Render filter keys array.
  2800.      *
  2801.      * @access public
  2802.      */
  2803.     public function get_filter_keys( $item ) {
  2804.  
  2805.         $filters = explode( ',', $item['filter_label'] );
  2806.         $filters = array_map( 'trim', $filters );
  2807.  
  2808.         $filters_array = [];
  2809.  
  2810.         foreach ( $filters as $key => $value ) {
  2811.             $filters_array[ $this->clean( $value ) ] = $value;
  2812.         }
  2813.  
  2814.         return $filters_array;
  2815.     }
  2816.  
  2817.     /**
  2818.      * Get Filter values array.
  2819.      *
  2820.      * Returns the Filter array of objects.
  2821.      *
  2822.      * @access public
  2823.      */
  2824.     public function get_filter_values() {
  2825.  
  2826.         $settings = $this->get_settings_for_display();
  2827.  
  2828.         $filters = array();
  2829.  
  2830.         if ( ! empty( $settings['gallery_videos'] ) ) {
  2831.  
  2832.             foreach ( $settings['gallery_videos'] as $key => $value ) {
  2833.  
  2834.                 $filter_keys = $this->get_filter_keys( $value );
  2835.  
  2836.                 if ( ! empty( $filter_keys ) ) {
  2837.  
  2838.                     $filters = array_unique( array_merge( $filters, $filter_keys ) );
  2839.                 }
  2840.             }
  2841.         }
  2842.  
  2843.         return $filters;
  2844.     }
  2845.     /**
  2846.      * Render isotope script
  2847.      *
  2848.      * @access protected
  2849.      */
  2850.     protected function render_editor_script() {
  2851.         ?>
  2852.         <script type="text/javascript">
  2853.             jQuery( document ).ready( function( $ ) {
  2854.                 $( '.pp-video-gallery' ).each( function() {
  2855.                     var $node_id    = '<?php echo $this->get_id(); ?>',
  2856.                         $scope      = $( '[data-id="' + $node_id + '"]' ),
  2857.                         $gallery    = $(this);
  2858.  
  2859.                     if ( $gallery.closest( $scope ).length < 1 ) {
  2860.                         return;
  2861.                     }
  2862.  
  2863.                     var $layout_mode = 'fitRows';
  2864.  
  2865.                     var $isotope_args = {
  2866.                         itemSelector:   '.pp-grid-item-wrap',
  2867.                         layoutMode      : $layout_mode,
  2868.                         percentPosition : true,
  2869.                     },
  2870.                         $isotope_gallery = {};
  2871.  
  2872.                     $gallery.imagesLoaded( function(e) {
  2873.                         $isotope_gallery = $gallery.isotope( $isotope_args );
  2874.  
  2875.                         $gallery.find('.pp-grid-item-wrap').resize( function() {
  2876.                             $gallery.isotope( 'layout' );
  2877.                         });
  2878.                     });
  2879.  
  2880.                     $('.pp-gallery-filters').on( 'click', '.pp-gallery-filter', function() {
  2881.                         var $this = $(this),
  2882.                             filterValue = $this.attr('data-filter');
  2883.  
  2884.                         $this.siblings().removeClass('pp-active');
  2885.                         $this.addClass('pp-active');
  2886.                         $isotope_gallery.isotope({ filter: filterValue });
  2887.                     });
  2888.                 });
  2889.             });
  2890.         </script>
  2891.         <?php
  2892.     }
  2893. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement