v1.4.5版本后所述功能均已实现,此文章仅为存档参考
且个人推荐使用功能更加丰富的Cravatar.cn
添加QQ邮箱头像支持#
由于 v1.4.x
版本尚未开源,以下步骤均为修改已编译的 Valine.min.js
进行操作
由于某些原因,src目录将从v1.4.0后暂停更新.
For some reason, the src directory will be suspended from updating after v1.4.0.
通过浏览器F12查看代码,定位头像后发现相关代码为 <img class="vimg" src="xxx">
![]()
以本文 v1.4.4
最新版本为例,下载 Valine.min.js 后
Ctrl + F 搜索 img class="vimg" src=
,得到的代码片段为
![]()
可以看到,img src后的内容大致为 Gravatar CDN 地址 + 获取邮箱并MD5加密 + 返回Valine版本
1
2
3
4
5
6
7
8
9
10
| // <img src=>
u = E.hide ? "" : '<img class="vimg" src="' + (E.cdn + (0, s.default)(t.get("mail")) + E.params) + '">'
// CDN引用部分
E = {
cdn: "https://gravatar.loli.net/avatar/",
ds: ["mp", "identicon", "monsterid", "wavatar", "robohash", "retro", ""],
params: "",
hide: !1
}
|
QQ头像的接口为 http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=尺寸
s=(spec)对应的头像尺寸有px 40×40, px 100×100 px 640×640
测试发现数值1-5/40/640为px 40×40,数值100为px 100×100
所以最终的接口大致为 http://q1.qlogo.cn/g?b=qq&nk=10001&s=100
最终目标#
- 获取邮箱判断是否为qq邮箱
- 提取qq号
- 将Valine中的头像地址改为上述接口地址
- 判断是否是QQ邮箱,,是则以下操作,否则默认Gravator头像接口
- 正则筛选剔除–重命名了带英文的qq邮箱 获取QQ号
- 拼接头像地址
- 加入到img src
修改Valine js#
部分代码修改如下
1
2
3
4
5
6
7
8
9
10
11
12
| var avatar_img = E.cdn + (0, s.default)(t.get("mail")) + E.params;
if (t.get("mail").indexOf("@qq.com") >= 0) {
var prefix = t.get("mail").replace(/@.*/, "");
var pattern = /^\d+$/g;
var result = prefix.match(pattern);
if (result !== null) {
avatar_img = "//q1.qlogo.cn/g?b=qq&nk=" + prefix + "&s=100";
}
}
var l = t.get("link") ? /^https?\:\/\//.test(t.get("link")) ? t.get("link") : "http://" + t.get("link") : "",
c = l ? '<a class="vnick" rel="nofollow" href="' + l + '" target="_blank" >' + t.get("nick") + "</a>" : '<span class="vnick">' + t.get("nick") + "</span>",
u = E.hide ? "" : '<img class="vimg" src="' + (avatar_img) + '">',
|
修改前后diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| var j = function (t, n, r) {
var o = (0, A.default)('<div class="vcard" id="' + t.id + '"></div>'),
i = t.get("ua"),
a = "";
i && !/ja/.test(e.config.lang) && (i = A.default.detect(i), a = '<span class="vsys">' + i.browser + " " + i.version + '</span> <span class="vsys">' + i.os + " " + i.osVersion + "</span>"), "*" === e.config.path && (a = '<a href="' + t.get("url") + '" class="vsys">' + t.get("url") + "</a>");
var l = t.get("link") ? /^https?\:\/\//.test(t.get("link")) ? t.get("link") : "http://" + t.get("link") : "",
+ var avatar_img = E.cdn + (0, s.default)(t.get("mail")) + E.params; //默认Gravator头像接口
+ if (t.get("mail").indexOf("@qq.com") >= 0) {
+ var prefix = t.get("mail").replace(/@.*/, ""); //前缀
+ var pattern = /^\d+$/g; //正则表达式
+ var result = prefix.match(pattern);
+ if (result !== null) {
+ avatar_img = "//q1.qlogo.cn/g?b=qq&nk=" + prefix + "&s=100";
+ }
+ }
c = l ? '<a class="vnick" rel="nofollow" href="' + l + '" target="_blank" >' + t.get("nick") + "</a>" : '<span class="vnick">' + t.get("nick") + "</span>",
- u = E.hide ? "" : '<img class="vimg" src="' + (E.cdn + (0, s.default)(t.get("mail")) + E.params) + '">',
+ u = E.hide ? "" : '<img class="vimg" src="' + (avatar_img) + '">',
d = u + '<div class="vh"><div class="vhead">' + c + " " + a + '</div><div class="vmeta"><span class="vtime" >' + (0, w.default)(t.get("insertedAt"), e.i18n) + '</span><span class="vat" data-root-id="' + (t.get("rid") || t.id) + '" data-self-id="' + t.id + '">' + e.i18n.t("reply") + '</span></div><div class="vcontent" data-expand="' + e.i18n.t("expand") + '">' + (0, k.default)(t.get("comment")) + '</div><div class="vreply-wrapper" data-self-id="' + t.id + '"></div><div class="vquote" data-self-id="' + t.id + '"></div></div>';
o.html(d);
|
然后主题引用自己修改后的Valine.min.js,即可开箱食用。
icarus主题引用方法
添加自定义表情#
修改src#
编译前修改 plugins/emojis/light.json
v1.4.x版本不适用
配置项添加#
配置项中添加
1
2
| emoticon_url: '/demo/demo',
emoticon_list: ["xxx.jpg"]
|
如
1
2
| emoticon_url: 'https://cloud.panjunwen.com/alu',
emoticon_list: ["狂汗.png","不说话.png","汗.png"]
|
反正我是没成功过.jpg
直接修改Valine js文件#
故技重施
在Valine.min.js搜索定位到表情地址
然后照葫芦画瓢修改即可。
格式大致如下
1
2
3
4
5
6
7
8
9
| function (e, t) {
e.exports = {
滑稽: "https://cdn.jsdelivr.net/gh/wittoy/cdn@latest/images/valine/huaji.gif",
彩虹滑稽: "https://cdn.jsdelivr.net/gh/Wittoy/cdn@latest/images/valine/chhuaji.webp",
doge: "https://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_doge02_org.png",
dog: "https://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/2018new_erha_org.png",
高兴: "https://cdn.jsdelivr.net/gh/Wittoy/cdn@latest/images/valine/高兴.png",
尴尬: "https://cdn.jsdelivr.net/gh/Wittoy/cdn@latest/images/valine/尴尬.png"
}
|
须注意的是,为了方便操作,最新版本格式上是CDN前缀+图片文件名的形式,你可以Ctrl + F搜索 t.DEFAULT_EMOJI_CDN
修改CDN地址或留空即可。这里我采用的即为留空方案。
顺便提供下我自己修改后的 Valine.min.js ,以及 表情资源
icarus主题引用#
Icarus引用方法:下载 valine.jsx 到hexo-theme-icarus/layout/comment后,修改内容如下
1
2
3
4
5
| - const { cacheComponent } = require('../../util/cache');
+ const { cacheComponent } = require('hexo-component-inferno/lib/util/cache');
- jsUrl: helper.cdn('valine', '1.4.4', 'dist/Valine.min.js')
+ jsUrl: helper.url_for('js/Valine.min.js')
|
然后把修改后的 Valine.min.js 丢至 hexo-theme-icarus/source/js
以上内容转载并修改自