'list-item']; /** @var object The associated list item */ protected $item; /** @var BaseItemList The list where the item is part of */ protected $list; protected $tag = 'li'; /** * Create a new table row item * * @param object $item * @param BaseItemList $list */ public function __construct($item, BaseItemList $list) { $this->item = $item; $this->list = $list; $this->addAttributes($this->baseAttributes); $this->init(); } abstract protected function assembleColumns(HtmlDocument $columns); abstract protected function assembleTitle(BaseHtmlElement $title); protected function assembleVisual(BaseHtmlElement $visual) { } protected function createColumn($content = null): BaseHtmlElement { return Html::tag('div', ['class' => 'col'], $content); } protected function createColumns(): HtmlDocument { $columns = new HtmlDocument(); $this->assembleColumns($columns); return $columns; } protected function createTitle(): BaseHtmlElement { $title = $this->createColumn()->addAttributes(['class' => 'title']); $this->assembleTitle($title); return $title; } /** * @return ?BaseHtmlElement */ protected function createVisual() { $visual = new HtmlElement('div', Attributes::create(['class' => 'visual'])); $this->assembleVisual($visual); return $visual->isEmpty() ? null : $visual; } /** * Initialize the list item * * If you want to adjust the list item after construction, override this method. */ protected function init() { } protected function assemble() { $this->add([ $this->createVisual(), $this->createTitle(), $this->createColumns() ]); } }