From d0a392e8ccbecd1a01a1f4ae041496068fdd901c Mon Sep 17 00:00:00 2001 From: Damien LAGAE Date: Thu, 28 May 2026 21:05:59 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20Ship=20ErrorPage=20default=20sy?= =?UTF-8?q?mbol=20&=20logo=20as=20data:=20URIs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consuming apps no longer need to provide image assets for the error page to render. The default symbol (SVG watermark) and logo (PNG) are embedded as base64 data URIs lazily loaded from text files. The Twig template detects 'data:' prefixed values and renders them as-is, falling back to asset() for traditional paths — so custom overrides keep working unchanged. Follow-up to #18 (smoke-test feedback). --- docs/Layout/errorPage.md | 20 +++++++++++++++++-- .../Layout/Defaults/error_page_logo.txt | 1 + .../Layout/Defaults/error_page_symbol.txt | 1 + src/Component/Layout/ErrorPage.php | 17 ++++++++++++++-- templates/layout/error_page.html.twig | 4 ++-- tests/Component/Layout/ErrorPageTest.php | 19 ++++++++++++++++-- 6 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 src/Component/Layout/Defaults/error_page_logo.txt create mode 100644 src/Component/Layout/Defaults/error_page_symbol.txt diff --git a/docs/Layout/errorPage.md b/docs/Layout/errorPage.md index 32253f3..f5d2c5a 100644 --- a/docs/Layout/errorPage.md +++ b/docs/Layout/errorPage.md @@ -16,6 +16,9 @@ symfony console importmap:require "@enabel/enabel-bootstrap-theme/dist/css/error If you serve the theme through a different path, override the `stylesheet` parameter (see below). +> [!NOTE] +> The default `symbol` and `logo` ship as `data:` URIs embedded in the component — the consuming app does not need to provide any image asset. To use a custom logo, pass a path (resolved through `asset()`) or your own `data:` URI; the template detects the prefix automatically. + ## Parameters | Parameter | Type | Description | Default | @@ -26,8 +29,8 @@ If you serve the theme through a different path, override the `stylesheet` param | `details` | `?string` | Optional small print (trace IDs, technical details) | `null` | | `backUrl` | `?string` | URL of the "back home" button. Button is hidden when `null` | `null` | | `backLabel` | `string` | Label of the "back home" button | `'Back to homepage'` | -| `symbol` | `string` | Path to the watermark image (`.bg img`) | `'/images/enabel-symbol.png'` | -| `logo` | `string` | Path to the bottom logo (`.logo img`) | `'/images/enabel-logo-email.png'` | +| `symbol` | `string` | Watermark image. Accepts a `data:` URI (rendered as-is) or an asset path passed to `asset()` | Enabel mark embedded as `data:image/svg+xml;base64,…` | +| `logo` | `string` | Bottom logo. Same `data:` vs asset path resolution as `symbol` | Enabel logo embedded as `data:image/png;base64,…` | | `locale` | `string` | Value used for `` | `'en'` | | `appName` | `string` | Application name used in the `` tag and logo `alt` | `'Enabel'` | | `stylesheet` | `string` | Path passed to `asset()` for the error CSS | `'vendor/@enabel/enabel-bootstrap-theme/dist/css/error.min.css'` | @@ -45,6 +48,19 @@ If you serve the theme through a different path, override the `stylesheet` param }) }} ``` +### With a custom logo (asset path) + +```twig +{# templates/bundles/TwigBundle/Exception/error404.html.twig #} +{{ component('Enabel:Ux:ErrorPage', { + statusCode: 404, + title: 'app.error.404.title'|trans, + message: 'app.error.404.message'|trans, + symbol: '/images/my-symbol.png', + logo: '/images/my-logo.png', +}) }} +``` + ### With back button and localized labels ```twig diff --git a/src/Component/Layout/Defaults/error_page_logo.txt b/src/Component/Layout/Defaults/error_page_logo.txt new file mode 100644 index 0000000..fdac4e1 --- /dev/null +++ b/src/Component/Layout/Defaults/error_page_logo.txt @@ -0,0 +1 @@ +data:image/png;base64,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 \ No newline at end of file diff --git a/src/Component/Layout/Defaults/error_page_symbol.txt b/src/Component/Layout/Defaults/error_page_symbol.txt new file mode 100644 index 0000000..63c8b03 --- /dev/null +++ b/src/Component/Layout/Defaults/error_page_symbol.txt @@ -0,0 +1 @@ +data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iMjAwLjAwMDAwMHB0IiBoZWlnaHQ9IjIwMC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDIwMC4wMDAwMDAgMjAwLjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwyMDAuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjMDAwMDAwIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNTE4IDE1NzQgYy01MiAtMTIgLTE1OCAtNTggLTE1OCAtNjggMCAtMiA0NCAtMjggOTcgLTU2IDE4NCAtOTgKMzI1IC0yMjAgNDE0IC0zNTggbDQ3IC03MyAxMiA2OCBjMTggOTIgNDMgMTYzIDg5IDI0OSBsMzkgNzIgLTIxIDIwIGMtMzMgMzAKLTEyNiA4NiAtMTg0IDExMCAtMTE5IDUwIC0yMjkgNjIgLTMzNSAzNnoiLz4KPHBhdGggZD0iTTEzMjQgMTUyNiBjLTEwOCAtMzUgLTIyMiAtMTU0IC0yNzUgLTI4NyAtMzQgLTg2IC00NiAtMTMyIC04OSAtMzQ5Ci0yMyAtMTEzIC01MyAtMjM4IC02NiAtMjc5IC0xNCAtNDAgLTIzIC03NiAtMjAgLTc4IDMgLTMgNDcgMTUgOTkgNDAgMjUwIDExOAozNDAgMjI3IDQ0OCA1NDIgMjcgODEgNTcgMTYxIDY1IDE3OCAyOSA1NyA4NiAxMjcgMTIyIDE1MiBsMzYgMjQgLTY5IDMyIGMtNzkKMzcgLTE4MyA0OCAtMjUxIDI1eiIvPgo8cGF0aCBkPSJNNDY0IDY4NSBjLTI1IC0zOCAtOTQgLTIwMyAtOTQgLTIyNSAwIC0yMiA0NCAtMzggMTMxIC00NyAxMDcgLTExCjIzNSA0OCAyODkgMTMzIDI5IDQ2IDY2IDE0MSA1OCAxNDkgLTIgMiAtMjggLTIgLTU4IC0xMCAtNzUgLTIwIC0xMzMgLTE5Ci0yMjUgNSAtNDMgMTEgLTgwIDIwIC04MSAyMCAtMiAwIC0xMSAtMTEgLTIwIC0yNXoiLz4KPC9nPgo8L3N2Zz4K \ No newline at end of file diff --git a/src/Component/Layout/ErrorPage.php b/src/Component/Layout/ErrorPage.php index a1f5a95..8bdfc65 100644 --- a/src/Component/Layout/ErrorPage.php +++ b/src/Component/Layout/ErrorPage.php @@ -14,6 +14,9 @@ class ErrorPage { + private static ?string $defaultLogo = null; + private static ?string $defaultSymbol = null; + public int $statusCode; public string $title; public string $message; @@ -48,8 +51,8 @@ public function configureOptions(OptionsResolver $resolver): void 'details' => null, 'backUrl' => null, 'backLabel' => 'Back to homepage', - 'symbol' => '/images/enabel-symbol.png', - 'logo' => '/images/enabel-logo-email.png', + 'symbol' => self::defaultSymbol(), + 'logo' => self::defaultLogo(), 'locale' => 'en', 'appName' => 'Enabel', 'stylesheet' => 'vendor/@enabel/enabel-bootstrap-theme/dist/css/error.min.css', @@ -67,4 +70,14 @@ public function configureOptions(OptionsResolver $resolver): void $resolver->setAllowedTypes('appName', 'string'); $resolver->setAllowedTypes('stylesheet', 'string'); } + + private static function defaultLogo(): string + { + return self::$defaultLogo ??= trim((string) file_get_contents(__DIR__.'/Defaults/error_page_logo.txt')); + } + + private static function defaultSymbol(): string + { + return self::$defaultSymbol ??= trim((string) file_get_contents(__DIR__.'/Defaults/error_page_symbol.txt')); + } } diff --git a/templates/layout/error_page.html.twig b/templates/layout/error_page.html.twig index c31de0d..60013ab 100644 --- a/templates/layout/error_page.html.twig +++ b/templates/layout/error_page.html.twig @@ -7,7 +7,7 @@ <link rel="stylesheet" href="{{ asset(stylesheet) }}"> </head> <body> - <div class="bg"><img src="{{ asset(symbol) }}" alt=""></div> + <div class="bg"><img src="{{ symbol starts with 'data:' ? symbol : asset(symbol) }}" alt=""></div> <div id="error"> <div class="error"> <div class="code-error"><h1>{{ statusCode }}</h1></div> @@ -15,7 +15,7 @@ <p>{{ message }}</p> {% if backUrl %}<a href="{{ backUrl }}">{{ backLabel }}</a>{% endif %} {% if details %}<small>{{ details }}</small>{% endif %} - <img class="logo" src="{{ asset(logo) }}" alt="{{ appName }}"> + <img class="logo" src="{{ logo starts with 'data:' ? logo : asset(logo) }}" alt="{{ appName }}"> </div> </div> </body> diff --git a/tests/Component/Layout/ErrorPageTest.php b/tests/Component/Layout/ErrorPageTest.php index 3566b50..ae57c24 100644 --- a/tests/Component/Layout/ErrorPageTest.php +++ b/tests/Component/Layout/ErrorPageTest.php @@ -43,8 +43,8 @@ public function testComponentCanBeInstantiatedWithRequiredParameters(): void $this->assertNull($component->details); $this->assertNull($component->backUrl); $this->assertSame('Back to homepage', $component->backLabel); - $this->assertSame('/images/enabel-symbol.png', $component->symbol); - $this->assertSame('/images/enabel-logo-email.png', $component->logo); + $this->assertStringStartsWith('data:image/svg+xml;base64,', $component->symbol); + $this->assertStringStartsWith('data:image/png;base64,', $component->logo); $this->assertSame('en', $component->locale); $this->assertSame('Enabel', $component->appName); $this->assertSame('vendor/@enabel/enabel-bootstrap-theme/dist/css/error.min.css', $component->stylesheet); @@ -154,6 +154,21 @@ public function testInvalidBackUrlTypeThrows(): void ]); } + public function testCustomSymbolAndLogoPathsOverrideDataUriDefaults(): void + { + $component = new ErrorPage(); + $data = $component->preMount([ + 'statusCode' => 404, + 'title' => 'Not Found', + 'message' => 'Missing', + 'symbol' => '/images/custom-symbol.png', + 'logo' => '/images/custom-logo.png', + ]); + + $this->assertSame('/images/custom-symbol.png', $data['symbol']); + $this->assertSame('/images/custom-logo.png', $data['logo']); + } + public function testPreMountPreservesAdditionalData(): void { $component = new ErrorPage(); From 0e747e5fae3696e0ae4d3620d851c1a2936363a3 Mon Sep 17 00:00:00 2001 From: Damien LAGAE <damienlagae@gmail.com> Date: Thu, 28 May 2026 21:18:58 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=8E=A8=20Use=20official=20Enabel=20em?= =?UTF-8?q?ail=20logo=20(with=20wordmark)=20as=20default?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the placeholder symbol-only PNG with the official 150x50 enabel-logo-email.png (5 KB / ~6.6 KB base64) so the embedded default matches the visual identity carried by the abandoned layout bundle. Addresses PR #22 smoke-test feedback. --- src/Component/Layout/Defaults/error_page_logo.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Component/Layout/Defaults/error_page_logo.txt b/src/Component/Layout/Defaults/error_page_logo.txt index fdac4e1..44a463d 100644 --- a/src/Component/Layout/Defaults/error_page_logo.txt +++ b/src/Component/Layout/Defaults/error_page_logo.txt @@ -1 +1 @@ -data:image/png;base64,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 \ No newline at end of file +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAyCAYAAAC+jCIaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFDGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMi0wOS0zMFQxMjozMiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjItMDktMzBUMTI6MzQ6NDUrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjItMDktMzBUMTI6MzQ6NDUrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzA4ZDEwMzMtYmFkYS0wMDQxLWEw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 \ No newline at end of file