/** * @param array $links * * @return $this|self */ private function setSchema(array $links = []) : self { $this->schema = new HtmlContainer('<script>'); $this->schema->addAttribute('type', 'application/ld+json'); $content = ['@context' => 'http://schema.org', '@type' => 'BreadcrumbList', 'itemListElement' => []]; $uri = clone self::request()->getUri(); $count = 1; foreach ($links as $url => $link) { $content['itemListElement'][] = ['@type' => 'ListItem', 'position' => $count, 'item' => ['@id' => $uri->setPath($url)->get(false), 'name' => $link]]; $count++; } $this->schema->setContent(json_encode($content)); $this->add($this->schema); return $this; }
/** * {@inheritdoc} */ public function render() { if ($this->responsive) { $div = new HtmlElement('<div>'); $div->addClass('table-responsive'); $div->setContent(parent::render()); return $div->render(); } else { return parent::render(); } }
/** * @param int $page * @param string $display * * @return HtmlElement */ private function getLi(int $page, string $display = null) : HtmlElement { $li = new HtmlElement('<li>'); $url = call_user_func($this->argsCallback, $this, $page); if ($page == $this->current) { $li->addClass($display ? 'disabled' : 'active'); } if ($this->current == $page) { $li->setContent('<span href="' . $url . '">' . ($display ?: $page) . '</span>'); } else { $li->setContent('<a href="' . $url . '">' . ($display ?: $page) . '</a>'); } if ($this->current - 1 == $page) { $li->addAttribute('rel', 'prev'); } if ($this->current + 1 == $page) { $li->addAttribute('rel', 'next'); } return $li; }
/** * Add Css file inclusion * * @param string $javascript * @param array $attributes * @param bool $footer * * @return $this|self */ public function addJs(string $javascript, array $attributes = [], bool $footer = true) : self { $meta = new HtmlElement('<script>'); $meta->addAttribute('type', 'text/javascript'); $meta->addAttributes($attributes); if (substr($javascript, -3) == '.js' || substr($javascript, 0, 2) == '//' || substr($javascript, 0, 4) == 'http') { list($path, $hash) = $this->getAssetData($javascript); if ($hash) { $meta->addAttribute('name', str_replace(['.js', '.', '/', ':'], ['', '_', '_', '_'], $javascript)); } $meta->addAttribute('src', $path); } else { $meta->setContent($javascript); } if ($footer) { $this->footer->add($meta); } else { $this->head->add($meta); } // add a preload header if ($meta->getAttribute('src') && $footer) { $preload = new HtmlElement('<link>'); $preload->addAttributes(['as' => 'script', 'href' => $meta->getAttribute('src'), 'rel' => 'preload']); $this->head->add($preload); } return $this; }
/** * {@inheritdoc} */ public function setContent($content) : parent { $this->field->setContent($content); return $this; }
/** * @return string */ public function render() { if (sizeof($this->data)) { // append row actions foreach ($this->rowActions as $i => $rowAction) { $this->add((new Column('row_action_' . $i, ''))->addRenderer(new RowActionRenderer($rowAction))->addClass('row-action')->setHideable(false)); } foreach ($this->data as $row) { $tr = new HtmlContainer('<tr>'); if (sizeof($this->thead->elements)) { /** @var Column $column */ foreach ($this->thead->elements as $column) { if ($column->isVisible() && $column->isRenderable()) { $td = new HtmlElement('<td>'); $td->addClass($column->getClasses()); $content = $row[$column->getId()] ?? ''; if ($column->getRenderer()) { foreach ($column->getRenderer() as $renderer) { $content = $renderer($content, $column, $this->getPrimaryValues($row), $row); } } $td->setContent((string) $content); $tr->add($td); } } } else { foreach ($row as $col) { $tr->add(new HtmlElement('<td>', $col)); } } if ($this->rowRenderers) { foreach ($this->rowRenderers as $callback) { $tr = call_user_func($callback, $tr, $row, $this); } } $this->tbody->add($tr); } } else { $this->tbody->add((new HtmlContainer('<tr>'))->add((new HtmlElement('<td>'))->addAttribute('colspan', (string) sizeof($this->getVisibleColumns()))->setContent(self::trans('html.table/noResult'))->addClass('text-center'))); } $return = parent::render(); return $return; }
/** * @return string */ public function render() { $this->element->setContent(json_encode($this->data)); return $this->element->render(); }