title = $title; } } /** * 是否禁用动作. * * @param bool $disable * * @return $this */ public function disable(bool $disable = true) { $this->disabled = $disable; return $this; } /** * @return bool */ public function allowed() { return ! $this->disabled; } /** * Get primary key value of action. * * @return array|string */ public function getKey() { return $this->primaryKey; } /** * 设置主键. * * @param mixed $key * * @return $this */ public function setKey($key) { $this->primaryKey = $key; return $this; } /** * @return string */ protected function getElementClass() { return ltrim($this->selector(), '.'); } /** * 获取动作标题. * * @return string */ public function title() { return $this->title; } /** * @return mixed|string */ public function selector() { return $this->selector ?: ($this->selector = $this->makeSelector()); } /** * 生成选择器. * * @param string $prefix * * @return string */ public function makeSelector() { return '.act-'.Str::random(); } /** * @param string|array $class * * @return $this */ public function addHtmlClass($class) { $this->htmlClasses = array_merge($this->htmlClasses, (array) $class); return $this; } /** * 需要执行的JS代码. * * @return string|void */ protected function script() { } /** * @return string */ protected function html() { $this->defaultHtmlAttribute('href', 'javascript:void(0)'); return <<formatHtmlAttributes()}>{$this->title()} HTML; } /** * @return void */ protected function prepareHandler() { if ( ! $this->allowHandler || ! method_exists($this, 'handle') ) { return; } $this->addHandlerScript(); } /** * @return string */ public function render() { if (! $this->allowed()) { return ''; } $this->prepareHandler(); $this->setUpHtmlAttributes(); if ($script = $this->script()) { Admin::script($script); } return $this->html(); } /** * @return string */ protected function formatHtmlClasses() { return implode(' ', array_unique($this->htmlClasses)); } /** * @return void */ protected function setUpHtmlAttributes() { $this->addHtmlClass($this->getElementClass()); $attributes = [ 'class' => $this->formatHtmlClasses(), ]; if (method_exists($this, 'href') && ($href = $this->href())) { $this->allowHandler = false; $attributes['href'] = $href; } $this->defaultHtmlAttribute('style', 'cursor: pointer'); $this->setHtmlAttribute($attributes); } /** * @return string */ public function __toString() { return Helper::render($this->render()); } /** * @param mixed ...$params * * @return $this */ public static function make(...$params) { return new static(...$params); } }