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 / Cell / CellRenderContext.php

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

262 lines 7.6 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 /** @var string */
122 public $innerBorderType;
123
124 /** @var int */
125 public $totalRows;
126
127 /** @var int */
128 public $totalCols;
129
130 /**
131 * @param mixed $row
132 * @param mixed $col
133 * @param mixed $rowSpan
134 * @param mixed $colSpan
135 * @param mixed $tag
136 * @param mixed $globalCellStyles
137 * @param array<int, \Tableberg\Renderer\Table\CellElement> $elements
138 * @param array<string, \Tableberg\Renderer\Attrs\StringAttr|array>|null $cellStyleOverride
139 * @param array<string, mixed>|null $ribbon
140 * @param string|null $sortableType
141 * @param string|null $width
142 * @param string|null $height
143 * @param bool $stickyHeader
144 * @param string|null $className
145 * @param bool $isEmpty
146 * @param string $innerBorderType
147 * @param int $totalRows
148 * @param int $totalCols
149 * @return self
150 */
151 public static function create(
152 $row,
153 $col,
154 $rowSpan,
155 $colSpan,
156 $tag,
157 $globalCellStyles,
158 $elements,
159 $cellStyleOverride,
160 $ribbon,
161 $sortableType = null,
162 $width = null,
163 $height = null,
164 $stickyHeader = false,
165 $stickyFirstCol = false,
166 $className = null,
167 $cellAttrs = [],
168 $isEmpty = false,
169 $innerBorderType = '',
170 $totalRows = 0,
171 $totalCols = 0
172 ) {
173 $instance = new self();
174
175 $instance->hasCellCoords = is_numeric($row) && is_numeric($col);
176 $instance->row = $instance->hasCellCoords ? (int) $row : 0;
177 $instance->col = $instance->hasCellCoords ? (int) $col : 0;
178
179 $instance->rowSpan = is_numeric($rowSpan) ? (int) $rowSpan : 1;
180 $instance->colSpan = is_numeric($colSpan) ? (int) $colSpan : 1;
181 if ($instance->rowSpan < 1) {
182 $instance->rowSpan = 1;
183 }
184 if ($instance->colSpan < 1) {
185 $instance->colSpan = 1;
186 }
187
188 $instance->tag = $tag === 'th' ? 'th' : 'td';
189
190 $globalCellStyles = is_array($globalCellStyles) ? $globalCellStyles : [];
191 $globalPadding = getArrayOrNull($globalCellStyles['padding']) ?? [];
192 $globalBorder = getArrayOrNull($globalCellStyles['border']) ?? [];
193 $globalBorderRadius = getArrayOrNull($globalCellStyles['borderRadius']) ?? [];
194
195 $instance->paddingTop = getStringOrNull($globalPadding['top']) ?? '';
196 $instance->paddingRight = getStringOrNull($globalPadding['right']) ?? '';
197 $instance->paddingBottom = getStringOrNull($globalPadding['bottom']) ?? '';
198 $instance->paddingLeft = getStringOrNull($globalPadding['left']) ?? '';
199
200 $orientation = getStringOrNull($globalCellStyles['orientation']) ?? 'vertical';
201 if (!in_array($orientation, ['vertical', 'horizontal'], true)) {
202 $orientation = 'vertical';
203 }
204 $instance->orientation = $orientation;
205
206 $instance->elementGap =
207 getStringOrNull($globalCellStyles['elementGap'])
208 ?? 'var(--wp--preset--spacing--20)';
209
210 $wrap = getStringOrNull($globalCellStyles['wrap']) ?? 'wrap';
211 if (!in_array($wrap, ['wrap', 'nowrap'], true)) {
212 $wrap = 'wrap';
213 }
214 $instance->wrap = $wrap;
215
216 $verticalAlign = getStringOrNull($globalCellStyles['verticalAlign']) ?? 'middle';
217 if (!in_array($verticalAlign, ['top', 'middle', 'bottom'], true)) {
218 $verticalAlign = 'middle';
219 }
220 $instance->verticalAlign = $verticalAlign;
221
222 $instance->borderTop = getStringOrNull($globalBorder['top']) ?? '';
223 $instance->borderRight = getStringOrNull($globalBorder['right']) ?? '';
224 $instance->borderBottom = getStringOrNull($globalBorder['bottom']) ?? '';
225 $instance->borderLeft = getStringOrNull($globalBorder['left']) ?? '';
226
227 $instance->borderTopLeftRadius = getStringOrNull($globalBorderRadius['topLeft']) ?? '';
228 $instance->borderTopRightRadius = getStringOrNull($globalBorderRadius['topRight']) ?? '';
229 $instance->borderBottomRightRadius = getStringOrNull($globalBorderRadius['bottomRight']) ?? '';
230 $instance->borderBottomLeftRadius = getStringOrNull($globalBorderRadius['bottomLeft']) ?? '';
231
232 $instance->backgroundColor = getStringOrNull($globalCellStyles['backgroundColor']) ?? '';
233
234 $instance->elements = is_array($elements) ? $elements : [];
235 $instance->cellStyleOverride = getArrayOrNull($cellStyleOverride);
236 $instance->cellAttrs = is_array($cellAttrs) ? $cellAttrs : [];
237
238 $instance->ribbon = getArrayOrNull($ribbon);
239
240 $sortableType = getStringOrNull($sortableType);
241 if (in_array($sortableType, ['text', 'number', 'date'], true)) {
242 $instance->sortableType = $sortableType;
243 } else {
244 $instance->sortableType = null;
245 }
246
247 $instance->width = getStringOrNull($width);
248 $instance->height = getStringOrNull($height);
249 $instance->stickyHeader = (bool) $stickyHeader;
250 $instance->stickyFirstCol = (bool) $stickyFirstCol;
251 $instance->isEmpty = (bool) $isEmpty;
252 $instance->innerBorderType = in_array($innerBorderType, ['row', 'col'], true)
253 ? $innerBorderType
254 : '';
255 $instance->totalRows = max(0, (int) $totalRows);
256 $instance->totalCols = max(0, (int) $totalCols);
257 $instance->className = trim((string) (getStringOrNull($className) ?? ''));
258
259 return $instance;
260 }
261 }
262