PluginProbe
Elementor Website Builder – more than just a page builder / 3.25.8
Elementor Website Builder – more than just a page builder v3.25.8
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 / atomic-styles.php

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

121 lines 3.3 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\Modules\AtomicWidgets\Base\Style_Transformer_Base;
6 use Elementor\Core\Files\CSS\Post;
7 use Elementor\Element_Base;
8 use Elementor\Modules\AtomicWidgets\Base\Atomic_Widget_Base;
9 use Elementor\Modules\AtomicWidgets\Styles\Styles_Renderer;
10 use Elementor\Modules\AtomicWidgets\Styles\Transformers\Array_Transformer;
11 use Elementor\Modules\AtomicWidgets\Styles\Transformers\Linked_Dimensions_Transformer;
12 use Elementor\Modules\AtomicWidgets\Styles\Transformers\Size_Transformer;
13 use Elementor\Plugin;
14
15 class Atomic_Styles {
16 /**
17 * @var array<string, Style_Transformer_Base> $transformers
18 */
19 private array $style_transformers = [];
20
21 /**
22 * @var array<string, array{direction: 'min' | 'max', value: int, is_enabled: boolean}> $breakpoints
23 */
24 private array $breakpoints = [];
25
26 private Styles_Renderer $styles_renderer;
27
28 public function register_hooks() {
29 add_filter(
30 'elementor/atomic-widgets/styles/transformers',
31 fn ( array $transformers) => $this->register_style_transformers( $transformers )
32 );
33 add_action( 'elementor/element/parse_css', fn( Post $post, Element_Base $element ) => $this->parse_element_style( $post, $element ), 10, 2 );
34 }
35
36 /**
37 * @param array<int, Style_Transformer_Base> $transformers
38 * @return array<string, Style_Transformer_Base>
39 */
40 private function register_style_transformers( array $transformers ): array {
41 array_push(
42 $transformers,
43 new Size_Transformer(),
44 new Array_Transformer(),
45 new Linked_Dimensions_Transformer()
46 );
47
48 return $transformers;
49 }
50
51 private function get_style_transformers(): array {
52 if ( count( $this->style_transformers ) === 0 ) {
53 $this->style_transformers = $this->build_style_transformers();
54 }
55
56 return $this->style_transformers;
57 }
58
59 private function build_style_transformers(): array {
60 $transformers = apply_filters( 'elementor/atomic-widgets/styles/transformers', [] );
61
62 $transformers_map = [];
63
64 foreach ( $transformers as $transformer ) {
65 $transformers_map[ $transformer->type() ] = $transformer;
66 }
67
68 return $transformers_map;
69 }
70
71 private function get_breakpoints(): array {
72 if ( count( $this->breakpoints ) === 0 ) {
73 $this->breakpoints = $this->build_breakpoints();
74 }
75
76 return $this->breakpoints;
77 }
78
79 private function build_breakpoints(): array {
80 return Plugin::$instance->breakpoints->get_breakpoints_config();
81 }
82
83 private function get_styles_renderer(): Styles_Renderer {
84 if ( ! isset( $this->styles_renderer ) ) {
85 $this->styles_renderer = $this->build_styles_renderer();
86 }
87
88 return $this->styles_renderer;
89 }
90
91 private function build_styles_renderer(): Styles_Renderer {
92 $transformers = $this->get_style_transformers();
93 $breakpoints = $this->get_breakpoints();
94
95 return new Styles_Renderer( [
96 'transformers' => $transformers,
97 'breakpoints' => $breakpoints,
98 ] );
99 }
100
101 private function parse_element_style( Post $post, Element_Base $element ) {
102 if ( ! ( $element instanceof Atomic_Widget_Base ) || Post::class !== get_class( $post ) ) {
103 return;
104 }
105
106 $styles = $element->get_raw_data()['styles'];
107
108 if ( empty( $styles ) ) {
109 return;
110 }
111
112 $post->get_stylesheet()->add_raw_css( $this->convert_styles_to_css( $styles ) );
113 }
114
115 private function convert_styles_to_css( array $styles ): string {
116 $styles_renderer = $this->get_styles_renderer();
117
118 return $styles_renderer->render( $styles );
119 }
120 }
121