@waline/client 2.6.2 → 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 (49) hide show
  1. package/dist/component.esm.js +1 -1
  2. package/dist/component.esm.js.map +1 -1
  3. package/dist/component.js +1 -1
  4. package/dist/component.js.map +1 -1
  5. package/dist/legacy.d.ts +8 -1
  6. package/dist/legacy.js +1 -1
  7. package/dist/legacy.js.map +1 -1
  8. package/dist/pageview.cjs.js +1 -1
  9. package/dist/pageview.cjs.js.map +1 -1
  10. package/dist/pageview.esm.js +1 -1
  11. package/dist/pageview.esm.js.map +1 -1
  12. package/dist/pageview.js +1 -1
  13. package/dist/pageview.js.map +1 -1
  14. package/dist/shim.d.ts +8 -1
  15. package/dist/shim.esm.d.ts +8 -1
  16. package/dist/shim.esm.js +1 -1
  17. package/dist/shim.esm.js.map +1 -1
  18. package/dist/shim.js +1 -1
  19. package/dist/shim.js.map +1 -1
  20. package/dist/waline.cjs.d.ts +8 -1
  21. package/dist/waline.cjs.js +1 -1
  22. package/dist/waline.cjs.js.map +1 -1
  23. package/dist/waline.css +1 -1
  24. package/dist/waline.css.map +1 -1
  25. package/dist/waline.d.ts +8 -1
  26. package/dist/waline.esm.d.ts +8 -1
  27. package/dist/waline.esm.js +1 -1
  28. package/dist/waline.esm.js.map +1 -1
  29. package/dist/waline.js +1 -1
  30. package/dist/waline.js.map +1 -1
  31. package/package.json +14 -14
  32. package/src/components/CommentBox.vue +4 -0
  33. package/src/components/CommentCard.vue +2 -2
  34. package/src/components/Waline.vue +53 -3
  35. package/src/config/default.ts +4 -0
  36. package/src/config/i18n/en.ts +7 -0
  37. package/src/config/i18n/generate.ts +7 -0
  38. package/src/config/i18n/jp.ts +7 -0
  39. package/src/config/i18n/pt-BR.ts +7 -0
  40. package/src/config/i18n/ru.ts +7 -0
  41. package/src/config/i18n/vi-VN.ts +19 -12
  42. package/src/config/i18n/zh-CN.ts +7 -0
  43. package/src/config/i18n/zh-TW.ts +7 -0
  44. package/src/styles/card.scss +2 -0
  45. package/src/styles/layout.scss +26 -0
  46. package/src/typings/locale.ts +7 -0
  47. package/src/typings/waline.ts +1 -1
  48. package/src/utils/config.ts +1 -1
  49. package/src/utils/fetch.ts +3 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waline/client",
3
- "version": "2.6.2",
3
+ "version": "2.7.0",
4
4
  "description": "client for waline comment system",
5
5
  "keywords": [
6
6
  "valine",
@@ -61,7 +61,7 @@
61
61
  "clean": "rimraf ./dist",
62
62
  "dev": "vite -c config/vite.config.js",
63
63
  "lint": "eslint --ext .ts,.vue .",
64
- "prepublish": "pnpm clean && pnpm build",
64
+ "prepublishOnly": "pnpm clean && pnpm build",
65
65
  "rollup": "rollup -c ./config/rollup.config.js",
66
66
  "style": "sass ./src/styles/index.scss ./dist/waline.css --style=compressed"
67
67
  },
@@ -80,29 +80,29 @@
80
80
  ]
81
81
  },
82
82
  "dependencies": {
83
- "@vueuse/core": "^8.9.4",
83
+ "@vueuse/core": "^9.1.1",
84
84
  "autosize": "^5.0.1",
85
- "marked": "^4.0.18",
86
- "vue": "^3.2.37"
85
+ "marked": "^4.1.0",
86
+ "vue": "^3.2.38"
87
87
  },
88
88
  "devDependencies": {
89
- "@babel/core": "7.18.9",
90
- "@babel/preset-env": "7.18.9",
89
+ "@babel/core": "7.18.13",
90
+ "@babel/preset-env": "7.18.10",
91
91
  "@rollup/plugin-babel": "5.3.1",
92
- "@rollup/plugin-commonjs": "22.0.1",
92
+ "@rollup/plugin-commonjs": "22.0.2",
93
93
  "@rollup/plugin-node-resolve": "13.3.0",
94
94
  "@rollup/plugin-replace": "4.0.0",
95
95
  "@types/autosize": "4.0.1",
96
- "@types/marked": "4.0.3",
97
- "@types/node": "18.0.6",
98
- "@vitejs/plugin-vue": "3.0.1",
96
+ "@types/marked": "4.0.6",
97
+ "@types/node": "18.7.14",
98
+ "@vitejs/plugin-vue": "3.0.3",
99
99
  "rimraf": "3.0.2",
100
- "rollup": "2.77.0",
100
+ "rollup": "2.79.0",
101
101
  "rollup-plugin-dts": "4.2.2",
102
102
  "rollup-plugin-terser": "7.0.2",
103
103
  "rollup-plugin-ts": "3.0.2",
104
- "typescript": "4.7.4",
105
- "vite": "3.0.2"
104
+ "typescript": "4.8.2",
105
+ "vite": "3.0.9"
106
106
  },
107
107
  "engines": {
108
108
  "node": ">=14"
@@ -411,6 +411,10 @@ export default defineComponent({
411
411
  uploadText,
412
412
  `\r\n![${file.name}](${url})`
413
413
  );
414
+ })
415
+ .catch((e) => {
416
+ alert(e.message);
417
+ editor.value = editor.value.replace(uploadText, '');
414
418
  });
415
419
  };
416
420
 
@@ -75,7 +75,7 @@
75
75
  :class="`wl-btn wl-${status}`"
76
76
  :disabled="comment.status === status"
77
77
  @click="$emit('status', { status, comment })"
78
- v-text="status"
78
+ v-text="locale[status]"
79
79
  />
80
80
  </span>
81
81
 
@@ -84,7 +84,7 @@
84
84
  class="wl-btn wl-sticky"
85
85
  @click="$emit('sticky', comment)"
86
86
  >
87
- {{ comment.sticky ? 'unsticky' : 'sticky' }}
87
+ {{ comment.sticky ? locale.unsticky : locale.sticky }}
88
88
  </button>
89
89
  </div>
90
90
 
@@ -1,9 +1,21 @@
1
1
  <template>
2
2
  <div data-waline>
3
3
  <CommentBox v-if="!reply" @submit="onSubmit" />
4
- <div class="wl-count">
5
- <span v-if="count" class="wl-num" v-text="count" />
6
- {{ i18n.comment }}
4
+ <div class="wl-head">
5
+ <div class="wl-count">
6
+ <span v-if="count" class="wl-num" v-text="count" />
7
+ {{ i18n.comment }}
8
+ </div>
9
+ <ul class="wl-sort">
10
+ <li
11
+ v-for="item in sortByItems"
12
+ :key="item.key"
13
+ :class="[item.key === sortBy ? 'active' : '']"
14
+ @click="onSortByChange(item.key)"
15
+ >
16
+ {{ i18n[item.name] }}
17
+ </li>
18
+ </ul>
7
19
  </div>
8
20
 
9
21
  <div class="wl-cards">
@@ -89,6 +101,7 @@ import type {
89
101
  WalineHighlighter,
90
102
  WalineTexRenderer,
91
103
  WalineImageUploader,
104
+ WalineSearchOptions,
92
105
  WalineLocale,
93
106
  WalineProps,
94
107
  WalineMeta,
@@ -112,9 +125,28 @@ const props = [
112
125
  'highlighter',
113
126
  'texRenderer',
114
127
  'imageUploader',
128
+ 'search',
115
129
  'copyright',
116
130
  ];
117
131
 
132
+ type SortKeyItems = 'insertedAt_desc' | 'insertedAt_asc' | 'like_desc';
133
+ type SortNameItems = 'latest' | 'oldest' | 'hottest';
134
+ type SortByItems = { key: SortKeyItems; name: SortNameItems }[];
135
+ const sortByItems: SortByItems = [
136
+ {
137
+ key: 'insertedAt_desc',
138
+ name: 'latest',
139
+ },
140
+ {
141
+ key: 'insertedAt_asc',
142
+ name: 'oldest',
143
+ },
144
+ {
145
+ key: 'like_desc',
146
+ name: 'hottest',
147
+ },
148
+ ];
149
+
118
150
  const propsWithValidate = {
119
151
  serverURL: {
120
152
  type: String,
@@ -197,6 +229,11 @@ const propsWithValidate = {
197
229
  default: undefined,
198
230
  },
199
231
 
232
+ search: {
233
+ type: [Object, Boolean] as PropType<WalineSearchOptions | false>,
234
+ default: undefined,
235
+ },
236
+
200
237
  copyright: { type: Boolean, default: true },
201
238
  };
202
239
 
@@ -222,6 +259,7 @@ export default defineComponent({
222
259
  const count = ref(0);
223
260
  const page = ref(1);
224
261
  const totalPages = ref(0);
262
+ const sortBy = ref<SortKeyItems>(sortByItems[0].key);
225
263
 
226
264
  const data = ref<WalineComment[]>([]);
227
265
  const reply = ref<WalineComment | null>(null);
@@ -246,6 +284,7 @@ export default defineComponent({
246
284
  lang: config.value.lang,
247
285
  path,
248
286
  pageSize,
287
+ sortBy: sortBy.value,
249
288
  page: pageNumber,
250
289
  signal: controller.signal,
251
290
  token: userInfo.value?.token,
@@ -275,6 +314,14 @@ export default defineComponent({
275
314
  fetchComment(1);
276
315
  };
277
316
 
317
+ const onSortByChange = (item: SortKeyItems): void => {
318
+ if (sortBy.value === item) {
319
+ return;
320
+ }
321
+ sortBy.value = item;
322
+ refresh();
323
+ };
324
+
278
325
  const onReply = (comment: WalineComment | null): void => {
279
326
  reply.value = comment;
280
327
  };
@@ -405,11 +452,14 @@ export default defineComponent({
405
452
  count,
406
453
  page,
407
454
  totalPages,
455
+ sortBy,
456
+ sortByItems,
408
457
  data,
409
458
  reply,
410
459
 
411
460
  loadMore,
412
461
  refresh,
462
+ onSortByChange,
413
463
  onReply,
414
464
  onSubmit,
415
465
  onStatusChange,
@@ -9,6 +9,10 @@ export const defaultLang = 'zh-CN';
9
9
 
10
10
  export const defaultUploadImage = (file: File): Promise<string> =>
11
11
  new Promise((resolve, reject) => {
12
+ if (file.size > 128 * 1000) {
13
+ return reject(new Error('File too large! File size limit 128KB'));
14
+ }
15
+
12
16
  const reader = new FileReader();
13
17
 
14
18
  reader.readAsDataURL(file);
@@ -42,4 +42,11 @@ export default generateLocale([
42
42
  'GIF',
43
43
  'Search GIF',
44
44
  'Profile',
45
+ 'Approved',
46
+ 'Waiting',
47
+ 'Spam',
48
+ 'Unsticky',
49
+ 'Oldest',
50
+ 'Latest',
51
+ 'Hottest',
45
52
  ]);
@@ -42,6 +42,13 @@ const localeKeys = [
42
42
  'gif',
43
43
  'gifSearchPlaceholder',
44
44
  'profile',
45
+ 'approved',
46
+ 'waiting',
47
+ 'spam',
48
+ 'unsticky',
49
+ 'oldest',
50
+ 'latest',
51
+ 'hottest',
45
52
  ];
46
53
 
47
54
  export const generateLocale = (locale: string[]): WalineLocale =>
@@ -42,4 +42,11 @@ export default generateLocale([
42
42
  'GIF',
43
43
  '探す GIF',
44
44
  '個人情報',
45
+ '承認済み',
46
+ '待っている',
47
+ 'スパム',
48
+ 'べたつかない',
49
+ '逆順',
50
+ '正順',
51
+ '人気順',
45
52
  ]);
@@ -42,4 +42,11 @@ export default generateLocale([
42
42
  'GIF',
43
43
  'Pesquisar GIF',
44
44
  'informação pessoal',
45
+ 'Aprovado',
46
+ 'Espera',
47
+ 'Spam',
48
+ 'Unsticky',
49
+ 'Mais velho',
50
+ 'Mais recentes',
51
+ 'Mais quente',
45
52
  ]);
@@ -42,4 +42,11 @@ export default generateLocale([
42
42
  'GIF',
43
43
  'Поиск GIF',
44
44
  'Персональные данные',
45
+ 'Одобренный',
46
+ 'Ожидающий',
47
+ 'Спам',
48
+ 'Нелипкий',
49
+ 'самый старый',
50
+ 'последний',
51
+ 'самый горячий',
45
52
  ]);
@@ -10,8 +10,8 @@ export default generateLocale([
10
10
  'Hãy bình luận có văn hoá!',
11
11
  'Chưa có bình luận',
12
12
  'Gửi',
13
- 'Like',
14
- 'Cancel like',
13
+ 'Thích',
14
+ 'Bỏ thích',
15
15
  'Trả lời',
16
16
  'Hủy bỏ',
17
17
  'bình luận',
@@ -28,18 +28,25 @@ export default generateLocale([
28
28
  'Đang tải lên',
29
29
  'Đăng nhập',
30
30
  'đăng xuất',
31
- 'Admin',
32
- 'Sticky',
31
+ 'Quản trị viên',
32
+ 'Dính',
33
33
  'từ',
34
- 'Please input comments between $0 and $1 words!\n Current word number: $2',
34
+ 'Bình luận phải độ dài giữa $0 $1 từ!\n Số từ hiện tại: $2',
35
35
  'Vô danh',
36
- 'Dwarves',
37
- 'Hobbits',
38
- 'Ents',
39
- 'Wizards',
40
- 'Elves',
36
+ 'Người lùn',
37
+ 'Người tí hon',
38
+ 'Thần rừng',
39
+ 'Pháp sư',
40
+ 'Tiên tộc',
41
41
  'Maiar',
42
- 'GIF',
43
- 'Tìm kiếm GIF',
42
+ 'Ảnh GIF',
43
+ 'Tìm kiếm ảnh GIF',
44
44
  'thông tin cá nhân',
45
+ 'Đã được phê duyệt',
46
+ 'Đang chờ đợi',
47
+ 'Thư rác',
48
+ 'Không dính',
49
+ 'lâu đời nhất',
50
+ 'muộn nhất',
51
+ 'nóng nhất',
45
52
  ]);
@@ -42,4 +42,11 @@ export default generateLocale([
42
42
  '表情包',
43
43
  '搜索表情包',
44
44
  '个人资料',
45
+ '通过',
46
+ '待审核',
47
+ '垃圾',
48
+ '取消置顶',
49
+ '按倒序',
50
+ '按正序',
51
+ '按热度',
45
52
  ]);
@@ -42,4 +42,11 @@ export default generateLocale([
42
42
  '表情包',
43
43
  '搜索表情包',
44
44
  '個人資料',
45
+ '通過',
46
+ '待審核',
47
+ '垃圾',
48
+ '取消置頂',
49
+ '按倒序',
50
+ '按正序',
51
+ '按熱度',
45
52
  ]);
@@ -233,10 +233,12 @@
233
233
  border-radius: 0;
234
234
 
235
235
  &:first-child {
236
+ border-right: 0;
236
237
  border-radius: 0.5em 0 0 0.5em;
237
238
  }
238
239
 
239
240
  &:last-child {
241
+ border-left: 0;
240
242
  border-radius: 0 0.5em 0.5em 0;
241
243
  }
242
244
  }
@@ -53,6 +53,7 @@
53
53
  padding: 0.375em;
54
54
  font-weight: bold;
55
55
  font-size: 1.25em;
56
+ flex: 1;
56
57
  }
57
58
 
58
59
  .wl-empty {
@@ -76,3 +77,28 @@
76
77
  font-size: var(--waline-info-font-size);
77
78
  text-align: right;
78
79
  }
80
+
81
+ .wl-head {
82
+ display: flex;
83
+ flex-direction: row;
84
+ align-items: center;
85
+ }
86
+
87
+ .wl-sort.ul {
88
+ list-style-type: none;
89
+ }
90
+
91
+ .wl-sort li {
92
+ display: inline-block;
93
+ font-size: 0.75em;
94
+ color: var(--waline-info-color);
95
+ cursor: pointer;
96
+ }
97
+
98
+ .wl-sort li + li {
99
+ margin-left: 1em;
100
+ }
101
+
102
+ .wl-sort li.active {
103
+ color: var(--waline-theme-color);
104
+ }
@@ -39,4 +39,11 @@ export interface WalineLocale extends WalineDateLocale, WalineLevelLocale {
39
39
  gif: string;
40
40
  gifSearchPlaceholder: string;
41
41
  profile: string;
42
+ approved: string;
43
+ waiting: string;
44
+ spam: string;
45
+ unsticky: string;
46
+ oldest: string;
47
+ latest: string;
48
+ hottest: string;
42
49
  }
@@ -145,7 +145,7 @@ export interface WalineProps {
145
145
  *
146
146
  * Set Emojis
147
147
  *
148
- * @default ['//unpkg.com/@waline/emojis@1.0.1/weibo']
148
+ * @default ['//unpkg.com/@waline/emojis@1.1.0/weibo']
149
149
  */
150
150
  emoji?: (string | WalineEmojiInfo)[] | false;
151
151
 
@@ -51,7 +51,7 @@ export const getConfig = ({
51
51
  path = location.pathname,
52
52
  lang = defaultLang,
53
53
  locale,
54
- emoji = ['//unpkg.com/@waline/emojis@1.0.1/weibo'],
54
+ emoji = ['//unpkg.com/@waline/emojis@1.1.0/weibo'],
55
55
  meta = ['nick', 'mail', 'link'],
56
56
  requiredMeta = [],
57
57
  dark = false,
@@ -85,6 +85,7 @@ export interface FetchListOptions {
85
85
  path: string;
86
86
  page: number;
87
87
  pageSize: number;
88
+ sortBy: string;
88
89
  signal: AbortSignal;
89
90
  token?: string;
90
91
  lang: string;
@@ -102,6 +103,7 @@ export const fetchCommentList = ({
102
103
  path,
103
104
  page,
104
105
  pageSize,
106
+ sortBy,
105
107
  signal,
106
108
  token,
107
109
  }: FetchListOptions): Promise<FetchListResult> => {
@@ -112,7 +114,7 @@ export const fetchCommentList = ({
112
114
  return fetch(
113
115
  `${serverURL}/comment?path=${encodeURIComponent(
114
116
  path
115
- )}&pageSize=${pageSize}&page=${page}&lang=${lang}`,
117
+ )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,
116
118
  { signal, headers }
117
119
  )
118
120
  .then((resp) => resp.json() as Promise<FetchListResult>)