共享前端能力模块

August 26, 2026 · View on GitHub

状态:现行基础设施

源码范围:public/i18n.jstheme.jstheme-vars.cssstyles.cssmd.jssha256.jsmotion.jsmorphicons-init.jstranscribe-core.js、本地 vendor 目录

1. 模块定位

这些文件提供跨手机、桌面、管理页和插件页共享的基础能力。它们不是某一个页面的业务模块,修改时要特别注意影响面和同步产物。

2. 代码结构

文件功能
i18n.js、各端 i18n翻译初始化、key 查找和占位符替换
theme.jstheme-vars.css四套主题、状态色和主题持久化
styles.css、desktop CSS公共组件、移动/桌面布局和状态样式
md.js先转义再渲染的零依赖 Markdown/GFM 子集
sha256.js浏览器原生 crypto.subtle 校验封装
motion.jsGSAP 本地资源、timeline、列表重排和 reduced-motion
morphicons-init.js本地 Web Component 图标与静态 SVG 回退
transcribe-core.jsPrompt 转写、SSE 解析和增量拼接
vendor/本地 GSAP/Morphicons 静态资源与许可证

3. 当前功能

  • 中英切换和各页面独立命名空间翻译。
  • default/dark/light/neutral 四套主题,状态色独立于主题色。
  • 安全 Markdown:HTML 转义、代码、列表、引用、链接和 GFM 表格。
  • 文件上传 SHA-256 和 Prompt 转写的 SSE 增量处理。
  • 页面/列表进入动效、位置重排、拖拽反馈和 reduced-motion 保护。
  • 图标 Web Component 初始化失败时仍可使用静态 SVG。

4. 具体实现方式

Markdown 必须先 escape 用户内容,再识别标记;链接协议只允许安全协议,不能直接把远端 Markdown 当 HTML 插入。校验使用浏览器原生 crypto.subtle,不能添加第三方 hash 库。

动效使用仓库内本地 GSAP,不从 CDN 加载。所有动效都应允许 prefers-reduced-motion 跳过;布局变化优先 transform/位置重排,不能用持续动画掩盖状态问题。

主题只改变视觉变量,不改变组件位置、协议或交互。图标优先本地 Morphicons,必须保留可读的静态 SVG/文本回退。

5. 制作目的

  • 统一多端视觉和安全行为。
  • 在零新增依赖约束下复用基础能力。
  • 把 XSS、动画性能、图标和翻译等横向风险集中测试。

6. 接口与数据契约

共享基础资源以浏览器全局、脚本加载顺序和约定 key 提供能力,不定义新的 DSH RPC。修改加载方式时,必须同时检查手机、桌面、管理页、插件页和 sync-plugin 文件清单。

7. 边界与禁止事项

  • 不引入 CDN 脚本或新的运行时依赖。
  • 不让主题色承担 success/warning/error 语义。
  • 不用 Emoji 取代既有线性 SVG 图标系统。
  • 不把 Markdown 渲染器改成任意 HTML 直通。
  • 修改根 public/ 后必须同步插件副本。

8. 测试与验收

  • tests/md.test.js:Markdown 转义、链接、代码、表格和安全性。
  • tests/transcribe-core.test.js:密钥掩码、SSE 分帧和增量顺序。
  • tests/network-regression.test.js:图标、GSAP、动效和拖拽契约。
  • tests/plugin-icon.test.js:插件图标边界。
  • UI 改动需检查手机窄屏、桌面宽屏、空状态、长文本、弹窗和 reduced-motion。

9. 修改前检查清单

  • 这是共享能力还是页面业务?是否应放在本模块?
  • 是否存在第三方依赖/CDN 风险?
  • 是否有 XSS、隐私、性能或无障碍影响?
  • 手机、桌面、管理和插件页面是否都加载该资源?
  • 是否更新静态测试和插件同步副本?

10. 未决事项

  • 当前前端资源仍是零构建静态文件;如果未来进行模块化,需要先定义 browser module 加载与插件打包策略。