Members (properties, methods, constants) become private when they are declared in the class itself, no parent class or interface declares them, no ancestor in packages/ uses them and the class has no subclass in packages/: 115 members in 36 files. Extbase domain objects keep protected properties, AbstractDomainObject sets them from the parent class. With the properties private, Rector's constructor promotion now also applies to the controllers and services that still assigned their dependencies by hand (26 files). Checked locally: frontend crawl (~1,900 URLs) and the backchannel APIs render the same as before. Co-Authored-By: Claude Opus 5.5 <[email protected]>
77 lines
2.5 KiB
PHP
77 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace EP\EpTheme\ViewHelpers;
|
|
|
|
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
|
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
|
|
|
class ContainerViewHelper extends AbstractViewHelper
|
|
{
|
|
/**
|
|
* @var int[]
|
|
*/
|
|
private static $scale = [
|
|
'default' => 0,
|
|
'small' => 8,
|
|
'large' => 16,
|
|
];
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
#[\Override]
|
|
protected $escapeOutput = false;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private static $columnsWithoutContainers = [ 0, 1, 3 ];
|
|
|
|
public function initializeArguments()
|
|
{
|
|
parent::initializeArguments();
|
|
|
|
$this->registerArgument('content', 'string', 'The content');
|
|
$this->registerArgument('cssClasses', 'string', 'Additional CSS classes');
|
|
$this->registerArgument('rteContent', 'boolean', 'Is RTE content', false, false);
|
|
$this->registerArgument('data', 'Array', 'The record data', true);
|
|
}
|
|
|
|
/**
|
|
* @param array $arguments
|
|
* @param \Closure $renderChildrenClosure
|
|
* @param RenderingContextInterface $renderingContext
|
|
* @return mixed
|
|
*/
|
|
public function render()
|
|
{
|
|
$content = $this->renderChildren();
|
|
$content ??= $this->arguments['content'];
|
|
$classes = [];
|
|
if (\in_array($this->arguments['data']['colPos'] ?? null, static::$columnsWithoutContainers, false)) {
|
|
$classes[] = 'container';
|
|
}
|
|
if ($this->arguments['cssClasses'] !== null) {
|
|
$classes[] = $this->arguments['cssClasses'];
|
|
}
|
|
if (!empty($this->arguments['data']['space_before_class'])) {
|
|
$scaleTop = static::$scale[$this->arguments['data']['space_before_class']];
|
|
$classes[] = sprintf('pt-%d', $scaleTop);
|
|
}
|
|
if (!empty($this->arguments['data']['space_after_class'])) {
|
|
$scaleBottom = static::$scale[$this->arguments['data']['space_after_class']];
|
|
$classes[] = sprintf('pb-%d', $scaleBottom);
|
|
}
|
|
if ('default' !== ($this->arguments['data']['frame_class'] ?? null)) {
|
|
$classes[] = $this->arguments['data']['frame_class'] ?? null;
|
|
}
|
|
if (count($classes) > 0) {
|
|
return sprintf('<div class="%s"%s>%s</div>', implode(' ', $classes), $this->arguments['rteContent'] ? ' data-rte-content' : '', $content);
|
|
}
|
|
if ($this->arguments['rteContent']) {
|
|
return sprintf('<div data-rte-content>%s</div>', $content);
|
|
}
|
|
return $content;
|
|
}
|
|
}
|