artalk 2.6.3 → 2.7.0

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 (300) hide show
  1. package/dist/Artalk.css +1 -1
  2. package/dist/Artalk.es.js +7673 -7330
  3. package/dist/Artalk.iife.js +1 -1
  4. package/dist/Artalk.js +1 -1
  5. package/dist/ArtalkLite.css +1 -1
  6. package/dist/ArtalkLite.es.js +5304 -4961
  7. package/dist/ArtalkLite.iife.js +1 -1
  8. package/dist/ArtalkLite.js +1 -1
  9. package/dist/src/api/{api-base.d.ts → _base.d.ts} +3 -7
  10. package/dist/src/api/_options.d.ts +19 -0
  11. package/dist/src/api/{request.d.ts → _request.d.ts} +3 -3
  12. package/dist/src/api/admin.d.ts +1 -1
  13. package/dist/src/api/captcha.d.ts +1 -1
  14. package/dist/src/api/comment.d.ts +2 -2
  15. package/dist/src/api/index.d.ts +2 -4
  16. package/dist/src/api/page.d.ts +3 -3
  17. package/dist/src/api/site.d.ts +2 -2
  18. package/dist/src/api/system.d.ts +13 -3
  19. package/dist/src/api/upload.d.ts +1 -1
  20. package/dist/src/api/user.d.ts +2 -2
  21. package/dist/src/artalk.d.ts +14 -37
  22. package/dist/src/comment/actions.d.ts +1 -1
  23. package/dist/src/comment/comment.d.ts +3 -4
  24. package/dist/src/comment/render.d.ts +21 -3
  25. package/dist/src/comment/renders/actions.d.ts +2 -2
  26. package/dist/src/comment/renders/avatar.d.ts +2 -2
  27. package/dist/src/comment/renders/content.d.ts +2 -2
  28. package/dist/src/comment/renders/header.d.ts +2 -2
  29. package/dist/src/comment/renders/index.d.ts +2 -2
  30. package/dist/src/comment/renders/pending.d.ts +2 -2
  31. package/dist/src/comment/renders/reply-at.d.ts +2 -2
  32. package/dist/src/comment/renders/reply-to.d.ts +2 -2
  33. package/dist/src/components/action-btn.d.ts +3 -5
  34. package/dist/src/{lib → components}/checker/admin.d.ts +1 -1
  35. package/dist/src/{lib → components}/checker/captcha-renders.d.ts +1 -1
  36. package/dist/src/{lib → components}/checker/captcha.d.ts +1 -1
  37. package/dist/src/{lib → components}/checker/index.d.ts +10 -7
  38. package/dist/src/components/dark-mode.d.ts +2 -0
  39. package/dist/src/components/dialog.d.ts +1 -3
  40. package/dist/src/components/error-dialog.d.ts +8 -0
  41. package/dist/src/components/pagination.d.ts +4 -3
  42. package/dist/src/components/read-more-btn.d.ts +3 -3
  43. package/dist/src/config.d.ts +24 -8
  44. package/dist/src/context.d.ts +16 -35
  45. package/dist/src/data.d.ts +27 -0
  46. package/dist/src/defaults.d.ts +1 -1
  47. package/dist/src/editor/editor.d.ts +14 -59
  48. package/dist/src/editor/state.d.ts +20 -0
  49. package/dist/src/i18n/zh-CN.d.ts +1 -1
  50. package/dist/src/layer/index.d.ts +4 -3
  51. package/dist/src/layer/layer-manager.d.ts +9 -0
  52. package/dist/src/layer/layer.d.ts +8 -28
  53. package/dist/src/layer/scrollbar-helper.d.ts +5 -0
  54. package/dist/src/layer/sidebar-layer.d.ts +6 -6
  55. package/dist/src/layer/wrap.d.ts +13 -0
  56. package/dist/src/lib/component.d.ts +3 -8
  57. package/dist/src/lib/event-manager.d.ts +28 -0
  58. package/dist/src/lib/highlight.d.ts +1 -0
  59. package/dist/src/lib/marked-renderer.d.ts +4 -0
  60. package/dist/src/lib/marked.d.ts +4 -2
  61. package/dist/src/lib/sanitizer.d.ts +1 -0
  62. package/dist/src/lib/ui.d.ts +3 -2
  63. package/dist/src/lib/user.d.ts +8 -5
  64. package/dist/src/lib/utils.d.ts +11 -5
  65. package/dist/src/list/comment.d.ts +3 -0
  66. package/dist/src/list/layout.d.ts +23 -0
  67. package/dist/src/list/list.d.ts +13 -25
  68. package/dist/src/list/{list-nest.d.ts → nest.d.ts} +1 -1
  69. package/dist/src/list/page.d.ts +2 -0
  70. package/dist/src/list/paginator/index.d.ts +22 -7
  71. package/dist/src/list/paginator/read-more.d.ts +18 -0
  72. package/dist/src/list/paginator/up-down.d.ts +14 -0
  73. package/dist/src/main.d.ts +2 -0
  74. package/dist/src/plugins/admin-only-elem.d.ts +2 -0
  75. package/dist/src/plugins/conf-remoter.d.ts +2 -0
  76. package/dist/src/plugins/dark-mode.d.ts +2 -0
  77. package/dist/src/plugins/editor/_kit.d.ts +27 -0
  78. package/dist/src/plugins/editor/_plug.d.ts +29 -0
  79. package/dist/src/plugins/editor/_sample.d.ts +5 -0
  80. package/dist/src/plugins/editor/closable.d.ts +7 -0
  81. package/dist/src/{editor/plugs/emoticons-plug.d.ts → plugins/editor/emoticons.d.ts} +10 -16
  82. package/dist/src/plugins/editor/header-event.d.ts +6 -0
  83. package/dist/src/plugins/editor/header-link.d.ts +6 -0
  84. package/dist/src/plugins/editor/header-user.d.ts +16 -0
  85. package/dist/src/plugins/editor/index.d.ts +6 -0
  86. package/dist/src/plugins/editor/local-storage.d.ts +6 -0
  87. package/dist/src/plugins/editor/mover.d.ts +6 -0
  88. package/dist/src/plugins/editor/preview.d.ts +7 -0
  89. package/dist/src/plugins/editor/state-edit.d.ts +11 -0
  90. package/dist/src/plugins/editor/state-reply.d.ts +8 -0
  91. package/dist/src/plugins/editor/submit-add.d.ts +18 -0
  92. package/dist/src/plugins/editor/submit-btn.d.ts +5 -0
  93. package/dist/src/plugins/editor/submit.d.ts +17 -0
  94. package/dist/src/plugins/editor/textarea.d.ts +8 -0
  95. package/dist/src/plugins/editor/upload.d.ts +9 -0
  96. package/dist/src/plugins/editor-kit.d.ts +42 -0
  97. package/dist/src/plugins/index.d.ts +2 -0
  98. package/dist/src/plugins/list/copyright.d.ts +2 -0
  99. package/dist/src/plugins/list/count.d.ts +2 -0
  100. package/dist/src/plugins/list/dropdown.d.ts +2 -0
  101. package/dist/src/plugins/list/error-dialog.d.ts +2 -0
  102. package/dist/src/plugins/list/fetch.d.ts +2 -0
  103. package/dist/src/plugins/list/goto-first.d.ts +3 -0
  104. package/dist/src/plugins/list/goto.d.ts +2 -0
  105. package/dist/src/plugins/list/index.d.ts +3 -0
  106. package/dist/src/plugins/list/loading.d.ts +2 -0
  107. package/dist/src/plugins/list/no-comment.d.ts +2 -0
  108. package/dist/src/plugins/list/reach-bottom.d.ts +2 -0
  109. package/dist/src/plugins/list/sidebar-btn.d.ts +2 -0
  110. package/dist/src/plugins/list/time-ticking.d.ts +3 -0
  111. package/dist/src/plugins/list/unread-badge.d.ts +2 -0
  112. package/dist/src/plugins/list/unread.d.ts +2 -0
  113. package/dist/src/plugins/list/with-editor.d.ts +2 -0
  114. package/dist/src/plugins/markdown.d.ts +2 -0
  115. package/dist/src/plugins/stat.d.ts +13 -0
  116. package/dist/src/plugins/version-check.d.ts +2 -0
  117. package/dist/src/service.d.ts +19 -23
  118. package/dist/tests/e2e/comment-add.spec.d.ts +1 -0
  119. package/dist/types/config.d.ts +110 -0
  120. package/dist/types/context.d.ts +56 -136
  121. package/dist/types/data.d.ts +194 -0
  122. package/dist/types/editor.d.ts +76 -0
  123. package/dist/types/event.d.ts +36 -25
  124. package/dist/types/index.d.ts +7 -0
  125. package/dist/types/plugin.d.ts +2 -0
  126. package/dist/types/sidebar.d.ts +3 -0
  127. package/package.json +5 -2
  128. package/src/api/_base.ts +18 -0
  129. package/src/api/_options.ts +25 -0
  130. package/src/api/{request.ts → _request.ts} +19 -18
  131. package/src/api/admin.ts +1 -1
  132. package/src/api/captcha.ts +1 -1
  133. package/src/api/comment.ts +4 -4
  134. package/src/api/index.ts +3 -12
  135. package/src/api/page.ts +5 -5
  136. package/src/api/site.ts +2 -2
  137. package/src/api/system.ts +19 -7
  138. package/src/api/upload.ts +3 -3
  139. package/src/api/user.ts +3 -3
  140. package/src/artalk.ts +49 -97
  141. package/src/comment/actions.ts +1 -4
  142. package/src/comment/comment.ts +9 -6
  143. package/src/comment/render.ts +27 -5
  144. package/src/comment/renders/actions.ts +45 -45
  145. package/src/comment/renders/avatar.ts +7 -7
  146. package/src/comment/renders/content.ts +18 -18
  147. package/src/comment/renders/header.ts +13 -13
  148. package/src/comment/renders/index.ts +3 -3
  149. package/src/comment/renders/pending.ts +5 -5
  150. package/src/comment/renders/reply-at.ts +8 -8
  151. package/src/comment/renders/reply-to.ts +13 -13
  152. package/src/components/action-btn.ts +11 -13
  153. package/src/{lib → components}/checker/admin.ts +6 -6
  154. package/src/{lib → components}/checker/captcha-renders.ts +7 -6
  155. package/src/{lib → components}/checker/captcha.ts +1 -1
  156. package/src/{lib → components}/checker/index.ts +21 -26
  157. package/src/components/dark-mode.ts +30 -0
  158. package/src/components/dialog.ts +4 -9
  159. package/src/components/error-dialog.ts +35 -0
  160. package/src/components/pagination.ts +10 -6
  161. package/src/components/read-more-btn.ts +7 -7
  162. package/src/config.ts +60 -6
  163. package/src/context.ts +39 -144
  164. package/src/data.ts +110 -0
  165. package/src/defaults.ts +1 -1
  166. package/src/editor/editor.ts +41 -146
  167. package/src/editor/state.ts +52 -0
  168. package/src/i18n/zh-CN.ts +1 -1
  169. package/src/layer/index.ts +4 -4
  170. package/src/layer/layer-manager.ts +32 -0
  171. package/src/layer/layer.ts +20 -144
  172. package/src/layer/scrollbar-helper.ts +24 -0
  173. package/src/layer/sidebar-layer.ts +74 -64
  174. package/src/layer/wrap.ts +77 -0
  175. package/src/lib/component.ts +4 -11
  176. package/src/lib/detect.ts +1 -1
  177. package/src/lib/event-manager.ts +47 -0
  178. package/src/lib/highlight.ts +5 -0
  179. package/src/lib/marked-renderer.ts +32 -0
  180. package/src/lib/marked.ts +43 -104
  181. package/src/lib/sanitizer.ts +57 -0
  182. package/src/lib/ui.ts +22 -15
  183. package/src/lib/user.ts +21 -16
  184. package/src/lib/utils.ts +29 -18
  185. package/src/list/comment.ts +20 -0
  186. package/src/list/layout.ts +120 -0
  187. package/src/list/list.html +3 -1
  188. package/src/list/list.ts +56 -200
  189. package/src/list/{list-nest.ts → nest.ts} +1 -1
  190. package/src/list/page.ts +97 -0
  191. package/src/list/paginator/index.ts +20 -8
  192. package/src/list/paginator/read-more.ts +67 -0
  193. package/src/list/paginator/up-down.ts +51 -0
  194. package/src/main.ts +2 -0
  195. package/src/plugins/admin-only-elem.ts +40 -0
  196. package/src/plugins/conf-remoter.ts +54 -0
  197. package/src/plugins/dark-mode.ts +12 -0
  198. package/src/plugins/editor/_kit.ts +57 -0
  199. package/src/plugins/editor/_plug.ts +60 -0
  200. package/src/plugins/editor/_sample.ts +8 -0
  201. package/src/plugins/editor/closable.ts +44 -0
  202. package/src/{editor/plugs/emoticons-plug.ts → plugins/editor/emoticons.ts} +51 -52
  203. package/src/plugins/editor/header-event.ts +35 -0
  204. package/src/plugins/editor/header-link.ts +31 -0
  205. package/src/plugins/editor/header-user.ts +98 -0
  206. package/src/plugins/editor/index.ts +40 -0
  207. package/src/plugins/editor/local-storage.ts +36 -0
  208. package/src/plugins/editor/mover.ts +29 -0
  209. package/src/plugins/editor/preview.ts +41 -0
  210. package/src/plugins/editor/state-edit.ts +116 -0
  211. package/src/plugins/editor/state-reply.ts +91 -0
  212. package/src/plugins/editor/submit-add.ts +33 -0
  213. package/src/plugins/editor/submit-btn.ts +25 -0
  214. package/src/plugins/editor/submit.ts +73 -0
  215. package/src/plugins/editor/textarea.ts +55 -0
  216. package/src/plugins/editor/upload.ts +145 -0
  217. package/src/plugins/editor-kit.ts +161 -0
  218. package/src/plugins/index.ts +16 -0
  219. package/src/plugins/list/copyright.ts +16 -0
  220. package/src/plugins/list/count.ts +31 -0
  221. package/src/plugins/list/dropdown.ts +95 -0
  222. package/src/plugins/list/error-dialog.ts +22 -0
  223. package/src/plugins/list/fetch.ts +64 -0
  224. package/src/plugins/list/goto-first.ts +23 -0
  225. package/src/plugins/list/goto.ts +72 -0
  226. package/src/plugins/list/index.ts +25 -0
  227. package/src/plugins/list/loading.ts +17 -0
  228. package/src/plugins/list/no-comment.ts +25 -0
  229. package/src/plugins/list/reach-bottom.ts +46 -0
  230. package/src/plugins/list/sidebar-btn.ts +39 -0
  231. package/src/plugins/list/time-ticking.ts +22 -0
  232. package/src/plugins/list/unread-badge.ts +26 -0
  233. package/src/plugins/list/unread.ts +38 -0
  234. package/src/plugins/list/with-editor.ts +59 -0
  235. package/src/plugins/markdown.ts +10 -0
  236. package/src/plugins/stat.ts +79 -0
  237. package/src/plugins/version-check.ts +37 -0
  238. package/src/service.ts +34 -61
  239. package/src/style/comment.scss +5 -7
  240. package/src/style/editor.scss +5 -0
  241. package/src/style/list.scss +2 -7
  242. package/types/{artalk-config.d.ts → config.ts} +16 -2
  243. package/types/context.ts +84 -0
  244. package/{dist/types/artalk-data.d.ts → types/data.ts} +41 -0
  245. package/types/editor.ts +95 -0
  246. package/types/event.ts +40 -0
  247. package/types/index.ts +7 -0
  248. package/types/plugin.ts +3 -0
  249. package/types/sidebar.ts +3 -0
  250. package/dist/src/comment/render-ctx.d.ts +0 -23
  251. package/dist/src/editor/edit-mode.d.ts +0 -9
  252. package/dist/src/editor/funcs.d.ts +0 -2
  253. package/dist/src/editor/index.d.ts +0 -2
  254. package/dist/src/editor/mover.d.ts +0 -8
  255. package/dist/src/editor/plug-manager.d.ts +0 -17
  256. package/dist/src/editor/plugs/editor-plug.d.ts +0 -38
  257. package/dist/src/editor/plugs/header-input-plug.d.ts +0 -13
  258. package/dist/src/editor/plugs/preview-plug.d.ts +0 -10
  259. package/dist/src/editor/plugs/upload-plug.d.ts +0 -10
  260. package/dist/src/editor/reply.d.ts +0 -9
  261. package/dist/src/editor/submit.d.ts +0 -16
  262. package/dist/src/lib/dark-mode.d.ts +0 -4
  263. package/dist/src/lib/stat.d.ts +0 -15
  264. package/dist/src/list/index.d.ts +0 -2
  265. package/dist/src/list/list-lite.d.ts +0 -77
  266. package/dist/src/list/list-ui.d.ts +0 -16
  267. package/dist/src/list/paginator/adaptors/index.d.ts +0 -12
  268. package/dist/src/list/paginator/adaptors/pagination.d.ts +0 -9
  269. package/dist/src/list/paginator/adaptors/read-more.d.ts +0 -10
  270. package/dist/src/list/paginator/holder.d.ts +0 -16
  271. package/dist/types/artalk-config.d.ts +0 -139
  272. package/dist/types/plug.d.ts +0 -4
  273. package/src/api/api-base.ts +0 -27
  274. package/src/comment/render-ctx.ts +0 -30
  275. package/src/editor/edit-mode.ts +0 -103
  276. package/src/editor/funcs.ts +0 -97
  277. package/src/editor/index.ts +0 -3
  278. package/src/editor/mover.ts +0 -43
  279. package/src/editor/plug-manager.ts +0 -172
  280. package/src/editor/plugs/editor-plug.ts +0 -69
  281. package/src/editor/plugs/header-input-plug.ts +0 -79
  282. package/src/editor/plugs/preview-plug.ts +0 -44
  283. package/src/editor/plugs/upload-plug.ts +0 -122
  284. package/src/editor/reply.ts +0 -62
  285. package/src/editor/submit.ts +0 -99
  286. package/src/lib/dark-mode.ts +0 -48
  287. package/src/lib/stat.ts +0 -71
  288. package/src/list/index.ts +0 -3
  289. package/src/list/list-lite.ts +0 -424
  290. package/src/list/list-ui.ts +0 -137
  291. package/src/list/paginator/adaptors/index.ts +0 -21
  292. package/src/list/paginator/adaptors/pagination.ts +0 -42
  293. package/src/list/paginator/adaptors/read-more.ts +0 -56
  294. package/src/list/paginator/holder.ts +0 -56
  295. package/types/artalk-data.d.ts +0 -230
  296. package/types/context.d.ts +0 -142
  297. package/types/event.d.ts +0 -28
  298. package/types/plug.d.ts +0 -4
  299. /package/src/{editor/plugs/emoticons-plug.scss → plugins/editor/emoticons.scss} +0 -0
  300. /package/src/{editor/plugs/preview-plug.scss → plugins/editor/preview.scss} +0 -0
@@ -1,13 +1,9 @@
1
1
  /// <reference types="marked" />
2
- import type ArtalkConfig from '../types/artalk-config';
3
- import type { CommentData, NotifyData } from '../types/artalk-data';
4
- import type ContextApi from '../types/context';
2
+ import type { ArtalkConfig, CommentData, ListFetchParams, ContextApi, SidebarShowPayload } from '../types';
5
3
  import type { TInjectedServices } from './service';
6
- import { CheckerCaptchaPayload, CheckerPayload } from './lib/checker';
4
+ import { CheckerCaptchaPayload, CheckerPayload } from './components/checker';
5
+ import { DataManager } from './data';
7
6
  import * as I18n from './i18n';
8
- import { SidebarShowPayload } from './layer/sidebar-layer';
9
- import Comment from './comment';
10
- import Api from './api';
11
7
  interface Context extends TInjectedServices {
12
8
  }
13
9
  /**
@@ -15,50 +11,35 @@ interface Context extends TInjectedServices {
15
11
  */
16
12
  declare class Context implements ContextApi {
17
13
  conf: ArtalkConfig;
14
+ data: DataManager;
18
15
  $root: HTMLElement;
19
- markedReplacers: ((raw: string) => string)[];
20
- private commentList;
21
- private eventList;
16
+ private events;
22
17
  constructor(conf: ArtalkConfig, $root?: HTMLElement);
23
18
  inject(depName: string, obj: any): void;
24
19
  get(depName: string): any;
25
- getApi(): Api;
26
- getCommentList(): Comment[];
27
- getCommentDataList(): CommentData[];
28
- findComment(id: number): Comment | undefined;
29
- deleteComment(_comment: number | Comment): void;
30
- clearAllComments(): void;
31
- insertComment(commentData: CommentData): void;
32
- updateComment(commentData: CommentData): void;
33
- replyComment(commentData: CommentData, $comment: HTMLElement, scroll?: boolean): void;
34
- cancelReplyComment(): void;
20
+ getApi(): any;
21
+ getData(): DataManager;
22
+ replyComment(commentData: CommentData, $comment: HTMLElement): void;
35
23
  editComment(commentData: CommentData, $comment: HTMLElement): void;
36
- cancelEditComment(): void;
37
- updateNotifies(notifies: NotifyData[]): void;
38
- listReload(): void;
24
+ fetch(params: Partial<ListFetchParams>): void;
39
25
  reload(): void;
40
- listRefreshUI(): void;
41
- listHashGotoCheck(): void;
42
- editorOpen(): void;
43
- editorClose(): void;
26
+ listGotoFirst(): void;
44
27
  editorShowLoading(): void;
45
28
  editorHideLoading(): void;
46
29
  editorShowNotify(msg: any, type: any): void;
47
- editorTravel($el: HTMLElement): void;
48
- editorTravelBack(): void;
30
+ editorResetState(): void;
49
31
  showSidebar(payload?: SidebarShowPayload): void;
50
32
  hideSidebar(): void;
51
33
  checkAdmin(payload: CheckerPayload): void;
52
34
  checkCaptcha(payload: CheckerCaptchaPayload): void;
53
- checkAdminShowEl(): void;
54
- on(name: any, handler: any, scope?: any): void;
55
- off(name: any, handler: any, scope?: any): void;
56
- trigger(name: any, payload?: any, scope?: any): void;
35
+ on(name: any, handler: any): void;
36
+ off(name: any, handler: any): void;
37
+ trigger(name: any, payload?: any): void;
57
38
  $t(key: I18n.I18nKeys, args?: {
58
39
  [key: string]: string;
59
40
  }): string;
60
- setDarkMode(darkMode: boolean): void;
41
+ setDarkMode(darkMode: boolean | 'auto'): void;
61
42
  updateConf(nConf: Partial<ArtalkConfig>): void;
62
- getMarkedInstance(): typeof import("marked").marked | undefined;
43
+ getMarked(): typeof import("marked").marked | undefined;
63
44
  }
64
45
  export default Context;
@@ -0,0 +1,27 @@
1
+ import type { NotifyData, PageData, CommentData, DataManagerApi, ListFetchParams, ListLastFetchData, EventPayloadMap } from '../types';
2
+ import EventManager from './lib/event-manager';
3
+ export declare class DataManager implements DataManagerApi {
4
+ protected events: EventManager<EventPayloadMap>;
5
+ private loading;
6
+ private listLastFetch?;
7
+ private comments;
8
+ private unreads;
9
+ private page?;
10
+ constructor(events: EventManager<EventPayloadMap>);
11
+ getLoading(): boolean;
12
+ setLoading(val: boolean): void;
13
+ getListLastFetch(): ListLastFetchData | undefined;
14
+ setListLastFetch(val: ListLastFetchData): void;
15
+ getComments(): CommentData[];
16
+ fetchComments(params: Partial<ListFetchParams>): void;
17
+ findComment(id: number): CommentData | undefined;
18
+ clearComments(): void;
19
+ loadComments(partialComments: CommentData[]): void;
20
+ insertComment(comment: CommentData): void;
21
+ updateComment(comment: CommentData): void;
22
+ deleteComment(id: number): void;
23
+ getUnreads(): NotifyData[];
24
+ updateUnreads(unread: NotifyData[]): void;
25
+ getPage(): PageData | undefined;
26
+ updatePage(pageData: PageData): void;
27
+ }
@@ -1,3 +1,3 @@
1
- import ArtalkConfig from '../types/artalk-config';
1
+ import type { ArtalkConfig } from '../types';
2
2
  declare const defaults: ArtalkConfig;
3
3
  export default defaults;
@@ -1,76 +1,31 @@
1
- import type { CommentData } from '../../types/artalk-data';
2
- import type Context from '../../types/context';
1
+ import type { CommentData, ContextApi, EditorApi } from '../../types';
3
2
  import Component from '../lib/component';
4
3
  import { EditorUI } from './ui';
5
- import { PlugManager } from './plug-manager';
6
- import { Mover } from './mover';
7
- import { ReplyManager } from './reply';
8
- import { EditModeManager } from './edit-mode';
9
- import { SubmitManager } from './submit';
10
- export default class Editor extends Component {
11
- /** 界面 */
4
+ declare class Editor extends Component implements EditorApi {
12
5
  private ui;
6
+ private state;
13
7
  getUI(): EditorUI;
14
- /** 插件管理器 */
15
- private plugs?;
16
- getPlugs(): PlugManager | undefined;
17
- setPlugs(p: PlugManager): void;
18
- /** 评论框移动 */
19
- private mover?;
20
- setMover(m: Mover): void;
21
- /** 回复评论 */
22
- private reply?;
23
- setReplyManager(m: ReplyManager): void;
24
- getReplyManager(): ReplyManager | undefined;
25
- get isReplyMode(): boolean;
26
- /** 编辑评论 */
27
- private editMode?;
28
- setEditModeManager(m: EditModeManager): void;
29
- get isEditMode(): boolean;
30
- /** 提交评论 */
31
- private submitManager?;
32
- setSubmitManager(m: SubmitManager): void;
33
- getSubmitManager(): SubmitManager | undefined;
34
- constructor(ctx: Context);
8
+ getPlugs(): import("../plugins/editor-kit").PlugManager | undefined;
9
+ getState(): import('../../types').EditorState;
10
+ constructor(ctx: ContextApi);
35
11
  getHeaderInputEls(): {
36
12
  nick: HTMLInputElement;
37
13
  email: HTMLInputElement;
38
14
  link: HTMLInputElement;
39
15
  };
40
- saveToLocalStorage(): void;
41
- refreshSendBtnText(): void;
42
- /** 最终用于 submit 的数据 */
43
- getFinalContent(): string;
44
- getContentOriginal(): string;
16
+ getContentFinal(): string;
17
+ getContentRaw(): string;
45
18
  getContentMarked(): string;
46
19
  setContent(val: string): void;
47
20
  insertContent(val: string): void;
48
- adjustTextareaHeight(): void;
49
21
  focus(): void;
50
22
  reset(): void;
51
- /** 设置回复评论 */
52
- setReply(commentData: CommentData, $comment: HTMLElement, scroll?: boolean): void;
53
- /** 取消回复评论 */
54
- cancelReply(): void;
55
- /** 设置编辑评论 */
56
- setEditComment(commentData: CommentData, $comment: HTMLElement): void;
57
- /** 取消编辑评论 */
58
- cancelEditComment(): void;
59
- showNotify(msg: string, type: "i" | "s" | "w" | "e"): void;
23
+ resetState(): void;
24
+ setReply(comment: CommentData, $comment: HTMLElement): void;
25
+ setEditComment(comment: CommentData, $comment: HTMLElement): void;
26
+ showNotify(msg: string, type: any): void;
60
27
  showLoading(): void;
61
28
  hideLoading(): void;
62
- /** 点击评论提交按钮事件 */
63
- submit(): Promise<void>;
64
- /** 关闭评论 */
65
- close(): void;
66
- /** 打开评论 */
67
- open(): void;
68
- /** 移动评论框到置顶元素之后 */
69
- travel($afterEl: HTMLElement): void;
70
- /** 评论框归位 */
71
- travelBack(): void;
72
- /** 展开插件面板 */
73
- openPlugPanel(plugName: string): void;
74
- /** 收起插件面板 */
75
- closePlugPanel(): void;
29
+ submit(): void;
76
30
  }
31
+ export default Editor;
@@ -0,0 +1,20 @@
1
+ import type { EditorState, CommentData } from '../../types';
2
+ import type Editor from './editor';
3
+ export default class EditorStateManager {
4
+ private editor;
5
+ constructor(editor: Editor);
6
+ private stateCurt;
7
+ private stateUnmountFn;
8
+ /** Get current state */
9
+ get(): EditorState;
10
+ /**
11
+ * Switch editor state
12
+ *
13
+ * @param state The state to switch
14
+ * @param payload The cause of state switch
15
+ */
16
+ switch(state: EditorState, payload?: {
17
+ $comment: HTMLElement;
18
+ comment: CommentData;
19
+ }): void;
20
+ }
@@ -1,3 +1,3 @@
1
- import { I18n } from '.';
1
+ import type { I18n } from '.';
2
2
  declare const zhCN: I18n;
3
3
  export default zhCN;
@@ -1,3 +1,4 @@
1
- import Layer, { getLayerWrap } from './layer';
2
- export default Layer;
3
- export { getLayerWrap };
1
+ export * from './layer';
2
+ export * from './wrap';
3
+ export * from './scrollbar-helper';
4
+ export * from './layer-manager';
@@ -0,0 +1,9 @@
1
+ import type { ContextApi } from '../../types';
2
+ import { Layer } from './layer';
3
+ export declare class LayerManager {
4
+ private wrap;
5
+ private ctx;
6
+ constructor(ctx: ContextApi);
7
+ getEl(): HTMLElement;
8
+ create(name: string, el?: HTMLElement | undefined): Layer;
9
+ }
@@ -1,32 +1,12 @@
1
- import Context from '../../types/context';
2
- import Component from '../lib/component';
3
- export default class Layer extends Component {
4
- private name;
5
- private $wrap;
6
- private $mask;
7
- private maskClickHideEnable;
8
- static BodyOrgOverflow: string;
9
- static BodyOrgPaddingRight: string;
10
- afterHide?: Function;
11
- constructor(ctx: Context, name: string, el?: HTMLElement);
12
- getName(): string;
13
- getWrapEl(): HTMLElement;
1
+ import type { LayerWrap } from './wrap';
2
+ export declare class Layer {
3
+ private $el;
4
+ private wrap;
5
+ private onAfterHide?;
6
+ constructor(wrap: LayerWrap, name: string, el?: HTMLElement);
7
+ setOnAfterHide(func: () => void): void;
14
8
  getEl(): HTMLElement;
15
9
  show(): void;
16
10
  hide(): void;
17
- setMaskClickHide(enable: boolean): void;
18
- pageBodyScrollBarHide(): void;
19
- pageBodyScrollBarShow(): void;
20
- private static actionTimers;
21
- private newActionTimer;
22
- private fireAllActionTimer;
23
- /** 销毁 - 无动画 */
24
- disposeNow(): void;
25
- /** 销毁 */
26
- dispose(): void;
27
- checkCleanLayer(): void;
11
+ destroy(): void;
28
12
  }
29
- export declare function getLayerWrap(): {
30
- $wrap: HTMLElement;
31
- $mask: HTMLElement;
32
- };
@@ -0,0 +1,5 @@
1
+ export declare function getScrollbarHelper(): {
2
+ init(): void;
3
+ unlock(): void;
4
+ lock(): void;
5
+ };
@@ -1,20 +1,20 @@
1
- import Context from '../../types/context';
1
+ import type { ContextApi, SidebarShowPayload } from '../../types';
2
2
  import Component from '../lib/component';
3
- import Layer from './layer';
4
- export interface SidebarShowPayload {
5
- view?: 'comments' | 'sites' | 'pages' | 'transfer';
6
- }
3
+ import type { Layer } from './layer';
7
4
  export default class SidebarLayer extends Component {
8
5
  layer?: Layer;
9
6
  $header: HTMLElement;
10
7
  $closeBtn: HTMLElement;
11
8
  $iframeWrap: HTMLElement;
12
9
  $iframe?: HTMLIFrameElement;
13
- constructor(ctx: Context);
10
+ constructor(ctx: ContextApi);
14
11
  private firstShow;
15
12
  /** 显示 */
16
13
  show(conf?: SidebarShowPayload): Promise<void>;
17
14
  /** 隐藏 */
18
15
  hide(): void;
16
+ private authCheck;
17
+ private initLayer;
18
+ private createIframe;
19
19
  private iframeLoad;
20
20
  }
@@ -0,0 +1,13 @@
1
+ export declare class LayerWrap {
2
+ private $wrap;
3
+ private $mask;
4
+ private allowMaskClose;
5
+ private items;
6
+ constructor();
7
+ createItem(name: string, el?: HTMLElement): HTMLElement;
8
+ getWrap(): HTMLElement;
9
+ getMask(): HTMLElement;
10
+ setMaskClose(enabled: boolean): void;
11
+ show(): void;
12
+ hide(callback?: () => void): void;
13
+ }
@@ -1,12 +1,7 @@
1
- import ArtalkConfig from '../../types/artalk-config';
2
- import Context from '../../types/context';
3
- import { I18n } from '../i18n';
1
+ import type { ArtalkConfig, ContextApi } from '../../types';
4
2
  export default abstract class Component {
3
+ ctx: ContextApi;
5
4
  $el: HTMLElement;
6
- ctx: Context;
7
5
  readonly conf: ArtalkConfig;
8
- constructor(ctx: Context);
9
- $t(key: keyof I18n, args?: {
10
- [key: string]: string;
11
- }): string;
6
+ constructor(ctx: ContextApi);
12
7
  }
@@ -0,0 +1,28 @@
1
+ export type EventHandler<T> = (payload: T) => void;
2
+ export interface Event<PayloadMap, K extends keyof PayloadMap = keyof PayloadMap> extends EventOptions {
3
+ name: K;
4
+ handler: EventHandler<PayloadMap[K]>;
5
+ }
6
+ export interface EventOptions {
7
+ once?: boolean;
8
+ }
9
+ export interface EventManagerFuncs<PayloadMap> {
10
+ on<K extends keyof PayloadMap>(name: K, handler: EventHandler<PayloadMap[K]>, opts?: EventOptions): void;
11
+ off<K extends keyof PayloadMap>(name: K, handler: EventHandler<PayloadMap[K]>): void;
12
+ trigger<K extends keyof PayloadMap>(name: K, payload?: PayloadMap[K]): void;
13
+ }
14
+ export default class EventManager<PayloadMap> implements EventManagerFuncs<PayloadMap> {
15
+ private events;
16
+ /**
17
+ * Add an event listener for a specific event name
18
+ */
19
+ on<K extends keyof PayloadMap>(name: K, handler: EventHandler<PayloadMap[K]>, opts?: EventOptions): void;
20
+ /**
21
+ * Remove an event listener for a specific event name and handler
22
+ */
23
+ off<K extends keyof PayloadMap>(name: K, handler: EventHandler<PayloadMap[K]>): void;
24
+ /**
25
+ * Trigger an event with an optional payload
26
+ */
27
+ trigger<K extends keyof PayloadMap>(name: K, payload?: PayloadMap[K]): void;
28
+ }
@@ -0,0 +1 @@
1
+ export declare function renderCode(code: string): any;
@@ -0,0 +1,4 @@
1
+ /// <reference types="marked" />
2
+ export declare function getRenderer(): import("Renderer")._Renderer;
3
+ export declare const markedLinkRenderer: (renderer: any, orgLinkRenderer: Function) => (href: string, title: string, text: string) => string;
4
+ export declare const markedCodeRenderer: () => (block: string, lang: string | undefined) => string;
@@ -1,9 +1,11 @@
1
1
  import { marked as libMarked } from 'marked';
2
- import Context from '../../types/context';
2
+ type Replacer = (raw: string) => string;
3
3
  export type TMarked = typeof libMarked;
4
4
  /** Get Marked instance */
5
5
  export declare function getInstance(): typeof libMarked | undefined;
6
+ export declare function setReplacers(arr: Replacer[]): void;
6
7
  /** 初始化 marked */
7
8
  export declare function initMarked(): void;
8
9
  /** 解析 markdown */
9
- export default function marked(ctx: Context, src: string): string;
10
+ export default function marked(src: string): string;
11
+ export {};
@@ -0,0 +1 @@
1
+ export declare function sanitize(content: string): string;
@@ -1,3 +1,4 @@
1
+ import type { NotifyLevel } from '../../types';
1
2
  /** 显示加载 */
2
3
  export declare function showLoading(parentElem: HTMLElement, conf?: {
3
4
  transparentBg?: boolean;
@@ -9,9 +10,9 @@ export declare function setLoading(val: boolean, parentElem: HTMLElement): void;
9
10
  /** 元素是否用户可见 */
10
11
  export declare function isVisible(el: HTMLElement, viewport?: HTMLElement): boolean;
11
12
  /** 滚动到元素中心 */
12
- export declare function scrollIntoView(elem: HTMLElement, enableAnim?: boolean): void;
13
+ export declare function scrollIntoView(elem: HTMLElement, enableAnim?: boolean, relativeTo?: HTMLElement): void;
13
14
  /** 显示消息 */
14
- export declare function showNotify(wrapElem: HTMLElement, msg: string, type: 's' | 'e' | 'w' | 'i'): void;
15
+ export declare function showNotify(wrapElem: HTMLElement, msg: string, type: NotifyLevel): void;
15
16
  /** fade 动画 */
16
17
  export declare function playFadeAnim(elem: HTMLElement, after?: () => void, type?: 'in' | 'out'): void;
17
18
  /** 渐入动画 */
@@ -1,13 +1,16 @@
1
- import { LocalUser } from '../../types/artalk-config';
2
- import Context from '../../types/context';
1
+ import type { LocalUser } from '../../types';
3
2
  declare class User {
4
- ctx?: Context;
5
3
  data: LocalUser;
4
+ onUserChanged: ((user: LocalUser) => void) | null;
6
5
  constructor();
7
- setContext(ctx: Context): void;
8
6
  /** 保存用户到 localStorage 中 */
9
7
  update(obj?: Partial<LocalUser>): void;
10
- /** 注销,清除用户登录状态 */
8
+ setOnUserChanged(fn: ((user: LocalUser) => void) | null): void;
9
+ /**
10
+ * Logout
11
+ *
12
+ * @description Logout will clear login status, but not clear user data (nick, email, link)
13
+ */
11
14
  logout(): void;
12
15
  /** 是否已填写基本用户信息 */
13
16
  checkHasBasicUserInfo(): boolean;
@@ -1,19 +1,22 @@
1
- import Context from '../../types/context';
2
1
  export declare function createElement<E extends HTMLElement = HTMLElement>(htmlStr?: string): E;
3
2
  export declare function getHeight(el: HTMLElement): number;
4
3
  export declare function htmlEncode(str: string): string;
5
4
  export declare function htmlDecode(str: string): string;
6
5
  export declare function getQueryParam(name: string): string | null;
7
- export declare function getOffset(el: HTMLElement): {
6
+ export declare function getOffset(el: HTMLElement, relativeTo?: HTMLElement): {
8
7
  top: number;
9
8
  left: number;
10
9
  };
11
10
  export declare function padWithZeros(vNumber: number, width: number): string;
12
11
  export declare function dateFormat(date: Date): string;
13
- export declare function timeAgo(date: Date, ctx: Context): string;
12
+ export declare function timeAgo(date: Date, $t?: Function): any;
14
13
  /** 所有图片加载完毕后执行 */
15
14
  export declare function onImagesLoaded($container: HTMLElement, event: Function): void;
16
- export declare function getGravatarURL(ctx: Context, emailMD5: string): string;
15
+ export declare function getGravatarURL(opts: {
16
+ params: string;
17
+ mirror: string;
18
+ emailMD5: string;
19
+ }): string;
17
20
  export declare function sleep(ms: number): Promise<unknown>;
18
21
  /** 版本号比较(a < b :-1 | 0 | b < a :1) */
19
22
  export declare function versionCompare(a: string, b: string): 1 | 0 | -1;
@@ -22,7 +25,10 @@ export declare function getCorrectUserAgent(): Promise<string>;
22
25
  /** 是否为完整的 URL */
23
26
  export declare function isValidURL(urlRaw: string): boolean;
24
27
  /** 获取基于 conf.server 的 URL */
25
- export declare function getURLBasedOnApi(ctx: Context, path: string): string;
28
+ export declare function getURLBasedOnApi(opts: {
29
+ base: string;
30
+ path: string;
31
+ }): string;
26
32
  /** 获取基于某个 baseURL 的 URL */
27
33
  export declare function getURLBasedOn(baseURL: string, path: string): string;
28
34
  /**
@@ -0,0 +1,3 @@
1
+ import type { ContextApi, CommentData } from '../../types';
2
+ import Comment from '../comment/comment';
3
+ export declare function createComment(ctx: ContextApi, comment: CommentData, ctxComments: CommentData[]): Comment;
@@ -0,0 +1,23 @@
1
+ import type { CommentData } from '../../types';
2
+ import Comment from '../comment/comment';
3
+ import * as ListNest from './nest';
4
+ export interface LayoutOptions {
5
+ $commentsWrap: HTMLElement;
6
+ nestSortBy: ListNest.SortByType;
7
+ nestMax: number;
8
+ flatMode: boolean;
9
+ createCommentNode(comment: CommentData, ctxComments: CommentData[]): Comment;
10
+ findCommentNode(id: number): Comment | undefined;
11
+ getCommentDataList(): CommentData[];
12
+ }
13
+ export default class ListLayout {
14
+ private options;
15
+ constructor(options: LayoutOptions);
16
+ import(comments: CommentData[]): void;
17
+ insert(comment: CommentData): void;
18
+ private importCommentsNestMode;
19
+ /** 导入评论 · 平铺模式 */
20
+ private putCommentFlatMode;
21
+ private insertCommentNest;
22
+ private insertCommentFlatMode;
23
+ }
@@ -1,26 +1,14 @@
1
- import { ListData, NotifyData } from '../../types/artalk-data';
2
- import Context from '../../types/context';
3
- import ListLite from './list-lite';
4
- export default class List extends ListLite {
5
- private $closeCommentBtn;
6
- private $openSidebarBtn;
7
- private $unreadBadge;
8
- private $commentCount;
9
- private $commentCountNum;
10
- private $dropdownWrap?;
11
- constructor(ctx: Context);
12
- private initListActionBtn;
13
- /** 刷新界面 */
14
- refreshUI(): void;
15
- protected onLoad(data: ListData, offset: number): void;
16
- private goToCommentFounded;
17
- goToCommentDelay: boolean;
18
- /** 跳到评论项位置 - 根据 `location.hash` */
19
- checkGoToCommentByUrlHash(): void;
20
- /** 管理员设置页面信息 */
21
- adminPageEditSave(): void;
22
- showUnreadBadge(count: number): void;
23
- /** 初始化选择下拉层 */
24
- protected initDropdown(): void;
25
- updateUnread(notifies: NotifyData[]): void;
1
+ import type { ContextApi } from '../../types';
2
+ import Component from '../lib/component';
3
+ import CommentNode from '../comment/comment';
4
+ import ListLayout from './layout';
5
+ export default class List extends Component {
6
+ /** 列表评论集区域元素 */
7
+ $commentsWrap: HTMLElement;
8
+ getCommentsWrapEl(): HTMLElement;
9
+ protected commentNodes: CommentNode[];
10
+ getCommentNodes(): CommentNode[];
11
+ constructor(ctx: ContextApi);
12
+ getListLayout(): ListLayout;
13
+ private initCrudEvents;
26
14
  }
@@ -1,4 +1,4 @@
1
- import { CommentData } from '../../types/artalk-data';
1
+ import type { CommentData } from '../../types';
2
2
  export type CommentNode = {
3
3
  id: number;
4
4
  comment: CommentData;
@@ -0,0 +1,2 @@
1
+ import type { ContextApi } from '../../types';
2
+ export declare const initListPaginatorFunc: (ctx: ContextApi) => void;
@@ -1,10 +1,25 @@
1
- import ListLite from '../list-lite';
2
- import PgHolder from './holder';
3
- export type TPgMode = 'pagination' | 'read-more';
4
- export interface IPgHolderConf {
5
- list: ListLite;
6
- mode: TPgMode;
1
+ import type { ContextApi, ListFetchParams } from '../../../types';
2
+ import UpDownPaginator from './up-down';
3
+ import ReadMorePaginator from './read-more';
4
+ export interface IPgHolderOpt {
5
+ ctx: ContextApi;
7
6
  total: number;
8
7
  pageSize: number;
8
+ readMoreAutoLoad?: boolean;
9
9
  }
10
- export default PgHolder;
10
+ export interface Paginator {
11
+ create(opts: IPgHolderOpt): HTMLElement;
12
+ setLoading(val: boolean): void;
13
+ update(offset: number, total: number): void;
14
+ next(): void;
15
+ showErr?(msg: string): void;
16
+ getHasMore(): boolean;
17
+ /** Clear comments when fetch new page data */
18
+ getIsClearComments(params: Partial<ListFetchParams>): boolean;
19
+ dispose(): void;
20
+ }
21
+ declare const _default: {
22
+ UpDownPaginator: typeof UpDownPaginator;
23
+ ReadMorePaginator: typeof ReadMorePaginator;
24
+ };
25
+ export default _default;
@@ -0,0 +1,18 @@
1
+ import type { ListFetchParams } from '../../../types';
2
+ import type { Paginator, IPgHolderOpt } from '.';
3
+ /**
4
+ * 阅读更多形式的分页
5
+ */
6
+ export default class ReadMorePaginator implements Paginator {
7
+ private instance;
8
+ private onReachedBottom;
9
+ private opt;
10
+ create(opt: IPgHolderOpt): HTMLElement;
11
+ setLoading(val: boolean): void;
12
+ update(offset: number, total: number): void;
13
+ showErr(msg: string): void;
14
+ next(): void;
15
+ getHasMore(): boolean;
16
+ getIsClearComments(params: Partial<ListFetchParams>): boolean;
17
+ dispose(): void;
18
+ }
@@ -0,0 +1,14 @@
1
+ import type { Paginator, IPgHolderOpt } from '.';
2
+ /**
3
+ * 翻页形式的分页
4
+ */
5
+ export default class UpDownPaginator implements Paginator {
6
+ private instance;
7
+ create(opt: IPgHolderOpt): HTMLElement;
8
+ setLoading(val: boolean): void;
9
+ update(offset: number, total: number): void;
10
+ next(): void;
11
+ getHasMore(): boolean;
12
+ getIsClearComments(): boolean;
13
+ dispose(): void;
14
+ }