PluginProbe
Tableberg – Simple Gutenberg Table Block / 1.1.3
Tableberg – Simple Gutenberg Table Block v1.1.3
1.1.5 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 All 42 releases
tableberg / renderer / Cell / CellRenderContext.php

CellRenderContext.php in Tableberg – Simple Gutenberg Table Block 1.1.3, at renderer/Cell/CellRenderContext.php

242 lines 7.0 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\Cell;
4
5 use function Tableberg\Renderer\getArrayOrNull;
6 use function Tableberg\Renderer\getStringOrNull;
7
8 class CellRenderContext {
9 /** @var string */
10 public $className;
11
12 /** @var bool */
13 public $hasCellCoords;
14
15 /** @var int */
16 public $row;
17
18 /** @var int */
19 public $col;
20
21 /** @var int */
22 public $rowSpan;
23
24 /** @var int */
25 public $colSpan;
26
27 /** @var string */
28 public $tag;
29
30 /** @var string */
31 public $paddingTop;
32
33 /** @var string */
34 public $paddingRight;
35
36 /** @var string */
37 public $paddingBottom;
38
39 /** @var string */
40 public $paddingLeft;
41
42 /** @var string */
43 public $backgroundColor;
44
45 /** @var string */
46 public $orientation;
47
48 /** @var string */
49 public $elementGap;
50
51 /** @var string */
52 public $wrap;
53
54 /** @var string */
55 public $verticalAlign;
56
57 /** @var string */
58 public $borderTop;
59
60 /** @var string */
61 public $borderRight;
62
63 /** @var string */
64 public $borderBottom;
65
66 /** @var string */
67 public $borderLeft;
68
69 /** @var string */
70 public $borderTopLeftRadius;
71
72 /** @var string */
73 public $borderTopRightRadius;
74
75 /** @var string */
76 public $borderBottomRightRadius;
77
78 /** @var string */
79 public $borderBottomLeftRadius;
80
81 /** @var array<int, \Tableberg\Renderer\Table\CellElement> */
82 public $elements;
83
84 /** @var array<string, \Tableberg\Renderer\Attrs\StringAttr|array>|null */
85 public $cellStyleOverride;
86
87 /** @var array<string, mixed>|null */
88 public $ribbon;
89
90 /**
91 * Every attribute of the cell block, untouched, for renderers that read
92 * attributes free does not know about (pro registers its own).
93 *
94 * @var array<string, mixed>
95 */
96 public $cellAttrs = [];
97
98 /** @var string|null */
99 public $sortableType;
100
101 /** @var string|null */
102 public $width;
103
104 /** @var string|null */
105 public $height;
106
107 /** @var bool */
108 public $stickyHeader;
109
110 /** @var bool */
111 public $stickyFirstCol;
112
113 /**
114 * Whether the cell is a pro "empty cell": renders as a bare, unstyled
115 * cell on the frontend — no content, no background, no border.
116 *
117 * @var bool
118 */
119 public $isEmpty;
120
121 /**
122 * @param mixed $row
123 * @param mixed $col
124 * @param mixed $rowSpan
125 * @param mixed $colSpan
126 * @param mixed $tag
127 * @param mixed $globalCellStyles
128 * @param array<int, \Tableberg\Renderer\Table\CellElement> $elements
129 * @param array<string, \Tableberg\Renderer\Attrs\StringAttr|array>|null $cellStyleOverride
130 * @param array<string, mixed>|null $ribbon
131 * @param string|null $sortableType
132 * @param string|null $width
133 * @param string|null $height
134 * @param bool $stickyHeader
135 * @param string|null $className
136 * @param bool $isEmpty
137 * @return self
138 */
139 public static function create(
140 $row,
141 $col,
142 $rowSpan,
143 $colSpan,
144 $tag,
145 $globalCellStyles,
146 $elements,
147 $cellStyleOverride,
148 $ribbon,
149 $sortableType = null,
150 $width = null,
151 $height = null,
152 $stickyHeader = false,
153 $stickyFirstCol = false,
154 $className = null,
155 $cellAttrs = [],
156 $isEmpty = false
157 ) {
158 $instance = new self();
159
160 $instance->hasCellCoords = is_numeric($row) && is_numeric($col);
161 $instance->row = $instance->hasCellCoords ? (int) $row : 0;
162 $instance->col = $instance->hasCellCoords ? (int) $col : 0;
163
164 $instance->rowSpan = is_numeric($rowSpan) ? (int) $rowSpan : 1;
165 $instance->colSpan = is_numeric($colSpan) ? (int) $colSpan : 1;
166 if ($instance->rowSpan < 1) {
167 $instance->rowSpan = 1;
168 }
169 if ($instance->colSpan < 1) {
170 $instance->colSpan = 1;
171 }
172
173 $instance->tag = $tag === 'th' ? 'th' : 'td';
174
175 $globalCellStyles = is_array($globalCellStyles) ? $globalCellStyles : [];
176 $globalPadding = getArrayOrNull($globalCellStyles['padding']) ?? [];
177 $globalBorder = getArrayOrNull($globalCellStyles['border']) ?? [];
178 $globalBorderRadius = getArrayOrNull($globalCellStyles['borderRadius']) ?? [];
179
180 $instance->paddingTop = getStringOrNull($globalPadding['top']) ?? '';
181 $instance->paddingRight = getStringOrNull($globalPadding['right']) ?? '';
182 $instance->paddingBottom = getStringOrNull($globalPadding['bottom']) ?? '';
183 $instance->paddingLeft = getStringOrNull($globalPadding['left']) ?? '';
184
185 $orientation = getStringOrNull($globalCellStyles['orientation']) ?? 'vertical';
186 if (!in_array($orientation, ['vertical', 'horizontal'], true)) {
187 $orientation = 'vertical';
188 }
189 $instance->orientation = $orientation;
190
191 $instance->elementGap =
192 getStringOrNull($globalCellStyles['elementGap'])
193 ?? 'var(--wp--preset--spacing--20)';
194
195 $wrap = getStringOrNull($globalCellStyles['wrap']) ?? 'wrap';
196 if (!in_array($wrap, ['wrap', 'nowrap'], true)) {
197 $wrap = 'wrap';
198 }
199 $instance->wrap = $wrap;
200
201 $verticalAlign = getStringOrNull($globalCellStyles['verticalAlign']) ?? 'middle';
202 if (!in_array($verticalAlign, ['top', 'middle', 'bottom'], true)) {
203 $verticalAlign = 'middle';
204 }
205 $instance->verticalAlign = $verticalAlign;
206
207 $instance->borderTop = getStringOrNull($globalBorder['top']) ?? '';
208 $instance->borderRight = getStringOrNull($globalBorder['right']) ?? '';
209 $instance->borderBottom = getStringOrNull($globalBorder['bottom']) ?? '';
210 $instance->borderLeft = getStringOrNull($globalBorder['left']) ?? '';
211
212 $instance->borderTopLeftRadius = getStringOrNull($globalBorderRadius['topLeft']) ?? '';
213 $instance->borderTopRightRadius = getStringOrNull($globalBorderRadius['topRight']) ?? '';
214 $instance->borderBottomRightRadius = getStringOrNull($globalBorderRadius['bottomRight']) ?? '';
215 $instance->borderBottomLeftRadius = getStringOrNull($globalBorderRadius['bottomLeft']) ?? '';
216
217 $instance->backgroundColor = getStringOrNull($globalCellStyles['backgroundColor']) ?? '';
218
219 $instance->elements = is_array($elements) ? $elements : [];
220 $instance->cellStyleOverride = getArrayOrNull($cellStyleOverride);
221 $instance->cellAttrs = is_array($cellAttrs) ? $cellAttrs : [];
222
223 $instance->ribbon = getArrayOrNull($ribbon);
224
225 $sortableType = getStringOrNull($sortableType);
226 if (in_array($sortableType, ['text', 'number', 'date'], true)) {
227 $instance->sortableType = $sortableType;
228 } else {
229 $instance->sortableType = null;
230 }
231
232 $instance->width = getStringOrNull($width);
233 $instance->height = getStringOrNull($height);
234 $instance->stickyHeader = (bool) $stickyHeader;
235 $instance->stickyFirstCol = (bool) $stickyFirstCol;
236 $instance->isEmpty = (bool) $isEmpty;
237 $instance->className = trim((string) (getStringOrNull($className) ?? ''));
238
239 return $instance;
240 }
241 }
242