PluginProbe
Elementor Website Builder – more than just a page builder / 3.35.9
Elementor Website Builder – more than just a page builder v3.35.9
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 / elements / base / atomic-widget-base.php

atomic-widget-base.php in Elementor Website Builder – more than just a page builder 3.35.9, at modules/atomic-widgets/elements/base/atomic-widget-base.php

116 lines 3.1 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\Base;
4
5 use Elementor\Modules\AtomicWidgets\Elements\Loader\Frontend_Assets_Loader;
6 use Elementor\Modules\AtomicWidgets\PropDependencies\Manager as Dependency_Manager;
7 use Elementor\Modules\AtomicWidgets\PropTypes\Concerns\Has_Meta;
8 use Elementor\Widget_Base;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12 }
13
14 abstract class Atomic_Widget_Base extends Widget_Base {
15 use Has_Atomic_Base;
16 use Has_Meta;
17
18 public static $widget_description = null;
19
20 protected $version = '0.0';
21 protected $styles = [];
22 protected $interactions = [];
23 protected $editor_settings = [];
24
25 public function __construct( $data = [], $args = null ) {
26 parent::__construct( $data, $args );
27
28 $this->version = $data['version'] ?? '0.0';
29 $this->styles = $data['styles'] ?? [];
30 $this->interactions = $this->parse_atomic_interactions( $data['interactions'] ?? [] );
31 $this->editor_settings = $data['editor_settings'] ?? [];
32 if ( static::$widget_description ) {
33 $this->description( static::$widget_description );
34 }
35 }
36
37 private function parse_atomic_interactions( $interactions ) {
38 if ( empty( $interactions ) ) {
39 return [];
40 }
41
42 if ( is_string( $interactions ) ) {
43 $decoded = json_decode( $interactions, true );
44 if ( json_last_error() === JSON_ERROR_NONE && is_array( $decoded ) ) {
45 $interactions = $decoded;
46 }
47 }
48
49 if ( ! is_array( $interactions ) ) {
50 return [];
51 }
52
53 return $interactions;
54 }
55
56 private function convert_prop_type_interactions_to_legacy_for_runtime( $interactions ) {
57 $legacy_items = [];
58
59 foreach ( $interactions['items'] as $item ) {
60 if ( isset( $item['$$type'] ) && 'interaction-item' === $item['$$type'] ) {
61 $legacy_item = $this->extract_legacy_interaction_from_prop_type( $item );
62 if ( $legacy_item ) {
63 $legacy_items[] = $legacy_item;
64 }
65 } else {
66 $legacy_items[] = $item;
67 }
68 }
69
70 return [
71 'version' => $interactions['version'] ?? 1,
72 'items' => $legacy_items,
73 ];
74 }
75
76 abstract protected function define_atomic_controls(): array;
77
78 public function get_global_scripts() {
79 return [];
80 }
81
82 public function get_initial_config() {
83 $config = parent::get_initial_config();
84 $props_schema = static::get_props_schema();
85
86 $config['atomic'] = true;
87 $config['atomic_controls'] = $this->get_atomic_controls();
88 $config['base_styles'] = $this->get_base_styles();
89 $config['base_styles_dictionary'] = $this->get_base_styles_dictionary();
90 $config['atomic_props_schema'] = $props_schema;
91 $config['dependencies_per_target_mapping'] = Dependency_Manager::get_source_to_dependents( $props_schema );
92 $config['version'] = $this->version;
93 $config['meta'] = $this->get_meta();
94
95 return $config;
96 }
97
98 public function get_categories(): array {
99 return [ 'v4-elements' ];
100 }
101
102 public function before_render() {}
103
104 public function after_render() {}
105
106 abstract protected static function define_props_schema(): array;
107
108 public static function generate() {
109 return Widget_Builder::make( static::get_element_type() );
110 }
111
112 public function get_script_depends() {
113 return [ Frontend_Assets_Loader::ATOMIC_WIDGETS_HANDLER ];
114 }
115 }
116