@waline/client 2.12.0 → 2.13.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 (72) hide show
  1. package/LICENSE +339 -0
  2. package/dist/api.cjs +1 -1
  3. package/dist/api.cjs.map +1 -1
  4. package/dist/api.d.cts +271 -53
  5. package/dist/api.d.mts +271 -53
  6. package/dist/api.d.ts +271 -53
  7. package/dist/api.mjs +1 -1
  8. package/dist/api.mjs.map +1 -1
  9. package/dist/comment.cjs +1 -1
  10. package/dist/comment.cjs.map +1 -1
  11. package/dist/comment.d.cts +1 -1
  12. package/dist/comment.d.mts +1 -1
  13. package/dist/comment.d.ts +1 -1
  14. package/dist/comment.js +73 -1
  15. package/dist/comment.js.map +1 -1
  16. package/dist/comment.mjs +1 -1
  17. package/dist/comment.mjs.map +1 -1
  18. package/dist/component.mjs +1 -1
  19. package/dist/component.mjs.map +1 -1
  20. package/dist/legacy.umd.d.ts +8 -8
  21. package/dist/legacy.umd.js +1 -1
  22. package/dist/legacy.umd.js.map +1 -1
  23. package/dist/pageview.cjs +1 -1
  24. package/dist/pageview.cjs.map +1 -1
  25. package/dist/pageview.d.cts +1 -1
  26. package/dist/pageview.d.mts +1 -1
  27. package/dist/pageview.d.ts +1 -1
  28. package/dist/pageview.js +126 -1
  29. package/dist/pageview.js.map +1 -1
  30. package/dist/pageview.mjs +1 -1
  31. package/dist/pageview.mjs.map +1 -1
  32. package/dist/shim.cjs +1 -1
  33. package/dist/shim.cjs.map +1 -1
  34. package/dist/shim.d.cts +75 -11
  35. package/dist/shim.d.mts +75 -11
  36. package/dist/shim.mjs +1 -1
  37. package/dist/shim.mjs.map +1 -1
  38. package/dist/waline.cjs +1 -1
  39. package/dist/waline.cjs.map +1 -1
  40. package/dist/waline.css +1 -1
  41. package/dist/waline.css.map +1 -1
  42. package/dist/waline.d.cts +75 -11
  43. package/dist/waline.d.mts +75 -11
  44. package/dist/waline.d.ts +75 -11
  45. package/dist/waline.js +6795 -1
  46. package/dist/waline.js.map +1 -1
  47. package/dist/waline.mjs +1 -1
  48. package/dist/waline.mjs.map +1 -1
  49. package/package.json +28 -29
  50. package/src/api/articleCounter.ts +50 -16
  51. package/src/api/comment.ts +131 -39
  52. package/src/api/commentCount.ts +25 -20
  53. package/src/api/index.ts +1 -0
  54. package/src/api/login.ts +49 -6
  55. package/src/api/pageview.ts +25 -12
  56. package/src/api/recentComment.ts +23 -7
  57. package/src/api/user.ts +43 -0
  58. package/src/api/utils.ts +21 -5
  59. package/src/components/ArticleReaction.vue +12 -3
  60. package/src/components/CommentBox.vue +26 -21
  61. package/src/components/ImageWall.vue +14 -14
  62. package/src/components/Waline.vue +25 -16
  63. package/src/composables/userInfo.ts +1 -2
  64. package/src/composables/vote.ts +1 -1
  65. package/src/config/default.ts +23 -24
  66. package/src/pageview.ts +2 -2
  67. package/src/styles/index.scss +2 -1
  68. package/src/styles/userlist.scss +158 -0
  69. package/src/utils/emoji.ts +1 -1
  70. package/src/widgets/index.ts +1 -0
  71. package/src/widgets/recentComments.ts +2 -2
  72. package/src/widgets/userList.ts +136 -0
@@ -0,0 +1,136 @@
1
+ import { getUserList, WalineUser } from '../api';
2
+ import { defaultLang, defaultLocales } from '../config';
3
+ import { WalineLocale } from '../typings';
4
+ import { getRoot } from '../utils';
5
+
6
+ export interface WalineUserListOptions {
7
+ /**
8
+ * Waline 服务端地址
9
+ *
10
+ * Waline serverURL
11
+ */
12
+ serverURL: string;
13
+
14
+ /**
15
+ * 获取用户列表的数量
16
+ *
17
+ * fetch number of user list
18
+ */
19
+ count: number;
20
+
21
+ /**
22
+ * 需要挂载的元素
23
+ *
24
+ * Element to be mounted
25
+ */
26
+ el?: string | HTMLElement;
27
+
28
+ /**
29
+ * 错误提示消息所使用的语言
30
+ *
31
+ * Language of error message
32
+ *
33
+ * @default 'zh-CN'
34
+ */
35
+ lang?: string;
36
+
37
+ /**
38
+ * 自定义 waline 语言显示
39
+ *
40
+ * @see [自定义语言](https://waline.js.org/client/i18n.html)
41
+ *
42
+ * Custom display language in waline
43
+ *
44
+ * @see [I18n](https://waline.js.org/en/client/i18n.html)
45
+ */
46
+ locale?: WalineLocale;
47
+
48
+ /**
49
+ * 列表模式还是头像墙模式
50
+ *
51
+ * list mode or avatar wall mode
52
+ */
53
+ mode: 'list' | 'wall';
54
+ }
55
+
56
+ export interface WalineUserListResult {
57
+ /**
58
+ * 用户数据
59
+ *
60
+ * User Data
61
+ */
62
+ users: WalineUser[];
63
+
64
+ /**
65
+ * 取消挂载挂件
66
+ *
67
+ * Umount widget
68
+ */
69
+ destroy: () => void;
70
+ }
71
+
72
+ export const UserList = ({
73
+ el,
74
+ serverURL,
75
+ count,
76
+ locale,
77
+ lang = defaultLang,
78
+ mode = 'list',
79
+ }: WalineUserListOptions): Promise<WalineUserListResult> => {
80
+ const root = getRoot(el);
81
+ const controller = new AbortController();
82
+
83
+ return getUserList({
84
+ serverURL,
85
+ pageSize: count,
86
+ lang,
87
+ signal: controller.signal,
88
+ }).then((users) => {
89
+ if (!root || !users.length)
90
+ return {
91
+ users,
92
+ destroy: (): void => controller.abort(),
93
+ };
94
+
95
+ locale = {
96
+ ...(defaultLocales[lang] || defaultLocales[defaultLang]),
97
+ ...(typeof locale === 'object' ? locale : {}),
98
+ } as WalineLocale;
99
+
100
+ root.innerHTML = `<ul class="wl-user-${mode}">${users
101
+ .map((user, index) =>
102
+ [
103
+ `<li class="wl-user-item" aria-label="${user.nick}">`,
104
+ user.link && `<a href="${user.link}" target="_blank">`,
105
+ '<div class="wl-user-avatar">',
106
+ `<img src="${user.avatar}" alt="${user.nick}">`,
107
+ `<span class="wl-user-badge">${index + 1}</span>`,
108
+ '</div>',
109
+ '<div class="wl-user-meta">',
110
+ '<div class="wl-user-name">',
111
+ user.nick,
112
+ user.level &&
113
+ `<span class="wl-badge">${
114
+ locale ? locale[`level${user.level}`] : `Level ${user.level}`
115
+ }</span>`,
116
+ user.label && `<span class="wl-badge">${user.label}</span>`,
117
+ '</div>',
118
+ user.link && user.link,
119
+ '</div>',
120
+ user.link && '</a>',
121
+ '</li>',
122
+ ]
123
+ .filter((v) => v)
124
+ .join('')
125
+ )
126
+ .join('')}</ul>`;
127
+
128
+ return {
129
+ users,
130
+ destroy: (): void => {
131
+ controller.abort();
132
+ root.innerHTML = '';
133
+ },
134
+ };
135
+ });
136
+ };