From f178b49cc14a5f1f3fbb792624790343a4f07176 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 11:56:51 +0000 Subject: [PATCH] fix: apply dark mode in overlay iframe via storage events and apply-theme.js Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/bc95f559-e0c7-4682-96fb-0799956a95c6 Co-authored-by: szaimen <42591237+szaimen@users.noreply.github.com> --- php/public/apply-theme.js | 14 ++++++++++++++ php/public/toggle-dark-mode.js | 2 +- php/src/Controller/DockerController.php | 1 + php/templates/log.twig | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 php/public/apply-theme.js diff --git a/php/public/apply-theme.js b/php/public/apply-theme.js new file mode 100644 index 00000000..91783b16 --- /dev/null +++ b/php/public/apply-theme.js @@ -0,0 +1,14 @@ +"use strict"; + +// Apply the saved theme immediately to avoid a flash of the wrong theme. +try { document.documentElement.setAttribute('data-theme', localStorage.getItem('theme') ?? ''); } catch (e) {} + +// React when the user toggles the theme on the parent page while this page is +// open in an iframe. localStorage.setItem() fires a 'storage' event on every +// other window / frame that shares the same origin, so we can keep in sync +// without the parent having to know about us. +window.addEventListener('storage', (e) => { + if (e.key === 'theme') { + document.documentElement.setAttribute('data-theme', e.newValue ?? ''); + } +}); diff --git a/php/public/toggle-dark-mode.js b/php/public/toggle-dark-mode.js index 8f1e13a4..60d9f489 100644 --- a/php/public/toggle-dark-mode.js +++ b/php/public/toggle-dark-mode.js @@ -11,7 +11,7 @@ function toggleTheme() { function setThemeToDOM(value) { // Set the theme to the root document and all possible iframe documents (so they can adapt their styling, too). - const documents = [document, Array.from(document.querySelectorAll('iframe')).map((iframe) => iframe.contentDocument)].flat() + const documents = [document, ...Array.from(document.querySelectorAll('iframe')).map((iframe) => iframe.contentDocument).filter(Boolean)] documents.forEach((doc) => doc.documentElement.setAttribute('data-theme', value)); } diff --git a/php/src/Controller/DockerController.php b/php/src/Controller/DockerController.php index a0e1493b..b9df82da 100644 --- a/php/src/Controller/DockerController.php +++ b/php/src/Controller/DockerController.php @@ -402,6 +402,7 @@ readonly class DockerController { + diff --git a/php/templates/log.twig b/php/templates/log.twig index d8194981..8dc849a4 100644 --- a/php/templates/log.twig +++ b/php/templates/log.twig @@ -5,6 +5,7 @@ +