Skip to content

Repository files navigation

plugin-comment-widget

Halo 2.0 的通用评论组件插件,为前台提供完整的评论解决方案。

Cover

使用方式

  1. 下载,目前提供以下两个下载方式:
  2. 安装,插件安装和更新方式可参考:https://docs.halo.run/user-guide/plugins

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

开发环境

git clone git@github.com:halo-dev/plugin-comment-widget.git
# 或者当你 fork 之后
git clone git@github.com:{your_github_id}/plugin-comment-widget.git
cd path/to/plugin-comment-widget
./gradlew pnpmInstall
# 启动一个 Docker 容器作为开发环境并自动加载此插件
./gradlew haloServer

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

主题适配

接入

接入文档可参考 自定义标签

自定义样式

虽然目前不能直接为评论组件编写额外的样式,但可以通过一系列的 CSS 变量来自定义部分样式,开发者可以根据需求自行在主题中添加这些 CSS 变量,让评论组件和主题更好地融合。

目前已提供的 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基础字体族
点击查看 CSS 代码模板
:root {
--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: ;
}
3.0.0 版本之前已废弃的 CSS 变量
变量名描述备注
--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表情选择器悬停边框颜色已废弃

配色切换方案

根据上面提供的 CSS 变量,也可以通过定义 CSS 变量的方式为评论组件提供动态切换配色的功能。

以下是实现示例,你可以根据需求自行修改选择器或者媒体查询。

@media (prefers-color-scheme: dark) {
.color-scheme-auto,
[data-color-scheme='auto'] {
color-scheme: dark;
--halo-cw-primary-1-color:#059669;
--halo-cw-primary-2-color:#047857;
--halo-cw-primary-3-color:#065f46;
--halo-cw-text-1-color:#f9fafb;
--halo-cw-text-2-color:#e5e7eb;
--halo-cw-text-3-color:#9ca3af;
--halo-cw-muted-1-color:#4b5563;
--halo-cw-muted-2-color:#374151;
--halo-cw-muted-3-color:#1f2937;
--halo-cw-emoji-picker-rgb-color:222,222,221;
--halo-cw-emoji-picker-rgb-accent:58,130,247;
--halo-cw-emoji-picker-rgb-background:21,22,23;
--halo-cw-emoji-picker-rgb-input:0,0,0;
--halo-cw-emoji-picker-color-border:rgba(255,255,255,0.1);
--halo-cw-emoji-picker-color-border-over:rgba(255,255,255,0.2);
}
}
.color-scheme-dark,
.dark,
[data-color-scheme='dark'] {
color-scheme: dark;
--halo-cw-primary-1-color:#059669;
--halo-cw-primary-2-color:#047857;
--halo-cw-primary-3-color:#065f46;
--halo-cw-text-1-color:#f9fafb;
--halo-cw-text-2-color:#e5e7eb;
--halo-cw-text-3-color:#9ca3af;
--halo-cw-muted-1-color:#4b5563;
--halo-cw-muted-2-color:#374151;
--halo-cw-muted-3-color:#1f2937;
--halo-cw-emoji-picker-rgb-color:222,222,221;
--halo-cw-emoji-picker-rgb-accent:58,130,247;
--halo-cw-emoji-picker-rgb-background:21,22,23;
--halo-cw-emoji-picker-rgb-input:0,0,0;
--halo-cw-emoji-picker-color-border:rgba(255,255,255,0.1);
--halo-cw-emoji-picker-color-border-over:rgba(255,255,255,0.2);
}

此外,为了让主题可以更加方便的适配暗黑模式,此插件也提供了一套暗黑模式的配色方案,主题可以直接使用此方案,而不需要自己去适配暗黑模式,适配方式如下:

  1. 在 html 或者 body 标签添加 class:
    1. color-scheme-auto:自动模式,根据系统的暗黑模式自动切换。
    2. color-scheme-dark / dark:强制暗黑模式。
    3. color-scheme-light / light:强制明亮模式。
  2. 在 html 或者 body 标签添加 data-color-scheme 属性:
    1. auto:自动模式,根据系统的暗黑模式自动切换。
    2. dark:强制暗黑模式。
    3. light:强制明亮模式。

作为组件使用

此插件的 UI 部分采用 Lit Element 编写,并最终编译为 Web Component,所以理论上可以在任何 JS 框架中使用。这非常适用于将 Halo 作为 Headless CMS 使用的场景。例如使用 Vue、React 等框架编写网站,并调用 Halo 的 API 来渲染网页,这个时候文章评论的解决方案就可以直接使用此组件。

安装:

pnpm install @halo-dev/comment-widget

Vue

在 Vue 组件中使用时,需要在 Vue 的编译选项中设置将此组件标记为非 Vue 组件,以下是 Vite 的配置示例:

importvuefrom'@vitejs/plugin-vue'exportdefault{plugins: [vue({template: {compilerOptions: {isCustomElement: (tag)=>tag==='comment-widget'}}})]}

然后在 SFC 中使用即可:

<script setup>import'@halo-dev/comment-widget'import'@halo-dev/comment-widget/var.css';</script>
<template>
<comment-widgetbaseUrl="https://demo.halo.run"group="content.halo.run"kind="Post"version="v1alpha1"name="e0507f6f-88bb-4d3c-a90a-a88aba222035"
></comment-widget>
</template>

React

import"@halo-dev/comment-widget";import"@halo-dev/comment-widget/var.css";functionApp(){return(<><comment-widgetbaseUrl="https://demo.halo.run"group="content.halo.run"kind="Post"version="v1alpha1"name="e0507f6f-88bb-4d3c-a90a-a88aba222035"></comment-widget></>);}exportdefaultApp;

About

通用的 Halo 2.0 评论组件插件

Topics

Resources

Stars

25 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages