From 1019510f9269482bdef707079ae9d79364fef5bf Mon Sep 17 00:00:00 2001 From: Luffy <52o@qq52o.cn> Date: Mon, 1 Sep 2025 17:34:59 +0800 Subject: [PATCH 1/4] fix: remove emoji variation selector from slug generation --- src/core/render/slugify.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/render/slugify.js b/src/core/render/slugify.js index ff910d684..664a7846f 100644 --- a/src/core/render/slugify.js +++ b/src/core/render/slugify.js @@ -13,6 +13,7 @@ export function slugify(str) { let slug = str .trim() .normalize('NFKD') + .replace(/\uFE0F/g, '') .replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu, '') .replace(/[A-Z]+/g, lower) .replace(/<[^>]+>/g, '') From 7c812236b6c788a0ec1646e412f55761b4a0712d Mon Sep 17 00:00:00 2001 From: Luffy <52o@qq52o.cn> Date: Mon, 1 Sep 2025 18:16:34 +0800 Subject: [PATCH 2/4] fix: update slug normalization to NFC --- src/core/render/slugify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/render/slugify.js b/src/core/render/slugify.js index 664a7846f..d27250f65 100644 --- a/src/core/render/slugify.js +++ b/src/core/render/slugify.js @@ -12,7 +12,7 @@ export function slugify(str) { let slug = str .trim() - .normalize('NFKD') + .normalize('NFC') .replace(/\uFE0F/g, '') .replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu, '') .replace(/[A-Z]+/g, lower) From 7b03606ace299fc1fe4614d47ec0b136e766f0b7 Mon Sep 17 00:00:00 2001 From: Luffy <52o@qq52o.cn> Date: Mon, 1 Sep 2025 18:36:38 +0800 Subject: [PATCH 3/4] fix: correct emoji removal in slug generation test --- test/unit/render-util.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/render-util.test.js b/test/unit/render-util.test.js index 3ff0c1a70..094308ea8 100644 --- a/test/unit/render-util.test.js +++ b/test/unit/render-util.test.js @@ -179,7 +179,7 @@ describe('core/render/slugify', () => { expect(nestedHtmlStrippedSlug).toBe('another-broken-example'); const emojiRemovedSlug = slugify('emoji test ⚠️🔥✅'); - expect(emojiRemovedSlug).toBe('emoji-test-️'); + expect(emojiRemovedSlug).toBe('emoji-test-'); const multiSpaceSlug = slugify('Title with multiple spaces'); expect(multiSpaceSlug).toBe('title----with---multiple-spaces'); From 5a2d2de617448c6331b3bdbf85948e74168c833b Mon Sep 17 00:00:00 2001 From: Luffy <52o@qq52o.cn> Date: Tue, 2 Sep 2025 11:25:12 +0800 Subject: [PATCH 4/4] fix: update theme instructions to use GitHub style callout format --- docs/themes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/themes.md b/docs/themes.md index 3f485a79e..6eb436bfd 100644 --- a/docs/themes.md +++ b/docs/themes.md @@ -288,7 +288,7 @@ Docsify provides [theme properties](#theme-properties) for simplified customizat } ``` - ?> **Theme authors**: Consider providing instructions for loading your recommended web fonts manually instead of including them in your theme using `@import`. This allows users who prefer a different font to avoid loading your recommended web font(s) unnecessarily. + > [!TIP] **Theme authors**: Consider providing instructions for loading your recommended web fonts manually instead of including them in your theme using `@import`. This allows users who prefer a different font to avoid loading your recommended web font(s) unnecessarily. 4. Advanced styling may require custom CSS declarations. This is expected, however custom CSS declarations may break when new versions of Docsify are released. When possible, leverage [theme properties](#theme-properties) instead of custom declarations or lock your [CDN](cdn) URLs to a [specific version](cdn#specific-version) to avoid potential issues when using custom CSS declarations.