/** * @param string $stateId */ public function __construct(string $stateId = null) { $this->stateId = $stateId; // default callback to get query param $this->argsCallback = function ($item, $arg = null) { $query = $this->stateId ? $this->stateId . '_' : ''; if ($item instanceof Pagination) { $query .= Pagination::QUERY_PAGE; } elseif ($item instanceof Column) { $query .= Table::QUERY_SORT; } elseif (is_string($item)) { $query .= $item; } if ($arg) { return self::request()->getUri()->addQuery($query, (string) $arg)->get(); } else { return self::request()->getUri()->getQuery($query); } }; parent::__construct('<div>'); $this->addClass('cawa-grid'); $this->addClass('grid-table'); self::translator()->addFile(__DIR__ . '/../../lang/global', 'bootstrap'); $this->navbar = (new Navbar())->setInverse(); $this->add($this->navbar); $this->options = new Dropdown('<i class="fa fa-adjust"></i> ' . self::trans('bootstrap.grid/options')); // refresh $this->options->add(new Link('<i class="glyphicon glyphicon-refresh"></i> ' . self::trans('bootstrap.grid/refresh'), self::request()->getUri()->get())); $ul = new HtmlContainer('<ul>'); $ul->add($this->options->toNavbar()); $this->navbar->add($ul); $this->table = new Table(); $this->table->setArgsCallback($this->argsCallback); $this->add($this->table); }
/** * 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 addFirst(ViewController ...$elements) { if ($this->isAdded) { throw new \LogicException("can't add element on fieldset when is already add on a form"); } return parent::add(...$elements); }
/** * {@inheritdoc} */ public function addFirst(ViewController ...$elements) { foreach ($elements as $element) { /* @noinspection PhpParamsInspection */ parent::add($this->beforeAdd($element)); } return $this; }
/** * @param array $links * * @return $this|self */ private function setOl(array $links = []) : self { $this->ol = new HtmlContainer('<ol>'); $this->ol->addClass('breadcrumb'); $last = null; foreach ($links as $uri => $link) { if (!$uri) { $last = $link; } else { $this->ol->add((new HtmlContainer('<li>'))->add(new Link($link, $uri))); } } if ($last) { $this->ol->add((new HtmlElement('<li>', $last))->addClass('active')); } $this->add($this->ol); 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; }
/** * {@inheritdoc} */ public function render() { $this->ul->clear(); $this->ul->add($this->getLi(max(1, $this->current - 1), '«')->addClass('prev')); $min = 1; $max = $this->page; if ($this->page > $this->maxItem) { $min = max(1, $this->current - $this->maxItem / 2); $max = min($this->page, $this->current + $this->maxItem / 2); } if ($min - 1 >= 1) { $this->ul->add($this->getLi($min + 1, '...')); } for ($i = $min; $i <= $max; $i++) { $this->ul->add($this->getLi($i)); } if ($max + 1 < $this->page) { $this->ul->add($this->getLi($max + 1, '...')); } $this->ul->add($this->getLi(min($this->page, $this->current + 1), '»')->addClass('next')); $this->setContent($this->ul->render()); return parent::render(); }
/** * {@inheritdoc} */ public function render() { if ($this->title || $this->title) { $header = (new HtmlContainer('<div>'))->addClass('panel-heading'); if ($this->buttonGroup) { $header->add($this->buttonGroup); } if ($this->title) { $header->add((new HtmlElement('<h3>', $this->title))->addClass('panel-title')); } parent::add($header); } if ($this->content) { parent::add((new HtmlElement('<div>', $this->content))->addClass('panel-body')); } else { $container = new Container(); foreach ($this->container->getElements() as $element) { if ($element instanceof Table || $element instanceof Grid || $element instanceof ListGroup) { if (sizeof($container->getElements()) > 0) { parent::add((new HtmlContainer('<div>'))->addClass('panel-body')->add($container)); $container = new Container(); } parent::add($element); } else { $container->add($element); } } if (sizeof($container->getElements()) > 0) { parent::add((new HtmlContainer('<div>'))->addClass('panel-body')->add($container)); } } if ($this->footer) { parent::add((new HtmlElement('<div>', $this->footer))->addClass('panel-footer')); } return parent::render(); }
/** * {@inheritdoc} */ public function add(ViewController ...$elements) { $this->container->add(...$elements); return $this; }
/** * {@inheritdoc} */ public function add(ViewController ...$elements) { foreach ($elements as $element) { parent::add((new HtmlContainer('<div>'))->add($element)); } return $this; }
/** * {@inheritdoc} */ public function add(ViewController ...$elements) { foreach ($elements as $element) { /* @noinspection PhpParamsInspection */ parent::add($this->handleDisplay($element)); } return $this; }
/** * {@inheritdoc} */ protected function layout() : Container { if ($this instanceof Group || $this instanceof Fieldset) { $this->applyContainerSize($this->container->elements); } else { $this->applySize($this); } if ($this->getGridSize()) { $container = new Container(); // label if ($this->getLabel()) { $this->getLabel()->addClass('col-sm-' . $this->getGridSize())->addClass('control-label'); $container->add($this->getLabel()); } // field if ($this instanceof Group) { $fieldWrapper = $this->getContainer(); } else { if (sizeof($this->inputGroups)) { $fieldWrapper = new HtmlContainer('<div>'); $fieldWrapper->add($inputGroupWrapper = (new HtmlContainer('<div>'))->addClass('input-group')); if (isset($this->inputGroups[true])) { foreach ($this->inputGroups[true] as $inputGroup) { $inputGroupWrapper->add($inputGroup); } } $inputGroupWrapper->add($this->getField()); if (isset($this->inputGroups[false])) { foreach ($this->inputGroups[false] as $inputGroup) { $inputGroupWrapper->add($inputGroup); } } } else { $fieldWrapper = new HtmlContainer('<div>'); $fieldWrapper->add($this->getField()); } } if ($this instanceof MultipleGroup) { $fieldWrapper->getElement()->addClass('col-sm-' . (12 - $this->getGridSize())); } else { $fieldWrapper->addClass('col-sm-' . (12 - $this->getGridSize())); } // label if (!$this->getLabel()) { $fieldWrapper->addClass('col-sm-offset-' . $this->getGridSize()); } // help wrap if ($this->helpText) { $fieldWrapper->add($this->helpText); } $container->add($fieldWrapper); return $container; } else { $container = parent::layout(); if ($this->helpText) { $container->add($this->helpText); } return $container; } }
/** * {@inheritdoc} */ public function add(ViewController ...$elements) { foreach ($elements as $element) { if (method_exists($element, 'onAdd')) { $element->onAdd($this); } $this->populateValue($element); } return parent::add(...$elements); }