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

147 lines 6.9 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\Modules\AtomicWidgets\DynamicTags\Dynamic_Tags_Module;
8 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Combine_Array_Transformer;
9 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Settings\Image_Src_Transformer;
10 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Settings\Image_Transformer;
11 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Primitive_Transformer;
12 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Edge_Sizes_Transformer;
13 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Corner_Sizes_Transformer;
14 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Linked_Dimensions_Transformer;
15 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Shadow_Transformer;
16 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Size_Transformer;
17 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles\Stroke_Transformer;
18 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers_Registry;
19 use Elementor\Modules\AtomicWidgets\PropTypes\Box_Shadow_Prop_Type;
20 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Radius_Prop_Type;
21 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Width_Prop_Type;
22 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Boolean_Prop_Type;
23 use Elementor\Modules\AtomicWidgets\PropTypes\Classes_Prop_Type;
24 use Elementor\Modules\AtomicWidgets\PropTypes\Color_Prop_Type;
25 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Attachment_Id_Prop_Type;
26 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Prop_Type;
27 use Elementor\Modules\AtomicWidgets\PropTypes\Image_Src_Prop_Type;
28 use Elementor\Modules\AtomicWidgets\PropTypes\Linked_Dimensions_Prop_Type;
29 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Number_Prop_Type;
30 use Elementor\Modules\AtomicWidgets\PropTypes\Shadow_Prop_Type;
31 use Elementor\Modules\AtomicWidgets\PropTypes\Size_Prop_Type;
32 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\String_Prop_Type;
33 use Elementor\Modules\AtomicWidgets\PropTypes\Stroke_Prop_Type;
34 use Elementor\Modules\AtomicWidgets\PropTypes\Url_Prop_Type;
35 use Elementor\Modules\AtomicWidgets\Widgets\Atomic_Heading;
36 use Elementor\Modules\AtomicWidgets\Widgets\Atomic_Image;
37 use Elementor\Modules\AtomicWidgets\Styles\Atomic_Styles;
38 use Elementor\Plugin;
39 use Elementor\Widgets_Manager;
40
41 if ( ! defined( 'ABSPATH' ) ) {
42 exit; // Exit if accessed directly.
43 }
44
45 class Module extends BaseModule {
46 const EXPERIMENT_NAME = 'atomic_widgets';
47
48 const PACKAGES = [
49 'editor-controls', // TODO: Need to be registered and not enqueued.
50 'editor-editing-panel',
51 'editor-elements', // TODO: Need to be registered and not enqueued.
52 'editor-panels',
53 'editor-props', // TODO: Need to be registered and not enqueued.
54 'editor-style',
55 'editor-styles', // TODO: Need to be registered and not enqueued.
56 ];
57
58 public function get_name() {
59 return 'atomic-widgets';
60 }
61
62 public function __construct() {
63 parent::__construct();
64
65 $this->register_experiment();
66
67 if ( Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME ) ) {
68 Dynamic_Tags_Module::instance()->register_hooks();
69
70 ( new Atomic_Styles() )->register_hooks();
71
72 add_filter( 'elementor/editor/v2/packages', fn( $packages ) => $this->add_packages( $packages ) );
73 add_filter( 'elementor/widgets/register', fn( Widgets_Manager $widgets_manager ) => $this->register_widgets( $widgets_manager ) );
74 add_action( 'elementor/atomic-widgets/settings/transformers/register', fn ( $transformers ) => $this->register_settings_transformers( $transformers ) );
75 add_action( 'elementor/atomic-widgets/styles/transformers/register', fn ( $transformers ) => $this->register_styles_transformers( $transformers ) );
76
77 add_action( 'elementor/editor/after_enqueue_scripts', fn() => $this->enqueue_scripts() );
78 }
79 }
80
81 private function register_experiment() {
82 Plugin::$instance->experiments->add_feature( [
83 'name' => self::EXPERIMENT_NAME,
84 'title' => esc_html__( 'Atomic Widgets', 'elementor' ),
85 'description' => esc_html__( 'Enable atomic widgets.', 'elementor' ),
86 'hidden' => true,
87 'default' => Experiments_Manager::STATE_INACTIVE,
88 'release_status' => Experiments_Manager::RELEASE_STATUS_ALPHA,
89 ] );
90 }
91
92 private function add_packages( $packages ) {
93 return array_merge( $packages, self::PACKAGES );
94 }
95
96 private function register_widgets( Widgets_Manager $widgets_manager ) {
97 $widgets_manager->register( new Atomic_Heading() );
98 $widgets_manager->register( new Atomic_Image() );
99 }
100
101 private function register_settings_transformers( Transformers_Registry $transformers ) {
102 // Primitives
103 $transformers->register( Boolean_Prop_Type::get_key(), new Primitive_Transformer() );
104 $transformers->register( Number_Prop_Type::get_key(), new Primitive_Transformer() );
105 $transformers->register( String_Prop_Type::get_key(), new Primitive_Transformer() );
106
107 // Other
108 $transformers->register( Classes_Prop_Type::get_key(), new Combine_Array_Transformer( ' ' ) );
109 $transformers->register( Image_Prop_Type::get_key(), new Image_Transformer() );
110 $transformers->register( Image_Src_Prop_Type::get_key(), new Image_Src_Transformer() );
111 $transformers->register( Image_Attachment_Id_Prop_Type::get_key(), new Primitive_Transformer() );
112 $transformers->register( Url_Prop_Type::get_key(), new Primitive_Transformer() );
113 }
114
115 private function register_styles_transformers( Transformers_Registry $transformers ) {
116 // Primitives
117 $transformers->register( Boolean_Prop_Type::get_key(), new Primitive_Transformer() );
118 $transformers->register( Number_Prop_Type::get_key(), new Primitive_Transformer() );
119 $transformers->register( String_Prop_Type::get_key(), new Primitive_Transformer() );
120
121 // Other
122 $transformers->register( Linked_Dimensions_Prop_Type::get_key(), new Linked_Dimensions_Transformer() );
123 $transformers->register( Size_Prop_Type::get_key(), new Size_Transformer() );
124 $transformers->register( Color_Prop_Type::get_key(), new Primitive_Transformer() );
125 $transformers->register( Box_Shadow_Prop_Type::get_key(), new Combine_Array_Transformer( ',' ) );
126 $transformers->register( Shadow_Prop_Type::get_key(), new Shadow_Transformer() );
127 $transformers->register( Border_Radius_Prop_Type::get_key(), new Corner_Sizes_Transformer( fn( $corner ) => 'border-' . $corner . '-radius' ) );
128 $transformers->register( Border_Width_Prop_Type::get_key(), new Edge_Sizes_Transformer( fn( $edge ) => 'border-' . $edge . '-width' ) );
129 $transformers->register( Stroke_Prop_Type::get_key(), new Stroke_Transformer() );
130 }
131
132 /**
133 * Enqueue the module scripts.
134 *
135 * @return void
136 */
137 private function enqueue_scripts() {
138 wp_enqueue_script(
139 'elementor-atomic-widgets-editor',
140 $this->get_js_assets_url( 'atomic-widgets-editor' ),
141 [ 'elementor-editor' ],
142 ELEMENTOR_VERSION,
143 true
144 );
145 }
146 }
147