master
1---
2import { commentConfig, siteConfig } from '@/config';
3import { CDN } from '@constants/cdn';
4
5const artalkConfig = commentConfig.artalk!;
6---
7
8<div id="artalk-wrapper" class="mt-6"></div>
9
10<link rel="stylesheet" href={CDN.artalkCss} />
11
12<script
13 type="module"
14 is:inline
15 define:vars={{
16 artalkConfig,
17 siteConfig: {
18 title: siteConfig.title,
19 lang: siteConfig.lang,
20 },
21 }}
22>
23 import Artalk from 'https://esm.sh/artalk@2.9.1';
24
25 function setup() {
26 function getCurrentMode() {
27 if (!('darkMode' in localStorage)) {
28 return window.matchMedia('(prefers-color-scheme: dark)').matches;
29 }
30 return localStorage.darkMode === 'true';
31 }
32
33 const warpper = document.getElementById('artalk-wrapper');
34 if (!warpper) return;
35 const artalk = Artalk.init({
36 el: warpper,
37 darkMode: getCurrentMode(),
38 pageKey: window.location.pathname,
39 pageTitle: document.title,
40 server: artalkConfig.serverURL,
41 site: siteConfig.title,
42 locale: artalkConfig.locale || siteConfig.lang,
43 });
44
45 document.addEventListener('blog:darkmode-change', (e) => {
46 const { isDark } = e.detail;
47 artalk.setDarkMode(isDark);
48 });
49
50 document.addEventListener('astro:before-swap', () => {
51 artalk.destroy();
52 });
53 }
54
55 document.addEventListener('astro:page-load', setup);
56 setup();
57</script>