@waline/client 2.0.7 → 2.1.2-test.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/dist/component.js +1 -1
- package/dist/component.js.map +1 -1
- package/dist/legacy.d.ts +9 -7
- package/dist/legacy.js +1 -1
- package/dist/legacy.js.map +1 -1
- package/dist/pageview.cjs.js +1 -1
- package/dist/pageview.cjs.js.map +1 -1
- package/dist/pageview.d.ts +9 -1
- package/dist/pageview.esm.js +1 -1
- package/dist/pageview.esm.js.map +1 -1
- package/dist/pageview.js +1 -1
- package/dist/pageview.js.map +1 -1
- package/dist/shim.d.ts +38 -11
- package/dist/shim.esm.d.ts +38 -11
- package/dist/shim.esm.js +1 -1
- package/dist/shim.esm.js.map +1 -1
- package/dist/shim.js +1 -1
- package/dist/shim.js.map +1 -1
- package/dist/waline.cjs.d.ts +38 -11
- package/dist/waline.cjs.js +1 -1
- package/dist/waline.cjs.js.map +1 -1
- package/dist/waline.css +1 -1
- package/dist/waline.css.map +1 -1
- package/dist/waline.d.ts +38 -11
- package/dist/waline.esm.d.ts +38 -11
- package/dist/waline.esm.js +1 -1
- package/dist/waline.esm.js.map +1 -1
- package/dist/waline.js +1 -1
- package/dist/waline.js.map +1 -1
- package/package.json +24 -6
- package/src/comment.ts +11 -0
- package/src/components/CommentBox.vue +14 -9
- package/src/components/CommentCard.vue +5 -0
- package/src/components/Waline.vue +21 -40
- package/src/composables/timeAgo.ts +2 -48
- package/src/config/i18n/en.ts +6 -0
- package/src/config/i18n/generate.ts +6 -0
- package/src/config/i18n/zh-CN.ts +6 -0
- package/src/config/i18n/zh-TW.ts +6 -0
- package/src/entrys/legacy.ts +1 -1
- package/src/pageview.ts +12 -1
- package/src/styles/card.scss +4 -4
- package/src/styles/config.scss +2 -2
- package/src/styles/layout.scss +3 -3
- package/src/typings/comment.ts +1 -0
- package/src/typings/locale.ts +9 -6
- package/src/typings/waline.ts +1 -1
- package/src/utils/date.ts +54 -0
- package/src/utils/fetch.ts +20 -7
- package/src/widgets/recentComments.ts +11 -0
package/dist/pageview.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=e=>{"AbortError"!==e.name&&console.error(e.message)},t=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e},r=({serverURL:e,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=e=>{"AbortError"!==e.name&&console.error(e.message)},t=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e},r=({serverURL:e,lang:r,paths:n,signal:o})=>fetch(`${e}/article?path=${encodeURIComponent(n.join(","))}&lang=${r}`,{signal:o}).then((e=>e.json())).then((e=>t(e,"visit count"))).then((e=>Array.isArray(e)?e:[e])),n=({serverURL:e,lang:r,path:n})=>fetch(`${e}/article?lang=${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:n})}).then((e=>e.json())).then((e=>t(e,"visit count"))),o=e=>e.dataset.path||e.getAttribute("id"),a=(e,t)=>{t.forEach(((t,r)=>{t.innerText=e[r].toString()}))};exports.pageviewCount=({serverURL:t,path:s=window.location.pathname,selector:i=".waline-pageview-count",update:l=!0,lang:h="zh-CN"})=>{const c=new AbortController,p=Array.from(document.querySelectorAll(i)),g=e=>{const t=o(e);return null!==t&&s!==t},u=n=>r({serverURL:t,paths:n.map((e=>o(e)||s)),lang:h,signal:c.signal}).then((e=>a(e,n))).catch(e);if(l){const e=p.filter((e=>!g(e))),r=p.filter(g);n({serverURL:t,path:s,lang:h}).then((t=>a(new Array(e.length).fill(t),e))),r.length&&u(r)}else u(p);return c.abort.bind(c)},exports.version="2.1.1";
|
|
2
2
|
//# sourceMappingURL=pageview.cjs.js.map
|
package/dist/pageview.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageview.cjs.js","sources":["../src/version.ts","../src/utils/error.ts","../src/utils/fetch.ts","../src/utils/query.ts","../src/pageview.ts"],"sourcesContent":["declare const VERSION: string;\n\nexport const version = VERSION;\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nconst errorCheck = <T = unknown>(data: T | FetchErrorData, name = ''): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n\nexport interface FetchCountOptions {\n serverURL: string;\n paths: string[];\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n paths,\n signal,\n token,\n}: FetchCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\nexport interface FetchRecentOptions {\n serverURL: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n count,\n signal,\n token,\n}: FetchRecentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n\nexport interface FetchListOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport interface FetchListResult {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchCommentList = ({\n serverURL,\n path,\n page,\n pageSize,\n signal,\n token,\n}: FetchListOptions): Promise<FetchListResult> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<FetchListResult>)\n .then((data) => errorCheck(data, 'comment list'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface FetchPageviewsOptions {\n serverURL: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n paths,\n signal,\n}: FetchPageviewsOptions): Promise<number[]> =>\n fetch(`${serverURL}/article?path=${encodeURIComponent(paths.join(','))}
|
|
1
|
+
{"version":3,"file":"pageview.cjs.js","sources":["../src/version.ts","../src/utils/error.ts","../src/utils/fetch.ts","../src/utils/query.ts","../src/pageview.ts"],"sourcesContent":["declare const VERSION: string;\n\nexport const version = VERSION;\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nconst errorCheck = <T = unknown>(data: T | FetchErrorData, name = ''): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n\nexport interface FetchCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n token,\n}: FetchCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\nexport interface FetchRecentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n\nexport interface FetchListOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface FetchListResult {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchCommentList = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n signal,\n token,\n}: FetchListOptions): Promise<FetchListResult> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<FetchListResult>)\n .then((data) => errorCheck(data, 'comment list'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface FetchPageviewsOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewsOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => resp.json() as Promise<number[] | number>)\n .then((data) => errorCheck(data, 'visit count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n\nexport interface UpdatePageviewsOptions {\n serverURL: string;\n lang: string;\n path: string;\n}\n\nexport const updatePageviews = ({\n serverURL,\n lang,\n path,\n}: UpdatePageviewsOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ path }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'visit count'));\n","export const getQuery = (element: HTMLElement): string | null =>\n element.dataset.path || element.getAttribute('id');\n","import {\n errorHandler,\n fetchPageviews,\n getQuery,\n updatePageviews,\n} from './utils';\n\nimport type { WalineAbort } from './typings';\n\nexport interface WalinePageviewCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 浏览量 CSS 选择器\n *\n * Pageview CSS selector\n *\n * @default '.waline-pageview-count'\n */\n selector?: string;\n\n /**\n * 需要更新和获取的路径\n *\n * Path to be fetched and updated\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 是否在查询时更新 path 的浏览量\n *\n * Whether update pageviews when fetching path result\n *\n * @default true\n */\n update?: boolean;\n\n /**\n * 错误提示消息所使用的语言\n *\n * Language of error message\n *\n * @default 'zh-CN'\n */\n lang?: string;\n}\n\nconst renderVisitorCount = (\n counts: number[],\n countElements: HTMLElement[]\n): void => {\n countElements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n};\n\nexport const pageviewCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-pageview-count',\n update = true,\n lang = 'zh-CN',\n}: WalinePageviewCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n const elements = Array.from(\n // pageview selectors\n document.querySelectorAll<HTMLElement>(selector)\n );\n\n const filter = (element: HTMLElement): boolean => {\n const query = getQuery(element);\n\n return query !== null && path !== query;\n };\n\n const fetch = (elements: HTMLElement[]): Promise<void> =>\n fetchPageviews({\n serverURL,\n paths: elements.map((element) => getQuery(element) || path),\n lang,\n signal: controller.signal,\n })\n .then((counts) => renderVisitorCount(counts, elements))\n .catch(errorHandler);\n\n // we should update pageviews\n if (update) {\n const normalElements = elements.filter((element) => !filter(element));\n const elementsNeedstoBeFetched = elements.filter(filter);\n\n void updatePageviews({ serverURL, path, lang }).then((count) =>\n renderVisitorCount(\n new Array<number>(normalElements.length).fill(count),\n normalElements\n )\n );\n\n // if we should fetch count of other pages\n if (elementsNeedstoBeFetched.length) {\n void fetch(elementsNeedstoBeFetched);\n }\n }\n // we should not update pageviews\n else {\n void fetch(elements);\n }\n\n return controller.abort.bind(controller);\n};\n"],"names":["errorHandler","err","name","console","error","message","errorCheck","data","errno","TypeError","errmsg","fetchPageviews","serverURL","lang","paths","signal","fetch","encodeURIComponent","join","then","resp","json","counts","Array","isArray","updatePageviews","path","method","headers","body","JSON","stringify","getQuery","element","dataset","getAttribute","renderVisitorCount","countElements","forEach","index","innerText","toString","window","location","pathname","selector","update","controller","AbortController","elements","from","document","querySelectorAll","filter","query","map","catch","normalElements","elementsNeedstoBeFetched","count","length","fill","abort","bind"],"mappings":"oEAEO,MCFMA,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,UCM7CC,EAAa,CAAcC,EAA0BL,EAAO,MAChE,GAAoB,iBAATK,GAAsBA,EAAwBC,MACvD,MAAM,IAAIC,UACR,SAASP,iBAAqBK,EAAwBC,UACnDD,EAAwBG,UAI/B,OAAOH,GAyIII,EAAiB,EAC5BC,UAAAA,EACAC,KAAAA,EACAC,MAAAA,EACAC,OAAAA,KAEAC,MACE,GAAGJ,kBAA0BK,mBAC3BH,EAAMI,KAAK,cACHL,IACV,CAAEE,OAAAA,IAEDI,MAAMC,GAASA,EAAKC,SACpBF,MAAMZ,GAASD,EAAWC,EAAM,iBAEhCY,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KAQ5CG,EAAkB,EAC7Bb,UAAAA,EACAC,KAAAA,EACAa,KAAAA,KAEAV,MAAM,GAAGJ,kBAA0BC,IAAQ,CACzCc,OAAQ,OACRC,QAAS,CAEP,eAAgB,oBAElBC,KAAMC,KAAKC,UAAU,CAAEL,KAAAA,MAEtBP,MAAMC,GAASA,EAAKC,SACpBF,MAAMZ,GAASD,EAAWC,EAAM,iBC7LxByB,EAAYC,GACvBA,EAAQC,QAAQR,MAAQO,EAAQE,aAAa,MCqDzCC,EAAqB,CACzBd,EACAe,KAEAA,EAAcC,SAAQ,CAACL,EAASM,KAC9BN,EAAQO,UAAYlB,EAAOiB,GAAOE,qCAIT,EAC3B7B,UAAAA,EACAc,KAAAA,EAAOgB,OAAOC,SAASC,SACvBC,SAAAA,EAAW,yBACXC,OAAAA,GAAS,EACTjC,KAAAA,EAAO,YAEP,MAAMkC,EAAa,IAAIC,gBAEjBC,EAAW1B,MAAM2B,KAErBC,SAASC,iBAA8BP,IAGnCQ,EAAUpB,IACd,MAAMqB,EAAQtB,EAASC,GAEvB,OAAiB,OAAVqB,GAAkB5B,IAAS4B,GAG9BtC,EAASiC,GACbtC,EAAe,CACbC,UAAAA,EACAE,MAAOmC,EAASM,KAAKtB,GAAYD,EAASC,IAAYP,IACtDb,KAAAA,EACAE,OAAQgC,EAAWhC,SAElBI,MAAMG,GAAWc,EAAmBd,EAAQ2B,KAC5CO,MAAMxD,GAGX,GAAI8C,EAAQ,CACV,MAAMW,EAAiBR,EAASI,QAAQpB,IAAaoB,EAAOpB,KACtDyB,EAA2BT,EAASI,OAAOA,GAE5C5B,EAAgB,CAAEb,UAAAA,EAAWc,KAAAA,EAAMb,KAAAA,IAAQM,MAAMwC,GACpDvB,EACE,IAAIb,MAAckC,EAAeG,QAAQC,KAAKF,GAC9CF,KAKAC,EAAyBE,QACtB5C,EAAM0C,QAKR1C,EAAMiC,GAGb,OAAOF,EAAWe,MAAMC,KAAKhB,oBJjHR"}
|
package/dist/pageview.d.ts
CHANGED
|
@@ -33,7 +33,15 @@ interface WalinePageviewCountOptions {
|
|
|
33
33
|
* @default true
|
|
34
34
|
*/
|
|
35
35
|
update?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* 错误提示消息所使用的语言
|
|
38
|
+
*
|
|
39
|
+
* Language of error message
|
|
40
|
+
*
|
|
41
|
+
* @default 'zh-CN'
|
|
42
|
+
*/
|
|
43
|
+
lang?: string;
|
|
36
44
|
}
|
|
37
|
-
declare const pageviewCount: ({ serverURL, path, selector, update, }: WalinePageviewCountOptions) => WalineAbort;
|
|
45
|
+
declare const pageviewCount: ({ serverURL, path, selector, update, lang, }: WalinePageviewCountOptions) => WalineAbort;
|
|
38
46
|
|
|
39
47
|
export { WalinePageviewCountOptions, pageviewCount, version };
|
package/dist/pageview.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e="2.
|
|
1
|
+
const e="2.1.1",t=e=>{"AbortError"!==e.name&&console.error(e.message)},r=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e},n=({serverURL:e,lang:t,paths:n,signal:a})=>fetch(`${e}/article?path=${encodeURIComponent(n.join(","))}&lang=${t}`,{signal:a}).then((e=>e.json())).then((e=>r(e,"visit count"))).then((e=>Array.isArray(e)?e:[e])),a=({serverURL:e,lang:t,path:n})=>fetch(`${e}/article?lang=${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:n})}).then((e=>e.json())).then((e=>r(e,"visit count"))),o=e=>e.dataset.path||e.getAttribute("id"),l=(e,t)=>{t.forEach(((t,r)=>{t.innerText=e[r].toString()}))},i=({serverURL:e,path:r=window.location.pathname,selector:i=".waline-pageview-count",update:s=!0,lang:h="zh-CN"})=>{const c=new AbortController,g=Array.from(document.querySelectorAll(i)),p=e=>{const t=o(e);return null!==t&&r!==t},f=a=>n({serverURL:e,paths:a.map((e=>o(e)||r)),lang:h,signal:c.signal}).then((e=>l(e,a))).catch(t);if(s){const t=g.filter((e=>!p(e))),n=g.filter(p);a({serverURL:e,path:r,lang:h}).then((e=>l(new Array(t.length).fill(e),t))),n.length&&f(n)}else f(g);return c.abort.bind(c)};export{i as pageviewCount,e as version};
|
|
2
2
|
//# sourceMappingURL=pageview.esm.js.map
|
package/dist/pageview.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageview.esm.js","sources":["../src/version.ts","../src/utils/error.ts","../src/utils/fetch.ts","../src/utils/query.ts","../src/pageview.ts"],"sourcesContent":["declare const VERSION: string;\n\nexport const version = VERSION;\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nconst errorCheck = <T = unknown>(data: T | FetchErrorData, name = ''): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n\nexport interface FetchCountOptions {\n serverURL: string;\n paths: string[];\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n paths,\n signal,\n token,\n}: FetchCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\nexport interface FetchRecentOptions {\n serverURL: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n count,\n signal,\n token,\n}: FetchRecentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n\nexport interface FetchListOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport interface FetchListResult {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchCommentList = ({\n serverURL,\n path,\n page,\n pageSize,\n signal,\n token,\n}: FetchListOptions): Promise<FetchListResult> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<FetchListResult>)\n .then((data) => errorCheck(data, 'comment list'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface FetchPageviewsOptions {\n serverURL: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n paths,\n signal,\n}: FetchPageviewsOptions): Promise<number[]> =>\n fetch(`${serverURL}/article?path=${encodeURIComponent(paths.join(','))}
|
|
1
|
+
{"version":3,"file":"pageview.esm.js","sources":["../src/version.ts","../src/utils/error.ts","../src/utils/fetch.ts","../src/utils/query.ts","../src/pageview.ts"],"sourcesContent":["declare const VERSION: string;\n\nexport const version = VERSION;\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nconst errorCheck = <T = unknown>(data: T | FetchErrorData, name = ''): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n\nexport interface FetchCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n token,\n}: FetchCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\nexport interface FetchRecentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n\nexport interface FetchListOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface FetchListResult {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchCommentList = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n signal,\n token,\n}: FetchListOptions): Promise<FetchListResult> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<FetchListResult>)\n .then((data) => errorCheck(data, 'comment list'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface FetchPageviewsOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewsOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => resp.json() as Promise<number[] | number>)\n .then((data) => errorCheck(data, 'visit count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n\nexport interface UpdatePageviewsOptions {\n serverURL: string;\n lang: string;\n path: string;\n}\n\nexport const updatePageviews = ({\n serverURL,\n lang,\n path,\n}: UpdatePageviewsOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ path }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'visit count'));\n","export const getQuery = (element: HTMLElement): string | null =>\n element.dataset.path || element.getAttribute('id');\n","import {\n errorHandler,\n fetchPageviews,\n getQuery,\n updatePageviews,\n} from './utils';\n\nimport type { WalineAbort } from './typings';\n\nexport interface WalinePageviewCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 浏览量 CSS 选择器\n *\n * Pageview CSS selector\n *\n * @default '.waline-pageview-count'\n */\n selector?: string;\n\n /**\n * 需要更新和获取的路径\n *\n * Path to be fetched and updated\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 是否在查询时更新 path 的浏览量\n *\n * Whether update pageviews when fetching path result\n *\n * @default true\n */\n update?: boolean;\n\n /**\n * 错误提示消息所使用的语言\n *\n * Language of error message\n *\n * @default 'zh-CN'\n */\n lang?: string;\n}\n\nconst renderVisitorCount = (\n counts: number[],\n countElements: HTMLElement[]\n): void => {\n countElements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n};\n\nexport const pageviewCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-pageview-count',\n update = true,\n lang = 'zh-CN',\n}: WalinePageviewCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n const elements = Array.from(\n // pageview selectors\n document.querySelectorAll<HTMLElement>(selector)\n );\n\n const filter = (element: HTMLElement): boolean => {\n const query = getQuery(element);\n\n return query !== null && path !== query;\n };\n\n const fetch = (elements: HTMLElement[]): Promise<void> =>\n fetchPageviews({\n serverURL,\n paths: elements.map((element) => getQuery(element) || path),\n lang,\n signal: controller.signal,\n })\n .then((counts) => renderVisitorCount(counts, elements))\n .catch(errorHandler);\n\n // we should update pageviews\n if (update) {\n const normalElements = elements.filter((element) => !filter(element));\n const elementsNeedstoBeFetched = elements.filter(filter);\n\n void updatePageviews({ serverURL, path, lang }).then((count) =>\n renderVisitorCount(\n new Array<number>(normalElements.length).fill(count),\n normalElements\n )\n );\n\n // if we should fetch count of other pages\n if (elementsNeedstoBeFetched.length) {\n void fetch(elementsNeedstoBeFetched);\n }\n }\n // we should not update pageviews\n else {\n void fetch(elements);\n }\n\n return controller.abort.bind(controller);\n};\n"],"names":["version","errorHandler","err","name","console","error","message","errorCheck","data","errno","TypeError","errmsg","fetchPageviews","serverURL","lang","paths","signal","fetch","encodeURIComponent","join","then","resp","json","counts","Array","isArray","updatePageviews","path","method","headers","body","JSON","stringify","getQuery","element","dataset","getAttribute","renderVisitorCount","countElements","forEach","index","innerText","toString","pageviewCount","window","location","pathname","selector","update","controller","AbortController","elements","from","document","querySelectorAll","filter","query","map","catch","normalElements","elementsNeedstoBeFetched","count","length","fill","abort","bind"],"mappings":"AAEO,MAAMA,EAAU,QCFVC,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,UCM7CC,EAAa,CAAcC,EAA0BL,EAAO,MAChE,GAAoB,iBAATK,GAAsBA,EAAwBC,MACvD,MAAM,IAAIC,UACR,SAASP,iBAAqBK,EAAwBC,UACnDD,EAAwBG,UAI/B,OAAOH,GAyIII,EAAiB,EAC5BC,UAAAA,EACAC,KAAAA,EACAC,MAAAA,EACAC,OAAAA,KAEAC,MACE,GAAGJ,kBAA0BK,mBAC3BH,EAAMI,KAAK,cACHL,IACV,CAAEE,OAAAA,IAEDI,MAAMC,GAASA,EAAKC,SACpBF,MAAMZ,GAASD,EAAWC,EAAM,iBAEhCY,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KAQ5CG,EAAkB,EAC7Bb,UAAAA,EACAC,KAAAA,EACAa,KAAAA,KAEAV,MAAM,GAAGJ,kBAA0BC,IAAQ,CACzCc,OAAQ,OACRC,QAAS,CAEP,eAAgB,oBAElBC,KAAMC,KAAKC,UAAU,CAAEL,KAAAA,MAEtBP,MAAMC,GAASA,EAAKC,SACpBF,MAAMZ,GAASD,EAAWC,EAAM,iBC7LxByB,EAAYC,GACvBA,EAAQC,QAAQR,MAAQO,EAAQE,aAAa,MCqDzCC,EAAqB,CACzBd,EACAe,KAEAA,EAAcC,SAAQ,CAACL,EAASM,KAC9BN,EAAQO,UAAYlB,EAAOiB,GAAOE,eAIzBC,EAAgB,EAC3B9B,UAAAA,EACAc,KAAAA,EAAOiB,OAAOC,SAASC,SACvBC,SAAAA,EAAW,yBACXC,OAAAA,GAAS,EACTlC,KAAAA,EAAO,YAEP,MAAMmC,EAAa,IAAIC,gBAEjBC,EAAW3B,MAAM4B,KAErBC,SAASC,iBAA8BP,IAGnCQ,EAAUrB,IACd,MAAMsB,EAAQvB,EAASC,GAEvB,OAAiB,OAAVsB,GAAkB7B,IAAS6B,GAG9BvC,EAASkC,GACbvC,EAAe,CACbC,UAAAA,EACAE,MAAOoC,EAASM,KAAKvB,GAAYD,EAASC,IAAYP,IACtDb,KAAAA,EACAE,OAAQiC,EAAWjC,SAElBI,MAAMG,GAAWc,EAAmBd,EAAQ4B,KAC5CO,MAAMzD,GAGX,GAAI+C,EAAQ,CACV,MAAMW,EAAiBR,EAASI,QAAQrB,IAAaqB,EAAOrB,KACtD0B,EAA2BT,EAASI,OAAOA,GAE5C7B,EAAgB,CAAEb,UAAAA,EAAWc,KAAAA,EAAMb,KAAAA,IAAQM,MAAMyC,GACpDxB,EACE,IAAIb,MAAcmC,EAAeG,QAAQC,KAAKF,GAC9CF,KAKAC,EAAyBE,QACtB7C,EAAM2C,QAKR3C,EAAMkC,GAGb,OAAOF,EAAWe,MAAMC,KAAKhB"}
|
package/dist/pageview.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){if("function"==typeof define&&define.amd)define("Waline",["exports"],t);else if("undefined"!=typeof exports)t(exports);else{var n={exports:{}};t(n.exports),e.Waline=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.pageviewCount=void 0;e.version="2.
|
|
1
|
+
!function(e,t){if("function"==typeof define&&define.amd)define("Waline",["exports"],t);else if("undefined"!=typeof exports)t(exports);else{var n={exports:{}};t(n.exports),e.Waline=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.pageviewCount=void 0;e.version="2.1.1";const t=e=>{"AbortError"!==e.name&&console.error(e.message)},n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("object"==typeof e&&e.errno)throw new TypeError("Fetch ".concat(t," failed with ").concat(e.errno,": ").concat(e.errmsg));return e},o=e=>{let{serverURL:t,lang:o,paths:r,signal:a}=e;return fetch("".concat(t,"/article?path=").concat(encodeURIComponent(r.join(",")),"&lang=").concat(o),{signal:a}).then((e=>e.json())).then((e=>n(e,"visit count"))).then((e=>Array.isArray(e)?e:[e]))},r=e=>{let{serverURL:t,lang:o,path:r}=e;return fetch("".concat(t,"/article?lang=").concat(o),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:r})}).then((e=>e.json())).then((e=>n(e,"visit count")))},a=e=>e.dataset.path||e.getAttribute("id"),i=(e,t)=>{t.forEach(((t,n)=>{t.innerText=e[n].toString()}))};e.pageviewCount=e=>{let{serverURL:n,path:l=window.location.pathname,selector:s=".waline-pageview-count",update:c=!0,lang:h="zh-CN"}=e;const f=new AbortController,p=Array.from(document.querySelectorAll(s)),d=e=>{const t=a(e);return null!==t&&l!==t},g=e=>o({serverURL:n,paths:e.map((e=>a(e)||l)),lang:h,signal:f.signal}).then((t=>i(t,e))).catch(t);if(c){const e=p.filter((e=>!d(e))),t=p.filter(d);r({serverURL:n,path:l,lang:h}).then((t=>i(new Array(e.length).fill(t),e))),t.length&&g(t)}else g(p);return f.abort.bind(f)}}));
|
|
2
2
|
//# sourceMappingURL=pageview.js.map
|
package/dist/pageview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageview.js","sources":["../src/version.ts","../src/utils/error.ts","../src/utils/fetch.ts","../src/utils/query.ts","../src/pageview.ts"],"sourcesContent":["declare const VERSION: string;\n\nexport const version = VERSION;\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nconst errorCheck = <T = unknown>(data: T | FetchErrorData, name = ''): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n\nexport interface FetchCountOptions {\n serverURL: string;\n paths: string[];\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n paths,\n signal,\n token,\n}: FetchCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\nexport interface FetchRecentOptions {\n serverURL: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n count,\n signal,\n token,\n}: FetchRecentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n\nexport interface FetchListOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport interface FetchListResult {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchCommentList = ({\n serverURL,\n path,\n page,\n pageSize,\n signal,\n token,\n}: FetchListOptions): Promise<FetchListResult> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<FetchListResult>)\n .then((data) => errorCheck(data, 'comment list'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface FetchPageviewsOptions {\n serverURL: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n paths,\n signal,\n}: FetchPageviewsOptions): Promise<number[]> =>\n fetch(`${serverURL}/article?path=${encodeURIComponent(paths.join(','))}`, {\n signal,\n })\n .then((resp) => resp.json() as Promise<number[] | number>)\n .then((data) => errorCheck(data, 'visit count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n\nexport interface UpdatePageviewsOptions {\n serverURL: string;\n path: string;\n}\n\nexport const updatePageviews = ({\n serverURL,\n path,\n}: UpdatePageviewsOptions): Promise<number> =>\n fetch(`${serverURL}/article`, {\n method: 'POST',\n headers: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ path }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'visit count'));\n","export const getQuery = (element: HTMLElement): string | null =>\n element.dataset.path || element.getAttribute('id');\n","import {\n errorHandler,\n fetchPageviews,\n getQuery,\n updatePageviews,\n} from './utils';\n\nimport type { WalineAbort } from './typings';\n\nexport interface WalinePageviewCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 浏览量 CSS 选择器\n *\n * Pageview CSS selector\n *\n * @default '.waline-pageview-count'\n */\n selector?: string;\n\n /**\n * 需要更新和获取的路径\n *\n * Path to be fetched and updated\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 是否在查询时更新 path 的浏览量\n *\n * Whether update pageviews when fetching path result\n *\n * @default true\n */\n update?: boolean;\n}\n\nconst renderVisitorCount = (\n counts: number[],\n countElements: HTMLElement[]\n): void => {\n countElements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n};\n\nexport const pageviewCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-pageview-count',\n update = true,\n}: WalinePageviewCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n const elements = Array.from(\n // pageview selectors\n document.querySelectorAll<HTMLElement>(selector)\n );\n\n const filter = (element: HTMLElement): boolean => {\n const query = getQuery(element);\n\n return query !== null && path !== query;\n };\n\n const fetch = (elements: HTMLElement[]): Promise<void> =>\n fetchPageviews({\n serverURL,\n paths: elements.map((element) => getQuery(element) || path),\n signal: controller.signal,\n })\n .then((counts) => renderVisitorCount(counts, elements))\n .catch(errorHandler);\n\n // we should update pageviews\n if (update) {\n const normalElements = elements.filter((element) => !filter(element));\n const elementsNeedstoBeFetched = elements.filter(filter);\n\n void updatePageviews({ serverURL, path }).then((count) =>\n renderVisitorCount(\n new Array<number>(normalElements.length).fill(count),\n normalElements\n )\n );\n\n // if we should fetch count of other pages\n if (elementsNeedstoBeFetched.length) {\n void fetch(elementsNeedstoBeFetched);\n }\n }\n // we should not update pageviews\n else {\n void fetch(elements);\n }\n\n return controller.abort.bind(controller);\n};\n"],"names":["errorHandler","err","name","console","error","message","errorCheck","data","errno","TypeError","errmsg","fetchPageviews","_ref","serverURL","paths","signal","fetch","concat","encodeURIComponent","join","then","resp","json","counts","Array","isArray","updatePageviews","_ref2","path","method","headers","body","JSON","stringify","getQuery","element","dataset","getAttribute","renderVisitorCount","countElements","forEach","index","innerText","toString","_ref3","window","location","pathname","selector","update","controller","AbortController","elements","from","document","querySelectorAll","filter","query","map","catch","normalElements","elementsNeedstoBeFetched","count","length","fill","abort","bind"],"mappings":"sXAEuB,QCFVA,MAAAA,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,UCM7CC,EAAa,SAAcC,GAA0BL,IAAAA,yDAAO,GAC5D,GAAgB,iBAATK,GAAsBA,EAAwBC,MACvD,MAAM,IAAIC,UACCP,SAAAA,OAAAA,0BAAqBK,EAAwBC,MACnDD,MAAAA,OAAAA,EAAwBG,SAI/B,OAAOH,GAkIII,EAAiBC,IAAC,IAAAC,UAC7BA,EAD6BC,MAE7BA,EAF6BC,OAG7BA,GAH4BH,EAAA,OAK5BI,MAAK,GAAAC,OAAIJ,EAAJ,kBAAAI,OAA8BC,mBAAmBJ,EAAMK,KAAK,OAAS,CACxEJ,OAAAA,IAECK,MAAMC,GAASA,EAAKC,SACpBF,MAAMb,GAASD,EAAWC,EAAM,iBAEhCa,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,MAO5CG,EAAkBC,IAAC,IAAAd,UAC9BA,EAD8Be,KAE9BA,GAF6BD,EAI7BX,OAAAA,MAASH,GAAAA,OAAAA,EAAqB,YAAA,CAC5BgB,OAAQ,OACRC,QAAS,CAES,eAAA,oBAElBC,KAAMC,KAAKC,UAAU,CAAEL,KAAAA,MAEtBR,MAAMC,GAASA,EAAKC,SACpBF,MAAMb,GAASD,EAAWC,EAAM,kBChLxB2B,EAAYC,GACvBA,EAAQC,QAAQR,MAAQO,EAAQE,aAAa,MC4CzCC,EAAqB,CACzBf,EACAgB,KAEAA,EAAcC,SAAQ,CAACL,EAASM,KAC9BN,EAAQO,UAAYnB,EAAOkB,GAAOE,+BAITC,IAAC,IAAA/B,UAC5BA,EAD4Be,KAE5BA,EAAOiB,OAAOC,SAASC,SAFKC,SAG5BA,EAAW,yBAHiBC,OAI5BA,GAAS,GACmCL,EAC5C,MAAMM,EAAa,IAAIC,gBAEjBC,EAAW5B,MAAM6B,KAErBC,SAASC,iBAA8BP,IAGnCQ,EAAUrB,IACd,MAAMsB,EAAQvB,EAASC,GAEvB,OAAiB,OAAVsB,GAAkB7B,IAAS6B,GAG9BzC,EAASoC,GACbzC,EAAe,CACbE,UAAAA,EACAC,MAAOsC,EAASM,KAAKvB,GAAYD,EAASC,IAAYP,IACtDb,OAAQmC,EAAWnC,SAElBK,MAAMG,GAAWe,EAAmBf,EAAQ6B,KAC5CO,MAAM3D,GAGX,GAAIiD,EAAQ,CACV,MAAMW,EAAiBR,EAASI,QAAQrB,IAAaqB,EAAOrB,KACtD0B,EAA2BT,EAASI,OAAOA,GAE5C9B,EAAgB,CAAEb,UAAAA,EAAWe,KAAAA,IAAQR,MAAM0C,GAC9CxB,EACE,IAAId,MAAcoC,EAAeG,QAAQC,KAAKF,GAC9CF,KAKAC,EAAyBE,QACtB/C,EAAM6C,QAKR7C,EAAMoC,GAGb,OAAOF,EAAWe,MAAMC,KAAKhB"}
|
|
1
|
+
{"version":3,"file":"pageview.js","sources":["../src/version.ts","../src/utils/error.ts","../src/utils/fetch.ts","../src/utils/query.ts","../src/pageview.ts"],"sourcesContent":["declare const VERSION: string;\n\nexport const version = VERSION;\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nconst errorCheck = <T = unknown>(data: T | FetchErrorData, name = ''): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n\nexport interface FetchCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n token,\n}: FetchCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\nexport interface FetchRecentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n\nexport interface FetchListOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface FetchListResult {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchCommentList = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n signal,\n token,\n}: FetchListOptions): Promise<FetchListResult> => {\n const headers: Record<string, string> = {};\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<FetchListResult>)\n .then((data) => errorCheck(data, 'comment list'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface FetchPageviewsOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewsOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => resp.json() as Promise<number[] | number>)\n .then((data) => errorCheck(data, 'visit count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n\nexport interface UpdatePageviewsOptions {\n serverURL: string;\n lang: string;\n path: string;\n}\n\nexport const updatePageviews = ({\n serverURL,\n lang,\n path,\n}: UpdatePageviewsOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ path }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'visit count'));\n","export const getQuery = (element: HTMLElement): string | null =>\n element.dataset.path || element.getAttribute('id');\n","import {\n errorHandler,\n fetchPageviews,\n getQuery,\n updatePageviews,\n} from './utils';\n\nimport type { WalineAbort } from './typings';\n\nexport interface WalinePageviewCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 浏览量 CSS 选择器\n *\n * Pageview CSS selector\n *\n * @default '.waline-pageview-count'\n */\n selector?: string;\n\n /**\n * 需要更新和获取的路径\n *\n * Path to be fetched and updated\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 是否在查询时更新 path 的浏览量\n *\n * Whether update pageviews when fetching path result\n *\n * @default true\n */\n update?: boolean;\n\n /**\n * 错误提示消息所使用的语言\n *\n * Language of error message\n *\n * @default 'zh-CN'\n */\n lang?: string;\n}\n\nconst renderVisitorCount = (\n counts: number[],\n countElements: HTMLElement[]\n): void => {\n countElements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n};\n\nexport const pageviewCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-pageview-count',\n update = true,\n lang = 'zh-CN',\n}: WalinePageviewCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n const elements = Array.from(\n // pageview selectors\n document.querySelectorAll<HTMLElement>(selector)\n );\n\n const filter = (element: HTMLElement): boolean => {\n const query = getQuery(element);\n\n return query !== null && path !== query;\n };\n\n const fetch = (elements: HTMLElement[]): Promise<void> =>\n fetchPageviews({\n serverURL,\n paths: elements.map((element) => getQuery(element) || path),\n lang,\n signal: controller.signal,\n })\n .then((counts) => renderVisitorCount(counts, elements))\n .catch(errorHandler);\n\n // we should update pageviews\n if (update) {\n const normalElements = elements.filter((element) => !filter(element));\n const elementsNeedstoBeFetched = elements.filter(filter);\n\n void updatePageviews({ serverURL, path, lang }).then((count) =>\n renderVisitorCount(\n new Array<number>(normalElements.length).fill(count),\n normalElements\n )\n );\n\n // if we should fetch count of other pages\n if (elementsNeedstoBeFetched.length) {\n void fetch(elementsNeedstoBeFetched);\n }\n }\n // we should not update pageviews\n else {\n void fetch(elements);\n }\n\n return controller.abort.bind(controller);\n};\n"],"names":["errorHandler","err","name","console","error","message","errorCheck","data","errno","TypeError","errmsg","fetchPageviews","_ref","serverURL","lang","paths","signal","fetch","concat","encodeURIComponent","join","then","resp","json","counts","Array","isArray","updatePageviews","_ref2","path","method","headers","body","JSON","stringify","getQuery","element","dataset","getAttribute","renderVisitorCount","countElements","forEach","index","innerText","toString","_ref3","window","location","pathname","selector","update","controller","AbortController","elements","from","document","querySelectorAll","filter","query","map","catch","normalElements","elementsNeedstoBeFetched","count","length","fill","abort","bind"],"mappings":"sXAEuB,QCFVA,MAAAA,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,UCM7CC,EAAa,SAAcC,GAA0BL,IAAAA,yDAAO,GAC5D,GAAgB,iBAATK,GAAsBA,EAAwBC,MACvD,MAAM,IAAIC,UACCP,SAAAA,OAAAA,0BAAqBK,EAAwBC,MACnDD,MAAAA,OAAAA,EAAwBG,SAI/B,OAAOH,GAyIII,EAAiBC,IAAC,IAAAC,UAC7BA,EAD6BC,KAE7BA,EAF6BC,MAG7BA,EAH6BC,OAI7BA,GAJ4BJ,EAAA,OAM5BK,MAAK,GAAAC,OACAL,EADA,kBAAAK,OAC0BC,mBAC3BJ,EAAMK,KAAK,MAFV,UAAAF,OAGOJ,GACV,CAAEE,OAAAA,IAEDK,MAAMC,GAASA,EAAKC,SACpBF,MAAMd,GAASD,EAAWC,EAAM,iBAEhCc,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,MAQ5CG,EAAkBC,IAAC,IAAAf,UAC9BA,EAD8BC,KAE9BA,EAF8Be,KAG9BA,GAH6BD,EAAA,OAK7BX,MAAK,GAAAC,OAAIL,EAAJ,kBAAAK,OAA8BJ,GAAQ,CACzCgB,OAAQ,OACRC,QAAS,CAES,eAAA,oBAElBC,KAAMC,KAAKC,UAAU,CAAEL,KAAAA,MAEtBR,MAAMC,GAASA,EAAKC,SACpBF,MAAMd,GAASD,EAAWC,EAAM,kBC7LxB4B,EAAYC,GACvBA,EAAQC,QAAQR,MAAQO,EAAQE,aAAa,MCqDzCC,EAAqB,CACzBf,EACAgB,KAEAA,EAAcC,SAAQ,CAACL,EAASM,KAC9BN,EAAQO,UAAYnB,EAAOkB,GAAOE,+BAITC,IAAC,IAAAhC,UAC5BA,EAD4BgB,KAE5BA,EAAOiB,OAAOC,SAASC,SAFKC,SAG5BA,EAAW,yBAHiBC,OAI5BA,GAAS,EAJmBpC,KAK5BA,EAAO,SACqC+B,EAC5C,MAAMM,EAAa,IAAIC,gBAEjBC,EAAW5B,MAAM6B,KAErBC,SAASC,iBAA8BP,IAGnCQ,EAAUrB,IACd,MAAMsB,EAAQvB,EAASC,GAEvB,OAAiB,OAAVsB,GAAkB7B,IAAS6B,GAG9BzC,EAASoC,GACb1C,EAAe,CACbE,UAAAA,EACAE,MAAOsC,EAASM,KAAKvB,GAAYD,EAASC,IAAYP,IACtDf,KAAAA,EACAE,OAAQmC,EAAWnC,SAElBK,MAAMG,GAAWe,EAAmBf,EAAQ6B,KAC5CO,MAAM5D,GAGX,GAAIkD,EAAQ,CACV,MAAMW,EAAiBR,EAASI,QAAQrB,IAAaqB,EAAOrB,KACtD0B,EAA2BT,EAASI,OAAOA,GAE5C9B,EAAgB,CAAEd,UAAAA,EAAWgB,KAAAA,EAAMf,KAAAA,IAAQO,MAAM0C,GACpDxB,EACE,IAAId,MAAcoC,EAAeG,QAAQC,KAAKF,GAC9CF,KAKAC,EAAyBE,QACtB/C,EAAM6C,QAKR7C,EAAMoC,GAGb,OAAOF,EAAWe,MAAMC,KAAKhB"}
|
package/dist/shim.d.ts
CHANGED
|
@@ -64,9 +64,17 @@ interface WalineComment extends Exclude<WalineCommentData, 'ua'> {
|
|
|
64
64
|
sticky?: boolean;
|
|
65
65
|
browser?: string;
|
|
66
66
|
os?: string;
|
|
67
|
+
level?: number;
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
interface
|
|
70
|
+
interface WalineDateLocale {
|
|
71
|
+
seconds: string;
|
|
72
|
+
minutes: string;
|
|
73
|
+
hours: string;
|
|
74
|
+
days: string;
|
|
75
|
+
now: string;
|
|
76
|
+
}
|
|
77
|
+
interface WalineLocale extends WalineDateLocale {
|
|
70
78
|
nick: string;
|
|
71
79
|
nickError: string;
|
|
72
80
|
mail: string;
|
|
@@ -84,11 +92,6 @@ interface WalineLocale {
|
|
|
84
92
|
preview: string;
|
|
85
93
|
emoji: string;
|
|
86
94
|
uploadImage: string;
|
|
87
|
-
seconds: string;
|
|
88
|
-
minutes: string;
|
|
89
|
-
hours: string;
|
|
90
|
-
days: string;
|
|
91
|
-
now: string;
|
|
92
95
|
uploading: string;
|
|
93
96
|
login: string;
|
|
94
97
|
logout: string;
|
|
@@ -229,7 +232,7 @@ interface WalineProps {
|
|
|
229
232
|
*
|
|
230
233
|
* @default ['https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo']
|
|
231
234
|
*/
|
|
232
|
-
emoji?: (string | WalineEmojiInfo)[];
|
|
235
|
+
emoji?: (string | WalineEmojiInfo)[] | false;
|
|
233
236
|
/**
|
|
234
237
|
* 代码高亮
|
|
235
238
|
*
|
|
@@ -352,8 +355,16 @@ interface WalineCommentCountOptions {
|
|
|
352
355
|
* @default window.location.pathname
|
|
353
356
|
*/
|
|
354
357
|
path?: string;
|
|
358
|
+
/**
|
|
359
|
+
* 错误提示消息所使用的语言
|
|
360
|
+
*
|
|
361
|
+
* Language of error message
|
|
362
|
+
*
|
|
363
|
+
* @default 'zh-CN'
|
|
364
|
+
*/
|
|
365
|
+
lang?: string;
|
|
355
366
|
}
|
|
356
|
-
declare const commentCount: ({ serverURL, path, selector, }: WalineCommentCountOptions) => WalineAbort;
|
|
367
|
+
declare const commentCount: ({ serverURL, path, selector, lang, }: WalineCommentCountOptions) => WalineAbort;
|
|
357
368
|
|
|
358
369
|
interface WalineInstance {
|
|
359
370
|
/**
|
|
@@ -416,8 +427,16 @@ interface WalinePageviewCountOptions {
|
|
|
416
427
|
* @default true
|
|
417
428
|
*/
|
|
418
429
|
update?: boolean;
|
|
430
|
+
/**
|
|
431
|
+
* 错误提示消息所使用的语言
|
|
432
|
+
*
|
|
433
|
+
* Language of error message
|
|
434
|
+
*
|
|
435
|
+
* @default 'zh-CN'
|
|
436
|
+
*/
|
|
437
|
+
lang?: string;
|
|
419
438
|
}
|
|
420
|
-
declare const pageviewCount: ({ serverURL, path, selector, update, }: WalinePageviewCountOptions) => WalineAbort;
|
|
439
|
+
declare const pageviewCount: ({ serverURL, path, selector, update, lang, }: WalinePageviewCountOptions) => WalineAbort;
|
|
421
440
|
|
|
422
441
|
declare const version: string;
|
|
423
442
|
|
|
@@ -440,6 +459,14 @@ interface WalineRecentCommentsOptions {
|
|
|
440
459
|
* Element to be mounted
|
|
441
460
|
*/
|
|
442
461
|
el?: string | HTMLElement;
|
|
462
|
+
/**
|
|
463
|
+
* 错误提示消息所使用的语言
|
|
464
|
+
*
|
|
465
|
+
* Language of error message
|
|
466
|
+
*
|
|
467
|
+
* @default 'zh-CN'
|
|
468
|
+
*/
|
|
469
|
+
lang?: string;
|
|
443
470
|
}
|
|
444
471
|
interface WalineRecentCommentsResult {
|
|
445
472
|
/**
|
|
@@ -455,6 +482,6 @@ interface WalineRecentCommentsResult {
|
|
|
455
482
|
*/
|
|
456
483
|
destroy: () => void;
|
|
457
484
|
}
|
|
458
|
-
declare const RecentComments: ({ el, serverURL, count, }: WalineRecentCommentsOptions) => Promise<WalineRecentCommentsResult>;
|
|
485
|
+
declare const RecentComments: ({ el, serverURL, count, lang, }: WalineRecentCommentsOptions) => Promise<WalineRecentCommentsResult>;
|
|
459
486
|
|
|
460
|
-
export { Locales, RecentComments, WalineAbort, WalineComment, WalineCommentCountOptions, WalineCommentData, WalineEmojiInfo, WalineEmojiMaps, WalineHighlighter, WalineImageUploader, WalineInitOptions, WalineInstance, WalineLocale, WalineMeta, WalinePageviewCountOptions, WalineProps, WalineRecentCommentsOptions, WalineRecentCommentsResult, WalineTexRenderer, commentCount, defaultLang, defaultTexRenderer, defaultUploadImage, getMeta, init, locales, pageviewCount, version };
|
|
487
|
+
export { Locales, RecentComments, WalineAbort, WalineComment, WalineCommentCountOptions, WalineCommentData, WalineDateLocale, WalineEmojiInfo, WalineEmojiMaps, WalineHighlighter, WalineImageUploader, WalineInitOptions, WalineInstance, WalineLocale, WalineMeta, WalinePageviewCountOptions, WalineProps, WalineRecentCommentsOptions, WalineRecentCommentsResult, WalineTexRenderer, commentCount, defaultLang, defaultTexRenderer, defaultUploadImage, getMeta, init, locales, pageviewCount, version };
|
package/dist/shim.esm.d.ts
CHANGED
|
@@ -64,9 +64,17 @@ interface WalineComment extends Exclude<WalineCommentData, 'ua'> {
|
|
|
64
64
|
sticky?: boolean;
|
|
65
65
|
browser?: string;
|
|
66
66
|
os?: string;
|
|
67
|
+
level?: number;
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
interface
|
|
70
|
+
interface WalineDateLocale {
|
|
71
|
+
seconds: string;
|
|
72
|
+
minutes: string;
|
|
73
|
+
hours: string;
|
|
74
|
+
days: string;
|
|
75
|
+
now: string;
|
|
76
|
+
}
|
|
77
|
+
interface WalineLocale extends WalineDateLocale {
|
|
70
78
|
nick: string;
|
|
71
79
|
nickError: string;
|
|
72
80
|
mail: string;
|
|
@@ -84,11 +92,6 @@ interface WalineLocale {
|
|
|
84
92
|
preview: string;
|
|
85
93
|
emoji: string;
|
|
86
94
|
uploadImage: string;
|
|
87
|
-
seconds: string;
|
|
88
|
-
minutes: string;
|
|
89
|
-
hours: string;
|
|
90
|
-
days: string;
|
|
91
|
-
now: string;
|
|
92
95
|
uploading: string;
|
|
93
96
|
login: string;
|
|
94
97
|
logout: string;
|
|
@@ -229,7 +232,7 @@ interface WalineProps {
|
|
|
229
232
|
*
|
|
230
233
|
* @default ['https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo']
|
|
231
234
|
*/
|
|
232
|
-
emoji?: (string | WalineEmojiInfo)[];
|
|
235
|
+
emoji?: (string | WalineEmojiInfo)[] | false;
|
|
233
236
|
/**
|
|
234
237
|
* 代码高亮
|
|
235
238
|
*
|
|
@@ -352,8 +355,16 @@ interface WalineCommentCountOptions {
|
|
|
352
355
|
* @default window.location.pathname
|
|
353
356
|
*/
|
|
354
357
|
path?: string;
|
|
358
|
+
/**
|
|
359
|
+
* 错误提示消息所使用的语言
|
|
360
|
+
*
|
|
361
|
+
* Language of error message
|
|
362
|
+
*
|
|
363
|
+
* @default 'zh-CN'
|
|
364
|
+
*/
|
|
365
|
+
lang?: string;
|
|
355
366
|
}
|
|
356
|
-
declare const commentCount: ({ serverURL, path, selector, }: WalineCommentCountOptions) => WalineAbort;
|
|
367
|
+
declare const commentCount: ({ serverURL, path, selector, lang, }: WalineCommentCountOptions) => WalineAbort;
|
|
357
368
|
|
|
358
369
|
interface WalineInstance {
|
|
359
370
|
/**
|
|
@@ -416,8 +427,16 @@ interface WalinePageviewCountOptions {
|
|
|
416
427
|
* @default true
|
|
417
428
|
*/
|
|
418
429
|
update?: boolean;
|
|
430
|
+
/**
|
|
431
|
+
* 错误提示消息所使用的语言
|
|
432
|
+
*
|
|
433
|
+
* Language of error message
|
|
434
|
+
*
|
|
435
|
+
* @default 'zh-CN'
|
|
436
|
+
*/
|
|
437
|
+
lang?: string;
|
|
419
438
|
}
|
|
420
|
-
declare const pageviewCount: ({ serverURL, path, selector, update, }: WalinePageviewCountOptions) => WalineAbort;
|
|
439
|
+
declare const pageviewCount: ({ serverURL, path, selector, update, lang, }: WalinePageviewCountOptions) => WalineAbort;
|
|
421
440
|
|
|
422
441
|
declare const version: string;
|
|
423
442
|
|
|
@@ -440,6 +459,14 @@ interface WalineRecentCommentsOptions {
|
|
|
440
459
|
* Element to be mounted
|
|
441
460
|
*/
|
|
442
461
|
el?: string | HTMLElement;
|
|
462
|
+
/**
|
|
463
|
+
* 错误提示消息所使用的语言
|
|
464
|
+
*
|
|
465
|
+
* Language of error message
|
|
466
|
+
*
|
|
467
|
+
* @default 'zh-CN'
|
|
468
|
+
*/
|
|
469
|
+
lang?: string;
|
|
443
470
|
}
|
|
444
471
|
interface WalineRecentCommentsResult {
|
|
445
472
|
/**
|
|
@@ -455,6 +482,6 @@ interface WalineRecentCommentsResult {
|
|
|
455
482
|
*/
|
|
456
483
|
destroy: () => void;
|
|
457
484
|
}
|
|
458
|
-
declare const RecentComments: ({ el, serverURL, count, }: WalineRecentCommentsOptions) => Promise<WalineRecentCommentsResult>;
|
|
485
|
+
declare const RecentComments: ({ el, serverURL, count, lang, }: WalineRecentCommentsOptions) => Promise<WalineRecentCommentsResult>;
|
|
459
486
|
|
|
460
|
-
export { Locales, RecentComments, WalineAbort, WalineComment, WalineCommentCountOptions, WalineCommentData, WalineEmojiInfo, WalineEmojiMaps, WalineHighlighter, WalineImageUploader, WalineInitOptions, WalineInstance, WalineLocale, WalineMeta, WalinePageviewCountOptions, WalineProps, WalineRecentCommentsOptions, WalineRecentCommentsResult, WalineTexRenderer, commentCount, defaultLang, defaultTexRenderer, defaultUploadImage, getMeta, init, locales, pageviewCount, version };
|
|
487
|
+
export { Locales, RecentComments, WalineAbort, WalineComment, WalineCommentCountOptions, WalineCommentData, WalineDateLocale, WalineEmojiInfo, WalineEmojiMaps, WalineHighlighter, WalineImageUploader, WalineInitOptions, WalineInstance, WalineLocale, WalineMeta, WalinePageviewCountOptions, WalineProps, WalineRecentCommentsOptions, WalineRecentCommentsResult, WalineTexRenderer, commentCount, defaultLang, defaultTexRenderer, defaultUploadImage, getMeta, init, locales, pageviewCount, version };
|