Waline评论之修改记录

依稀记得 2016 年中时我购买了人生第一台(也是唯一一台)锤子手机——Smartisan T2。当时是受了一个同事的蛊惑,但使用没多久就在一次醉酒后丢失了。与锤子手机的这次短暂相会,让我知道了一个折腾牛人,就是锤子科技的创始人——罗永浩。

我不是为了输赢,我就是认真。

《生命不息 折腾不止》——当你试图放弃一个你知道是正确的事情的时候,希望你能看看这本书。这是一个理想主义者的奋斗。

也许受老罗影响吧,一直以来我都挺爱折腾的。

Waline 评论昵称不能少于 3 个字符

部署好 Waline 后我在本地测试时发现一个个人觉得比较奇怪的问题,我输入昵称“老麦”并进行评论时提示一个错误,「昵称不能少于 3 个字符」。老实说,这个我还是有点不能理解的,Waline 作者不知为何会作出这样的限制,毕竟用两个中文字作为昵称的人还是很多的。

试图在官方文档里找这个配置参数,无果,只好选择重新构建 Client。

环境准备

安装Node.js (nodejs.org),打开官网我们可以找到两个版本进行安装,一个是14.17.5 LTS,另外一个版本则是16.6.2 Current,虽然 Node 14 默认使用 npm@v6,但还是建议安装 LTS 版本,毕竟稳定才是王道。由于 Waline 需要用到 npm@v7 版本,所以如果安装14.17.5 LTS,我们还需要更新一下 npm 的版本。

npm i -g npm

拉取项目:

git clone https://github.com/walinejs/waline.git

安装依赖:

// 进入项目目录
cd waline

// 安装项目依赖
npm i

重构 Waline Client

// 进入Client目录
cd ./packages/client/

// 用VSCode打开该目录
code .

打开\src\components\CommentBox.vue,搜索// check nick

// check nick
        if (
          (requiredMeta.indexOf('nick') > -1 || comment.nick) &&
          comment.nick.length < 3
        ) {
          inputRefs.value.nick?.focus();
          return alert(locale.value.nickError);
        }

comment.nick.length < 3修改成comment.nick.length < 2,保存;

运行npm run build,这样 Waline 的客户端就完成构建了。

引用新的客户端

方法很简单,将生成目录dist里的文件 git push 到 Github 上,套上 Jsdelivr 就可以直接引用了。

// hugo-theme-stack 默认的引入代码

<script src='//cdn.jsdelivr.net/npm/@waline/client/dist/Waline.min.js'></script>
<div id="waline" class="waline-container"></div>
<style>
    .waline-container {
        background-color: var(--card-background);
        border-radius: var(--card-border-radius);
        box-shadow: var(--shadow-l1);
        padding: var(--card-padding);
    }
    .waline-container .vcount {
        color: var(--card-text-color-main);
    }
</style>

{{- with .Site.Params.comments.waline -}}
{{- $config := dict "el" "#waline" "dark" `html[data-scheme="dark"]` -}}
{{- $replaceKeys := dict "serverurl" "serverURL" "requiredmeta" "requiredMeta" "wordlimit" "wordLimit" "pagesize" "pageSize" "avatarcdn" "avatarCDN" "avatarforce" "avatarForce" -}}

{{- range $key, $val := . -}}
    {{- if $val -}}
        {{- $replaceKey := index $replaceKeys $key -}}
        {{- $k := default $key $replaceKey -}}

        {{- $config = merge $config (dict $k $val) -}}
    {{- end -}}
{{- end -}}

<script>
    /// Waline client configuration see: https://waline.js.org/en/reference/client.html
    new Waline({{ $config | jsonify | safeJS }});
</script>
{{- end -}}

将第一行修改为<script src='//cdn.jsdelivr.net/gh/skybbx/img/waline/Waline.min.js'></script>即可,更多引用方法可以参考官方文档:引入客户端 | Waline

如果你跟我一样只需修改这个昵称字符判定,可以直接引用我修改后的客户端。

CDN 地址为:https://cdn.jsdelivr.net/gh/skybbx/img/waline/

Gravatar 头像

Gravatar 由于被 qiang 的关系,一直以来我都是使用极客 CDN 的代理,表现很稳定,可最近这两天却发现开始出问题了,经常出现加载不了的情况。好在这种代理有很多大佬在做,既然不稳定就换一个吧。这次看中的是老庞做的代理。传送门:自建 Gravatar 国内+全球镜像加速服务 | 城南旧事 (loli.top)

Waline 上更换头像 CDN

因为 Waline 上 Gravatar 头像默认的 CDN 就是极客的,修改方法很简单,查看官方文档——前端配置 | Waline,定义一个配置avatarCDN即可。案例:

<script src="//cdn.jsdelivr.net/gh/skybbx/img/waline/Waline.min.js"></script>
<div id="waline"></div>
<script>
  new Waline({
    el: '#waline',
    serverURL: '客户端地址',
    copyright: true,
    requiredMeta: ['nick', 'mail'],
    avatarCDN: 'https://gravatar.loli.top/avatar/',
  });
</script>

另:可以用{ $config | jsonify | safeJS }将前端的配置集成到 Config 里。

Wordpress 上更换头像 CDN

将下面代理添加到主题的 functions.php 即可。

// gravatar使用 CDN
function replace_gravatar($avatar) {
$avatar = str_replace(array("//gravatar.com/", "//secure.gravatar.com/", "//www.gravatar.com/", "//0.gravatar.com/",
"//1.gravatar.com/", "//2.gravatar.com/", "//cn.gravatar.com/"), "//gravatar.loli.top/", $avatar);
return $avatar;}
add_filter( 'get_avatar', 'replace_gravatar' );