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};