PluginProbe
Elementor Website Builder – more than just a page builder / 3.28.0-dev3
Elementor Website Builder – more than just a page builder v3.28.0-dev3
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 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / modules / atomic-widgets / module.php

module.php in Elementor Website Builder – more than just a page builder 3.28.0-dev3, at modules/atomic-widgets/module.php

211 lines 11.0 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;
4
5 use Elementor\Core\Base\Module as BaseModule;
6 use Elementor\Core\Experiments\Manager as Experiments_Manager;
7 use Elementor\Elements_Manager;
8 use Elementor\Modules\AtomicWidgets\DynamicTags\Dynamic_Tags_Module;
9 use Elementor\Modules\AtomicWidgets\Elements\Div_Block\Div_Block;
10 use Elementor\Modules\AtomicWidgets\Elements\Atomic_Heading\Atomic_Heading;
11 use Elementor\Modules\AtomicWidgets\Elements\Atomic_Image\Atomic_Image;
12 use Elementor\Modules\AtomicWidgets\Elements\Atomic_Paragraph\Atomic_Paragraph;
13 use Elementor\Modules\AtomicWidgets\Elements\Atomic_Button\Atomic_Button;
14 use Elementor\Modules\AtomicWidgets\Elements\Atomic_Svg\Atomic_Svg;
15 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Array_Transformer;
16 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Combine_Array_Transformer;
17 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Settings\Image_Src_Transformer;
18 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Settings\Image_Transformer;
19 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Settings\Link_Transformer;
20 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Primitive_Transformer;
21 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Background_Color_Overlay_Transformer;
22 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Background_Transformer;
23 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Edge_Sizes_Transformer;
24 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Corner_Sizes_Transformer;
25 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Dimensions_Transformer;
26 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Layout_Direction_Transformer;
27 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Shadow_Transformer;
28 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Size_Transformer;
29 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Stroke_Transformer;
30 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Background_Image_Overlay_Transformer;
31 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Background_Image_Overlay_Size_Scale_Transformer;
32 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Background_Image_Position_Offset_Transformer;
33 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers_Registry;
34 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Color_Overlay_Prop_Type;
35 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Image_Overlay_Size_Scale_Prop_Type;
36 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Image_Overlay_Prop_Type;
37 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Image_Position_Offset_Prop_Type;
38 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Overlay_Prop_Type;
39 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Prop_Type;
40 use Elementor\Modules\AtomicWidgets\PropTypes\Box_Shadow_Prop_Type;
41 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Radius_Prop_Type;
42 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Width_Prop_Type;
43 use Elementor\Modules\AtomicWidgets\PropTypes\Layout_Direction_Prop_Type;
44 use Elementor\Modules\AtomicWidgets\PropTypes\Link_Prop_Type;
45 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Boolean_Prop_Type;
46 use Elementor\Modules\AtomicWidgets\PropTypes\Classes_Prop_Type;
47 use Elementor\Modules\AtomicWidgets\PropTypes\Color_Prop_Type;
48 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Attachment_Id_Prop_Type;
49 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Prop_Type;
50 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Src_Prop_Type;
51 use Elementor\Modules\AtomicWidgets\PropTypes\Dimensions_Prop_Type;
52 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Number_Prop_Type;
53 use Elementor\Modules\AtomicWidgets\PropTypes\Shadow_Prop_Type;
54 use Elementor\Modules\AtomicWidgets\PropTypes\Size_Prop_Type;
55 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\String_Prop_Type;
56 use Elementor\Modules\AtomicWidgets\PropTypes\Stroke_Prop_Type;
57 use Elementor\Modules\AtomicWidgets\PropTypes\Url_Prop_Type;
58 use Elementor\Modules\AtomicWidgets\Styles\Atomic_Widget_Base_Styles;
59 use Elementor\Modules\AtomicWidgets\Styles\Atomic_Widget_Styles;
60 use Elementor\Modules\AtomicWidgets\Styles\Style_Schema;
61 use Elementor\Plugin;
62 use Elementor\Widgets_Manager;
63
64 if ( ! defined( 'ABSPATH' ) ) {
65 exit; // Exit if accessed directly.
66 }
67
68 class Module extends BaseModule {
69 const EXPERIMENT_NAME = 'atomic_widgets';
70
71 const PACKAGES = [
72 'editor-canvas',
73 'editor-controls', // TODO: Need to be registered and not enqueued.
74 'editor-editing-panel',
75 'editor-elements', // TODO: Need to be registered and not enqueued.
76 'editor-panels',
77 'editor-props', // TODO: Need to be registered and not enqueued.
78 'editor-styles', // TODO: Need to be registered and not enqueued.
79 'editor-styles-repository',
80 ];
81
82 public function get_name() {
83 return 'atomic-widgets';
84 }
85
86 public function __construct() {
87 parent::__construct();
88
89 if ( Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME ) ) {
90 Dynamic_Tags_Module::instance()->register_hooks();
91
92 ( new Atomic_Widget_Styles() )->register_hooks();
93 ( new Atomic_Widget_Base_Styles() )->register_hooks();
94
95 add_filter( 'elementor/editor/v2/packages', fn( $packages ) => $this->add_packages( $packages ) );
96 add_filter( 'elementor/editor/localize_settings', fn( $settings ) => $this->add_styles_schema( $settings ) );
97 add_filter( 'elementor/widgets/register', fn( Widgets_Manager $widgets_manager ) => $this->register_widgets( $widgets_manager ) );
98 add_action( 'elementor/atomic-widgets/settings/transformers/register', fn ( $transformers ) => $this->register_settings_transformers( $transformers ) );
99 add_action( 'elementor/atomic-widgets/styles/transformers/register', fn ( $transformers ) => $this->register_styles_transformers( $transformers ) );
100 add_action( 'elementor/elements/elements_registered', fn ( $elements_manager ) => $this->register_elements( $elements_manager ) );
101 add_action( 'elementor/editor/after_enqueue_scripts', fn() => $this->enqueue_scripts() );
102 add_action( 'elementor/frontend/after_register_styles', fn() => $this->register_styles() );
103 }
104 }
105
106 public static function get_experimental_data(): array {
107 return [
108 'name' => self::EXPERIMENT_NAME,
109 'title' => esc_html__( 'Atomic Widgets', 'elementor' ),
110 'description' => esc_html__( 'Enable atomic widgets.', 'elementor' ),
111 'hidden' => true,
112 'default' => Experiments_Manager::STATE_INACTIVE,
113 'release_status' => Experiments_Manager::RELEASE_STATUS_ALPHA,
114 ];
115 }
116
117 private function add_packages( $packages ) {
118 return array_merge( $packages, self::PACKAGES );
119 }
120
121 private function add_styles_schema( $settings ) {
122 if ( ! isset( $settings['atomic'] ) ) {
123 $settings['atomic'] = [];
124 }
125
126 $settings['atomic']['styles_schema'] = Style_Schema::get();
127
128 return $settings;
129 }
130
131 private function register_widgets( Widgets_Manager $widgets_manager ) {
132 $widgets_manager->register( new Atomic_Heading() );
133 $widgets_manager->register( new Atomic_Image() );
134 $widgets_manager->register( new Atomic_Paragraph() );
135 $widgets_manager->register( new Atomic_Svg() );
136 $widgets_manager->register( new Atomic_Button() );
137 }
138
139 private function register_elements( Elements_Manager $elements_manager ) {
140 $elements_manager->register_element_type( new Div_Block() );
141 }
142
143 private function register_settings_transformers( Transformers_Registry $transformers ) {
144 // Primitives
145 $transformers->register( Boolean_Prop_Type::get_key(), new Primitive_Transformer() );
146 $transformers->register( Number_Prop_Type::get_key(), new Primitive_Transformer() );
147 $transformers->register( String_Prop_Type::get_key(), new Primitive_Transformer() );
148
149 // Other
150 $transformers->register( Classes_Prop_Type::get_key(), new Array_Transformer() );
151 $transformers->register( Image_Prop_Type::get_key(), new Image_Transformer() );
152 $transformers->register( Image_Src_Prop_Type::get_key(), new Image_Src_Transformer() );
153 $transformers->register( Image_Attachment_Id_Prop_Type::get_key(), new Primitive_Transformer() );
154 $transformers->register( Url_Prop_Type::get_key(), new Primitive_Transformer() );
155 $transformers->register( Link_Prop_Type::get_key(), new Link_Transformer() );
156 }
157
158 private function register_styles_transformers( Transformers_Registry $transformers ) {
159 // Primitives
160 $transformers->register( Boolean_Prop_Type::get_key(), new Primitive_Transformer() );
161 $transformers->register( Number_Prop_Type::get_key(), new Primitive_Transformer() );
162 $transformers->register( String_Prop_Type::get_key(), new Primitive_Transformer() );
163
164 // Other
165 $transformers->register( Dimensions_Prop_Type::get_key(), new Dimensions_Transformer() );
166 $transformers->register( Size_Prop_Type::get_key(), new Size_Transformer() );
167 $transformers->register( Color_Prop_Type::get_key(), new Primitive_Transformer() );
168 $transformers->register( Box_Shadow_Prop_Type::get_key(), new Combine_Array_Transformer( ',' ) );
169 $transformers->register( Shadow_Prop_Type::get_key(), new Shadow_Transformer() );
170 $transformers->register( Border_Radius_Prop_Type::get_key(), new Corner_Sizes_Transformer( fn( $corner ) => 'border-' . $corner . '-radius' ) );
171 $transformers->register( Border_Width_Prop_Type::get_key(), new Edge_Sizes_Transformer( fn( $edge ) => 'border-' . $edge . '-width' ) );
172 $transformers->register( Stroke_Prop_Type::get_key(), new Stroke_Transformer() );
173 $transformers->register( Layout_Direction_Prop_Type::get_key(), new Layout_Direction_Transformer() );
174
175 $transformers->register( Image_Prop_Type::get_key(), new Image_Transformer() );
176 $transformers->register( Image_Src_Prop_Type::get_key(), new Image_Src_Transformer() );
177 $transformers->register( Image_Attachment_Id_Prop_Type::get_key(), new Primitive_Transformer() );
178 $transformers->register( Url_Prop_Type::get_key(), new Primitive_Transformer() );
179 $transformers->register( Background_Image_Overlay_Prop_Type::get_key(), new Background_Image_Overlay_Transformer() );
180 $transformers->register( Background_Image_Overlay_Size_Scale_Prop_Type::get_key(), new Background_Image_Overlay_Size_Scale_Transformer() );
181 $transformers->register( Background_Image_Position_Offset_Prop_Type::get_key(), new Background_Image_Position_Offset_Transformer() );
182 $transformers->register( Background_Color_Overlay_Prop_Type::get_key(), new Background_Color_Overlay_Transformer() );
183 $transformers->register( Background_Overlay_Prop_Type::get_key(), new Combine_Array_Transformer( ',' ) );
184 $transformers->register( Background_Prop_Type::get_key(), new Background_Transformer() );
185 }
186
187 /**
188 * Enqueue the module scripts.
189 *
190 * @return void
191 */
192 private function enqueue_scripts() {
193 wp_enqueue_script(
194 'elementor-atomic-widgets-editor',
195 $this->get_js_assets_url( 'atomic-widgets-editor' ),
196 [ 'elementor-editor' ],
197 ELEMENTOR_VERSION,
198 true
199 );
200 }
201
202 public function register_styles() {
203 wp_register_style(
204 'div-block',
205 $this->get_css_assets_url( 'div-block', 'assets/css/' ),
206 [ 'elementor-frontend' ],
207 ELEMENTOR_VERSION
208 );
209 }
210 }
211