@waline/client 2.14.4 → 2.14.6
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/api.cjs.map +1 -1
- package/dist/api.mjs.map +1 -1
- package/dist/comment.cjs +1 -1
- package/dist/comment.cjs.map +1 -1
- package/dist/comment.js +1 -1
- package/dist/comment.js.map +1 -1
- package/dist/comment.mjs +1 -1
- package/dist/comment.mjs.map +1 -1
- package/dist/component.mjs +1 -1
- package/dist/component.mjs.map +1 -1
- package/dist/legacy.umd.js +1 -1
- package/dist/legacy.umd.js.map +1 -1
- package/dist/pageview.cjs +1 -1
- package/dist/pageview.cjs.map +1 -1
- package/dist/pageview.js +1 -1
- package/dist/pageview.js.map +1 -1
- package/dist/pageview.mjs +1 -1
- package/dist/pageview.mjs.map +1 -1
- package/dist/shim.cjs +1 -1
- package/dist/shim.cjs.map +1 -1
- package/dist/shim.mjs +1 -1
- package/dist/shim.mjs.map +1 -1
- package/dist/waline-meta.css +1 -1
- package/dist/waline-meta.css.map +1 -1
- package/dist/waline.cjs +1 -1
- package/dist/waline.cjs.map +1 -1
- package/dist/waline.css +1 -1
- package/dist/waline.css.map +1 -1
- package/dist/waline.js +1 -1
- package/dist/waline.js.map +1 -1
- package/dist/waline.mjs +1 -1
- package/dist/waline.mjs.map +1 -1
- package/package.json +8 -8
- package/src/components/ArticleReaction.vue +14 -7
- package/src/components/CommentBox.vue +16 -6
- package/src/components/CommentCard.vue +1 -1
- package/src/components/WalineComment.vue +5 -1
- package/src/styles/card.scss +32 -29
- package/src/styles/emoji.scss +1 -1
- package/src/styles/gif.scss +1 -1
- package/src/styles/highlight.scss +3 -0
- package/src/styles/layout.scss +15 -15
- package/src/styles/meta.scss +1 -1
- package/src/styles/normalize.scss +7 -3
- package/src/styles/panel.scss +18 -18
- package/src/styles/reaction.scss +72 -69
- package/src/styles/user-list.scss +30 -29
package/dist/api.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"api.cjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/pageview.ts","../src/api/recentComment.ts","../src/api/user.ts","../src/api/login.ts"],"sourcesContent":["export interface BaseAPIOptions {\n /**\n * Waline 服务端地址\n *\n * Waline serverURL\n */\n serverURL: string;\n\n /**\n * 错误信息所使用的语言\n *\n * Language used in error text\n */\n lang: string;\n}\n\nexport interface ErrorStatusResponse {\n /**\n * 错误代码\n *\n * Error number\n */\n errno: number;\n\n /**\n * 错误消息\n *\n * Error msg\n */\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T extends ErrorStatusResponse>(\n data: T,\n name = ''\n): T => {\n if (typeof data === 'object' && data.errno)\n throw new TypeError(`${name} failed with ${data.errno}: ${data.errmsg}`);\n\n return data;\n};\n","import { JSON_HEADERS } from './utils';\nimport type { BaseAPIOptions } from './utils';\n\nexport interface GetArticleCounterOptions extends BaseAPIOptions {\n /**\n * 待获取计数器的 path\n *\n * Path of counters\n */\n paths: string[];\n\n /**\n * 待获取计数器的类型\n *\n * Counter type to be fetched\n */\n type: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport type GetArticleCounterResponse =\n | Record<string, number>[]\n | Record<string, number>\n | number[]\n | number;\n\nexport const getArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: GetArticleCounterOptions): Promise<GetArticleCounterResponse> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n ).then((resp) => <Promise<GetArticleCounterResponse>>resp.json());\n\nexport interface UpdateArticleCounterOptions extends BaseAPIOptions {\n /**\n * 待更新计数器的 path\n *\n * Path of counter to be updated\n */\n path: string;\n\n /**\n * 待更新计数器的类型\n *\n * Counter type to be updated\n */\n type: string;\n\n /**\n * 更新操作\n *\n * Update operation\n *\n * @default 'inc'\n */\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n }).then((resp) => <Promise<number>>resp.json());\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { BaseAPIOptions, ErrorStatusResponse } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface GetCommentOptions extends BaseAPIOptions {\n /**\n * 待获取评论列表的 path\n *\n * Path of comment list\n */\n path: string;\n\n /**\n * 评论分页数\n *\n * Comment pagination number\n */\n page: number;\n\n /**\n * 每页评论个数\n *\n * Comment number per page\n */\n pageSize: number;\n\n /**\n * 排序方式\n *\n * Sort method\n */\n sortBy: string;\n\n /**\n * 用户令牌\n *\n * User token\n */\n token?: string;\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport interface GetCommentResponse extends ErrorStatusResponse {\n /**\n * 评论数量\n *\n * Comment number\n */\n count: number;\n\n /**\n * 评论分页数\n *\n * Comment pagination number\n */\n page: number;\n\n /**\n * 每页评论个数\n *\n * Comment number per page\n */\n pageSize: number;\n\n /**\n * 评论数据\n *\n * Comment Data\n */\n data: WalineComment[];\n\n /**\n * 页面总数\n *\n * Page number\n */\n totalPages: number;\n}\n\nexport const getComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: GetCommentOptions): Promise<GetCommentResponse> => {\n const headers: Record<string, string> = {};\n\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}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => <Promise<GetCommentResponse>>resp.json())\n .then((data) => errorCheck(data, 'Get comment data'));\n};\n\nexport interface AddCommentOptions extends BaseAPIOptions {\n /**\n * 用户令牌\n *\n * User token\n */\n token?: string;\n\n /**\n * 用户待提交的评论数据\n *\n * Comment data being submitted by user\n */\n comment: WalineCommentData;\n}\n\nexport interface AddCommentResponse extends ErrorStatusResponse {\n /**\n * 渲染好的评论数据\n *\n * Comment data rendered\n */\n data?: WalineComment;\n}\n\nexport const addComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: AddCommentOptions): Promise<AddCommentResponse> => {\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) => <Promise<AddCommentResponse>>resp.json());\n};\n\nexport interface DeleteCommentOptions extends BaseAPIOptions {\n token: string;\n objectId: string | number;\n}\n\nexport interface DeleteCommentResponse extends ErrorStatusResponse {\n data: '';\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<DeleteCommentResponse> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n .then((resp) => <Promise<DeleteCommentResponse>>resp.json())\n .then((resp) => errorCheck(resp, 'Delete comment'));\n\ninterface UpdateWalineCommentData extends Partial<WalineCommentData> {\n /**\n * 点赞还是取消点赞\n *\n * Like or dislike\n */\n like?: boolean;\n\n /**\n * 评论的状态\n *\n * Comment status\n */\n status?: 'approved' | 'waiting' | 'spam';\n\n /**\n * 评论指定状态\n *\n * Comment sticky status\n *\n * @description 0 means not sticky and 1 means sticky\n */\n sticky?: 0 | 1;\n}\nexport interface UpdateCommentOptions extends BaseAPIOptions {\n /**\n * 用户令牌\n *\n * User token\n */\n token: string;\n\n /**\n * 评论的 ID\n *\n * Comment ID\n */\n objectId: number | string;\n\n /**\n * 评论数据\n *\n * Comment data\n */\n comment?: UpdateWalineCommentData;\n}\n\nexport interface UpdateCommentResponse extends ErrorStatusResponse {\n /**\n * 更新后的评论数据\n *\n * Comment data rendered\n */\n data: WalineComment;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n comment,\n}: UpdateCommentOptions): Promise<UpdateCommentResponse> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(comment),\n })\n .then((resp) => <Promise<UpdateCommentResponse>>resp.json())\n .then((resp) => errorCheck(resp, 'Update comment'));\n","import type { BaseAPIOptions } from './utils';\n\nexport interface GetCommentCountOptions extends BaseAPIOptions {\n /**\n * 待获取评论数的 path\n *\n * Path of pages to be fetched\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetCommentCountOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => <Promise<number | number[]>>resp.json())\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n","import { getArticleCounter, updateArticleCounter } from './articleCounter';\nimport type { BaseAPIOptions } from './utils';\n\ninterface GetPageviewOptions extends BaseAPIOptions {\n /**\n * 待获取页面的 path\n *\n * Path of pages\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const getPageview = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetPageviewOptions): Promise<number[]> =>\n getArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions extends BaseAPIOptions {\n /**\n * 待更新页面的 path\n *\n * Path of pages\n */\n path: string;\n}\n\nexport const updatePageview = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n action: 'inc',\n });\n","import type { BaseAPIOptions } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface GetRecentCommentOptions extends BaseAPIOptions {\n /**\n * 获取评论的数量\n *\n * Comment number to be fetched\n */\n count: number;\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n\n /**\n * 用户令牌\n *\n * User token\n */\n token?: string;\n}\n\nexport const getRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: GetRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n }).then((resp) => <Promise<WalineComment[]>>resp.json());\n};\n","import { errorCheck, ErrorStatusResponse } from './utils';\nimport type { BaseAPIOptions } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface GetUserListOptions extends BaseAPIOptions {\n /**\n * 每页个数\n *\n * Number per page\n */\n pageSize: number;\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport interface WalineUser\n extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {\n count: number;\n}\n\nexport interface GetUserListResponse extends ErrorStatusResponse {\n data: WalineUser[];\n}\n\nexport const getUserList = ({\n serverURL,\n signal,\n pageSize,\n lang,\n}: GetUserListOptions): Promise<WalineUser[]> =>\n fetch(`${serverURL}/user?pageSize=${pageSize}&lang=${lang}`, {\n signal,\n })\n .then((resp) => <Promise<GetUserListResponse>>resp.json())\n .then((resp) => errorCheck(resp, 'user list'))\n .then((resp) => resp.data);\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport type { BaseAPIOptions } from './utils';\n\nexport interface UserInfo {\n /**\n * 显示姓名\n *\n * User name displayed\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n\n /**\n * 用户电子邮件地址\n *\n * User email\n */\n email: string;\n\n /**\n * 用户网站地址\n *\n * User website\n */\n url: string;\n\n /**\n * 用户令牌\n *\n * User token\n */\n token: string;\n\n /**\n * 用户头像\n *\n * User avatar\n */\n avatar: string;\n\n /**\n * 用户邮箱 MD5\n *\n * MD5 of User email\n */\n mailMd5: string;\n\n /**\n * 用户对象 ID\n *\n * User object ID\n */\n objectId: string | number;\n\n /**\n * 用户身份\n *\n * User role\n */\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: BaseAPIOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","getArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","token","comment","Authorization","objectId","counts","Array","isArray","page","pageSize","sortBy","count","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","options"],"mappings":"aAgCO,MAAMA,EAAuC,CAElD,eAAgB,oBAGLC,EAAa,CACxBC,EACAC,EAAO,MAEP,GAAoB,iBAATD,GAAqBA,EAAKE,MACnC,MAAM,IAAIC,UAAU,GAAGF,iBAAoBD,EAAKE,UAAUF,EAAKI,UAEjE,OAAOJ,CAAI,ECZAK,EAAoB,EAC/BC,YACAC,OACAC,QACAC,OACAC,YAEAC,MACE,GAAGL,kBAA0BM,mBAC3BJ,EAAMK,KAAK,cACHD,mBAAmBH,EAAKI,KAAK,cAAcN,IACrD,CAAEG,WACFI,MAAMC,GAA6CA,EAAKC,SA2B/CC,EAAuB,EAClCX,YACAC,OACAW,OACAT,OACAU,YAEAR,MAAM,GAAGL,kBAA0BC,IAAQ,CACzCa,OAAQ,OACRC,QAASvB,EACTwB,KAAMC,KAAKC,UAAU,CAAEN,OAAMT,OAAMU,aAClCL,MAAMC,GAA0BA,EAAKC,4BCoDhB,EACxBV,YACAC,OACAkB,QACAC,cAEA,MAAML,EAAkC,CAEtC,eAAgB,oBAKlB,OAFII,IAAOJ,EAAQM,cAAgB,UAAUF,KAEtCd,MAAM,GAAGL,kBAA0BC,IAAQ,CAChDa,OAAQ,OACRC,UACAC,KAAMC,KAAKC,UAAUE,KACpBZ,MAAMC,GAAsCA,EAAKC,QAAO,wBAYhC,EAC3BV,YACAC,OACAkB,QACAG,cAEAjB,MAAM,GAAGL,aAAqBsB,UAAiBrB,IAAQ,CACrDa,OAAQ,SACRC,QAAS,CACPM,cAAe,UAAUF,OAG1BX,MAAMC,GAAyCA,EAAKC,SACpDF,MAAMC,GAAShB,EAAWgB,EAAM,8CC9JJ,EAC/BT,YACAC,OACAC,QACAE,YAEAC,MACE,GAAGL,4BAAoCM,mBACrCJ,EAAMK,KAAK,cACHN,IACV,CAAEG,WAEDI,MAAMC,GAAqCA,EAAKC,SAEhDF,MAAMe,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,oDDqD/B,EACxBvB,YACAC,OACAW,OACAc,OACAC,WACAC,SACAxB,SACAe,YAEA,MAAMJ,EAAkC,CAAA,EAIxC,OAFII,IAAOJ,EAAQM,cAAgB,UAAUF,KAEtCd,MACL,GAAGL,kBAA0BM,mBAC3BM,eACYe,UAAiBD,UAAazB,YAAe2B,IAC3D,CAAExB,SAAQW,YAETP,MAAMC,GAAsCA,EAAKC,SACjDF,MAAMd,GAASD,EAAWC,EAAM,qBAAoB,sBEvF9B,EACzBM,YACAC,OACAC,QACAE,YAEAL,EAAkB,CAChBC,YACAC,OACAC,QACAC,KAAM,CAAC,QACPC,WAGCI,MAAMe,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,8BCPzB,EAC9BvB,YACAC,OACA4B,QACAzB,SACAe,YAEA,MAAMJ,EAAkC,CAAA,EAIxC,OAFII,IAAOJ,EAAQM,cAAgB,UAAUF,KAEtCd,MAAM,GAAGL,+BAAuC6B,UAAc5B,IAAQ,CAC3EG,SACAW,YACCP,MAAMC,GAAmCA,EAAKC,QAAO,sBCX/B,EACzBV,YACAI,SACAuB,WACA1B,UAEAI,MAAM,GAAGL,mBAA2B2B,UAAiB1B,IAAQ,CAC3DG,WAECI,MAAMC,GAAuCA,EAAKC,SAClDF,MAAMC,GAAShB,EAAWgB,EAAM,eAChCD,MAAMC,GAASA,EAAKf,qBCsBJ,EACnBO,OACAD,gBAEA,MAEM8B,GAAQC,OAAOC,WAFP,KAE6B,EACrCC,GAAOF,OAAOG,YAFL,KAE6B,EAEtCC,EAAUJ,OAAOK,KACrB,GAAGpC,kBAA0BM,mBAAmBL,KAChD,SACA,6BAAwC6B,SAAYG,4EAKtD,OAFAE,GAASE,YAAY,CAAElC,KAAM,QAAST,KAAM,MAAQ,KAE7C,IAAI4C,SAASC,IAElB,MAAMC,EAAW,EAAG9C,WACbA,GAAwB,iBAATA,GAAmC,aAAdA,EAAKS,MAE1CT,EAAKA,KAAKyB,QACZgB,GAASM,QAETV,OAAOW,oBAAoB,UAAWF,GAEtCD,EAAQ7C,EAAKA,MACd,EAGHqC,OAAOY,iBAAiB,UAAWH,EAAS,GAC5C,uDL4IyB,EAC3BxC,YACAC,OACAkB,QACAG,WACAF,aAEAf,MAAM,GAAGL,aAAqBsB,UAAiBrB,IAAQ,CACrDa,OAAQ,MACRC,QAAS,IACJvB,EACH6B,cAAe,UAAUF,KAE3BH,KAAMC,KAAKC,UAAUE,KAEpBZ,MAAMC,GAAyCA,EAAKC,SACpDF,MAAMC,GAAShB,EAAWgB,EAAM,2CE3MnCmC,GAEAjC,EAAqB,IAChBiC,EACHzC,KAAM,OACNU,OAAQ"}
|
package/dist/api.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"api.mjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/login.ts","../src/api/pageview.ts","../src/api/recentComment.ts","../src/api/user.ts"],"sourcesContent":["export interface BaseAPIOptions {\n /**\n * Waline 服务端地址\n *\n * Waline serverURL\n */\n serverURL: string;\n\n /**\n * 错误信息所使用的语言\n *\n * Language used in error text\n */\n lang: string;\n}\n\nexport interface ErrorStatusResponse {\n /**\n * 错误代码\n *\n * Error number\n */\n errno: number;\n\n /**\n * 错误消息\n *\n * Error msg\n */\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T extends ErrorStatusResponse>(\n data: T,\n name = ''\n): T => {\n if (typeof data === 'object' && data.errno)\n throw new TypeError(`${name} failed with ${data.errno}: ${data.errmsg}`);\n\n return data;\n};\n","import { JSON_HEADERS } from './utils';\nimport type { BaseAPIOptions } from './utils';\n\nexport interface GetArticleCounterOptions extends BaseAPIOptions {\n /**\n * 待获取计数器的 path\n *\n * Path of counters\n */\n paths: string[];\n\n /**\n * 待获取计数器的类型\n *\n * Counter type to be fetched\n */\n type: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport type GetArticleCounterResponse =\n | Record<string, number>[]\n | Record<string, number>\n | number[]\n | number;\n\nexport const getArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: GetArticleCounterOptions): Promise<GetArticleCounterResponse> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n ).then((resp) => <Promise<GetArticleCounterResponse>>resp.json());\n\nexport interface UpdateArticleCounterOptions extends BaseAPIOptions {\n /**\n * 待更新计数器的 path\n *\n * Path of counter to be updated\n */\n path: string;\n\n /**\n * 待更新计数器的类型\n *\n * Counter type to be updated\n */\n type: string;\n\n /**\n * 更新操作\n *\n * Update operation\n *\n * @default 'inc'\n */\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n }).then((resp) => <Promise<number>>resp.json());\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { BaseAPIOptions, ErrorStatusResponse } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface GetCommentOptions extends BaseAPIOptions {\n /**\n * 待获取评论列表的 path\n *\n * Path of comment list\n */\n path: string;\n\n /**\n * 评论分页数\n *\n * Comment pagination number\n */\n page: number;\n\n /**\n * 每页评论个数\n *\n * Comment number per page\n */\n pageSize: number;\n\n /**\n * 排序方式\n *\n * Sort method\n */\n sortBy: string;\n\n /**\n * 用户令牌\n *\n * User token\n */\n token?: string;\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport interface GetCommentResponse extends ErrorStatusResponse {\n /**\n * 评论数量\n *\n * Comment number\n */\n count: number;\n\n /**\n * 评论分页数\n *\n * Comment pagination number\n */\n page: number;\n\n /**\n * 每页评论个数\n *\n * Comment number per page\n */\n pageSize: number;\n\n /**\n * 评论数据\n *\n * Comment Data\n */\n data: WalineComment[];\n\n /**\n * 页面总数\n *\n * Page number\n */\n totalPages: number;\n}\n\nexport const getComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: GetCommentOptions): Promise<GetCommentResponse> => {\n const headers: Record<string, string> = {};\n\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}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => <Promise<GetCommentResponse>>resp.json())\n .then((data) => errorCheck(data, 'Get comment data'));\n};\n\nexport interface AddCommentOptions extends BaseAPIOptions {\n /**\n * 用户令牌\n *\n * User token\n */\n token?: string;\n\n /**\n * 用户待提交的评论数据\n *\n * Comment data being submitted by user\n */\n comment: WalineCommentData;\n}\n\nexport interface AddCommentResponse extends ErrorStatusResponse {\n /**\n * 渲染好的评论数据\n *\n * Comment data rendered\n */\n data?: WalineComment;\n}\n\nexport const addComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: AddCommentOptions): Promise<AddCommentResponse> => {\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) => <Promise<AddCommentResponse>>resp.json());\n};\n\nexport interface DeleteCommentOptions extends BaseAPIOptions {\n token: string;\n objectId: string | number;\n}\n\nexport interface DeleteCommentResponse extends ErrorStatusResponse {\n data: '';\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<DeleteCommentResponse> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n .then((resp) => <Promise<DeleteCommentResponse>>resp.json())\n .then((resp) => errorCheck(resp, 'Delete comment'));\n\ninterface UpdateWalineCommentData extends Partial<WalineCommentData> {\n /**\n * 点赞还是取消点赞\n *\n * Like or dislike\n */\n like?: boolean;\n\n /**\n * 评论的状态\n *\n * Comment status\n */\n status?: 'approved' | 'waiting' | 'spam';\n\n /**\n * 评论指定状态\n *\n * Comment sticky status\n *\n * @description 0 means not sticky and 1 means sticky\n */\n sticky?: 0 | 1;\n}\nexport interface UpdateCommentOptions extends BaseAPIOptions {\n /**\n * 用户令牌\n *\n * User token\n */\n token: string;\n\n /**\n * 评论的 ID\n *\n * Comment ID\n */\n objectId: number | string;\n\n /**\n * 评论数据\n *\n * Comment data\n */\n comment?: UpdateWalineCommentData;\n}\n\nexport interface UpdateCommentResponse extends ErrorStatusResponse {\n /**\n * 更新后的评论数据\n *\n * Comment data rendered\n */\n data: WalineComment;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n comment,\n}: UpdateCommentOptions): Promise<UpdateCommentResponse> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(comment),\n })\n .then((resp) => <Promise<UpdateCommentResponse>>resp.json())\n .then((resp) => errorCheck(resp, 'Update comment'));\n","import type { BaseAPIOptions } from './utils';\n\nexport interface GetCommentCountOptions extends BaseAPIOptions {\n /**\n * 待获取评论数的 path\n *\n * Path of pages to be fetched\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetCommentCountOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => <Promise<number | number[]>>resp.json())\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport type { BaseAPIOptions } from './utils';\n\nexport interface UserInfo {\n /**\n * 显示姓名\n *\n * User name displayed\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n\n /**\n * 用户电子邮件地址\n *\n * User email\n */\n email: string;\n\n /**\n * 用户网站地址\n *\n * User website\n */\n url: string;\n\n /**\n * 用户令牌\n *\n * User token\n */\n token: string;\n\n /**\n * 用户头像\n *\n * User avatar\n */\n avatar: string;\n\n /**\n * 用户邮箱 MD5\n *\n * MD5 of User email\n */\n mailMd5: string;\n\n /**\n * 用户对象 ID\n *\n * User object ID\n */\n objectId: string | number;\n\n /**\n * 用户身份\n *\n * User role\n */\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: BaseAPIOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n","import { getArticleCounter, updateArticleCounter } from './articleCounter';\nimport type { BaseAPIOptions } from './utils';\n\ninterface GetPageviewOptions extends BaseAPIOptions {\n /**\n * 待获取页面的 path\n *\n * Path of pages\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const getPageview = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetPageviewOptions): Promise<number[]> =>\n getArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions extends BaseAPIOptions {\n /**\n * 待更新页面的 path\n *\n * Path of pages\n */\n path: string;\n}\n\nexport const updatePageview = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n action: 'inc',\n });\n","import type { BaseAPIOptions } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface GetRecentCommentOptions extends BaseAPIOptions {\n /**\n * 获取评论的数量\n *\n * Comment number to be fetched\n */\n count: number;\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n\n /**\n * 用户令牌\n *\n * User token\n */\n token?: string;\n}\n\nexport const getRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: GetRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n }).then((resp) => <Promise<WalineComment[]>>resp.json());\n};\n","import { errorCheck, ErrorStatusResponse } from './utils';\nimport type { BaseAPIOptions } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface GetUserListOptions extends BaseAPIOptions {\n /**\n * 每页个数\n *\n * Number per page\n */\n pageSize: number;\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport interface WalineUser\n extends Pick<WalineComment, 'nick' | 'link' | 'avatar' | 'label' | 'level'> {\n count: number;\n}\n\nexport interface GetUserListResponse extends ErrorStatusResponse {\n data: WalineUser[];\n}\n\nexport const getUserList = ({\n serverURL,\n signal,\n pageSize,\n lang,\n}: GetUserListOptions): Promise<WalineUser[]> =>\n fetch(`${serverURL}/user?pageSize=${pageSize}&lang=${lang}`, {\n signal,\n })\n .then((resp) => <Promise<GetUserListResponse>>resp.json())\n .then((resp) => errorCheck(resp, 'user list'))\n .then((resp) => resp.data);\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","getArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","getComment","page","pageSize","sortBy","token","Authorization","addComment","comment","deleteComment","objectId","updateComment","fetchCommentCount","counts","Array","isArray","login","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","getPageview","updatePageview","options","getRecentComment","count","getUserList"],"mappings":"AAgCO,MAAMA,EAAuC,CAElD,eAAgB,oBAGLC,EAAa,CACxBC,EACAC,EAAO,MAEP,GAAoB,iBAATD,GAAqBA,EAAKE,MACnC,MAAM,IAAIC,UAAU,GAAGF,iBAAoBD,EAAKE,UAAUF,EAAKI,UAEjE,OAAOJ,CAAI,ECZAK,EAAoB,EAC/BC,YACAC,OACAC,QACAC,OACAC,YAEAC,MACE,GAAGL,kBAA0BM,mBAC3BJ,EAAMK,KAAK,cACHD,mBAAmBH,EAAKI,KAAK,cAAcN,IACrD,CAAEG,WACFI,MAAMC,GAA6CA,EAAKC,SA2B/CC,EAAuB,EAClCX,YACAC,OACAW,OACAT,OACAU,YAEAR,MAAM,GAAGL,kBAA0BC,IAAQ,CACzCa,OAAQ,OACRC,QAASvB,EACTwB,KAAMC,KAAKC,UAAU,CAAEN,OAAMT,OAAMU,aAClCL,MAAMC,GAA0BA,EAAKC,SCG7BS,EAAa,EACxBnB,YACAC,OACAW,OACAQ,OACAC,WACAC,SACAlB,SACAmB,YAEA,MAAMR,EAAkC,CAAA,EAIxC,OAFIQ,IAAOR,EAAQS,cAAgB,UAAUD,KAEtClB,MACL,GAAGL,kBAA0BM,mBAC3BM,eACYS,UAAiBD,UAAanB,YAAeqB,IAC3D,CAAElB,SAAQW,YAETP,MAAMC,GAAsCA,EAAKC,SACjDF,MAAMd,GAASD,EAAWC,EAAM,qBAAoB,EA4B5C+B,EAAa,EACxBzB,YACAC,OACAsB,QACAG,cAEA,MAAMX,EAAkC,CAEtC,eAAgB,oBAKlB,OAFIQ,IAAOR,EAAQS,cAAgB,UAAUD,KAEtClB,MAAM,GAAGL,kBAA0BC,IAAQ,CAChDa,OAAQ,OACRC,UACAC,KAAMC,KAAKC,UAAUQ,KACpBlB,MAAMC,GAAsCA,EAAKC,QAAO,EAYhDiB,EAAgB,EAC3B3B,YACAC,OACAsB,QACAK,cAEAvB,MAAM,GAAGL,aAAqB4B,UAAiB3B,IAAQ,CACrDa,OAAQ,SACRC,QAAS,CACPS,cAAe,UAAUD,OAG1Bf,MAAMC,GAAyCA,EAAKC,SACpDF,MAAMC,GAAShB,EAAWgB,EAAM,oBA0DxBoB,EAAgB,EAC3B7B,YACAC,OACAsB,QACAK,WACAF,aAEArB,MAAM,GAAGL,aAAqB4B,UAAiB3B,IAAQ,CACrDa,OAAQ,MACRC,QAAS,IACJvB,EACHgC,cAAe,UAAUD,KAE3BP,KAAMC,KAAKC,UAAUQ,KAEpBlB,MAAMC,GAAyCA,EAAKC,SACpDF,MAAMC,GAAShB,EAAWgB,EAAM,oBCxOxBqB,EAAoB,EAC/B9B,YACAC,OACAC,QACAE,YAEAC,MACE,GAAGL,4BAAoCM,mBACrCJ,EAAMK,KAAK,cACHN,IACV,CAAEG,WAEDI,MAAMC,GAAqCA,EAAKC,SAEhDF,MAAMuB,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KC8B5CG,EAAQ,EACnBjC,OACAD,gBAEA,MAEMmC,GAAQC,OAAOC,WAFP,KAE6B,EACrCC,GAAOF,OAAOG,YAFL,KAE6B,EAEtCC,EAAUJ,OAAOK,KACrB,GAAGzC,kBAA0BM,mBAAmBL,KAChD,SACA,6BAAwCkC,SAAYG,4EAKtD,OAFAE,GAASE,YAAY,CAAEvC,KAAM,QAAST,KAAM,MAAQ,KAE7C,IAAIiD,SAASC,IAElB,MAAMC,EAAW,EAAGnD,WACbA,GAAwB,iBAATA,GAAmC,aAAdA,EAAKS,MAE1CT,EAAKA,KAAK6B,QACZiB,GAASM,QAETV,OAAOW,oBAAoB,UAAWF,GAEtCD,EAAQlD,EAAKA,MACd,EAGH0C,OAAOY,iBAAiB,UAAWH,EAAS,GAC5C,EC3ESI,EAAc,EACzBjD,YACAC,OACAC,QACAE,YAEAL,EAAkB,CAChBC,YACAC,OACAC,QACAC,KAAM,CAAC,QACPC,WAGCI,MAAMuB,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KAa5CmB,EACXC,GAEAxC,EAAqB,IAChBwC,EACHhD,KAAM,OACNU,OAAQ,QC1BCuC,EAAmB,EAC9BpD,YACAC,OACAoD,QACAjD,SACAmB,YAEA,MAAMR,EAAkC,CAAA,EAIxC,OAFIQ,IAAOR,EAAQS,cAAgB,UAAUD,KAEtClB,MAAM,GAAGL,+BAAuCqD,UAAcpD,IAAQ,CAC3EG,SACAW,YACCP,MAAMC,GAAmCA,EAAKC,QAAO,ECX7C4C,EAAc,EACzBtD,YACAI,SACAiB,WACApB,UAEAI,MAAM,GAAGL,mBAA2BqB,UAAiBpB,IAAQ,CAC3DG,WAECI,MAAMC,GAAuCA,EAAKC,SAClDF,MAAMC,GAAShB,EAAWgB,EAAM,eAChCD,MAAMC,GAASA,EAAKf"}
|
package/dist/comment.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const t=t=>{const e=((t="")=>t.replace(/\/$/u,""))(t);return/^(https?:)?\/\//.test(e)?e:`https://${e}`},e=t=>{"AbortError"!==t.name&&console.error(t.message)};exports.commentCount=({serverURL:n,path:r=window.location.pathname,selector:o=".waline-comment-count",lang:a=navigator.language})=>{const s=new AbortController,c=document.querySelectorAll(o);return c.length&&(({serverURL:t,lang:e,paths:n,signal:r})=>fetch(`${t}/comment?type=count&url=${encodeURIComponent(n.join(","))}&lang=${e}`,{signal:r}).then((t=>t.json())).then((t=>Array.isArray(t)?t:[t])))({serverURL:t(n),paths:Array.from(c).map((t=>(t=>{try{t=decodeURI(t)}catch(t){}return t})(t.dataset.path||t.getAttribute("id")||r))),lang:a,signal:s.signal}).then((t=>{c.forEach(((e,n)=>{e.innerText=t[n].toString()}))})).catch(e),s.abort.bind(s)},exports.version="2.14.
|
|
1
|
+
"use strict";const t=t=>{const e=((t="")=>t.replace(/\/$/u,""))(t);return/^(https?:)?\/\//.test(e)?e:`https://${e}`},e=t=>{"AbortError"!==t.name&&console.error(t.message)};exports.commentCount=({serverURL:n,path:r=window.location.pathname,selector:o=".waline-comment-count",lang:a=navigator.language})=>{const s=new AbortController,c=document.querySelectorAll(o);return c.length&&(({serverURL:t,lang:e,paths:n,signal:r})=>fetch(`${t}/comment?type=count&url=${encodeURIComponent(n.join(","))}&lang=${e}`,{signal:r}).then((t=>t.json())).then((t=>Array.isArray(t)?t:[t])))({serverURL:t(n),paths:Array.from(c).map((t=>(t=>{try{t=decodeURI(t)}catch(t){}return t})(t.dataset.path||t.getAttribute("id")||r))),lang:a,signal:s.signal}).then((t=>{c.forEach(((e,n)=>{e.innerText=t[n].toString()}))})).catch(e),s.abort.bind(s)},exports.version="2.14.6";
|
|
2
2
|
//# sourceMappingURL=comment.cjs.map
|
package/dist/comment.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"comment.cjs","sources":["../src/api/commentCount.ts","../src/utils/config.ts","../src/utils/path.ts","../src/utils/error.ts","../src/comment.ts","../src/version.ts"],"sourcesContent":["import type { BaseAPIOptions } from './utils';\n\nexport interface GetCommentCountOptions extends BaseAPIOptions {\n /**\n * 待获取评论数的 path\n *\n * Path of pages to be fetched\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetCommentCountOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => <Promise<number | number[]>>resp.json())\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n","import {\n defaultEmoji,\n defaultLang,\n defaultLocales,\n defaultReaction,\n defaultUploadImage,\n defaultHighlighter,\n defaultTexRenderer,\n getDefaultSearchOptions,\n getMeta,\n} from '../config';\n\nimport { decodePath, isLinkHttp, removeEndingSplash } from './path';\n\nimport type {\n WalineEmojiInfo,\n WalineEmojiMaps,\n WalineLocale,\n WalineProps,\n} from '../typings';\n\nexport interface WalineEmojiConfig {\n tabs: Pick<WalineEmojiInfo, 'name' | 'icon' | 'items'>[];\n map: WalineEmojiMaps;\n}\n\nexport interface WalineConfig\n extends Required<\n Omit<\n WalineProps,\n | 'emoji'\n | 'imageUploader'\n | 'highlighter'\n | 'texRenderer'\n | 'wordLimit'\n | 'reaction'\n | 'search'\n >\n > {\n locale: WalineLocale;\n wordLimit: [number, number] | false;\n reaction: string[];\n emoji: Exclude<WalineProps['emoji'], boolean | undefined>;\n highlighter: Exclude<WalineProps['highlighter'], true | undefined>;\n imageUploader: Exclude<WalineProps['imageUploader'], true | undefined>;\n texRenderer: Exclude<WalineProps['texRenderer'], true | undefined>;\n search: Exclude<WalineProps['search'], true | undefined>;\n}\n\nexport const getServerURL = (serverURL: string): string => {\n const result = removeEndingSplash(serverURL);\n\n return isLinkHttp(result) ? result : `https://${result}`;\n};\n\nconst getWordLimit = (\n wordLimit: WalineProps['wordLimit']\n): [number, number] | false =>\n Array.isArray(wordLimit) ? wordLimit : wordLimit ? [0, wordLimit] : false;\n\nconst fallback = <T = unknown>(\n value: T | boolean | undefined,\n fallback: T\n): T | false =>\n typeof value === 'function' ? value : value === false ? false : fallback;\n\nexport const getConfig = ({\n serverURL,\n\n path = location.pathname,\n lang = typeof navigator === 'undefined' ? 'en-US' : navigator.language,\n locale,\n emoji = defaultEmoji,\n meta = ['nick', 'mail', 'link'],\n requiredMeta = [],\n dark = false,\n pageSize = 10,\n wordLimit,\n imageUploader,\n highlighter,\n texRenderer,\n copyright = true,\n login = 'enable',\n search,\n reaction,\n recaptchaV3Key = '',\n commentSorting = 'latest',\n ...more\n}: WalineProps): WalineConfig => ({\n serverURL: getServerURL(serverURL),\n path: decodePath(path),\n locale: {\n ...(defaultLocales[lang] || defaultLocales[defaultLang]),\n ...(typeof locale === 'object' ? locale : {}),\n } as WalineLocale,\n wordLimit: getWordLimit(wordLimit),\n meta: getMeta(meta),\n requiredMeta: getMeta(requiredMeta),\n imageUploader: fallback(imageUploader, defaultUploadImage),\n highlighter: fallback(highlighter, defaultHighlighter),\n texRenderer: fallback(texRenderer, defaultTexRenderer),\n lang: Object.keys(defaultLocales).includes(lang) ? lang : 'en-US',\n dark,\n emoji: typeof emoji === 'boolean' ? (emoji ? defaultEmoji : []) : emoji,\n pageSize,\n login,\n copyright,\n search:\n search === false\n ? false\n : typeof search === 'object'\n ? search\n : getDefaultSearchOptions(lang),\n recaptchaV3Key,\n reaction: Array.isArray(reaction)\n ? reaction\n : reaction === true\n ? defaultReaction\n : [],\n commentSorting,\n ...more,\n});\n","export const decodePath = (path: string): string => {\n try {\n path = decodeURI(path);\n } catch (err) {\n // ignore error\n }\n\n return path;\n};\n\nexport const removeEndingSplash = (content = ''): string =>\n content.replace(/\\/$/u, '');\n\nexport const isLinkHttp = (link: string): boolean =>\n /^(https?:)?\\/\\//.test(link);\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import { fetchCommentCount } from './api';\nimport { decodePath, errorHandler, getServerURL } from './utils';\nimport type { WalineAbort } from './typings';\n\nexport interface WalineCommentCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 评论数 CSS 选择器\n *\n * Comment count CSS selector\n *\n * @default '.waline-comment-count'\n */\n selector?: string;\n\n /**\n * 需要获取的默认路径\n *\n * Path to be fetched by default\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 错误提示消息所使用的语言\n *\n * Language of error message\n *\n * @default navigator.language\n */\n lang?: string;\n}\n\nexport const commentCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-comment-count',\n lang = navigator.language,\n}: WalineCommentCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n // comment count\n const elements = document.querySelectorAll<HTMLElement>(selector);\n\n if (elements.length)\n void fetchCommentCount({\n serverURL: getServerURL(serverURL),\n paths: Array.from(elements).map((element) =>\n decodePath(element.dataset.path || element.getAttribute('id') || path)\n ),\n lang,\n signal: controller.signal,\n })\n .then((counts) => {\n elements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n })\n .catch(errorHandler);\n\n return controller.abort.bind(controller);\n};\n","declare const VERSION: string;\n\nexport const version = VERSION;\n"],"names":["getServerURL","serverURL","result","content","replace","removeEndingSplash","test","errorHandler","err","name","console","error","message","path","window","location","pathname","selector","lang","navigator","language","controller","AbortController","elements","document","querySelectorAll","length","paths","signal","fetch","encodeURIComponent","join","then","resp","json","counts","Array","isArray","fetchCommentCount","from","map","element","decodeURI","decodePath","dataset","getAttribute","forEach","index","innerText","toString","catch","abort","bind"],"mappings":"aAkBO,MC+BMA,EAAgBC,IAC3B,MAAMC,ECxC0B,EAACC,EAAU,KAC3CA,EAAQC,QAAQ,OAAQ,IDuCTC,CAAmBJ,GAElC,MCtCA,kBAAkBK,KDsCAJ,GAAUA,EAAS,WAAWA,GAAQ,EEpD7CK,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,QAAQ,uBCuC/B,EAC1BX,YACAY,OAAOC,OAAOC,SAASC,SACvBC,WAAW,wBACXC,OAAOC,UAAUC,aAEjB,MAAMC,EAAa,IAAIC,gBAGjBC,EAAWC,SAASC,iBAA8BR,GAkBxD,OAhBIM,EAASG,QJjCkB,GAC/BzB,YACAiB,OACAS,QACAC,YAEAC,MACE,GAAG5B,4BAAoC6B,mBACrCH,EAAMI,KAAK,cACHb,IACV,CAAEU,WAEDI,MAAMC,GAAqCA,EAAKC,SAEhDF,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KIoBhDG,CAAkB,CACrBrC,UAAWD,EAAaC,GACxB0B,MAAOS,MAAMG,KAAKhB,GAAUiB,KAAKC,GFtDb,CAAC5B,IACzB,IACEA,EAAO6B,UAAU7B,EAGlB,CAFC,MAAOL,GAER,CAED,OAAOK,CAAI,EEgDL8B,CAAWF,EAAQG,QAAQ/B,MAAQ4B,EAAQI,aAAa,OAAShC,KAEnEK,OACAU,OAAQP,EAAWO,SAElBI,MAAMG,IACLZ,EAASuB,SAAQ,CAACL,EAASM,KACzBN,EAAQO,UAAYb,EAAOY,GAAOE,UAAU,GAC5C,IAEHC,MAAM3C,GAEJc,EAAW8B,MAAMC,KAAK/B,EAAW,kBCjEnB"}
|
package/dist/comment.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.commentCount=void 0;const t=e=>{const t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.replace(/\/$/u,"")}(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},n=e=>{"AbortError"!==e.name&&console.error(e.message)};e.version="2.14.
|
|
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.commentCount=void 0;const t=e=>{const t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.replace(/\/$/u,"")}(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},n=e=>{"AbortError"!==e.name&&console.error(e.message)};e.version="2.14.6",e.commentCount=e=>{let{serverURL:o,path:r=window.location.pathname,selector:a=".waline-comment-count",lang:s=navigator.language}=e;const i=new AbortController,l=document.querySelectorAll(a);return l.length&&(e=>{let{serverURL:t,lang:n,paths:o,signal:r}=e;return fetch(`${t}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${n}`,{signal:r}).then((e=>e.json())).then((e=>Array.isArray(e)?e:[e]))})({serverURL:t(o),paths:Array.from(l).map((e=>(e=>{try{e=decodeURI(e)}catch(e){}return e})(e.dataset.path||e.getAttribute("id")||r))),lang:s,signal:i.signal}).then((e=>{l.forEach(((t,n)=>{t.innerText=e[n].toString()}))})).catch(n),i.abort.bind(i)}}));
|
|
2
2
|
//# sourceMappingURL=comment.js.map
|
package/dist/comment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"comment.js","sources":["../src/api/commentCount.ts","../src/utils/config.ts","../src/utils/path.ts","../src/utils/error.ts","../src/version.ts","../src/comment.ts"],"sourcesContent":["import type { BaseAPIOptions } from './utils';\n\nexport interface GetCommentCountOptions extends BaseAPIOptions {\n /**\n * 待获取评论数的 path\n *\n * Path of pages to be fetched\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetCommentCountOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => <Promise<number | number[]>>resp.json())\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n","import {\n defaultEmoji,\n defaultLang,\n defaultLocales,\n defaultReaction,\n defaultUploadImage,\n defaultHighlighter,\n defaultTexRenderer,\n getDefaultSearchOptions,\n getMeta,\n} from '../config';\n\nimport { decodePath, isLinkHttp, removeEndingSplash } from './path';\n\nimport type {\n WalineEmojiInfo,\n WalineEmojiMaps,\n WalineLocale,\n WalineProps,\n} from '../typings';\n\nexport interface WalineEmojiConfig {\n tabs: Pick<WalineEmojiInfo, 'name' | 'icon' | 'items'>[];\n map: WalineEmojiMaps;\n}\n\nexport interface WalineConfig\n extends Required<\n Omit<\n WalineProps,\n | 'emoji'\n | 'imageUploader'\n | 'highlighter'\n | 'texRenderer'\n | 'wordLimit'\n | 'reaction'\n | 'search'\n >\n > {\n locale: WalineLocale;\n wordLimit: [number, number] | false;\n reaction: string[];\n emoji: Exclude<WalineProps['emoji'], boolean | undefined>;\n highlighter: Exclude<WalineProps['highlighter'], true | undefined>;\n imageUploader: Exclude<WalineProps['imageUploader'], true | undefined>;\n texRenderer: Exclude<WalineProps['texRenderer'], true | undefined>;\n search: Exclude<WalineProps['search'], true | undefined>;\n}\n\nexport const getServerURL = (serverURL: string): string => {\n const result = removeEndingSplash(serverURL);\n\n return isLinkHttp(result) ? result : `https://${result}`;\n};\n\nconst getWordLimit = (\n wordLimit: WalineProps['wordLimit']\n): [number, number] | false =>\n Array.isArray(wordLimit) ? wordLimit : wordLimit ? [0, wordLimit] : false;\n\nconst fallback = <T = unknown>(\n value: T | boolean | undefined,\n fallback: T\n): T | false =>\n typeof value === 'function' ? value : value === false ? false : fallback;\n\nexport const getConfig = ({\n serverURL,\n\n path = location.pathname,\n lang = typeof navigator === 'undefined' ? 'en-US' : navigator.language,\n locale,\n emoji = defaultEmoji,\n meta = ['nick', 'mail', 'link'],\n requiredMeta = [],\n dark = false,\n pageSize = 10,\n wordLimit,\n imageUploader,\n highlighter,\n texRenderer,\n copyright = true,\n login = 'enable',\n search,\n reaction,\n recaptchaV3Key = '',\n commentSorting = 'latest',\n ...more\n}: WalineProps): WalineConfig => ({\n serverURL: getServerURL(serverURL),\n path: decodePath(path),\n locale: {\n ...(defaultLocales[lang] || defaultLocales[defaultLang]),\n ...(typeof locale === 'object' ? locale : {}),\n } as WalineLocale,\n wordLimit: getWordLimit(wordLimit),\n meta: getMeta(meta),\n requiredMeta: getMeta(requiredMeta),\n imageUploader: fallback(imageUploader, defaultUploadImage),\n highlighter: fallback(highlighter, defaultHighlighter),\n texRenderer: fallback(texRenderer, defaultTexRenderer),\n lang: Object.keys(defaultLocales).includes(lang) ? lang : 'en-US',\n dark,\n emoji: typeof emoji === 'boolean' ? (emoji ? defaultEmoji : []) : emoji,\n pageSize,\n login,\n copyright,\n search:\n search === false\n ? false\n : typeof search === 'object'\n ? search\n : getDefaultSearchOptions(lang),\n recaptchaV3Key,\n reaction: Array.isArray(reaction)\n ? reaction\n : reaction === true\n ? defaultReaction\n : [],\n commentSorting,\n ...more,\n});\n","export const decodePath = (path: string): string => {\n try {\n path = decodeURI(path);\n } catch (err) {\n // ignore error\n }\n\n return path;\n};\n\nexport const removeEndingSplash = (content = ''): string =>\n content.replace(/\\/$/u, '');\n\nexport const isLinkHttp = (link: string): boolean =>\n /^(https?:)?\\/\\//.test(link);\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","declare const VERSION: string;\n\nexport const version = VERSION;\n","import { fetchCommentCount } from './api';\nimport { decodePath, errorHandler, getServerURL } from './utils';\nimport type { WalineAbort } from './typings';\n\nexport interface WalineCommentCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 评论数 CSS 选择器\n *\n * Comment count CSS selector\n *\n * @default '.waline-comment-count'\n */\n selector?: string;\n\n /**\n * 需要获取的默认路径\n *\n * Path to be fetched by default\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 错误提示消息所使用的语言\n *\n * Language of error message\n *\n * @default navigator.language\n */\n lang?: string;\n}\n\nexport const commentCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-comment-count',\n lang = navigator.language,\n}: WalineCommentCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n // comment count\n const elements = document.querySelectorAll<HTMLElement>(selector);\n\n if (elements.length)\n void fetchCommentCount({\n serverURL: getServerURL(serverURL),\n paths: Array.from(elements).map((element) =>\n decodePath(element.dataset.path || element.getAttribute('id') || path)\n ),\n lang,\n signal: controller.signal,\n })\n .then((counts) => {\n elements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n })\n .catch(errorHandler);\n\n return controller.abort.bind(controller);\n};\n"],"names":["getServerURL","serverURL","result","content","replace","test","errorHandler","err","name","console","error","message","_ref","language","path","window","location","pathname","selector","a","lang","navigator","controller","AbortController","elements","document","querySelectorAll","length","paths","signal","fetch","encodeURIComponent","join","then","resp","json","counts","Array","isArray","from","map","element","decodeURI","decodePath","dataset","getAttribute","forEach","index","innerText","toString","catch","abort","bind"],"mappings":"2WAkBO,MC+BMA,EAAgBC,IAC3B,MAAMC,iBCxC2BC,yDAAU,GAAA,OAC3CA,EAAQC,QAAQ,OAAQ,GAAA,EDuCUH,GAElC,MCtCA,kBAAkBI,KDsCAH,GAAUA,EAAoBA,WAAAA,GAAQ,EEpD7CI,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,QAAQ,YCCpC,wBCsCKC,IAITC,IAHjBZ,UAAAA,EACAa,KAAOC,EAAAA,OAAOC,SAASC,SACvBC,SAAWC,EAAA,wBACXC,OAAOC,UAAUR,UAAAA,EAEjB,MAAMS,EAAa,IAAIC,gBAGjBC,EAAWC,SAASC,iBAA8BR,GAkBxD,OAhBIM,EAASG,QLjCkB,CAC/B1B,IAAAA,IAAAA,UAAAA,EACAmB,KACAQ,EAAAA,MAAAA,EACAC,mBAEAC,MACE,GAAG7B,4BAAoC8B,mBACrCH,EAAMI,KAAK,cACHZ,IACV,CAAES,OAEDI,IAAAA,MAAMC,GAAqCA,EAAKC,SAEhDF,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,IKoB9B,ELlCM,CKkCN,CACrBnC,UAAWD,EAAaC,GACxB2B,MAAOS,MAAME,KAAKf,GAAUgB,KAAKC,GHtDb,CAAC3B,IACzB,IACEA,EAAO4B,UAAU5B,EAGlB,CAFC,MAAOP,GAER,CAED,OAAOO,CGgDD6B,EHvDkB,CGuDPF,EAAQG,QAAQ9B,MAAQ2B,EAAQI,aAAa,OAAS/B,KAEnEM,KACAS,EAAAA,OAAQP,EAAWO,SAElBI,MAAMG,IACLZ,EAASsB,SAAQ,CAACL,EAASM,KACzBN,EAAQO,UAAYZ,EAAOW,GAAOE,UAAU,GAC5C,IAEHC,MAAM5C,GAEJgB,EAAW6B,MAAMC,KAAK9B,EAAW"}
|
package/dist/comment.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const t=t=>{const e=((t="")=>t.replace(/\/$/u,""))(t);return/^(https?:)?\/\//.test(e)?e:`https://${e}`},e=t=>{"AbortError"!==t.name&&console.error(t.message)},n=({serverURL:n,path:r=window.location.pathname,selector:a=".waline-comment-count",lang:o=navigator.language})=>{const s=new AbortController,c=document.querySelectorAll(a);return c.length&&(({serverURL:t,lang:e,paths:n,signal:r})=>fetch(`${t}/comment?type=count&url=${encodeURIComponent(n.join(","))}&lang=${e}`,{signal:r}).then((t=>t.json())).then((t=>Array.isArray(t)?t:[t])))({serverURL:t(n),paths:Array.from(c).map((t=>(t=>{try{t=decodeURI(t)}catch(t){}return t})(t.dataset.path||t.getAttribute("id")||r))),lang:o,signal:s.signal}).then((t=>{c.forEach(((e,n)=>{e.innerText=t[n].toString()}))})).catch(e),s.abort.bind(s)},r="2.14.
|
|
1
|
+
const t=t=>{const e=((t="")=>t.replace(/\/$/u,""))(t);return/^(https?:)?\/\//.test(e)?e:`https://${e}`},e=t=>{"AbortError"!==t.name&&console.error(t.message)},n=({serverURL:n,path:r=window.location.pathname,selector:a=".waline-comment-count",lang:o=navigator.language})=>{const s=new AbortController,c=document.querySelectorAll(a);return c.length&&(({serverURL:t,lang:e,paths:n,signal:r})=>fetch(`${t}/comment?type=count&url=${encodeURIComponent(n.join(","))}&lang=${e}`,{signal:r}).then((t=>t.json())).then((t=>Array.isArray(t)?t:[t])))({serverURL:t(n),paths:Array.from(c).map((t=>(t=>{try{t=decodeURI(t)}catch(t){}return t})(t.dataset.path||t.getAttribute("id")||r))),lang:o,signal:s.signal}).then((t=>{c.forEach(((e,n)=>{e.innerText=t[n].toString()}))})).catch(e),s.abort.bind(s)},r="2.14.6";export{n as commentCount,r as version};
|
|
2
2
|
//# sourceMappingURL=comment.mjs.map
|
package/dist/comment.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"comment.mjs","sources":["../src/api/commentCount.ts","../src/utils/config.ts","../src/utils/path.ts","../src/utils/error.ts","../src/comment.ts","../src/version.ts"],"sourcesContent":["import type { BaseAPIOptions } from './utils';\n\nexport interface GetCommentCountOptions extends BaseAPIOptions {\n /**\n * 待获取评论数的 path\n *\n * Path of pages to be fetched\n */\n paths: string[];\n\n /**\n * 取消请求的信号\n *\n * AbortSignal to cancel request\n */\n signal?: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: GetCommentCountOptions): Promise<number[]> =>\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal }\n )\n .then((resp) => <Promise<number | number[]>>resp.json())\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]));\n","import {\n defaultEmoji,\n defaultLang,\n defaultLocales,\n defaultReaction,\n defaultUploadImage,\n defaultHighlighter,\n defaultTexRenderer,\n getDefaultSearchOptions,\n getMeta,\n} from '../config';\n\nimport { decodePath, isLinkHttp, removeEndingSplash } from './path';\n\nimport type {\n WalineEmojiInfo,\n WalineEmojiMaps,\n WalineLocale,\n WalineProps,\n} from '../typings';\n\nexport interface WalineEmojiConfig {\n tabs: Pick<WalineEmojiInfo, 'name' | 'icon' | 'items'>[];\n map: WalineEmojiMaps;\n}\n\nexport interface WalineConfig\n extends Required<\n Omit<\n WalineProps,\n | 'emoji'\n | 'imageUploader'\n | 'highlighter'\n | 'texRenderer'\n | 'wordLimit'\n | 'reaction'\n | 'search'\n >\n > {\n locale: WalineLocale;\n wordLimit: [number, number] | false;\n reaction: string[];\n emoji: Exclude<WalineProps['emoji'], boolean | undefined>;\n highlighter: Exclude<WalineProps['highlighter'], true | undefined>;\n imageUploader: Exclude<WalineProps['imageUploader'], true | undefined>;\n texRenderer: Exclude<WalineProps['texRenderer'], true | undefined>;\n search: Exclude<WalineProps['search'], true | undefined>;\n}\n\nexport const getServerURL = (serverURL: string): string => {\n const result = removeEndingSplash(serverURL);\n\n return isLinkHttp(result) ? result : `https://${result}`;\n};\n\nconst getWordLimit = (\n wordLimit: WalineProps['wordLimit']\n): [number, number] | false =>\n Array.isArray(wordLimit) ? wordLimit : wordLimit ? [0, wordLimit] : false;\n\nconst fallback = <T = unknown>(\n value: T | boolean | undefined,\n fallback: T\n): T | false =>\n typeof value === 'function' ? value : value === false ? false : fallback;\n\nexport const getConfig = ({\n serverURL,\n\n path = location.pathname,\n lang = typeof navigator === 'undefined' ? 'en-US' : navigator.language,\n locale,\n emoji = defaultEmoji,\n meta = ['nick', 'mail', 'link'],\n requiredMeta = [],\n dark = false,\n pageSize = 10,\n wordLimit,\n imageUploader,\n highlighter,\n texRenderer,\n copyright = true,\n login = 'enable',\n search,\n reaction,\n recaptchaV3Key = '',\n commentSorting = 'latest',\n ...more\n}: WalineProps): WalineConfig => ({\n serverURL: getServerURL(serverURL),\n path: decodePath(path),\n locale: {\n ...(defaultLocales[lang] || defaultLocales[defaultLang]),\n ...(typeof locale === 'object' ? locale : {}),\n } as WalineLocale,\n wordLimit: getWordLimit(wordLimit),\n meta: getMeta(meta),\n requiredMeta: getMeta(requiredMeta),\n imageUploader: fallback(imageUploader, defaultUploadImage),\n highlighter: fallback(highlighter, defaultHighlighter),\n texRenderer: fallback(texRenderer, defaultTexRenderer),\n lang: Object.keys(defaultLocales).includes(lang) ? lang : 'en-US',\n dark,\n emoji: typeof emoji === 'boolean' ? (emoji ? defaultEmoji : []) : emoji,\n pageSize,\n login,\n copyright,\n search:\n search === false\n ? false\n : typeof search === 'object'\n ? search\n : getDefaultSearchOptions(lang),\n recaptchaV3Key,\n reaction: Array.isArray(reaction)\n ? reaction\n : reaction === true\n ? defaultReaction\n : [],\n commentSorting,\n ...more,\n});\n","export const decodePath = (path: string): string => {\n try {\n path = decodeURI(path);\n } catch (err) {\n // ignore error\n }\n\n return path;\n};\n\nexport const removeEndingSplash = (content = ''): string =>\n content.replace(/\\/$/u, '');\n\nexport const isLinkHttp = (link: string): boolean =>\n /^(https?:)?\\/\\//.test(link);\n","export const errorHandler = (err: Error): void => {\n if (err.name !== 'AbortError') console.error(err.message);\n};\n","import { fetchCommentCount } from './api';\nimport { decodePath, errorHandler, getServerURL } from './utils';\nimport type { WalineAbort } from './typings';\n\nexport interface WalineCommentCountOptions {\n /**\n * Waline 服务端地址\n *\n * Waline server url\n */\n serverURL: string;\n\n /**\n * 评论数 CSS 选择器\n *\n * Comment count CSS selector\n *\n * @default '.waline-comment-count'\n */\n selector?: string;\n\n /**\n * 需要获取的默认路径\n *\n * Path to be fetched by default\n *\n * @default window.location.pathname\n */\n path?: string;\n\n /**\n * 错误提示消息所使用的语言\n *\n * Language of error message\n *\n * @default navigator.language\n */\n lang?: string;\n}\n\nexport const commentCount = ({\n serverURL,\n path = window.location.pathname,\n selector = '.waline-comment-count',\n lang = navigator.language,\n}: WalineCommentCountOptions): WalineAbort => {\n const controller = new AbortController();\n\n // comment count\n const elements = document.querySelectorAll<HTMLElement>(selector);\n\n if (elements.length)\n void fetchCommentCount({\n serverURL: getServerURL(serverURL),\n paths: Array.from(elements).map((element) =>\n decodePath(element.dataset.path || element.getAttribute('id') || path)\n ),\n lang,\n signal: controller.signal,\n })\n .then((counts) => {\n elements.forEach((element, index) => {\n element.innerText = counts[index].toString();\n });\n })\n .catch(errorHandler);\n\n return controller.abort.bind(controller);\n};\n","declare const VERSION: string;\n\nexport const version = VERSION;\n"],"names":["getServerURL","serverURL","result","content","replace","removeEndingSplash","test","errorHandler","err","name","console","error","message","commentCount","path","window","location","pathname","selector","lang","navigator","language","controller","AbortController","elements","document","querySelectorAll","length","paths","signal","fetch","encodeURIComponent","join","then","resp","json","counts","Array","isArray","fetchCommentCount","from","map","element","decodeURI","decodePath","dataset","getAttribute","forEach","index","innerText","toString","catch","abort","bind","version"],"mappings":"AAkBO,MC+BMA,EAAgBC,IAC3B,MAAMC,ECxC0B,EAACC,EAAU,KAC3CA,EAAQC,QAAQ,OAAQ,IDuCTC,CAAmBJ,GAElC,MCtCA,kBAAkBK,KDsCAJ,GAAUA,EAAS,WAAWA,GAAQ,EEpD7CK,EAAgBC,IACV,eAAbA,EAAIC,MAAuBC,QAAQC,MAAMH,EAAII,QAAQ,ECuC9CC,EAAe,EAC1BZ,YACAa,OAAOC,OAAOC,SAASC,SACvBC,WAAW,wBACXC,OAAOC,UAAUC,aAEjB,MAAMC,EAAa,IAAIC,gBAGjBC,EAAWC,SAASC,iBAA8BR,GAkBxD,OAhBIM,EAASG,QJjCkB,GAC/B1B,YACAkB,OACAS,QACAC,YAEAC,MACE,GAAG7B,4BAAoC8B,mBACrCH,EAAMI,KAAK,cACHb,IACV,CAAEU,WAEDI,MAAMC,GAAqCA,EAAKC,SAEhDF,MAAMG,GAAYC,MAAMC,QAAQF,GAAUA,EAAS,CAACA,KIoBhDG,CAAkB,CACrBtC,UAAWD,EAAaC,GACxB2B,MAAOS,MAAMG,KAAKhB,GAAUiB,KAAKC,GFtDb,CAAC5B,IACzB,IACEA,EAAO6B,UAAU7B,EAGlB,CAFC,MAAON,GAER,CAED,OAAOM,CAAI,EEgDL8B,CAAWF,EAAQG,QAAQ/B,MAAQ4B,EAAQI,aAAa,OAAShC,KAEnEK,OACAU,OAAQP,EAAWO,SAElBI,MAAMG,IACLZ,EAASuB,SAAQ,CAACL,EAASM,KACzBN,EAAQO,UAAYb,EAAOY,GAAOE,UAAU,GAC5C,IAEHC,MAAM5C,GAEJe,EAAW8B,MAAMC,KAAK/B,EAAW,ECjE7BgC,EAAU"}
|
package/dist/component.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{h as e,defineComponent as t,inject as n,ref as a,computed as l,onMounted as i,watch as o,onUnmounted as r,unref as s,openBlock as c,createElementBlock as u,createElementVNode as d,toDisplayString as m,Fragment as v,renderList as p,normalizeClass as h,createBlock as g,createCommentVNode as f,onBeforeUnmount as y,normalizeStyle as w,nextTick as b,reactive as k,createVNode as C,withDirectives as $,vModelDynamic as L,isRef as x,vModelText as I,vShow as R,createTextVNode as E,resolveComponent as j,provide as S}from"vue";import{useStorage as _,useDebounceFn as A,useNow as z,useStyleTag as U}from"@vueuse/core";import M from"autosize";import{marked as H}from"marked";const O=({size:t})=>e("svg",{class:"wl-close-icon",viewBox:"0 0 1024 1024",width:t,height:t},[e("path",{d:"M697.173 85.333h-369.92c-144.64 0-241.92 101.547-241.92 252.587v348.587c0 150.613 97.28 252.16 241.92 252.16h369.92c144.64 0 241.494-101.547 241.494-252.16V337.92c0-151.04-96.854-252.587-241.494-252.587z",fill:"currentColor"}),e("path",{d:"m640.683 587.52-75.947-75.861 75.904-75.862a37.29 37.29 0 0 0 0-52.778 37.205 37.205 0 0 0-52.779 0l-75.946 75.818-75.862-75.946a37.419 37.419 0 0 0-52.821 0 37.419 37.419 0 0 0 0 52.821l75.947 75.947-75.776 75.733a37.29 37.29 0 1 0 52.778 52.821l75.776-75.776 75.947 75.947a37.376 37.376 0 0 0 52.779-52.821z",fill:"#888"})]),P=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"m341.013 394.667 27.755 393.45h271.83l27.733-393.45h64.106l-28.01 397.952a64 64 0 0 1-63.83 59.498H368.768a64 64 0 0 1-63.83-59.52l-28.053-397.93h64.128zm139.307 19.818v298.667h-64V414.485h64zm117.013 0v298.667h-64V414.485h64zM181.333 288h640v64h-640v-64zm453.483-106.667v64h-256v-64h256z",fill:"red"})),V=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"M563.2 463.3 677 540c1.7 1.2 3.7 1.8 5.8 1.8.7 0 1.4-.1 2-.2 2.7-.5 5.1-2.1 6.6-4.4l25.3-37.8c1.5-2.3 2.1-5.1 1.6-7.8s-2.1-5.1-4.4-6.6l-73.6-49.1 73.6-49.1c2.3-1.5 3.9-3.9 4.4-6.6.5-2.7 0-5.5-1.6-7.8l-25.3-37.8a10.1 10.1 0 0 0-6.6-4.4c-.7-.1-1.3-.2-2-.2-2.1 0-4.1.6-5.8 1.8l-113.8 76.6c-9.2 6.2-14.7 16.4-14.7 27.5.1 11 5.5 21.3 14.7 27.4zM387 348.8h-45.5c-5.7 0-10.4 4.7-10.4 10.4v153.3c0 5.7 4.7 10.4 10.4 10.4H387c5.7 0 10.4-4.7 10.4-10.4V359.2c0-5.7-4.7-10.4-10.4-10.4zm333.8 241.3-41-20a10.3 10.3 0 0 0-8.1-.5c-2.6.9-4.8 2.9-5.9 5.4-30.1 64.9-93.1 109.1-164.4 115.2-5.7.5-9.9 5.5-9.5 11.2l3.9 45.5c.5 5.3 5 9.5 10.3 9.5h.9c94.8-8 178.5-66.5 218.6-152.7 2.4-5 .3-11.2-4.8-13.6zm186-186.1c-11.9-42-30.5-81.4-55.2-117.1-24.1-34.9-53.5-65.6-87.5-91.2-33.9-25.6-71.5-45.5-111.6-59.2-41.2-14-84.1-21.1-127.8-21.1h-1.2c-75.4 0-148.8 21.4-212.5 61.7-63.7 40.3-114.3 97.6-146.5 165.8-32.2 68.1-44.3 143.6-35.1 218.4 9.3 74.8 39.4 145 87.3 203.3.1.2.3.3.4.5l36.2 38.4c1.1 1.2 2.5 2.1 3.9 2.6 73.3 66.7 168.2 103.5 267.5 103.5 73.3 0 145.2-20.3 207.7-58.7 37.3-22.9 70.3-51.5 98.1-85 27.1-32.7 48.7-69.5 64.2-109.1 15.5-39.7 24.4-81.3 26.6-123.8 2.4-43.6-2.5-87-14.5-129zm-60.5 181.1c-8.3 37-22.8 72-43 104-19.7 31.1-44.3 58.6-73.1 81.7-28.8 23.1-61 41-95.7 53.4-35.6 12.7-72.9 19.1-110.9 19.1-82.6 0-161.7-30.6-222.8-86.2l-34.1-35.8c-23.9-29.3-42.4-62.2-55.1-97.7-12.4-34.7-18.8-71-19.2-107.9-.4-36.9 5.4-73.3 17.1-108.2 12-35.8 30-69.2 53.4-99.1 31.7-40.4 71.1-72 117.2-94.1 44.5-21.3 94-32.6 143.4-32.6 49.3 0 97 10.8 141.8 32 34.3 16.3 65.3 38.1 92 64.8 26.1 26 47.5 56 63.6 89.2 16.2 33.2 26.6 68.5 31 105.1 4.6 37.5 2.7 75.3-5.6 112.3z",fill:"currentColor"})),T=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},[e("path",{d:"M784 112H240c-88 0-160 72-160 160v480c0 88 72 160 160 160h544c88 0 160-72 160-160V272c0-88-72-160-160-160zm96 640c0 52.8-43.2 96-96 96H240c-52.8 0-96-43.2-96-96V272c0-52.8 43.2-96 96-96h544c52.8 0 96 43.2 96 96v480z",fill:"currentColor"}),e("path",{d:"M352 480c52.8 0 96-43.2 96-96s-43.2-96-96-96-96 43.2-96 96 43.2 96 96 96zm0-128c17.6 0 32 14.4 32 32s-14.4 32-32 32-32-14.4-32-32 14.4-32 32-32zm462.4 379.2-3.2-3.2-177.6-177.6c-25.6-25.6-65.6-25.6-91.2 0l-80 80-36.8-36.8c-25.6-25.6-65.6-25.6-91.2 0L200 728c-4.8 6.4-8 14.4-8 24 0 17.6 14.4 32 32 32 9.6 0 16-3.2 22.4-9.6L380.8 640l134.4 134.4c6.4 6.4 14.4 9.6 24 9.6 17.6 0 32-14.4 32-32 0-9.6-4.8-17.6-9.6-24l-52.8-52.8 80-80L769.6 776c6.4 4.8 12.8 8 20.8 8 17.6 0 32-14.4 32-32 0-8-3.2-16-8-20.8z",fill:"currentColor"})]),D=({active:t=!1})=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},[e("path",{d:"M850.654 323.804c-11.042-25.625-26.862-48.532-46.885-68.225-20.022-19.61-43.258-34.936-69.213-45.73-26.78-11.124-55.124-16.727-84.375-16.727-40.622 0-80.256 11.123-114.698 32.135A214.79 214.79 0 0 0 512 241.819a214.79 214.79 0 0 0-23.483-16.562c-34.442-21.012-74.076-32.135-114.698-32.135-29.25 0-57.595 5.603-84.375 16.727-25.872 10.711-49.19 26.12-69.213 45.73-20.105 19.693-35.843 42.6-46.885 68.225-11.453 26.615-17.303 54.877-17.303 83.963 0 27.439 5.603 56.03 16.727 85.117 9.31 24.307 22.659 49.52 39.715 74.981 27.027 40.293 64.188 82.316 110.33 124.915 76.465 70.615 152.189 119.394 155.402 121.371l19.528 12.525c8.652 5.52 19.776 5.52 28.427 0l19.529-12.525c3.213-2.06 78.854-50.756 155.401-121.371 46.143-42.6 83.304-84.622 110.33-124.915 17.057-25.46 30.487-50.674 39.716-74.981 11.124-29.087 16.727-57.678 16.727-85.117.082-29.086-5.768-57.348-17.221-83.963z"+(t?"":"M512 761.5S218.665 573.55 218.665 407.767c0-83.963 69.461-152.023 155.154-152.023 60.233 0 112.473 33.618 138.181 82.727 25.708-49.109 77.948-82.727 138.18-82.727 85.694 0 155.155 68.06 155.155 152.023C805.335 573.551 512 761.5 512 761.5z"),fill:t?"red":"currentColor"})]),N=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},[e("path",{d:"M710.816 654.301c70.323-96.639 61.084-230.578-23.705-314.843-46.098-46.098-107.183-71.109-172.28-71.109-65.008 0-126.092 25.444-172.28 71.109-45.227 46.098-70.756 107.183-70.756 172.106 0 64.923 25.444 126.007 71.194 172.106 46.099 46.098 107.184 71.109 172.28 71.109 51.414 0 100.648-16.212 142.824-47.404l126.53 126.006c7.058 7.06 16.297 10.979 26.406 10.979 10.105 0 19.343-3.919 26.402-10.979 14.467-14.467 14.467-38.172 0-52.723L710.816 654.301zm-315.107-23.265c-65.88-65.88-65.88-172.54 0-238.42 32.069-32.07 74.245-49.149 119.471-49.149 45.227 0 87.407 17.603 119.472 49.149 65.88 65.879 65.88 172.539 0 238.42-63.612 63.178-175.242 63.178-238.943 0zm0 0",fill:"currentColor"}),e("path",{d:"M703.319 121.603H321.03c-109.8 0-199.469 89.146-199.469 199.38v382.034c0 109.796 89.236 199.38 199.469 199.38h207.397c20.653 0 37.384-16.645 37.384-37.299 0-20.649-16.731-37.296-37.384-37.296H321.03c-68.582 0-124.352-55.77-124.352-124.267V321.421c0-68.496 55.77-124.267 124.352-124.267h382.289c68.582 0 124.352 55.771 124.352 124.267V524.72c0 20.654 16.736 37.299 37.385 37.299 20.654 0 37.384-16.645 37.384-37.299V320.549c-.085-109.8-89.321-198.946-199.121-198.946zm0 0",fill:"currentColor"})]),B=()=>e("svg",{width:"16",height:"16",ariaHidden:"true"},e("path",{d:"M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z",fill:"currentColor"})),W=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"M810.667 213.333a64 64 0 0 1 64 64V704a64 64 0 0 1-64 64H478.336l-146.645 96.107a21.333 21.333 0 0 1-33.024-17.856V768h-85.334a64 64 0 0 1-64-64V277.333a64 64 0 0 1 64-64h597.334zm0 64H213.333V704h149.334v63.296L459.243 704h351.424V277.333zm-271.36 213.334v64h-176.64v-64h176.64zm122.026-128v64H362.667v-64h298.666z",fill:"currentColor"})),F=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"M813.039 318.772L480.53 651.278H360.718V531.463L693.227 198.961C697.904 194.284 704.027 192 710.157 192C716.302 192 722.436 194.284 727.114 198.961L813.039 284.88C817.72 289.561 820 295.684 820 301.825C820 307.95 817.72 314.093 813.039 318.772ZM710.172 261.888L420.624 551.431V591.376H460.561L750.109 301.825L710.172 261.888ZM490.517 291.845H240.906V771.09H720.156V521.479C720.156 504.947 733.559 491.529 750.109 491.529C766.653 491.529 780.063 504.947 780.063 521.479V791.059C780.063 813.118 762.18 831 740.125 831H220.937C198.882 831 181 813.118 181 791.059V271.872C181 249.817 198.882 231.935 220.937 231.935H490.517C507.06 231.935 520.47 245.352 520.47 261.888C520.47 278.424 507.06 291.845 490.517 291.845Z",fill:"currentColor"})),K=()=>e("svg",{class:"verified-icon",viewBox:"0 0 1024 1024",width:"14",height:"14"},e("path",{d:"m894.4 461.56-54.4-63.2c-10.4-12-18.8-34.4-18.8-50.4v-68c0-42.4-34.8-77.2-77.2-77.2h-68c-15.6 0-38.4-8.4-50.4-18.8l-63.2-54.4c-27.6-23.6-72.8-23.6-100.8 0l-62.8 54.8c-12 10-34.8 18.4-50.4 18.4h-69.2c-42.4 0-77.2 34.8-77.2 77.2v68.4c0 15.6-8.4 38-18.4 50l-54 63.6c-23.2 27.6-23.2 72.4 0 100l54 63.6c10 12 18.4 34.4 18.4 50v68.4c0 42.4 34.8 77.2 77.2 77.2h69.2c15.6 0 38.4 8.4 50.4 18.8l63.2 54.4c27.6 23.6 72.8 23.6 100.8 0l63.2-54.4c12-10.4 34.4-18.8 50.4-18.8h68c42.4 0 77.2-34.8 77.2-77.2v-68c0-15.6 8.4-38.4 18.8-50.4l54.4-63.2c23.2-27.6 23.2-73.2-.4-100.8zm-216-25.2-193.2 193.2a30 30 0 0 1-42.4 0l-96.8-96.8a30.16 30.16 0 0 1 0-42.4c11.6-11.6 30.8-11.6 42.4 0l75.6 75.6 172-172c11.6-11.6 30.8-11.6 42.4 0 11.6 11.6 11.6 30.8 0 42.4z",fill:"#27ae60"})),q=({size:t})=>e("svg",{width:t,height:t,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"},e("circle",{cx:50,cy:50,fill:"none",stroke:"currentColor",strokeWidth:"4",r:"40","stroke-dasharray":"85 30"},e("animateTransform",{attributeName:"transform",type:"rotate",repeatCount:"indefinite",dur:"1s",values:"0 50 50;360 50 50",keyTimes:"0;1"}))),G=()=>e("svg",{width:24,height:24,fill:"currentcolor",viewBox:"0 0 24 24"},[e("path",{style:"transform: translateY(0.5px)",d:"M18.968 10.5H15.968V11.484H17.984V12.984H15.968V15H14.468V9H18.968V10.5V10.5ZM8.984 9C9.26533 9 9.49967 9.09367 9.687 9.281C9.87433 9.46833 9.968 9.70267 9.968 9.984V10.5H6.499V13.5H8.468V12H9.968V14.016C9.968 14.2973 9.87433 14.5317 9.687 14.719C9.49967 14.9063 9.26533 15 8.984 15H5.984C5.70267 15 5.46833 14.9063 5.281 14.719C5.09367 14.5317 5 14.2973 5 14.016V9.985C5 9.70367 5.09367 9.46933 5.281 9.282C5.46833 9.09467 5.70267 9.001 5.984 9.001H8.984V9ZM11.468 9H12.968V15H11.468V9V9Z"}),e("path",{d:"M18.5 3H5.75C3.6875 3 2 4.6875 2 6.75V18C2 20.0625 3.6875 21.75 5.75 21.75H18.5C20.5625 21.75 22.25 20.0625 22.25 18V6.75C22.25 4.6875 20.5625 3 18.5 3ZM20.75 18C20.75 19.2375 19.7375 20.25 18.5 20.25H5.75C4.5125 20.25 3.5 19.2375 3.5 18V6.75C3.5 5.5125 4.5125 4.5 5.75 4.5H18.5C19.7375 4.5 20.75 5.5125 20.75 6.75V18Z"})]),Z={"Content-Type":"application/json"},J=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`${t} failed with ${e.errno}: ${e.errmsg}`);return e},Y=({serverURL:e,lang:t,path:n,type:a,action:l})=>fetch(`${e}/article?lang=${t}`,{method:"POST",headers:Z,body:JSON.stringify({path:n,type:a,action:l})}).then((e=>e.json())),X=({serverURL:e,lang:t,token:n,objectId:a,comment:l})=>fetch(`${e}/comment/${a}?lang=${t}`,{method:"PUT",headers:{...Z,Authorization:`Bearer ${n}`},body:JSON.stringify(l)}).then((e=>e.json())).then((e=>J(e,"Update comment")));let Q=null;const ee=()=>Q||(Q=_("WALINE_LIKE",[]));let te=null;const ne=()=>te??(te=_("WALINE_REACTION",{}));var ae="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},le={},ie={},oe={},re=ae&&ae.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(l,i){function o(e){try{s(a.next(e))}catch(e){i(e)}}function r(e){try{s(a.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?l(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,r)}s((a=a.apply(e,t||[])).next())}))},se=ae&&ae.__generator||function(e,t){var n,a,l,i,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return i={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function r(i){return function(r){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,a&&(l=2&i[0]?a.return:i[0]?a.throw||((l=a.return)&&l.call(a),0):a.next)&&!(l=l.call(a,i[1])).done)return l;switch(a=0,l&&(i=[2&i[0],l.value]),i[0]){case 0:case 1:l=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,a=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(l=o.trys,(l=l.length>0&&l[l.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!l||i[1]>l[0]&&i[1]<l[3])){o.label=i[1];break}if(6===i[0]&&o.label<l[1]){o.label=l[1],l=i;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(i);break}l[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],a=0}finally{n=l=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,r])}}};Object.defineProperty(oe,"__esModule",{value:!0}),oe.ReCaptchaInstance=void 0;var ce=function(){function e(e,t,n){this.siteKey=e,this.recaptchaID=t,this.recaptcha=n,this.styleContainer=null}return e.prototype.execute=function(e){return re(this,void 0,void 0,(function(){return se(this,(function(t){return[2,this.recaptcha.enterprise?this.recaptcha.enterprise.execute(this.recaptchaID,{action:e}):this.recaptcha.execute(this.recaptchaID,{action:e})]}))}))},e.prototype.getSiteKey=function(){return this.siteKey},e.prototype.hideBadge=function(){null===this.styleContainer&&(this.styleContainer=document.createElement("style"),this.styleContainer.innerHTML=".grecaptcha-badge{visibility:hidden !important;}",document.head.appendChild(this.styleContainer))},e.prototype.showBadge=function(){null!==this.styleContainer&&(document.head.removeChild(this.styleContainer),this.styleContainer=null)},e}();oe.ReCaptchaInstance=ce,Object.defineProperty(ie,"__esModule",{value:!0}),ie.getInstance=ie.load=void 0;var ue,de=oe;!function(e){e[e.NOT_LOADED=0]="NOT_LOADED",e[e.LOADING=1]="LOADING",e[e.LOADED=2]="LOADED"}(ue||(ue={}));var me=function(){function e(){}return e.load=function(t,n){if(void 0===n&&(n={}),"undefined"==typeof document)return Promise.reject(new Error("This is a library for the browser!"));if(e.getLoadingState()===ue.LOADED)return e.instance.getSiteKey()===t?Promise.resolve(e.instance):Promise.reject(new Error("reCAPTCHA already loaded with different site key!"));if(e.getLoadingState()===ue.LOADING)return t!==e.instanceSiteKey?Promise.reject(new Error("reCAPTCHA already loaded with different site key!")):new Promise((function(t,n){e.successfulLoadingConsumers.push((function(e){return t(e)})),e.errorLoadingRunnable.push((function(e){return n(e)}))}));e.instanceSiteKey=t,e.setLoadingState(ue.LOADING);var a=new e;return new Promise((function(l,i){a.loadScript(t,n.useRecaptchaNet||!1,n.useEnterprise||!1,n.renderParameters?n.renderParameters:{},n.customUrl).then((function(){e.setLoadingState(ue.LOADED);var i=a.doExplicitRender(grecaptcha,t,n.explicitRenderParameters?n.explicitRenderParameters:{},n.useEnterprise||!1),o=new de.ReCaptchaInstance(t,i,grecaptcha);e.successfulLoadingConsumers.forEach((function(e){return e(o)})),e.successfulLoadingConsumers=[],n.autoHideBadge&&o.hideBadge(),e.instance=o,l(o)})).catch((function(t){e.errorLoadingRunnable.forEach((function(e){return e(t)})),e.errorLoadingRunnable=[],i(t)}))}))},e.getInstance=function(){return e.instance},e.setLoadingState=function(t){e.loadingState=t},e.getLoadingState=function(){return null===e.loadingState?ue.NOT_LOADED:e.loadingState},e.prototype.loadScript=function(t,n,a,l,i){var o=this;void 0===n&&(n=!1),void 0===a&&(a=!1),void 0===l&&(l={}),void 0===i&&(i="");var r=document.createElement("script");r.setAttribute("recaptcha-v3-script","");var s="https://www.google.com/recaptcha/api.js";n&&(s=a?"https://recaptcha.net/recaptcha/enterprise.js":"https://recaptcha.net/recaptcha/api.js"),a&&(s="https://www.google.com/recaptcha/enterprise.js"),i&&(s=i),l.render&&(l.render=void 0);var c=this.buildQueryString(l);return r.src=s+"?render=explicit"+c,new Promise((function(t,n){r.addEventListener("load",o.waitForScriptToLoad((function(){t(r)}),a),!1),r.onerror=function(t){e.setLoadingState(ue.NOT_LOADED),n(t)},document.head.appendChild(r)}))},e.prototype.buildQueryString=function(e){return Object.keys(e).length<1?"":"&"+Object.keys(e).filter((function(t){return!!e[t]})).map((function(t){return t+"="+e[t]})).join("&")},e.prototype.waitForScriptToLoad=function(t,n){var a=this;return function(){void 0===window.grecaptcha?setTimeout((function(){a.waitForScriptToLoad(t,n)}),e.SCRIPT_LOAD_DELAY):n?window.grecaptcha.enterprise.ready((function(){t()})):window.grecaptcha.ready((function(){t()}))}},e.prototype.doExplicitRender=function(e,t,n,a){var l={sitekey:t,badge:n.badge,size:n.size,tabindex:n.tabindex};return n.container?a?e.enterprise.render(n.container,l):e.render(n.container,l):a?e.enterprise.render(l):e.render(l)},e.loadingState=null,e.instance=null,e.instanceSiteKey=null,e.successfulLoadingConsumers=[],e.errorLoadingRunnable=[],e.SCRIPT_LOAD_DELAY=25,e}();ie.load=me.load,ie.getInstance=me.getInstance,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ReCaptchaInstance=e.getInstance=e.load=void 0;var t=ie;Object.defineProperty(e,"load",{enumerable:!0,get:function(){return t.load}}),Object.defineProperty(e,"getInstance",{enumerable:!0,get:function(){return t.getInstance}});var n=oe;Object.defineProperty(e,"ReCaptchaInstance",{enumerable:!0,get:function(){return n.ReCaptchaInstance}})}(le);const ve={};let pe=null;const he=()=>pe??(pe=_("WALINE_USER",{})),ge={key:0,class:"wl-reaction"},fe=["textContent"],ye={class:"reaction-list"},we=["onClick"],be={class:"reaction-img"},ke=["src","alt"],Ce=["textContent"],$e=["textContent"];var Le=t({__name:"ArticleReaction",setup(e,{expose:t}){t();const y=ne(),w=n("config"),b=a(-1),k=a([]),C=l((()=>w.value.locale)),$=l((()=>w.value.reaction.length>0)),L=l((()=>{const{reaction:e,path:t}=w.value;return e.map(((e,n)=>({icon:e,desc:C.value[`reaction${n}`],active:y.value[t]===n})))}));let x;const I=async()=>{if($.value){const{serverURL:e,lang:t,path:n,reaction:a}=w.value,l=new AbortController;x=l.abort.bind(l);const i=await(({serverURL:e,lang:t,paths:n,type:a,signal:l})=>fetch(`${e}/article?path=${encodeURIComponent(n.join(","))}&type=${encodeURIComponent(a.join(","))}&lang=${t}`,{signal:l}).then((e=>e.json())))({serverURL:e,lang:t,paths:[n],type:a.map(((e,t)=>`reaction${t}`)),signal:l.signal});if(Array.isArray(i)||"number"==typeof i)return;k.value=a.map(((e,t)=>i[`reaction${t}`]))}};return i((()=>{o((()=>[w.value.serverURL,w.value.path]),(()=>{I()}),{immediate:!0})})),r((()=>x?.())),(e,t)=>s(L).length?(c(),u("div",ge,[d("div",{class:"reaction-title",textContent:m(s(C).reactionTitle)},null,8,fe),d("ul",ye,[(c(!0),u(v,null,p(s(L),(({active:e,icon:t,desc:n},a)=>(c(),u("li",{key:a,class:h(["reaction-item",{active:e}]),onClick:e=>(async e=>{if(-1===b.value){const{serverURL:t,lang:n,path:a}=w.value,l=y.value[a];b.value=e,void 0!==l&&(await Y({serverURL:t,lang:n,path:a,type:`reaction${l}`,action:"desc"}),k.value[l]=Math.max(k.value[l]-1,0)),l!==e&&(await Y({serverURL:t,lang:n,path:a,type:`reaction${e}`}),k.value[e]=(k.value[e]||0)+1),l===e?delete y.value[a]:y.value[a]=e,b.value=-1}})(a)},[d("div",be,[d("img",{src:t,alt:n},null,8,ke),b.value===a?(c(),g(s(q),{key:0,class:"reaction-loading"})):(c(),u("div",{key:1,class:"reaction-votes",textContent:m(k.value[a]||0)},null,8,Ce))]),d("div",{class:"reaction-text",textContent:m(n)},null,8,$e)],10,we)))),128))])])):f("v-if",!0)}}),xe=(e,t)=>{const n=e.__vccOpts||e;for(const[e,a]of t)n[e]=a;return n},Ie=xe(Le,[["__file","ArticleReaction.vue"]]);const Re=["data-index"],Ee=["src","title","onClick"];var je=xe(t({__name:"ImageWall",props:{items:{default:()=>[]},columnWidth:{default:300},gap:{default:0}},emits:["insert"],setup(e,{expose:t}){const n=e;t();let l=null;const r=a(null),m=a({}),h=a([]),k=()=>{const e=Math.floor((r.value.getBoundingClientRect().width+n.gap)/(n.columnWidth+n.gap));return e>0?e:1},C=async e=>{if(e>=n.items.length)return;await b();const t=Array.from(r.value?.children||[]).reduce(((e,t)=>t.getBoundingClientRect().height<e.getBoundingClientRect().height?t:e));h.value[Number(t.dataset.index)].push(e),await C(e+1)},$=async(e=!1)=>{if(h.value.length===k()&&!e)return;var t;h.value=(t=k(),new Array(t).fill(null).map((()=>[])));const n=window.scrollY;await C(0),window.scrollTo({top:n})},L=e=>{m.value[e.target.src]=!0};return i((()=>{$(!0),l=new ResizeObserver((()=>{$()})),l.observe(r.value),o((()=>[n.items]),(()=>{m.value={},$(!0)})),o((()=>[n.columnWidth,n.gap]),(()=>{$()}))})),y((()=>l.unobserve(r.value))),(t,n)=>(c(),u("div",{ref_key:"wall",ref:r,class:"wl-gallery",style:w({gap:`${e.gap}px`})},[(c(!0),u(v,null,p(h.value,((n,a)=>(c(),u("div",{key:a,class:"wl-gallery-column","data-index":a,style:w({gap:`${e.gap}px`})},[(c(!0),u(v,null,p(n,(n=>(c(),u(v,{key:n},[m.value[e.items[n].src]?f("v-if",!0):(c(),g(s(q),{key:0,size:36,style:{margin:"20px auto"}})),d("img",{class:"wl-gallery-item",src:e.items[n].src,title:e.items[n].title,loading:"lazy",onLoad:L,onClick:a=>t.$emit("insert",``)},null,40,Ee)],64)))),128))],12,Re)))),128))],4))}}),[["__file","ImageWall.vue"]]);const Se=["nick","mail","link"],_e=e=>e.filter((e=>Se.includes(e))),Ae=["//unpkg.com/@waline/emojis@1.1.0/weibo"],ze=e=>new Promise(((t,n)=>{if(e.size>128e3)return n(new Error("File too large! File size limit 128KB"));const a=new FileReader;a.readAsDataURL(e),a.onload=()=>t(a.result?.toString()||""),a.onerror=n})),Ue=e=>!0===e?'<p class="wl-tex">Tex is not available in preview</p>':'<span class="wl-tex">Tex is not available in preview</span>',Me=e=>{const t=async(t,n={})=>fetch(`https://api.giphy.com/v1/gifs/${t}?${new URLSearchParams({lang:e,limit:"20",rating:"g",api_key:"6CIMLkNMMOhRcXPoMCPkFy4Ybk2XUiMp",...n}).toString()}`).then((e=>e.json())).then((({data:e})=>e.map((e=>({title:e.title,src:e.images.downsized_medium.url})))));return{search:e=>t("search",{q:e,offset:"0"}),default:()=>t("trending",{}),more:(e,n=0)=>t("search",{q:e,offset:n.toString()})}},He=["//unpkg.com/@waline/emojis/tieba/tieba_agree.png","//unpkg.com/@waline/emojis/tieba/tieba_look_down.png","//unpkg.com/@waline/emojis/tieba/tieba_sunglasses.png","//unpkg.com/@waline/emojis/tieba/tieba_pick_nose.png","//unpkg.com/@waline/emojis/tieba/tieba_awkward.png","//unpkg.com/@waline/emojis/tieba/tieba_sleep.png"],Oe=new RegExp(`(${/[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|\w+/.source}|${/</.source})|((?:${/(?:^|\s)\/\/(.+?)$/gm.source})|(?:${/\/\*([\S\s]*?)\*\//gm.source}))`,"gmi"),Pe=["23AC69","91C132","F19726","E8552D","1AAB8E","E1147F","2980C1","1BA1E6","9FA0A0","F19726","E30B20","E30B20","A3338B"],Ve={},Te=e=>{let t=0;return e.replace(Oe,((e,n,a)=>{if(a)return`<span style="color: slategray">${a}</span>`;if("<"===n)return"<";let l;Ve[n]?l=Ve[n]:(l=Pe[t],Ve[n]=l);const i=`<span style="color: #${l}">${n}</span>`;return t=++t%Pe.length,i}))},De=["nick","nickError","mail","mailError","link","optional","placeholder","sofa","submit","like","cancelLike","reply","cancelReply","comment","refresh","more","preview","emoji","uploadImage","seconds","minutes","hours","days","now","uploading","login","logout","admin","sticky","word","wordHint","anonymous","level0","level1","level2","level3","level4","level5","gif","gifSearchPlaceholder","profile","approved","waiting","spam","unsticky","oldest","latest","hottest","reactionTitle"],Ne=e=>Object.fromEntries(e.map(((e,t)=>[De[t],e])));var Be=Ne(["NickName","NickName cannot be less than 3 bytes.","E-Mail","Please confirm your email address.","Website","Optional","Comment here...","No comment yet.","Submit","Like","Cancel like","Reply","Cancel reply","Comments","Refresh","Load More...","Preview","Emoji","Upload Image","seconds ago","minutes ago","hours ago","days ago","just now","Uploading","Login","logout","Admin","Sticky","Words","Please input comments between $0 and $1 words!\n Current word number: $2","Anonymous","Dwarves","Hobbits","Ents","Wizards","Elves","Maiar","GIF","Search GIF","Profile","Approved","Waiting","Spam","Unsticky","Oldest","Latest","Hottest","What do you think?"]),We=Ne(["ニックネーム","3バイト以上のニックネームをご入力ください.","メールアドレス","メールアドレスをご確認ください.","サイト","オプション","ここにコメント","コメントしましょう~","提出する","Like","Cancel like","返信する","キャンセル","コメント","更新","さらに読み込む","プレビュー","絵文字","画像をアップロード","秒前","分前","時間前","日前","たっだ今","アップロード","ログインする","ログアウト","管理者","トップに置く","ワード","コメントは $0 から $1 ワードの間でなければなりません!\n 現在の単語番号: $2","匿名","うえにん","なかにん","しもおし","特にしもおし","かげ","なぬし","GIF","探す GIF","個人情報","承認済み","待っている","スパム","べたつかない","逆順","正順","人気順","どう思いますか?"]),Fe=Ne(["昵称","昵称不能少于3个字符","邮箱","请填写正确的邮件地址","网址","可选","欢迎评论","来发评论吧~","提交","喜欢","取消喜欢","回复","取消回复","评论","刷新","加载更多...","预览","表情","上传图片","秒前","分钟前","小时前","天前","刚刚","正在上传","登录","退出","博主","置顶","字","评论字数应在 $0 到 $1 字之间!\n当前字数:$2","匿名","潜水","冒泡","吐槽","活跃","话痨","传说","表情包","搜索表情包","个人资料","通过","待审核","垃圾","取消置顶","按倒序","按正序","按热度","你认为这篇文章怎么样?"]),Ke=Ne(["暱稱","暱稱不能少於3個字元","郵箱","請填寫正確的郵件地址","網址","可選","歡迎評論","來發評論吧~","提交","喜歡","取消喜歡","回覆","取消回覆","評論","刷新","載入更多...","預覽","表情","上傳圖片","秒前","分鐘前","小時前","天前","剛剛","正在上傳","登錄","退出","博主","置頂","字","評論字數應在 $0 到 $1 字之間!\n當前字數:$2","匿名","潛水","冒泡","吐槽","活躍","話癆","傳說","表情包","搜索表情包","個人資料","通過","待審核","垃圾","取消置頂","按倒序","按正序","按熱度","你認為這篇文章怎麼樣?"]),qe=Ne(["Apelido","Apelido não pode ser menor que 3 bytes.","E-Mail","Por favor, confirme seu endereço de e-mail.","Website","Opcional","Comente aqui...","Nenhum comentário, ainda.","Enviar","Like","Cancel like","Responder","Cancelar resposta","Comentários","Refrescar","Carregar Mais...","Visualizar","Emoji","Enviar Imagem","segundos atrás","minutos atrás","horas atrás","dias atrás","agora mesmo","Enviando","Entrar","Sair","Admin","Sticky","Palavras","Favor enviar comentário com $0 a $1 palavras!\n Número de palavras atuais: $2","Anônimo","Dwarves","Hobbits","Ents","Wizards","Elves","Maiar","GIF","Pesquisar GIF","informação pessoal","Aprovado","Espera","Spam","Unsticky","Mais velho","Mais recentes","Mais quente","O que você acha?"]),Ge=Ne(["Псевдоним","Никнейм не может быть меньше 3 байт.","Эл. адрес","Пожалуйста, подтвердите адрес вашей электронной почты.","Веб-сайт","Необязательный","Комментарий здесь...","Пока нет комментариев.","Отправить","Like","Cancel like","Отвечать","Отменить ответ","Комментарии","Обновить","Загрузи больше...","Превью","эмодзи","Загрузить изображение","секунд назад","несколько минут назад","несколько часов назад","дней назад","прямо сейчас","Загрузка","Авторизоваться","Выход из системы","Админ","Липкий","Слова","Пожалуйста, введите комментарии от $0 до $1 слов!\nНомер текущего слова: $2","Анонимный","Dwarves","Hobbits","Ents","Wizards","Elves","Maiar","GIF","Поиск GIF","Персональные данные","Одобренный","Ожидающий","Спам","Нелипкий","самый старый","последний","самый горячий","Что вы думаете?"]);const Ze={zh:Fe,"zh-cn":Fe,"zh-CN":Fe,"zh-tw":Ke,"zh-TW":Ke,en:Be,"en-US":Be,"en-us":Be,jp:We,ja:We,"jp-jp":We,"jp-JP":We,"pt-br":qe,"pt-BR":qe,ru:Ge,"ru-ru":Ge,"ru-RU":Ge},Je=e=>{try{e=decodeURI(e)}catch(e){}return e},Ye=(e="")=>e.replace(/\/$/u,""),Xe=e=>/^(https?:)?\/\//.test(e),Qe=e=>{const t=Ye(e);return Xe(t)?t:`https://${t}`},et=e=>Array.isArray(e)?e:!!e&&[0,e],tt=(e,t)=>"function"==typeof e?e:!1!==e&&t,nt="{--waline-white:#000;--waline-light-grey:#666;--waline-dark-grey:#999;--waline-color:#888;--waline-bgcolor:#1e1e1e;--waline-bgcolor-light:#272727;--waline-bgcolor-hover: #444;--waline-border-color:#333;--waline-disable-bgcolor:#444;--waline-disable-color:#272727;--waline-bq-color:#272727;--waline-info-bgcolor:#272727;--waline-info-color:#666}",at=(e,t)=>{let n=e.toString();for(;n.length<t;)n="0"+n;return n},lt=(e,t,n)=>{if(!e)return"";const a="string"==typeof e?new Date(-1!==e.indexOf(" ")?e.replace(/-/g,"/"):e):e,l=t.getTime()-a.getTime(),i=Math.floor(l/864e5);if(0===i){const e=l%864e5,t=Math.floor(e/36e5);if(0===t){const t=e%36e5,a=Math.floor(t/6e4);if(0===a){const e=t%6e4;return`${Math.round(e/1e3)} ${n.seconds}`}return`${a} ${n.minutes}`}return`${t} ${n.hours}`}return i<0?n.now:i<8?`${i} ${n.days}`:(e=>{const t=at(e.getDate(),2),n=at(e.getMonth()+1,2);return`${at(e.getFullYear(),2)}-${n}-${t}`})(a)},it=e=>{const t=_("WALINE_EMOJI",{}),n=Boolean(/@[0-9]+\.[0-9]+\.[0-9]+/.test(e));if(n){const n=t.value[e];if(n)return Promise.resolve(n)}return fetch(`${e}/info.json`).then((e=>e.json())).then((a=>{const l={folder:e,...a};return n&&(t.value[e]=l),l}))},ot=(e,t="",n="",a="")=>`${t?`${t}/`:""}${n}${e}${a?`.${a}`:""}`,rt=e=>e.type.includes("image"),st=e=>{const t=Array.from(e).find(rt);return t?t.getAsFile():null},ct=/\$.*?\$/,ut=/^\$(.*?)\$/,dt=/^(?:\s{0,3})\$\$((?:[^\n]|\n[^\n])+?)\n{0,1}\$\$/,mt=(e="",t={})=>e.replace(/:(.+?):/g,((e,n)=>t[n]?`<img class="wl-emoji" src="${t[n]}" alt="${n}">`:e)),vt=(e,{emojiMap:t,highlighter:n,texRenderer:a})=>{if(H.setOptions({highlight:n||void 0,breaks:!0,smartLists:!0,smartypants:!0}),a){const e=(e=>[{name:"blockMath",level:"block",tokenizer(t){const n=dt.exec(t);if(null!==n)return{type:"html",raw:n[0],text:e(!0,n[1])}}},{name:"inlineMath",level:"inline",start(e){const t=e.search(ct);return-1!==t?t:e.length},tokenizer(t){const n=ut.exec(t);if(null!==n)return{type:"html",raw:n[0],text:e(!1,n[1])}}}])(a);H.use({extensions:e})}return H.parse(mt(e,t))},pt={class:"wl-comment"},ht={key:0,class:"wl-login-info"},gt={class:"wl-avatar"},ft=["title"],yt=["title"],wt=["src"],bt=["title","textContent"],kt={class:"wl-panel"},Ct=["for","textContent"],$t=["id","onUpdate:modelValue","name","type"],Lt=["placeholder"],xt={class:"wl-preview"},It=d("hr",null,null,-1),Rt=["innerHTML"],Et={class:"wl-footer"},jt={class:"wl-actions"},St={href:"https://guides.github.com/features/mastering-markdown/",title:"Markdown Guide","aria-label":"Markdown is supported",class:"wl-action",target:"_blank",rel:"noopener noreferrer"},_t=["title"],At=["title"],zt=["title"],Ut=["title"],Mt={class:"wl-info"},Ht={class:"wl-text-number"},Ot={key:0},Pt=["textContent"],Vt=["textContent"],Tt=["disabled"],Dt=["placeholder"],Nt={key:0,class:"wl-loading"},Bt={key:0,class:"wl-tab-wrapper"},Wt=["title","onClick"],Ft=["src","alt"],Kt={key:0,class:"wl-tabs"},qt=["onClick"],Gt=["src","alt","title"],Zt=["title"];var Jt=t({__name:"CommentBox",props:{edit:{default:null},rootId:{default:""},replyId:{default:""},replyUser:{default:""}},emits:["log","cancelEdit","cancelReply","submit"],setup(e,{expose:t,emit:y}){const w=e;t();const b=n("config"),j=_("WALINE_COMMENT_BOX_EDITOR",""),S=_("WALINE_USER_META",{nick:"",mail:"",link:""}),z=he(),U=a({}),H=a(null),P=a(null),D=a(null),W=a(null),F=a(null),K=a(null),Z=a(null),J=a({tabs:[],map:{}}),Y=a(0),Q=a(!1),ee=a(!1),te=a(!1),ne=a(""),ae=a(0),ie=k({loading:!0,list:[]}),oe=a(0),re=a(!1),se=a(""),ce=a(!1),ue=l((()=>b.value.locale)),de=l((()=>Boolean(z.value?.token))),me=l((()=>!1!==b.value.imageUploader)),pe=e=>{const t=H.value,n=t.selectionStart,a=t.selectionEnd||0,l=t.scrollTop;j.value=t.value.substring(0,n)+e+t.value.substring(a,t.value.length),t.focus(),t.selectionStart=n+e.length,t.selectionEnd=n+e.length,t.scrollTop=l},ge=e=>{const t=e.key;(e.ctrlKey||e.metaKey)&&"Enter"===t&&ke()},fe=e=>{const t=`![${b.value.locale.uploading} ${e.name}]()`;return pe(t),Promise.resolve().then((()=>b.value.imageUploader(e))).then((n=>{j.value=j.value.replace(t,`\r\n`)})).catch((e=>{alert(e.message),j.value=j.value.replace(t,"")}))},ye=e=>{if(e.dataTransfer?.items){const t=st(e.dataTransfer.items);t&&me.value&&(fe(t),e.preventDefault())}},we=e=>{if(e.clipboardData){const t=st(e.clipboardData.items);t&&me.value&&fe(t)}},be=()=>{const e=P.value;e.files&&me.value&&fe(e.files[0]).then((()=>{e.value=""}))},ke=async()=>{const{serverURL:e,lang:t,login:n,wordLimit:a,requiredMeta:l}=b.value;let i="";b.value.recaptchaV3Key&&(i=await(e=>{const t=ve[e]??(ve[e]=le.load(e,{useRecaptchaNet:!0,autoHideBadge:!0}));return{execute:e=>t.then((t=>t.execute(e)))}})(b.value.recaptchaV3Key).execute("social"));const o={comment:se.value,nick:S.value.nick,mail:S.value.mail,link:S.value.link,ua:navigator.userAgent,url:b.value.path,recaptchaV3:i};if(z.value?.token)o.nick=z.value.display_name,o.mail=z.value.email,o.link=z.value.url;else{if("force"===n)return;if(l.indexOf("nick")>-1&&!o.nick)return U.value.nick?.focus(),alert(ue.value.nickError);if(l.indexOf("mail")>-1&&!o.mail||o.mail&&!/^\w(?:[\w._-]*\w)?@(?:\w(?:[\w-]*\w)?\.)*\w+$/.exec(o.mail))return U.value.mail?.focus(),alert(ue.value.mailError);if(!o.comment)return void H.value?.focus();o.nick||(o.nick=ue.value.anonymous)}if(!re.value)return alert(ue.value.wordHint.replace("$0",a[0].toString()).replace("$1",a[1].toString()).replace("$2",ae.value.toString()));o.comment=mt(o.comment,J.value.map),w.replyId&&w.rootId&&(o.pid=w.replyId,o.rid=w.rootId,o.at=w.replyUser),ce.value=!0;const r={serverURL:e,lang:t,token:z.value?.token,comment:o};(w.edit?X({objectId:w.edit.objectId,...r}):(({serverURL:e,lang:t,token:n,comment:a})=>{const l={"Content-Type":"application/json"};return n&&(l.Authorization=`Bearer ${n}`),fetch(`${e}/comment?lang=${t}`,{method:"POST",headers:l,body:JSON.stringify(a)}).then((e=>e.json()))})(r)).then((e=>{if(ce.value=!1,e.errmsg)return alert(e.errmsg);y("submit",e.data),j.value="",ne.value="",w.replyId&&y("cancelReply"),w.edit?.objectId&&y("cancelEdit")})).catch((e=>{ce.value=!1,alert(e.message)}))},Ce=e=>{e.preventDefault();const{lang:t,serverURL:n}=b.value;(({lang:e,serverURL:t})=>{const n=(window.innerWidth-450)/2,a=(window.innerHeight-450)/2,l=window.open(`${t}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${n},top=${a},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return l?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const t=({data:n})=>{n&&"object"==typeof n&&"userInfo"===n.type&&n.data.token&&(l?.close(),window.removeEventListener("message",t),e(n.data))};window.addEventListener("message",t)}))})({serverURL:n,lang:t}).then((e=>{z.value=e,(e.remember?localStorage:sessionStorage).setItem("WALINE_USER",JSON.stringify(e)),y("log")}))},$e=()=>{z.value={},localStorage.setItem("WALINE_USER","null"),sessionStorage.setItem("WALINE_USER","null"),y("log")},Le=e=>{e.preventDefault();const{lang:t,serverURL:n}=b.value,a=(window.innerWidth-800)/2,l=(window.innerHeight-800)/2,i=new URLSearchParams({lng:t,token:z.value.token});window.open(`${n}/ui/profile?${i.toString()}`,"_blank",`width=800,height=800,left=${a},top=${l},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`)?.postMessage({type:"TOKEN",data:z.value.token},"*")},xe=e=>{D.value?.contains(e.target)||W.value?.contains(e.target)||(Q.value=!1),F.value?.contains(e.target)||K.value?.contains(e.target)||(ee.value=!1)},Ie=async e=>{const{scrollTop:t,clientHeight:n,scrollHeight:a}=e.target,l=(n+t)/a,i=b.value.search,o=Z.value?.value||"";l<.9||ie.loading||(ie.loading=!0,ie.list=[...ie.list,...i.more&&ie.list.length?await i.more(o,ie.list.length):await i.search(o)],ie.loading=!1,setTimeout((()=>{e.target.scrollTop=t}),50))},Re=A((e=>{ie.list=[],Ie(e)}),300);o([b,ae],(([e,t])=>{const{wordLimit:n}=e;n?t<n[0]&&0!==n[0]?(oe.value=n[0],re.value=!1):t>n[1]?(oe.value=n[1],re.value=!1):(oe.value=n[1],re.value=!0):(oe.value=0,re.value=!0)}),{immediate:!0});const Ee=({data:e})=>{e&&"profile"===e.type&&(z.value={...z.value,...e.data},[localStorage,sessionStorage].filter((e=>e.getItem("WALINE_USER"))).forEach((e=>e.setItem("WALINE_USER",JSON.stringify(z)))))};return i((()=>{document.body.addEventListener("click",xe),window.addEventListener("message",Ee),w.edit?.objectId&&(j.value=w.edit.orig),o(ee,(async e=>{if(!e)return;const t=b.value.search;Z.value&&(Z.value.value=""),ie.loading=!0,ie.list=t.default?await t.default():await t.search(""),ie.loading=!1})),o((()=>j.value),(e=>{const{highlighter:t,texRenderer:n}=b.value;se.value=e,ne.value=vt(e,{emojiMap:J.value.map,highlighter:t,texRenderer:n}),ae.value=(e=>(e=>e.match(/[\w\d\s\u00C0-\u024F]+/giu)||[])(e).reduce(((e,t)=>e+(""===t.trim()?0:t.trim().split(/\s+/u).length)),0)+(e=>e.match(/[\u4E00-\u9FA5]/gu)||[])(e).length)(e),e?M(H.value):M.destroy(H.value)}),{immediate:!0}),o((()=>b.value.emoji),(e=>{return(t=e,Promise.all(t.map((e=>"string"==typeof e?it(Ye(e)):Promise.resolve(e)))).then((e=>{const t={tabs:[],map:{}};return e.forEach((e=>{const{name:n,folder:a,icon:l,prefix:i,type:o,items:r}=e;t.tabs.push({name:n,icon:ot(l,a,i,o),items:r.map((e=>{const n=`${i||""}${e}`;return t.map[n]=ot(e,a,i,o),n}))})})),t}))).then((e=>{J.value=e}));var t}),{immediate:!0})})),r((()=>{document.body.removeEventListener("click",xe),window.removeEventListener("message",Ee)})),(t,n)=>(c(),u("div",pt,["disable"!==s(b).login&&s(de)&&!e.edit?.objectId?(c(),u("div",ht,[d("div",gt,[d("button",{type:"submit",class:"wl-logout-btn",title:s(ue).logout,onClick:$e},[C(s(O),{size:14})],8,ft),d("a",{href:"#",class:"wl-login-nick","aria-label":"Profile",title:s(ue).profile,onClick:Le},[d("img",{src:s(z).avatar,alt:"avatar"},null,8,wt)],8,yt)]),d("a",{href:"#",class:"wl-login-nick","aria-label":"Profile",title:s(ue).profile,onClick:Le,textContent:m(s(z).display_name)},null,8,bt)])):f("v-if",!0),d("div",kt,["force"!==s(b).login&&s(b).meta.length&&!s(de)?(c(),u("div",{key:0,class:h(["wl-header",`item${s(b).meta.length}`])},[(c(!0),u(v,null,p(s(b).meta,(e=>(c(),u("div",{key:e,class:"wl-header-item"},[d("label",{for:`wl-${e}`,textContent:m(s(ue)[e]+(s(b).requiredMeta.includes(e)||!s(b).requiredMeta.length?"":`(${s(ue).optional})`))},null,8,Ct),$(d("input",{id:`wl-${e}`,ref_for:!0,ref:t=>{t&&(U.value[e]=t)},"onUpdate:modelValue":t=>s(S)[e]=t,class:h(["wl-input",`wl-${e}`]),name:e,type:"mail"===e?"email":"text"},null,10,$t),[[L,s(S)[e]]])])))),128))],2)):f("v-if",!0),$(d("textarea",{id:"wl-edit",ref_key:"editorRef",ref:H,"onUpdate:modelValue":n[0]||(n[0]=e=>x(j)?j.value=e:null),class:"wl-editor",placeholder:e.replyUser?`@${e.replyUser}`:s(ue).placeholder,onKeydown:ge,onDrop:ye,onPaste:we},null,40,Lt),[[I,s(j)]]),$(d("div",xt,[It,d("h4",null,m(s(ue).preview)+":",1),d("div",{class:"wl-content",innerHTML:ne.value},null,8,Rt)],512),[[R,te.value]]),d("div",Et,[d("div",jt,[d("a",St,[C(s(B))]),$(d("button",{ref_key:"emojiButtonRef",ref:D,type:"button",class:h(["wl-action",{active:Q.value}]),title:s(ue).emoji,onClick:n[1]||(n[1]=e=>Q.value=!Q.value)},[C(s(V))],10,_t),[[R,J.value.tabs.length]]),s(b).search?(c(),u("button",{key:0,ref_key:"gifButtonRef",ref:F,type:"button",class:h(["wl-action",{active:ee.value}]),title:s(ue).gif,onClick:n[2]||(n[2]=e=>ee.value=!ee.value)},[C(s(G))],10,At)):f("v-if",!0),d("input",{id:"wl-image-upload",ref_key:"imageUploadRef",ref:P,class:"upload",type:"file",accept:".png,.jpg,.jpeg,.webp,.bmp,.gif",onChange:be},null,544),s(me)?(c(),u("label",{key:1,for:"wl-image-upload",class:"wl-action",title:s(ue).uploadImage},[C(s(T))],8,zt)):f("v-if",!0),d("button",{type:"button",class:h(["wl-action",{active:te.value}]),title:s(ue).preview,onClick:n[3]||(n[3]=e=>te.value=!te.value)},[C(s(N))],10,Ut)]),d("div",Mt,[d("div",Ht,[E(m(ae.value)+" ",1),s(b).wordLimit?(c(),u("span",Ot,[E(" / "),d("span",{class:h({illegal:!re.value}),textContent:m(oe.value)},null,10,Pt)])):f("v-if",!0),E(" "+m(s(ue).word),1)]),"disable"===s(b).login||s(de)?f("v-if",!0):(c(),u("button",{key:0,type:"button",class:"wl-btn",onClick:Ce,textContent:m(s(ue).login)},null,8,Vt)),"force"!==s(b).login||s(de)?(c(),u("button",{key:1,type:"submit",class:"primary wl-btn",title:"Cmd|Ctrl + Enter",disabled:ce.value,onClick:ke},[ce.value?(c(),g(s(q),{key:0,size:16})):(c(),u(v,{key:1},[E(m(s(ue).submit),1)],64))],8,Tt)):f("v-if",!0)]),d("div",{ref_key:"gifPopupRef",ref:K,class:h(["wl-gif-popup",{display:ee.value}])},[d("input",{ref_key:"gifSearchInputRef",ref:Z,type:"text",placeholder:s(ue).gifSearchPlaceholder,onInput:n[4]||(n[4]=(...e)=>s(Re)&&s(Re)(...e))},null,40,Dt),C(je,{items:ie.list,"column-width":200,gap:6,onInsert:n[5]||(n[5]=e=>pe(e)),onScroll:Ie},null,8,["items"]),ie.loading?(c(),u("div",Nt,[C(s(q),{size:30})])):f("v-if",!0)],2),d("div",{ref_key:"emojiPopupRef",ref:W,class:h(["wl-emoji-popup",{display:Q.value}])},[(c(!0),u(v,null,p(J.value.tabs,((e,t)=>(c(),u(v,{key:e.name},[t===Y.value?(c(),u("div",Bt,[(c(!0),u(v,null,p(e.items,(e=>(c(),u("button",{key:e,type:"button",title:e,onClick:t=>pe(`:${e}:`)},[Q.value?(c(),u("img",{key:0,class:"wl-emoji",src:J.value.map[e],alt:e,loading:"lazy",referrerPolicy:"no-referrer"},null,8,Ft)):f("v-if",!0)],8,Wt)))),128))])):f("v-if",!0)],64)))),128)),J.value.tabs.length>1?(c(),u("div",Kt,[(c(!0),u(v,null,p(J.value.tabs,((e,t)=>(c(),u("button",{key:e.name,type:"button",class:h(["wl-tab",{active:Y.value===t}]),onClick:e=>Y.value=t},[d("img",{class:"wl-emoji",src:e.icon,alt:e.name,title:e.name,loading:"lazy",referrerPolicy:"no-referrer"},null,8,Gt)],10,qt)))),128))])):f("v-if",!0)],2)])]),e.replyId||e.edit?.objectId?(c(),u("button",{key:1,type:"button",class:"wl-close",title:s(ue).cancelReply,onClick:n[6]||(n[6]=n=>t.$emit(e.replyId?"cancelReply":"cancelEdit"))},[C(s(O),{size:24})],8,Zt)):f("v-if",!0)]))}}),Yt=xe(Jt,[["__file","CommentBox.vue"]]);const Xt=["id"],Qt={class:"wl-user","aria-hidden":"true"},en=["src"],tn={class:"wl-card"},nn={class:"wl-head"},an=["href"],ln={key:1,class:"wl-nick"},on=["textContent"],rn=["textContent"],sn=["textContent"],cn=["textContent"],un=["textContent"],dn={class:"wl-comment-actions"},mn=["title"],vn=["textContent"],pn=["title"],hn={class:"wl-meta","aria-hidden":"true"},gn=["data-value","textContent"],fn=["data-value","textContent"],yn=["data-value","textContent"],wn=["innerHTML"],bn={key:1,class:"wl-admin-actions"},kn={class:"wl-comment-status"},Cn=["disabled","onClick","textContent"],$n={key:3,class:"wl-quote"};var Ln=xe(t({__name:"CommentCard",props:{comment:null,edit:{default:null},rootId:null,reply:{default:null}},emits:["log","submit","delete","edit","like","status","sticky","reply"],setup(e){const t=e,a=["approved","waiting","spam"],i=n("config"),o=ee(),r=z(),y=he(),w=l((()=>i.value.locale)),b=l((()=>{const{link:e}=t.comment;return e?Xe(e)?e:`https://${e}`:""})),k=l((()=>o.value.includes(t.comment.objectId))),$=l((()=>lt(t.comment.insertedAt,r.value,w.value))),L=l((()=>"administrator"===y.value.type)),x=l((()=>t.comment.user_id&&y.value.objectId===t.comment.user_id)),I=l((()=>t.comment.objectId===t.reply?.objectId)),R=l((()=>t.comment.objectId===t.edit?.objectId));return(t,n)=>{const l=j("CommentCard",!0);return c(),u("div",{id:e.comment.objectId,class:"wl-item"},[d("div",Qt,[e.comment.avatar?(c(),u("img",{key:0,src:e.comment.avatar},null,8,en)):f("v-if",!0),e.comment.type?(c(),g(s(K),{key:1})):f("v-if",!0)]),d("div",tn,[d("div",nn,[s(b)?(c(),u("a",{key:0,class:"wl-nick",href:s(b),target:"_blank",rel:"noopener noreferrer"},m(e.comment.nick),9,an)):(c(),u("span",ln,m(e.comment.nick),1)),"administrator"===e.comment.type?(c(),u("span",{key:2,class:"wl-badge",textContent:m(s(w).admin)},null,8,on)):f("v-if",!0),e.comment.label?(c(),u("span",{key:3,class:"wl-badge",textContent:m(e.comment.label)},null,8,rn)):f("v-if",!0),e.comment.sticky?(c(),u("span",{key:4,class:"wl-badge",textContent:m(s(w).sticky)},null,8,sn)):f("v-if",!0),void 0!==e.comment.level&&e.comment.level>=0?(c(),u("span",{key:5,class:h(`wl-badge level${e.comment.level}`),textContent:m(s(w)[`level${e.comment.level}`]||`Level ${e.comment.level}`)},null,10,cn)):f("v-if",!0),d("span",{class:"wl-time",textContent:m(s($))},null,8,un),d("div",dn,[s(L)||s(x)?(c(),u("button",{key:0,type:"button",class:"wl-edit",onClick:n[0]||(n[0]=()=>t.$emit("edit",e.comment))},[C(s(F))])):f("v-if",!0),s(L)||s(x)?(c(),u("button",{key:1,type:"button",class:"wl-delete",onClick:n[1]||(n[1]=n=>t.$emit("delete",e.comment))},[C(s(P))])):f("v-if",!0),d("button",{type:"button",class:"wl-like",title:s(k)?s(w).cancelLike:s(w).like,onClick:n[2]||(n[2]=n=>t.$emit("like",e.comment))},[C(s(D),{active:s(k)},null,8,["active"]),"like"in e.comment?(c(),u("span",{key:0,textContent:m(e.comment.like)},null,8,vn)):f("v-if",!0)],8,mn),d("button",{type:"button",class:h(["wl-reply",{active:s(I)}]),title:s(I)?s(w).cancelReply:s(w).reply,onClick:n[3]||(n[3]=n=>t.$emit("reply",s(I)?null:e.comment))},[C(s(W))],10,pn)])]),d("div",hn,[e.comment.addr?(c(),u("span",{key:0,class:"wl-addr","data-value":e.comment.addr,textContent:m(e.comment.addr)},null,8,gn)):f("v-if",!0),e.comment.browser?(c(),u("span",{key:1,class:"wl-browser","data-value":e.comment.browser,textContent:m(e.comment.browser)},null,8,fn)):f("v-if",!0),e.comment.os?(c(),u("span",{key:2,class:"wl-os","data-value":e.comment.os,textContent:m(e.comment.os)},null,8,yn)):f("v-if",!0)]),s(R)?f("v-if",!0):(c(),u("div",{key:0,class:"wl-content",innerHTML:e.comment.comment},null,8,wn)),s(L)&&!s(R)?(c(),u("div",bn,[d("span",kn,[(c(),u(v,null,p(a,(n=>d("button",{key:n,type:"submit",class:h(`wl-btn wl-${n}`),disabled:e.comment.status===n,onClick:a=>t.$emit("status",{status:n,comment:e.comment}),textContent:m(s(w)[n])},null,10,Cn))),64))]),s(L)&&!e.comment.rid?(c(),u("button",{key:0,type:"submit",class:"wl-btn wl-sticky",onClick:n[4]||(n[4]=n=>t.$emit("sticky",e.comment))},m(e.comment.sticky?s(w).unsticky:s(w).sticky),1)):f("v-if",!0)])):f("v-if",!0),s(I)||s(R)?(c(),u("div",{key:2,class:h({"wl-reply-wrapper":s(I),"wl-edit-wrapper":s(R)})},[C(Yt,{edit:e.edit,"reply-id":e.reply?.objectId,"reply-user":e.comment.nick,"root-id":e.rootId,onLog:n[5]||(n[5]=e=>t.$emit("log")),onCancelReply:n[6]||(n[6]=e=>t.$emit("reply",null)),onCancelEdit:n[7]||(n[7]=e=>t.$emit("edit",null)),onSubmit:n[8]||(n[8]=e=>t.$emit("submit",e))},null,8,["edit","reply-id","reply-user","root-id"])],2)):f("v-if",!0),e.comment.children?(c(),u("div",$n,[(c(!0),u(v,null,p(e.comment.children,(a=>(c(),g(l,{key:a.objectId,comment:a,reply:e.reply,edit:e.edit,"root-id":e.rootId,onLog:n[9]||(n[9]=e=>t.$emit("log")),onDelete:n[10]||(n[10]=e=>t.$emit("delete",e)),onEdit:n[11]||(n[11]=e=>t.$emit("edit",e)),onLike:n[12]||(n[12]=e=>t.$emit("like",e)),onReply:n[13]||(n[13]=e=>t.$emit("reply",e)),onStatus:n[14]||(n[14]=e=>t.$emit("status",e)),onSticky:n[15]||(n[15]=e=>t.$emit("sticky",e)),onSubmit:n[16]||(n[16]=e=>t.$emit("submit",e))},null,8,["comment","reply","edit","root-id"])))),128))])):f("v-if",!0)])],8,Xt)}}}),[["__file","CommentCard.vue"]]);const xn="2.14.4",In={"data-waline":""},Rn={class:"wl-meta-head"},En={class:"wl-count"},jn=["textContent"],Sn={class:"wl-sort"},_n=["onClick"],An={class:"wl-cards"},zn={key:1,class:"wl-operation"},Un=["textContent"],Mn={key:0,class:"wl-loading"},Hn=["textContent"],On={key:2,class:"wl-operation"},Pn=["textContent"],Vn={key:3,class:"wl-power"},Tn=d("a",{href:"https://github.com/walinejs/waline",target:"_blank",rel:"noopener noreferrer"}," Waline ",-1);var Dn=t({__name:"WalineComment",props:["serverURL","path","meta","requiredMeta","dark","commentSorting","lang","locale","pageSize","wordLimit","emoji","login","highlighter","texRenderer","imageUploader","search","copyright","recaptchaV3Key","reaction"],setup(e){const t=e,n={latest:"insertedAt_desc",oldest:"insertedAt_asc",hottest:"like_desc"},y=Object.keys(n),w=he(),b=ee(),k=a("loading"),$=a(0),L=a(1),x=a(0),I=l((()=>(({serverURL:e,path:t=location.pathname,lang:n=("undefined"==typeof navigator?"en-US":navigator.language),locale:a,emoji:l=Ae,meta:i=["nick","mail","link"],requiredMeta:o=[],dark:r=!1,pageSize:s=10,wordLimit:c,imageUploader:u,highlighter:d,texRenderer:m,copyright:v=!0,login:p="enable",search:h,reaction:g,recaptchaV3Key:f="",commentSorting:y="latest",...w})=>({serverURL:Qe(e),path:Je(t),locale:{...Ze[n]||Ze["en-US"],..."object"==typeof a?a:{}},wordLimit:et(c),meta:_e(i),requiredMeta:_e(o),imageUploader:tt(u,ze),highlighter:tt(d,Te),texRenderer:tt(m,Ue),lang:Object.keys(Ze).includes(n)?n:"en-US",dark:r,emoji:"boolean"==typeof l?l?Ae:[]:l,pageSize:s,login:p,copyright:v,search:!1!==h&&("object"==typeof h?h:Me(n)),recaptchaV3Key:f,reaction:Array.isArray(g)?g:!0===g?He:[],commentSorting:y,...w}))(t))),R=a(I.value.commentSorting),j=a([]),_=a(null),A=a(null),z=l((()=>{return"string"==typeof(e=I.value.dark)?"auto"===e?`@media(prefers-color-scheme:dark){body${nt}}`:`${e}${nt}`:!0===e?`:root${nt}`:"";var e})),M=l((()=>I.value.locale));let H;U(z);const O=e=>{const{serverURL:t,path:a,pageSize:l}=I.value,i=new AbortController;k.value="loading",H?.(),(({serverURL:e,lang:t,path:n,page:a,pageSize:l,sortBy:i,signal:o,token:r})=>{const s={};return r&&(s.Authorization=`Bearer ${r}`),fetch(`${e}/comment?path=${encodeURIComponent(n)}&pageSize=${l}&page=${a}&lang=${t}&sortBy=${i}`,{signal:o,headers:s}).then((e=>e.json())).then((e=>J(e,"Get comment data")))})({serverURL:t,lang:I.value.lang,path:a,pageSize:l,sortBy:n[R.value],page:e,signal:i.signal,token:w.value?.token}).then((t=>{k.value="success",$.value=t.count,j.value.push(...t.data),L.value=e,x.value=t.totalPages})).catch((e=>{"AbortError"!==e.name&&(console.error(e.message),k.value="error")})),H=i.abort.bind(i)},P=()=>O(L.value+1),V=()=>{$.value=0,j.value=[],O(1)},T=e=>{_.value=e},D=e=>{A.value=e},N=e=>{if(A.value)A.value.comment=e.comment,A.value.orig=e.orig;else if(e.rid){const t=j.value.find((({objectId:t})=>t===e.rid));if(!t)return;Array.isArray(t.children)||(t.children=[]),t.children.push(e)}else j.value.unshift(e)},B=async({comment:e,status:t})=>{if(e.status===t)return;const{serverURL:n,lang:a}=I.value;await X({serverURL:n,lang:a,token:w.value?.token,objectId:e.objectId,comment:{status:t}}),e.status=t},W=async e=>{if(e.rid)return;const{serverURL:t,lang:n}=I.value;await X({serverURL:t,lang:n,token:w.value?.token,objectId:e.objectId,comment:{sticky:e.sticky?0:1}}),e.sticky=!e.sticky},F=async({objectId:e})=>{if(!confirm("Are you sure you want to delete this comment?"))return;const{serverURL:t,lang:n}=I.value;await(({serverURL:e,lang:t,token:n,objectId:a})=>fetch(`${e}/comment/${a}?lang=${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${n}`}}).then((e=>e.json())).then((e=>J(e,"Delete comment"))))({serverURL:t,lang:n,token:w.value?.token,objectId:e}),j.value.some(((t,n)=>t.objectId===e?(j.value=j.value.filter(((e,t)=>t!==n)),!0):t.children.some(((a,l)=>a.objectId===e&&(j.value[n].children=t.children.filter(((e,t)=>t!==l)),!0)))))},K=async e=>{const{serverURL:t,lang:n}=I.value,{objectId:a}=e,l=b.value.includes(a);await X({serverURL:t,lang:n,objectId:a,token:w.value?.token,comment:{like:!l}}),l?b.value=b.value.filter((e=>e!==a)):(b.value=[...b.value,a],b.value.length>50&&(b.value=b.value.slice(-50))),e.like=(e.like||0)+(l?-1:1)};return S("config",I),i((()=>{o((()=>[t.serverURL,t.path]),(()=>V()),{immediate:!0})})),r((()=>H?.())),(e,t)=>(c(),u("div",In,[C(Ie),_.value?f("v-if",!0):(c(),g(Yt,{key:0,onLog:V,onSubmit:N})),d("div",Rn,[d("div",En,[$.value?(c(),u("span",{key:0,class:"wl-num",textContent:m($.value)},null,8,jn)):f("v-if",!0),E(" "+m(s(M).comment),1)]),d("ul",Sn,[(c(!0),u(v,null,p(s(y),(e=>(c(),u("li",{key:e,class:h([e===R.value?"active":""]),onClick:t=>(e=>{R.value!==e&&(R.value=e,V())})(e)},m(s(M)[e]),11,_n)))),128))])]),d("div",An,[(c(!0),u(v,null,p(j.value,(e=>(c(),g(Ln,{key:e.objectId,"root-id":e.objectId,comment:e,reply:_.value,edit:A.value,onLog:V,onReply:T,onEdit:D,onSubmit:N,onStatus:B,onDelete:F,onSticky:W,onLike:K},null,8,["root-id","comment","reply","edit"])))),128))]),"error"===k.value?(c(),u("div",zn,[d("button",{type:"button",class:"wl-btn",onClick:V,textContent:m(s(M).refresh)},null,8,Un)])):(c(),u(v,{key:2},["loading"===k.value?(c(),u("div",Mn,[C(s(q),{size:30})])):j.value.length?L.value<x.value?(c(),u("div",On,[d("button",{type:"button",class:"wl-btn",onClick:P,textContent:m(s(M).more)},null,8,Pn)])):f("v-if",!0):(c(),u("div",{key:1,class:"wl-empty",textContent:m(s(M).sofa)},null,8,Hn))],64)),s(I).copyright?(c(),u("div",Vn,[E(" Powered by "),Tn,E(" v"+m(s(xn)),1)])):f("v-if",!0)]))}}),Nn=xe(Dn,[["__file","WalineComment.vue"]]);export{Nn as Waline,xn as version};
|
|
1
|
+
import{h as e,defineComponent as t,inject as n,ref as a,computed as l,onMounted as i,watch as o,onUnmounted as r,unref as s,openBlock as c,createElementBlock as u,createElementVNode as d,toDisplayString as m,Fragment as v,renderList as p,normalizeClass as h,createBlock as g,createCommentVNode as f,onBeforeUnmount as y,normalizeStyle as w,nextTick as b,reactive as k,createVNode as C,withDirectives as $,vModelDynamic as L,isRef as x,vModelText as I,vShow as R,createTextVNode as E,resolveComponent as j,provide as S}from"vue";import{useStorage as _,useDebounceFn as A,useNow as z,useStyleTag as U}from"@vueuse/core";import M from"autosize";import{marked as H}from"marked";const O=({size:t})=>e("svg",{class:"wl-close-icon",viewBox:"0 0 1024 1024",width:t,height:t},[e("path",{d:"M697.173 85.333h-369.92c-144.64 0-241.92 101.547-241.92 252.587v348.587c0 150.613 97.28 252.16 241.92 252.16h369.92c144.64 0 241.494-101.547 241.494-252.16V337.92c0-151.04-96.854-252.587-241.494-252.587z",fill:"currentColor"}),e("path",{d:"m640.683 587.52-75.947-75.861 75.904-75.862a37.29 37.29 0 0 0 0-52.778 37.205 37.205 0 0 0-52.779 0l-75.946 75.818-75.862-75.946a37.419 37.419 0 0 0-52.821 0 37.419 37.419 0 0 0 0 52.821l75.947 75.947-75.776 75.733a37.29 37.29 0 1 0 52.778 52.821l75.776-75.776 75.947 75.947a37.376 37.376 0 0 0 52.779-52.821z",fill:"#888"})]),P=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"m341.013 394.667 27.755 393.45h271.83l27.733-393.45h64.106l-28.01 397.952a64 64 0 0 1-63.83 59.498H368.768a64 64 0 0 1-63.83-59.52l-28.053-397.93h64.128zm139.307 19.818v298.667h-64V414.485h64zm117.013 0v298.667h-64V414.485h64zM181.333 288h640v64h-640v-64zm453.483-106.667v64h-256v-64h256z",fill:"red"})),V=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"M563.2 463.3 677 540c1.7 1.2 3.7 1.8 5.8 1.8.7 0 1.4-.1 2-.2 2.7-.5 5.1-2.1 6.6-4.4l25.3-37.8c1.5-2.3 2.1-5.1 1.6-7.8s-2.1-5.1-4.4-6.6l-73.6-49.1 73.6-49.1c2.3-1.5 3.9-3.9 4.4-6.6.5-2.7 0-5.5-1.6-7.8l-25.3-37.8a10.1 10.1 0 0 0-6.6-4.4c-.7-.1-1.3-.2-2-.2-2.1 0-4.1.6-5.8 1.8l-113.8 76.6c-9.2 6.2-14.7 16.4-14.7 27.5.1 11 5.5 21.3 14.7 27.4zM387 348.8h-45.5c-5.7 0-10.4 4.7-10.4 10.4v153.3c0 5.7 4.7 10.4 10.4 10.4H387c5.7 0 10.4-4.7 10.4-10.4V359.2c0-5.7-4.7-10.4-10.4-10.4zm333.8 241.3-41-20a10.3 10.3 0 0 0-8.1-.5c-2.6.9-4.8 2.9-5.9 5.4-30.1 64.9-93.1 109.1-164.4 115.2-5.7.5-9.9 5.5-9.5 11.2l3.9 45.5c.5 5.3 5 9.5 10.3 9.5h.9c94.8-8 178.5-66.5 218.6-152.7 2.4-5 .3-11.2-4.8-13.6zm186-186.1c-11.9-42-30.5-81.4-55.2-117.1-24.1-34.9-53.5-65.6-87.5-91.2-33.9-25.6-71.5-45.5-111.6-59.2-41.2-14-84.1-21.1-127.8-21.1h-1.2c-75.4 0-148.8 21.4-212.5 61.7-63.7 40.3-114.3 97.6-146.5 165.8-32.2 68.1-44.3 143.6-35.1 218.4 9.3 74.8 39.4 145 87.3 203.3.1.2.3.3.4.5l36.2 38.4c1.1 1.2 2.5 2.1 3.9 2.6 73.3 66.7 168.2 103.5 267.5 103.5 73.3 0 145.2-20.3 207.7-58.7 37.3-22.9 70.3-51.5 98.1-85 27.1-32.7 48.7-69.5 64.2-109.1 15.5-39.7 24.4-81.3 26.6-123.8 2.4-43.6-2.5-87-14.5-129zm-60.5 181.1c-8.3 37-22.8 72-43 104-19.7 31.1-44.3 58.6-73.1 81.7-28.8 23.1-61 41-95.7 53.4-35.6 12.7-72.9 19.1-110.9 19.1-82.6 0-161.7-30.6-222.8-86.2l-34.1-35.8c-23.9-29.3-42.4-62.2-55.1-97.7-12.4-34.7-18.8-71-19.2-107.9-.4-36.9 5.4-73.3 17.1-108.2 12-35.8 30-69.2 53.4-99.1 31.7-40.4 71.1-72 117.2-94.1 44.5-21.3 94-32.6 143.4-32.6 49.3 0 97 10.8 141.8 32 34.3 16.3 65.3 38.1 92 64.8 26.1 26 47.5 56 63.6 89.2 16.2 33.2 26.6 68.5 31 105.1 4.6 37.5 2.7 75.3-5.6 112.3z",fill:"currentColor"})),T=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},[e("path",{d:"M784 112H240c-88 0-160 72-160 160v480c0 88 72 160 160 160h544c88 0 160-72 160-160V272c0-88-72-160-160-160zm96 640c0 52.8-43.2 96-96 96H240c-52.8 0-96-43.2-96-96V272c0-52.8 43.2-96 96-96h544c52.8 0 96 43.2 96 96v480z",fill:"currentColor"}),e("path",{d:"M352 480c52.8 0 96-43.2 96-96s-43.2-96-96-96-96 43.2-96 96 43.2 96 96 96zm0-128c17.6 0 32 14.4 32 32s-14.4 32-32 32-32-14.4-32-32 14.4-32 32-32zm462.4 379.2-3.2-3.2-177.6-177.6c-25.6-25.6-65.6-25.6-91.2 0l-80 80-36.8-36.8c-25.6-25.6-65.6-25.6-91.2 0L200 728c-4.8 6.4-8 14.4-8 24 0 17.6 14.4 32 32 32 9.6 0 16-3.2 22.4-9.6L380.8 640l134.4 134.4c6.4 6.4 14.4 9.6 24 9.6 17.6 0 32-14.4 32-32 0-9.6-4.8-17.6-9.6-24l-52.8-52.8 80-80L769.6 776c6.4 4.8 12.8 8 20.8 8 17.6 0 32-14.4 32-32 0-8-3.2-16-8-20.8z",fill:"currentColor"})]),D=({active:t=!1})=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},[e("path",{d:"M850.654 323.804c-11.042-25.625-26.862-48.532-46.885-68.225-20.022-19.61-43.258-34.936-69.213-45.73-26.78-11.124-55.124-16.727-84.375-16.727-40.622 0-80.256 11.123-114.698 32.135A214.79 214.79 0 0 0 512 241.819a214.79 214.79 0 0 0-23.483-16.562c-34.442-21.012-74.076-32.135-114.698-32.135-29.25 0-57.595 5.603-84.375 16.727-25.872 10.711-49.19 26.12-69.213 45.73-20.105 19.693-35.843 42.6-46.885 68.225-11.453 26.615-17.303 54.877-17.303 83.963 0 27.439 5.603 56.03 16.727 85.117 9.31 24.307 22.659 49.52 39.715 74.981 27.027 40.293 64.188 82.316 110.33 124.915 76.465 70.615 152.189 119.394 155.402 121.371l19.528 12.525c8.652 5.52 19.776 5.52 28.427 0l19.529-12.525c3.213-2.06 78.854-50.756 155.401-121.371 46.143-42.6 83.304-84.622 110.33-124.915 17.057-25.46 30.487-50.674 39.716-74.981 11.124-29.087 16.727-57.678 16.727-85.117.082-29.086-5.768-57.348-17.221-83.963z"+(t?"":"M512 761.5S218.665 573.55 218.665 407.767c0-83.963 69.461-152.023 155.154-152.023 60.233 0 112.473 33.618 138.181 82.727 25.708-49.109 77.948-82.727 138.18-82.727 85.694 0 155.155 68.06 155.155 152.023C805.335 573.551 512 761.5 512 761.5z"),fill:t?"red":"currentColor"})]),N=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},[e("path",{d:"M710.816 654.301c70.323-96.639 61.084-230.578-23.705-314.843-46.098-46.098-107.183-71.109-172.28-71.109-65.008 0-126.092 25.444-172.28 71.109-45.227 46.098-70.756 107.183-70.756 172.106 0 64.923 25.444 126.007 71.194 172.106 46.099 46.098 107.184 71.109 172.28 71.109 51.414 0 100.648-16.212 142.824-47.404l126.53 126.006c7.058 7.06 16.297 10.979 26.406 10.979 10.105 0 19.343-3.919 26.402-10.979 14.467-14.467 14.467-38.172 0-52.723L710.816 654.301zm-315.107-23.265c-65.88-65.88-65.88-172.54 0-238.42 32.069-32.07 74.245-49.149 119.471-49.149 45.227 0 87.407 17.603 119.472 49.149 65.88 65.879 65.88 172.539 0 238.42-63.612 63.178-175.242 63.178-238.943 0zm0 0",fill:"currentColor"}),e("path",{d:"M703.319 121.603H321.03c-109.8 0-199.469 89.146-199.469 199.38v382.034c0 109.796 89.236 199.38 199.469 199.38h207.397c20.653 0 37.384-16.645 37.384-37.299 0-20.649-16.731-37.296-37.384-37.296H321.03c-68.582 0-124.352-55.77-124.352-124.267V321.421c0-68.496 55.77-124.267 124.352-124.267h382.289c68.582 0 124.352 55.771 124.352 124.267V524.72c0 20.654 16.736 37.299 37.385 37.299 20.654 0 37.384-16.645 37.384-37.299V320.549c-.085-109.8-89.321-198.946-199.121-198.946zm0 0",fill:"currentColor"})]),B=()=>e("svg",{width:"16",height:"16",ariaHidden:"true"},e("path",{d:"M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z",fill:"currentColor"})),W=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"M810.667 213.333a64 64 0 0 1 64 64V704a64 64 0 0 1-64 64H478.336l-146.645 96.107a21.333 21.333 0 0 1-33.024-17.856V768h-85.334a64 64 0 0 1-64-64V277.333a64 64 0 0 1 64-64h597.334zm0 64H213.333V704h149.334v63.296L459.243 704h351.424V277.333zm-271.36 213.334v64h-176.64v-64h176.64zm122.026-128v64H362.667v-64h298.666z",fill:"currentColor"})),F=()=>e("svg",{viewBox:"0 0 1024 1024",width:"24",height:"24"},e("path",{d:"M813.039 318.772L480.53 651.278H360.718V531.463L693.227 198.961C697.904 194.284 704.027 192 710.157 192C716.302 192 722.436 194.284 727.114 198.961L813.039 284.88C817.72 289.561 820 295.684 820 301.825C820 307.95 817.72 314.093 813.039 318.772ZM710.172 261.888L420.624 551.431V591.376H460.561L750.109 301.825L710.172 261.888ZM490.517 291.845H240.906V771.09H720.156V521.479C720.156 504.947 733.559 491.529 750.109 491.529C766.653 491.529 780.063 504.947 780.063 521.479V791.059C780.063 813.118 762.18 831 740.125 831H220.937C198.882 831 181 813.118 181 791.059V271.872C181 249.817 198.882 231.935 220.937 231.935H490.517C507.06 231.935 520.47 245.352 520.47 261.888C520.47 278.424 507.06 291.845 490.517 291.845Z",fill:"currentColor"})),K=()=>e("svg",{class:"verified-icon",viewBox:"0 0 1024 1024",width:"14",height:"14"},e("path",{d:"m894.4 461.56-54.4-63.2c-10.4-12-18.8-34.4-18.8-50.4v-68c0-42.4-34.8-77.2-77.2-77.2h-68c-15.6 0-38.4-8.4-50.4-18.8l-63.2-54.4c-27.6-23.6-72.8-23.6-100.8 0l-62.8 54.8c-12 10-34.8 18.4-50.4 18.4h-69.2c-42.4 0-77.2 34.8-77.2 77.2v68.4c0 15.6-8.4 38-18.4 50l-54 63.6c-23.2 27.6-23.2 72.4 0 100l54 63.6c10 12 18.4 34.4 18.4 50v68.4c0 42.4 34.8 77.2 77.2 77.2h69.2c15.6 0 38.4 8.4 50.4 18.8l63.2 54.4c27.6 23.6 72.8 23.6 100.8 0l63.2-54.4c12-10.4 34.4-18.8 50.4-18.8h68c42.4 0 77.2-34.8 77.2-77.2v-68c0-15.6 8.4-38.4 18.8-50.4l54.4-63.2c23.2-27.6 23.2-73.2-.4-100.8zm-216-25.2-193.2 193.2a30 30 0 0 1-42.4 0l-96.8-96.8a30.16 30.16 0 0 1 0-42.4c11.6-11.6 30.8-11.6 42.4 0l75.6 75.6 172-172c11.6-11.6 30.8-11.6 42.4 0 11.6 11.6 11.6 30.8 0 42.4z",fill:"#27ae60"})),q=({size:t})=>e("svg",{width:t,height:t,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"},e("circle",{cx:50,cy:50,fill:"none",stroke:"currentColor",strokeWidth:"4",r:"40","stroke-dasharray":"85 30"},e("animateTransform",{attributeName:"transform",type:"rotate",repeatCount:"indefinite",dur:"1s",values:"0 50 50;360 50 50",keyTimes:"0;1"}))),G=()=>e("svg",{width:24,height:24,fill:"currentcolor",viewBox:"0 0 24 24"},[e("path",{style:"transform: translateY(0.5px)",d:"M18.968 10.5H15.968V11.484H17.984V12.984H15.968V15H14.468V9H18.968V10.5V10.5ZM8.984 9C9.26533 9 9.49967 9.09367 9.687 9.281C9.87433 9.46833 9.968 9.70267 9.968 9.984V10.5H6.499V13.5H8.468V12H9.968V14.016C9.968 14.2973 9.87433 14.5317 9.687 14.719C9.49967 14.9063 9.26533 15 8.984 15H5.984C5.70267 15 5.46833 14.9063 5.281 14.719C5.09367 14.5317 5 14.2973 5 14.016V9.985C5 9.70367 5.09367 9.46933 5.281 9.282C5.46833 9.09467 5.70267 9.001 5.984 9.001H8.984V9ZM11.468 9H12.968V15H11.468V9V9Z"}),e("path",{d:"M18.5 3H5.75C3.6875 3 2 4.6875 2 6.75V18C2 20.0625 3.6875 21.75 5.75 21.75H18.5C20.5625 21.75 22.25 20.0625 22.25 18V6.75C22.25 4.6875 20.5625 3 18.5 3ZM20.75 18C20.75 19.2375 19.7375 20.25 18.5 20.25H5.75C4.5125 20.25 3.5 19.2375 3.5 18V6.75C3.5 5.5125 4.5125 4.5 5.75 4.5H18.5C19.7375 4.5 20.75 5.5125 20.75 6.75V18Z"})]),Z={"Content-Type":"application/json"},J=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`${t} failed with ${e.errno}: ${e.errmsg}`);return e},Y=({serverURL:e,lang:t,path:n,type:a,action:l})=>fetch(`${e}/article?lang=${t}`,{method:"POST",headers:Z,body:JSON.stringify({path:n,type:a,action:l})}).then((e=>e.json())),X=({serverURL:e,lang:t,token:n,objectId:a,comment:l})=>fetch(`${e}/comment/${a}?lang=${t}`,{method:"PUT",headers:{...Z,Authorization:`Bearer ${n}`},body:JSON.stringify(l)}).then((e=>e.json())).then((e=>J(e,"Update comment")));let Q=null;const ee=()=>Q||(Q=_("WALINE_LIKE",[]));let te=null;const ne=()=>te??(te=_("WALINE_REACTION",{}));var ae="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},le={},ie={},oe={},re=ae&&ae.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(l,i){function o(e){try{s(a.next(e))}catch(e){i(e)}}function r(e){try{s(a.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?l(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,r)}s((a=a.apply(e,t||[])).next())}))},se=ae&&ae.__generator||function(e,t){var n,a,l,i,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return i={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function r(i){return function(r){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,a&&(l=2&i[0]?a.return:i[0]?a.throw||((l=a.return)&&l.call(a),0):a.next)&&!(l=l.call(a,i[1])).done)return l;switch(a=0,l&&(i=[2&i[0],l.value]),i[0]){case 0:case 1:l=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,a=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(l=o.trys,(l=l.length>0&&l[l.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!l||i[1]>l[0]&&i[1]<l[3])){o.label=i[1];break}if(6===i[0]&&o.label<l[1]){o.label=l[1],l=i;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(i);break}l[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],a=0}finally{n=l=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,r])}}};Object.defineProperty(oe,"__esModule",{value:!0}),oe.ReCaptchaInstance=void 0;var ce=function(){function e(e,t,n){this.siteKey=e,this.recaptchaID=t,this.recaptcha=n,this.styleContainer=null}return e.prototype.execute=function(e){return re(this,void 0,void 0,(function(){return se(this,(function(t){return[2,this.recaptcha.enterprise?this.recaptcha.enterprise.execute(this.recaptchaID,{action:e}):this.recaptcha.execute(this.recaptchaID,{action:e})]}))}))},e.prototype.getSiteKey=function(){return this.siteKey},e.prototype.hideBadge=function(){null===this.styleContainer&&(this.styleContainer=document.createElement("style"),this.styleContainer.innerHTML=".grecaptcha-badge{visibility:hidden !important;}",document.head.appendChild(this.styleContainer))},e.prototype.showBadge=function(){null!==this.styleContainer&&(document.head.removeChild(this.styleContainer),this.styleContainer=null)},e}();oe.ReCaptchaInstance=ce,Object.defineProperty(ie,"__esModule",{value:!0}),ie.getInstance=ie.load=void 0;var ue,de=oe;!function(e){e[e.NOT_LOADED=0]="NOT_LOADED",e[e.LOADING=1]="LOADING",e[e.LOADED=2]="LOADED"}(ue||(ue={}));var me=function(){function e(){}return e.load=function(t,n){if(void 0===n&&(n={}),"undefined"==typeof document)return Promise.reject(new Error("This is a library for the browser!"));if(e.getLoadingState()===ue.LOADED)return e.instance.getSiteKey()===t?Promise.resolve(e.instance):Promise.reject(new Error("reCAPTCHA already loaded with different site key!"));if(e.getLoadingState()===ue.LOADING)return t!==e.instanceSiteKey?Promise.reject(new Error("reCAPTCHA already loaded with different site key!")):new Promise((function(t,n){e.successfulLoadingConsumers.push((function(e){return t(e)})),e.errorLoadingRunnable.push((function(e){return n(e)}))}));e.instanceSiteKey=t,e.setLoadingState(ue.LOADING);var a=new e;return new Promise((function(l,i){a.loadScript(t,n.useRecaptchaNet||!1,n.useEnterprise||!1,n.renderParameters?n.renderParameters:{},n.customUrl).then((function(){e.setLoadingState(ue.LOADED);var i=a.doExplicitRender(grecaptcha,t,n.explicitRenderParameters?n.explicitRenderParameters:{},n.useEnterprise||!1),o=new de.ReCaptchaInstance(t,i,grecaptcha);e.successfulLoadingConsumers.forEach((function(e){return e(o)})),e.successfulLoadingConsumers=[],n.autoHideBadge&&o.hideBadge(),e.instance=o,l(o)})).catch((function(t){e.errorLoadingRunnable.forEach((function(e){return e(t)})),e.errorLoadingRunnable=[],i(t)}))}))},e.getInstance=function(){return e.instance},e.setLoadingState=function(t){e.loadingState=t},e.getLoadingState=function(){return null===e.loadingState?ue.NOT_LOADED:e.loadingState},e.prototype.loadScript=function(t,n,a,l,i){var o=this;void 0===n&&(n=!1),void 0===a&&(a=!1),void 0===l&&(l={}),void 0===i&&(i="");var r=document.createElement("script");r.setAttribute("recaptcha-v3-script","");var s="https://www.google.com/recaptcha/api.js";n&&(s=a?"https://recaptcha.net/recaptcha/enterprise.js":"https://recaptcha.net/recaptcha/api.js"),a&&(s="https://www.google.com/recaptcha/enterprise.js"),i&&(s=i),l.render&&(l.render=void 0);var c=this.buildQueryString(l);return r.src=s+"?render=explicit"+c,new Promise((function(t,n){r.addEventListener("load",o.waitForScriptToLoad((function(){t(r)}),a),!1),r.onerror=function(t){e.setLoadingState(ue.NOT_LOADED),n(t)},document.head.appendChild(r)}))},e.prototype.buildQueryString=function(e){return Object.keys(e).length<1?"":"&"+Object.keys(e).filter((function(t){return!!e[t]})).map((function(t){return t+"="+e[t]})).join("&")},e.prototype.waitForScriptToLoad=function(t,n){var a=this;return function(){void 0===window.grecaptcha?setTimeout((function(){a.waitForScriptToLoad(t,n)}),e.SCRIPT_LOAD_DELAY):n?window.grecaptcha.enterprise.ready((function(){t()})):window.grecaptcha.ready((function(){t()}))}},e.prototype.doExplicitRender=function(e,t,n,a){var l={sitekey:t,badge:n.badge,size:n.size,tabindex:n.tabindex};return n.container?a?e.enterprise.render(n.container,l):e.render(n.container,l):a?e.enterprise.render(l):e.render(l)},e.loadingState=null,e.instance=null,e.instanceSiteKey=null,e.successfulLoadingConsumers=[],e.errorLoadingRunnable=[],e.SCRIPT_LOAD_DELAY=25,e}();ie.load=me.load,ie.getInstance=me.getInstance,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ReCaptchaInstance=e.getInstance=e.load=void 0;var t=ie;Object.defineProperty(e,"load",{enumerable:!0,get:function(){return t.load}}),Object.defineProperty(e,"getInstance",{enumerable:!0,get:function(){return t.getInstance}});var n=oe;Object.defineProperty(e,"ReCaptchaInstance",{enumerable:!0,get:function(){return n.ReCaptchaInstance}})}(le);const ve={};let pe=null;const he=()=>pe??(pe=_("WALINE_USER",{})),ge={key:0,class:"wl-reaction"},fe=["textContent"],ye={class:"wl-reaction-list"},we=["onClick"],be={class:"wl-reaction-img"},ke=["src","alt"],Ce=["textContent"],$e=["textContent"];var Le=t({__name:"ArticleReaction",setup(e,{expose:t}){t();const y=ne(),w=n("config"),b=a(-1),k=a([]),C=l((()=>w.value.locale)),$=l((()=>w.value.reaction.length>0)),L=l((()=>{const{reaction:e,path:t}=w.value;return e.map(((e,n)=>({icon:e,desc:C.value[`reaction${n}`],active:y.value[t]===n})))}));let x;const I=async()=>{if($.value){const{serverURL:e,lang:t,path:n,reaction:a}=w.value,l=new AbortController;x=l.abort.bind(l);const i=await(({serverURL:e,lang:t,paths:n,type:a,signal:l})=>fetch(`${e}/article?path=${encodeURIComponent(n.join(","))}&type=${encodeURIComponent(a.join(","))}&lang=${t}`,{signal:l}).then((e=>e.json())))({serverURL:e,lang:t,paths:[n],type:a.map(((e,t)=>`reaction${t}`)),signal:l.signal});if(Array.isArray(i)||"number"==typeof i)return;k.value=a.map(((e,t)=>i[`reaction${t}`]))}};return i((()=>{o((()=>[w.value.serverURL,w.value.path]),(()=>{I()}),{immediate:!0})})),r((()=>x?.())),(e,t)=>s(L).length?(c(),u("div",ge,[d("div",{class:"wl-reaction-title",textContent:m(s(C).reactionTitle)},null,8,fe),d("ul",ye,[(c(!0),u(v,null,p(s(L),(({active:e,icon:t,desc:n},a)=>(c(),u("li",{key:a,class:h(["wl-reaction-item",{active:e}]),onClick:e=>(async e=>{if(-1===b.value){const{serverURL:t,lang:n,path:a}=w.value,l=y.value[a];b.value=e,void 0!==l&&(await Y({serverURL:t,lang:n,path:a,type:`reaction${l}`,action:"desc"}),k.value[l]=Math.max(k.value[l]-1,0)),l!==e&&(await Y({serverURL:t,lang:n,path:a,type:`reaction${e}`}),k.value[e]=(k.value[e]||0)+1),l===e?delete y.value[a]:y.value[a]=e,b.value=-1}})(a)},[d("div",be,[d("img",{src:t,alt:n},null,8,ke),b.value===a?(c(),g(s(q),{key:0,class:"wl-reaction-loading"})):(c(),u("div",{key:1,class:"wl-reaction-votes",textContent:m(k.value[a]||0)},null,8,Ce))]),d("div",{class:"wl-reaction-text",textContent:m(n)},null,8,$e)],10,we)))),128))])])):f("v-if",!0)}}),xe=(e,t)=>{const n=e.__vccOpts||e;for(const[e,a]of t)n[e]=a;return n},Ie=xe(Le,[["__file","ArticleReaction.vue"]]);const Re=["data-index"],Ee=["src","title","onClick"];var je=xe(t({__name:"ImageWall",props:{items:{default:()=>[]},columnWidth:{default:300},gap:{default:0}},emits:["insert"],setup(e,{expose:t}){const n=e;t();let l=null;const r=a(null),m=a({}),h=a([]),k=()=>{const e=Math.floor((r.value.getBoundingClientRect().width+n.gap)/(n.columnWidth+n.gap));return e>0?e:1},C=async e=>{if(e>=n.items.length)return;await b();const t=Array.from(r.value?.children||[]).reduce(((e,t)=>t.getBoundingClientRect().height<e.getBoundingClientRect().height?t:e));h.value[Number(t.dataset.index)].push(e),await C(e+1)},$=async(e=!1)=>{if(h.value.length===k()&&!e)return;var t;h.value=(t=k(),new Array(t).fill(null).map((()=>[])));const n=window.scrollY;await C(0),window.scrollTo({top:n})},L=e=>{m.value[e.target.src]=!0};return i((()=>{$(!0),l=new ResizeObserver((()=>{$()})),l.observe(r.value),o((()=>[n.items]),(()=>{m.value={},$(!0)})),o((()=>[n.columnWidth,n.gap]),(()=>{$()}))})),y((()=>l.unobserve(r.value))),(t,n)=>(c(),u("div",{ref_key:"wall",ref:r,class:"wl-gallery",style:w({gap:`${e.gap}px`})},[(c(!0),u(v,null,p(h.value,((n,a)=>(c(),u("div",{key:a,class:"wl-gallery-column","data-index":a,style:w({gap:`${e.gap}px`})},[(c(!0),u(v,null,p(n,(n=>(c(),u(v,{key:n},[m.value[e.items[n].src]?f("v-if",!0):(c(),g(s(q),{key:0,size:36,style:{margin:"20px auto"}})),d("img",{class:"wl-gallery-item",src:e.items[n].src,title:e.items[n].title,loading:"lazy",onLoad:L,onClick:a=>t.$emit("insert",``)},null,40,Ee)],64)))),128))],12,Re)))),128))],4))}}),[["__file","ImageWall.vue"]]);const Se=["nick","mail","link"],_e=e=>e.filter((e=>Se.includes(e))),Ae=["//unpkg.com/@waline/emojis@1.1.0/weibo"],ze=e=>new Promise(((t,n)=>{if(e.size>128e3)return n(new Error("File too large! File size limit 128KB"));const a=new FileReader;a.readAsDataURL(e),a.onload=()=>t(a.result?.toString()||""),a.onerror=n})),Ue=e=>!0===e?'<p class="wl-tex">Tex is not available in preview</p>':'<span class="wl-tex">Tex is not available in preview</span>',Me=e=>{const t=async(t,n={})=>fetch(`https://api.giphy.com/v1/gifs/${t}?${new URLSearchParams({lang:e,limit:"20",rating:"g",api_key:"6CIMLkNMMOhRcXPoMCPkFy4Ybk2XUiMp",...n}).toString()}`).then((e=>e.json())).then((({data:e})=>e.map((e=>({title:e.title,src:e.images.downsized_medium.url})))));return{search:e=>t("search",{q:e,offset:"0"}),default:()=>t("trending",{}),more:(e,n=0)=>t("search",{q:e,offset:n.toString()})}},He=["//unpkg.com/@waline/emojis/tieba/tieba_agree.png","//unpkg.com/@waline/emojis/tieba/tieba_look_down.png","//unpkg.com/@waline/emojis/tieba/tieba_sunglasses.png","//unpkg.com/@waline/emojis/tieba/tieba_pick_nose.png","//unpkg.com/@waline/emojis/tieba/tieba_awkward.png","//unpkg.com/@waline/emojis/tieba/tieba_sleep.png"],Oe=new RegExp(`(${/[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|\w+/.source}|${/</.source})|((?:${/(?:^|\s)\/\/(.+?)$/gm.source})|(?:${/\/\*([\S\s]*?)\*\//gm.source}))`,"gmi"),Pe=["23AC69","91C132","F19726","E8552D","1AAB8E","E1147F","2980C1","1BA1E6","9FA0A0","F19726","E30B20","E30B20","A3338B"],Ve={},Te=e=>{let t=0;return e.replace(Oe,((e,n,a)=>{if(a)return`<span style="color: slategray">${a}</span>`;if("<"===n)return"<";let l;Ve[n]?l=Ve[n]:(l=Pe[t],Ve[n]=l);const i=`<span style="color: #${l}">${n}</span>`;return t=++t%Pe.length,i}))},De=["nick","nickError","mail","mailError","link","optional","placeholder","sofa","submit","like","cancelLike","reply","cancelReply","comment","refresh","more","preview","emoji","uploadImage","seconds","minutes","hours","days","now","uploading","login","logout","admin","sticky","word","wordHint","anonymous","level0","level1","level2","level3","level4","level5","gif","gifSearchPlaceholder","profile","approved","waiting","spam","unsticky","oldest","latest","hottest","reactionTitle"],Ne=e=>Object.fromEntries(e.map(((e,t)=>[De[t],e])));var Be=Ne(["NickName","NickName cannot be less than 3 bytes.","E-Mail","Please confirm your email address.","Website","Optional","Comment here...","No comment yet.","Submit","Like","Cancel like","Reply","Cancel reply","Comments","Refresh","Load More...","Preview","Emoji","Upload Image","seconds ago","minutes ago","hours ago","days ago","just now","Uploading","Login","logout","Admin","Sticky","Words","Please input comments between $0 and $1 words!\n Current word number: $2","Anonymous","Dwarves","Hobbits","Ents","Wizards","Elves","Maiar","GIF","Search GIF","Profile","Approved","Waiting","Spam","Unsticky","Oldest","Latest","Hottest","What do you think?"]),We=Ne(["ニックネーム","3バイト以上のニックネームをご入力ください.","メールアドレス","メールアドレスをご確認ください.","サイト","オプション","ここにコメント","コメントしましょう~","提出する","Like","Cancel like","返信する","キャンセル","コメント","更新","さらに読み込む","プレビュー","絵文字","画像をアップロード","秒前","分前","時間前","日前","たっだ今","アップロード","ログインする","ログアウト","管理者","トップに置く","ワード","コメントは $0 から $1 ワードの間でなければなりません!\n 現在の単語番号: $2","匿名","うえにん","なかにん","しもおし","特にしもおし","かげ","なぬし","GIF","探す GIF","個人情報","承認済み","待っている","スパム","べたつかない","逆順","正順","人気順","どう思いますか?"]),Fe=Ne(["昵称","昵称不能少于3个字符","邮箱","请填写正确的邮件地址","网址","可选","欢迎评论","来发评论吧~","提交","喜欢","取消喜欢","回复","取消回复","评论","刷新","加载更多...","预览","表情","上传图片","秒前","分钟前","小时前","天前","刚刚","正在上传","登录","退出","博主","置顶","字","评论字数应在 $0 到 $1 字之间!\n当前字数:$2","匿名","潜水","冒泡","吐槽","活跃","话痨","传说","表情包","搜索表情包","个人资料","通过","待审核","垃圾","取消置顶","按倒序","按正序","按热度","你认为这篇文章怎么样?"]),Ke=Ne(["暱稱","暱稱不能少於3個字元","郵箱","請填寫正確的郵件地址","網址","可選","歡迎評論","來發評論吧~","提交","喜歡","取消喜歡","回覆","取消回覆","評論","刷新","載入更多...","預覽","表情","上傳圖片","秒前","分鐘前","小時前","天前","剛剛","正在上傳","登錄","退出","博主","置頂","字","評論字數應在 $0 到 $1 字之間!\n當前字數:$2","匿名","潛水","冒泡","吐槽","活躍","話癆","傳說","表情包","搜索表情包","個人資料","通過","待審核","垃圾","取消置頂","按倒序","按正序","按熱度","你認為這篇文章怎麼樣?"]),qe=Ne(["Apelido","Apelido não pode ser menor que 3 bytes.","E-Mail","Por favor, confirme seu endereço de e-mail.","Website","Opcional","Comente aqui...","Nenhum comentário, ainda.","Enviar","Like","Cancel like","Responder","Cancelar resposta","Comentários","Refrescar","Carregar Mais...","Visualizar","Emoji","Enviar Imagem","segundos atrás","minutos atrás","horas atrás","dias atrás","agora mesmo","Enviando","Entrar","Sair","Admin","Sticky","Palavras","Favor enviar comentário com $0 a $1 palavras!\n Número de palavras atuais: $2","Anônimo","Dwarves","Hobbits","Ents","Wizards","Elves","Maiar","GIF","Pesquisar GIF","informação pessoal","Aprovado","Espera","Spam","Unsticky","Mais velho","Mais recentes","Mais quente","O que você acha?"]),Ge=Ne(["Псевдоним","Никнейм не может быть меньше 3 байт.","Эл. адрес","Пожалуйста, подтвердите адрес вашей электронной почты.","Веб-сайт","Необязательный","Комментарий здесь...","Пока нет комментариев.","Отправить","Like","Cancel like","Отвечать","Отменить ответ","Комментарии","Обновить","Загрузи больше...","Превью","эмодзи","Загрузить изображение","секунд назад","несколько минут назад","несколько часов назад","дней назад","прямо сейчас","Загрузка","Авторизоваться","Выход из системы","Админ","Липкий","Слова","Пожалуйста, введите комментарии от $0 до $1 слов!\nНомер текущего слова: $2","Анонимный","Dwarves","Hobbits","Ents","Wizards","Elves","Maiar","GIF","Поиск GIF","Персональные данные","Одобренный","Ожидающий","Спам","Нелипкий","самый старый","последний","самый горячий","Что вы думаете?"]);const Ze={zh:Fe,"zh-cn":Fe,"zh-CN":Fe,"zh-tw":Ke,"zh-TW":Ke,en:Be,"en-US":Be,"en-us":Be,jp:We,ja:We,"jp-jp":We,"jp-JP":We,"pt-br":qe,"pt-BR":qe,ru:Ge,"ru-ru":Ge,"ru-RU":Ge},Je=e=>{try{e=decodeURI(e)}catch(e){}return e},Ye=(e="")=>e.replace(/\/$/u,""),Xe=e=>/^(https?:)?\/\//.test(e),Qe=e=>{const t=Ye(e);return Xe(t)?t:`https://${t}`},et=e=>Array.isArray(e)?e:!!e&&[0,e],tt=(e,t)=>"function"==typeof e?e:!1!==e&&t,nt="{--waline-white:#000;--waline-light-grey:#666;--waline-dark-grey:#999;--waline-color:#888;--waline-bgcolor:#1e1e1e;--waline-bgcolor-light:#272727;--waline-bgcolor-hover: #444;--waline-border-color:#333;--waline-disable-bgcolor:#444;--waline-disable-color:#272727;--waline-bq-color:#272727;--waline-info-bgcolor:#272727;--waline-info-color:#666}",at=(e,t)=>{let n=e.toString();for(;n.length<t;)n="0"+n;return n},lt=(e,t,n)=>{if(!e)return"";const a="string"==typeof e?new Date(-1!==e.indexOf(" ")?e.replace(/-/g,"/"):e):e,l=t.getTime()-a.getTime(),i=Math.floor(l/864e5);if(0===i){const e=l%864e5,t=Math.floor(e/36e5);if(0===t){const t=e%36e5,a=Math.floor(t/6e4);if(0===a){const e=t%6e4;return`${Math.round(e/1e3)} ${n.seconds}`}return`${a} ${n.minutes}`}return`${t} ${n.hours}`}return i<0?n.now:i<8?`${i} ${n.days}`:(e=>{const t=at(e.getDate(),2),n=at(e.getMonth()+1,2);return`${at(e.getFullYear(),2)}-${n}-${t}`})(a)},it=e=>{const t=_("WALINE_EMOJI",{}),n=Boolean(/@[0-9]+\.[0-9]+\.[0-9]+/.test(e));if(n){const n=t.value[e];if(n)return Promise.resolve(n)}return fetch(`${e}/info.json`).then((e=>e.json())).then((a=>{const l={folder:e,...a};return n&&(t.value[e]=l),l}))},ot=(e,t="",n="",a="")=>`${t?`${t}/`:""}${n}${e}${a?`.${a}`:""}`,rt=e=>e.type.includes("image"),st=e=>{const t=Array.from(e).find(rt);return t?t.getAsFile():null},ct=/\$.*?\$/,ut=/^\$(.*?)\$/,dt=/^(?:\s{0,3})\$\$((?:[^\n]|\n[^\n])+?)\n{0,1}\$\$/,mt=(e="",t={})=>e.replace(/:(.+?):/g,((e,n)=>t[n]?`<img class="wl-emoji" src="${t[n]}" alt="${n}">`:e)),vt=(e,{emojiMap:t,highlighter:n,texRenderer:a})=>{if(H.setOptions({highlight:n||void 0,breaks:!0,smartLists:!0,smartypants:!0}),a){const e=(e=>[{name:"blockMath",level:"block",tokenizer(t){const n=dt.exec(t);if(null!==n)return{type:"html",raw:n[0],text:e(!0,n[1])}}},{name:"inlineMath",level:"inline",start(e){const t=e.search(ct);return-1!==t?t:e.length},tokenizer(t){const n=ut.exec(t);if(null!==n)return{type:"html",raw:n[0],text:e(!1,n[1])}}}])(a);H.use({extensions:e})}return H.parse(mt(e,t))},pt={class:"wl-comment"},ht={key:0,class:"wl-login-info"},gt={class:"wl-avatar"},ft=["title"],yt=["title"],wt=["src"],bt=["title","textContent"],kt={class:"wl-panel"},Ct=["for","textContent"],$t=["id","onUpdate:modelValue","name","type"],Lt=["placeholder"],xt={class:"wl-preview"},It=d("hr",null,null,-1),Rt=["innerHTML"],Et={class:"wl-footer"},jt={class:"wl-actions"},St={href:"https://guides.github.com/features/mastering-markdown/",title:"Markdown Guide","aria-label":"Markdown is supported",class:"wl-action",target:"_blank",rel:"noopener noreferrer"},_t=["title"],At=["title"],zt=["title"],Ut=["title"],Mt={class:"wl-info"},Ht={class:"wl-text-number"},Ot={key:0},Pt=["textContent"],Vt=["textContent"],Tt=["disabled"],Dt=["placeholder"],Nt={key:0,class:"wl-loading"},Bt={key:0,class:"wl-tab-wrapper"},Wt=["title","onClick"],Ft=["src","alt"],Kt={key:0,class:"wl-tabs"},qt=["onClick"],Gt=["src","alt","title"],Zt=["title"];var Jt=t({__name:"CommentBox",props:{edit:{default:null},rootId:{default:""},replyId:{default:""},replyUser:{default:""}},emits:["log","cancelEdit","cancelReply","submit"],setup(e,{expose:t,emit:y}){const w=e;t();const b=n("config"),j=_("WALINE_COMMENT_BOX_EDITOR",""),S=_("WALINE_USER_META",{nick:"",mail:"",link:""}),z=he(),U=a({}),H=a(null),P=a(null),D=a(null),W=a(null),F=a(null),K=a(null),Z=a(null),J=a({tabs:[],map:{}}),Y=a(0),Q=a(!1),ee=a(!1),te=a(!1),ne=a(""),ae=a(0),ie=k({loading:!0,list:[]}),oe=a(0),re=a(!1),se=a(""),ce=a(!1),ue=a(!1),de=l((()=>b.value.locale)),me=l((()=>Boolean(z.value?.token))),pe=l((()=>!1!==b.value.imageUploader)),ge=e=>{const t=H.value,n=t.selectionStart,a=t.selectionEnd||0,l=t.scrollTop;j.value=t.value.substring(0,n)+e+t.value.substring(a,t.value.length),t.focus(),t.selectionStart=n+e.length,t.selectionEnd=n+e.length,t.scrollTop=l},fe=e=>{const t=e.key;(e.ctrlKey||e.metaKey)&&"Enter"===t&&Ce()},ye=e=>{const t=`![${b.value.locale.uploading} ${e.name}]()`;return ge(t),Promise.resolve().then((()=>b.value.imageUploader(e))).then((n=>{j.value=j.value.replace(t,`\r\n`)})).catch((e=>{alert(e.message),j.value=j.value.replace(t,"")}))},we=e=>{if(e.dataTransfer?.items){const t=st(e.dataTransfer.items);t&&pe.value&&(ye(t),e.preventDefault())}},be=e=>{if(e.clipboardData){const t=st(e.clipboardData.items);t&&pe.value&&ye(t)}},ke=()=>{const e=P.value;e.files&&pe.value&&ye(e.files[0]).then((()=>{e.value=""}))},Ce=async()=>{const{serverURL:e,lang:t,login:n,wordLimit:a,requiredMeta:l}=b.value;let i="";b.value.recaptchaV3Key&&(i=await(e=>{const t=ve[e]??(ve[e]=le.load(e,{useRecaptchaNet:!0,autoHideBadge:!0}));return{execute:e=>t.then((t=>t.execute(e)))}})(b.value.recaptchaV3Key).execute("social"));const o={comment:se.value,nick:S.value.nick,mail:S.value.mail,link:S.value.link,ua:navigator.userAgent,url:b.value.path,recaptchaV3:i};if(z.value?.token)o.nick=z.value.display_name,o.mail=z.value.email,o.link=z.value.url;else{if("force"===n)return;if(l.indexOf("nick")>-1&&!o.nick)return U.value.nick?.focus(),alert(de.value.nickError);if(l.indexOf("mail")>-1&&!o.mail||o.mail&&!/^\w(?:[\w._-]*\w)?@(?:\w(?:[\w-]*\w)?\.)*\w+$/.exec(o.mail))return U.value.mail?.focus(),alert(de.value.mailError);if(!o.comment)return void H.value?.focus();o.nick||(o.nick=de.value.anonymous)}if(!re.value)return alert(de.value.wordHint.replace("$0",a[0].toString()).replace("$1",a[1].toString()).replace("$2",ae.value.toString()));o.comment=mt(o.comment,J.value.map),w.replyId&&w.rootId&&(o.pid=w.replyId,o.rid=w.rootId,o.at=w.replyUser),ce.value=!0;const r={serverURL:e,lang:t,token:z.value?.token,comment:o};(w.edit?X({objectId:w.edit.objectId,...r}):(({serverURL:e,lang:t,token:n,comment:a})=>{const l={"Content-Type":"application/json"};return n&&(l.Authorization=`Bearer ${n}`),fetch(`${e}/comment?lang=${t}`,{method:"POST",headers:l,body:JSON.stringify(a)}).then((e=>e.json()))})(r)).then((e=>{if(ce.value=!1,e.errmsg)return alert(e.errmsg);y("submit",e.data),j.value="",ne.value="",w.replyId&&y("cancelReply"),w.edit?.objectId&&y("cancelEdit")})).catch((e=>{ce.value=!1,alert(e.message)}))},$e=e=>{e.preventDefault();const{lang:t,serverURL:n}=b.value;(({lang:e,serverURL:t})=>{const n=(window.innerWidth-450)/2,a=(window.innerHeight-450)/2,l=window.open(`${t}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${n},top=${a},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return l?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const t=({data:n})=>{n&&"object"==typeof n&&"userInfo"===n.type&&n.data.token&&(l?.close(),window.removeEventListener("message",t),e(n.data))};window.addEventListener("message",t)}))})({serverURL:n,lang:t}).then((e=>{z.value=e,(e.remember?localStorage:sessionStorage).setItem("WALINE_USER",JSON.stringify(e)),y("log")}))},Le=()=>{z.value={},localStorage.setItem("WALINE_USER","null"),sessionStorage.setItem("WALINE_USER","null"),y("log")},xe=e=>{e.preventDefault();const{lang:t,serverURL:n}=b.value,a=(window.innerWidth-800)/2,l=(window.innerHeight-800)/2,i=new URLSearchParams({lng:t,token:z.value.token});window.open(`${n}/ui/profile?${i.toString()}`,"_blank",`width=800,height=800,left=${a},top=${l},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`)?.postMessage({type:"TOKEN",data:z.value.token},"*")},Ie=e=>{D.value?.contains(e.target)||W.value?.contains(e.target)||(Q.value=!1),F.value?.contains(e.target)||K.value?.contains(e.target)||(ee.value=!1)},Re=async e=>{const{scrollTop:t,clientHeight:n,scrollHeight:a}=e.target,l=(n+t)/a,i=b.value.search,o=Z.value?.value||"";if(l<.9||ie.loading||ue.value)return;ie.loading=!0;(i.more&&ie.list.length?await i.more(o,ie.list.length):await i.search(o)).length?ie.list=[...ie.list,...i.more&&ie.list.length?await i.more(o,ie.list.length):await i.search(o)]:ue.value=!0,ie.loading=!1,setTimeout((()=>{e.target.scrollTop=t}),50)},Ee=A((e=>{ie.list=[],ue.value=!1,Re(e)}),300);o([b,ae],(([e,t])=>{const{wordLimit:n}=e;n?t<n[0]&&0!==n[0]?(oe.value=n[0],re.value=!1):t>n[1]?(oe.value=n[1],re.value=!1):(oe.value=n[1],re.value=!0):(oe.value=0,re.value=!0)}),{immediate:!0});const Se=({data:e})=>{e&&"profile"===e.type&&(z.value={...z.value,...e.data},[localStorage,sessionStorage].filter((e=>e.getItem("WALINE_USER"))).forEach((e=>e.setItem("WALINE_USER",JSON.stringify(z)))))};return i((()=>{document.body.addEventListener("click",Ie),window.addEventListener("message",Se),w.edit?.objectId&&(j.value=w.edit.orig),o(ee,(async e=>{if(!e)return;const t=b.value.search;Z.value&&(Z.value.value=""),ie.loading=!0,ie.list=t.default?await t.default():await t.search(""),ie.loading=!1})),o((()=>j.value),(e=>{const{highlighter:t,texRenderer:n}=b.value;se.value=e,ne.value=vt(e,{emojiMap:J.value.map,highlighter:t,texRenderer:n}),ae.value=(e=>(e=>e.match(/[\w\d\s\u00C0-\u024F]+/giu)||[])(e).reduce(((e,t)=>e+(""===t.trim()?0:t.trim().split(/\s+/u).length)),0)+(e=>e.match(/[\u4E00-\u9FA5]/gu)||[])(e).length)(e),e?M(H.value):M.destroy(H.value)}),{immediate:!0}),o((()=>b.value.emoji),(e=>{return(t=e,Promise.all(t.map((e=>"string"==typeof e?it(Ye(e)):Promise.resolve(e)))).then((e=>{const t={tabs:[],map:{}};return e.forEach((e=>{const{name:n,folder:a,icon:l,prefix:i,type:o,items:r}=e;t.tabs.push({name:n,icon:ot(l,a,i,o),items:r.map((e=>{const n=`${i||""}${e}`;return t.map[n]=ot(e,a,i,o),n}))})})),t}))).then((e=>{J.value=e}));var t}),{immediate:!0})})),r((()=>{document.body.removeEventListener("click",Ie),window.removeEventListener("message",Se)})),(t,n)=>(c(),u("div",pt,["disable"!==s(b).login&&s(me)&&!e.edit?.objectId?(c(),u("div",ht,[d("div",gt,[d("button",{type:"submit",class:"wl-logout-btn",title:s(de).logout,onClick:Le},[C(s(O),{size:14})],8,ft),d("a",{href:"#",class:"wl-login-nick","aria-label":"Profile",title:s(de).profile,onClick:xe},[d("img",{src:s(z).avatar,alt:"avatar"},null,8,wt)],8,yt)]),d("a",{href:"#",class:"wl-login-nick","aria-label":"Profile",title:s(de).profile,onClick:xe,textContent:m(s(z).display_name)},null,8,bt)])):f("v-if",!0),d("div",kt,["force"!==s(b).login&&s(b).meta.length&&!s(me)?(c(),u("div",{key:0,class:h(["wl-header",`item${s(b).meta.length}`])},[(c(!0),u(v,null,p(s(b).meta,(e=>(c(),u("div",{key:e,class:"wl-header-item"},[d("label",{for:`wl-${e}`,textContent:m(s(de)[e]+(s(b).requiredMeta.includes(e)||!s(b).requiredMeta.length?"":`(${s(de).optional})`))},null,8,Ct),$(d("input",{id:`wl-${e}`,ref_for:!0,ref:t=>{t&&(U.value[e]=t)},"onUpdate:modelValue":t=>s(S)[e]=t,class:h(["wl-input",`wl-${e}`]),name:e,type:"mail"===e?"email":"text"},null,10,$t),[[L,s(S)[e]]])])))),128))],2)):f("v-if",!0),$(d("textarea",{id:"wl-edit",ref_key:"editorRef",ref:H,"onUpdate:modelValue":n[0]||(n[0]=e=>x(j)?j.value=e:null),class:"wl-editor",placeholder:e.replyUser?`@${e.replyUser}`:s(de).placeholder,onKeydown:fe,onDrop:we,onPaste:be},null,40,Lt),[[I,s(j)]]),$(d("div",xt,[It,d("h4",null,m(s(de).preview)+":",1),d("div",{class:"wl-content",innerHTML:ne.value},null,8,Rt)],512),[[R,te.value]]),d("div",Et,[d("div",jt,[d("a",St,[C(s(B))]),$(d("button",{ref_key:"emojiButtonRef",ref:D,type:"button",class:h(["wl-action",{active:Q.value}]),title:s(de).emoji,onClick:n[1]||(n[1]=e=>Q.value=!Q.value)},[C(s(V))],10,_t),[[R,J.value.tabs.length]]),s(b).search?(c(),u("button",{key:0,ref_key:"gifButtonRef",ref:F,type:"button",class:h(["wl-action",{active:ee.value}]),title:s(de).gif,onClick:n[2]||(n[2]=e=>ee.value=!ee.value)},[C(s(G))],10,At)):f("v-if",!0),d("input",{id:"wl-image-upload",ref_key:"imageUploadRef",ref:P,class:"upload",type:"file",accept:".png,.jpg,.jpeg,.webp,.bmp,.gif",onChange:ke},null,544),s(pe)?(c(),u("label",{key:1,for:"wl-image-upload",class:"wl-action",title:s(de).uploadImage},[C(s(T))],8,zt)):f("v-if",!0),d("button",{type:"button",class:h(["wl-action",{active:te.value}]),title:s(de).preview,onClick:n[3]||(n[3]=e=>te.value=!te.value)},[C(s(N))],10,Ut)]),d("div",Mt,[d("div",Ht,[E(m(ae.value)+" ",1),s(b).wordLimit?(c(),u("span",Ot,[E(" / "),d("span",{class:h({illegal:!re.value}),textContent:m(oe.value)},null,10,Pt)])):f("v-if",!0),E(" "+m(s(de).word),1)]),"disable"===s(b).login||s(me)?f("v-if",!0):(c(),u("button",{key:0,type:"button",class:"wl-btn",onClick:$e,textContent:m(s(de).login)},null,8,Vt)),"force"!==s(b).login||s(me)?(c(),u("button",{key:1,type:"submit",class:"primary wl-btn",title:"Cmd|Ctrl + Enter",disabled:ce.value,onClick:Ce},[ce.value?(c(),g(s(q),{key:0,size:16})):(c(),u(v,{key:1},[E(m(s(de).submit),1)],64))],8,Tt)):f("v-if",!0)]),d("div",{ref_key:"gifPopupRef",ref:K,class:h(["wl-gif-popup",{display:ee.value}])},[d("input",{ref_key:"gifSearchInputRef",ref:Z,type:"text",placeholder:s(de).gifSearchPlaceholder,onInput:n[4]||(n[4]=(...e)=>s(Ee)&&s(Ee)(...e))},null,40,Dt),C(je,{items:ie.list,"column-width":200,gap:6,onInsert:n[5]||(n[5]=e=>ge(e)),onScroll:Re},null,8,["items"]),ie.loading?(c(),u("div",Nt,[C(s(q),{size:30})])):f("v-if",!0)],2),d("div",{ref_key:"emojiPopupRef",ref:W,class:h(["wl-emoji-popup",{display:Q.value}])},[(c(!0),u(v,null,p(J.value.tabs,((e,t)=>(c(),u(v,{key:e.name},[t===Y.value?(c(),u("div",Bt,[(c(!0),u(v,null,p(e.items,(e=>(c(),u("button",{key:e,type:"button",title:e,onClick:t=>ge(`:${e}:`)},[Q.value?(c(),u("img",{key:0,class:"wl-emoji",src:J.value.map[e],alt:e,loading:"lazy",referrerPolicy:"no-referrer"},null,8,Ft)):f("v-if",!0)],8,Wt)))),128))])):f("v-if",!0)],64)))),128)),J.value.tabs.length>1?(c(),u("div",Kt,[(c(!0),u(v,null,p(J.value.tabs,((e,t)=>(c(),u("button",{key:e.name,type:"button",class:h(["wl-tab",{active:Y.value===t}]),onClick:e=>Y.value=t},[d("img",{class:"wl-emoji",src:e.icon,alt:e.name,title:e.name,loading:"lazy",referrerPolicy:"no-referrer"},null,8,Gt)],10,qt)))),128))])):f("v-if",!0)],2)])]),e.replyId||e.edit?.objectId?(c(),u("button",{key:1,type:"button",class:"wl-close",title:s(de).cancelReply,onClick:n[6]||(n[6]=n=>t.$emit(e.replyId?"cancelReply":"cancelEdit"))},[C(s(O),{size:24})],8,Zt)):f("v-if",!0)]))}}),Yt=xe(Jt,[["__file","CommentBox.vue"]]);const Xt=["id"],Qt={class:"wl-user","aria-hidden":"true"},en=["src"],tn={class:"wl-card"},nn={class:"wl-head"},an=["href"],ln={key:1,class:"wl-nick"},on=["textContent"],rn=["textContent"],sn=["textContent"],cn=["textContent"],un=["textContent"],dn={class:"wl-comment-actions"},mn=["title"],vn=["textContent"],pn=["title"],hn={class:"wl-meta","aria-hidden":"true"},gn=["data-value","textContent"],fn=["data-value","textContent"],yn=["data-value","textContent"],wn=["innerHTML"],bn={key:1,class:"wl-admin-actions"},kn={class:"wl-comment-status"},Cn=["disabled","onClick","textContent"],$n={key:3,class:"wl-quote"};var Ln=xe(t({__name:"CommentCard",props:{comment:null,edit:{default:null},rootId:null,reply:{default:null}},emits:["log","submit","delete","edit","like","status","sticky","reply"],setup(e){const t=e,a=["approved","waiting","spam"],i=n("config"),o=ee(),r=z(),y=he(),w=l((()=>i.value.locale)),b=l((()=>{const{link:e}=t.comment;return e?Xe(e)?e:`https://${e}`:""})),k=l((()=>o.value.includes(t.comment.objectId))),$=l((()=>lt(t.comment.insertedAt,r.value,w.value))),L=l((()=>"administrator"===y.value.type)),x=l((()=>t.comment.user_id&&y.value.objectId===t.comment.user_id)),I=l((()=>t.comment.objectId===t.reply?.objectId)),R=l((()=>t.comment.objectId===t.edit?.objectId));return(t,n)=>{const l=j("CommentCard",!0);return c(),u("div",{id:e.comment.objectId,class:"wl-card-item"},[d("div",Qt,[e.comment.avatar?(c(),u("img",{key:0,src:e.comment.avatar},null,8,en)):f("v-if",!0),e.comment.type?(c(),g(s(K),{key:1})):f("v-if",!0)]),d("div",tn,[d("div",nn,[s(b)?(c(),u("a",{key:0,class:"wl-nick",href:s(b),target:"_blank",rel:"noopener noreferrer"},m(e.comment.nick),9,an)):(c(),u("span",ln,m(e.comment.nick),1)),"administrator"===e.comment.type?(c(),u("span",{key:2,class:"wl-badge",textContent:m(s(w).admin)},null,8,on)):f("v-if",!0),e.comment.label?(c(),u("span",{key:3,class:"wl-badge",textContent:m(e.comment.label)},null,8,rn)):f("v-if",!0),e.comment.sticky?(c(),u("span",{key:4,class:"wl-badge",textContent:m(s(w).sticky)},null,8,sn)):f("v-if",!0),void 0!==e.comment.level&&e.comment.level>=0?(c(),u("span",{key:5,class:h(`wl-badge level${e.comment.level}`),textContent:m(s(w)[`level${e.comment.level}`]||`Level ${e.comment.level}`)},null,10,cn)):f("v-if",!0),d("span",{class:"wl-time",textContent:m(s($))},null,8,un),d("div",dn,[s(L)||s(x)?(c(),u("button",{key:0,type:"button",class:"wl-edit",onClick:n[0]||(n[0]=()=>t.$emit("edit",e.comment))},[C(s(F))])):f("v-if",!0),s(L)||s(x)?(c(),u("button",{key:1,type:"button",class:"wl-delete",onClick:n[1]||(n[1]=n=>t.$emit("delete",e.comment))},[C(s(P))])):f("v-if",!0),d("button",{type:"button",class:"wl-like",title:s(k)?s(w).cancelLike:s(w).like,onClick:n[2]||(n[2]=n=>t.$emit("like",e.comment))},[C(s(D),{active:s(k)},null,8,["active"]),"like"in e.comment?(c(),u("span",{key:0,textContent:m(e.comment.like)},null,8,vn)):f("v-if",!0)],8,mn),d("button",{type:"button",class:h(["wl-reply",{active:s(I)}]),title:s(I)?s(w).cancelReply:s(w).reply,onClick:n[3]||(n[3]=n=>t.$emit("reply",s(I)?null:e.comment))},[C(s(W))],10,pn)])]),d("div",hn,[e.comment.addr?(c(),u("span",{key:0,class:"wl-addr","data-value":e.comment.addr,textContent:m(e.comment.addr)},null,8,gn)):f("v-if",!0),e.comment.browser?(c(),u("span",{key:1,class:"wl-browser","data-value":e.comment.browser,textContent:m(e.comment.browser)},null,8,fn)):f("v-if",!0),e.comment.os?(c(),u("span",{key:2,class:"wl-os","data-value":e.comment.os,textContent:m(e.comment.os)},null,8,yn)):f("v-if",!0)]),s(R)?f("v-if",!0):(c(),u("div",{key:0,class:"wl-content",innerHTML:e.comment.comment},null,8,wn)),s(L)&&!s(R)?(c(),u("div",bn,[d("span",kn,[(c(),u(v,null,p(a,(n=>d("button",{key:n,type:"submit",class:h(`wl-btn wl-${n}`),disabled:e.comment.status===n,onClick:a=>t.$emit("status",{status:n,comment:e.comment}),textContent:m(s(w)[n])},null,10,Cn))),64))]),s(L)&&!e.comment.rid?(c(),u("button",{key:0,type:"submit",class:"wl-btn wl-sticky",onClick:n[4]||(n[4]=n=>t.$emit("sticky",e.comment))},m(e.comment.sticky?s(w).unsticky:s(w).sticky),1)):f("v-if",!0)])):f("v-if",!0),s(I)||s(R)?(c(),u("div",{key:2,class:h({"wl-reply-wrapper":s(I),"wl-edit-wrapper":s(R)})},[C(Yt,{edit:e.edit,"reply-id":e.reply?.objectId,"reply-user":e.comment.nick,"root-id":e.rootId,onLog:n[5]||(n[5]=e=>t.$emit("log")),onCancelReply:n[6]||(n[6]=e=>t.$emit("reply",null)),onCancelEdit:n[7]||(n[7]=e=>t.$emit("edit",null)),onSubmit:n[8]||(n[8]=e=>t.$emit("submit",e))},null,8,["edit","reply-id","reply-user","root-id"])],2)):f("v-if",!0),e.comment.children?(c(),u("div",$n,[(c(!0),u(v,null,p(e.comment.children,(a=>(c(),g(l,{key:a.objectId,comment:a,reply:e.reply,edit:e.edit,"root-id":e.rootId,onLog:n[9]||(n[9]=e=>t.$emit("log")),onDelete:n[10]||(n[10]=e=>t.$emit("delete",e)),onEdit:n[11]||(n[11]=e=>t.$emit("edit",e)),onLike:n[12]||(n[12]=e=>t.$emit("like",e)),onReply:n[13]||(n[13]=e=>t.$emit("reply",e)),onStatus:n[14]||(n[14]=e=>t.$emit("status",e)),onSticky:n[15]||(n[15]=e=>t.$emit("sticky",e)),onSubmit:n[16]||(n[16]=e=>t.$emit("submit",e))},null,8,["comment","reply","edit","root-id"])))),128))])):f("v-if",!0)])],8,Xt)}}}),[["__file","CommentCard.vue"]]);const xn="2.14.6",In={"data-waline":""},Rn={class:"wl-meta-head"},En={class:"wl-count"},jn=["textContent"],Sn={class:"wl-sort"},_n=["onClick"],An={class:"wl-cards"},zn={key:1,class:"wl-operation"},Un=["textContent"],Mn={key:0,class:"wl-loading"},Hn=["textContent"],On={key:2,class:"wl-operation"},Pn=["textContent"],Vn={key:3,class:"wl-power"},Tn=d("a",{href:"https://github.com/walinejs/waline",target:"_blank",rel:"noopener noreferrer"}," Waline ",-1);var Dn=t({__name:"WalineComment",props:["serverURL","path","meta","requiredMeta","dark","commentSorting","lang","locale","pageSize","wordLimit","emoji","login","highlighter","texRenderer","imageUploader","search","copyright","recaptchaV3Key","reaction"],setup(e){const t=e,n={latest:"insertedAt_desc",oldest:"insertedAt_asc",hottest:"like_desc"},y=Object.keys(n),w=he(),b=ee(),k=a("loading"),$=a(0),L=a(1),x=a(0),I=l((()=>(({serverURL:e,path:t=location.pathname,lang:n=("undefined"==typeof navigator?"en-US":navigator.language),locale:a,emoji:l=Ae,meta:i=["nick","mail","link"],requiredMeta:o=[],dark:r=!1,pageSize:s=10,wordLimit:c,imageUploader:u,highlighter:d,texRenderer:m,copyright:v=!0,login:p="enable",search:h,reaction:g,recaptchaV3Key:f="",commentSorting:y="latest",...w})=>({serverURL:Qe(e),path:Je(t),locale:{...Ze[n]||Ze["en-US"],..."object"==typeof a?a:{}},wordLimit:et(c),meta:_e(i),requiredMeta:_e(o),imageUploader:tt(u,ze),highlighter:tt(d,Te),texRenderer:tt(m,Ue),lang:Object.keys(Ze).includes(n)?n:"en-US",dark:r,emoji:"boolean"==typeof l?l?Ae:[]:l,pageSize:s,login:p,copyright:v,search:!1!==h&&("object"==typeof h?h:Me(n)),recaptchaV3Key:f,reaction:Array.isArray(g)?g:!0===g?He:[],commentSorting:y,...w}))(t))),R=a(I.value.commentSorting),j=a([]),_=a(null),A=a(null),z=l((()=>{return"string"==typeof(e=I.value.dark)?"auto"===e?`@media(prefers-color-scheme:dark){body${nt}}`:`${e}${nt}`:!0===e?`:root${nt}`:"";var e})),M=l((()=>I.value.locale));let H;U(z);const O=e=>{const{serverURL:t,path:a,pageSize:l}=I.value,i=new AbortController;k.value="loading",H?.(),(({serverURL:e,lang:t,path:n,page:a,pageSize:l,sortBy:i,signal:o,token:r})=>{const s={};return r&&(s.Authorization=`Bearer ${r}`),fetch(`${e}/comment?path=${encodeURIComponent(n)}&pageSize=${l}&page=${a}&lang=${t}&sortBy=${i}`,{signal:o,headers:s}).then((e=>e.json())).then((e=>J(e,"Get comment data")))})({serverURL:t,lang:I.value.lang,path:a,pageSize:l,sortBy:n[R.value],page:e,signal:i.signal,token:w.value?.token}).then((t=>{k.value="success",$.value=t.count,j.value.push(...t.data),L.value=e,x.value=t.totalPages})).catch((e=>{"AbortError"!==e.name&&(console.error(e.message),k.value="error")})),H=i.abort.bind(i)},P=()=>O(L.value+1),V=()=>{$.value=0,j.value=[],O(1)},T=e=>{_.value=e},D=e=>{A.value=e},N=e=>{if(A.value)A.value.comment=e.comment,A.value.orig=e.orig;else if(e.rid){const t=j.value.find((({objectId:t})=>t===e.rid));if(!t)return;Array.isArray(t.children)||(t.children=[]),t.children.push(e)}else j.value.unshift(e)},B=async({comment:e,status:t})=>{if(e.status===t)return;const{serverURL:n,lang:a}=I.value;await X({serverURL:n,lang:a,token:w.value?.token,objectId:e.objectId,comment:{status:t}}),e.status=t},W=async e=>{if(e.rid)return;const{serverURL:t,lang:n}=I.value;await X({serverURL:t,lang:n,token:w.value?.token,objectId:e.objectId,comment:{sticky:e.sticky?0:1}}),e.sticky=!e.sticky},F=async({objectId:e})=>{if(!confirm("Are you sure you want to delete this comment?"))return;const{serverURL:t,lang:n}=I.value;await(({serverURL:e,lang:t,token:n,objectId:a})=>fetch(`${e}/comment/${a}?lang=${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${n}`}}).then((e=>e.json())).then((e=>J(e,"Delete comment"))))({serverURL:t,lang:n,token:w.value?.token,objectId:e}),j.value.some(((t,n)=>t.objectId===e?(j.value=j.value.filter(((e,t)=>t!==n)),!0):t.children.some(((a,l)=>a.objectId===e&&(j.value[n].children=t.children.filter(((e,t)=>t!==l)),!0)))))},K=async e=>{const{serverURL:t,lang:n}=I.value,{objectId:a}=e,l=b.value.includes(a);await X({serverURL:t,lang:n,objectId:a,token:w.value?.token,comment:{like:!l}}),l?b.value=b.value.filter((e=>e!==a)):(b.value=[...b.value,a],b.value.length>50&&(b.value=b.value.slice(-50))),e.like=(e.like||0)+(l?-1:1)};return S("config",I),i((()=>{o((()=>[t.serverURL,t.path]),(()=>V()),{immediate:!0})})),r((()=>H?.())),(e,t)=>(c(),u("div",In,[C(Ie),_.value?f("v-if",!0):(c(),g(Yt,{key:0,onLog:V,onSubmit:N})),d("div",Rn,[d("div",En,[$.value?(c(),u("span",{key:0,class:"wl-num",textContent:m($.value)},null,8,jn)):f("v-if",!0),E(" "+m(s(M).comment),1)]),d("ul",Sn,[(c(!0),u(v,null,p(s(y),(e=>(c(),u("li",{key:e,class:h([e===R.value?"active":""]),onClick:t=>(e=>{R.value!==e&&(R.value=e,V())})(e)},m(s(M)[e]),11,_n)))),128))])]),d("div",An,[(c(!0),u(v,null,p(j.value,(e=>(c(),g(Ln,{key:e.objectId,"root-id":e.objectId,comment:e,reply:_.value,edit:A.value,onLog:V,onReply:T,onEdit:D,onSubmit:N,onStatus:B,onDelete:F,onSticky:W,onLike:K},null,8,["root-id","comment","reply","edit"])))),128))]),"error"===k.value?(c(),u("div",zn,[d("button",{type:"button",class:"wl-btn",onClick:V,textContent:m(s(M).refresh)},null,8,Un)])):(c(),u(v,{key:2},["loading"===k.value?(c(),u("div",Mn,[C(s(q),{size:30})])):j.value.length?L.value<x.value?(c(),u("div",On,[d("button",{type:"button",class:"wl-btn",onClick:P,textContent:m(s(M).more)},null,8,Pn)])):f("v-if",!0):(c(),u("div",{key:1,class:"wl-empty",textContent:m(s(M).sofa)},null,8,Hn))],64)),s(I).copyright?(c(),u("div",Vn,[E(" Powered by "),Tn,E(" v"+m(s(xn)),1)])):f("v-if",!0)]))}}),Nn=xe(Dn,[["__file","WalineComment.vue"]]);export{Nn as Waline,xn as version};
|
|
2
2
|
//# sourceMappingURL=component.mjs.map
|