master
1import type { CommentData, CommentProvider } from './types';
2import { cleanCommentHtml } from './utils';
3import { asideConfig, commentConfig } from '@/config';
4import { loadScript } from '@/scripts/utils';
5import { CDN } from '@constants/cdn';
6
7const twikooConfig = commentConfig.twikoo!;
8
9export const TwikooProvider: CommentProvider = {
10 async setup() {
11 const waitTwikoo = () => {
12 if (typeof twikoo === 'undefined') {
13 setTimeout(waitTwikoo, 100);
14 }
15 };
16
17 // 判断当前页面是否已经加载了 Twikoo 的脚本
18 // 如果没有加载,则动态加载
19 const twikooWrapper = document.getElementById('twikoo-wrap');
20 if (!twikooWrapper) {
21 await loadScript(CDN.twikoo);
22 }
23 waitTwikoo();
24
25 const recentComments = await twikoo.getRecentComments({
26 envId: twikooConfig.envId,
27 pageSize: asideConfig.recentComment.count,
28 });
29
30 return recentComments.map(
31 (comment): CommentData => ({
32 avatarUrl: comment.avatar,
33 commentContent: cleanCommentHtml(comment.comment),
34 commentUrl: `${comment.url}#${comment.id}`,
35 author: comment.nick,
36 time: new Date(comment.created),
37 })
38 );
39 },
40};