From be9a2a037c933367dc226cb3c28428b08dd25b05 Mon Sep 17 00:00:00 2001 From: eliot lauger Date: Wed, 22 Oct 2025 12:11:04 +0200 Subject: [PATCH 1/6] feat(front): Add support for iframe rendering in templates --- .../src/TwigExtension/RozierExtension.php | 6 + .../templates/iframe.html.twig | 213 ++++++++++++++++++ .../templates/layout.html.twig | 8 +- lib/Rozier/app/main.js | 6 +- 4 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 lib/RoadizRozierBundle/templates/iframe.html.twig diff --git a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php index be7b5186c..700527a55 100644 --- a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php +++ b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php @@ -17,6 +17,7 @@ use RZ\Roadiz\RozierBundle\TranslateAssistant\NullTranslateAssistant; use RZ\Roadiz\RozierBundle\TranslateAssistant\TranslateAssistantInterface; use RZ\Roadiz\RozierBundle\Vite\JsonManifestResolver; +use Symfony\Component\HttpFoundation\RequestStack; use Twig\Extension\AbstractExtension; use Twig\Extension\GlobalsInterface; use Twig\TwigFunction; @@ -30,12 +31,16 @@ public function __construct( private readonly TranslateAssistantInterface $translateAssistant, private readonly BookmarkCollection $bookmarkCollection, private readonly BreadcrumbsItemFactoryInterface $breadcrumbItemFactory, + private readonly RequestStack $requestStack, ) { } #[\Override] public function getGlobals(): array { + $request = $this->requestStack->getCurrentRequest(); + $isIframe = $request->query->get('iframe') === '1'; + return [ 'rozier' => $this->rozierServiceRegistry, 'nodeStatuses' => NodeStatus::allLabelsAndValues(), @@ -52,6 +57,7 @@ public function getGlobals(): array ], 'translateAssistantEnabled' => !$this->translateAssistant instanceof NullTranslateAssistant, 'translateAssistantSupportRephrase' => $this->translateAssistant->supportRephrase(), + 'isIframe' => $isIframe, ]; } diff --git a/lib/RoadizRozierBundle/templates/iframe.html.twig b/lib/RoadizRozierBundle/templates/iframe.html.twig new file mode 100644 index 000000000..747e58077 --- /dev/null +++ b/lib/RoadizRozierBundle/templates/iframe.html.twig @@ -0,0 +1,213 @@ +{% set formattedLocale = app.request.locale|replace({'_': '-'})|lower %} + + + + + + {% block title %}{% trans %}back_office{% endtrans %}: {{ meta.siteName }}{% endblock %} + + + {% include '@RoadizRozier/admin/meta-icon.html.twig' %} + {# CSS scripts inclusions / Using webpack #} + {{ manifest_preload_tags('shared') }} + {{ manifest_preload_tags('main') }} + + {{ manifest_style_tags('shared') }} + {{ manifest_style_tags('main') }} + + {% if main_color %} + + {% endif %} + {% block customStyles %}{% endblock %} + {% if additionalStylesheets %} + {% for additionalStylesheet in additionalStylesheets %} + + {% endfor %} + {% endif %} + + +{% include '@RoadizRozier/includes/messages.html.twig' %} +
+
+
+
+ {% block permanentComponents %} + + {% endblock %} + {% block content %}{% endblock %} +
+
+
+
+
+ + +
+ + + + +
+
+ + +{# JS scripts inclusions / Using Vite manifest #} +{{ manifest_script_tags('@vite/client') }} +{{ manifest_script_tags('shared') }} +{{ manifest_script_tags('main') }} +{% block customScripts %}{% endblock %} +{% if additionalScripts %} + {% for additionalScript in additionalScripts %} + + {% endfor %} +{% endif %} + + diff --git a/lib/RoadizRozierBundle/templates/layout.html.twig b/lib/RoadizRozierBundle/templates/layout.html.twig index c69d02611..4d9bf00fa 100644 --- a/lib/RoadizRozierBundle/templates/layout.html.twig +++ b/lib/RoadizRozierBundle/templates/layout.html.twig @@ -1 +1,7 @@ -{% extends '@RoadizRozier/base.html.twig' %} +{% if (isIframe) %} + {% set parentTemplate = '@RoadizRozier/iframe.html.twig' %} +{% else %} + {% set parentTemplate = '@RoadizRozier/base.html.twig' %} +{% endif %} + +{% extends parentTemplate %} diff --git a/lib/Rozier/app/main.js b/lib/Rozier/app/main.js index 0640e81c5..067f38c63 100644 --- a/lib/Rozier/app/main.js +++ b/lib/Rozier/app/main.js @@ -29,7 +29,7 @@ import GenericBulkActions from './behaviours/GenericBulkActions' import Mobile from './behaviours/Mobile' import Rozier from './Rozier' -import { defineLazyElement } from '~/utils/custom-element/defineLazyElement' +import {defineLazyElement} from '~/utils/custom-element/defineLazyElement' import customElementList from './custom-elements' import '@ungap/custom-elements' // Polyfill for Safari (not implementing the customized built-in elements) @@ -58,7 +58,9 @@ ready(() => { * init generic bulk actions widget */ GenericBulkActions() - new Mobile() + if (!(new URLSearchParams(window.location.search)).has('iframe') || (new URLSearchParams(window.location.search)).get('iframe') !== '1') { + new Mobile() + } window.addEventListener('pageshowend', () => { GenericBulkActions() From 7e847709694cef44b59aa0c5196c74739fb941f6 Mon Sep 17 00:00:00 2001 From: eliot lauger Date: Wed, 22 Oct 2025 12:18:58 +0200 Subject: [PATCH 2/6] chore: Fix code style --- lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php | 2 +- lib/Rozier/app/main.js | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php index 700527a55..1756a0b95 100644 --- a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php +++ b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php @@ -39,7 +39,7 @@ public function __construct( public function getGlobals(): array { $request = $this->requestStack->getCurrentRequest(); - $isIframe = $request->query->get('iframe') === '1'; + $isIframe = '1' === $request->query->get('iframe'); return [ 'rozier' => $this->rozierServiceRegistry, diff --git a/lib/Rozier/app/main.js b/lib/Rozier/app/main.js index 067f38c63..549e82842 100644 --- a/lib/Rozier/app/main.js +++ b/lib/Rozier/app/main.js @@ -58,7 +58,10 @@ ready(() => { * init generic bulk actions widget */ GenericBulkActions() - if (!(new URLSearchParams(window.location.search)).has('iframe') || (new URLSearchParams(window.location.search)).get('iframe') !== '1') { + if ( + !(new URLSearchParams(window.location.search)).has('iframe') || + (new URLSearchParams(window.location.search)).get('iframe') !== '1' + ) { new Mobile() } From 95fe2bb0e6add50ccce7a8782d0bf7fb2f9d454b Mon Sep 17 00:00:00 2001 From: eliot lauger Date: Wed, 22 Oct 2025 16:08:32 +0200 Subject: [PATCH 3/6] chore: Fix code style --- lib/Rozier/app/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Rozier/app/main.js b/lib/Rozier/app/main.js index 549e82842..86198d20c 100644 --- a/lib/Rozier/app/main.js +++ b/lib/Rozier/app/main.js @@ -59,8 +59,8 @@ ready(() => { */ GenericBulkActions() if ( - !(new URLSearchParams(window.location.search)).has('iframe') || - (new URLSearchParams(window.location.search)).get('iframe') !== '1' + !new URLSearchParams(window.location.search).has('iframe') || + new URLSearchParams(window.location.search).get('iframe') !== '1' ) { new Mobile() } From 63db9c623e8c80d277f7e80c63595a36c9c2c319 Mon Sep 17 00:00:00 2001 From: eliot lauger Date: Wed, 22 Oct 2025 16:12:26 +0200 Subject: [PATCH 4/6] chore: Fix code style --- lib/Rozier/app/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Rozier/app/main.js b/lib/Rozier/app/main.js index 86198d20c..3dfb0a8d6 100644 --- a/lib/Rozier/app/main.js +++ b/lib/Rozier/app/main.js @@ -29,7 +29,7 @@ import GenericBulkActions from './behaviours/GenericBulkActions' import Mobile from './behaviours/Mobile' import Rozier from './Rozier' -import {defineLazyElement} from '~/utils/custom-element/defineLazyElement' +import { defineLazyElement } from '~/utils/custom-element/defineLazyElement' import customElementList from './custom-elements' import '@ungap/custom-elements' // Polyfill for Safari (not implementing the customized built-in elements) From db1ac97aaaeb35abc089442216d809e3b4f69173 Mon Sep 17 00:00:00 2001 From: eliot lauger Date: Fri, 14 Nov 2025 12:12:24 +0100 Subject: [PATCH 5/6] chore: Fix thread --- lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php index 1756a0b95..dbec57811 100644 --- a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php +++ b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php @@ -39,7 +39,7 @@ public function __construct( public function getGlobals(): array { $request = $this->requestStack->getCurrentRequest(); - $isIframe = '1' === $request->query->get('iframe'); + $isIframe = '1' === $request?->query->get('iframe') ?? false; return [ 'rozier' => $this->rozierServiceRegistry, From 79f07cd9dbac530fefda7b1cdb72b14d9084990f Mon Sep 17 00:00:00 2001 From: eliot lauger Date: Mon, 19 Jan 2026 11:21:49 +0100 Subject: [PATCH 6/6] chore: fix phpstan --- lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php index dbec57811..bb183c5a7 100644 --- a/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php +++ b/lib/RoadizRozierBundle/src/TwigExtension/RozierExtension.php @@ -39,6 +39,7 @@ public function __construct( public function getGlobals(): array { $request = $this->requestStack->getCurrentRequest(); + /* @phpstan-ignore-next-line */ $isIframe = '1' === $request?->query->get('iframe') ?? false; return [