diff --git a/public/assets/ark-library/media/svg/community.svg b/public/assets/ark-library/media/svg/community.svg index 1d013b2..14e19f1 100644 --- a/public/assets/ark-library/media/svg/community.svg +++ b/public/assets/ark-library/media/svg/community.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/directory.svg b/public/assets/ark-library/media/svg/directory.svg index 6a15d0a..6104944 100644 --- a/public/assets/ark-library/media/svg/directory.svg +++ b/public/assets/ark-library/media/svg/directory.svg @@ -1,14 +1,9 @@ - - - + + - - - - - - - - + + + + diff --git a/public/assets/ark-library/media/svg/education.svg b/public/assets/ark-library/media/svg/education.svg index 3627fda..16c087f 100644 --- a/public/assets/ark-library/media/svg/education.svg +++ b/public/assets/ark-library/media/svg/education.svg @@ -1,19 +1,9 @@ - - - - + + - - - - - - - - - - - - + + + + diff --git a/public/assets/ark-library/media/svg/educational-clips.svg b/public/assets/ark-library/media/svg/educational-clips.svg index b21a857..04923f3 100644 --- a/public/assets/ark-library/media/svg/educational-clips.svg +++ b/public/assets/ark-library/media/svg/educational-clips.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/everyday-class.svg b/public/assets/ark-library/media/svg/everyday-class.svg index 7fe1344..0dea40e 100644 --- a/public/assets/ark-library/media/svg/everyday-class.svg +++ b/public/assets/ark-library/media/svg/everyday-class.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/general.svg b/public/assets/ark-library/media/svg/general.svg index 4095e09..74ef72e 100644 --- a/public/assets/ark-library/media/svg/general.svg +++ b/public/assets/ark-library/media/svg/general.svg @@ -1,14 +1,9 @@ - - - - + + - - - - - - - + + + + diff --git a/public/assets/ark-library/media/svg/gift.svg b/public/assets/ark-library/media/svg/gift.svg index 4716bb2..b62ec57 100644 --- a/public/assets/ark-library/media/svg/gift.svg +++ b/public/assets/ark-library/media/svg/gift.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/global-news.svg b/public/assets/ark-library/media/svg/global-news.svg index e82441f..11b1de8 100644 --- a/public/assets/ark-library/media/svg/global-news.svg +++ b/public/assets/ark-library/media/svg/global-news.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/guidelines.svg b/public/assets/ark-library/media/svg/guidelines.svg index 563d982..64f162d 100644 --- a/public/assets/ark-library/media/svg/guidelines.svg +++ b/public/assets/ark-library/media/svg/guidelines.svg @@ -1,24 +1,9 @@ - - - - - - + + - - - - - - - - - - - - - - - + + + + diff --git a/public/assets/ark-library/media/svg/news-record.svg b/public/assets/ark-library/media/svg/news-record.svg index 4e93c95..b42debe 100644 --- a/public/assets/ark-library/media/svg/news-record.svg +++ b/public/assets/ark-library/media/svg/news-record.svg @@ -1,9 +1,9 @@ - - + + - - - - + + + + diff --git a/public/assets/ark-library/media/svg/official-announcement.svg b/public/assets/ark-library/media/svg/official-announcement.svg index e914d80..3d7f572 100644 --- a/public/assets/ark-library/media/svg/official-announcement.svg +++ b/public/assets/ark-library/media/svg/official-announcement.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/poster.svg b/public/assets/ark-library/media/svg/poster.svg index cda56eb..9192b84 100644 --- a/public/assets/ark-library/media/svg/poster.svg +++ b/public/assets/ark-library/media/svg/poster.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/project-details.svg b/public/assets/ark-library/media/svg/project-details.svg index 43be767..1d8c819 100644 --- a/public/assets/ark-library/media/svg/project-details.svg +++ b/public/assets/ark-library/media/svg/project-details.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/public/assets/ark-library/media/svg/videos.svg b/public/assets/ark-library/media/svg/videos.svg index 888e487..e45eb0a 100644 --- a/public/assets/ark-library/media/svg/videos.svg +++ b/public/assets/ark-library/media/svg/videos.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/src/components/RecommendedCard.tsx b/src/components/RecommendedCard.tsx index e6db749..35eb1ff 100644 --- a/src/components/RecommendedCard.tsx +++ b/src/components/RecommendedCard.tsx @@ -4,6 +4,7 @@ import type { Resource } from "../api"; import { assetUrl } from "../api"; import { useI18n } from "../i18n"; import { useMemo, useState } from "react"; +import { cleanCategoryDisplayName } from "../utils/categoryDisplay"; import { formatDateYmd } from "../utils/format"; import { officialRecommendationCoverFallbacks } from "./FigmaBanner"; import { @@ -46,12 +47,10 @@ export function RecommendedCard({ } return assetUrl(original); }, [figmaCover, r.coverImage, r.previewUrl, useFigmaDesign]); - const displayTitle = useFigmaDesign - ? "ARK 2026「共识加速计划」 🚀 邀请王霸榜 · 重磅回归" - : r.title; - const displayCategoryName = useFigmaDesign ? "项目资料" : r.categoryName; - const dateStr = useFigmaDesign ? "2026-04-10" : formatDateYmd(r.updatedAt); - const dateTime = useFigmaDesign ? "2026-04-10" : r.updatedAt; + const displayTitle = r.title; + const displayCategoryName = cleanCategoryDisplayName(r.categoryName); + const dateStr = formatDateYmd(r.updatedAt); + const dateTime = r.updatedAt; const dl = r.isDownloadable && (r.fileUrl || r.previewUrl) @@ -68,7 +67,11 @@ export function RecommendedCard({ ) : ( diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx index 468ef1d..d5507f2 100644 --- a/src/pages/Home/index.tsx +++ b/src/pages/Home/index.tsx @@ -13,36 +13,35 @@ import { SectionHeader } from "../../components/SectionHeader"; import { MessageBubble } from "../../components/messageStream/MessageBubble"; import { langQuery, useI18n } from "../../i18n"; import { sourceLanguageQuery } from "../../i18nLanguages"; -import { categoryCardLines } from "../../utils/categoryDisplay"; +import { cleanCategoryDisplayName } from "../../utils/categoryDisplay"; import { postToResource, type PostBackedResource, } from "../../utils/postResourceAdapter"; import type { Post } from "../../types/post"; -const FIGMA_CATEGORY_LABELS: Record = { - "project-ppt": "项目资料", - "daily-class": "每日课堂", - "official-announcement": "官方公告", - "academy-materials": "学堂教育", - "global-evangelism": "全球布道", - "daily-poster": "每日海报", - "community-tweets": "社群动向", - "video-hub": "视频汇总", - "subsidy-policy": "补贴政策", -}; - -const FIGMA_CATEGORY_ORDER = Object.keys(FIGMA_CATEGORY_LABELS); +const FIGMA_CATEGORY_ORDER = [ + "project-ppt", + "daily-class", + "official-announcement", + "academy-materials", + "global-evangelism", + "daily-poster", + "community-tweets", + "video-hub", + "subsidy-policy", + "how-to", + "official-assets", + "media-coverage", + "academy-video", + "general", +]; function figmaCategoryRank(category: Category): number { const index = FIGMA_CATEGORY_ORDER.indexOf(category.slug); return index === -1 ? FIGMA_CATEGORY_ORDER.length : index; } -function figmaCategoryName(category: Category): string { - return FIGMA_CATEGORY_LABELS[category.slug] ?? category.name; -} - export function Home() { const { t, lang } = useI18n(); const [cats, setCats] = useState([]); @@ -199,7 +198,7 @@ export function Home() {
- {figmaCategoryName(c)} + {cleanCategoryDisplayName(c.name)}
))} @@ -247,32 +246,22 @@ export function Home() {
- {figmaOrderedCategories.map((c) => { - const { line1, line2 } = categoryCardLines(figmaCategoryName(c)); - return ( - - -
-
- {line1} -
- {line2 ? ( -
- {line2} -
- ) : null} -
- - ); - })} + {figmaOrderedCategories.map((c) => ( + + +
+ {cleanCategoryDisplayName(c.name)} +
+ + ))}
diff --git a/src/utils/categoryDisplay.test.ts b/src/utils/categoryDisplay.test.ts index 71bc226..56b6a5b 100644 --- a/src/utils/categoryDisplay.test.ts +++ b/src/utils/categoryDisplay.test.ts @@ -1,5 +1,13 @@ import { describe, expect, it } from "vitest"; -import { categoryCardLines } from "./categoryDisplay"; +import { categoryCardLines, cleanCategoryDisplayName } from "./categoryDisplay"; + +describe("cleanCategoryDisplayName", () => { + it("removes parenthetical suffixes used as backend qualifiers", () => { + expect(cleanCategoryDisplayName("官方公告(繁中)")).toBe("官方公告"); + expect(cleanCategoryDisplayName("Tutorials (EN)")).toBe("Tutorials"); + expect(cleanCategoryDisplayName("补贴政策\r")).toBe("补贴政策"); + }); +}); describe("categoryCardLines", () => { it("splits Chinese and ASCII parenthetical subtitles", () => { diff --git a/src/utils/categoryDisplay.ts b/src/utils/categoryDisplay.ts index adf0c2e..0f90861 100644 --- a/src/utils/categoryDisplay.ts +++ b/src/utils/categoryDisplay.ts @@ -1,3 +1,10 @@ +export function cleanCategoryDisplayName(name: string): string { + return name + .replace(/\s*[((][^()()]*[))]\s*/g, " ") + .replace(/\s+/g, " ") + .trim(); +} + /** Split display name into title + parenthetical subtitle (matches design cards). */ export function categoryCardLines( name: string,