PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.0-dev4
Elementor Website Builder – more than just a page builder v4.0.0-dev4
4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 All 456 releases
elementor / modules / atomic-widgets / elements / atomic-self-hosted-video / atomic-self-hosted-video.php

atomic-self-hosted-video.php in Elementor Website Builder – more than just a page builder 4.0.0-dev4, at modules/atomic-widgets/elements/atomic-self-hosted-video/atomic-self-hosted-video.php

209 lines 7.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\AtomicWidgets\Elements\Atomic_Self_Hosted_Video;
4
5 use Elementor\Modules\AtomicWidgets\Controls\Section;
6 use Elementor\Modules\AtomicWidgets\Controls\Types\Image_Control;
7 use Elementor\Modules\AtomicWidgets\Controls\Types\Number_Control;
8 use Elementor\Modules\AtomicWidgets\Controls\Types\Select_Control;
9 use Elementor\Modules\AtomicWidgets\Controls\Types\Switch_Control;
10 use Elementor\Modules\AtomicWidgets\Controls\Types\Text_Control;
11 use Elementor\Modules\AtomicWidgets\Controls\Types\Video_Control;
12 use Elementor\Modules\AtomicWidgets\DynamicTags\Dynamic_Prop_Type;
13 use Elementor\Modules\AtomicWidgets\Elements\Base\Atomic_Widget_Base;
14 use Elementor\Modules\AtomicWidgets\Elements\Base\Has_Template;
15 use Elementor\Modules\AtomicWidgets\PropDependencies\Manager as Dependency_Manager;
16 use Elementor\Modules\AtomicWidgets\PropTypes\Attributes_Prop_Type;
17 use Elementor\Modules\AtomicWidgets\PropTypes\Classes_Prop_Type;
18 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Prop_Type;
19 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Boolean_Prop_Type;
20 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Number_Prop_Type;
21 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\String_Prop_Type;
22 use Elementor\Modules\AtomicWidgets\PropTypes\Size_Prop_Type;
23 use Elementor\Modules\AtomicWidgets\PropTypes\Video_Src_Prop_Type;
24 use Elementor\Modules\AtomicWidgets\Styles\Style_Definition;
25 use Elementor\Modules\AtomicWidgets\Styles\Style_Variant;
26 use Elementor\Modules\AtomicWidgets\Utils\Image\Placeholder_Image;
27 use Elementor\Modules\Components\PropTypes\Overridable_Prop_Type;
28
29 if ( ! defined( 'ABSPATH' ) ) {
30 exit;
31 }
32
33 class Atomic_Self_Hosted_Video extends Atomic_Widget_Base {
34
35 use Has_Template;
36
37 protected static function get_preload_options() {
38 return [
39 'auto' => esc_html__( 'Auto', 'elementor' ),
40 'metadata' => esc_html__( 'Metadata', 'elementor' ),
41 'none' => esc_html__( 'None (Lazy Load)', 'elementor' ),
42 ]; }
43
44 protected function get_css_id_control_meta(): array {
45 return [
46 'layout' => 'two-columns',
47 'topDivider' => false,
48 ];
49 }
50
51 public static function get_element_type(): string {
52 return 'e-self-hosted-video';
53 }
54
55 public function get_title() {
56 return esc_html__( 'Video', 'elementor' );
57 }
58
59 public function get_keywords() {
60 return [ 'ato', 'atom', 'atoms', 'atomic', 'video', 'player', 'media', 'hosted' ];
61 }
62
63 public function get_icon() {
64 return 'eicon-video';
65 }
66
67 protected static function define_props_schema(): array {
68 $playsinline_dependencies = Dependency_Manager::make()
69 ->where([
70 'operator' => 'eq',
71 'path' => [ 'autoplay' ],
72 'value' => true,
73 'effect' => 'hide',
74 ])
75 ->get();
76
77 // NOTE: restore the dependency when dependencies works in overridables
78 $poster_dependencies = Dependency_Manager::make()
79 ->where([
80 'operator' => 'eq',
81 'path' => [ 'poster_enabled' ],
82 'value' => true,
83 'effect' => 'hide',
84 ])
85 ->get();
86
87 $allow_download_dependencies = Dependency_Manager::make()
88 ->where([
89 'operator' => 'eq',
90 'path' => [ 'controls' ],
91 'value' => true,
92 'effect' => 'hide',
93 ])
94 ->get();
95
96 return [
97 'classes' => Classes_Prop_Type::make()
98 ->default( [] ),
99 'source' => Video_Src_Prop_Type::make(),
100 'autoplay' => Boolean_Prop_Type::make()->default( false ),
101 'playsinline' => Boolean_Prop_Type::make()
102 ->default( false )
103 ->set_dependencies( $playsinline_dependencies )
104 ->meta( Overridable_Prop_Type::ignore() ),
105 'mute' => Boolean_Prop_Type::make()->default( false ),
106 'loop' => Boolean_Prop_Type::make()->default( false ),
107 'controls' => Boolean_Prop_Type::make()->default( true ),
108 'preload' => String_Prop_Type::make()
109 ->default( 'metadata' )
110 ->enum( array_keys( self::get_preload_options() ) ),
111 'download' => Boolean_Prop_Type::make()->default( false )
112 ->set_dependencies( $allow_download_dependencies ),
113 'start_time' => Number_Prop_Type::make()
114 ->default( null )
115 ->meta( Dynamic_Prop_Type::ignore() )
116 ->meta( 'suffix', 'SEC' ),
117 'end_time' => Number_Prop_Type::make()
118 ->default( null )
119 ->meta( 'suffix', 'SEC' )
120 ->meta( Dynamic_Prop_Type::ignore() ),
121 'poster_enabled' => Boolean_Prop_Type::make()->default( false ),
122 'poster' => Image_Prop_Type::make()
123 ->default_size( 'medium_large' )
124 ->default_url( Placeholder_Image::get_placeholder_image() ),
125 // TODO: restore the dependency when dependencies works in overridables
126 // ->set_dependencies( $poster_dependencies ),
127 'attributes' => Attributes_Prop_Type::make()->meta( Overridable_Prop_Type::ignore() ),
128 ];
129 }
130
131 protected function define_atomic_controls(): array {
132 return [
133 Section::make()
134 ->set_label( __( 'Content', 'elementor' ) )
135 ->set_items([
136 Video_Control::bind_to( 'source' )
137 ->set_label( esc_html__( 'Video', 'elementor' ) ),
138 Number_Control::bind_to( 'start_time' )
139 ->set_label( esc_html__( 'Start Time', 'elementor' ) )
140 ->set_min( 0 )
141 ->set_max( 10000 ),
142 Number_Control::bind_to( 'end_time' )
143 ->set_label( esc_html__( 'End Time', 'elementor' ) )
144 ->set_min( 0 )
145 ->set_max( 10000 ),
146 Switch_Control::bind_to( 'autoplay' )->set_label( esc_html__( 'Autoplay', 'elementor' ) ),
147 Switch_Control::bind_to( 'playsinline' )
148 ->set_label( esc_html__( 'Play on mobile', 'elementor' ) ),
149 Switch_Control::bind_to( 'mute' )->set_label( esc_html__( 'Mute', 'elementor' ) ),
150 Switch_Control::bind_to( 'loop' )->set_label( esc_html__( 'Loop', 'elementor' ) ),
151 Switch_Control::bind_to( 'controls' )->set_label( esc_html__( 'Player Controls', 'elementor' ) ),
152 Switch_Control::bind_to( 'download' )->set_label( esc_html__( 'Allow Download', 'elementor' ) ),
153 Select_Control::bind_to( 'preload' )
154 ->set_label( esc_html__( 'Preload', 'elementor' ) )
155 ->set_options( self::format_options( self::get_preload_options() ) ),
156 Switch_Control::bind_to( 'poster_enabled' )
157 ->set_label( esc_html__( 'Poster Image', 'elementor' ) ),
158 Image_Control::bind_to( 'poster' )
159 ->set_label( esc_html__( 'Image', 'elementor' ) ),
160 ]),
161 Section::make()
162 ->set_label( __( 'Settings', 'elementor' ) )
163 ->set_id( 'settings' )
164 ->set_items( $this->get_settings_controls() ),
165 ];
166 }
167
168 protected function get_settings_controls(): array {
169 return [
170 Text_Control::bind_to( '_cssid' )
171 ->set_label( __( 'ID', 'elementor' ) )
172 ->set_meta( $this->get_css_id_control_meta() ),
173 ];
174 }
175
176 protected function define_base_styles(): array {
177 $max_width = Size_Prop_Type::generate([
178 'unit' => 'vw',
179 'size' => 100,
180 ]);
181 return [
182 'base' => Style_Definition::make()
183 ->add_variant(
184 Style_Variant::make()
185 ->add_prop( 'max-width', $max_width )
186 ->add_prop( 'display', String_Prop_Type::generate( 'inline-block' ) )
187 ->add_prop( 'aspect-ratio', String_Prop_Type::generate( '16/9' ) )
188 ),
189 ];
190 }
191
192 protected function get_templates(): array {
193 return [
194 'elementor/elements/atomic-self-hosted-video' => __DIR__ . '/atomic-self-hosted-video.html.twig',
195 ];
196 }
197
198 private static function format_options( array $options ): array {
199 return array_map(
200 fn( $value, $key ) => [
201 'value' => $key,
202 'label' => $value,
203 ],
204 $options,
205 array_keys( $options )
206 );
207 }
208 }
209