Exemplo n.º 1
0
 /**
  * @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);
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 /**
  * {@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);
 }
Exemplo n.º 4
0
 /**
  * {@inheritdoc}
  */
 public function addFirst(ViewController ...$elements)
 {
     foreach ($elements as $element) {
         /* @noinspection PhpParamsInspection */
         parent::add($this->beforeAdd($element));
     }
     return $this;
 }
Exemplo n.º 5
0
 /**
  * @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;
 }
Exemplo n.º 6
0
 /**
  * @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;
 }
Exemplo n.º 7
0
 /**
  * {@inheritdoc}
  */
 public function render()
 {
     $this->ul->clear();
     $this->ul->add($this->getLi(max(1, $this->current - 1), '&laquo;')->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), '&raquo;')->addClass('next'));
     $this->setContent($this->ul->render());
     return parent::render();
 }
Exemplo n.º 8
0
 /**
  * {@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();
 }
Exemplo n.º 9
0
 /**
  * {@inheritdoc}
  */
 public function add(ViewController ...$elements)
 {
     $this->container->add(...$elements);
     return $this;
 }
Exemplo n.º 10
0
 /**
  * {@inheritdoc}
  */
 public function add(ViewController ...$elements)
 {
     foreach ($elements as $element) {
         parent::add((new HtmlContainer('<div>'))->add($element));
     }
     return $this;
 }
Exemplo n.º 11
0
 /**
  * {@inheritdoc}
  */
 public function add(ViewController ...$elements)
 {
     foreach ($elements as $element) {
         /* @noinspection PhpParamsInspection */
         parent::add($this->handleDisplay($element));
     }
     return $this;
 }
Exemplo n.º 12
0
 /**
  * {@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;
     }
 }
Exemplo n.º 13
0
 /**
  * {@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);
 }