PluginProbe
Elementor Website Builder – more than just a page builder / 3.27.5
Elementor Website Builder – more than just a page builder v3.27.5
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.27.5, at modules/atomic-widgets/module.php

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