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 / Image / ImageAttrs.php

ImageAttrs.php in Tableberg – Simple Gutenberg Table Block trunk, at renderer/Image/ImageAttrs.php

193 lines 5.1 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\Image;
4
5 use Tableberg\Renderer\Attrs\Corners;
6 use Tableberg\Renderer\Attrs\BoolAttr;
7 use Tableberg\Renderer\Attrs\NumberAttr;
8 use Tableberg\Renderer\Attrs\Sides;
9 use Tableberg\Renderer\Attrs\StringAttr;
10
11 use function Tableberg\Renderer\getOrNull;
12
13 class ImageAttrs {
14 /** @var MediaAttrs */
15 public $media;
16
17 /** @var StringAttr */
18 public $height;
19
20 /** @var StringAttr */
21 public $width;
22
23 /** @var StringAttr */
24 public $alt;
25
26 /** @var StringAttr */
27 public $align;
28
29 /** @var StringAttr */
30 public $aspectRatio;
31
32 /** @var StringAttr */
33 public $scale;
34
35 /** @var StringAttr */
36 public $sizeSlug;
37
38 /** @var StringAttr */
39 public $caption;
40
41 /** @var StringAttr */
42 public $href;
43
44 /** @var StringAttr */
45 public $linkTarget;
46
47 /** @var ImageLightboxAttrs */
48 public $lightbox;
49
50 /** @var Sides */
51 public $border;
52
53 /** @var Corners */
54 public $borderRadius;
55
56 /**
57 * @param array<string, mixed>|null $data
58 * @return self
59 */
60 public static function from_array($data) {
61 $data = is_array($data) ? $data : [];
62 $defaults = Defaults::get_defaults();
63
64 $instance = new self();
65 $instance->media = MediaAttrs::from_array(getOrNull($data['media']));
66 $instance->height = new StringAttr(getOrNull($data['height']), $defaults['height']);
67 $instance->width = new StringAttr(getOrNull($data['width']), $defaults['width']);
68 $instance->alt = new StringAttr(getOrNull($data['alt']), $defaults['alt']);
69 $instance->align = new StringAttr(
70 getOrNull($data['align']),
71 $defaults['align'],
72 ['left', 'center', 'right']
73 );
74 $instance->aspectRatio = new StringAttr(
75 getOrNull($data['aspectRatio']),
76 $defaults['aspectRatio']
77 );
78 $instance->scale = new StringAttr(getOrNull($data['scale']), $defaults['scale']);
79 $instance->sizeSlug = new StringAttr(getOrNull($data['sizeSlug']), $defaults['sizeSlug']);
80 $instance->caption = new StringAttr(getOrNull($data['caption']), $defaults['caption']);
81 $instance->href = new StringAttr(getOrNull($data['href']), $defaults['href']);
82 $instance->linkTarget = new StringAttr(
83 getOrNull($data['linkTarget']),
84 $defaults['linkTarget'],
85 ['_blank', '_self']
86 );
87 $instance->lightbox = ImageLightboxAttrs::from_array(
88 getOrNull($data['lightbox']),
89 $defaults['lightbox']
90 );
91 $instance->border = Sides::from_array(getOrNull($data['border']), $defaults['border']);
92 $instance->borderRadius = Corners::from_array(
93 getOrNull($data['borderRadius']),
94 $defaults['borderRadius']
95 );
96
97 return $instance;
98 }
99 }
100
101 class ImageLightboxAttrs {
102 /** @var BoolAttr */
103 public $enabled;
104
105 /**
106 * @param array<string, mixed>|null $data
107 * @param array<string, mixed> $defaults
108 * @return self
109 */
110 public static function from_array($data, $defaults) {
111 $data = is_array($data) ? $data : [];
112
113 $instance = new self();
114 $instance->enabled = new BoolAttr(
115 getOrNull($data['enabled']),
116 (bool) ($defaults['enabled'] ?? false)
117 );
118
119 return $instance;
120 }
121 }
122
123 class MediaSizeAttrs {
124 /** @var StringAttr */
125 public $url;
126
127 /** @var NumberAttr */
128 public $width;
129
130 /** @var NumberAttr */
131 public $height;
132
133 /** @var StringAttr */
134 public $orientation;
135
136 /**
137 * @param array<string, mixed>|null $data
138 * @return self
139 */
140 public static function from_array($data) {
141 $data = is_array($data) ? $data : [];
142
143 $instance = new self();
144 $instance->url = new StringAttr(getOrNull($data['url']), '');
145 $instance->width = new NumberAttr(getOrNull($data['width']), 0);
146 $instance->height = new NumberAttr(getOrNull($data['height']), 0);
147 $instance->orientation = new StringAttr(getOrNull($data['orientation']), '');
148
149 return $instance;
150 }
151 }
152
153 class MediaAttrs {
154 /** @var NumberAttr */
155 public $id;
156
157 /** @var StringAttr */
158 public $url;
159
160 /** @var StringAttr */
161 public $alt;
162
163 /** @var array<string, MediaSizeAttrs> */
164 public $sizes;
165
166 /**
167 * @param array<string, mixed>|null $data
168 * @return self
169 */
170 public static function from_array($data) {
171 $data = is_array($data) ? $data : [];
172
173 $instance = new self();
174 $instance->id = new NumberAttr(getOrNull($data['id']), 0);
175 $instance->url = new StringAttr(getOrNull($data['url']), '');
176 $instance->alt = new StringAttr(getOrNull($data['alt']), '');
177 $instance->sizes = [];
178
179 $rawSizes = getOrNull($data['sizes']);
180 if (is_array($rawSizes)) {
181 foreach ($rawSizes as $slug => $sizeData) {
182 if (!is_string($slug) || !is_array($sizeData)) {
183 continue;
184 }
185
186 $instance->sizes[$slug] = MediaSizeAttrs::from_array($sizeData);
187 }
188 }
189
190 return $instance;
191 }
192 }
193