From bd928ef3cb7238bb1d556297c72a6adeacad8b0b Mon Sep 17 00:00:00 2001 From: Richard Dern Date: Fri, 26 Apr 2024 13:47:36 +0200 Subject: [PATCH] Terms rendering --- app/Classes/Term.php | 49 ++++++++++++ .../BundleRendererServiceProvider.php | 1 + .../Renderers/TermRenderer.php | 41 ++++++++++ resources/css/article-main.css | 76 +++++++++++++++---- resources/css/figure.css | 2 +- resources/css/site-footer.css | 1 + resources/views/article.blade.php | 22 +++++- .../components/asides/distribution.blade.php | 15 ++++ .../views/components/asides/generic.blade.php | 43 +++++++++++ .../views/components/asides/links.blade.php | 29 +++++++ resources/views/term.blade.php | 72 ++++++++++++++++++ 11 files changed, 333 insertions(+), 18 deletions(-) create mode 100644 app/Classes/Term.php create mode 100644 app/Services/BundleRenderers/Renderers/TermRenderer.php create mode 100644 resources/views/components/asides/distribution.blade.php create mode 100644 resources/views/components/asides/generic.blade.php create mode 100644 resources/views/components/asides/links.blade.php create mode 100644 resources/views/term.blade.php diff --git a/app/Classes/Term.php b/app/Classes/Term.php new file mode 100644 index 0000000..804e8ef --- /dev/null +++ b/app/Classes/Term.php @@ -0,0 +1,49 @@ +slug = Str::slug($term); + $this->path = sprintf('/termes/%s', $this->slug); + $this->bundle = new Bundle($this->path, $source->getDisk()); + $this->link = new Link($this->path, $term, $source); + + $currentRelations = $this->bundle->metadata('relations')->get($subCategory, []); + + if (!in_array($source->getPath(), $currentRelations)) { + $currentRelations[] = $source->getPath(); + $this->bundle->metadata('relations')->set($subCategory, collect($currentRelations)->unique()->toArray()); + } + + $this->bundle->markdown()->set(''); + $this->bundle->metadata()->set('title', $term); + + $this->bundle->save(); + } + + public function render() + { + return (string) $this->link->toHtmlElement(); + } + + public static function register(string $term, string $subCategory, Bundle $source) + { + return new static($term, $subCategory, $source); + } +} diff --git a/app/Providers/BundleRendererServiceProvider.php b/app/Providers/BundleRendererServiceProvider.php index 2cab31e..65cfbf6 100644 --- a/app/Providers/BundleRendererServiceProvider.php +++ b/app/Providers/BundleRendererServiceProvider.php @@ -12,6 +12,7 @@ class BundleRendererServiceProvider extends ServiceProvider \App\Services\BundleRenderers\Renderers\DossierRenderer::class, \App\Services\BundleRenderers\Renderers\DateBasedListRenderer::class, \App\Services\BundleRenderers\Renderers\ProductBasedListRenderer::class, + \App\Services\BundleRenderers\Renderers\TermRenderer::class, ]; /** diff --git a/app/Services/BundleRenderers/Renderers/TermRenderer.php b/app/Services/BundleRenderers/Renderers/TermRenderer.php new file mode 100644 index 0000000..ef4d9ad --- /dev/null +++ b/app/Services/BundleRenderers/Renderers/TermRenderer.php @@ -0,0 +1,41 @@ +prepareRender(); + + $relations = []; + + foreach ($this->bundle->metadata('relations')->all() as $category => $bundles) { + foreach ($bundles as $path) { + $relations[$category][] = new Bundle($path, $this->bundle->getDisk()); + } + } + + data_set($this->viewData, 'relations', $relations); + + return view('term', $this->viewData); + } + + /** + * Return a boolean value indicating if this creator in particular can + * create bundles for specified section + */ + public static function handles(Bundle $bundle): bool + { + return $bundle->getSection() && $bundle->getSection()->getPath() === '/termes/'; + } + + protected function handlePagination() + { + } +} diff --git a/resources/css/article-main.css b/resources/css/article-main.css index d8eecec..e36d047 100644 --- a/resources/css/article-main.css +++ b/resources/css/article-main.css @@ -94,22 +94,6 @@ #article-main { } } - blockquote { - border-left: 4px solid #60a5fa; - padding: 0.5rem 1rem; - margin: 1rem auto; - color: #e4f1fe; - background-color: #021127; - text-align: justify; - max-width: var(--design-width); - width: 100%; - border-radius: .5rem; - - p + p { - padding-top: 1rem; - } - } - > h2, > h3, > h4, @@ -243,4 +227,64 @@ #article-main { margin-left: .2rem; } } + + > footer { + font-size: 1rem; + color: #6c7a89; + background: #01010c radial-gradient(at bottom center, #00101f, #000614, #01010c) no-repeat; + box-shadow: 0 1px 1rem #000; + border-radius: .5rem; + border: solid 2px #00101f; + padding: .5rem 1rem; + margin: 1rem auto; + max-width: var(--design-width); + text-align: center; + line-height: 175%; + + aside + aside { + padding-top: 1rem; + } + + details { + summary { + text-align: left; + cursor: pointer; + display: block; + } + } + + h3 { + color: #fff; + } + + .two-columns { + display: grid; + grid-template-columns: 1fr 1fr; + gap: .5rem 1rem; + + h4 { + text-align: right; + } + + div { + text-align: left; + } + } + } +} + +blockquote { + border-left: 4px solid #60a5fa; + padding: 0.5rem 1rem; + margin: 1rem auto; + color: #e4f1fe; + background-color: #021127; + text-align: justify; + max-width: var(--design-width); + width: 100%; + border-radius: .5rem; + + p + p { + padding-top: 1rem; + } } diff --git a/resources/css/figure.css b/resources/css/figure.css index d72d699..7e05c6a 100644 --- a/resources/css/figure.css +++ b/resources/css/figure.css @@ -1,5 +1,5 @@ figure { - width: var(--design-width); + max-width: var(--design-width); margin: 1rem auto; img, diff --git a/resources/css/site-footer.css b/resources/css/site-footer.css index 54c9b7e..e690dea 100644 --- a/resources/css/site-footer.css +++ b/resources/css/site-footer.css @@ -5,6 +5,7 @@ body > footer { nav { display: flex; + flex-wrap: wrap; justify-content: center; align-items: center; diff --git a/resources/views/article.blade.php b/resources/views/article.blade.php index bbf211d..af2082f 100644 --- a/resources/views/article.blade.php +++ b/resources/views/article.blade.php @@ -52,9 +52,29 @@ class="{!! $mainLink['classes'] !!}" @endif + @if(!empty($bundle->virtualMetadata()->all())) + @endif @if (!empty($pagination['items'])) diff --git a/resources/views/components/asides/distribution.blade.php b/resources/views/components/asides/distribution.blade.php new file mode 100644 index 0000000..e4678e6 --- /dev/null +++ b/resources/views/components/asides/distribution.blade.php @@ -0,0 +1,15 @@ +@props(['subCategory', 'items', 'bundle']) + +

{!! $subCategory !!}

+
+@foreach($items as $people => $data) +

{!! \App\Classes\Term::register($people, 'Distribution', $bundle)->render() !!}

+
+ @foreach($data as $type => $roles) + @foreach($roles as $role) +

{{ $role }}

+ @endforeach + @endforeach +
+@endforeach +
diff --git a/resources/views/components/asides/generic.blade.php b/resources/views/components/asides/generic.blade.php new file mode 100644 index 0000000..efd9b3d --- /dev/null +++ b/resources/views/components/asides/generic.blade.php @@ -0,0 +1,43 @@ +@props(['category', 'data', 'bundle']) + diff --git a/resources/views/components/asides/links.blade.php b/resources/views/components/asides/links.blade.php new file mode 100644 index 0000000..7507367 --- /dev/null +++ b/resources/views/components/asides/links.blade.php @@ -0,0 +1,29 @@ +@props(['subCategory', 'items', 'bundle']) + +@php + $index = 0; +@endphp + +
+

{!! $subCategory !!}

+
+ @foreach($items as $key => $item) + @if(is_string($item)) + @if(Str::contains($item, '://')) + {!! (new \App\Classes\Link($item, '[1]', $bundle))->toHtmlElement() !!} + @else +

{{ $item }}

+ @endif + @else + @php + $index++; + @endphp + @if(Str::contains($key, '://')) + {!! (new \App\Classes\Link($key, '[' . $index . ']', $bundle))->toHtmlElement() !!} + @else + {{ $key }} + @endif + @endif + @endforeach +
+
diff --git a/resources/views/term.blade.php b/resources/views/term.blade.php new file mode 100644 index 0000000..19d35d0 --- /dev/null +++ b/resources/views/term.blade.php @@ -0,0 +1,72 @@ +@extends('layouts.main') + +@section('main') +
+
+ @if (empty($bundle->metadata()->get('hide_title'))) +

{{ $articleTitle }}

+ @endif + + @if (!empty($cover)) + {!! $cover !!} + @endif +
+ + @if (!empty($body) || (isset($showToc) && $showToc) || !empty($relations)) +
+ @if(isset($showToc) && $showToc) +
+ Sommaire + +
+ @endif + + {!! $body !!} + + @if (!empty($relations)) + @foreach($relations as $category => $bundles) +

{!! $category !!}

+
@foreach ($bundles as $subBundle){!! $subBundle->renderCard() !!}@endforeach
+ @endforeach + @endif + + @if(isset($showToc) && $showToc) +
+ Sommaire + +
+ @endif +
+ @endif + + @if(!empty($bundle->virtualMetadata()->all())) + + @endif +
+ + +@endsection