diff --git a/apps/api/src/share-routes.test.mjs b/apps/api/src/share-routes.test.mjs index 18d6d707..cbf9e5ac 100644 --- a/apps/api/src/share-routes.test.mjs +++ b/apps/api/src/share-routes.test.mjs @@ -1,3 +1,4 @@ +import { FONT_IDS } from "@edgeever/shared/font-catalog"; import { describe, expect, test } from "bun:test"; import { Database } from "bun:sqlite"; import { globSync, readFileSync } from "node:fs"; @@ -111,7 +112,7 @@ describe("public memo shares", () => { sqlite.query("UPDATE memo_shares SET created_by = ? WHERE id = ?").run("usr_font_catalog", "share_source"); const app = new Hono(); registerPublicShareRoutes(app); - for (const id of ["wenkai", "smiley", "puhui", "puhui-heavy", "youshe", "shuhei", "heavy", "zhuque", "source-han-serif"]) { + for (const id of ["wenkai-screen", ...FONT_IDS, "neo-zhi-song", "source-serif"]) { sqlite.query("UPDATE users SET note_body_font = ? WHERE id = ?").run(id, "usr_font_catalog"); const response = await app.request(`/api/public/shares/${sourceToken}`, {}, environment); expect(response.status).toBe(200); @@ -211,7 +212,7 @@ describe("public memo shares", () => { expect(response.status).toBe(200); expect(sqlite.query("SELECT note_body_font FROM users WHERE id = ?").get("usr_author").note_body_font).toBe("source-han-serif"); - for (const id of ["smiley", "wenkai", "zhuque", "heavy", "puhui", "puhui-heavy", "youshe", "shuhei"]) { + for (const id of FONT_IDS) { const response = await app.request("/api/v1/me/note-body-font", { method: "PUT", headers: { "content-type": "application/json" }, body: JSON.stringify({ bodyFont: id }), }, environment); diff --git a/apps/ios/EdgeEver/Data/Preferences/PreferencesStore.swift b/apps/ios/EdgeEver/Data/Preferences/PreferencesStore.swift index 2ce0be4a..7e9d6d26 100644 --- a/apps/ios/EdgeEver/Data/Preferences/PreferencesStore.swift +++ b/apps/ios/EdgeEver/Data/Preferences/PreferencesStore.swift @@ -1,4 +1,34 @@ import Foundation + +// BEGIN GENERATED FONT CATALOG — bun scripts/sync-font-catalog.mjs +enum NoteImageFontCatalog { + static let choices: [(id: String, zh: String, en: String)] = [ + (id: "smiley", zh: "得意黑", en: "Smiley Sans"), + (id: "wenkai", zh: "霞鹜文楷", en: "LXGW WenKai"), + (id: "zhuque", zh: "朱雀仿宋", en: "Zhuque Fangsong"), + (id: "heavy", zh: "思源黑体 Heavy", en: "Noto Sans SC Heavy"), + (id: "puhui", zh: "普惠体", en: "PuHuiTi"), + (id: "puhui-heavy", zh: "普惠体 Heavy", en: "PuHuiTi Heavy"), + (id: "youshe", zh: "优设标题黑", en: "YouShe Title"), + (id: "shuhei", zh: "阿里妈妈数黑体", en: "Alimama ShuHei"), + (id: "source-han-serif", zh: "思源宋体", en: "Noto Serif SC"), + (id: "anton", zh: "Anton", en: "Anton"), + (id: "douyin", zh: "抖音美好体", en: "Douyin Sans"), + (id: "mashan", zh: "马善政楷书", en: "Ma Shan Zheng"), + (id: "jiangcheng", zh: "江城圆体", en: "Jiangcheng Rounded"), + (id: "huangyou", zh: "站酷庆科黄油体", en: "ZCOOL QingKe HuangYou"), + (id: "glow", zh: "未来荧黑", en: "Glow Sans"), + (id: "kuaile", zh: "站酷快乐体", en: "ZCOOL KuaiLe"), + (id: "source-han-sans", zh: "思源黑体", en: "Noto Sans SC"), + (id: "source-han-serif-heavy", zh: "思源宋体 Heavy", en: "Noto Serif SC Heavy"), + (id: "inter", zh: "Inter", en: "Inter"), + (id: "dmserif", zh: "DM Serif Display", en: "DM Serif Display"), + (id: "bebas", zh: "Bebas Neue", en: "Bebas Neue"), + (id: "spacegrotesk", zh: "Space Grotesk", en: "Space Grotesk"), + (id: "jetbrains", zh: "JetBrains Mono", en: "JetBrains Mono"), + ] +} +// END GENERATED FONT CATALOG import Observation import SwiftUI @@ -58,7 +88,7 @@ struct NoteImageSharePreferences: Codable, Equatable { theme = value } if let value = try? values.decode(String.self, forKey: .fontStyle), - ["auto", "serif", "sans", "mono", "kai", "smiley", "wenkai", "zhuque", "heavy", "puhui", "puhui-heavy", "youshe", "shuhei"].contains(value) { + (["auto", "serif", "sans", "mono", "kai"] + NoteImageFontCatalog.choices.map(\.id)).contains(value) { fontStyle = value } if let value = try? values.decode(String.self, forKey: .fontSize), diff --git a/apps/ios/EdgeEver/Features/Workspace/MemoDetailView.swift b/apps/ios/EdgeEver/Features/Workspace/MemoDetailView.swift index 4e956cec..23ca7366 100644 --- a/apps/ios/EdgeEver/Features/Workspace/MemoDetailView.swift +++ b/apps/ios/EdgeEver/Features/Workspace/MemoDetailView.swift @@ -198,14 +198,9 @@ struct MemoDetailView: View { Text(env.preferences.t("文艺衬线", en: "Serif", pl: "Szeryfowa")).tag("serif") Text(env.preferences.t("现代无衬线", en: "Sans", pl: "Bezszeryfowa")).tag("sans") Text(env.preferences.t("极客等宽", en: "Mono", pl: "Monospace")).tag("mono") - Text(env.preferences.t("得意黑", en: "Smiley Sans", pl: "Smiley Sans")).tag("smiley") - Text(env.preferences.t("霞鹜文楷", en: "LXGW WenKai", pl: "LXGW WenKai")).tag("wenkai") - Text(env.preferences.t("朱雀仿宋", en: "Zhuque Fangsong", pl: "Zhuque Fangsong")).tag("zhuque") - Text(env.preferences.t("思源黑体 Heavy", en: "Noto Sans SC Heavy", pl: "Noto Sans SC Heavy")).tag("heavy") - Text(env.preferences.t("普惠体", en: "PuHuiTi", pl: "PuHuiTi")).tag("puhui") - Text(env.preferences.t("普惠体 Heavy", en: "PuHuiTi Heavy", pl: "PuHuiTi Heavy")).tag("puhui-heavy") - Text(env.preferences.t("优设标题黑", en: "YouShe Title", pl: "YouShe Title")).tag("youshe") - Text(env.preferences.t("阿里妈妈数黑体", en: "Alimama ShuHei", pl: "Alimama ShuHei")).tag("shuhei") + ForEach(NoteImageFontCatalog.choices, id: \.id) { font in + Text(env.preferences.t(font.zh, en: font.en, pl: font.en)).tag(font.id) + } } .pickerStyle(.menu) Text(env.preferences.t( diff --git a/apps/ios/EdgeEver/Resources/EditorBundle/index.html b/apps/ios/EdgeEver/Resources/EditorBundle/index.html index 2fe9ea75..3bc5f508 100644 --- a/apps/ios/EdgeEver/Resources/EditorBundle/index.html +++ b/apps/ios/EdgeEver/Resources/EditorBundle/index.html @@ -7,7 +7,7 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />