PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.4.3
Kubio AI Page Builder v2.4.3
2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / lib / src / Core / StyleManager / StyleParser.php
kubio / lib / src / Core / StyleManager Last commit date
Generics 4 years ago Props 1 year ago BlockStyleRender.php 4 years ago DynamicStyles.php 3 years ago GlobalStyleRender.php 2 years ago MainAttribute.php 4 years ago ParserUtils.php 2 years ago StyleManager.php 2 years ago StyleParser.php 2 years ago StyleRender.php 2 years ago Utils.php 4 years ago
StyleParser.php
149 lines
1 <?php
2
3 namespace Kubio\Core\StyleManager;
4
5 use IlluminateAgnostic\Arr\Support\Arr;
6 use Kubio\Core\LodashBasic;
7 use Kubio\Core\StyleManager\Props\Animation;
8 use Kubio\Core\StyleManager\Props\Background;
9 use Kubio\Core\StyleManager\Props\Border;
10 use Kubio\Core\StyleManager\Props\BoxShadow;
11 use Kubio\Core\StyleManager\Props\ColumnWidth;
12 use Kubio\Core\StyleManager\Props\CustomHeight;
13 use Kubio\Core\StyleManager\Props\Height;
14 use Kubio\Core\StyleManager\Props\MultipleImage;
15 use Kubio\Core\StyleManager\Props\Opacity;
16 use Kubio\Core\StyleManager\Props\Size;
17 use Kubio\Core\StyleManager\Props\Stroke;
18 use Kubio\Core\StyleManager\Props\TBLR;
19 use Kubio\Core\StyleManager\Props\TextShadow;
20 use Kubio\Core\StyleManager\Props\Transform;
21 use Kubio\Core\StyleManager\Props\Transition;
22 use Kubio\Core\StyleManager\Props\Typography;
23 use Kubio\Core\StyleManager\Props\Width;
24 use Kubio\Core\StyleManager\Props\Gap;
25 use Kubio\Core\StyleManager\Props\JustifyContent;
26 use Kubio\Core\StyleManager\Props\UnitValuePercentage;
27 use Kubio\Core\StyleManager\Props\UnitValuePx;
28 use Kubio\Core\StyleManager\Props\ObjectCss;
29 use Kubio\Core\StyleManager\Props\MaxWidth;
30
31 class StyleParser {
32
33 public $groups;
34 public static $instance = null;
35
36 protected function __construct() {
37 $properties = array(
38 new Background( 'background' ),
39 new TBLR( 'padding' ),
40 new TBLR( 'margin' ),
41 new ColumnWidth( 'columnWidth' ),
42 new CustomHeight( 'customHeight' ),
43 new BoxShadow( 'boxShadow' ),
44 new TextShadow( 'textShadow' ),
45 new Border( 'border' ),
46 new Typography( 'typography' ),
47 new Size( 'size' ),
48 new Transform( 'transform' ),
49 new Opacity( 'opacity' ),
50 new Gap( 'gap' ),
51 new JustifyContent( 'justifyContent' ),
52 new Width( 'width' ),
53 new Height( 'height' ),
54 new Stroke( 'stroke' ),
55 new MultipleImage( 'multipleImage' ),
56 new UnitValuePercentage( 'top' ),
57 new UnitValuePercentage( 'right' ),
58 new UnitValuePercentage( 'bottom' ),
59 new UnitValuePercentage( 'left' ),
60 new MaxWidth( 'maxWidth' ),
61 new UnitValuePx( 'maxHeight' ),
62 new UnitValuePx( 'minHeight' ),
63 new ObjectCss( 'object' ),
64 new Animation( 'animation' ),
65 new Transition( 'transition' ),
66 );
67
68 $this->groups = array();
69 foreach ( $properties as $property ) {
70 $this->addProperty( $property->name, $property );
71 }
72 }
73
74 public static function getInstance() {
75 if ( ! self::$instance ) {
76 self::$instance = new StyleParser();
77 }
78 return self::$instance;
79 }
80
81 public function evaluateString( $value ) {
82 return $value;
83 }
84
85 public function addProperty( $name, $property ) {
86 $this->groups[ $name ] = $property;
87 }
88
89 public function evaluate( $value ) {
90 if ( LodashBasic::isString( $value ) ) {
91 return $this->evaluateString( $value );
92 }
93 if ( is_array( $value ) ) {
94 foreach ( $value as $name => $val ) {
95 $value[ $name ] = $this->evaluate( $val );
96 }
97 }
98 return $value;
99 }
100
101 public function transform( $obj, $context, $skip_normal = false ) {
102 if ( ! $obj ) {
103 return;
104 }
105 $css = array();
106 $obj = $this->filterProps( $obj );
107 foreach ( array_keys( $obj ) as $prop ) {
108 if ( isset( $this->groups[ $prop ] ) ) {
109 $new_props = $this->groups[ $prop ]->parse( $obj[ $prop ], $context );
110 $new_props = $this->evaluate( $new_props );
111 $css = LodashBasic::merge( $css, (array) $new_props );
112 } else {
113
114 if ( strpos( $prop, '--' ) === 0 ) {
115 $css[ $prop ] = ParserUtils::toValueUnitString( $obj[ $prop ] );
116 } else {
117 if ( ! $skip_normal ) {
118 if ( is_numeric( $obj[ $prop ] ) || is_string( $obj[ $prop ] ) ) {
119 $css[ $prop ] = $this->evaluate( $obj[ $prop ] );
120 }
121 }
122 }
123 }
124 }
125 return $css;
126 }
127
128
129 public function filterProps( $obj ) {
130 $props_to_unset = array();
131 if ( isset( $obj['size'] ) ) {
132 $props_to_unset = array_merge(
133 $props_to_unset,
134 array(
135 'width',
136 'height',
137 'minWidth',
138 'minHeight',
139 )
140 );
141 }
142
143 Arr::forget( $obj, $props_to_unset );
144
145 return $obj;
146
147 }
148 }
149