Skip to content

Commit e849c72

Browse files
committed
fix: add theme injection to HTML rendering for improved client-side styling
1 parent 563ea2c commit e849c72

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/index.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class CoCreateServerSideRender {
77
this.crud = crud;
88
}
99

10-
async HTML(file, organization, urlObject, langRegion, lang) {
10+
async HTML(file, organization, urlObject, langRegion, lang, theme) {
1111
const self = this;
1212
let ignoreElement = {
1313
INPUT: true,
@@ -176,6 +176,28 @@ class CoCreateServerSideRender {
176176
dom = await this.translate(dom, file, langRegion, lang);
177177
}
178178

179+
// Inject preferred theme into the DOM so client gets server-rendered theme
180+
if (theme) {
181+
const htmlEl = dom.querySelector("html");
182+
try {
183+
if (htmlEl && htmlEl.setAttribute) htmlEl.setAttribute("data-bs-theme", theme);
184+
185+
const head = dom.querySelector("head");
186+
if (head) {
187+
// add or update color-scheme meta tag
188+
let meta = head.querySelector('meta[name="color-scheme"]');
189+
if (meta && meta.setAttribute) {
190+
meta.setAttribute("content", theme);
191+
} else {
192+
const metaNode = parse(`<meta name="color-scheme" content="${theme}">`);
193+
head.appendChild(metaNode);
194+
}
195+
}
196+
} catch (e) {
197+
// fail-safe: don't abort rendering if theme injection fails
198+
}
199+
}
200+
179201
if (organization.languages && organization.languages.length > 0) {
180202
let langLinkTags = this.createLanguageLinkTags(
181203
file,

0 commit comments

Comments
 (0)