From f1bb38fafdcab4b6774fca66b1aecaa158c6f6eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sat, 25 May 2024 03:02:59 +0800 Subject: [PATCH 1/2] feat(gravatar): support letter avatar with weavatar --- conf/artalk.example.simple.yml | 2 +- conf/artalk.example.zh-CN.yml | 4 ++-- docs/docs/.vitepress/theme/Artalk.vue | 2 +- docs/docs/develop/api-old.md | 2 +- docs/docs/guide/backend/admin_notify.md | 2 +- docs/docs/guide/backend/email.md | 4 ++-- docs/docs/guide/frontend/config.md | 6 +++--- test/ssg-test/.vitepress/theme/Artalk.vue | 2 +- test/testdata/example_site_conf.yml | 2 +- ui/artalk/src/comment/comment-node.ts | 3 ++- ui/artalk/src/defaults.ts | 4 ++-- ui/artalk/src/lib/utils.ts | 4 ++-- 12 files changed, 19 insertions(+), 18 deletions(-) diff --git a/conf/artalk.example.simple.yml b/conf/artalk.example.simple.yml index c6e98847..9786bde3 100644 --- a/conf/artalk.example.simple.yml +++ b/conf/artalk.example.simple.yml @@ -239,7 +239,7 @@ frontend: nestSort: DATE_ASC gravatar: mirror: https://www.gravatar.com/avatar/ - params: d=mp&s=240 + params: s=240&d=letter pagination: pageSize: 20 readMore: true diff --git a/conf/artalk.example.zh-CN.yml b/conf/artalk.example.zh-CN.yml index 15f730c8..56cfe867 100644 --- a/conf/artalk.example.zh-CN.yml +++ b/conf/artalk.example.zh-CN.yml @@ -428,9 +428,9 @@ frontend: # 头像 Gravatar gravatar: # API 地址 - mirror: https://cravatar.cn/avatar/ + mirror: https://weavatar.com/avatar/ # API 参数 - params: d=mp&s=240 + params: s=240&d=letter # 评论分页 pagination: # 每页评论数 diff --git a/docs/docs/.vitepress/theme/Artalk.vue b/docs/docs/.vitepress/theme/Artalk.vue index a0ed84a2..1c6b93c1 100644 --- a/docs/docs/.vitepress/theme/Artalk.vue +++ b/docs/docs/.vitepress/theme/Artalk.vue @@ -40,7 +40,7 @@ function initArtalk(conf: any) { el: el.value, emoticons: '/assets/emoticons/default.json', gravatar: { - mirror: 'https://cravatar.cn/avatar/', + mirror: 'https://weavatar.com/avatar/', }, ...conf, }) diff --git a/docs/docs/develop/api-old.md b/docs/docs/develop/api-old.md index 8cb072fc..7dd25950 100644 --- a/docs/docs/develop/api-old.md +++ b/docs/docs/develop/api-old.md @@ -43,7 +43,7 @@ | `data.comment.id` | Number | - | 评论 ID | | `data.comment.content` | String | - | 评论正文 | | `data.comment.nick` | String | - | 评论者昵称 | -| `data.comment.email_encrypted` | String | - | 评论者邮箱 MD5 加密值 | +| `data.comment.email_encrypted` | String | - | 评论者邮箱 SHA256 加密值 | | `data.comment.link` | String | - | 评论者链接 | | `data.comment.ua` | String | - | 评论者 User-Agent | | `data.comment.date` | String | - | 评论时间,格式为 `1970-01-01 00:00:00` | diff --git a/docs/docs/guide/backend/admin_notify.md b/docs/docs/guide/backend/admin_notify.md index 1f0bcbf6..314e6ced 100644 --- a/docs/docs/guide/backend/admin_notify.md +++ b/docs/docs/guide/backend/admin_notify.md @@ -284,7 +284,7 @@ admin_notify: "content": "测试内容", "user_id": 226, "nick": "测试用户", - "email_encrypted": "654236c1e78i4c09a17c4869c9d43910", + "email_encrypted": "68f8397b4a212a6d281a6ac8a9c25556215729054b8cb331c03882b91fe31758", "link": "https://qwqaq.com", "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36", "date": "2022-05-23 17:00:23", diff --git a/docs/docs/guide/backend/email.md b/docs/docs/guide/backend/email.md index 5cac7e74..27d84c9e 100644 --- a/docs/docs/guide/backend/email.md +++ b/docs/docs/guide/backend/email.md @@ -211,7 +211,7 @@ email: "comment.date": "2021-11-22", "comment.datetime": "2021-11-22 22:22:42", "comment.email": "replyer@example.com", - "comment.email_encrypted": "249898bd50e0febc5799485cf10b345a", + "comment.email_encrypted": "68f8397b4a212a6d281a6ac8a9c25556215729054b8cb331c03882b91fe31758", "comment.id": 8100, "comment.is_allow_reply": true, "comment.is_collapsed": false, @@ -248,7 +248,7 @@ email: "parent_comment.date": "2021-11-22", "parent_comment.datetime": "2021-11-22 22:21:17", "parent_comment.email": "test@example.com", - "parent_comment.email_encrypted": "55502f40dc8b7c769880b10874abc9d0", + "parent_comment.email_encrypted": "973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b", "parent_comment.id": 8099, "parent_comment.is_allow_reply": true, "parent_comment.is_collapsed": false, diff --git a/docs/docs/guide/frontend/config.md b/docs/docs/guide/frontend/config.md index 178e741f..fa3597a3 100644 --- a/docs/docs/guide/frontend/config.md +++ b/docs/docs/guide/frontend/config.md @@ -359,7 +359,7 @@ gravatar: { **Gravatar 镜像地址** - 类型:`String` -- 默认值:`"https://sdn.geekzu.org/avatar/"` +- 默认值:`"https://weavatar.com/avatar/"` 如果你觉得 Gravatar 头像加载速度不理想,可以尝试替换。 @@ -378,11 +378,11 @@ gravatar: { **Gravatar API 参数** - 类型:`String` -- 默认值:`"d=mp&s=240"` +- 默认值:`"s=240&d=letter"` 例如,你可以通过该配置项设置默认头像 (`d=mp`) 和头像尺寸 (`s=240`)。 -参考:[Gravatar API 文档](http://cn.gravatar.org/site/implement/images/) +参考:[Gravatar API 文档](https://docs.gravatar.com/api/avatars/images/) 该配置项格式为 HTTP Query。 diff --git a/test/ssg-test/.vitepress/theme/Artalk.vue b/test/ssg-test/.vitepress/theme/Artalk.vue index 27f278a3..60d21f94 100644 --- a/test/ssg-test/.vitepress/theme/Artalk.vue +++ b/test/ssg-test/.vitepress/theme/Artalk.vue @@ -44,7 +44,7 @@ function initArtalk(conf: any) { el: el.value, emoticons: '/assets/emoticons/default.json', gravatar: { - mirror: 'https://cravatar.cn/avatar/', + mirror: 'https://weavatar.com/avatar/', }, ...conf, }) diff --git a/test/testdata/example_site_conf.yml b/test/testdata/example_site_conf.yml index 31539d95..c7f5b9a1 100644 --- a/test/testdata/example_site_conf.yml +++ b/test/testdata/example_site_conf.yml @@ -148,7 +148,7 @@ frontend: nestMax: 2 nestSort: DATE_ASC gravatar: - mirror: https://cravatar.cn/avatar/ + mirror: https://weavatar.com/avatar/ default: mp pagination: pageSize: 20 diff --git a/ui/artalk/src/comment/comment-node.ts b/ui/artalk/src/comment/comment-node.ts index 868b45aa..7f3bbc44 100644 --- a/ui/artalk/src/comment/comment-node.ts +++ b/ui/artalk/src/comment/comment-node.ts @@ -204,7 +204,8 @@ export default class CommentNode { return Utils.getGravatarURL({ mirror: this.opts.gravatar.mirror, params: this.opts.gravatar.params, - emailMD5: this.data.email_encrypted, + emailHash: this.data.email_encrypted, + nick: this.data.nick, }) } diff --git a/ui/artalk/src/defaults.ts b/ui/artalk/src/defaults.ts index da4c8145..c729a2e8 100644 --- a/ui/artalk/src/defaults.ts +++ b/ui/artalk/src/defaults.ts @@ -29,8 +29,8 @@ const defaults: ArtalkConfig = { statPageKeyAttr: 'data-page-key', gravatar: { - mirror: 'https://cravatar.cn/avatar/', - params: 'd=mp&s=240', + mirror: 'https://weavatar.com/avatar/', + params: 's=240&d=letter', }, pagination: { diff --git a/ui/artalk/src/lib/utils.ts b/ui/artalk/src/lib/utils.ts index a011df19..2f090c24 100644 --- a/ui/artalk/src/lib/utils.ts +++ b/ui/artalk/src/lib/utils.ts @@ -107,8 +107,8 @@ export function timeAgo(date: Date, $t: Function = (n: string) => n) { } } -export function getGravatarURL(opts: { params: string; mirror: string; emailMD5: string }) { - return `${opts.mirror.replace(/\/$/, '')}/${opts.emailMD5}?${opts.params.replace(/^\?/, '')}` +export function getGravatarURL(opts: { params: string; mirror: string; emailHash: string; nick: string }) { + return `${opts.mirror.replace(/\/$/, '')}/${opts.emailHash}?${opts.params.replace(/^\?/, '')}&letter=${opts.nick}` } export function sleep(ms: number) { From 82b429e07d13691cb7b1c8f8aa82493edb2d59c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sat, 25 May 2024 03:23:28 +0800 Subject: [PATCH 2/2] feat(gravatar): use first letter --- ui/artalk/src/lib/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/artalk/src/lib/utils.ts b/ui/artalk/src/lib/utils.ts index 2f090c24..444fee2f 100644 --- a/ui/artalk/src/lib/utils.ts +++ b/ui/artalk/src/lib/utils.ts @@ -108,7 +108,7 @@ export function timeAgo(date: Date, $t: Function = (n: string) => n) { } export function getGravatarURL(opts: { params: string; mirror: string; emailHash: string; nick: string }) { - return `${opts.mirror.replace(/\/$/, '')}/${opts.emailHash}?${opts.params.replace(/^\?/, '')}&letter=${opts.nick}` + return `${opts.mirror.replace(/\/$/, '')}/${opts.emailHash}?${opts.params.replace(/^\?/, '')}&letter=${opts.nick.charAt(0)}` } export function sleep(ms: number) {