artalk 2.6.4 → 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.
Files changed (316) hide show
  1. package/dist/Artalk.css +1 -1
  2. package/dist/Artalk.es.js +7756 -7432
  3. package/dist/Artalk.es.js.map +1 -0
  4. package/dist/Artalk.iife.js +2 -1
  5. package/dist/Artalk.iife.js.map +1 -0
  6. package/dist/Artalk.js +2 -1
  7. package/dist/Artalk.js.map +1 -0
  8. package/dist/ArtalkLite.css +1 -1
  9. package/dist/ArtalkLite.es.js +5576 -5252
  10. package/dist/ArtalkLite.es.js.map +1 -0
  11. package/dist/ArtalkLite.iife.js +2 -1
  12. package/dist/ArtalkLite.iife.js.map +1 -0
  13. package/dist/ArtalkLite.js +2 -1
  14. package/dist/ArtalkLite.js.map +1 -0
  15. package/dist/i18n/jp.js +1 -1
  16. package/dist/i18n/zh-TW.js +1 -1
  17. package/dist/src/api/{api-base.d.ts → _base.d.ts} +3 -7
  18. package/dist/src/api/_options.d.ts +19 -0
  19. package/dist/src/api/{request.d.ts → _request.d.ts} +3 -3
  20. package/dist/src/api/admin.d.ts +1 -1
  21. package/dist/src/api/captcha.d.ts +1 -1
  22. package/dist/src/api/comment.d.ts +2 -2
  23. package/dist/src/api/index.d.ts +2 -4
  24. package/dist/src/api/page.d.ts +3 -3
  25. package/dist/src/api/site.d.ts +2 -2
  26. package/dist/src/api/system.d.ts +13 -3
  27. package/dist/src/api/upload.d.ts +1 -1
  28. package/dist/src/api/user.d.ts +2 -2
  29. package/dist/src/artalk.d.ts +12 -37
  30. package/dist/src/comment/actions.d.ts +1 -1
  31. package/dist/src/comment/comment.d.ts +3 -4
  32. package/dist/src/comment/render.d.ts +21 -3
  33. package/dist/src/comment/renders/actions.d.ts +2 -2
  34. package/dist/src/comment/renders/avatar.d.ts +2 -2
  35. package/dist/src/comment/renders/content.d.ts +2 -2
  36. package/dist/src/comment/renders/header.d.ts +2 -2
  37. package/dist/src/comment/renders/index.d.ts +2 -2
  38. package/dist/src/comment/renders/pending.d.ts +2 -2
  39. package/dist/src/comment/renders/reply-at.d.ts +2 -2
  40. package/dist/src/comment/renders/reply-to.d.ts +2 -2
  41. package/dist/src/components/action-btn.d.ts +3 -5
  42. package/dist/src/{lib → components}/checker/admin.d.ts +1 -1
  43. package/dist/src/{lib → components}/checker/captcha-renders.d.ts +1 -1
  44. package/dist/src/{lib → components}/checker/captcha.d.ts +1 -1
  45. package/dist/src/{lib → components}/checker/index.d.ts +10 -7
  46. package/dist/src/components/dark-mode.d.ts +2 -0
  47. package/dist/src/components/dialog.d.ts +1 -3
  48. package/dist/src/components/error-dialog.d.ts +8 -0
  49. package/dist/src/components/pagination.d.ts +4 -3
  50. package/dist/src/components/read-more-btn.d.ts +3 -3
  51. package/dist/src/config.d.ts +24 -8
  52. package/dist/src/context.d.ts +16 -35
  53. package/dist/src/data.d.ts +27 -0
  54. package/dist/src/defaults.d.ts +1 -1
  55. package/dist/src/editor/editor.d.ts +14 -61
  56. package/dist/src/editor/state.d.ts +20 -0
  57. package/dist/src/i18n/en.d.ts +3 -0
  58. package/dist/src/i18n/external.d.ts +3 -0
  59. package/dist/src/i18n/index.d.ts +9 -0
  60. package/dist/src/i18n/jp.d.ts +3 -0
  61. package/dist/src/i18n/zh-CN.d.ts +1 -1
  62. package/dist/src/i18n/zh-TW.d.ts +3 -0
  63. package/dist/src/layer/index.d.ts +4 -3
  64. package/dist/src/layer/layer-manager.d.ts +9 -0
  65. package/dist/src/layer/layer.d.ts +8 -28
  66. package/dist/src/layer/scrollbar-helper.d.ts +5 -0
  67. package/dist/src/layer/sidebar-layer.d.ts +6 -6
  68. package/dist/src/layer/wrap.d.ts +13 -0
  69. package/dist/src/lib/component.d.ts +3 -8
  70. package/dist/src/lib/event-manager.d.ts +28 -0
  71. package/dist/src/lib/highlight.d.ts +1 -0
  72. package/dist/src/lib/marked-renderer.d.ts +4 -0
  73. package/dist/src/lib/marked.d.ts +4 -2
  74. package/dist/src/lib/sanitizer.d.ts +1 -0
  75. package/dist/src/lib/ui.d.ts +3 -2
  76. package/dist/src/lib/user.d.ts +8 -5
  77. package/dist/src/lib/utils.d.ts +11 -5
  78. package/dist/src/list/comment.d.ts +3 -0
  79. package/dist/src/list/layout.d.ts +23 -0
  80. package/dist/src/list/list.d.ts +13 -25
  81. package/dist/src/list/{list-nest.d.ts → nest.d.ts} +1 -1
  82. package/dist/src/list/page.d.ts +2 -0
  83. package/dist/src/list/paginator/index.d.ts +22 -7
  84. package/dist/src/list/paginator/read-more.d.ts +18 -0
  85. package/dist/src/list/paginator/up-down.d.ts +14 -0
  86. package/dist/src/main.d.ts +5 -0
  87. package/dist/src/plugins/admin-only-elem.d.ts +2 -0
  88. package/dist/src/plugins/conf-remoter.d.ts +2 -0
  89. package/dist/src/plugins/dark-mode.d.ts +2 -0
  90. package/dist/src/plugins/editor/_kit.d.ts +27 -0
  91. package/dist/src/plugins/editor/_plug.d.ts +29 -0
  92. package/dist/src/plugins/editor/_sample.d.ts +5 -0
  93. package/dist/src/plugins/editor/closable.d.ts +7 -0
  94. package/dist/src/{editor/plugs/emoticons-plug.d.ts → plugins/editor/emoticons.d.ts} +10 -16
  95. package/dist/src/plugins/editor/header-event.d.ts +6 -0
  96. package/dist/src/plugins/editor/header-link.d.ts +6 -0
  97. package/dist/src/plugins/editor/header-user.d.ts +16 -0
  98. package/dist/src/plugins/editor/index.d.ts +6 -0
  99. package/dist/src/plugins/editor/local-storage.d.ts +6 -0
  100. package/dist/src/plugins/editor/mover.d.ts +6 -0
  101. package/dist/src/plugins/editor/preview.d.ts +7 -0
  102. package/dist/src/plugins/editor/state-edit.d.ts +11 -0
  103. package/dist/src/plugins/editor/state-reply.d.ts +8 -0
  104. package/dist/src/plugins/editor/submit-add.d.ts +18 -0
  105. package/dist/src/plugins/editor/submit-btn.d.ts +5 -0
  106. package/dist/src/plugins/editor/submit.d.ts +17 -0
  107. package/dist/src/plugins/editor/textarea.d.ts +8 -0
  108. package/dist/src/plugins/editor/upload.d.ts +9 -0
  109. package/dist/src/plugins/editor-kit.d.ts +42 -0
  110. package/dist/src/plugins/index.d.ts +2 -0
  111. package/dist/src/plugins/list/copyright.d.ts +2 -0
  112. package/dist/src/plugins/list/count.d.ts +2 -0
  113. package/dist/src/plugins/list/dropdown.d.ts +2 -0
  114. package/dist/src/plugins/list/error-dialog.d.ts +2 -0
  115. package/dist/src/plugins/list/fetch.d.ts +2 -0
  116. package/dist/src/plugins/list/goto-first.d.ts +3 -0
  117. package/dist/src/plugins/list/goto.d.ts +2 -0
  118. package/dist/src/plugins/list/index.d.ts +3 -0
  119. package/dist/src/plugins/list/loading.d.ts +2 -0
  120. package/dist/src/plugins/list/no-comment.d.ts +2 -0
  121. package/dist/src/plugins/list/reach-bottom.d.ts +2 -0
  122. package/dist/src/plugins/list/sidebar-btn.d.ts +2 -0
  123. package/dist/src/plugins/list/time-ticking.d.ts +3 -0
  124. package/dist/src/plugins/list/unread-badge.d.ts +2 -0
  125. package/dist/src/plugins/list/unread.d.ts +2 -0
  126. package/dist/src/plugins/list/with-editor.d.ts +2 -0
  127. package/dist/src/plugins/markdown.d.ts +2 -0
  128. package/dist/src/plugins/stat.d.ts +13 -0
  129. package/dist/src/plugins/version-check.d.ts +2 -0
  130. package/dist/src/service.d.ts +19 -23
  131. package/dist/tests/e2e/comment-add.spec.d.ts +1 -0
  132. package/dist/types/config.d.ts +110 -0
  133. package/dist/types/context.d.ts +56 -136
  134. package/dist/types/data.d.ts +194 -0
  135. package/dist/types/editor.d.ts +76 -0
  136. package/dist/types/event.d.ts +36 -25
  137. package/dist/types/index.d.ts +7 -0
  138. package/dist/types/plugin.d.ts +2 -0
  139. package/dist/types/sidebar.d.ts +3 -0
  140. package/package.json +5 -2
  141. package/src/api/_base.ts +18 -0
  142. package/src/api/_options.ts +25 -0
  143. package/src/api/{request.ts → _request.ts} +19 -18
  144. package/src/api/admin.ts +1 -1
  145. package/src/api/captcha.ts +1 -1
  146. package/src/api/comment.ts +4 -4
  147. package/src/api/index.ts +3 -12
  148. package/src/api/page.ts +5 -5
  149. package/src/api/site.ts +2 -2
  150. package/src/api/system.ts +19 -7
  151. package/src/api/upload.ts +3 -3
  152. package/src/api/user.ts +3 -3
  153. package/src/artalk.ts +47 -99
  154. package/src/comment/actions.ts +1 -4
  155. package/src/comment/comment.ts +9 -6
  156. package/src/comment/render.ts +27 -5
  157. package/src/comment/renders/actions.ts +45 -45
  158. package/src/comment/renders/avatar.ts +7 -7
  159. package/src/comment/renders/content.ts +18 -18
  160. package/src/comment/renders/header.ts +13 -13
  161. package/src/comment/renders/index.ts +3 -3
  162. package/src/comment/renders/pending.ts +5 -5
  163. package/src/comment/renders/reply-at.ts +8 -8
  164. package/src/comment/renders/reply-to.ts +13 -13
  165. package/src/components/action-btn.ts +11 -13
  166. package/src/{lib → components}/checker/admin.ts +6 -6
  167. package/src/{lib → components}/checker/captcha-renders.ts +7 -6
  168. package/src/{lib → components}/checker/captcha.ts +1 -1
  169. package/src/{lib → components}/checker/index.ts +21 -26
  170. package/src/components/dark-mode.ts +30 -0
  171. package/src/components/dialog.ts +4 -9
  172. package/src/components/error-dialog.ts +35 -0
  173. package/src/components/pagination.ts +10 -6
  174. package/src/components/read-more-btn.ts +7 -7
  175. package/src/config.ts +60 -6
  176. package/src/context.ts +39 -144
  177. package/src/data.ts +110 -0
  178. package/src/defaults.ts +1 -1
  179. package/src/editor/editor.ts +39 -152
  180. package/src/editor/state.ts +52 -0
  181. package/src/i18n/en.ts +3 -0
  182. package/src/i18n/jp.ts +3 -0
  183. package/src/i18n/zh-CN.ts +4 -1
  184. package/src/i18n/zh-TW.ts +3 -0
  185. package/src/layer/index.ts +4 -4
  186. package/src/layer/layer-manager.ts +32 -0
  187. package/src/layer/layer.ts +20 -144
  188. package/src/layer/scrollbar-helper.ts +24 -0
  189. package/src/layer/sidebar-layer.ts +74 -64
  190. package/src/layer/wrap.ts +77 -0
  191. package/src/lib/component.ts +4 -11
  192. package/src/lib/detect.ts +1 -1
  193. package/src/lib/event-manager.ts +47 -0
  194. package/src/lib/highlight.ts +5 -0
  195. package/src/lib/marked-renderer.ts +32 -0
  196. package/src/lib/marked.ts +43 -104
  197. package/src/lib/sanitizer.ts +57 -0
  198. package/src/lib/ui.ts +22 -15
  199. package/src/lib/user.ts +21 -16
  200. package/src/lib/utils.ts +29 -18
  201. package/src/list/comment.ts +20 -0
  202. package/src/list/layout.ts +120 -0
  203. package/src/list/list.html +3 -1
  204. package/src/list/list.ts +56 -200
  205. package/src/list/{list-nest.ts → nest.ts} +1 -1
  206. package/src/list/page.ts +97 -0
  207. package/src/list/paginator/index.ts +20 -8
  208. package/src/list/paginator/read-more.ts +67 -0
  209. package/src/list/paginator/up-down.ts +51 -0
  210. package/src/main.ts +11 -0
  211. package/src/plugins/admin-only-elem.ts +40 -0
  212. package/src/plugins/conf-remoter.ts +54 -0
  213. package/src/plugins/dark-mode.ts +12 -0
  214. package/src/plugins/editor/_kit.ts +57 -0
  215. package/src/plugins/editor/_plug.ts +60 -0
  216. package/src/plugins/editor/_sample.ts +8 -0
  217. package/src/plugins/editor/closable.ts +44 -0
  218. package/src/{editor/plugs/emoticons-plug.ts → plugins/editor/emoticons.ts} +51 -52
  219. package/src/plugins/editor/header-event.ts +35 -0
  220. package/src/plugins/editor/header-link.ts +31 -0
  221. package/src/plugins/editor/header-user.ts +98 -0
  222. package/src/plugins/editor/index.ts +40 -0
  223. package/src/plugins/editor/local-storage.ts +36 -0
  224. package/src/plugins/editor/mover.ts +29 -0
  225. package/src/plugins/editor/preview.ts +41 -0
  226. package/src/plugins/editor/state-edit.ts +116 -0
  227. package/src/plugins/editor/state-reply.ts +91 -0
  228. package/src/plugins/editor/submit-add.ts +33 -0
  229. package/src/plugins/editor/submit-btn.ts +25 -0
  230. package/src/plugins/editor/submit.ts +73 -0
  231. package/src/plugins/editor/textarea.ts +55 -0
  232. package/src/plugins/editor/upload.ts +145 -0
  233. package/src/plugins/editor-kit.ts +161 -0
  234. package/src/plugins/index.ts +16 -0
  235. package/src/plugins/list/copyright.ts +16 -0
  236. package/src/plugins/list/count.ts +31 -0
  237. package/src/plugins/list/dropdown.ts +95 -0
  238. package/src/plugins/list/error-dialog.ts +22 -0
  239. package/src/plugins/list/fetch.ts +64 -0
  240. package/src/plugins/list/goto-first.ts +23 -0
  241. package/src/plugins/list/goto.ts +72 -0
  242. package/src/plugins/list/index.ts +25 -0
  243. package/src/plugins/list/loading.ts +17 -0
  244. package/src/plugins/list/no-comment.ts +25 -0
  245. package/src/plugins/list/reach-bottom.ts +46 -0
  246. package/src/plugins/list/sidebar-btn.ts +39 -0
  247. package/src/plugins/list/time-ticking.ts +22 -0
  248. package/src/plugins/list/unread-badge.ts +26 -0
  249. package/src/plugins/list/unread.ts +38 -0
  250. package/src/plugins/list/with-editor.ts +59 -0
  251. package/src/plugins/markdown.ts +10 -0
  252. package/src/plugins/stat.ts +82 -0
  253. package/src/plugins/version-check.ts +36 -0
  254. package/src/service.ts +34 -61
  255. package/src/style/comment.scss +5 -7
  256. package/src/style/editor.scss +5 -0
  257. package/src/style/list.scss +1 -1
  258. package/types/{artalk-config.d.ts → config.ts} +16 -2
  259. package/types/context.ts +84 -0
  260. package/types/{artalk-data.d.ts → data.ts} +41 -0
  261. package/types/editor.ts +95 -0
  262. package/types/event.ts +40 -0
  263. package/types/index.ts +7 -0
  264. package/types/plugin.ts +3 -0
  265. package/types/sidebar.ts +3 -0
  266. package/dist/src/comment/render-ctx.d.ts +0 -23
  267. package/dist/src/editor/edit-mode.d.ts +0 -9
  268. package/dist/src/editor/funcs.d.ts +0 -2
  269. package/dist/src/editor/index.d.ts +0 -2
  270. package/dist/src/editor/mover.d.ts +0 -8
  271. package/dist/src/editor/plug-manager.d.ts +0 -17
  272. package/dist/src/editor/plugs/editor-plug.d.ts +0 -38
  273. package/dist/src/editor/plugs/header-input-plug.d.ts +0 -13
  274. package/dist/src/editor/plugs/preview-plug.d.ts +0 -10
  275. package/dist/src/editor/plugs/upload-plug.d.ts +0 -10
  276. package/dist/src/editor/reply.d.ts +0 -9
  277. package/dist/src/editor/submit.d.ts +0 -16
  278. package/dist/src/lib/dark-mode.d.ts +0 -4
  279. package/dist/src/lib/stat.d.ts +0 -15
  280. package/dist/src/list/index.d.ts +0 -2
  281. package/dist/src/list/list-lite.d.ts +0 -77
  282. package/dist/src/list/list-ui.d.ts +0 -16
  283. package/dist/src/list/paginator/adaptors/index.d.ts +0 -12
  284. package/dist/src/list/paginator/adaptors/pagination.d.ts +0 -9
  285. package/dist/src/list/paginator/adaptors/read-more.d.ts +0 -10
  286. package/dist/src/list/paginator/holder.d.ts +0 -16
  287. package/dist/types/artalk-config.d.ts +0 -139
  288. package/dist/types/artalk-data.d.ts +0 -230
  289. package/dist/types/plug.d.ts +0 -4
  290. package/src/api/api-base.ts +0 -27
  291. package/src/comment/render-ctx.ts +0 -30
  292. package/src/editor/edit-mode.ts +0 -105
  293. package/src/editor/funcs.ts +0 -150
  294. package/src/editor/index.ts +0 -3
  295. package/src/editor/mover.ts +0 -43
  296. package/src/editor/plug-manager.ts +0 -172
  297. package/src/editor/plugs/editor-plug.ts +0 -69
  298. package/src/editor/plugs/header-input-plug.ts +0 -79
  299. package/src/editor/plugs/preview-plug.ts +0 -44
  300. package/src/editor/plugs/upload-plug.ts +0 -122
  301. package/src/editor/reply.ts +0 -62
  302. package/src/editor/submit.ts +0 -99
  303. package/src/lib/dark-mode.ts +0 -48
  304. package/src/lib/stat.ts +0 -71
  305. package/src/list/index.ts +0 -3
  306. package/src/list/list-lite.ts +0 -424
  307. package/src/list/list-ui.ts +0 -137
  308. package/src/list/paginator/adaptors/index.ts +0 -21
  309. package/src/list/paginator/adaptors/pagination.ts +0 -42
  310. package/src/list/paginator/adaptors/read-more.ts +0 -56
  311. package/src/list/paginator/holder.ts +0 -56
  312. package/types/context.d.ts +0 -142
  313. package/types/event.d.ts +0 -28
  314. package/types/plug.d.ts +0 -4
  315. /package/src/{editor/plugs/emoticons-plug.scss → plugins/editor/emoticons.scss} +0 -0
  316. /package/src/{editor/plugs/preview-plug.scss → plugins/editor/preview.scss} +0 -0
@@ -0,0 +1,110 @@
1
+ import { I18n } from '../src/i18n';
2
+ import { CommentData } from './data';
3
+ export interface ArtalkConfig {
4
+ /** 装载元素 */
5
+ el: string | HTMLElement;
6
+ /** 页面唯一标识(完整 URL) */
7
+ pageKey: string;
8
+ /** 页面标题 */
9
+ pageTitle: string;
10
+ /** 服务器地址 */
11
+ server: string;
12
+ /** 站点名 */
13
+ site: string;
14
+ /** 评论框占位字符 */
15
+ placeholder: string;
16
+ /** 评论为空时显示字符 */
17
+ noComment: string;
18
+ /** 发送按钮文字 */
19
+ sendBtn: string;
20
+ /** 评论框穿梭(显示在待回复评论后面) */
21
+ editorTravel: boolean;
22
+ /** 表情包 */
23
+ emoticons: object | any[] | string | false;
24
+ /** Gravatar 头像 */
25
+ gravatar: {
26
+ /** API 地址 */
27
+ mirror: string;
28
+ /** API 参数 */
29
+ params: string;
30
+ };
31
+ /** 头像链接生成器 */
32
+ avatarURLBuilder?: (comment: CommentData) => string;
33
+ /** 分页配置 */
34
+ pagination: {
35
+ /** 每次请求获取数量 */
36
+ pageSize: number;
37
+ /** 阅读更多模式 */
38
+ readMore: boolean;
39
+ /** 滚动到底部自动加载 */
40
+ autoLoad: boolean;
41
+ };
42
+ /** 内容限高 */
43
+ heightLimit: {
44
+ /** 评论内容限高 */
45
+ content: number;
46
+ /** 子评论区域限高 */
47
+ children: number;
48
+ /** 滚动限高 */
49
+ scrollable: boolean;
50
+ };
51
+ /** 评论投票按钮 */
52
+ vote: boolean;
53
+ /** 评论投票反对按钮 */
54
+ voteDown: boolean;
55
+ /** 评论预览功能 */
56
+ preview: boolean;
57
+ /** 评论数绑定元素 Selector */
58
+ countEl: string;
59
+ /** PV 数绑定元素 Selector */
60
+ pvEl: string;
61
+ /** 夜间模式 */
62
+ darkMode: boolean | 'auto';
63
+ /** 请求超时(单位:秒) */
64
+ reqTimeout: number;
65
+ /** 平铺模式 */
66
+ flatMode: boolean | 'auto';
67
+ /** 嵌套模式 · 最大层数 */
68
+ nestMax: number;
69
+ /** 嵌套模式 · 排序方式 */
70
+ nestSort: 'DATE_ASC' | 'DATE_DESC';
71
+ /** 显示 UA 徽标 */
72
+ uaBadge: boolean;
73
+ /** 评论列表排序功能 (显示 Dropdown) */
74
+ listSort: boolean;
75
+ /** 图片上传功能 */
76
+ imgUpload: boolean;
77
+ /** 图片上传器 */
78
+ imgUploader?: (file: File) => Promise<string>;
79
+ /** 版本检测 */
80
+ versionCheck: boolean;
81
+ /** 引用后端配置 */
82
+ useBackendConf: boolean;
83
+ /** 语言本地化 */
84
+ locale: I18n | string;
85
+ /** 后端版本 (系统数据,用户不允许更改) */
86
+ apiVersion?: string;
87
+ /** Replacer for marked */
88
+ markedReplacers?: ((raw: string) => string)[];
89
+ /** 列表请求参数修改器 */
90
+ listFetchParamsModifier?: (params: any) => void;
91
+ remoteConfModifier?: (conf: Partial<ArtalkConfig>) => void;
92
+ listUnreadHighlight?: boolean;
93
+ scrollRelativeTo?: () => HTMLElement;
94
+ }
95
+ /**
96
+ * 本地持久化用户数据
97
+ * @note 始终保持一层结构,不支持多层结构
98
+ */
99
+ export interface LocalUser {
100
+ /** 昵称 */
101
+ nick: string;
102
+ /** 邮箱 */
103
+ email: string;
104
+ /** 链接 */
105
+ link: string;
106
+ /** TOKEN */
107
+ token: string;
108
+ /** 是否为管理员 */
109
+ isAdmin: boolean;
110
+ }
@@ -1,142 +1,62 @@
1
- import ArtalkConfig from './artalk-config'
2
- import { CommentData, NotifyData } from './artalk-data'
3
- import { EventPayloadMap, Event, EventScopeType, Handler } from './event'
4
- import { internal as internalLocales, I18n } from '../src/i18n'
5
- import Api from '../src/api'
6
- import User from '../src/lib/user'
7
- import Comment from '../src/comment'
8
- import { SidebarShowPayload } from '../src/layer/sidebar-layer'
9
- import { CheckerCaptchaPayload, CheckerPayload } from '../src/lib/checker'
10
- import type { TMarked } from '../src/lib/marked'
11
- import type { TInjectedServices } from '../src/service'
12
-
1
+ import type { TInjectedServices } from '../src/service';
2
+ import type { CheckerCaptchaPayload, CheckerPayload } from '../src/components/checker';
3
+ import type { EventManagerFuncs } from '../src/lib/event-manager';
4
+ import type { TMarked } from '../src/lib/marked';
5
+ import type { I18n } from '../src/i18n';
6
+ import type Api from '../src/api';
7
+ import type { SidebarShowPayload, EventPayloadMap, ArtalkConfig, CommentData, DataManagerApi, ListFetchParams, NotifyLevel } from '.';
13
8
  /**
14
9
  * Context 接口
15
10
  *
16
11
  * (面向接口的编程)
17
12
  */
18
- export default interface ContextApi {
19
- /** Artalk 根元素对象 */
20
- $root: HTMLElement
21
-
22
- /** 依赖注入函数 */
23
- inject<K extends keyof TInjectedServices>(depName: K, obj: TInjectedServices[K]): void
24
-
25
- /** 获取依赖对象 */
26
- get<K extends keyof TInjectedServices>(depName: K): TInjectedServices[K]
27
-
28
- /** 配置对象 */
29
- // TODO 修改为 getConf() 和 setConf()
30
- conf: ArtalkConfig
31
-
32
- /** marked 依赖对象 */
33
- getMarkedInstance(): TMarked | undefined
34
-
35
- /** marked 内容替换器 */
36
- markedReplacers: ((raw: string) => string)[]
37
-
38
- /** 获取 API 以供 HTTP 请求 */
39
- getApi(): Api
40
-
41
- /** 获取评论实例对象列表 */
42
- getCommentList(): Comment[]
43
-
44
- /** 获取评论数据列表 */
45
- getCommentDataList(): CommentData[]
46
-
47
- /** 查找评论 */
48
- findComment(id: number): Comment|undefined
49
-
50
- /** 删除评论 */
51
- deleteComment(comment: number|Comment): void
52
-
53
- /** 清空评论 */
54
- clearAllComments(): void
55
-
56
- /** 插入评论 */
57
- insertComment(commentData: CommentData): void
58
-
59
- /** 更新评论 */
60
- updateComment(commentData: CommentData): void
61
-
62
- /** 评论回复 */
63
- replyComment(commentData: CommentData, $comment: HTMLElement, scroll?: boolean): void
64
-
65
- /** 取消回复评论 */
66
- cancelReplyComment(): void
67
-
68
- /** 编辑评论 */
69
- editComment(commentData: CommentData, $comment: HTMLElement): void
70
-
71
- /** 取消编辑评论 */
72
- cancelEditComment(): void
73
-
74
- /** 更新通知数据 */
75
- updateNotifies(notifies: NotifyData[]): void
76
-
77
- /** 列表 - 重新加载数据 */
78
- listReload(): void
79
-
80
- /** 列表 - 重新加载数据 (别名) */
81
- reload(): void
82
-
83
- /** 列表 - UI 更新 */
84
- listRefreshUI(): void
85
-
86
- /** 列表 - HashGoto 功能检测 */
87
- listHashGotoCheck(): void
88
-
89
- /** 显示侧边栏 */
90
- showSidebar(payload?: SidebarShowPayload): void
91
-
92
- /** 隐藏侧边栏 */
93
- hideSidebar(): void
94
-
95
- /** 编辑器 - 关闭评论 */
96
- editorClose(): void
97
-
98
- /** 编辑器 - 打开评论 */
99
- editorOpen(): void
100
-
101
- /** 编辑器 - 显示加载 */
102
- editorShowLoading(): void
103
-
104
- /** 编辑器 - 隐藏加载 */
105
- editorHideLoading(): void
106
-
107
- /** 编辑器 - 显示提示消息 */
108
- editorShowNotify(msg: string, type: "i" | "s" | "w" | "e"): void
109
-
110
- /** 评论框 - 位置移动 */
111
- editorTravel($el: HTMLElement): void
112
-
113
- /** 评论框 - 位置回归 */
114
- editorTravelBack(): void
115
-
116
- /** 验证码检测 */
117
- checkCaptcha(payload: CheckerCaptchaPayload): void
118
-
119
- /** 管理员检测 */
120
- checkAdmin(payload: CheckerPayload): void
121
-
122
- /** 管理员显示元素可见性更新 */
123
- checkAdminShowEl(): void
124
-
125
- /** 订阅注册 */
126
- on<K extends keyof EventPayloadMap>(name: K, handler: Handler<EventPayloadMap[K]>, scope?: EventScopeType): void
127
-
128
- /** 订阅取消 */
129
- off<K extends keyof EventPayloadMap>(name: K, handler?: Handler<EventPayloadMap[K]>, scope?: EventScopeType): void
130
-
131
- /** 订阅发布 */
132
- trigger<K extends keyof EventPayloadMap>(name: K, payload?: EventPayloadMap[K], scope?: EventScopeType): void
133
-
134
- /** i18n 翻译 */
135
- $t(key: keyof I18n, args?: {[key: string]: string}): string
136
-
137
- /** 设置夜间模式 */
138
- setDarkMode(darkMode: boolean): void
139
-
140
- /** 更新配置 */
141
- updateConf(conf: Partial<ArtalkConfig>): void
13
+ export interface ContextApi extends EventManagerFuncs<EventPayloadMap> {
14
+ /** Artalk 根元素对象 */
15
+ $root: HTMLElement;
16
+ /** 依赖注入函数 */
17
+ inject<K extends keyof TInjectedServices>(depName: K, obj: TInjectedServices[K]): void;
18
+ /** 获取依赖对象 */
19
+ get<K extends keyof TInjectedServices>(depName: K): TInjectedServices[K];
20
+ /** 配置对象 */
21
+ conf: ArtalkConfig;
22
+ /** marked 依赖对象 */
23
+ getMarked(): TMarked | undefined;
24
+ /** 获取 API 以供 HTTP 请求 */
25
+ getApi(): Api;
26
+ /** 获取数据管理器对象 */
27
+ getData(): DataManagerApi;
28
+ /** 评论回复 */
29
+ replyComment(commentData: CommentData, $comment: HTMLElement): void;
30
+ /** 编辑评论 */
31
+ editComment(commentData: CommentData, $comment: HTMLElement): void;
32
+ /** 获取评论数据 */
33
+ fetch(params: Partial<ListFetchParams>): void;
34
+ /** 重载评论数据 */
35
+ reload(): void;
36
+ /** 列表滚动到第一个评论的位置 */
37
+ listGotoFirst(): void;
38
+ /** 显示侧边栏 */
39
+ showSidebar(payload?: SidebarShowPayload): void;
40
+ /** 隐藏侧边栏 */
41
+ hideSidebar(): void;
42
+ /** 编辑器 - 显示加载 */
43
+ editorShowLoading(): void;
44
+ /** 编辑器 - 隐藏加载 */
45
+ editorHideLoading(): void;
46
+ /** 编辑器 - 显示提示消息 */
47
+ editorShowNotify(msg: string, type: NotifyLevel): void;
48
+ /** 评论框 - 复原状态 */
49
+ editorResetState(): void;
50
+ /** 验证码检测 */
51
+ checkCaptcha(payload: CheckerCaptchaPayload): void;
52
+ /** 管理员检测 */
53
+ checkAdmin(payload: CheckerPayload): void;
54
+ /** i18n 翻译 */
55
+ $t(key: keyof I18n, args?: {
56
+ [key: string]: string;
57
+ }): string;
58
+ /** 设置夜间模式 */
59
+ setDarkMode(darkMode: boolean | 'auto'): void;
60
+ /** 更新配置 */
61
+ updateConf(conf: Partial<ArtalkConfig>): void;
142
62
  }
@@ -0,0 +1,194 @@
1
+ export interface CommentData {
2
+ /** 评论 ID */
3
+ id: number;
4
+ /** 评论正文 */
5
+ content: string;
6
+ /** 用户昵称 */
7
+ nick: string;
8
+ /** 用户邮箱 (该字段仅管理员可见) */
9
+ email?: string;
10
+ /** 用户邮箱(已加密) */
11
+ email_encrypted: string;
12
+ /** 用户链接 */
13
+ link: string;
14
+ /** 回复目标评论 ID */
15
+ rid: number;
16
+ /** User Agent */
17
+ ua: string;
18
+ /** 评论日期 */
19
+ date: string;
20
+ /** 是否折叠 */
21
+ is_collapsed?: boolean;
22
+ /** 是否待审 */
23
+ is_pending?: boolean;
24
+ /** 是否置顶 */
25
+ is_pinned?: boolean;
26
+ /** 是否为管理员 */
27
+ is_admin?: boolean;
28
+ /** 徽章文字 */
29
+ badge_name?: string;
30
+ /** 徽章颜色 */
31
+ badge_color?: string;
32
+ /** IP 归属地 */
33
+ ip_region?: string;
34
+ /** 是否允许回复 */
35
+ is_allow_reply?: boolean;
36
+ /** 评论页面 key */
37
+ page_key: string;
38
+ /** 评论页面 url */
39
+ page_url?: string;
40
+ /** 是否可见 */
41
+ visible: boolean;
42
+ /** 站点名(用于隔离) */
43
+ site_name: string;
44
+ /** 赞同数 */
45
+ vote_up: number;
46
+ /** 反对数 */
47
+ vote_down: number;
48
+ }
49
+ export interface ListData {
50
+ /** 评论数据 */
51
+ comments: CommentData[];
52
+ /** 根评论总数 */
53
+ total_roots: number;
54
+ /** 评论总数(包括所有子评论) */
55
+ total: number;
56
+ /** 页面信息 */
57
+ page: PageData;
58
+ /** 站点信息 */
59
+ site: SiteData;
60
+ /** 未读的 Notifies */
61
+ unread: NotifyData[];
62
+ /** 未读计数 */
63
+ unread_count: number;
64
+ /** API 版本 */
65
+ api_version: ApiVersionData;
66
+ /** 后端配置 */
67
+ conf: any;
68
+ }
69
+ export interface PageData {
70
+ /** 页面 ID */
71
+ id: number;
72
+ /** 页面唯一标识符 */
73
+ key: string;
74
+ /** 页面标题 */
75
+ title: string;
76
+ /** 页面 url */
77
+ url: string;
78
+ /** 仅管理员可评 */
79
+ admin_only: boolean;
80
+ /** 站点名(用于隔离) */
81
+ site_name: string;
82
+ /** 赞同数 */
83
+ vote_up: number;
84
+ /** 反对数 */
85
+ vote_down: number;
86
+ }
87
+ export interface SiteData {
88
+ /** 站点 ID */
89
+ id: number;
90
+ /** 站点名 */
91
+ name: string;
92
+ /** 站点 URLs */
93
+ urls: string[];
94
+ /** 站点 URLs(原始字符串) */
95
+ urls_raw: string;
96
+ /** 站点主 URL */
97
+ first_url: string;
98
+ }
99
+ export interface UserData {
100
+ /** 用户 ID */
101
+ id: number;
102
+ /** 用户名 */
103
+ name: string;
104
+ /** 邮箱 */
105
+ email: string;
106
+ /** 链接 */
107
+ link: string;
108
+ /** 徽章名称 */
109
+ badge_name: string;
110
+ /** 徽章颜色 */
111
+ badge_color: string;
112
+ /** 是否属于管理员 */
113
+ is_admin: boolean;
114
+ /** 所属站点名 */
115
+ site_names: string[];
116
+ /** 所属站点名 (字符串) */
117
+ site_names_raw: string;
118
+ /** 是否允许接收邮件通知 */
119
+ receive_email: boolean;
120
+ }
121
+ export interface UserDataForAdmin extends UserData {
122
+ /** 最后一次操作 IP */
123
+ last_ip: string;
124
+ /** 最后一次操作 UA */
125
+ last_ua: string;
126
+ /** 是否存在于配置文件中 */
127
+ is_in_conf: boolean;
128
+ /** 评论数 */
129
+ comment_count: number;
130
+ /** 密码 */
131
+ password: string;
132
+ }
133
+ export interface NotifyData {
134
+ /** 通知 ID */
135
+ id: number;
136
+ /** 用户 ID */
137
+ user_id: number;
138
+ /** 评论 ID */
139
+ comment_id: number;
140
+ /** 是否已读 */
141
+ is_read: boolean;
142
+ /** 是否已发送邮件通知 */
143
+ is_emailed: boolean;
144
+ /** 标为已读地址 */
145
+ read_link: string;
146
+ }
147
+ export type EmoticonGrpData = {
148
+ name: string;
149
+ type: 'emoticon' | 'image' | 'emoji';
150
+ items: {
151
+ key: string;
152
+ val: string;
153
+ }[];
154
+ };
155
+ export type EmoticonListData = EmoticonGrpData[];
156
+ export interface ApiVersionData {
157
+ /** API 程序名 */
158
+ app: string;
159
+ /** API 程序版本号 */
160
+ version: string;
161
+ /** API 程序 CommitHash */
162
+ commit_hash: string;
163
+ }
164
+ export interface ListFetchParams {
165
+ offset: number;
166
+ limit: number;
167
+ flatMode: boolean;
168
+ paramsModifier?: (p: any) => void;
169
+ onSuccess?: (data: ListData) => void;
170
+ onError?: (err: any) => void;
171
+ }
172
+ export interface ListLastFetchData {
173
+ params: ListFetchParams;
174
+ data?: ListData;
175
+ }
176
+ export interface DataManagerApi {
177
+ getLoading(): boolean;
178
+ setLoading(val: boolean): void;
179
+ getListLastFetch(): ListLastFetchData | undefined;
180
+ setListLastFetch(val: ListLastFetchData): void;
181
+ getComments(): CommentData[];
182
+ findComment(id: number): CommentData | undefined;
183
+ fetchComments(params: Partial<ListFetchParams>): void;
184
+ loadComments(comments: CommentData[]): void;
185
+ clearComments(): void;
186
+ insertComment(comment: CommentData): void;
187
+ updateComment(comment: CommentData): void;
188
+ deleteComment(id: number): void;
189
+ getUnreads(): NotifyData[];
190
+ updateUnreads(unreads: NotifyData[]): void;
191
+ getPage(): PageData | undefined;
192
+ updatePage(pageData: PageData): void;
193
+ }
194
+ export type NotifyLevel = "i" | "s" | "w" | "e";
@@ -0,0 +1,76 @@
1
+ import type { CommentData, NotifyLevel } from '.';
2
+ import type Component from '../src/lib/component';
3
+ import type { EditorUI } from '../src/editor/ui';
4
+ export type EditorState = 'reply' | 'edit' | 'normal';
5
+ export interface EditorApi extends Component {
6
+ getUI(): EditorUI;
7
+ /**
8
+ * Get the header input elements
9
+ */
10
+ getHeaderInputEls(): Record<string, HTMLInputElement>;
11
+ /**
12
+ * Set content
13
+ */
14
+ setContent(val: string): void;
15
+ /**
16
+ * Insert content
17
+ */
18
+ insertContent(val: string): void;
19
+ /**
20
+ * Get the final content
21
+ *
22
+ * This function returns the raw content or the content transformed through a plugin hook.
23
+ */
24
+ getContentFinal(): string;
25
+ /**
26
+ * Get the raw content which is inputed by user
27
+ */
28
+ getContentRaw(): string;
29
+ /**
30
+ * Get the HTML format content which is rendered by marked (a markdown parser)
31
+ */
32
+ getContentMarked(): string;
33
+ /**
34
+ * Get editor current state
35
+ */
36
+ getState(): EditorState;
37
+ /**
38
+ * Focus editor
39
+ */
40
+ focus(): void;
41
+ /**
42
+ * Reset editor
43
+ */
44
+ reset(): void;
45
+ /**
46
+ * Reset editor UI
47
+ *
48
+ * call it will move editor to the initial position
49
+ */
50
+ resetState(): void;
51
+ /**
52
+ * Submit comment
53
+ */
54
+ submit(): void;
55
+ /**
56
+ * Show notification message
57
+ */
58
+ showNotify(msg: string, type: NotifyLevel): void;
59
+ /**
60
+ * Show loading on editor
61
+ */
62
+ showLoading(): void;
63
+ /**
64
+ * Hide loading on editor
65
+ */
66
+ hideLoading(): void;
67
+ /**
68
+ * Start replaying a comment
69
+ */
70
+ setReply(commentData: CommentData, $comment: HTMLElement, scroll?: boolean): void;
71
+ /**
72
+ * Start editing a comment
73
+ */
74
+ setEditComment(commentData: CommentData, $comment: HTMLElement): void;
75
+ }
76
+ export default EditorApi;
@@ -1,28 +1,39 @@
1
- import { CommentData } from './artalk-data'
2
- import { LocalUser } from './artalk-config'
3
-
4
- /** EventName to EventPayload Type */
5
- export interface EventPayloadMap {
6
- 'list-load': undefined // 评论加载时
7
- 'list-loaded': undefined // 评论装载后
8
- 'list-inserted': CommentData // 评论插入后
9
- 'editor-submit': undefined // 编辑器提交时
10
- 'editor-submitted': undefined // 编辑器提交后
11
- 'user-changed': LocalUser // 本地用户数据变更时
12
- 'conf-loaded': undefined // Artalk 配置变更时
13
- 'sidebar-show': undefined // 侧边栏显示
14
- 'sidebar-hide': undefined // 侧边栏隐藏
1
+ import type Comment from '../src/comment';
2
+ import { CommentData, ListData, ListFetchParams, NotifyData, PageData } from './data';
3
+ import { ArtalkConfig, LocalUser } from './config';
4
+ interface ErrorData {
5
+ msg: string;
6
+ data?: any;
15
7
  }
16
-
17
- // ============================================
18
- export interface Handler<P> {
19
- (payload: P): void
8
+ interface ListFetchedArgs {
9
+ params: Partial<ListFetchParams>;
10
+ data?: ListData;
11
+ error?: ErrorData;
20
12
  }
21
-
22
- export type EventScopeType = 'internal'|'external'
23
-
24
- export interface Event<K extends keyof EventPayloadMap = keyof EventPayloadMap> {
25
- name: keyof EventPayloadMap
26
- handler: Handler<EventPayloadMap[K]>
27
- scope: EventScopeType
13
+ /** EventName to EventPayload Type */
14
+ export interface EventPayloadMap {
15
+ 'inited': undefined;
16
+ 'destroy': undefined;
17
+ 'list-fetch': Partial<ListFetchParams>;
18
+ 'list-fetched': ListFetchedArgs;
19
+ 'list-load': CommentData[];
20
+ 'list-loaded': CommentData[];
21
+ 'list-error': ErrorData;
22
+ 'list-goto-first': undefined;
23
+ 'list-reach-bottom': undefined;
24
+ 'comment-inserted': CommentData;
25
+ 'comment-updated': CommentData;
26
+ 'comment-deleted': CommentData;
27
+ 'comment-rendered': Comment;
28
+ 'unreads-updated': NotifyData[];
29
+ 'list-goto': number;
30
+ 'page-loaded': PageData;
31
+ 'editor-submit': undefined;
32
+ 'editor-submitted': undefined;
33
+ 'user-changed': LocalUser;
34
+ 'conf-loaded': ArtalkConfig;
35
+ 'dark-mode-changed': boolean;
36
+ 'sidebar-show': undefined;
37
+ 'sidebar-hide': undefined;
28
38
  }
39
+ export {};
@@ -0,0 +1,7 @@
1
+ export * from './config';
2
+ export * from './data';
3
+ export * from './context';
4
+ export * from './editor';
5
+ export * from './event';
6
+ export * from './plugin';
7
+ export * from './sidebar';
@@ -0,0 +1,2 @@
1
+ import { ContextApi } from './context';
2
+ export type ArtalkPlugin = (ctx: ContextApi) => void;
@@ -0,0 +1,3 @@
1
+ export interface SidebarShowPayload {
2
+ view?: 'comments' | 'sites' | 'pages' | 'transfer';
3
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "artalk",
3
- "version": "2.6.4",
3
+ "version": "2.7.1",
4
4
  "license": "MIT",
5
5
  "description": "A Selfhosted Comment System",
6
6
  "keywords": [
@@ -22,6 +22,7 @@
22
22
  "jsdelivr": "./dist/Artalk.iife.js",
23
23
  "module": "./dist/Artalk.es.js",
24
24
  "types": "./dist/src/main.d.ts",
25
+ "typings": "./dist/src/main.d.ts",
25
26
  "devDependencies": {
26
27
  "@types/marked": "5.0.1"
27
28
  },
@@ -41,6 +42,8 @@
41
42
  "deploy": "gh-pages -d deploy",
42
43
  "predeploy": "pnpm build && pnpm build:demo && pnpm copy:deploy",
43
44
  "copy:deploy": "cp -r dist deploy && cp CNAME deploy",
44
- "lint": "eslint --ext .js,.ts src"
45
+ "lint": "eslint --ext .js,.ts src",
46
+ "test:e2e": "playwright test",
47
+ "test:report": "playwright show-report"
45
48
  }
46
49
  }