From 3d8154f7c442415d8fa6c6cf6ae2a34775e944eb Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Fri, 28 Mar 2025 00:51:28 -0400 Subject: [PATCH] do not emit dark stylesheets when there is no dark brand properly handle absent light or dark brand do not emit empty light/dark brand bundles --- src/command/render/pandoc-html.ts | 6 ++--- src/core/sass/brand.ts | 22 ++++++++++--------- src/project/project-shared.ts | 8 +++---- .../docs/smoke-all/dark-mode/light-brand.qmd | 17 ++++++++++++++ .../docs/smoke-all/dark-mode/light-theme.qmd | 17 ++++++++++++++ tests/docs/smoke-all/dark-mode/no-brand.qmd | 15 +++++++++++++ 6 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 tests/docs/smoke-all/dark-mode/light-brand.qmd create mode 100644 tests/docs/smoke-all/dark-mode/light-theme.qmd create mode 100644 tests/docs/smoke-all/dark-mode/no-brand.qmd diff --git a/src/command/render/pandoc-html.ts b/src/command/render/pandoc-html.ts index 86ade028aec..75b0eedc1e5 100644 --- a/src/command/render/pandoc-html.ts +++ b/src/command/render/pandoc-html.ts @@ -123,12 +123,12 @@ export async function resolveSassBundles( } return bundle as SassBundle; }); - if (!foundBrand.light || !foundBrand.dark) { + if (maybeBrandBundle && (!foundBrand.light || !foundBrand.dark)) { bundles.unshift({ dependency, key: "brand", - user: !foundBrand.light && maybeBrandBundle?.user as SassLayer[] || [], - dark: !foundBrand.dark && maybeBrandBundle?.dark?.user && { + user: !foundBrand.light && maybeBrandBundle.user as SassLayer[] || [], + dark: !foundBrand.dark && maybeBrandBundle.dark?.user && { user: maybeBrandBundle.dark.user as SassLayer[], default: maybeBrandBundle.dark.default, } || undefined, diff --git a/src/core/sass/brand.ts b/src/core/sass/brand.ts index 2cd027b5185..93c1a2effab 100644 --- a/src/core/sass/brand.ts +++ b/src/core/sass/brand.ts @@ -582,14 +582,16 @@ export async function brandSassLayers( dark: [] }; - for (const layer of [sassLayers.light, sassLayers.dark]) { - layer.push({ - defaults: '$theme: "brand" !default;', - uses: "", - functions: "", - mixins: "", - rules: "", - }); + for (const mode of ["light", "dark"] as Array<"dark" | "light">) { + if (brand && brand[mode]) { + sassLayers[mode].push({ + defaults: '$theme: "brand" !default;', + uses: "", + functions: "", + mixins: "", + rules: "", + }); + } } if (brand?.light?.data.color) { sassLayers.light.push(brandColorLayer(brand?.light, nameMap)); @@ -658,10 +660,10 @@ export async function brandSassFormatExtras( key: "brand", dependency: "bootstrap", user: htmlSassBundleLayers.light, - dark: { + dark: htmlSassBundleLayers.dark.length ? { user: htmlSassBundleLayers.dark, default: darkModeDefault(format.metadata) - } + } : undefined }, ], }, diff --git a/src/project/project-shared.ts b/src/project/project-shared.ts index a8dd1f43004..bef495a34dd 100644 --- a/src/project/project-shared.ts +++ b/src/project/project-shared.ts @@ -602,18 +602,18 @@ export async function projectResolveBrand( let light, dark; if (typeof brand.light === "string") { light = await loadRelativeBrand(brand.light); - } else { + } else if (brand.light) { light = new Brand( - brand.light!, + brand.light, dirname(fileName), project.dir, ); } if (typeof brand.dark === "string") { dark = await loadRelativeBrand(brand.dark); - } else { + } else if(brand.dark) { dark = new Brand( - brand.dark!, + brand.dark, dirname(fileName), project.dir, ); diff --git a/tests/docs/smoke-all/dark-mode/light-brand.qmd b/tests/docs/smoke-all/dark-mode/light-brand.qmd new file mode 100644 index 00000000000..54f3a18261a --- /dev/null +++ b/tests/docs/smoke-all/dark-mode/light-brand.qmd @@ -0,0 +1,17 @@ +--- +format: html +brand: + light: united-brand.yml +_quarto: + tests: + html: + ensureHtmlElements: + - [] + - ["link[href*=\"-dark-\"]"] +--- + +## Hello + +```markdown +![asdf](asd.png) +``` \ No newline at end of file diff --git a/tests/docs/smoke-all/dark-mode/light-theme.qmd b/tests/docs/smoke-all/dark-mode/light-theme.qmd new file mode 100644 index 00000000000..3c40b9a36d7 --- /dev/null +++ b/tests/docs/smoke-all/dark-mode/light-theme.qmd @@ -0,0 +1,17 @@ +--- +format: html +theme: + light: united +_quarto: + tests: + html: + ensureHtmlElements: + - [] + - ["link[href*=\"-dark-\"]"] +--- + +## Hello + +```markdown +![asdf](asd.png) +``` diff --git a/tests/docs/smoke-all/dark-mode/no-brand.qmd b/tests/docs/smoke-all/dark-mode/no-brand.qmd new file mode 100644 index 00000000000..1c56313dce0 --- /dev/null +++ b/tests/docs/smoke-all/dark-mode/no-brand.qmd @@ -0,0 +1,15 @@ +--- +format: html +_quarto: + tests: + html: + ensureHtmlElements: + - [] + - ["link[href*=\"-dark-\"]"] +--- + +## Hello + +```markdown +![asdf](asd.png) +``` \ No newline at end of file