2 declare(strict_types = 1);
20 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
21 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
22 use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
29 use CompileWithRenderStatic;
43 $this->registerArgument(
'element', RootRenderableInterface::class,
'A RootRenderableInterface instance',
true);
54 \Closure $renderChildrenClosure,
55 RenderingContextInterface $renderingContext
57 $formElement = $arguments[
'element'];
59 $gridRowElement = $formElement->getParentRenderable();
60 $gridContainerElement = $gridRowElement->getParentRenderable();
61 $gridRowEChildElements = $gridRowElement->getElements();
64 $gridViewPortConfiguration = $gridContainerElement->getProperties()[
'gridColumnClassAutoConfiguration'];
66 $gridViewPortConfiguration = $gridRowElement->getProperties()[
'gridColumnClassAutoConfiguration'];
69 if (empty($gridViewPortConfiguration)) {
72 $gridSize = (int)$gridViewPortConfiguration[
'gridSize'];
74 $columnsToCalculate = [];
76 foreach ($gridRowEChildElements as $childElement) {
77 if (empty($childElement->getProperties()[
'gridColumnClassAutoConfiguration'])) {
78 foreach ($gridViewPortConfiguration[
'viewPorts'] as $viewPortName => $configuration) {
79 $columnsToCalculate[$viewPortName][
'elements']++;
82 $gridColumnViewPortConfiguration = $childElement->getProperties()[
'gridColumnClassAutoConfiguration'];
83 foreach ($gridViewPortConfiguration[
'viewPorts'] as $viewPortName => $configuration) {
84 $configuration = $gridColumnViewPortConfiguration[
'viewPorts'][$viewPortName];
86 isset($configuration[
'numbersOfColumnsToUse'])
87 && (int)$configuration[
'numbersOfColumnsToUse'] > 0
89 $usedColumns[$viewPortName][
'sum'] += (int)$configuration[
'numbersOfColumnsToUse'];
90 if ($childElement->getIdentifier() === $formElement->getIdentifier()) {
91 $usedColumns[$viewPortName][
'concreteNumbersOfColumnsToUse'] = (int)$configuration[
'numbersOfColumnsToUse'];
92 if ($usedColumns[$viewPortName][
'concreteNumbersOfColumnsToUse'] > $gridSize) {
93 $usedColumns[$viewPortName][
'concreteNumbersOfColumnsToUse'] = $gridSize;
97 $columnsToCalculate[$viewPortName][
'elements']++;
104 foreach ($gridViewPortConfiguration[
'viewPorts'] as $viewPortName => $configuration) {
105 if (isset($usedColumns[$viewPortName][
'concreteNumbersOfColumnsToUse'])) {
106 $numbersOfColumnsToUse = $usedColumns[$viewPortName][
'concreteNumbersOfColumnsToUse'];
108 $restColumnsToDivide = $gridSize - $usedColumns[$viewPortName][
'sum'];
109 $restElements = (int)$columnsToCalculate[$viewPortName][
'elements'];
111 if ($restColumnsToDivide < 1) {
112 $restColumnsToDivide = $gridSize;
114 if ($restElements < 1) {
117 $numbersOfColumnsToUse = floor($restColumnsToDivide / $restElements);
120 $classes[] = str_replace(
121 '{@numbersOfColumnsToUse}',
122 $numbersOfColumnsToUse,
123 $configuration[
'classPattern']
127 return implode(
' ', $classes);