PluginProbe
Tableberg – Simple Gutenberg Table Block / trunk
Tableberg – Simple Gutenberg Table Block vtrunk
1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 trunk 0.0.2 0.2.1 0.3.2 0.3.3 0.4.1 0.5.0 0.5.1 0.5.2 0.5.3 0.5.4 0.5.5 0.5.6 0.5.7 0.5.8 All 41 releases
tableberg / renderer / Icon / IconAttrs.php

IconAttrs.php in Tableberg – Simple Gutenberg Table Block trunk, at renderer/Icon/IconAttrs.php

231 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Tableberg\Renderer\Icon;
4
5 use Tableberg\Renderer\Attrs\Corners;
6 use Tableberg\Renderer\Attrs\NumberAttr;
7 use Tableberg\Renderer\Attrs\Sides;
8 use Tableberg\Renderer\Attrs\SvgIconAttrs;
9 use Tableberg\Renderer\Attrs\StringAttr;
10
11 use function Tableberg\Renderer\getOrNull;
12
13 class IconAttrs {
14 /** @var IconDataAttrs */
15 public $icon;
16
17 /** @var StringAttr */
18 public $size;
19
20 /** @var StringAttr */
21 public $behavior;
22
23 /** @var IconLinkAttrs */
24 public $link;
25
26 /** @var IconStyles */
27 public $styles;
28
29 /**
30 * @param array<string, mixed>|null $data
31 * @return self
32 */
33 public static function from_array($data) {
34 $data = is_array($data) ? $data : [];
35 $defaults = Defaults::get_defaults();
36
37 $instance = new self();
38 $instance->icon = IconDataAttrs::from_array(getOrNull($data['icon']));
39 $instance->size = new StringAttr(getOrNull($data['size']), $defaults['size']);
40 $instance->behavior = new StringAttr(
41 getOrNull($data['behavior']),
42 $defaults['behavior'],
43 ['paragraph', 'char']
44 );
45 $instance->link = IconLinkAttrs::from_array(getOrNull($data['link']));
46 $instance->styles = IconStyles::from_array(getOrNull($data['styles']));
47
48 return $instance;
49 }
50 }
51
52 class IconDataAttrs {
53 /** @var StringAttr */
54 public $iconName;
55
56 /** @var SvgIconAttrs|null */
57 public $svg;
58
59 /** @var StringAttr */
60 public $url;
61
62 /**
63 * @param array<string, mixed>|null $data
64 * @return self
65 */
66 public static function from_array($data) {
67 $data = is_array($data) ? $data : [];
68 $defaults = Defaults::get_defaults();
69 $d = getOrNull($defaults['icon']);
70
71 $defaultIconName = getOrNull($d['iconName']);
72 $defaultSvg = getOrNull($d['svg']);
73 $defaultUrl = getOrNull($d['url']);
74
75 $instance = new self();
76 $instance->iconName = new StringAttr(
77 getOrNull($data['iconName']),
78 $defaultIconName
79 );
80 $instance->url = new StringAttr(
81 getOrNull($data['url']),
82 $defaultUrl
83 );
84
85 if (array_key_exists('svg', $data) && $data['svg'] === null) {
86 $instance->svg = null;
87 return $instance;
88 }
89
90 $svgData = getOrNull($data['svg']);
91 if (!is_array($svgData)) {
92 $svgData = $defaultSvg;
93 }
94
95 $instance->svg = is_array($svgData)
96 ? SvgIconAttrs::from_array(
97 $svgData,
98 $defaultSvg,
99 '0 0 512 512',
100 'M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'
101 )
102 : null;
103
104 return $instance;
105 }
106 }
107
108 class IconLinkAttrs {
109 /** @var StringAttr */
110 public $url;
111
112 /** @var StringAttr */
113 public $target;
114
115 /**
116 * @param array<string, mixed>|null $data
117 * @return self
118 */
119 public static function from_array($data) {
120 $data = is_array($data) ? $data : [];
121 $defaults = Defaults::get_defaults();
122 $d = getOrNull($defaults['link']);
123
124 $defaultUrl = getOrNull($d['url']);
125 $defaultTarget = getOrNull($d['target']);
126
127 $instance = new self();
128 $instance->url = new StringAttr(
129 getOrNull($data['url']),
130 $defaultUrl
131 );
132 $instance->target = new StringAttr(
133 getOrNull($data['target']),
134 $defaultTarget,
135 ['_blank', '_self']
136 );
137
138 return $instance;
139 }
140 }
141
142 class IconStyles {
143 /** @var StringAttr */
144 public $align;
145
146 /** @var NumberAttr */
147 public $rotation;
148
149 /** @var StringAttr */
150 public $color;
151
152 /** @var StringAttr */
153 public $colorHover;
154
155 /** @var StringAttr */
156 public $background;
157
158 /** @var StringAttr */
159 public $backgroundHover;
160
161 /** @var Sides */
162 public $padding;
163
164 /** @var Sides */
165 public $border;
166
167 /** @var Corners */
168 public $borderRadius;
169
170 /**
171 * @param array<string, mixed>|null $data
172 * @return self
173 */
174 public static function from_array($data) {
175 $data = is_array($data) ? $data : [];
176 $defaults = Defaults::get_defaults();
177 $d = getOrNull($defaults['styles']);
178
179 $defaultAlign = getOrNull($d['align']);
180 $defaultRotation = getOrNull($d['rotation']);
181 $defaultColor = getOrNull($d['color']);
182 $defaultColorHover = getOrNull($d['colorHover']);
183 $defaultBackground = getOrNull($d['background']);
184 $defaultBackgroundHover = getOrNull($d['backgroundHover']);
185 $defaultPadding = getOrNull($d['padding']);
186 $defaultBorder = getOrNull($d['border']);
187 $defaultBorderRadius = getOrNull($d['borderRadius']);
188
189 $instance = new self();
190 $instance->align = new StringAttr(
191 getOrNull($data['align']),
192 $defaultAlign,
193 ['left', 'center', 'right']
194 );
195 $instance->rotation = new NumberAttr(
196 getOrNull($data['rotation']),
197 $defaultRotation
198 );
199 $instance->color = new StringAttr(
200 getOrNull($data['color']),
201 $defaultColor
202 );
203 $instance->colorHover = new StringAttr(
204 getOrNull($data['colorHover']),
205 $defaultColorHover
206 );
207 $instance->background = new StringAttr(
208 getOrNull($data['background']),
209 $defaultBackground
210 );
211 $instance->backgroundHover = new StringAttr(
212 getOrNull($data['backgroundHover']),
213 $defaultBackgroundHover
214 );
215 $instance->padding = Sides::from_array(
216 getOrNull($data['padding']),
217 $defaultPadding
218 );
219 $instance->border = Sides::from_array(
220 getOrNull($data['border']),
221 $defaultBorder
222 );
223 $instance->borderRadius = Corners::from_array(
224 getOrNull($data['borderRadius']),
225 $defaultBorderRadius
226 );
227
228 return $instance;
229 }
230 }
231