From 2adbc0d6a0b92b099d2c3e22b147c904d3f9fc59 Mon Sep 17 00:00:00 2001 From: Seth Falco Date: Tue, 15 Jul 2025 13:58:05 +0100 Subject: [PATCH 1/2] chore: minor reduction to inline svg/js code (#11317) --- .../__snapshots__/inlineScripts.test.ts.snap | 33 +++++++++++++ .../src/__tests__/inlineScripts.test.ts | 42 +++++++++++++++++ .../docusaurus-theme-classic/src/index.ts | 1 - .../src/inlineScripts.ts | 47 +++++++++++-------- 4 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 packages/docusaurus-theme-classic/src/__tests__/__snapshots__/inlineScripts.test.ts.snap create mode 100644 packages/docusaurus-theme-classic/src/__tests__/inlineScripts.test.ts diff --git a/packages/docusaurus-theme-classic/src/__tests__/__snapshots__/inlineScripts.test.ts.snap b/packages/docusaurus-theme-classic/src/__tests__/__snapshots__/inlineScripts.test.ts.snap new file mode 100644 index 000000000000..acad179bbe88 --- /dev/null +++ b/packages/docusaurus-theme-classic/src/__tests__/__snapshots__/inlineScripts.test.ts.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`inlineScripts inline javascript for default options 1`] = ` +"(function() { + function getSystemColorMode() { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } + function getQueryStringTheme() { + try { + return new URLSearchParams(window.location.search).get('docusaurus-theme') + } catch (e) {} + } + function getStoredTheme() { + try { + return window['localStorage'].getItem('theme'); + } catch (err) {} + } + var initialTheme = getQueryStringTheme() || getStoredTheme(); + document.documentElement.setAttribute('data-theme', initialTheme || 'light'); + document.documentElement.setAttribute('data-theme-choice', initialTheme || 'light'); +})();" +`; + +exports[`inlineScripts inline javascript for prefers color scheme and no switch 1`] = ` +"(function() { + function getSystemColorMode() { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } + var initialTheme; + document.documentElement.setAttribute('data-theme', initialTheme || getSystemColorMode()); + document.documentElement.setAttribute('data-theme-choice', initialTheme || 'system'); +})();" +`; diff --git a/packages/docusaurus-theme-classic/src/__tests__/inlineScripts.test.ts b/packages/docusaurus-theme-classic/src/__tests__/inlineScripts.test.ts new file mode 100644 index 000000000000..5671d77d3c44 --- /dev/null +++ b/packages/docusaurus-theme-classic/src/__tests__/inlineScripts.test.ts @@ -0,0 +1,42 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {getThemeInlineScript} from '../inlineScripts'; + +describe('inlineScripts', () => { + it('inline javascript for default options', () => { + expect( + getThemeInlineScript({ + colorMode: { + disableSwitch: false, + defaultMode: 'light', + respectPrefersColorScheme: false, + }, + siteStorage: { + type: 'localStorage', + namespace: '', + }, + }), + ).toMatchSnapshot(); + }); + + it('inline javascript for prefers color scheme and no switch', () => { + expect( + getThemeInlineScript({ + colorMode: { + disableSwitch: true, + defaultMode: 'light', + respectPrefersColorScheme: true, + }, + siteStorage: { + type: 'localStorage', + namespace: '', + }, + }), + ).toMatchSnapshot(); + }); +}); diff --git a/packages/docusaurus-theme-classic/src/index.ts b/packages/docusaurus-theme-classic/src/index.ts index ac2ea69a4c4c..f219d9039bec 100644 --- a/packages/docusaurus-theme-classic/src/index.ts +++ b/packages/docusaurus-theme-classic/src/index.ts @@ -125,7 +125,6 @@ export default function themeClassic( { tagName: 'svg', attributes: { - xmlns: 'http://www.w3.org/2000/svg', style: 'display: none;', }, innerHTML: SvgSpriteDefs, diff --git a/packages/docusaurus-theme-classic/src/inlineScripts.ts b/packages/docusaurus-theme-classic/src/inlineScripts.ts index 4a2e4694b60e..fe49094a52c4 100644 --- a/packages/docusaurus-theme-classic/src/inlineScripts.ts +++ b/packages/docusaurus-theme-classic/src/inlineScripts.ts @@ -15,7 +15,7 @@ const ThemeQueryStringKey = 'docusaurus-theme'; const DataQueryStringPrefixKey = 'docusaurus-data-'; export function getThemeInlineScript({ - colorMode: {defaultMode, respectPrefersColorScheme}, + colorMode: {disableSwitch, defaultMode, respectPrefersColorScheme}, siteStorage, }: { colorMode: ThemeConfig['colorMode']; @@ -25,28 +25,35 @@ export function getThemeInlineScript({ // Make sure the key is the same as the one in the color mode React context // Currently defined in: `docusaurus-theme-common/src/contexts/colorMode.tsx` const themeStorageKey = `theme${siteStorage.namespace}`; + const isThemeUserConfigurable = !disableSwitch; /* language=js */ return `(function() { - var defaultMode = '${defaultMode}'; - var respectPrefersColorScheme = ${respectPrefersColorScheme}; - function getSystemColorMode() { - return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; - } - function getQueryStringTheme() { - try { - return new URLSearchParams(window.location.search).get('${ThemeQueryStringKey}') - } catch (e) {} - } - function getStoredTheme() { - try { - return window['${siteStorage.type}'].getItem('${themeStorageKey}'); - } catch (err) {} - } - var initialTheme = getQueryStringTheme() || getStoredTheme(); - document.documentElement.setAttribute('data-theme', initialTheme || (respectPrefersColorScheme ? getSystemColorMode() : defaultMode)); - document.documentElement.setAttribute('data-theme-choice', initialTheme || (respectPrefersColorScheme ? 'system' : defaultMode)); - })();`; + function getSystemColorMode() { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } +${ + isThemeUserConfigurable + ? ` function getQueryStringTheme() { + try { + return new URLSearchParams(window.location.search).get('${ThemeQueryStringKey}') + } catch (e) {} + } + function getStoredTheme() { + try { + return window['${siteStorage.type}'].getItem('${themeStorageKey}'); + } catch (err) {} + } + var initialTheme = getQueryStringTheme() || getStoredTheme();` + : ' var initialTheme;' +} + document.documentElement.setAttribute('data-theme', initialTheme || ${ + respectPrefersColorScheme ? 'getSystemColorMode()' : `'${defaultMode}'` + }); + document.documentElement.setAttribute('data-theme-choice', initialTheme || ${ + respectPrefersColorScheme ? `'system'` : `'${defaultMode}'` + }); +})();`; } /* language=js */ From a3324ff65e3b6b4472049a510a9a9d8be4830ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Tue, 15 Jul 2025 15:11:20 +0200 Subject: [PATCH 2/2] docs: fix release notes link (#11329) --- website/src/pages/versions.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/website/src/pages/versions.tsx b/website/src/pages/versions.tsx index 5e453e27d1f8..a54985643cbd 100644 --- a/website/src/pages/versions.tsx +++ b/website/src/pages/versions.tsx @@ -12,6 +12,7 @@ import Translate from '@docusaurus/Translate'; import { useVersions, useLatestVersion, + type GlobalVersion, } from '@docusaurus/plugin-content-docs/client'; import Layout from '@theme/Layout'; import Heading from '@theme/Heading'; @@ -49,6 +50,13 @@ export default function Version(): ReactNode { ); const repoUrl = `https://github.com/${organizationName!}/${projectName!}`; + function getReleaseNotesUrl(version: GlobalVersion): string { + if (version.name === '2.x') { + return 'https://github.com/facebook/docusaurus/blob/main/CHANGELOG-v2.md'; + } + return `${repoUrl}/releases/tag/v${version.name}`; + } + return ( - + @@ -142,7 +150,7 @@ export default function Version(): ReactNode { - +