1402 lines
34 KiB
PHP
1402 lines
34 KiB
PHP
|
<?php
|
|||
|
namespace Elementor;
|
|||
|
|
|||
|
use Elementor\Modules\DynamicTags\Module as TagsModule;
|
|||
|
|
|||
|
if ( ! defined( 'ABSPATH' ) ) {
|
|||
|
exit; // Exit if accessed directly.
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Elementor video widget.
|
|||
|
*
|
|||
|
* Elementor widget that displays a video player.
|
|||
|
*
|
|||
|
* @since 1.0.0
|
|||
|
*/
|
|||
|
class Widget_Video extends Widget_Base {
|
|||
|
|
|||
|
/**
|
|||
|
* Get widget name.
|
|||
|
*
|
|||
|
* Retrieve video widget name.
|
|||
|
*
|
|||
|
* @since 1.0.0
|
|||
|
* @access public
|
|||
|
*
|
|||
|
* @return string Widget name.
|
|||
|
*/
|
|||
|
public function get_name() {
|
|||
|
return 'video';
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get widget title.
|
|||
|
*
|
|||
|
* Retrieve video widget title.
|
|||
|
*
|
|||
|
* @since 1.0.0
|
|||
|
* @access public
|
|||
|
*
|
|||
|
* @return string Widget title.
|
|||
|
*/
|
|||
|
public function get_title() {
|
|||
|
return esc_html__( 'Video', 'elementor' );
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get widget icon.
|
|||
|
*
|
|||
|
* Retrieve video widget icon.
|
|||
|
*
|
|||
|
* @since 1.0.0
|
|||
|
* @access public
|
|||
|
*
|
|||
|
* @return string Widget icon.
|
|||
|
*/
|
|||
|
public function get_icon() {
|
|||
|
return 'eicon-youtube';
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get widget categories.
|
|||
|
*
|
|||
|
* Retrieve the list of categories the video widget belongs to.
|
|||
|
*
|
|||
|
* Used to determine where to display the widget in the editor.
|
|||
|
*
|
|||
|
* @since 2.0.0
|
|||
|
* @access public
|
|||
|
*
|
|||
|
* @return array Widget categories.
|
|||
|
*/
|
|||
|
public function get_categories() {
|
|||
|
return [ 'basic' ];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get widget keywords.
|
|||
|
*
|
|||
|
* Retrieve the list of keywords the widget belongs to.
|
|||
|
*
|
|||
|
* @since 2.1.0
|
|||
|
* @access public
|
|||
|
*
|
|||
|
* @return array Widget keywords.
|
|||
|
*/
|
|||
|
public function get_keywords() {
|
|||
|
return [ 'video', 'player', 'embed', 'youtube', 'vimeo', 'dailymotion', 'videopress' ];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Register video widget controls.
|
|||
|
*
|
|||
|
* Adds different input fields to allow the user to change and customize the widget settings.
|
|||
|
*
|
|||
|
* @since 3.19.0
|
|||
|
* @access protected
|
|||
|
*
|
|||
|
* @return array Widget promotion data.
|
|||
|
*/
|
|||
|
protected function get_upsale_data() {
|
|||
|
return [
|
|||
|
'condition' => ! Utils::has_pro(),
|
|||
|
'image' => esc_url( ELEMENTOR_ASSETS_URL . 'images/go-pro.svg' ),
|
|||
|
'image_alt' => esc_attr__( 'Upgrade', 'elementor' ),
|
|||
|
'title' => esc_html__( "Grab your visitors' attention", 'elementor' ),
|
|||
|
'description' => esc_html__( 'Get the Video Playlist widget and grow your toolbox with Elementor Pro.', 'elementor' ),
|
|||
|
'upgrade_url' => esc_url( 'https://go.elementor.com/go-pro-video-widget/' ),
|
|||
|
'upgrade_text' => esc_html__( 'Upgrade Now', 'elementor' ),
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Register video widget controls.
|
|||
|
*
|
|||
|
* Adds different input fields to allow the user to change and customize the widget settings.
|
|||
|
*
|
|||
|
* @since 3.1.0
|
|||
|
* @access protected
|
|||
|
*/
|
|||
|
protected function register_controls() {
|
|||
|
$this->start_controls_section(
|
|||
|
'section_video',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Video', 'elementor' ),
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'video_type',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Source', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SELECT,
|
|||
|
'default' => 'youtube',
|
|||
|
'options' => [
|
|||
|
'youtube' => esc_html__( 'YouTube', 'elementor' ),
|
|||
|
'vimeo' => esc_html__( 'Vimeo', 'elementor' ),
|
|||
|
'dailymotion' => esc_html__( 'Dailymotion', 'elementor' ),
|
|||
|
'videopress' => esc_html__( 'VideoPress', 'elementor' ),
|
|||
|
'hosted' => esc_html__( 'Self Hosted', 'elementor' ),
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'youtube_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Link', 'elementor' ),
|
|||
|
'type' => Controls_Manager::TEXT,
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
'categories' => [
|
|||
|
TagsModule::POST_META_CATEGORY,
|
|||
|
TagsModule::URL_CATEGORY,
|
|||
|
],
|
|||
|
],
|
|||
|
'placeholder' => esc_html__( 'Enter your URL', 'elementor' ) . ' (YouTube)',
|
|||
|
'default' => 'https://www.youtube.com/watch?v=XHOmBV4js_E',
|
|||
|
'label_block' => true,
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'youtube',
|
|||
|
],
|
|||
|
'ai' => [
|
|||
|
'active' => false,
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'vimeo_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Link', 'elementor' ),
|
|||
|
'type' => Controls_Manager::TEXT,
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
'categories' => [
|
|||
|
TagsModule::POST_META_CATEGORY,
|
|||
|
TagsModule::URL_CATEGORY,
|
|||
|
],
|
|||
|
],
|
|||
|
'placeholder' => esc_html__( 'Enter your URL', 'elementor' ) . ' (Vimeo)',
|
|||
|
'default' => 'https://vimeo.com/235215203',
|
|||
|
'label_block' => true,
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'vimeo',
|
|||
|
],
|
|||
|
'ai' => [
|
|||
|
'active' => false,
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'dailymotion_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Link', 'elementor' ),
|
|||
|
'type' => Controls_Manager::TEXT,
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
'categories' => [
|
|||
|
TagsModule::POST_META_CATEGORY,
|
|||
|
TagsModule::URL_CATEGORY,
|
|||
|
],
|
|||
|
],
|
|||
|
'placeholder' => esc_html__( 'Enter your URL', 'elementor' ) . ' (Dailymotion)',
|
|||
|
'default' => 'https://www.dailymotion.com/video/x6tqhqb',
|
|||
|
'label_block' => true,
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'dailymotion',
|
|||
|
],
|
|||
|
'ai' => [
|
|||
|
'active' => false,
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'insert_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'External URL', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'hosted', 'videopress' ],
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'hosted_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Choose Video File', 'elementor' ),
|
|||
|
'type' => Controls_Manager::MEDIA,
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
'categories' => [
|
|||
|
TagsModule::MEDIA_CATEGORY,
|
|||
|
],
|
|||
|
],
|
|||
|
'media_types' => [
|
|||
|
'video',
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'hosted', 'videopress' ],
|
|||
|
'insert_url' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'external_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'URL', 'elementor' ),
|
|||
|
'type' => Controls_Manager::URL,
|
|||
|
'autocomplete' => false,
|
|||
|
'options' => false,
|
|||
|
'label_block' => true,
|
|||
|
'show_label' => false,
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
'categories' => [
|
|||
|
TagsModule::POST_META_CATEGORY,
|
|||
|
TagsModule::URL_CATEGORY,
|
|||
|
],
|
|||
|
],
|
|||
|
'placeholder' => esc_html__( 'Enter your URL', 'elementor' ),
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'hosted',
|
|||
|
'insert_url' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'videopress_url',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'URL', 'elementor' ),
|
|||
|
'type' => Controls_Manager::TEXT,
|
|||
|
'label_block' => true,
|
|||
|
'show_label' => false,
|
|||
|
'default' => 'https://videopress.com/v/ZCAOzTNk',
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
'categories' => [
|
|||
|
TagsModule::POST_META_CATEGORY,
|
|||
|
TagsModule::URL_CATEGORY,
|
|||
|
],
|
|||
|
],
|
|||
|
'placeholder' => esc_html__( 'VideoPress URL', 'elementor' ),
|
|||
|
'ai' => [
|
|||
|
'active' => false,
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'videopress',
|
|||
|
'insert_url' => 'yes',
|
|||
|
],
|
|||
|
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'start',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Start Time', 'elementor' ),
|
|||
|
'type' => Controls_Manager::NUMBER,
|
|||
|
'description' => esc_html__( 'Specify a start time (in seconds)', 'elementor' ),
|
|||
|
'frontend_available' => true,
|
|||
|
'separator' => 'before',
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'end',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'End Time', 'elementor' ),
|
|||
|
'type' => Controls_Manager::NUMBER,
|
|||
|
'description' => esc_html__( 'Specify an end time (in seconds)', 'elementor' ),
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'youtube', 'hosted' ],
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'video_options',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Video Options', 'elementor' ),
|
|||
|
'type' => Controls_Manager::HEADING,
|
|||
|
'separator' => 'before',
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'autoplay',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Autoplay', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'frontend_available' => true,
|
|||
|
'conditions' => [
|
|||
|
'relation' => 'or',
|
|||
|
'terms' => [
|
|||
|
[
|
|||
|
'name' => 'show_image_overlay',
|
|||
|
'value' => '',
|
|||
|
],
|
|||
|
[
|
|||
|
'name' => 'image_overlay[url]',
|
|||
|
'value' => '',
|
|||
|
],
|
|||
|
],
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'play_on_mobile',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Play On Mobile', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'condition' => [
|
|||
|
'autoplay' => 'yes',
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'mute',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Mute', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'loop',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Loop', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'condition' => [
|
|||
|
'video_type!' => 'dailymotion',
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'controls',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Player Controls', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'default' => 'yes',
|
|||
|
'condition' => [
|
|||
|
'video_type!' => 'vimeo',
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'showinfo',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Video Info', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'default' => 'yes',
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'dailymotion' ],
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'modestbranding',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Modest Branding', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'youtube' ],
|
|||
|
'controls' => 'yes',
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'logo',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Logo', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'default' => 'yes',
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'dailymotion' ],
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
// YouTube.
|
|||
|
$this->add_control(
|
|||
|
'yt_privacy',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Privacy Mode', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'description' => esc_html__( 'When you turn on privacy mode, YouTube/Vimeo won\'t store information about visitors on your website unless they play the video.', 'elementor' ),
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'youtube', 'vimeo' ],
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'lazy_load',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Lazy Load', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'conditions' => [
|
|||
|
'relation' => 'or',
|
|||
|
'terms' => [
|
|||
|
[
|
|||
|
'name' => 'video_type',
|
|||
|
'operator' => '===',
|
|||
|
'value' => 'youtube',
|
|||
|
],
|
|||
|
[
|
|||
|
'relation' => 'and',
|
|||
|
'terms' => [
|
|||
|
[
|
|||
|
'name' => 'show_image_overlay',
|
|||
|
'operator' => '===',
|
|||
|
'value' => 'yes',
|
|||
|
],
|
|||
|
[
|
|||
|
'name' => 'video_type',
|
|||
|
'operator' => '!==',
|
|||
|
'value' => 'hosted',
|
|||
|
],
|
|||
|
],
|
|||
|
],
|
|||
|
],
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'rel',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Suggested Videos', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SELECT,
|
|||
|
'options' => [
|
|||
|
'' => esc_html__( 'Current Video Channel', 'elementor' ),
|
|||
|
'yes' => esc_html__( 'Any Video', 'elementor' ),
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'youtube',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
// Vimeo.
|
|||
|
$this->add_control(
|
|||
|
'vimeo_title',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Intro Title', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'default' => 'yes',
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'vimeo',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'vimeo_portrait',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Intro Portrait', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'default' => 'yes',
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'vimeo',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'vimeo_byline',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Intro Byline', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'default' => 'yes',
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'vimeo',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'color',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Controls Color', 'elementor' ),
|
|||
|
'type' => Controls_Manager::COLOR,
|
|||
|
'default' => '',
|
|||
|
'condition' => [
|
|||
|
'video_type' => [ 'vimeo', 'dailymotion' ],
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'download_button',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Download Button', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'hosted',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'preload',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Preload', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SELECT,
|
|||
|
'options' => [
|
|||
|
'metadata' => esc_html__( 'Metadata', 'elementor' ),
|
|||
|
'auto' => esc_html__( 'Auto', 'elementor' ),
|
|||
|
'none' => esc_html__( 'None', 'elementor' ),
|
|||
|
],
|
|||
|
'description' => sprintf(
|
|||
|
'%1$s <a target="_blank" href="https://go.elementor.com/preload-video/">%2$s</a>',
|
|||
|
esc_html__( 'Preload attribute lets you specify how the video should be loaded when the page loads.', 'elementor' ),
|
|||
|
esc_html__( 'Learn more', 'elementor' ),
|
|||
|
),
|
|||
|
'default' => 'metadata',
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'hosted',
|
|||
|
'autoplay' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'poster',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Poster', 'elementor' ),
|
|||
|
'type' => Controls_Manager::MEDIA,
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'video_type' => 'hosted',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->end_controls_section();
|
|||
|
|
|||
|
$this->start_controls_section(
|
|||
|
'section_image_overlay',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Image Overlay', 'elementor' ),
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'show_image_overlay',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Image Overlay', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'image_overlay',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Choose Image', 'elementor' ),
|
|||
|
'type' => Controls_Manager::MEDIA,
|
|||
|
'default' => [
|
|||
|
'url' => Utils::get_placeholder_image_src(),
|
|||
|
],
|
|||
|
'dynamic' => [
|
|||
|
'active' => true,
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
],
|
|||
|
'frontend_available' => true,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_group_control(
|
|||
|
Group_Control_Image_Size::get_type(),
|
|||
|
[
|
|||
|
'name' => 'image_overlay', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `image_overlay_size` and `image_overlay_custom_dimension`.
|
|||
|
'default' => 'full',
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'show_play_icon',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Play Icon', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'default' => 'yes',
|
|||
|
'label_off' => esc_html__( 'Hide', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'Show', 'elementor' ),
|
|||
|
'separator' => 'before',
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'image_overlay[url]!' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'play_icon',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Icon', 'elementor' ),
|
|||
|
'type' => Controls_Manager::ICONS,
|
|||
|
'fa4compatibility' => 'icon',
|
|||
|
'skin' => 'inline',
|
|||
|
'label_block' => false,
|
|||
|
'skin_settings' => [
|
|||
|
'inline' => [
|
|||
|
'none' => [
|
|||
|
'label' => 'Default',
|
|||
|
'icon' => 'eicon-play',
|
|||
|
],
|
|||
|
'icon' => [
|
|||
|
'icon' => 'eicon-star',
|
|||
|
],
|
|||
|
],
|
|||
|
],
|
|||
|
'recommended' => [
|
|||
|
'fa-regular' => [
|
|||
|
'play-circle',
|
|||
|
],
|
|||
|
'fa-solid' => [
|
|||
|
'play',
|
|||
|
'play-circle',
|
|||
|
],
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'show_play_icon!' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'lightbox',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Lightbox', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SWITCHER,
|
|||
|
'frontend_available' => true,
|
|||
|
'label_off' => esc_html__( 'Off', 'elementor' ),
|
|||
|
'label_on' => esc_html__( 'On', 'elementor' ),
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'image_overlay[url]!' => '',
|
|||
|
],
|
|||
|
'separator' => 'before',
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->end_controls_section();
|
|||
|
|
|||
|
$this->start_controls_section(
|
|||
|
'section_video_style',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Video', 'elementor' ),
|
|||
|
'tab' => Controls_Manager::TAB_STYLE,
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'aspect_ratio',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Aspect Ratio', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SELECT,
|
|||
|
'options' => [
|
|||
|
'169' => '16:9',
|
|||
|
'219' => '21:9',
|
|||
|
'43' => '4:3',
|
|||
|
'32' => '3:2',
|
|||
|
'11' => '1:1',
|
|||
|
'916' => '9:16',
|
|||
|
],
|
|||
|
'selectors_dictionary' => [
|
|||
|
'169' => '1.77777', // 16 / 9
|
|||
|
'219' => '2.33333', // 21 / 9
|
|||
|
'43' => '1.33333', // 4 / 3
|
|||
|
'32' => '1.5', // 3 / 2
|
|||
|
'11' => '1', // 1 / 1
|
|||
|
'916' => '0.5625', // 9 / 16
|
|||
|
],
|
|||
|
'default' => '169',
|
|||
|
'selectors' => [
|
|||
|
'{{WRAPPER}} .elementor-wrapper' => '--video-aspect-ratio: {{VALUE}}',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_group_control(
|
|||
|
Group_Control_Css_Filter::get_type(),
|
|||
|
[
|
|||
|
'name' => 'css_filters',
|
|||
|
'selector' => '{{WRAPPER}} .elementor-wrapper',
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->end_controls_section();
|
|||
|
|
|||
|
$this->start_controls_section(
|
|||
|
'section_image_overlay_style',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Image Overlay', 'elementor' ),
|
|||
|
'tab' => Controls_Manager::TAB_STYLE,
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'show_play_icon' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'play_icon_title',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Play Icon', 'elementor' ),
|
|||
|
'type' => Controls_Manager::HEADING,
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'show_play_icon' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'play_icon_color',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Color', 'elementor' ),
|
|||
|
'type' => Controls_Manager::COLOR,
|
|||
|
'selectors' => [
|
|||
|
'{{WRAPPER}} .elementor-custom-embed-play i' => 'color: {{VALUE}}',
|
|||
|
'{{WRAPPER}} .elementor-custom-embed-play svg' => 'fill: {{VALUE}}',
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'show_play_icon' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_responsive_control(
|
|||
|
'play_icon_size',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Size', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SLIDER,
|
|||
|
'size_units' => [ 'px', 'em', 'rem', 'custom' ],
|
|||
|
'range' => [
|
|||
|
'px' => [
|
|||
|
'min' => 10,
|
|||
|
'max' => 300,
|
|||
|
],
|
|||
|
],
|
|||
|
'selectors' => [
|
|||
|
// Not using a CSS vars because the default size value is coming from a global scss file.
|
|||
|
'{{WRAPPER}} .elementor-custom-embed-play i' => 'font-size: {{SIZE}}{{UNIT}}',
|
|||
|
'{{WRAPPER}} .elementor-custom-embed-play svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'show_play_icon' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_group_control(
|
|||
|
Group_Control_Text_Shadow::get_type(),
|
|||
|
[
|
|||
|
'name' => 'play_icon_text_shadow',
|
|||
|
'selector' => '{{WRAPPER}} .elementor-custom-embed-play i',
|
|||
|
'fields_options' => [
|
|||
|
'text_shadow_type' => [
|
|||
|
'label' => esc_html__( 'Shadow', 'elementor' ),
|
|||
|
],
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'show_play_icon' => 'yes',
|
|||
|
'play_icon[library]!' => 'svg',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->end_controls_section();
|
|||
|
|
|||
|
$this->start_controls_section(
|
|||
|
'section_lightbox_style',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Lightbox', 'elementor' ),
|
|||
|
'tab' => Controls_Manager::TAB_STYLE,
|
|||
|
'condition' => [
|
|||
|
'show_image_overlay' => 'yes',
|
|||
|
'image_overlay[url]!' => '',
|
|||
|
'lightbox' => 'yes',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'lightbox_color',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Background Color', 'elementor' ),
|
|||
|
'type' => Controls_Manager::COLOR,
|
|||
|
'selectors' => [
|
|||
|
'#elementor-lightbox-{{ID}}' => 'background-color: {{VALUE}};',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'lightbox_ui_color',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'UI Color', 'elementor' ),
|
|||
|
'type' => Controls_Manager::COLOR,
|
|||
|
'selectors' => [
|
|||
|
'#elementor-lightbox-{{ID}} .dialog-lightbox-close-button' => 'color: {{VALUE}}',
|
|||
|
'#elementor-lightbox-{{ID}} .dialog-lightbox-close-button svg' => 'fill: {{VALUE}}',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'lightbox_ui_color_hover',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'UI Hover Color', 'elementor' ),
|
|||
|
'type' => Controls_Manager::COLOR,
|
|||
|
'selectors' => [
|
|||
|
'#elementor-lightbox-{{ID}} .dialog-lightbox-close-button:hover' => 'color: {{VALUE}}',
|
|||
|
'#elementor-lightbox-{{ID}} .dialog-lightbox-close-button:hover svg' => 'fill: {{VALUE}}',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_responsive_control(
|
|||
|
'lightbox_content_animation',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Entrance Animation', 'elementor' ),
|
|||
|
'type' => Controls_Manager::ANIMATION,
|
|||
|
'frontend_available' => true,
|
|||
|
'separator' => 'before',
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->add_control(
|
|||
|
'deprecation_warning',
|
|||
|
[
|
|||
|
'type' => Controls_Manager::ALERT,
|
|||
|
'alert_type' => 'danger',
|
|||
|
'content' => esc_html__( 'Note: These controls have been deprecated and are only visible if they were previously in use. The video’s width and position are now set based on its aspect ratio.', 'elementor' ),
|
|||
|
'separator' => 'before',
|
|||
|
'condition' => [
|
|||
|
'lightbox_video_width!' => '',
|
|||
|
'lightbox_content_position!' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
// Deprecated control. Visible only if it was previously in use.
|
|||
|
$this->add_control(
|
|||
|
'lightbox_video_width',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Content Width', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SLIDER,
|
|||
|
'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ],
|
|||
|
'default' => [
|
|||
|
'unit' => '%',
|
|||
|
],
|
|||
|
// 'selectors' => [
|
|||
|
// '(desktop+)#elementor-lightbox-{{ID}} .elementor-video-container' => 'width: {{SIZE}}{{UNIT}};',
|
|||
|
// ],
|
|||
|
'condition' => [
|
|||
|
'lightbox_video_width!' => '',
|
|||
|
'lightbox_content_position!' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
// Deprecated control. Visible only if it was previously in use.
|
|||
|
$this->add_control(
|
|||
|
'lightbox_content_position',
|
|||
|
[
|
|||
|
'label' => esc_html__( 'Content Position', 'elementor' ),
|
|||
|
'type' => Controls_Manager::SELECT,
|
|||
|
'frontend_available' => true,
|
|||
|
'options' => [
|
|||
|
'' => esc_html__( 'Center', 'elementor' ),
|
|||
|
'top' => esc_html__( 'Top', 'elementor' ),
|
|||
|
],
|
|||
|
// 'selectors' => [
|
|||
|
// '#elementor-lightbox-{{ID}} .elementor-video-container' => '{{VALUE}}; transform: translateX(-50%);',
|
|||
|
// ],
|
|||
|
'selectors_dictionary' => [
|
|||
|
'top' => 'top: 60px',
|
|||
|
],
|
|||
|
'condition' => [
|
|||
|
'lightbox_video_width!' => '',
|
|||
|
'lightbox_content_position!' => '',
|
|||
|
],
|
|||
|
]
|
|||
|
);
|
|||
|
|
|||
|
$this->end_controls_section();
|
|||
|
}
|
|||
|
|
|||
|
public function print_a11y_text( $image_overlay ) {
|
|||
|
if ( empty( $image_overlay['alt'] ) ) {
|
|||
|
echo esc_html__( 'Play Video', 'elementor' );
|
|||
|
} else {
|
|||
|
echo esc_html__( 'Play Video about', 'elementor' ) . ' ' . esc_attr( $image_overlay['alt'] );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Render video widget output on the frontend.
|
|||
|
*
|
|||
|
* Written in PHP and used to generate the final HTML.
|
|||
|
*
|
|||
|
* @since 1.0.0
|
|||
|
* @access protected
|
|||
|
*/
|
|||
|
protected function render() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
$video_url = $settings[ $settings['video_type'] . '_url' ];
|
|||
|
|
|||
|
if ( 'hosted' === $settings['video_type'] ) {
|
|||
|
$video_url = $this->get_hosted_video_url();
|
|||
|
} else {
|
|||
|
if ( 'videopress' === $settings['video_type'] ) {
|
|||
|
$video_url = $this->get_videopress_video_url();
|
|||
|
}
|
|||
|
|
|||
|
$embed_params = $this->get_embed_params();
|
|||
|
$embed_options = $this->get_embed_options();
|
|||
|
}
|
|||
|
|
|||
|
if ( empty( $video_url ) ) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if ( 'youtube' === $settings['video_type'] ) {
|
|||
|
$video_html = '<div class="elementor-video"></div>';
|
|||
|
}
|
|||
|
|
|||
|
if ( 'hosted' === $settings['video_type'] ) {
|
|||
|
$this->add_render_attribute( 'video-wrapper', 'class', 'e-hosted-video' );
|
|||
|
|
|||
|
ob_start();
|
|||
|
|
|||
|
$this->render_hosted_video();
|
|||
|
|
|||
|
$video_html = ob_get_clean();
|
|||
|
} else {
|
|||
|
$is_static_render_mode = Plugin::$instance->frontend->is_static_render_mode();
|
|||
|
$post_id = get_queried_object_id();
|
|||
|
|
|||
|
if ( $is_static_render_mode ) {
|
|||
|
$video_html = Embed::get_embed_thumbnail_html( $video_url, $post_id );
|
|||
|
// YouTube API requires a different markup which was set above.
|
|||
|
} else if ( 'youtube' !== $settings['video_type'] ) {
|
|||
|
$video_html = Embed::get_embed_html( $video_url, $embed_params, $embed_options );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if ( empty( $video_html ) ) {
|
|||
|
echo esc_url( $video_url );
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
$this->add_render_attribute( 'video-wrapper', 'class', 'elementor-wrapper' );
|
|||
|
|
|||
|
$this->add_render_attribute( 'video-wrapper', 'class', 'elementor-open-' . ( $settings['lightbox'] ? 'lightbox' : 'inline' ) );
|
|||
|
?>
|
|||
|
<div <?php $this->print_render_attribute_string( 'video-wrapper' ); ?>>
|
|||
|
<?php
|
|||
|
if ( ! $settings['lightbox'] ) {
|
|||
|
Utils::print_unescaped_internal_string( $video_html ); // XSS ok.
|
|||
|
}
|
|||
|
|
|||
|
if ( $this->has_image_overlay() ) {
|
|||
|
$this->add_render_attribute( 'image-overlay', 'class', 'elementor-custom-embed-image-overlay' );
|
|||
|
|
|||
|
if ( $settings['lightbox'] ) {
|
|||
|
if ( 'hosted' === $settings['video_type'] ) {
|
|||
|
$lightbox_url = $video_url;
|
|||
|
} else {
|
|||
|
$lightbox_url = Embed::get_embed_url( $video_url, $embed_params, $embed_options );
|
|||
|
}
|
|||
|
|
|||
|
$lightbox_options = [
|
|||
|
'type' => 'video',
|
|||
|
'videoType' => $settings['video_type'],
|
|||
|
'url' => $lightbox_url,
|
|||
|
'modalOptions' => [
|
|||
|
'id' => 'elementor-lightbox-' . $this->get_id(),
|
|||
|
'entranceAnimation' => $settings['lightbox_content_animation'],
|
|||
|
'entranceAnimation_tablet' => $settings['lightbox_content_animation_tablet'],
|
|||
|
'entranceAnimation_mobile' => $settings['lightbox_content_animation_mobile'],
|
|||
|
'videoAspectRatio' => $settings['aspect_ratio'],
|
|||
|
],
|
|||
|
];
|
|||
|
|
|||
|
if ( 'hosted' === $settings['video_type'] ) {
|
|||
|
$lightbox_options['videoParams'] = $this->get_hosted_params();
|
|||
|
}
|
|||
|
|
|||
|
$this->add_render_attribute( 'image-overlay', [
|
|||
|
'data-elementor-open-lightbox' => 'yes',
|
|||
|
'data-elementor-lightbox' => wp_json_encode( $lightbox_options ),
|
|||
|
'data-e-action-hash' => Plugin::instance()->frontend->create_action_hash( 'lightbox', $lightbox_options ),
|
|||
|
] );
|
|||
|
|
|||
|
if ( Plugin::$instance->editor->is_edit_mode() ) {
|
|||
|
$this->add_render_attribute( 'image-overlay', [
|
|||
|
'class' => 'elementor-clickable',
|
|||
|
] );
|
|||
|
}
|
|||
|
} else {
|
|||
|
// When there is an image URL but no ID, it means the overlay image is the placeholder. In this case, get the placeholder URL.
|
|||
|
if ( empty( $settings['image_overlay']['id'] && ! empty( $settings['image_overlay']['url'] ) ) ) {
|
|||
|
$image_url = $settings['image_overlay']['url'];
|
|||
|
} else {
|
|||
|
$image_url = Group_Control_Image_Size::get_attachment_image_src( $settings['image_overlay']['id'], 'image_overlay', $settings );
|
|||
|
}
|
|||
|
|
|||
|
$this->add_render_attribute( 'image-overlay', 'style', 'background-image: url(' . $image_url . ');' );
|
|||
|
}
|
|||
|
?>
|
|||
|
<div <?php $this->print_render_attribute_string( 'image-overlay' ); ?>>
|
|||
|
<?php if ( $settings['lightbox'] ) : ?>
|
|||
|
<?php Group_Control_Image_Size::print_attachment_image_html( $settings, 'image_overlay' ); ?>
|
|||
|
<?php endif; ?>
|
|||
|
<?php if ( 'yes' === $settings['show_play_icon'] ) : ?>
|
|||
|
<div class="elementor-custom-embed-play" role="button" aria-label="<?php $this->print_a11y_text( $settings['image_overlay'] ); ?>" tabindex="0">
|
|||
|
<?php
|
|||
|
if ( empty( $settings['play_icon']['value'] ) ) {
|
|||
|
$settings['play_icon'] = [
|
|||
|
'library' => 'eicons',
|
|||
|
'value' => 'eicon-play',
|
|||
|
];
|
|||
|
}
|
|||
|
Icons_Manager::render_icon( $settings['play_icon'], [ 'aria-hidden' => 'true' ] );
|
|||
|
?>
|
|||
|
<span class="elementor-screen-only"><?php $this->print_a11y_text( $settings['image_overlay'] ); ?></span>
|
|||
|
</div>
|
|||
|
<?php endif; ?>
|
|||
|
</div>
|
|||
|
<?php } ?>
|
|||
|
</div>
|
|||
|
<?php
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Render video widget as plain content.
|
|||
|
*
|
|||
|
* Override the default behavior, by printing the video URL insted of rendering it.
|
|||
|
*
|
|||
|
* @since 1.4.5
|
|||
|
* @access public
|
|||
|
*/
|
|||
|
public function render_plain_content() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
if ( 'hosted' !== $settings['video_type'] ) {
|
|||
|
$url = $settings[ $settings['video_type'] . '_url' ];
|
|||
|
} else {
|
|||
|
$url = $this->get_hosted_video_url();
|
|||
|
}
|
|||
|
|
|||
|
echo esc_url( $url );
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get embed params.
|
|||
|
*
|
|||
|
* Retrieve video widget embed parameters.
|
|||
|
*
|
|||
|
* @since 1.5.0
|
|||
|
* @access public
|
|||
|
*
|
|||
|
* @return array Video embed parameters.
|
|||
|
*/
|
|||
|
public function get_embed_params() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
$params = [];
|
|||
|
|
|||
|
if ( $settings['autoplay'] && ! $this->has_image_overlay() ) {
|
|||
|
$params['autoplay'] = '1';
|
|||
|
|
|||
|
if ( $settings['play_on_mobile'] ) {
|
|||
|
$params['playsinline'] = '1';
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$params_dictionary = [];
|
|||
|
|
|||
|
if ( 'youtube' === $settings['video_type'] ) {
|
|||
|
$params_dictionary = [
|
|||
|
'loop',
|
|||
|
'controls',
|
|||
|
'mute',
|
|||
|
'rel',
|
|||
|
'modestbranding',
|
|||
|
];
|
|||
|
|
|||
|
if ( $settings['loop'] ) {
|
|||
|
$video_properties = Embed::get_video_properties( $settings['youtube_url'] );
|
|||
|
|
|||
|
$params['playlist'] = $video_properties['video_id'];
|
|||
|
}
|
|||
|
|
|||
|
$params['start'] = $settings['start'];
|
|||
|
|
|||
|
$params['end'] = $settings['end'];
|
|||
|
|
|||
|
$params['wmode'] = 'opaque';
|
|||
|
} elseif ( 'vimeo' === $settings['video_type'] ) {
|
|||
|
$params_dictionary = [
|
|||
|
'loop',
|
|||
|
'mute' => 'muted',
|
|||
|
'vimeo_title' => 'title',
|
|||
|
'vimeo_portrait' => 'portrait',
|
|||
|
'vimeo_byline' => 'byline',
|
|||
|
];
|
|||
|
|
|||
|
$params['color'] = str_replace( '#', '', $settings['color'] );
|
|||
|
|
|||
|
$params['autopause'] = '0';
|
|||
|
|
|||
|
if ( ! empty( $settings['yt_privacy'] ) ) {
|
|||
|
$params['dnt'] = 'true';
|
|||
|
}
|
|||
|
} elseif ( 'dailymotion' === $settings['video_type'] ) {
|
|||
|
$params_dictionary = [
|
|||
|
'controls',
|
|||
|
'mute',
|
|||
|
'showinfo' => 'ui-start-screen-info',
|
|||
|
'logo' => 'ui-logo',
|
|||
|
];
|
|||
|
|
|||
|
$params['ui-highlight'] = str_replace( '#', '', $settings['color'] );
|
|||
|
|
|||
|
$params['start'] = $settings['start'];
|
|||
|
|
|||
|
$params['endscreen-enable'] = '0';
|
|||
|
} elseif ( 'videopress' === $settings['video_type'] ) {
|
|||
|
$params_dictionary = $this->get_params_dictionary_for_videopress();
|
|||
|
|
|||
|
$params['at'] = $settings['start'];
|
|||
|
}
|
|||
|
|
|||
|
foreach ( $params_dictionary as $key => $param_name ) {
|
|||
|
$setting_name = $param_name;
|
|||
|
|
|||
|
if ( is_string( $key ) ) {
|
|||
|
$setting_name = $key;
|
|||
|
}
|
|||
|
|
|||
|
$setting_value = $settings[ $setting_name ] ? '1' : '0';
|
|||
|
|
|||
|
$params[ $param_name ] = $setting_value;
|
|||
|
}
|
|||
|
|
|||
|
return $params;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Whether the video widget has an overlay image or not.
|
|||
|
*
|
|||
|
* Used to determine whether an overlay image was set for the video.
|
|||
|
*
|
|||
|
* @since 1.0.0
|
|||
|
* @access protected
|
|||
|
*
|
|||
|
* @return bool Whether an image overlay was set for the video.
|
|||
|
*/
|
|||
|
protected function has_image_overlay() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
return ! empty( $settings['image_overlay']['url'] ) && 'yes' === $settings['show_image_overlay'];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @since 2.1.0
|
|||
|
* @access private
|
|||
|
*/
|
|||
|
private function get_embed_options() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
$embed_options = [];
|
|||
|
|
|||
|
if ( 'youtube' === $settings['video_type'] ) {
|
|||
|
$embed_options['privacy'] = $settings['yt_privacy'];
|
|||
|
} elseif ( 'vimeo' === $settings['video_type'] ) {
|
|||
|
$embed_options['start'] = $settings['start'];
|
|||
|
}
|
|||
|
|
|||
|
$embed_options['lazy_load'] = ! empty( $settings['lazy_load'] );
|
|||
|
|
|||
|
return $embed_options;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @since 2.1.0
|
|||
|
* @access private
|
|||
|
*/
|
|||
|
private function get_hosted_params() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
$video_params = [];
|
|||
|
|
|||
|
foreach ( [ 'autoplay', 'loop', 'controls' ] as $option_name ) {
|
|||
|
if ( $settings[ $option_name ] ) {
|
|||
|
$video_params[ $option_name ] = '';
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['preload'] ) {
|
|||
|
$video_params['preload'] = $settings['preload'];
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['mute'] ) {
|
|||
|
$video_params['muted'] = 'muted';
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['play_on_mobile'] ) {
|
|||
|
$video_params['playsinline'] = '';
|
|||
|
}
|
|||
|
|
|||
|
if ( ! $settings['download_button'] ) {
|
|||
|
$video_params['controlsList'] = 'nodownload';
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['poster']['url'] ) {
|
|||
|
$video_params['poster'] = $settings['poster']['url'];
|
|||
|
}
|
|||
|
|
|||
|
return $video_params;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @param bool $from_media
|
|||
|
*
|
|||
|
* @return string
|
|||
|
* @since 2.1.0
|
|||
|
* @access private
|
|||
|
*/
|
|||
|
private function get_hosted_video_url() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
if ( ! empty( $settings['insert_url'] ) ) {
|
|||
|
$video_url = $settings['external_url']['url'];
|
|||
|
} else {
|
|||
|
$video_url = $settings['hosted_url']['url'];
|
|||
|
}
|
|||
|
|
|||
|
if ( empty( $video_url ) ) {
|
|||
|
return '';
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['start'] || $settings['end'] ) {
|
|||
|
$video_url .= '#t=';
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['start'] ) {
|
|||
|
$video_url .= $settings['start'];
|
|||
|
}
|
|||
|
|
|||
|
if ( $settings['end'] ) {
|
|||
|
$video_url .= ',' . $settings['end'];
|
|||
|
}
|
|||
|
|
|||
|
return $video_url;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get the VideoPress video URL from the current selected settings.
|
|||
|
*
|
|||
|
* @return string
|
|||
|
*/
|
|||
|
private function get_videopress_video_url() {
|
|||
|
$settings = $this->get_settings_for_display();
|
|||
|
|
|||
|
if ( ! empty( $settings['insert_url'] ) ) {
|
|||
|
return $settings['videopress_url'];
|
|||
|
}
|
|||
|
|
|||
|
return $settings['hosted_url']['url'];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get the params dictionary for VideoPress videos.
|
|||
|
*
|
|||
|
* @return array
|
|||
|
*/
|
|||
|
private function get_params_dictionary_for_videopress() {
|
|||
|
return [
|
|||
|
'controls',
|
|||
|
'autoplay' => 'autoPlay',
|
|||
|
'mute' => 'muted',
|
|||
|
'loop',
|
|||
|
'play_on_mobile' => 'playsinline',
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
*
|
|||
|
* @since 2.1.0
|
|||
|
* @access private
|
|||
|
*/
|
|||
|
private function render_hosted_video() {
|
|||
|
$video_url = $this->get_hosted_video_url();
|
|||
|
if ( empty( $video_url ) ) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
$video_params = $this->get_hosted_params();
|
|||
|
/* Sometimes the video url is base64, therefore we use `esc_attr` in `src`. */
|
|||
|
?>
|
|||
|
<video class="elementor-video" src="<?php echo esc_attr( $video_url ); ?>" <?php Utils::print_html_attributes( $video_params ); ?>></video>
|
|||
|
<?php
|
|||
|
}
|
|||
|
}
|