@waline/client 2.0.0-alpha.4 → 2.0.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waline/client",
3
- "version": "2.0.0-alpha.4",
3
+ "version": "2.0.0",
4
4
  "description": "client for waline comment system",
5
5
  "keywords": [
6
6
  "valine",
package/src/comment.ts CHANGED
@@ -1,9 +1,31 @@
1
1
  import { useUserInfo } from './composables';
2
2
  import { decodePath, errorHandler, fetchCommentCount } from './utils';
3
+ import type { WalineAbort } from './typings';
3
4
 
4
- export interface CommentCountOptions {
5
+ export interface WalineCommentCountOptions {
6
+ /**
7
+ * Waline 服务端地址
8
+ *
9
+ * Waline server url
10
+ */
5
11
  serverURL: string;
12
+
13
+ /**
14
+ * 评论数 CSS 选择器
15
+ *
16
+ * Commment count CSS selector
17
+ *
18
+ * @default '.waline-comment-count'
19
+ */
6
20
  selector?: string;
21
+
22
+ /**
23
+ * 需要获取的默认路径
24
+ *
25
+ * Path to be fetched by default
26
+ *
27
+ * @default window.location.pathname
28
+ */
7
29
  path?: string;
8
30
  }
9
31
 
@@ -11,7 +33,8 @@ export const commentCount = ({
11
33
  serverURL,
12
34
  path = window.location.pathname,
13
35
  selector = '.waline-comment-count',
14
- }: CommentCountOptions): ((reason?: unknown) => void) => {
36
+ }: // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ WalineCommentCountOptions): WalineAbort => {
15
38
  const controller = new AbortController();
16
39
 
17
40
  // comment count
@@ -56,7 +56,7 @@ export const covertOptions = (
56
56
  Object.keys(options).includes(oldOption)
57
57
  ).forEach(([oldOption, newOption]) =>
58
58
  warning(
59
- `Option "${oldOption}" was deprecated and is currently being polyfilled, Please switch to option "${newOption}" in v2!`
59
+ `Deprecated option "${oldOption}" is currently being polyfilled, Please switch to option "${newOption}" in v2!`
60
60
  )
61
61
  );
62
62
 
@@ -5,7 +5,7 @@ export const CloseIcon: FunctionalComponent<{ size: number }> = ({ size }) =>
5
5
  h(
6
6
  'svg',
7
7
  {
8
- class: 'vclose-icon',
8
+ class: 'wl-close-icon',
9
9
  viewBox: '0 0 1024 1024',
10
10
  width: size,
11
11
  height: size,
@@ -6,6 +6,18 @@
6
6
  {{ i18n.comment }}
7
7
  </div>
8
8
 
9
+ <div class="wl-cards">
10
+ <CommentCard
11
+ v-for="comment in data"
12
+ :key="comment.objectId"
13
+ :root-id="comment.objectId"
14
+ :comment="comment"
15
+ :reply="reply"
16
+ @reply="onReply"
17
+ @submit="onSubmit"
18
+ />
19
+ </div>
20
+
9
21
  <div v-if="status === 'error'" class="wl-action">
10
22
  <button
11
23
  type="button"
@@ -15,27 +27,15 @@
15
27
  />
16
28
  </div>
17
29
 
18
- <div v-else-if="status === 'loading'" class="wl-loading">
19
- <LoadingIcon :size="30" />
20
- </div>
21
-
22
30
  <template v-else>
23
- <div v-if="!data.length" class="wl-empty" v-text="i18n.sofa" />
24
-
25
- <div v-else class="wl-cards">
26
- <CommentCard
27
- v-for="comment in data"
28
- :key="comment.objectId"
29
- :root-id="comment.objectId"
30
- :comment="comment"
31
- :reply="reply"
32
- @reply="onReply"
33
- @submit="onSubmit"
34
- />
31
+ <div v-if="status === 'loading'" class="wl-loading">
32
+ <LoadingIcon :size="30" />
35
33
  </div>
36
34
 
35
+ <div v-else-if="!data.length" class="wl-empty" v-text="i18n.sofa" />
36
+
37
37
  <!-- Load more button -->
38
- <div v-if="page < totalPages" class="wl-more">
38
+ <div v-else-if="page < totalPages" class="wl-more">
39
39
  <button
40
40
  type="button"
41
41
  class="wl-btn"
@@ -93,7 +93,7 @@ declare const SHOULD_VALIDATE: boolean;
93
93
  declare const VERSION: string;
94
94
 
95
95
  export default defineComponent({
96
- name: 'Waline-Root',
96
+ name: 'WalineRoot',
97
97
 
98
98
  components: {
99
99
  CommentBox,
@@ -10,7 +10,7 @@ import type { WalineInitOptions } from '../typings';
10
10
  export { WalineInstance } from '../init';
11
11
 
12
12
  warning(
13
- ' This is a legacy package compatable with Valine and Waline@v1, please switch to Waline@v2 using https://CDN.LINK/@waline/client@next/dist/waline.js instead!'
13
+ ' This is a legacy package compatable with Valine and Waline@v1, please switch to Waline@v2 using https://<CDN.LINK>/@waline/client@next/dist/waline.js instead!'
14
14
  );
15
15
 
16
16
  // inject css styles
package/src/init.ts CHANGED
@@ -5,11 +5,36 @@ import { commentCount } from './comment';
5
5
  import { pageviewCount } from './pageview';
6
6
  import { getRoot } from './utils';
7
7
 
8
- import type { WalineInitOptions, WalineProps } from './typings';
8
+ import type { WalineInitOptions } from './typings';
9
9
 
10
10
  export interface WalineInstance {
11
+ /**
12
+ * Waline 被挂载到的元素
13
+ *
14
+ * @description 当通过 `el: null` 初始化,值为 `null`
15
+ *
16
+ * Element where Waline is mounted
17
+ *
18
+ * @description when initialized with `el: null`, it will be `null`
19
+ */
11
20
  el: HTMLElement | null;
12
- update: (newOptions: Partial<WalineProps>) => void;
21
+
22
+ /**
23
+ * 更新 Waline 实例
24
+ *
25
+ * @description 只要不设置`path` 选项,更新时它就会被重置为 `windows.location.pathname`
26
+ *
27
+ * Update Waline instance
28
+ *
29
+ * @description when not setting `path` option, it will be reset to `window.location.pathname`
30
+ */
31
+ update: (newOptions: Partial<Omit<WalineInitOptions, 'el'>>) => void;
32
+
33
+ /**
34
+ * 取消挂载并摧毁 Waline 实例
35
+ *
36
+ * Unmount and destroy Waline instance
37
+ */
13
38
  destroy: () => void;
14
39
  }
15
40
 
package/src/pageview.ts CHANGED
@@ -5,53 +5,59 @@ import {
5
5
  updatePageviews,
6
6
  } from './utils';
7
7
 
8
- const renderVisitorCount = (
9
- counts: number[],
10
- countElements: HTMLElement[]
11
- ): void => {
12
- countElements.forEach((element, index) => {
13
- element.innerText = counts[index].toString();
14
- });
15
- };
8
+ import type { WalineAbort } from './typings';
16
9
 
17
- export interface VisitorCountOptions {
10
+ export interface WalinePageviewCountOptions {
18
11
  /**
19
- * Waline server url
20
- *
21
12
  * Waline 服务端地址
13
+ *
14
+ * Waline server url
22
15
  */
23
16
  serverURL: string;
24
17
 
25
18
  /**
26
- * Path to be fetched and updated
19
+ * 浏览量 CSS 选择器
27
20
  *
28
- * 需要更新和获取的路径
21
+ * Pageview CSS selector
29
22
  *
30
- * @default window.location.pathname
31
- */
32
- path?: string;
33
-
34
- /**
35
23
  * @default '.waline-pageview-count'
36
24
  */
37
25
  selector?: string;
38
26
 
39
27
  /**
40
- * Whether update pageviews when fetching path result
28
+ * 需要更新和获取的路径
29
+ *
30
+ * Path to be fetched and updated
41
31
  *
32
+ * @default window.location.pathname
33
+ */
34
+ path?: string;
35
+
36
+ /**
42
37
  * 是否在查询时更新 path 的浏览量
43
38
  *
39
+ * Whether update pageviews when fetching path result
40
+ *
44
41
  * @default true
45
42
  */
46
43
  update?: boolean;
47
44
  }
48
45
 
46
+ const renderVisitorCount = (
47
+ counts: number[],
48
+ countElements: HTMLElement[]
49
+ ): void => {
50
+ countElements.forEach((element, index) => {
51
+ element.innerText = counts[index].toString();
52
+ });
53
+ };
54
+
49
55
  export const pageviewCount = ({
50
56
  serverURL,
51
57
  path = window.location.pathname,
52
58
  selector = '.waline-pageview-count',
53
59
  update = true,
54
- }: VisitorCountOptions): ((reason?: unknown) => void) => {
60
+ }: WalinePageviewCountOptions): WalineAbort => {
55
61
  const controller = new AbortController();
56
62
 
57
63
  const elements = Array.from(
@@ -81,7 +81,7 @@
81
81
  .wl-tabs {
82
82
  position: relative;
83
83
  height: 2em;
84
- padding: 0 6px;
84
+ padding: 0 6px 1px;
85
85
 
86
86
  &::before {
87
87
  content: ' ';
@@ -20,6 +20,8 @@
20
20
 
21
21
  text-decoration: none;
22
22
 
23
+ word-break: break-word;
24
+
23
25
  cursor: pointer;
24
26
 
25
27
  &:hover {
@@ -39,3 +39,6 @@ export interface WalineInitOptions extends Omit<WalineProps, 'path'> {
39
39
  */
40
40
  path?: string;
41
41
  }
42
+
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ export type WalineAbort = (reson: any) => void;