mirror of
https://github.com/ad-aures/castopod.git
synced 2026-04-12 19:17:45 +02:00
feat(plugins): add aside with plugin metadata next to plugin's readme
- enhance plugin card ui - refactor components to be more consistent - invert toggler label for better UX - edit view components regex
This commit is contained in:
parent
e6bfdfc390
commit
dfb7888aeb
193 changed files with 1630 additions and 1346 deletions
|
|
@ -4,26 +4,30 @@ declare(strict_types=1);
|
|||
|
||||
namespace ViewComponents;
|
||||
|
||||
class Component implements ComponentInterface
|
||||
abstract class Component implements ComponentInterface
|
||||
{
|
||||
protected string $slot = '';
|
||||
/**
|
||||
* @var list<string>
|
||||
*/
|
||||
protected array $props = [];
|
||||
|
||||
protected string $class = '';
|
||||
/**
|
||||
* @var array<string, string|'boolean'|'array'|'number'>
|
||||
*/
|
||||
protected array $casts = [];
|
||||
|
||||
protected ?string $slot = null;
|
||||
|
||||
/**
|
||||
* @var array<string, string>
|
||||
*/
|
||||
protected array $attributes = [
|
||||
'class' => '',
|
||||
];
|
||||
protected array $attributes = [];
|
||||
|
||||
/**
|
||||
* @param array<string, string> $attributes
|
||||
*/
|
||||
public function __construct(array $attributes)
|
||||
{
|
||||
helper('viewcomponents');
|
||||
|
||||
// overwrite default attributes if set
|
||||
$this->attributes = [...$this->attributes, ...$attributes];
|
||||
|
||||
|
|
@ -42,9 +46,39 @@ class Component implements ComponentInterface
|
|||
if (is_callable([$this, $method])) {
|
||||
$this->{$method}($value);
|
||||
} else {
|
||||
if (array_key_exists($name, $this->casts)) {
|
||||
$value = match ($this->casts[$name]) {
|
||||
'boolean' => $value === 'true',
|
||||
'number' => (int) $value,
|
||||
'array' => json_decode(htmlspecialchars_decode($value), true),
|
||||
default => $value
|
||||
};
|
||||
}
|
||||
|
||||
$this->{$name} = $value;
|
||||
}
|
||||
|
||||
// remove from attributes
|
||||
if (in_array($name, $this->props, true)) {
|
||||
unset($this->attributes[$name]);
|
||||
}
|
||||
}
|
||||
|
||||
unset($this->attributes['slot']);
|
||||
}
|
||||
|
||||
public function mergeClass(string $class): void
|
||||
{
|
||||
if (! array_key_exists('class', $this->attributes)) {
|
||||
$this->attributes['class'] = $class;
|
||||
} else {
|
||||
$this->attributes['class'] .= ' ' . $class;
|
||||
}
|
||||
}
|
||||
|
||||
public function getStringifiedAttributes(): string
|
||||
{
|
||||
return stringify_attributes($this->attributes);
|
||||
}
|
||||
|
||||
public function render(): string
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue