123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- namespace Encore\Admin\Widgets;
- use Illuminate\Contracts\Support\Renderable;
- class Tab extends Widget implements Renderable
- {
- const TYPE_CONTENT = 1;
- const TYPE_LINK = 2;
- /**
- * @var string
- */
- protected $view = 'admin::widgets.tab';
- /**
- * @var array
- */
- protected $data = [
- 'id' => '',
- 'title' => '',
- 'tabs' => [],
- 'dropDown' => [],
- 'active' => 0,
- ];
- public function __construct()
- {
- $this->class('nav-tabs-custom');
- }
- /**
- * Add a tab and its contents.
- *
- * @param string $title
- * @param string|Renderable $content
- * @param bool $active
- *
- * @return $this
- */
- public function add($title, $content, $active = false)
- {
- $this->data['tabs'][] = [
- 'id' => mt_rand(),
- 'title' => $title,
- 'content' => $content,
- 'type' => static::TYPE_CONTENT,
- ];
- if ($active) {
- $this->data['active'] = count($this->data['tabs']) - 1;
- }
- return $this;
- }
- /**
- * Add a tab and its contents.
- *
- * @param string $title
- * @param string|Renderable $content
- * @param bool $active
- *
- * @return $this
- */
- public function customAdd($title, $content, $active=1,$href='')
- {
- $this->data['tabs'][] = [
- 'id' => mt_rand(),
- 'title' => $title,
- 'content' => $content,
- 'type' => static::TYPE_LINK,
- 'href' =>$href
- ];
- if ($active) {
- $this->data['active'] = $active;
- }
- return $this;
- }
- /**
- * Add a link on tab.
- *
- * @param string $title
- * @param string $href
- * @param bool $active
- *
- * @return $this
- */
- public function addLink($title, $href, $active = false)
- {
- $this->data['tabs'][] = [
- 'id' => mt_rand(),
- 'title' => $title,
- 'href' => $href,
- 'type' => static::TYPE_LINK,
- ];
- if ($active) {
- $this->data['active'] = count($this->data['tabs']) - 1;
- }
- return $this;
- }
- /**
- * Set title.
- *
- * @param string $title
- */
- public function title($title = '')
- {
- $this->data['title'] = $title;
- }
- /**
- * Set drop-down items.
- *
- * @param array $links
- *
- * @return $this
- */
- public function dropDown(array $links)
- {
- if (is_array($links[0])) {
- foreach ($links as $link) {
- call_user_func([$this, 'dropDown'], $link);
- }
- return $this;
- }
- $this->data['dropDown'][] = [
- 'name' => $links[0],
- 'href' => $links[1],
- ];
- return $this;
- }
- /**
- * Render Tab.
- *
- * @return string
- */
- public function render()
- {
- $data = array_merge(
- $this->data,
- ['attributes' => $this->formatAttributes()]
- );
- return view($this->view, $data)->render();
- }
- }
|