From 25a0e85c98dc9454290e4ae55c03491406081346 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 18 Dec 2024 11:04:32 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/pull/13241 --- app/appearance/themes/daylight/theme.css | 12 +++--- app/appearance/themes/midnight/theme.css | 12 +++--- app/src/protyle/util/compatibility.ts | 13 ++++++ app/src/types/user-agent.d.ts | 44 +++++++++++++++++++ app/src/util/assets.ts | 54 +++++++++++++++++------- 5 files changed, 108 insertions(+), 27 deletions(-) create mode 100644 app/src/types/user-agent.d.ts diff --git a/app/appearance/themes/daylight/theme.css b/app/appearance/themes/daylight/theme.css index 874d7536b..0cf0a2735 100644 --- a/app/appearance/themes/daylight/theme.css +++ b/app/appearance/themes/daylight/theme.css @@ -22,11 +22,11 @@ --b3-theme-on-error: #fff; /* 字体 */ - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis; --b3-font-family-protyle: var(--b3-font-family); - --b3-font-family-code: "Apple Additional Emojis", "Emojis Reset", "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace, var(--b3-font-family); + --b3-font-family-code: "Emojis Additional", "Emojis Reset", "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", var(--b3-font-family); --b3-font-family-graph: arial; - --b3-font-family-emoji: "Apple Additional Emojis", emojis; + --b3-font-family-emoji: "Emojis Additional", emojis; --b3-font-family-math: KaTeX_Math; --b3-font-size: 14px; @@ -202,15 +202,15 @@ /* 微软字体斜体会被相邻背景遮挡,将 arial 放置其前 https://github.com/siyuan-note/siyuan/issues/11841;"Segoe UI" 和 Noto-COLRv1-2.047 冲突,故移除。 */ :root:lang(zh_CN) { - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis; } :root:lang(zh_CHT) { - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis; } :root:lang(ja_JP) { - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis; } /* https://github.com/siyuan-note/siyuan/issues/6440 */ diff --git a/app/appearance/themes/midnight/theme.css b/app/appearance/themes/midnight/theme.css index 15c3f8cbd..12ce4d2d4 100644 --- a/app/appearance/themes/midnight/theme.css +++ b/app/appearance/themes/midnight/theme.css @@ -22,11 +22,11 @@ --b3-theme-on-error: #fff; /* 字体 */ - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis; --b3-font-family-protyle: var(--b3-font-family); - --b3-font-family-code: "Apple Additional Emojis", "Emojis Reset", "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace, var(--b3-font-family); + --b3-font-family-code: "Emojis Additional", "Emojis Reset", "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", var(--b3-font-family); --b3-font-family-graph: arial; - --b3-font-family-emoji: "Apple Additional Emojis", emojis; + --b3-font-family-emoji: "Emojis Additional", emojis; --b3-font-family-math: KaTeX_Math; --b3-font-size: 14px; @@ -202,15 +202,15 @@ /* 微软字体斜体会被相邻背景遮挡,将 arial 放置其前 https://github.com/siyuan-note/siyuan/issues/11841;"Segoe UI" 和 Noto-COLRv1-2.047 冲突,故移除。 */ :root:lang(zh_CN) { - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis; } :root:lang(zh_CHT) { - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis; } :root:lang(ja_JP) { - --b3-font-family: "Apple Additional Emojis", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis; + --b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis; } /* https://github.com/siyuan-note/siyuan/issues/6440 */ diff --git a/app/src/protyle/util/compatibility.ts b/app/src/protyle/util/compatibility.ts index c8c446a92..d6b425be9 100644 --- a/app/src/protyle/util/compatibility.ts +++ b/app/src/protyle/util/compatibility.ts @@ -138,6 +138,19 @@ export const isMac = () => { return navigator.platform.toUpperCase().indexOf("MAC") > -1; }; +export const isWin11 = async () => { + if (!navigator.userAgentData || !navigator.userAgentData.getHighEntropyValues) { + return false; + } + const ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"]) + if (navigator.userAgentData.platform === "Windows") { + if (parseInt(ua.platformVersion.split('.')[0]) >= 13) { + return true + } + } + return false +} + export const isInAndroid = () => { return window.siyuan.config.system.container === "android" && window.JSAndroid; }; diff --git a/app/src/types/user-agent.d.ts b/app/src/types/user-agent.d.ts new file mode 100644 index 000000000..1f4ba7c12 --- /dev/null +++ b/app/src/types/user-agent.d.ts @@ -0,0 +1,44 @@ +// WICG Spec: https://wicg.github.io/ua-client-hints + +declare interface Navigator extends NavigatorUA {} +declare interface WorkerNavigator extends NavigatorUA {} + +// https://wicg.github.io/ua-client-hints/#navigatorua +declare interface NavigatorUA { + readonly userAgentData?: NavigatorUAData; +} + +// https://wicg.github.io/ua-client-hints/#dictdef-navigatoruabrandversion +interface NavigatorUABrandVersion { + readonly brand: string; + readonly version: string; +} + +// https://wicg.github.io/ua-client-hints/#dictdef-uadatavalues +interface UADataValues { + readonly brands?: NavigatorUABrandVersion[]; + readonly mobile?: boolean; + readonly platform?: string; + readonly architecture?: string; + readonly bitness?: string; + readonly formFactor?: string[]; + readonly model?: string; + readonly platformVersion?: string; + /** @deprecated in favour of fullVersionList */ + readonly uaFullVersion?: string; + readonly fullVersionList?: NavigatorUABrandVersion[]; + readonly wow64?: boolean; +} + +// https://wicg.github.io/ua-client-hints/#dictdef-ualowentropyjson +interface UALowEntropyJSON { + readonly brands: NavigatorUABrandVersion[]; + readonly mobile: boolean; + readonly platform: string; +} + +// https://wicg.github.io/ua-client-hints/#navigatoruadata +interface NavigatorUAData extends UALowEntropyJSON { + getHighEntropyValues(hints: string[]): Promise; + toJSON(): UALowEntropyJSON; +} diff --git a/app/src/util/assets.ts b/app/src/util/assets.ts index 16de83659..7e9462cd7 100644 --- a/app/src/util/assets.ts +++ b/app/src/util/assets.ts @@ -7,7 +7,7 @@ import {exportLayout} from "../layout/util"; /// #endif import {fetchPost} from "./fetch"; import {appearance} from "../config/appearance"; -import {isInAndroid, isInHarmony, isInIOS, isIPad, isIPhone, isMac} from "../protyle/util/compatibility"; +import {isInAndroid, isInHarmony, isInIOS, isIPad, isIPhone, isMac, isWin11} from "../protyle/util/compatibility"; const loadThirdIcon = (iconURL: string, data: Config.IAppearance) => { addScript(iconURL, "iconDefaultScript").then(() => { @@ -199,14 +199,15 @@ export const addGA = () => { } }; -export const setInlineStyle = (set = true) => { +export const setInlineStyle = async (set = true) => { const height = Math.floor(window.siyuan.config.editor.fontSize * 1.625); let style; + // Emojis Reset: 字体中包含了 emoji,需重置 - // Apple Additional Emojis: 苹果字体中没有的 emoji + // Emojis Additional: 苹果/win11 字体中没有的 emoji if (isMac() || isIPad() || isIPhone()) { style = `@font-face { - font-family: "Apple Additional Emojis"; + font-family: "Emojis Additional"; src: url(stage/build/fonts/Noto-COLRv1.woff2) format("woff2"); unicode-range: U+1fae9, U+1fac6, U+1fabe, U+1fadc, U+e50a, U+1fa89, U+1fadf, U+1f1e6-1f1ff, U+1fa8f; } @@ -215,7 +216,7 @@ export const setInlineStyle = (set = true) => { src: local("Apple Color Emoji"), local("Segoe UI Emoji"), local("Segoe UI Symbol"); - unicode-range: U+263a, U+1fae4, U+2194-2199, U+2934-2935, U+25b6, U+25c0, U+23cf, U+2640, U+2642, U+2611, U+303d, + unicode-range: U+26a1, U+21a9, U+21aa, U+2708, U+263a, U+1fae4, U+2194-2199, U+2934-2935, U+25b6, U+25c0, U+23cf, U+2640, U+2642, U+2611, U+303d, U+3030, U+00a9, U+00ae, U+2122, U+1f170, U+1f171, U+24c2, U+1f17e, U+1f17f, U+1f250, U+1f21a, U+1f22f, U+1f232-1f23a, U+1f251, U+3297, U+3299, U+2639, U+2660, U+2666, U+2665, U+2663, U+26A0; } @@ -226,7 +227,37 @@ export const setInlineStyle = (set = true) => { local("Segoe UI Symbol"); }` } else { - style = `@font-face { + const isWin11Browser = await isWin11(); + if (isWin11Browser) { + style = `@font-face { + font-family: "Emojis Additional"; + src: url(stage/build/fonts/Noto-COLRv1.woff2) format("woff2"); + unicode-range: U+1fae9, U+1fac6, U+1fabe, U+1fadc, U+e50a, U+1fa89, U+1fadf, U+1f1e6-1f1ff, U+1fa8f; +} +@font-face { + font-family: "Emojis Reset"; + src: local("Segoe UI Emoji"), + local("Segoe UI Symbol"); + unicode-range: U+263a, U+1fae4, U+2194-2199, U+2934-2935, U+25b6, U+25c0, U+23cf, U+2640, U+2642, U+2611, U+303d, + U+3030, U+00a9, U+00ae, U+2122, U+1f170, U+1f171, U+24c2, U+1f17e, U+1f17f, U+1f250, U+1f21a, U+1f22f, U+1f232-1f23a, + U+1f251, U+3297, U+3299, U+2639, U+2660, U+2666, U+2665, U+2663, U+26A0; +} +@font-face { + font-family: "Emojis"; + src: local("Segoe UI Emoji"), + local("Segoe UI Symbol"); +}`; + } else { + style = ` +@font-face { + font-family: "Emojis Reset"; + src: url(stage/build/fonts/Noto-COLRv1.woff2) format("woff2"); + unicode-range: U+263a, U+2194-2199, U+2934-2935, U+2639, U+26a0, U+25b6, U+25c0, U+23cf, U+2640, U+2642, U+203c, U+2049, + U+2611, U+303d, U+00a9, U+00ae, U+2122, U+1f170-1f171, U+24c2, U+1f17e, U+1f17f, U+1f22f, U+1f250, U+1f21a, + U+1f232-1f23a, U+1f251, U+3297, U+3299, U+25aa, U+25ab, U+2660, U+2666, U+2665, U+2663, U+1f636, U+1f62e, U+1f642, + U+1f635, U+2620, U+2763, U+2764, U+1f441, U+270c, U+261d, U+270d, U+200d, U+e50a, U+3030, U+21aa, U+21a9; +} +@font-face { font-family: "Emojis"; src: url(stage/build/fonts/Noto-COLRv1.woff2) format("woff2"), local("Segoe UI Emoji"), @@ -236,15 +267,8 @@ export const setInlineStyle = (set = true) => { local("Noto Color Emoji"), local("Android Emoji"), local("EmojiSymbols"); -} -@font-face { - font-family: "Emojis Reset"; - src: url(stage/build/fonts/Noto-COLRv1.woff2) format("woff2"); - unicode-range: U+263a, U+2194-2199, U+2934-2935, U+2639, U+26a0, U+25b6, U+25c0, U+23cf, U+2640, U+2642, U+203c, U+2049, - U+2611, U+303d, U+00a9, U+00ae, U+2122, U+1f170-1f171, U+24c2, U+1f17e, U+1f17f, U+1f22f, U+1f250, U+1f21a, - U+1f232-1f23a, U+1f251, U+3297, U+3299, U+25aa, U+25ab, U+2660, U+2666, U+2665, U+2663, U+1f636, U+1f62e, U+1f642, - U+1f635, U+2620, U+2763, U+2764, U+1f441, U+270c, U+261d, U+270d, U+200d, U+e50a, U+3030, U+21aa, U+21a9; }`; + } } style += `.b3-typography, .protyle-wysiwyg, .protyle-title {font-size:${window.siyuan.config.editor.fontSize}px !important} .b3-typography code:not(.hljs), .protyle-wysiwyg span[data-type~=code] { font-variant-ligatures: ${window.siyuan.config.editor.codeLigatures ? "normal" : "none"} } @@ -264,7 +288,7 @@ export const setInlineStyle = (set = true) => { .protyle-wysiwyg .li {min-height:${height + 8}px} .protyle-gutters button svg {height:${height}px}`; if (window.siyuan.config.editor.fontFamily) { - style += `\n.b3-typography:not(.b3-typography--default), .protyle-wysiwyg, .protyle-title {font-family: "Apple Additional Emojis", "Emojis Reset", "${window.siyuan.config.editor.fontFamily}", var(--b3-font-family)}`; + style += `\n.b3-typography:not(.b3-typography--default), .protyle-wysiwyg, .protyle-title {font-family: "Emojis Additional", "Emojis Reset", "${window.siyuan.config.editor.fontFamily}", var(--b3-font-family)}`; } // pad 端菜单移除显示,如工作空间 if ("ontouchend" in document) {