From 769b8ecc0de6f132c555388ae0599ee1572539e9 Mon Sep 17 00:00:00 2001 From: Daniel Wilkowski Date: Fri, 6 Sep 2024 12:11:46 +0200 Subject: [PATCH] Remove breadcrumb leaf --- app/Domain/Breadcrumb.php | 9 +++++- app/Services/Breadcrumbs.php | 24 ++++++++++++-- resources/sass/core/_breadcrumbs.scss | 31 +++++++++++++------ resources/views/components/breadcrumb.twig | 6 ++-- .../Breadcrumbs/Fixture/BreadcrumbView.php | 4 ++- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/app/Domain/Breadcrumb.php b/app/Domain/Breadcrumb.php index 53db369a6e..e4606525cd 100644 --- a/app/Domain/Breadcrumb.php +++ b/app/Domain/Breadcrumb.php @@ -5,7 +5,14 @@ class Breadcrumb { public function __construct( public string $name, - public string $url) + public string $url, + public bool $leaf, + ) { } + + public function leaf(): self + { + return new Breadcrumb($this->name, $this->url, true); + } } diff --git a/app/Services/Breadcrumbs.php b/app/Services/Breadcrumbs.php index e123785823..ecd7b7cb2a 100644 --- a/app/Services/Breadcrumbs.php +++ b/app/Services/Breadcrumbs.php @@ -19,7 +19,7 @@ public function pushMany(array $breadcrumbs): void public function push(string $name, string $url): void { - $this->breadcrumbs[] = new Breadcrumb($name, $url); + $this->breadcrumbs[] = new Breadcrumb($name, $url, false); } public function render(): ?View @@ -30,8 +30,28 @@ public function render(): ?View return view('components/breadcrumb', [ 'root_name' => config('app.name'), 'root_href' => route('home'), - 'breadcrumbs' => $this->breadcrumbs, + 'breadcrumbs' => $this->breadcrumbsWithLeaf(), 'schema_breadcrumb' => new Seo\Schema(new BreadcrumbList($this->breadcrumbs)), ]); } + + private function breadcrumbsWithLeaf(): array + { + return $this->lastBreadcrumbIsLeaf($this->breadcrumbs); + } + + private function lastBreadcrumbIsLeaf(array $breadcrumbs): array + { + return [ + ...\array_slice($breadcrumbs, 0, -1), + $this->last($breadcrumbs)->leaf(), + ]; + } + + private function last(array $breadcrumbs): Breadcrumb + { + /** @var Breadcrumb $last */ + $last = \end($breadcrumbs); + return $last; + } } diff --git a/resources/sass/core/_breadcrumbs.scss b/resources/sass/core/_breadcrumbs.scss index 4bb9ff3038..1395a481a1 100644 --- a/resources/sass/core/_breadcrumbs.scss +++ b/resources/sass/core/_breadcrumbs.scss @@ -1,16 +1,29 @@ -.breadcrumb-item { - a, span { - color: $gray; - } +@import "../helpers/variables"; + +ul.breadcrumb { + font-size: 0.95em; + + .breadcrumb-item { + a, span { + color: $gray; + } + + + .breadcrumb-item { + &::before { + content: "»"; + } + } - + .breadcrumb-item { - &::before { - content: "»"; + .leaf { + display: none; } } - &:last-child:not(:first-child) { - a, span { + &#breadcrumb-fixed, + .footer-top &, + { + .leaf { + display: inline; font-weight: bold; } } diff --git a/resources/views/components/breadcrumb.twig b/resources/views/components/breadcrumb.twig index 04b4a99852..d453d8409a 100644 --- a/resources/views/components/breadcrumb.twig +++ b/resources/views/components/breadcrumb.twig @@ -1,5 +1,5 @@
-