FIT2CLOUD
评论组件 Next 的图标

评论组件 Next

312
124

为 Halo 提供现代化评论体验,支持富文本评论、图片上传、验证码、表情回应、举报、黑灰名单、精选/置顶、评论徽章与 AI 助手。

评论组件 Next

评论组件 Next 是为 Halo 打造的下一代评论系统,提供更现代的评论框、评论列表、互动能力和后台管理能力。它不仅支持富文本评论、图片上传、表情包、私密评论、评论精选/置顶、举报、黑灰名单、验证码和徽章体系,也可以结合 Halo AI Foundation 提供 AI 写作、@AI 自动回复、AI 自动回复管理和 AI 恶意评论拦截。

UI 部分基于 Svelte Web Component 构建,由插件自动注入到 Halo 主题的评论位中使用。

img.png

🌐 演示与交流

功能特性

  • 富文本评论框:支持图片上传、表情包、私密评论、移动端适配和主题 CSS 变量定制。
  • 评论互动增强:支持文章表情回应、评论/回复表情回应、评论精选、评论置顶、用户徽章和评论举报。
  • 图片上传:支持 Halo 附件库和 ImgBB,可分别配置登录用户与未登录用户的上传方式、大小限制和安全拦截。
  • 验证码:支持图片验证码、GeeTest、ALTCHA 和 Cap,统一在提交评论时弹出验证。
  • 安全管理:支持 IP、邮箱、用户名、关键词、域名、UA 的黑名单/灰名单规则,支持精确、包含和正则匹配。
  • AI 能力:支持 AI 写作助手、@AI 自动回复、AI 自动回复候选审核、AI 恶意评论识别和拦截通知。
  • 后台管理:提供评论表情、举报记录、AI 回复管理、AI 拦截记录、黑灰名单、徽章设置等控制台菜单。

配置概览

插件安装后,可在插件设置中按模块配置:

  • 基本设置:评论分页、回复分页、回复预加载、评论者设备信息、私密评论。
  • 图片上传:支持 Halo 附件库和 ImgBB,可分别设置登录用户与未登录用户的上传方式、大小限制和上传限流。
  • 验证码:支持字母数字、算术验证码、GeeTest、ALTCHA 和 Cap,统一在提交评论时弹出验证。
  • 表情回应:支持文章、评论、回复的表情回应,并可分别配置 emoji 或图片回应项。
  • 举报设置:支持评论和回复举报,可设置达到举报阈值后自动进入待审核。
  • AI 助手:支持 AI 写作助手、@AI 自动回复、AI 自动回复管理、AI 提示词配置和 AI 恶意评论识别。
  • 徽章设置:支持首评徽章、管理员徽章、自定义徽章规则和用户徽章展示。

可选依赖

  • AI 相关功能依赖 Halo AI Foundation。未安装或未启用时,普通评论、上传、验证码、举报、黑灰名单等功能不受影响。
  • GeeTest、Cap、ImgBB 需要站长自行准备对应服务或密钥。
  • Halo 附件库上传需要在插件设置中选择存储策略和存储组。

使用方式

  1. 下载:访问 Releases 下载 Assets 中的 JAR 文件。
  2. 安装,插件安装和更新方式可参考:https://docs.halo.run/user-guide/plugins

需要注意的是,此插件需要主题进行适配,不会主动在内容页加载评论组件。

后台菜单

插件会在 Halo 控制台的评论菜单下增加以下管理入口:

  • 评论徽章
  • 评论表情
  • 精选评论
  • AI 拦截记录
  • 举报记录
  • AI 回复管理
  • 黑灰名单

开发环境

git clone git@github.com:acanyo/plugin-comment-next.git

# 或者当你 fork 之后

git clone git@github.com:{your_github_id}/plugin-comment-next.git
cd path/to/plugin-comment-next
./gradlew pnpmInstall

# 启动一个 Docker 容器作为开发环境并自动加载此插件
./gradlew haloServer

Halo 插件的详细开发文档可查阅 插件开发

主题适配

接入

评论组件 Next 实现的是 Halo 的 comment-widget 扩展点。启用插件后,插件会自动向主题页面注入 comment-next.csscomment-next.iife.js,主题只需要在文章页、独立页面的评论位置渲染 Halo 评论标签。

插件自己的前台标签是 <comment-widget>,但它由 Halo 的 <halo:comment /> 扩展点自动渲染出来。常规主题适配时推荐写 <halo:comment />,这样可以继续遵循 Halo 的评论启用状态、内容类型和插件扩展点机制。

文章页示例:

<div th:if="${haloCommentEnabled}">
  <halo:comment
    group="content.halo.run"
    kind="Post"
    th:attr="name=${post.metadata.name}"
  />
</div>

独立页面示例:

<div th:if="${haloCommentEnabled}">
  <halo:comment
    group="content.halo.run"
    kind="SinglePage"
    th:attr="name=${singlePage.metadata.name}"
  />
</div>

如果主题没有渲染 <halo:comment />,评论组件不会出现在内容页。更多标签说明可参考 Halo 官方文档:自定义标签

自定义样式

评论组件 Next 会优先读取 --halo-cw-* 变量,这套变量和 Halo 评论组件常用主题变量保持一致。主题如果已经定义了这些变量,评论组件会自动继承;如果需要进一步定制,也可以在主题 CSS 中覆盖这些变量。

建议优先使用以下稳定变量:

变量名 描述
--halo-cw-primary-1-color 主要的主题色,用于按钮背景,输入框边框等
--halo-cw-primary-2-color 较浅的主题色
--halo-cw-primary-3-color 最浅的主题色
--halo-cw-text-1-color 主要文本颜色,用于标题、正文等
--halo-cw-text-2-color 次要文本颜色
--halo-cw-text-3-color 辅助文本颜色
--halo-cw-muted-1-color 弱化色,用于边框、分割线、背景等辅助元素
--halo-cw-muted-2-color 更浅的弱化色
--halo-cw-muted-3-color 最浅的弱化色
--halo-cw-base-rounded 基础圆角大小
--halo-cw-avatar-rounded 头像圆角大小
--halo-cw-avatar-size 头像尺寸
--halo-cw-base-font-size 基础字体大小
--halo-cw-base-font-family 基础字体族

示例:

:root {
  --halo-cw-primary-1-color: #2563eb;
  --halo-cw-primary-2-color: #bfdbfe;
  --halo-cw-primary-3-color: #eff6ff;

  --halo-cw-text-1-color: #172033;
  --halo-cw-text-2-color: #64748b;
  --halo-cw-text-3-color: #94a3b8;

  --halo-cw-muted-1-color: #d5dde7;
  --halo-cw-muted-2-color: #e7ecf2;
  --halo-cw-muted-3-color: #ffffff;

  --halo-cw-base-rounded: 0.875rem;
  --halo-cw-avatar-rounded: 9999px;
  --halo-cw-avatar-size: 36px;
  --halo-cw-base-font-size: 1rem;
  --halo-cw-base-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
更细粒度的变量

如果主题需要精细控制评论框、弹层、徽章、AI 面板、精选/置顶标识等细节,可以继续覆盖 --comment-next-* 变量。此类变量更贴近组件内部实现,后续版本可能会调整,主题适配时优先使用 --halo-cw-*

:root {
  --comment-next-bg-color: #ffffff;
  --comment-next-text-color: #172033;
  --comment-next-muted-color: #64748b;
  --comment-next-border-color: #d5dde7;
  --comment-next-radius-lg: 0.875rem;
  --comment-next-reaction-hover-bg-color: rgb(239 246 255 / 0.68);
  --comment-next-pinned-pill-bg-color: #fef3c7;
  --comment-next-featured-pill-bg-color: #ccfbf1;
}
旧变量迁移

评论组件 Next 不建议继续使用 --halo-comment-widget-* 这类旧变量。主题侧如果仍然保留旧变量,建议迁移到 --halo-cw-*

变量名 描述 备注
--halo-comment-widget-base-color 基础文字颜色 已废弃,后续使用 --halo-cw-text-1-color 代替
--halo-comment-widget-base-info-color 非重要突出文字 已废弃,后续使用 --halo-cw-muted-*-color 代替
--halo-comment-widget-base-border-radius 基础元素的圆角 已废弃,后续使用 --halo-cw-base-rounded 代替
--halo-comment-widget-base-font-size 基础字体大小 已废弃,后续使用 --halo-cw-base-font-size 代替
--halo-comment-widget-base-line-height 基础行高 已废弃
--halo-comment-widget-base-font-family 基础字体族 已废弃,后续使用 --halo-cw-base-font-family 代替
--halo-comment-widget-component-avatar-rounded 头像的圆角大小 已废弃,后续使用 --halo-cw-avatar-rounded 代替
--halo-comment-widget-component-avatar-size 头像大小 已废弃,后续使用 --halo-cw-avatar-size 代替
--halo-comment-widget-component-form-input-bg-color 表单输入背景颜色 已废弃
--halo-comment-widget-component-form-input-color 表单输入文字颜色 已废弃
--halo-comment-widget-component-form-input-border-color 表单输入边框颜色 已废弃
--halo-comment-widget-component-form-input-border-color-focus 表单输入焦点时边框颜色 已废弃,后续使用 --halo-cw-primary-1-color 代替
--halo-comment-widget-component-form-input-box-shadow-focus 表单输入焦点时的阴影 已废弃,后续使用 --halo-cw-primary-2-color 代替
--halo-comment-widget-component-form-button-login-bg-color 登录按钮背景颜色 已废弃
--halo-comment-widget-component-form-button-login-bg-color-hover 登录按钮悬停背景颜色 已废弃
--halo-comment-widget-component-form-button-login-border-color 登录按钮边框颜色 已废弃
--halo-comment-widget-component-form-button-submit-bg-color 提交按钮背景颜色 已废弃,后续使用 --halo-cw-primary-1-color 代替
--halo-comment-widget-component-form-button-submit-color 提交按钮文字颜色 已废弃
--halo-comment-widget-component-form-button-submit-border-color 提交按钮边框颜色 已废弃
--halo-comment-widget-component-form-button-submit-border-color-hover 提交按钮悬停边框颜色 已废弃,后续使用 --halo-cw-primary-3-color 代替
--halo-comment-widget-component-form-button-emoji-color 表情按钮颜色 已废弃
--halo-comment-widget-component-comment-item-action-bg-color-hover 评论项操作悬停背景颜色 已废弃
--halo-comment-widget-component-comment-item-action-color-hover 评论项操作悬停颜色 已废弃
--halo-comment-widget-component-pagination-button-bg-color-hover 分页按钮悬停背景颜色 已废弃
--halo-comment-widget-component-pagination-button-bg-color-active 分页按钮活动状态背景颜色 已废弃
--halo-comment-widget-component-pagination-button-border-color-active 分页按钮活动状态边框颜色 已废弃
--halo-comment-widget-component-emoji-picker-rgb-color 表情选择器颜色 已废弃
--halo-comment-widget-component-emoji-picker-rgb-accent 表情选择器强调颜色 已废弃
--halo-comment-widget-component-emoji-picker-rgb-background 表情选择器背景颜色 已废弃
--halo-comment-widget-component-emoji-picker-rgb-input 表情选择器输入颜色 已废弃
--halo-comment-widget-component-emoji-picker-color-border 表情选择器边框颜色 已废弃
--halo-comment-widget-component-emoji-picker-color-border-over 表情选择器悬停边框颜色 已废弃

配色切换方案

评论组件 Next 内置了明亮、深色和跟随系统三种模式。主题只需要在 htmlbody 上添加 class 或 data-color-scheme,组件会自动切换对应配色。

可用 class:

  • color-scheme-auto:跟随系统。
  • color-scheme-dark / dark:强制深色。
  • color-scheme-light / light:强制明亮。

可用 data-color-scheme

  • data-color-scheme="auto":跟随系统。
  • data-color-scheme="dark":强制深色。
  • data-color-scheme="light":强制明亮。

示例:

@media (prefers-color-scheme: dark) {
  .color-scheme-auto,
  [data-color-scheme="auto"] {
    color-scheme: dark;

    --halo-cw-primary-1-color: #93c5fd;
    --halo-cw-primary-2-color: #60a5fa;
    --halo-cw-primary-3-color: #1e3a8a;

    --halo-cw-text-1-color: #f4f4f5;
    --halo-cw-text-2-color: #a1a1aa;
    --halo-cw-text-3-color: #71717a;

    --halo-cw-muted-1-color: #52525b;
    --halo-cw-muted-2-color: #3f3f46;
    --halo-cw-muted-3-color: #18181b;
  }
}

.color-scheme-dark,
.dark,
[data-color-scheme="dark"] {
  color-scheme: dark;

  --halo-cw-primary-1-color: #93c5fd;
  --halo-cw-primary-2-color: #60a5fa;
  --halo-cw-primary-3-color: #1e3a8a;

  --halo-cw-text-1-color: #f4f4f5;
  --halo-cw-text-2-color: #a1a1aa;
  --halo-cw-text-3-color: #71717a;

  --halo-cw-muted-1-color: #52525b;
  --halo-cw-muted-2-color: #3f3f46;
  --halo-cw-muted-3-color: #18181b;
}

注意事项

  • 当前推荐接入方式是 Halo 插件 + 主题 <halo:comment /> 标签,不再在 README 中提供独立 npm 组件接入说明。
  • AI 写作、@AI 自动回复、AI 自动回复和 AI 拦截都需要先在 AI Foundation 中配置可用语言模型。
  • 匿名上传、匿名 AI 和匿名举报会带来资源消耗风险,建议配合验证码、限流和审核策略开启。
  • 如果评论组件没有显示,优先检查主题是否渲染了 <halo:comment />,以及当前内容是否允许评论。

开源协议

本项目基于 GPL-3.0 协议开源。


讨论(0)

这是一个开源应用,我们推荐优先在开源仓库中提交 issue,以便开发者更好地接收和跟进问题。

去提交 issue