fix: 按 Halo 应用市场审核意见整改外部资源与隐私(v1.2.5 修订)
- 默认零第三方自动请求:移除 21 个模板的 preconnect/dns-prefetch、PrismJS+autoloader、qrcode-generator 及内置一言/IP 定位 API - 一言与代码高亮配色改为自托管;欢迎弹窗自定义 IP 接口改为 opt-in;微信分享改为复制链接;LightGallery 按 GPLv3 使用 - README 新增「外部资源与隐私」「验证与回归测试」章节,修正无效链接并补充字体 OFL 来源;同步 docs 与修正虚构的目录树 - friends 等 12 处 #strings.substring 加空值保护;logo 由两份 1.5MB 压缩去重为单份 146KB - 新增 pnpm audit:external 与打包前置合规审计;制品补齐 34 个 docs 文档与预览图
This commit is contained in:
1 parent
c0ad7331d4
commit
dda86294b0
36 files changed
+830
-236
No files matched your search
@@ -2,6 +2,24 @@
|
||||
|
||||
## v1.2.5
|
||||
|
||||
### 上架审核整改(v1.2.5 修订)
|
||||
|
||||
- 🔒 **默认零第三方自动请求**:移除全部 21 个模板对 `cdn.jsdelivr.net` 的 `preconnect` / `dns-prefetch`
|
||||
- 🔒 移除文章页 PrismJS 1.29.0、`autoloader`(会按代码语言从 CDN 动态拉取并执行组件)与
|
||||
`qrcode-generator`;代码高亮改由应用市场代码高亮插件 / API 扩展包提供,主题只保留自托管的
|
||||
Warm / Cold token 配色(微信分享改为「复制链接」)
|
||||
- 🔒 一言默认改用内置本地句子库 `assets/data/hitokoto.json`,不再默认请求 `v1.hitokoto.cn`
|
||||
- 🔒 欢迎弹窗默认显示本地静态欢迎语,移除内置的 IP 定位主 / 备选第三方接口;IP 定位改为
|
||||
**管理员显式配置**的可选能力(开启时会向该服务发送访客 IP,需自行披露)
|
||||
- 📄 README 新增「外部资源与隐私」章节(服务名称 / 用途 / 数据类型 / 默认状态 / 关闭方法 /
|
||||
遥测声明)与「验证与回归测试」清单;补充 LXGW WenKai 的 OFL 来源与 LightGallery GPLv3 说明
|
||||
- 🔗 修正上架说明中的无效链接:文档与预览图改为有效绝对地址并随包分发;朋友圈插件链接改为应用市场地址
|
||||
- 🐛 全部 `#strings.substring(..., 0, 1)` 增加空值保护,修复 `friends.html` 作者为空时的字符串越界
|
||||
- 🖼️ `logo.png` 由两份 1024×1024(各约 1.5MB)压缩去重为单份 256×256(约 146KB)
|
||||
- ✅ LightGallery 去掉占位 `licenseKey`,按 GPLv3 开源许可使用,控制台不再出现授权提示
|
||||
- 🧪 新增 `pnpm audit:external` 与打包前置校验:拦截第三方远程加载、预连接、动态加载、
|
||||
README 死链、重复大图;`docs/*.md` 与预览图一并打进安装包
|
||||
|
||||
### 兼容性与元数据
|
||||
|
||||
- ⬆️ Halo 版本要求提升至 **2.27.0+**(页面布局契约、微信读书页面依赖 2.27 的能力)
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
### 代码高亮主题(article_code_theme)
|
||||
|
||||
WarmIsland 使用 Prism.js 实现代码语法高亮,提供两种主题风格:
|
||||
主题不再加载 Prism.js 运行时与 autoloader,**语法高亮由 Halo 应用市场的代码高亮插件或「API 扩展包」服务端高亮输出**。本项只切换主题自托管的两套 `.token` 配色(`assets/vendor/prism-warm.css` / `prism-cold.css`),不产生任何远程请求:
|
||||
|
||||
| 值 | 说明 |
|
||||
| --- | --- |
|
||||
@@ -100,7 +100,7 @@ article_code_theme: warm
|
||||
```
|
||||
|
||||
::: tip
|
||||
代码高亮支持多种编程语言,包括 JavaScript、Python、Java、Go、Rust、YAML、JSON、Bash 等。语言检测基于代码块的语言标记自动完成。
|
||||
支持的语言范围取决于所安装的高亮插件(常见的 JavaScript、Python、Java、Go、Rust、YAML、JSON、Bash 等均可覆盖)。语言识别基于代码块的语言标记,建议始终显式标注。
|
||||
:::
|
||||
|
||||
### 目录展开模式(article_toc_expand)
|
||||
@@ -136,7 +136,7 @@ article_related_title: "猜你喜欢"
|
||||
| 平台 | 说明 |
|
||||
| --- | --- |
|
||||
| QQ | 点击后弹出 QQ 分享窗口,自动携带文章标题和链接 |
|
||||
| 微信 | 扫码分享到微信(生成文章完整 URL 的二维码) |
|
||||
| 微信 | 弹出文章链接并提供「复制链接」按钮,由访客在微信内分享(不加载二维码库) |
|
||||
| 微博 | 分享到新浪微博 |
|
||||
| X (Twitter) | 分享到 X |
|
||||
| Facebook | 分享到 Facebook |
|
||||
@@ -157,7 +157,7 @@ article_related_title: "猜你喜欢"
|
||||
| Telegram | ❌ |
|
||||
|
||||
::: info 图标来源
|
||||
分享按钮图标来自 [Font Awesome](https://fontawesome.com/)(Free v7.2.0,CC BY 4.0 / SIL OFL 1.1 协议)和 [Simple Icons](https://simpleicons.org/)(CC0 协议)。微信图标点击后会弹出二维码弹窗,用户可使用微信扫码分享。
|
||||
分享按钮图标来自 [Font Awesome](https://fontawesome.com/)(Free v7.2.0,CC BY 4.0 / SIL OFL 1.1 协议)和 [Simple Icons](https://simpleicons.org/)(CC0 协议)。微信图标点击后会弹出「复制链接」弹层,用户复制后可在微信内分享;二维码由远程库生成的旧实现已移除,主题不再加载任何第三方脚本。
|
||||
:::
|
||||
|
||||
#### 分享区域标题(article_share_title)
|
||||
@@ -174,7 +174,7 @@ article_share_channels:
|
||||
```
|
||||
|
||||
::: tip
|
||||
分享功能会自动携带文章标题和完整链接,无需手动配置分享内容。微信分享通过二维码实现,二维码内容为文章的完整 URL(包含域名),用户扫码后可直接打开文章。QQ 分享通过弹窗方式打开 QQ 分享页面。移动端会优先显示适合移动端的分享方式。
|
||||
分享功能会自动携带文章标题和完整链接,无需手动配置分享内容。微信分享通过「复制链接」实现:弹层显示文章完整 URL(含域名),点击按钮写入剪贴板,全程在浏览器本地完成、不发送外部请求。QQ 分享通过弹窗方式打开 QQ 分享页面。除访客主动点击外,页面加载时不会访问任何第三方平台。
|
||||
:::
|
||||
|
||||
## 阅读增强功能
|
||||
|
||||
+13
-9
@@ -10,8 +10,8 @@ Hero 首屏是 WarmIsland 主题的标志性区域,占据首页首屏的全部
|
||||
| `hero_title` | 文本 | — | 主标题(留空则使用站点标题) |
|
||||
| `hero_subtitle` | 文本 | — | 副标题(留空则使用站点副标题) |
|
||||
| `hero_description_mode` | 下拉 | `hitokoto` | 描述文案来源:`none` / `hitokoto` / `custom` |
|
||||
| `hero_hitokoto_api` | URL | `https://v1.hitokoto.cn/` | 一言 API 地址 |
|
||||
| `hero_hitokoto_categories` | 多选 | `d, i, k` | 一言句子类型 |
|
||||
| `hero_hitokoto_api` | URL | 留空 | 自定义一言 API;留空使用主题内置本地句子库(零外部请求) |
|
||||
| `hero_hitokoto_categories` | 多选 | `d, i, k` | 句子类型筛选,仅对自定义 API 生效 |
|
||||
| `hero_custom_description` | 多行文本 | — | 自定义描述文案 |
|
||||
| `hero_hitokoto_auto_refresh` | 开关 | `false` | 一言自动刷新 |
|
||||
| `hero_hitokoto_refresh_interval` | 下拉 | `10000` | 一言刷新间隔(秒) |
|
||||
@@ -49,24 +49,28 @@ hero_subtitle: "记录温暖与灵感"
|
||||
| 值 | 说明 |
|
||||
| --- | --- |
|
||||
| `none` | 不显示描述文案 |
|
||||
| `hitokoto` | 从一言 API 实时获取随机句子(默认) |
|
||||
| `hitokoto` | 从主题内置本地句子库随机取一条(默认,零外部请求) |
|
||||
| `custom` | 显示自定义的描述文案 |
|
||||
|
||||
### 一言模式(hitokoto)
|
||||
|
||||
选择 `hitokoto` 模式后,Hero 区域会从一言 API 获取随机句子,每次刷新页面都会展示不同的内容。
|
||||
选择 `hitokoto` 模式后,Hero 区域**默认读取主题内置的本地句子库** `assets/data/hitokoto.json`
|
||||
(随主题自托管的静态 JSON),每次刷新随机展示一条,不依赖任何外部服务,也不会因为第三方接口
|
||||
不可用而出现空白。可直接编辑该 JSON 替换成自己喜欢的句子。
|
||||
|
||||
#### 一言 API 地址(hero_hitokoto_api)
|
||||
#### 自定义一言 API(hero_hitokoto_api)
|
||||
|
||||
默认使用官方 API `https://v1.hitokoto.cn/`。如果你部署了一言的私有实例,可以修改为自建 API 地址。
|
||||
默认**留空**(零外部请求)。如果需要使用在线一言或自建实例,可在此填写 API 地址;
|
||||
填写后浏览器才会向该地址发起 GET 请求,第三方可见访客 IP / User-Agent。
|
||||
请自行评估服务商隐私政策,并在站点隐私说明中披露,详见 README「外部资源与隐私」。
|
||||
|
||||
::: tip
|
||||
自建一言 API 可以提升加载速度并避免第三方服务不稳定的问题。部署方式请参考 [hitokoto 官方文档](https://developer.hitokoto.cn/)。
|
||||
::: warning
|
||||
这是站点管理员主动开启的可选能力。留空即可随时关闭,无需重装主题。
|
||||
:::
|
||||
|
||||
#### 一言句子类型(hero_hitokoto_categories)
|
||||
|
||||
通过勾选来筛选获取的句子类型,支持多选:
|
||||
仅在填写了自定义 API 时生效,用于筛选该接口返回的句子类型,支持多选:
|
||||
|
||||
| 值 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
|
||||
@@ -54,18 +54,36 @@ pnpm build
|
||||
### 打包主题
|
||||
|
||||
```bash
|
||||
pnpm release # 推荐:build → snapshot → package
|
||||
# 或分步:pnpm build && pnpm snapshot && pnpm package
|
||||
pnpm release # 推荐:build → snapshot → package(含合规审计)
|
||||
# 或分步:pnpm build && pnpm snapshot && pnpm audit:external && pnpm package
|
||||
```
|
||||
|
||||
生成 `dist/warm-island-<version>.zip`,可直接在 Halo 后台上传安装。
|
||||
ZIP 根目录直接放 `theme.yaml` / `settings.yaml` / `templates/`,不要额外套一层目录。
|
||||
ZIP 根目录直接放 `theme.yaml` / `settings.yaml` / `templates/`,不要额外套一层目录;
|
||||
`docs/*.md` 与预览图也会一并打包,保证上架说明里的引用在制品中真实存在。
|
||||
|
||||
> **`templates/` 被 `.gitignore` 忽略**,克隆仓库后默认不存在。若跳过 `pnpm build`
|
||||
> 直接 `pnpm package`,过去会产出不含任何模板的空壳包,上传后 Halo 报
|
||||
> `Template index was not found.` 并让首页 404。现在打包脚本会先校验
|
||||
> `index.html` 等模板、资源目录与版本号,不满足即报错退出。
|
||||
|
||||
### 上架合规审计
|
||||
|
||||
`scripts/audit-external.mjs`(`pnpm audit:external`)在打包前自动执行,对应应用市场审核指南
|
||||
1.4 / 4.4.4 / 4.6 / 5.1,检查:
|
||||
|
||||
- 模板中不含第三方 `preconnect` / `dns-prefetch` / `preload`
|
||||
- 不含 `src` / `href` 指向 http(s) 的远程脚本、样式、图片、媒体
|
||||
- 不含硬编码的外部 `fetch()` / 动态 `import()` / CSS `url(https://...)`,
|
||||
也不含 Prism autoloader 之类的动态加载痕迹与被移除的服务域名
|
||||
- README 中的相对链接都能在安装包清单里找到对应文件
|
||||
- `templates/logo.png` 不存在(只允许一份压缩后的 `templates/assets/logo.png`)
|
||||
|
||||
任一不通过,`pnpm package` 直接 `exit 1`,避免打出不合规制品。
|
||||
`<a href="https://...">` 这类需要访客主动点击的外链是允许的,但必须在 README
|
||||
「外部资源与隐私」章节逐项披露。新增第三方资源时,请先自托管到 `public/assets/`
|
||||
并在 README 的许可表中登记来源与协议。
|
||||
|
||||
## 性能与滚动顺滑
|
||||
|
||||
首页滚动曾经卡顿,根因不是 DOM 数量,而是「每帧高成本绘制 + 劫持滚动输入」:
|
||||
@@ -98,60 +116,36 @@ ZIP 根目录直接放 `theme.yaml` / `settings.yaml` / `templates/`,不要额
|
||||
|
||||
## 项目结构
|
||||
|
||||
以下按磁盘实际文件列出(`src/pages/` 下每个 `.astro` 对应一个输出模板,共 21 个):
|
||||
|
||||
```
|
||||
WarmIsland/
|
||||
├── src/ # 源代码
|
||||
│ ├── components/ # Astro 组件
|
||||
│ │ ├── HeroSection.astro # Hero 首屏
|
||||
│ │ ├── PostCard.astro # 文章卡片
|
||||
│ │ ├── Pagination.astro # 分页组件
|
||||
│ │ ├── TableOfContents.astro # 目录组件
|
||||
│ │ ├── ReadingProgress.astro # 阅读进度条
|
||||
│ │ ├── LikeButton.astro # 点赞按钮
|
||||
│ │ ├── CommentSection.astro # 评论区
|
||||
│ │ ├── Footer.astro # 页脚
|
||||
│ │ └── ...
|
||||
│ ├── layouts/ # 布局组件
|
||||
│ │ ├── BaseLayout.astro # 基础布局
|
||||
│ │ └── PostLayout.astro # 文章布局
|
||||
│ ├── lib/ # 工具库
|
||||
│ │ ├── pages.ts # 页面路由定义
|
||||
│ │ └── utils.ts # 工具函数
|
||||
│ ├── pages/ # 页面入口
|
||||
│ │ ├── index.astro # 首页
|
||||
│ │ ├── post.astro # 文章详情
|
||||
│ │ ├── archives.astro # 归档
|
||||
│ │ ├── categories.astro # 分类
|
||||
│ │ ├── tags.astro # 标签
|
||||
│ │ ├── moments.astro # 瞬间
|
||||
│ │ ├── photos.astro # 图库
|
||||
│ │ ├── links.astro # 友情链接
|
||||
│ │ ├── friends.astro # 朋友圈
|
||||
│ │ ├── page.astro # 自定义页面
|
||||
│ │ ├── page_messageboard.astro # 留言板
|
||||
│ │ ├── douban.astro # 豆瓣
|
||||
│ │ ├── equipments.astro # 装备
|
||||
│ │ ├── footprints.astro # 足迹
|
||||
│ │ └── steam.astro # Steam
|
||||
│ └── styles/ # 样式文件
|
||||
│ ├── main.scss # 主样式入口
|
||||
│ ├── _variables.scss # SCSS 变量
|
||||
│ ├── _colors.scss # 颜色定义
|
||||
│ ├── _typography.scss # 排版
|
||||
│ ├── _spacing.scss # 间距
|
||||
│ ├── _animations.scss # 动画
|
||||
│ ├── _mixins.scss # 混入
|
||||
│ └── components/ # 组件样式
|
||||
├── templates/ # Thymeleaf 模板(构建输出)
|
||||
├── public/ # 静态资源
|
||||
│ └── assets/ # 编译后的 CSS/JS
|
||||
├── docs/ # 文档
|
||||
├── theme.yaml # 主题元信息
|
||||
├── settings.yaml # 主题设置定义
|
||||
├── astro.config.mjs # Astro 配置
|
||||
├── package.json # 项目依赖
|
||||
├── tsconfig.json # TypeScript 配置
|
||||
└── vite.config.ts # Vite 配置
|
||||
├── src/
|
||||
│ ├── components/ # 18 个组件:Navbar / Footer / HeroSection / WelcomePopup /
|
||||
│ │ # LightGallery / ClickEffect / ScrollReveal / ThemeSwitcher 等
|
||||
│ ├── layouts/ # Layout.astro(含页面布局契约渲染模式)
|
||||
│ ├── pages/ # index / post / page / archives / categories / category /
|
||||
│ │ # tags / tag / links / friends / moments / moment / photos /
|
||||
│ │ # douban / equipments / important-dates / steam / weread /
|
||||
│ │ # page_messageboard / page_subscriptions / layout
|
||||
│ └── styles/ # main.scss + 12 个 _*.scss 片段
|
||||
├── public/
|
||||
│ ├── assets/
|
||||
│ │ ├── data/ # hitokoto.json 内置本地句子库
|
||||
│ │ ├── fonts/ # LXGW WenKai 本地 woff2 分片与 result.css
|
||||
│ │ ├── vendor/ # 自托管 prism-warm.css / prism-cold.css
|
||||
│ │ └── logo.png # 主题图标(唯一一份,256×256 压缩版)
|
||||
│ ├── error/ # 错误页静态资源
|
||||
│ └── favicon.ico
|
||||
├── compat/assets/ # 历史版本哈希静态资源,构建时合并进 templates/assets
|
||||
├── scripts/ # postbuild / snapshot-assets / package / audit-external / smoke-clickfx
|
||||
├── docs/ # VitePress 文档站(*.md 随安装包分发)
|
||||
├── templates/ # 构建产物(被 .gitignore 忽略)
|
||||
├── dist/ # ZIP 安装包(被 .gitignore 忽略)
|
||||
├── theme.yaml # 主题清单与自定义页面模板注册
|
||||
├── settings.yaml # 后台设置项定义
|
||||
├── astro.config.mjs / package.json / pnpm-lock.yaml / tsconfig.json
|
||||
└── WarmIsland Preview.webp
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
@@ -170,7 +164,8 @@ WarmIsland/
|
||||
|------|------|
|
||||
| [SCSS](https://sass-lang.com/) | 样式预处理,CSS 变量驱动的配色系统 |
|
||||
| 原生 JavaScript | 滚动、菜单、主题切换、无限滚动等交互,无前端框架运行时 |
|
||||
| [LightGallery](https://www.lightgalleryjs.com/) | 图片灯箱(可选) |
|
||||
| [LightGallery](https://www.lightgalleryjs.com/) 2.9.0(GPLv3) | 图片灯箱,默认内置;安装 lightgallery.js 插件后自动让位 |
|
||||
| [LXGW WenKai](https://github.com/lxgw/LxgwWenKai)(OFL 1.1) | 本地字体分片,随主题自托管,无远程字体请求 |
|
||||
| Halo 插件生态 | 评论、代码高亮、服务端字数统计等由 Halo 与可选插件提供 |
|
||||
|
||||
### 构建工具
|
||||
|
||||
+22
-7
@@ -120,11 +120,24 @@ v1.2.1 起安装包会保留各版本的哈希资源(v1.1.7 之后全部覆盖
|
||||
|
||||
安装并启用插件后,页面会自动显示内容。未安装插件时页面会显示友好的提示信息。
|
||||
|
||||
### 一言 API 加载失败?
|
||||
### 主题会向第三方服务发请求吗?
|
||||
|
||||
1. 检查网络是否能访问 `https://v1.hitokoto.cn/`
|
||||
2. 如果在国内服务器,可能存在网络延迟
|
||||
3. 可以在主题设置中更换一言 API 地址为自建镜像
|
||||
**默认不会。** 所有脚本、样式、字体、图标、主题 Logo 与一言句子库都随主题自托管,
|
||||
页面不预连接任何 CDN,也不加载远程脚本。只有两类例外:
|
||||
|
||||
1. 访客**主动点击**分享按钮 / 备案链接 / 应用市场链接时才跳转到对应站点;
|
||||
2. 站点管理员在主题设置里**显式填写**了「自定义一言 API」或「自定义 IP 定位 API」——
|
||||
后者会把访客 IP 发送给该服务,请在站点隐私说明中披露。
|
||||
|
||||
完整逐项说明见 README 的「外部资源与隐私」章节。发版前可运行 `pnpm audit:external` 复核。
|
||||
|
||||
### 一言不显示,或想换成自己的句子?
|
||||
|
||||
1. 主题默认读取内置的 `assets/data/hitokoto.json` 本地句子库,不依赖外部服务;
|
||||
直接编辑该文件即可替换文案
|
||||
2. 想继续使用在线一言,可在主题设置 → Hero 首屏 → 填写「自定义一言 API」;
|
||||
此时才会产生外部请求,且「句子类型」筛选仅对自定义 API 生效
|
||||
3. 若选择「自定义」模式,请在「自定义描述文案」中填写内容
|
||||
|
||||
### 文章目录不显示?
|
||||
|
||||
@@ -135,9 +148,11 @@ v1.2.1 起安装包会保留各版本的哈希资源(v1.1.7 之后全部覆盖
|
||||
|
||||
### 代码高亮不生效?
|
||||
|
||||
1. 确认代码块使用了正确的语言标记(如 \`\`\`python)
|
||||
2. Prism.js 支持自动语言检测,但部分语言需要手动标记
|
||||
3. 检查浏览器控制台是否有 Prism.js 加载错误
|
||||
主题**不再自带 Prism.js 运行时**(含 autoloader),因此不会自动给代码块加语法着色:
|
||||
|
||||
1. 安装 Halo 应用市场的代码高亮插件,或启用「API 扩展包」的服务端代码高亮
|
||||
2. 主题设置 → 文章 → 「代码高亮主题」仅切换本地自托管的 Warm / Cold `.token` 配色
|
||||
3. 确认代码块使用了正确的语言标记(如 \`\`\`python),以便插件识别语言
|
||||
|
||||
## 样式相关
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ WarmIsland(暖屿)是一款为 [Halo](https://halo.run) 打造的博客主
|
||||
进入 **Hero 首屏** 设置:
|
||||
|
||||
- 设置主标题和副标题
|
||||
- 选择描述文案来源(一言/自定义/无)
|
||||
- 选择描述文案来源(一言 / 自定义 / 无);「一言」默认读取主题内置的本地句子库,不请求外部服务
|
||||
- 可选上传背景图片
|
||||
|
||||
### 第五步:页脚信息
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
- **文章目录** — 桌面端侧边悬浮 + 移动端底部抽屉,支持展开模式选项
|
||||
- **阅读进度条** — 实时显示阅读进度
|
||||
- **代码高亮** — Prism.js 支持,Warm / Cold 双主题
|
||||
- **代码高亮** — 由代码高亮插件 / API 扩展包输出,主题提供 Warm / Cold 本地配色,不加载远程脚本
|
||||
- **图片灯箱** — 点击放大,支持左右切换
|
||||
- **图片懒加载** — blur-up 渐显效果,优化加载体验
|
||||
- **点赞功能** — 一键点赞,状态持久化
|
||||
@@ -71,7 +71,7 @@
|
||||
|
||||
### ⚙️ 灵活配置
|
||||
|
||||
13 个配置分组,覆盖站点的方方面面:
|
||||
17 个配置分组、120 余个配置项,覆盖站点的方方面面:
|
||||
|
||||
- 基础信息、样式、导航栏、Hero 首屏
|
||||
- 首页、文章、瞬间、图库、友情链接
|
||||
@@ -81,13 +81,12 @@
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **Astro** — 静态站点生成器,编译模板
|
||||
- **vite-plugin-halo-theme** — Halo 主题 Vite 插件
|
||||
- **Astro 6** — 构建输出 Thymeleaf 模板
|
||||
- **Thymeleaf** — Halo 使用的服务端模板引擎
|
||||
- **Vue 3** — 部分交互组件(搜索、主题切换、光感跟随)
|
||||
- **SCSS** — CSS 预处理器
|
||||
- **Prism.js** — 代码语法高亮
|
||||
- **LightGallery** — 图片灯箱
|
||||
- **原生 JavaScript + SCSS** — 交互与样式(无 Vue / 无远程运行时)
|
||||
- **LightGallery 2.9.0(GPLv3)** — 图片灯箱,随构建自托管打包
|
||||
- **LXGW WenKai(OFL 1.1)** — 本地字体分片,无远程字体请求
|
||||
- **代码高亮** — 交由 Halo 应用市场插件提供,主题只自托管配色 CSS
|
||||
|
||||
## 适用场景
|
||||
|
||||
|
||||
+8
-3
@@ -34,10 +34,15 @@
|
||||
|
||||
## 代码高亮
|
||||
|
||||
使用 Prism.js 实现代码块语法高亮,支持自动语言检测。可在主题设置中选择两种主题:
|
||||
主题**不再自带 Prism.js 运行时**(含按语言从 CDN 动态加载组件的 autoloader)。语法高亮由
|
||||
Halo 应用市场的代码高亮插件或「API 扩展包」服务端高亮输出,主题只提供两套自托管的
|
||||
`.token` 配色,在「主题设置 → 文章 → 代码高亮主题」中切换:
|
||||
|
||||
- **Warm**:浅色代码高亮,与暖色调设计一致
|
||||
- **Cold**:深色代码高亮(Tomorrow Night),适合代码密集型文章
|
||||
- **Warm**:浅色代码高亮,与暖色调设计一致(默认)
|
||||
- **Cold**:深色代码高亮(Tomorrow 风格),适合代码密集型文章
|
||||
|
||||
未安装高亮插件时,代码块仍以等宽字体正常显示,只是没有语法着色;主题不会因此报错,
|
||||
也不会发起任何外部请求。
|
||||
|
||||
## 图片灯箱
|
||||
|
||||
|
||||
Reference in new issue
Block a user