From 2635e8760c560f18d1c0383860f72ee34b5084e1 Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Thu, 3 Sep 2026 03:09:12 +0000 Subject: [PATCH] Sync lang/dir on hot page swaps (fetch nav, editor re-renders) --- frontend/src/pagerite.js | 5 +++++ frontend/src/swapdoc.js | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/frontend/src/pagerite.js b/frontend/src/pagerite.js index 44d34f3..a004242 100644 --- a/frontend/src/pagerite.js +++ b/frontend/src/pagerite.js @@ -832,6 +832,11 @@ import { reconnectPolicy, socketSlot, watchConnecting } from "./reconnect"; // stylesheet after the server-rendered tag. const userStyle = document.getElementById("pagerite-user"); if (userStyle) document.head.appendChild(userStyle); + // The served language rides on (lang + dir, rtl for e.g. + // Arabic) — follow the swapped page (the editor panel carries its + // own lang="en" dir="ltr", so it is unaffected). + document.documentElement.lang = doc.documentElement.lang; + document.documentElement.dir = doc.documentElement.dir; document.title = doc.title; // Banners may contain scripts (canvas etc.), content pages may too. runScripts(document.getElementById("page-banner")); diff --git a/frontend/src/swapdoc.js b/frontend/src/swapdoc.js index c5b9f24..a41c801 100644 --- a/frontend/src/swapdoc.js +++ b/frontend/src/swapdoc.js @@ -114,6 +114,11 @@ function swapRegions(doc) { } anchor = imported } + // The served language rides on (lang + dir, rtl for e.g. Arabic): + // follow the swapped page. The editor panel carries its own lang="en" + // dir="ltr", so it is unaffected. + document.documentElement.lang = doc.documentElement.lang + document.documentElement.dir = doc.documentElement.dir // The editor keeps its own title while open; only inherit the server title // when navigating outside the editor (e.g. fetch-navigation swaps). if (!document.body.classList.contains('editing')) {