artalk 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/i18n/jp.js CHANGED
@@ -1 +1 @@
1
- !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).jp=o()}(this,(function(){"use strict";const e="ArtalkI18n";var o,n,t;return o="jp",n={placeholder:"コメントを残す",noComment:"コメントなし",send:"送信",save:"保存",nick:"ニックネーム",email:"メール",link:"ウェブサイト",emoticon:"絵文字",preview:"プレビュー",image:"画像",uploadFail:"アップロードに失敗しました",commentFail:"コメントに失敗しました",restoredMsg:"コンテンツが復元されました",onlyAdminCanReply:"管理者のみが返信できます",uploadLoginMsg:"アップロードするには、名前とメールアドレスを入力してください",counter:"{count} コメント",sortLatest:"最新のもの",sortOldest:"最も古い",sortBest:"ベスト",sortAuthor:"著者",openComment:"コメントを開く",closeComment:"コメントを閉じる",listLoadFailMsg:"コメントの読み込みに失敗しました",listRetry:"クリックで再試行",loadMore:"もっと読み込む",admin:"管理者",reply:"返信",voteUp:"アップ",voteDown:"ダウン",voteFail:"投票に失敗しました",readMore:"続きを読む",actionConfirm:"確認",collapse:"折りたたむ",collapsed:"折りたたまれた",collapsedMsg:"このコメントは折りたたまれました",expand:"展開",approved:"承認されました",pending:"保留中",pendingMsg:"保留中、コメント投稿者にのみ表示されます",edit:"編集",editCancel:"編集をキャンセル",delete:"削除",deleteConfirm:"確認",pin:"ピン",unpin:"ピン外し",seconds:"秒前",minutes:"分前",hours:"時間前",days:"数日前",now:"たった今",adminCheck:"管理者パスワードを入力してください:",captchaCheck:"続けるにはCAPTCHAを入力してください:",confirm:"確認",cancel:"取消",msgCenter:"メッセージ",ctrlCenter:"コンソール",frontend:"フロントエンド",backend:"バックエンド",loading:"読み込み中",loadFail:"読み込みに失敗しました",editing:"編集中",editFail:"編集に失敗しました",deleting:"削除中",deleteFail:"削除に失敗しました",reqGot:"リクエストを取得しました",reqAborted:"リクエストがタイムアウトしたか、予期せず終了した"},t=["jp-JP"],window[e]||(window[e]={}),window[e][o]=n,t&&t.forEach((o=>{window[e][o]=n})),n}));
1
+ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).jp=n()}(this,(function(){"use strict";const e="ArtalkI18n";var n,o,t;return n="jp",o={placeholder:"コメントを残す",noComment:"コメントなし",send:"送信",save:"保存",nick:"ニックネーム",email:"メール",link:"ウェブサイト",emoticon:"絵文字",preview:"プレビュー",image:"画像",uploadFail:"アップロードに失敗しました",commentFail:"コメントに失敗しました",restoredMsg:"コンテンツが復元されました",onlyAdminCanReply:"管理者のみが返信できます",uploadLoginMsg:"アップロードするには、名前とメールアドレスを入力してください",counter:"{count} コメント",sortLatest:"最新のもの",sortOldest:"最も古い",sortBest:"ベスト",sortAuthor:"著者",openComment:"コメントを開く",closeComment:"コメントを閉じる",listLoadFailMsg:"コメントの読み込みに失敗しました",listRetry:"クリックで再試行",loadMore:"もっと読み込む",admin:"管理者",reply:"返信",voteUp:"アップ",voteDown:"ダウン",voteFail:"投票に失敗しました",readMore:"続きを読む",actionConfirm:"確認",collapse:"折りたたむ",collapsed:"折りたたまれた",collapsedMsg:"このコメントは折りたたまれました",expand:"展開",approved:"承認されました",pending:"保留中",pendingMsg:"保留中、コメント投稿者にのみ表示されます",edit:"編集",editCancel:"編集をキャンセル",delete:"削除",deleteConfirm:"確認",pin:"ピン",unpin:"ピン外し",seconds:"秒前",minutes:"分前",hours:"時間前",days:"数日前",now:"たった今",adminCheck:"管理者パスワードを入力してください:",captchaCheck:"続けるにはCAPTCHAを入力してください:",confirm:"確認",cancel:"取消",msgCenter:"メッセージ",ctrlCenter:"コンソール",frontend:"フロントエンド",backend:"バックエンド",loading:"読み込み中",loadFail:"読み込みに失敗しました",editing:"編集中",editFail:"編集に失敗しました",deleting:"削除中",deleteFail:"削除に失敗しました",reqGot:"リクエストを取得しました",reqAborted:"リクエストがタイムアウトしたか、予期せず終了した",updateMsg:"フルな体験をするためには、Artalk {name} をアップデートしてください",currentVersion:"現在のバージョン",ignore:"無視する"},t=["jp-JP"],window[e]||(window[e]={}),window[e][n]=o,t&&t.forEach((n=>{window[e][n]=o})),o}));
@@ -1 +1 @@
1
- !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self)["zh-TW"]=o()}(this,(function(){"use strict";const e="ArtalkI18n";var o,n,t;return o="zh-TW",n={placeholder:"鍵入內容...",noComment:"「此時無聲勝有聲」",send:"發送評論",save:"保存評論",nick:"昵稱",email:"郵箱",link:"網址",emoticon:"表情",preview:"預覽",image:"圖片",uploadFail:"上傳失敗",commentFail:"評論失敗",restoredMsg:"內容已自動恢復",onlyAdminCanReply:"僅管理員可評論",uploadLoginMsg:"填入你的名字郵箱才能上傳哦",counter:"{count} 條評論",sortLatest:"最新",sortOldest:"最早",sortBest:"最熱",sortAuthor:"作者",openComment:"打開評論",closeComment:"關閉評論",listLoadFailMsg:"無法獲取評論列表數據",listRetry:"點擊重新獲取",loadMore:"加載更多",admin:"管理員",reply:"回覆",voteUp:"贊同",voteDown:"反對",voteFail:"投票失敗",readMore:"閱讀更多",actionConfirm:"確認操作",collapse:"摺疊",collapsed:"已摺疊",collapsedMsg:"該評論已被系統或管理員摺疊",expand:"展開",approved:"已審",pending:"待審",pendingMsg:"審核中,僅本人可見。",edit:"編輯",editCancel:"取消編輯",delete:"刪除",deleteConfirm:"確認刪除",pin:"置頂",unpin:"取消置頂",seconds:"秒前",minutes:"分鐘前",hours:"小時前",days:"天前",now:"剛剛",adminCheck:"鍵入密碼來驗證管理員身份:",captchaCheck:"鍵入驗證碼繼續:",confirm:"確認",cancel:"取消",msgCenter:"通知中心",ctrlCenter:"控制中心",frontend:"前端",backend:"後端",loading:"加載中",loadFail:"加載失敗",editing:"修改中",editFail:"修改失敗",deleting:"刪除中",deleteFail:"刪除失敗",reqGot:"請求響應",reqAborted:"請求超時或意外終止"},window[e]||(window[e]={}),window[e][o]=n,t&&t.forEach((o=>{window[e][o]=n})),n}));
1
+ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self)["zh-TW"]=n()}(this,(function(){"use strict";const e="ArtalkI18n";var n,o,t;return n="zh-TW",o={placeholder:"鍵入內容...",noComment:"「此時無聲勝有聲」",send:"發送評論",save:"保存評論",nick:"昵稱",email:"郵箱",link:"網址",emoticon:"表情",preview:"預覽",image:"圖片",uploadFail:"上傳失敗",commentFail:"評論失敗",restoredMsg:"內容已自動恢復",onlyAdminCanReply:"僅管理員可評論",uploadLoginMsg:"填入你的名字郵箱才能上傳哦",counter:"{count} 條評論",sortLatest:"最新",sortOldest:"最早",sortBest:"最熱",sortAuthor:"作者",openComment:"打開評論",closeComment:"關閉評論",listLoadFailMsg:"無法獲取評論列表數據",listRetry:"點擊重新獲取",loadMore:"加載更多",admin:"管理員",reply:"回覆",voteUp:"贊同",voteDown:"反對",voteFail:"投票失敗",readMore:"閱讀更多",actionConfirm:"確認操作",collapse:"摺疊",collapsed:"已摺疊",collapsedMsg:"該評論已被系統或管理員摺疊",expand:"展開",approved:"已審",pending:"待審",pendingMsg:"審核中,僅本人可見。",edit:"編輯",editCancel:"取消編輯",delete:"刪除",deleteConfirm:"確認刪除",pin:"置頂",unpin:"取消置頂",seconds:"秒前",minutes:"分鐘前",hours:"小時前",days:"天前",now:"剛剛",adminCheck:"鍵入密碼來驗證管理員身份:",captchaCheck:"鍵入驗證碼繼續:",confirm:"確認",cancel:"取消",msgCenter:"通知中心",ctrlCenter:"控制中心",frontend:"前端",backend:"後端",loading:"加載中",loadFail:"加載失敗",editing:"修改中",editFail:"修改失敗",deleting:"刪除中",deleteFail:"刪除失敗",reqGot:"請求響應",reqAborted:"請求超時或意外終止",updateMsg:"請更新 Artalk {name} 以獲得完整體驗",currentVersion:"當前版本",ignore:"忽略"},window[e]||(window[e]={}),window[e][n]=o,t&&t.forEach((n=>{window[e][n]=o})),o}));
@@ -26,8 +26,6 @@ export default class Artalk {
26
26
  trigger<K extends keyof EventPayloadMap>(name: K, payload?: EventPayloadMap[K]): void;
27
27
  /** Set dark mode */
28
28
  setDarkMode(darkMode: boolean): void;
29
- /** Default Configs */
30
- static readonly defaults: ArtalkConfig;
31
29
  /** Init Artalk */
32
30
  static init(conf: Partial<ArtalkConfig>): Artalk;
33
31
  /** Use plugin, the plugin will be used when Artalk.init */
@@ -65,5 +65,8 @@ declare const _default: {
65
65
  deleteFail: string;
66
66
  reqGot: string;
67
67
  reqAborted: string;
68
+ updateMsg: string;
69
+ currentVersion: string;
70
+ ignore: string;
68
71
  };
69
72
  export default _default;
@@ -67,4 +67,7 @@ export declare function defineLocaleExternal(lang: string, locale: I18n, aliases
67
67
  deleteFail: string;
68
68
  reqGot: string;
69
69
  reqAborted: string;
70
+ updateMsg: string;
71
+ currentVersion: string;
72
+ ignore: string;
70
73
  };
@@ -69,6 +69,9 @@ export declare const internal: {
69
69
  deleteFail: string;
70
70
  reqGot: string;
71
71
  reqAborted: string;
72
+ updateMsg: string;
73
+ currentVersion: string;
74
+ ignore: string;
72
75
  };
73
76
  'en-US': {
74
77
  placeholder: string;
@@ -137,6 +140,9 @@ export declare const internal: {
137
140
  deleteFail: string;
138
141
  reqGot: string;
139
142
  reqAborted: string;
143
+ updateMsg: string;
144
+ currentVersion: string;
145
+ ignore: string;
140
146
  };
141
147
  'zh-CN': {
142
148
  placeholder: string;
@@ -205,6 +211,9 @@ export declare const internal: {
205
211
  deleteFail: string;
206
212
  reqGot: string;
207
213
  reqAborted: string;
214
+ updateMsg: string;
215
+ currentVersion: string;
216
+ ignore: string;
208
217
  };
209
218
  };
210
219
  /**
@@ -65,5 +65,8 @@ declare const _default: {
65
65
  deleteFail: string;
66
66
  reqGot: string;
67
67
  reqAborted: string;
68
+ updateMsg: string;
69
+ currentVersion: string;
70
+ ignore: string;
68
71
  };
69
72
  export default _default;
@@ -65,5 +65,8 @@ declare const _default: {
65
65
  deleteFail: string;
66
66
  reqGot: string;
67
67
  reqAborted: string;
68
+ updateMsg: string;
69
+ currentVersion: string;
70
+ ignore: string;
68
71
  };
69
72
  export default _default;
@@ -2,3 +2,6 @@ import Artalk from './artalk';
2
2
  import * as ArtalkType from '../types';
3
3
  export { ArtalkType };
4
4
  export default Artalk;
5
+ export declare const init: typeof Artalk.init;
6
+ export declare const use: typeof Artalk.use;
7
+ export declare const loadCountWidget: typeof Artalk.loadCountWidget;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "artalk",
3
- "version": "2.7.0",
3
+ "version": "2.7.1",
4
4
  "license": "MIT",
5
5
  "description": "A Selfhosted Comment System",
6
6
  "keywords": [
package/src/artalk.ts CHANGED
@@ -3,7 +3,6 @@ import './style/main.scss'
3
3
  import type { ArtalkConfig, EventPayloadMap, ArtalkPlugin, ContextApi } from '~/types'
4
4
  import type { EventHandler } from './lib/event-manager'
5
5
  import ConcreteContext from './context'
6
- import defaults from './defaults'
7
6
  import { handelCustomConf, convertApiOptions } from './config'
8
7
  import Services from './service'
9
8
  import { DefaultPlugins } from './plugins'
@@ -90,9 +89,6 @@ export default class Artalk {
90
89
  // Static Members
91
90
  // ===========================
92
91
 
93
- /** Default Configs */
94
- public static readonly defaults: ArtalkConfig = defaults
95
-
96
92
  /** Init Artalk */
97
93
  public static init(conf: Partial<ArtalkConfig>): Artalk {
98
94
  return new Artalk(conf)
package/src/i18n/en.ts CHANGED
@@ -78,4 +78,7 @@ export default {
78
78
  deleteFail: 'Delete Failed',
79
79
  reqGot: 'Request got',
80
80
  reqAborted: 'Request timed out or terminated unexpectedly',
81
+ updateMsg: 'Please update Artalk {name} to get the full experience',
82
+ currentVersion: 'Current Version',
83
+ ignore: 'Ignore',
81
84
  }
package/src/i18n/jp.ts CHANGED
@@ -80,4 +80,7 @@ export default defineLocaleExternal('jp', {
80
80
  deleteFail: '削除に失敗しました',
81
81
  reqGot: 'リクエストを取得しました',
82
82
  reqAborted: 'リクエストがタイムアウトしたか、予期せず終了した',
83
+ updateMsg: 'フルな体験をするためには、Artalk {name} をアップデートしてください',
84
+ currentVersion: '現在のバージョン',
85
+ ignore: '無視する',
83
86
  }, ['jp-JP'])
package/src/i18n/zh-CN.ts CHANGED
@@ -80,6 +80,9 @@ const zhCN: I18n = {
80
80
  deleteFail: '删除失败',
81
81
  reqGot: '请求响应',
82
82
  reqAborted: '请求超时或意外终止',
83
+ updateMsg: '请更新 Artalk {name} 以获得完整体验',
84
+ currentVersion: '当前版本',
85
+ ignore: '忽略',
83
86
  }
84
87
 
85
88
  export default zhCN
package/src/i18n/zh-TW.ts CHANGED
@@ -80,4 +80,7 @@ export default defineLocaleExternal('zh-TW', {
80
80
  deleteFail: '刪除失敗',
81
81
  reqGot: '請求響應',
82
82
  reqAborted: '請求超時或意外終止',
83
+ updateMsg: '請更新 Artalk {name} 以獲得完整體驗',
84
+ currentVersion: '當前版本',
85
+ ignore: '忽略',
83
86
  })
package/src/main.ts CHANGED
@@ -3,3 +3,12 @@ import * as ArtalkType from '../types'
3
3
 
4
4
  export { ArtalkType }
5
5
  export default Artalk
6
+
7
+ // Expose the static methods from the Artalk class
8
+ // because direct export of static methods is not supported
9
+ // for adapting to different environments like CommonJS and browser IIFE
10
+ // for example, we can use `Artalk.init()` rather than `Artalk.default.init()`
11
+ // therefore, we need to manually expose the static methods in the Artalk class.
12
+ export const init = Artalk.init
13
+ export const use = Artalk.use
14
+ export const loadCountWidget = Artalk.loadCountWidget
@@ -32,12 +32,15 @@ export async function initCountWidget(opt: CountOptions) {
32
32
  }
33
33
 
34
34
  // PV
35
- const curtPagePvNum = opt.pvAdd ? await opt.getApi().page.pv() : NaN
35
+ const initialData = opt.pvAdd ? {
36
+ [opt.pageKey]: (await opt.getApi().page.pv()) // pv+1 and get pv count
37
+ } : undefined
38
+
36
39
  if (opt.pvEl && document.querySelector(opt.pvEl)) {
37
40
  refreshStatCount(opt, {
38
41
  query: 'page_pv',
39
42
  numEl: opt.pvEl,
40
- data: { [opt.pageKey]: curtPagePvNum },
43
+ data: initialData,
41
44
  })
42
45
  }
43
46
  }
@@ -54,16 +57,16 @@ async function refreshStatCount(
54
57
  ) {
55
58
  let data: CountData = args.data || {}
56
59
 
57
- // Get page keys from DOM
58
- let pageKeys = Array.from(document.querySelectorAll(args.numEl))
60
+ // Get page keys which will be queried
61
+ let queryPageKeys = Array.from(document.querySelectorAll(args.numEl))
59
62
  .map((e) => e.getAttribute('data-page-key') || opt.pageKey)
60
- .filter((e) => Number.isNaN(data[e])) // filter out keys that already have data
63
+ .filter((k) => typeof data[k] !== 'number') // filter out keys that already have data
61
64
 
62
- pageKeys = [...new Set(pageKeys)] // deduplicate
65
+ queryPageKeys = [...new Set(queryPageKeys)] // deduplicate
63
66
 
64
67
  // Fetch count data from server
65
- if (pageKeys.length > 0) {
66
- const res = await opt.getApi().page.stat(args.query, pageKeys) as CountData
68
+ if (queryPageKeys.length > 0) {
69
+ const res = await opt.getApi().page.stat(args.query, queryPageKeys) as CountData
67
70
  data = { ...data, ...res }
68
71
  }
69
72
 
@@ -21,12 +21,11 @@ function versionCheck(list: List, feVer: string, beVer: string) {
21
21
  if (sameVer) return
22
22
 
23
23
  const errEl = Utils.createElement(
24
- `<div>请更新 Artalk ${comp < 0 ? $t('frontend') : $t('backend')}以获得完整体验 ` +
25
- `(<a href="https://artalk.js.org/" target="_blank">帮助文档</a>)` +
24
+ `<div>${$t('updateMsg', { name: (comp < 0) ? $t('frontend') : $t('backend') })}` +
26
25
  `<br/><br/><span style="color: var(--at-color-meta);">` +
27
- `当前版本:${$t('frontend')} ${feVer} / ${$t('backend')} ${beVer}` +
26
+ `${$t('currentVersion')}: ${$t('frontend')} ${feVer} / ${$t('backend')} ${beVer}` +
28
27
  `</span><br/><br/></div>`)
29
- const ignoreBtn = Utils.createElement('<span style="cursor:pointer">忽略</span>')
28
+ const ignoreBtn = Utils.createElement(`<span style="cursor:pointer">${$t('ignore')}</span>`)
30
29
  ignoreBtn.onclick = () => {
31
30
  Ui.setError(list.$el.parentElement!, null)
32
31
  IgnoreVersionCheck = true