From 76a45fbafc46ba823466de8a2b5c31eb40a893f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bar=C3=A1=C5=A1ek?= Date: Sun, 8 Aug 2021 20:17:16 +0200 Subject: [PATCH] MenuItem: Add support for common MenuItem interface. --- src/Bar.php | 2 +- src/Menu/Menu.php | 18 +++++++++++--- src/Menu/MenuEvent.php | 52 ++++++++++++++++++++++++++++++++++++++++ src/Menu/MenuItem.php | 20 ++++++++++++++++ src/Menu/MenuLink.php | 9 ++++++- src/assets/content.phtml | 16 ++++++------- 6 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 src/Menu/MenuEvent.php create mode 100644 src/Menu/MenuItem.php diff --git a/src/Bar.php b/src/Bar.php index 8cc2f37..cfde04b 100644 --- a/src/Bar.php +++ b/src/Bar.php @@ -92,7 +92,7 @@ public function render(): void 'user' => $this->user, 'panels' => $this->panels, 'plugins' => $this->plugins, - 'menuLinks' => $this->menu->getItems(), + 'menuItems' => $this->menu->getItems(), 'debugMode' => $this->debugMode, 'enableVue' => $this->enableVue, ]; diff --git a/src/Menu/Menu.php b/src/Menu/Menu.php index f7fd729..dd57230 100644 --- a/src/Menu/Menu.php +++ b/src/Menu/Menu.php @@ -7,14 +7,26 @@ final class Menu { - /** @var array> */ + /** @var array> */ private array $items = []; public function addLink(string $label, string $url, ?string $group = null): void + { + $this->addItem(new MenuLink($label, $url), $group); + } + + + public function addEvent(string $label, string $event, ?string $group = null): void + { + $this->addItem(new MenuEvent($label, $event), $group); + } + + + public function addItem(MenuItem $item, ?string $group = null): void { try { - $this->items[$this->registerGroup($group)][] = new MenuLink($label, $url); + $this->items[$this->registerGroup($group)][] = $item; } catch (\InvalidArgumentException $e) { trigger_error(__METHOD__ . ': ' . $e->getMessage()); } @@ -28,7 +40,7 @@ public function addSeparator(?string $group = null): void /** - * @return array> + * @return array> */ public function getItems(): array { diff --git a/src/Menu/MenuEvent.php b/src/Menu/MenuEvent.php new file mode 100644 index 0000000..0ab8908 --- /dev/null +++ b/src/Menu/MenuEvent.php @@ -0,0 +1,52 @@ +label = Strings::firstUpper($label); + $this->event = $event; + } + + + public function render(): string + { + return '' + . Helpers::escapeHtml($this->getLabel()) + . ''; + } + + + public function getLabel(): string + { + return $this->label; + } + + + public function getEvent(): string + { + return $this->event; + } +} diff --git a/src/Menu/MenuItem.php b/src/Menu/MenuItem.php new file mode 100644 index 0000000..e2d026f --- /dev/null +++ b/src/Menu/MenuItem.php @@ -0,0 +1,20 @@ +render(); + } + + + /** + * Safe render of HTML content. + */ + abstract public function render(): string; +} diff --git a/src/Menu/MenuLink.php b/src/Menu/MenuLink.php index 13592b9..9b9ad2e 100644 --- a/src/Menu/MenuLink.php +++ b/src/Menu/MenuLink.php @@ -5,10 +5,11 @@ namespace Baraja\AdminBar\Menu; +use Baraja\AdminBar\Helpers; use Nette\Utils\Strings; use Nette\Utils\Validators; -final class MenuLink +final class MenuLink extends MenuItem { private string $label; @@ -30,6 +31,12 @@ public function __construct(string $label, string $url) } + public function render(): string + { + return '' . Helpers::escapeHtml($this->getLabel()) . ''; + } + + public function getLabel(): string { return $this->label; diff --git a/src/assets/content.phtml b/src/assets/content.phtml index 8859f2a..9297ae2 100644 --- a/src/assets/content.phtml +++ b/src/assets/content.phtml @@ -5,13 +5,13 @@ declare(strict_types=1); namespace Baraja\AdminBar; -use Baraja\AdminBar\Menu\MenuLink; +use Baraja\AdminBar\Menu\MenuItem; use Baraja\AdminBar\Panel\Panel; use Baraja\AdminBar\Plugin\Plugin; use Baraja\AdminBar\User\User; /** - * @var array> $menuLinks + * @var array> $menuItems * @var string $basePath * @var User|null $user * @var Panel[] $panels @@ -77,17 +77,17 @@ use Baraja\AdminBar\User\User; echo '
'; } - $menuLinksIterator = 0; - foreach ($menuLinks as $menuLinkGroup) { - if ($menuLinksIterator++ > 0) { + $menuItemsIterator = 0; + foreach ($menuItems as $menuItemGroup) { + if ($menuItemsIterator++ > 0) { echo '
'; } - foreach ($menuLinkGroup as $menuLink) { - if ($menuLink === null) { + foreach ($menuItemGroup as $menuItem) { + if ($menuItem === null) { echo '
'; } else { echo '
  • '; - echo '' . Helpers::escapeHtml($menuLink->getLabel()) . ''; + echo '
    ' . $menuItem->render() . '
    '; echo '
  • '; } }