artalk 2.7.0 → 2.7.2
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/README.md +1 -1
- package/dist/Artalk.css +1 -1
- package/dist/Artalk.es.js +209 -188
- package/dist/Artalk.es.js.map +1 -0
- package/dist/Artalk.iife.js +2 -1
- package/dist/Artalk.iife.js.map +1 -0
- package/dist/Artalk.js +2 -1
- package/dist/Artalk.js.map +1 -0
- package/dist/ArtalkLite.css +1 -1
- package/dist/ArtalkLite.es.js +209 -188
- package/dist/ArtalkLite.es.js.map +1 -0
- package/dist/ArtalkLite.iife.js +2 -1
- package/dist/ArtalkLite.iife.js.map +1 -0
- package/dist/ArtalkLite.js +2 -1
- package/dist/ArtalkLite.js.map +1 -0
- package/dist/i18n/jp.js +1 -1
- package/dist/i18n/zh-TW.js +1 -1
- package/dist/src/api/_base.d.ts +7 -0
- package/dist/src/api/_options.d.ts +5 -0
- package/dist/src/artalk.d.ts +0 -2
- package/dist/src/components/checker/index.d.ts +2 -0
- package/dist/src/i18n/en.d.ts +4 -0
- package/dist/src/i18n/external.d.ts +4 -0
- package/dist/src/i18n/index.d.ts +12 -0
- package/dist/src/i18n/jp.d.ts +4 -0
- package/dist/src/i18n/zh-TW.d.ts +4 -0
- package/dist/src/lib/user.d.ts +8 -6
- package/dist/src/main.d.ts +3 -0
- package/dist/src/plugins/editor/_kit.d.ts +7 -1
- package/dist/src/service.d.ts +2 -8
- package/dist/types/event.d.ts +1 -1
- package/package.json +43 -17
- package/dist/src/components/dark-mode.d.ts +0 -2
- package/src/api/_base.ts +0 -18
- package/src/api/_options.ts +0 -25
- package/src/api/_request.ts +0 -104
- package/src/api/admin.ts +0 -18
- package/src/api/captcha.ts +0 -24
- package/src/api/comment.ts +0 -84
- package/src/api/index.ts +0 -29
- package/src/api/page.ts +0 -83
- package/src/api/site.ts +0 -51
- package/src/api/system.ts +0 -49
- package/src/api/upload.ts +0 -28
- package/src/api/user.ts +0 -132
- package/src/artalk.ts +0 -119
- package/src/comment/actions.ts +0 -83
- package/src/comment/comment.html +0 -18
- package/src/comment/comment.ts +0 -192
- package/src/comment/height-limit.ts +0 -100
- package/src/comment/index.ts +0 -3
- package/src/comment/render.ts +0 -150
- package/src/comment/renders/actions.ts +0 -114
- package/src/comment/renders/avatar.ts +0 -22
- package/src/comment/renders/content.ts +0 -39
- package/src/comment/renders/header.ts +0 -84
- package/src/comment/renders/index.ts +0 -19
- package/src/comment/renders/pending.ts +0 -12
- package/src/comment/renders/reply-at.ts +0 -16
- package/src/comment/renders/reply-to.ts +0 -24
- package/src/components/action-btn.ts +0 -170
- package/src/components/checker/admin.ts +0 -37
- package/src/components/checker/captcha-renders.ts +0 -69
- package/src/components/checker/captcha.ts +0 -26
- package/src/components/checker/index.ts +0 -192
- package/src/components/dark-mode.ts +0 -30
- package/src/components/dialog.ts +0 -62
- package/src/components/error-dialog.ts +0 -35
- package/src/components/pagination.ts +0 -153
- package/src/components/read-more-btn.ts +0 -92
- package/src/config.ts +0 -119
- package/src/context.ts +0 -146
- package/src/data.ts +0 -110
- package/src/defaults.ts +0 -61
- package/src/editor/editor.html +0 -18
- package/src/editor/editor.ts +0 -114
- package/src/editor/state.ts +0 -52
- package/src/editor/ui.ts +0 -36
- package/src/i18n/en.ts +0 -81
- package/src/i18n/external.ts +0 -10
- package/src/i18n/index.ts +0 -67
- package/src/i18n/jp.ts +0 -83
- package/src/i18n/zh-CN.ts +0 -85
- package/src/i18n/zh-TW.ts +0 -83
- package/src/layer/index.ts +0 -4
- package/src/layer/layer-manager.ts +0 -32
- package/src/layer/layer.ts +0 -39
- package/src/layer/scrollbar-helper.ts +0 -24
- package/src/layer/sidebar-layer.html +0 -8
- package/src/layer/sidebar-layer.ts +0 -155
- package/src/layer/wrap.ts +0 -77
- package/src/lib/component.ts +0 -12
- package/src/lib/detect.ts +0 -222
- package/src/lib/event-manager.ts +0 -47
- package/src/lib/highlight.ts +0 -5
- package/src/lib/marked-renderer.ts +0 -32
- package/src/lib/marked.ts +0 -72
- package/src/lib/sanitizer.ts +0 -57
- package/src/lib/ui.ts +0 -193
- package/src/lib/user.ts +0 -55
- package/src/lib/utils.ts +0 -236
- package/src/list/comment.ts +0 -20
- package/src/list/layout.ts +0 -120
- package/src/list/list.html +0 -20
- package/src/list/list.ts +0 -79
- package/src/list/nest.ts +0 -66
- package/src/list/page.ts +0 -97
- package/src/list/paginator/index.ts +0 -25
- package/src/list/paginator/read-more.ts +0 -67
- package/src/list/paginator/up-down.ts +0 -51
- package/src/main.ts +0 -5
- package/src/plugins/admin-only-elem.ts +0 -40
- package/src/plugins/conf-remoter.ts +0 -54
- package/src/plugins/dark-mode.ts +0 -12
- package/src/plugins/editor/_kit.ts +0 -57
- package/src/plugins/editor/_plug.ts +0 -60
- package/src/plugins/editor/_sample.ts +0 -8
- package/src/plugins/editor/closable.ts +0 -44
- package/src/plugins/editor/emoticons.scss +0 -72
- package/src/plugins/editor/emoticons.ts +0 -293
- package/src/plugins/editor/header-event.ts +0 -35
- package/src/plugins/editor/header-link.ts +0 -31
- package/src/plugins/editor/header-user.ts +0 -98
- package/src/plugins/editor/index.ts +0 -40
- package/src/plugins/editor/local-storage.ts +0 -36
- package/src/plugins/editor/mover.ts +0 -29
- package/src/plugins/editor/preview.scss +0 -7
- package/src/plugins/editor/preview.ts +0 -41
- package/src/plugins/editor/state-edit.ts +0 -116
- package/src/plugins/editor/state-reply.ts +0 -91
- package/src/plugins/editor/submit-add.ts +0 -33
- package/src/plugins/editor/submit-btn.ts +0 -25
- package/src/plugins/editor/submit.ts +0 -73
- package/src/plugins/editor/textarea.ts +0 -55
- package/src/plugins/editor/upload.ts +0 -145
- package/src/plugins/editor-kit.ts +0 -161
- package/src/plugins/index.ts +0 -16
- package/src/plugins/list/copyright.ts +0 -16
- package/src/plugins/list/count.ts +0 -31
- package/src/plugins/list/dropdown.ts +0 -95
- package/src/plugins/list/error-dialog.ts +0 -22
- package/src/plugins/list/fetch.ts +0 -64
- package/src/plugins/list/goto-first.ts +0 -23
- package/src/plugins/list/goto.ts +0 -72
- package/src/plugins/list/index.ts +0 -25
- package/src/plugins/list/loading.ts +0 -17
- package/src/plugins/list/no-comment.ts +0 -25
- package/src/plugins/list/reach-bottom.ts +0 -46
- package/src/plugins/list/sidebar-btn.ts +0 -39
- package/src/plugins/list/time-ticking.ts +0 -22
- package/src/plugins/list/unread-badge.ts +0 -26
- package/src/plugins/list/unread.ts +0 -38
- package/src/plugins/list/with-editor.ts +0 -59
- package/src/plugins/markdown.ts +0 -10
- package/src/plugins/stat.ts +0 -79
- package/src/plugins/version-check.ts +0 -37
- package/src/service.ts +0 -91
- package/src/style/_color.scss +0 -41
- package/src/style/_extend.scss +0 -20
- package/src/style/_variables.scss +0 -3
- package/src/style/comment.scss +0 -360
- package/src/style/editor.scss +0 -194
- package/src/style/list.scss +0 -212
- package/src/style/main.scss +0 -486
- package/src/style/pagination.scss +0 -58
- package/src/style/sidebar-layer.scss +0 -92
- package/types/config.ts +0 -153
- package/types/context.ts +0 -84
- package/types/data.ts +0 -271
- package/types/editor.ts +0 -95
- package/types/event.ts +0 -40
- package/types/global.d.ts +0 -1
- package/types/index.ts +0 -7
- package/types/plugin.ts +0 -3
- package/types/sidebar.ts +0 -3
package/dist/ArtalkLite.es.js
CHANGED
|
@@ -42,7 +42,6 @@ var __async = (__this, __arguments, generator) => {
|
|
|
42
42
|
});
|
|
43
43
|
};
|
|
44
44
|
import { marked as marked$1 } from "marked";
|
|
45
|
-
const main = "";
|
|
46
45
|
function createElement(htmlStr = "") {
|
|
47
46
|
const div = document.createElement("div");
|
|
48
47
|
div.innerHTML = htmlStr.trim();
|
|
@@ -552,13 +551,13 @@ function getDefaultExportFromCjs(x) {
|
|
|
552
551
|
}
|
|
553
552
|
var Request = NativeRequest;
|
|
554
553
|
if (Request && !Request.prototype.hasOwnProperty("signal") || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
|
|
555
|
-
Request = function Request2(input,
|
|
554
|
+
Request = function Request2(input, init2) {
|
|
556
555
|
var signal;
|
|
557
|
-
if (
|
|
558
|
-
signal =
|
|
559
|
-
delete
|
|
556
|
+
if (init2 && init2.signal) {
|
|
557
|
+
signal = init2.signal;
|
|
558
|
+
delete init2.signal;
|
|
560
559
|
}
|
|
561
|
-
var request = new NativeRequest(input,
|
|
560
|
+
var request = new NativeRequest(input, init2);
|
|
562
561
|
if (signal) {
|
|
563
562
|
Object.defineProperty(request, "signal", {
|
|
564
563
|
writable: false,
|
|
@@ -572,8 +571,8 @@ function getDefaultExportFromCjs(x) {
|
|
|
572
571
|
Request.prototype = NativeRequest.prototype;
|
|
573
572
|
}
|
|
574
573
|
var realFetch = fetch2;
|
|
575
|
-
var abortableFetch = function abortableFetch2(input,
|
|
576
|
-
var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal :
|
|
574
|
+
var abortableFetch = function abortableFetch2(input, init2) {
|
|
575
|
+
var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init2 ? init2.signal : void 0;
|
|
577
576
|
if (signal) {
|
|
578
577
|
var abortError;
|
|
579
578
|
try {
|
|
@@ -592,12 +591,12 @@ function getDefaultExportFromCjs(x) {
|
|
|
592
591
|
once: true
|
|
593
592
|
});
|
|
594
593
|
});
|
|
595
|
-
if (
|
|
596
|
-
delete
|
|
594
|
+
if (init2 && init2.signal) {
|
|
595
|
+
delete init2.signal;
|
|
597
596
|
}
|
|
598
|
-
return Promise.race([cancellation, realFetch(input,
|
|
597
|
+
return Promise.race([cancellation, realFetch(input, init2)]);
|
|
599
598
|
}
|
|
600
|
-
return realFetch(input,
|
|
599
|
+
return realFetch(input, init2);
|
|
601
600
|
};
|
|
602
601
|
return {
|
|
603
602
|
fetch: abortableFetch,
|
|
@@ -629,48 +628,6 @@ function getDefaultExportFromCjs(x) {
|
|
|
629
628
|
});
|
|
630
629
|
})(typeof self !== "undefined" ? self : commonjsGlobal);
|
|
631
630
|
});
|
|
632
|
-
const LOCAL_USER_KEY = "ArtalkUser";
|
|
633
|
-
class User {
|
|
634
|
-
constructor() {
|
|
635
|
-
__publicField(this, "data");
|
|
636
|
-
__publicField(this, "onUserChanged", null);
|
|
637
|
-
const localUser = JSON.parse(window.localStorage.getItem(LOCAL_USER_KEY) || "{}");
|
|
638
|
-
this.data = {
|
|
639
|
-
nick: localUser.nick || "",
|
|
640
|
-
email: localUser.email || "",
|
|
641
|
-
link: localUser.link || "",
|
|
642
|
-
token: localUser.token || "",
|
|
643
|
-
isAdmin: localUser.isAdmin || false
|
|
644
|
-
};
|
|
645
|
-
}
|
|
646
|
-
/** 保存用户到 localStorage 中 */
|
|
647
|
-
update(obj = {}) {
|
|
648
|
-
Object.entries(obj).forEach(([key, value]) => {
|
|
649
|
-
this.data[key] = value;
|
|
650
|
-
});
|
|
651
|
-
window.localStorage.setItem(LOCAL_USER_KEY, JSON.stringify(this.data));
|
|
652
|
-
this.onUserChanged && this.onUserChanged(this.data);
|
|
653
|
-
}
|
|
654
|
-
setOnUserChanged(fn) {
|
|
655
|
-
this.onUserChanged = fn;
|
|
656
|
-
}
|
|
657
|
-
/**
|
|
658
|
-
* Logout
|
|
659
|
-
*
|
|
660
|
-
* @description Logout will clear login status, but not clear user data (nick, email, link)
|
|
661
|
-
*/
|
|
662
|
-
logout() {
|
|
663
|
-
this.update({
|
|
664
|
-
token: "",
|
|
665
|
-
isAdmin: false
|
|
666
|
-
});
|
|
667
|
-
}
|
|
668
|
-
/** 是否已填写基本用户信息 */
|
|
669
|
-
checkHasBasicUserInfo() {
|
|
670
|
-
return !!this.data.nick && !!this.data.email;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
const UserInstance = new User();
|
|
674
631
|
const en = {
|
|
675
632
|
/* Editor */
|
|
676
633
|
placeholder: "Leave a comment",
|
|
@@ -744,7 +701,11 @@ const en = {
|
|
|
744
701
|
deleting: "Deleting",
|
|
745
702
|
deleteFail: "Delete Failed",
|
|
746
703
|
reqGot: "Request got",
|
|
747
|
-
reqAborted: "Request timed out or terminated unexpectedly"
|
|
704
|
+
reqAborted: "Request timed out or terminated unexpectedly",
|
|
705
|
+
updateMsg: "Please update Artalk {name} to get the full experience",
|
|
706
|
+
currentVersion: "Current Version",
|
|
707
|
+
ignore: "Ignore",
|
|
708
|
+
open: "Open"
|
|
748
709
|
};
|
|
749
710
|
const zhCN = {
|
|
750
711
|
/* Editor */
|
|
@@ -819,7 +780,11 @@ const zhCN = {
|
|
|
819
780
|
deleting: "删除中",
|
|
820
781
|
deleteFail: "删除失败",
|
|
821
782
|
reqGot: "请求响应",
|
|
822
|
-
reqAborted: "请求超时或意外终止"
|
|
783
|
+
reqAborted: "请求超时或意外终止",
|
|
784
|
+
updateMsg: "请更新 Artalk {name} 以获得完整体验",
|
|
785
|
+
currentVersion: "当前版本",
|
|
786
|
+
ignore: "忽略",
|
|
787
|
+
open: "打开"
|
|
823
788
|
};
|
|
824
789
|
const GLOBAL_LOCALES_KEY = "ArtalkI18n";
|
|
825
790
|
const internal = {
|
|
@@ -853,15 +818,15 @@ function t(key, args = {}) {
|
|
|
853
818
|
str = str.replace(/\{\s*(\w+?)\s*\}/g, (_, token) => args[token] || "");
|
|
854
819
|
return str;
|
|
855
820
|
}
|
|
856
|
-
function Fetch$1(opts, input,
|
|
821
|
+
function Fetch$1(opts, input, init2, timeout) {
|
|
857
822
|
return __async(this, null, function* () {
|
|
858
823
|
var _a, _b;
|
|
859
|
-
if (
|
|
860
|
-
const headers = new Headers(
|
|
861
|
-
headers.set("Authorization", `Bearer ${
|
|
862
|
-
|
|
824
|
+
if (opts.apiToken) {
|
|
825
|
+
const headers = new Headers(init2.headers);
|
|
826
|
+
headers.set("Authorization", `Bearer ${opts.apiToken}`);
|
|
827
|
+
init2.headers = headers;
|
|
863
828
|
}
|
|
864
|
-
const resp = yield timeoutFetch(input, timeout || opts.timeout || 15e3,
|
|
829
|
+
const resp = yield timeoutFetch(input, timeout || opts.timeout || 15e3, init2);
|
|
865
830
|
const respHttpCode = resp.status;
|
|
866
831
|
const noAccessCodes = [401, 400];
|
|
867
832
|
const isNoAccess = noAccessCodes.includes(respHttpCode);
|
|
@@ -869,7 +834,7 @@ function Fetch$1(opts, input, init, timeout) {
|
|
|
869
834
|
throw new Error(`${t("reqGot")} ${respHttpCode}`);
|
|
870
835
|
let json = yield resp.json();
|
|
871
836
|
const recall = (resolve, reject) => {
|
|
872
|
-
Fetch$1(opts, input,
|
|
837
|
+
Fetch$1(opts, input, init2).then((d) => {
|
|
873
838
|
resolve(d);
|
|
874
839
|
}).catch((e) => {
|
|
875
840
|
reject(e);
|
|
@@ -906,12 +871,12 @@ function Fetch$1(opts, input, init, timeout) {
|
|
|
906
871
|
}
|
|
907
872
|
function POST(opts, url, data) {
|
|
908
873
|
return __async(this, null, function* () {
|
|
909
|
-
const
|
|
874
|
+
const init2 = {
|
|
910
875
|
method: "POST"
|
|
911
876
|
};
|
|
912
877
|
data = __spreadValues({ site_name: opts.siteName || "" }, data || {});
|
|
913
|
-
|
|
914
|
-
const json = yield Fetch$1(opts, url,
|
|
878
|
+
init2.body = ToFormData(data);
|
|
879
|
+
const json = yield Fetch$1(opts, url, init2);
|
|
915
880
|
return json.data || {};
|
|
916
881
|
});
|
|
917
882
|
}
|
|
@@ -945,11 +910,25 @@ class ApiBase {
|
|
|
945
910
|
return POST(this.options, this.options.baseURL + path, data);
|
|
946
911
|
});
|
|
947
912
|
}
|
|
948
|
-
Fetch(path,
|
|
913
|
+
Fetch(path, init2, timeout) {
|
|
949
914
|
return __async(this, null, function* () {
|
|
950
|
-
return Fetch$1(this.options, this.options.baseURL + path,
|
|
915
|
+
return Fetch$1(this.options, this.options.baseURL + path, init2, timeout);
|
|
951
916
|
});
|
|
952
917
|
}
|
|
918
|
+
/**
|
|
919
|
+
* Carry user info to request params
|
|
920
|
+
*
|
|
921
|
+
* @param params Request params
|
|
922
|
+
* @returns Request params with user info
|
|
923
|
+
*/
|
|
924
|
+
withUserInfo(params) {
|
|
925
|
+
const user = this.options.userInfo;
|
|
926
|
+
if (user == null ? void 0 : user.name)
|
|
927
|
+
params.name = user.name;
|
|
928
|
+
if (user == null ? void 0 : user.email)
|
|
929
|
+
params.email = user.email;
|
|
930
|
+
return params;
|
|
931
|
+
}
|
|
953
932
|
}
|
|
954
933
|
class CommentApi extends ApiBase {
|
|
955
934
|
/** 评论 · 获取 */
|
|
@@ -962,10 +941,7 @@ class CommentApi extends ApiBase {
|
|
|
962
941
|
};
|
|
963
942
|
if (flatMode)
|
|
964
943
|
params.flat_mode = flatMode;
|
|
965
|
-
|
|
966
|
-
params.name = UserInstance.data.nick;
|
|
967
|
-
params.email = UserInstance.data.email;
|
|
968
|
-
}
|
|
944
|
+
this.withUserInfo(params);
|
|
969
945
|
if (paramsEditor)
|
|
970
946
|
paramsEditor(params);
|
|
971
947
|
return this.POST("/get", params);
|
|
@@ -1014,10 +990,7 @@ class CommentApi extends ApiBase {
|
|
|
1014
990
|
target_id: targetID,
|
|
1015
991
|
type
|
|
1016
992
|
};
|
|
1017
|
-
|
|
1018
|
-
params.name = UserInstance.data.nick;
|
|
1019
|
-
params.email = UserInstance.data.email;
|
|
1020
|
-
}
|
|
993
|
+
this.withUserInfo(params);
|
|
1021
994
|
const data = yield this.POST("/vote", params);
|
|
1022
995
|
return data;
|
|
1023
996
|
});
|
|
@@ -1186,10 +1159,7 @@ class UserApi extends ApiBase {
|
|
|
1186
1159
|
/** 用户 · 登录状态 */
|
|
1187
1160
|
loginStatus() {
|
|
1188
1161
|
return __async(this, null, function* () {
|
|
1189
|
-
const data = yield this.POST("/login-status", {
|
|
1190
|
-
name: UserInstance.data.nick,
|
|
1191
|
-
email: UserInstance.data.email
|
|
1192
|
-
});
|
|
1162
|
+
const data = yield this.POST("/login-status", this.withUserInfo({}));
|
|
1193
1163
|
return data || { is_login: false, is_admin: false };
|
|
1194
1164
|
});
|
|
1195
1165
|
}
|
|
@@ -1209,8 +1179,7 @@ class UserApi extends ApiBase {
|
|
|
1209
1179
|
delete params.comment_id;
|
|
1210
1180
|
delete params.notify_key;
|
|
1211
1181
|
params.read_all = true;
|
|
1212
|
-
params
|
|
1213
|
-
params.email = UserInstance.data.email;
|
|
1182
|
+
this.withUserInfo(params);
|
|
1214
1183
|
}
|
|
1215
1184
|
return this.POST(`/mark-read`, params);
|
|
1216
1185
|
}
|
|
@@ -1347,17 +1316,16 @@ class UploadApi extends ApiBase {
|
|
|
1347
1316
|
imgUpload(file) {
|
|
1348
1317
|
return __async(this, null, function* () {
|
|
1349
1318
|
const params = {
|
|
1350
|
-
name: UserInstance.data.nick,
|
|
1351
|
-
email: UserInstance.data.email,
|
|
1352
1319
|
page_key: this.options.pageKey
|
|
1353
1320
|
};
|
|
1321
|
+
this.withUserInfo(params);
|
|
1354
1322
|
const form = ToFormData(params);
|
|
1355
1323
|
form.set("file", file);
|
|
1356
|
-
const
|
|
1324
|
+
const init2 = {
|
|
1357
1325
|
method: "POST",
|
|
1358
1326
|
body: form
|
|
1359
1327
|
};
|
|
1360
|
-
const json = yield this.Fetch("/img-upload",
|
|
1328
|
+
const json = yield this.Fetch("/img-upload", init2);
|
|
1361
1329
|
return json.data || {};
|
|
1362
1330
|
});
|
|
1363
1331
|
}
|
|
@@ -2210,6 +2178,11 @@ function convertApiOptions(conf, ctx) {
|
|
|
2210
2178
|
pageKey: conf.pageKey || "",
|
|
2211
2179
|
pageTitle: conf.pageTitle || "",
|
|
2212
2180
|
timeout: conf.reqTimeout,
|
|
2181
|
+
apiToken: ctx == null ? void 0 : ctx.get("user").getData().token,
|
|
2182
|
+
userInfo: (ctx == null ? void 0 : ctx.get("user").checkHasBasicUserInfo()) ? {
|
|
2183
|
+
name: ctx == null ? void 0 : ctx.get("user").getData().nick,
|
|
2184
|
+
email: ctx == null ? void 0 : ctx.get("user").getData().email
|
|
2185
|
+
} : void 0,
|
|
2213
2186
|
onNeedCheckAdmin(payload) {
|
|
2214
2187
|
ctx == null ? void 0 : ctx.checkAdmin({
|
|
2215
2188
|
onSuccess: () => {
|
|
@@ -2273,7 +2246,7 @@ class Context {
|
|
|
2273
2246
|
this.data.fetchComments({ offset: 0 });
|
|
2274
2247
|
}
|
|
2275
2248
|
listGotoFirst() {
|
|
2276
|
-
this.trigger("list-goto-first");
|
|
2249
|
+
this.events.trigger("list-goto-first");
|
|
2277
2250
|
}
|
|
2278
2251
|
/* 编辑器 */
|
|
2279
2252
|
editorShowLoading() {
|
|
@@ -2318,11 +2291,11 @@ class Context {
|
|
|
2318
2291
|
}
|
|
2319
2292
|
setDarkMode(darkMode) {
|
|
2320
2293
|
this.conf.darkMode = darkMode;
|
|
2321
|
-
this.trigger("dark-mode-changed", darkMode);
|
|
2294
|
+
this.events.trigger("dark-mode-changed", darkMode);
|
|
2322
2295
|
}
|
|
2323
2296
|
updateConf(nConf) {
|
|
2324
2297
|
this.conf = mergeDeep(this.conf, handelCustomConf(nConf));
|
|
2325
|
-
this.trigger("conf-loaded", this.conf);
|
|
2298
|
+
this.events.trigger("conf-loaded", this.conf);
|
|
2326
2299
|
}
|
|
2327
2300
|
getMarked() {
|
|
2328
2301
|
return getInstance();
|
|
@@ -2529,7 +2502,7 @@ function imgBody(checker) {
|
|
|
2529
2502
|
}
|
|
2530
2503
|
function iframeBody(checker) {
|
|
2531
2504
|
const $iframeWrap = createElement(`<div class="atk-checker-iframe-wrap"></div>`);
|
|
2532
|
-
const $iframe = createElement(`<iframe class="atk-fade-in"></iframe>`);
|
|
2505
|
+
const $iframe = createElement(`<iframe class="atk-fade-in" referrerpolicy="strict-origin-when-cross-origin"></iframe>`);
|
|
2533
2506
|
$iframe.style.display = "none";
|
|
2534
2507
|
showLoading($iframeWrap, { transparentBg: true });
|
|
2535
2508
|
$iframe.src = `${checker.getOpts().getIframeURLBase() || ""}/api/captcha/get?t=${+/* @__PURE__ */ new Date()}`;
|
|
@@ -2593,8 +2566,8 @@ const AdminChecker = {
|
|
|
2593
2566
|
inputType: "password",
|
|
2594
2567
|
request(checker, inputVal) {
|
|
2595
2568
|
const data = {
|
|
2596
|
-
name:
|
|
2597
|
-
email:
|
|
2569
|
+
name: checker.getUser().getData().nick,
|
|
2570
|
+
email: checker.getUser().getData().email,
|
|
2598
2571
|
password: inputVal
|
|
2599
2572
|
};
|
|
2600
2573
|
return (() => __async(this, null, function* () {
|
|
@@ -2606,7 +2579,7 @@ const AdminChecker = {
|
|
|
2606
2579
|
return createElement(`<span>${t("adminCheck")}</span>`);
|
|
2607
2580
|
},
|
|
2608
2581
|
onSuccess(checker, userToken, inputVal, formEl) {
|
|
2609
|
-
|
|
2582
|
+
checker.getUser().update({
|
|
2610
2583
|
isAdmin: true,
|
|
2611
2584
|
token: userToken
|
|
2612
2585
|
});
|
|
@@ -2639,6 +2612,7 @@ class CheckerLauncher {
|
|
|
2639
2612
|
},
|
|
2640
2613
|
get: (key) => checkerStore[key],
|
|
2641
2614
|
getOpts: () => this.opts,
|
|
2615
|
+
getUser: () => this.opts.getCtx().get("user"),
|
|
2642
2616
|
getApi: () => this.opts.getApi(),
|
|
2643
2617
|
hideInteractInput: () => {
|
|
2644
2618
|
hideInteractInput = true;
|
|
@@ -3030,7 +3004,7 @@ class SidebarLayer extends Component {
|
|
|
3030
3004
|
});
|
|
3031
3005
|
}
|
|
3032
3006
|
createIframe(view) {
|
|
3033
|
-
const $iframe = createElement(
|
|
3007
|
+
const $iframe = createElement('<iframe referrerpolicy="strict-origin-when-cross-origin"></iframe>');
|
|
3034
3008
|
const baseURL = getURLBasedOnApi({
|
|
3035
3009
|
base: this.ctx.conf.server,
|
|
3036
3010
|
path: "/sidebar/"
|
|
@@ -3038,7 +3012,7 @@ class SidebarLayer extends Component {
|
|
|
3038
3012
|
const query = {
|
|
3039
3013
|
pageKey: this.conf.pageKey,
|
|
3040
3014
|
site: this.conf.site || "",
|
|
3041
|
-
user: JSON.stringify(
|
|
3015
|
+
user: JSON.stringify(this.ctx.get("user").getData()),
|
|
3042
3016
|
time: +/* @__PURE__ */ new Date()
|
|
3043
3017
|
};
|
|
3044
3018
|
if (view)
|
|
@@ -3115,7 +3089,7 @@ class ListLayout {
|
|
|
3115
3089
|
constructor(options) {
|
|
3116
3090
|
this.options = options;
|
|
3117
3091
|
}
|
|
3118
|
-
// TODO refactor `if syntax` to strategy pattern
|
|
3092
|
+
// TODO: refactor `if syntax` to strategy pattern
|
|
3119
3093
|
import(comments) {
|
|
3120
3094
|
if (this.options.flatMode) {
|
|
3121
3095
|
comments.forEach((commentData) => {
|
|
@@ -3191,9 +3165,9 @@ class ListLayout {
|
|
|
3191
3165
|
scrollIntoView(comment.getEl());
|
|
3192
3166
|
}
|
|
3193
3167
|
}
|
|
3194
|
-
const win = window || {};
|
|
3195
|
-
const nav = navigator || {};
|
|
3196
3168
|
function Detect(userAgent) {
|
|
3169
|
+
const win = window || {};
|
|
3170
|
+
const nav = navigator || {};
|
|
3197
3171
|
const u = String(userAgent || nav.userAgent);
|
|
3198
3172
|
const dest = {
|
|
3199
3173
|
os: "",
|
|
@@ -4542,20 +4516,6 @@ const initListPaginatorFunc = (ctx) => {
|
|
|
4542
4516
|
var _a;
|
|
4543
4517
|
(_a = paginator == null ? void 0 : paginator.showErr) == null ? void 0 : _a.call(paginator, t("loadFail"));
|
|
4544
4518
|
});
|
|
4545
|
-
const autoSwitchPageForFindComment = (commentID) => {
|
|
4546
|
-
const comment = ctx.getData().findComment(commentID);
|
|
4547
|
-
if (!!comment || !(paginator == null ? void 0 : paginator.getHasMore()))
|
|
4548
|
-
return;
|
|
4549
|
-
ctx.on("list-loaded", () => {
|
|
4550
|
-
autoSwitchPageForFindComment(commentID);
|
|
4551
|
-
}, { once: true });
|
|
4552
|
-
setTimeout(() => {
|
|
4553
|
-
paginator == null ? void 0 : paginator.next();
|
|
4554
|
-
}, 80);
|
|
4555
|
-
};
|
|
4556
|
-
ctx.on("list-goto", (commentID) => {
|
|
4557
|
-
autoSwitchPageForFindComment(commentID);
|
|
4558
|
-
});
|
|
4559
4519
|
ctx.on("list-fetch", (params) => {
|
|
4560
4520
|
paginator == null ? void 0 : paginator.setLoading(true);
|
|
4561
4521
|
});
|
|
@@ -4753,6 +4713,47 @@ class LayerManager {
|
|
|
4753
4713
|
return layer;
|
|
4754
4714
|
}
|
|
4755
4715
|
}
|
|
4716
|
+
const LOCAL_USER_KEY = "ArtalkUser";
|
|
4717
|
+
class User {
|
|
4718
|
+
constructor(opts) {
|
|
4719
|
+
__publicField(this, "data");
|
|
4720
|
+
this.opts = opts;
|
|
4721
|
+
const localUser = JSON.parse(window.localStorage.getItem(LOCAL_USER_KEY) || "{}");
|
|
4722
|
+
this.data = {
|
|
4723
|
+
nick: localUser.nick || "",
|
|
4724
|
+
email: localUser.email || "",
|
|
4725
|
+
link: localUser.link || "",
|
|
4726
|
+
token: localUser.token || "",
|
|
4727
|
+
isAdmin: localUser.isAdmin || false
|
|
4728
|
+
};
|
|
4729
|
+
}
|
|
4730
|
+
getData() {
|
|
4731
|
+
return this.data;
|
|
4732
|
+
}
|
|
4733
|
+
/** 保存用户到 localStorage 中 */
|
|
4734
|
+
update(obj = {}) {
|
|
4735
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
4736
|
+
this.data[key] = value;
|
|
4737
|
+
});
|
|
4738
|
+
window.localStorage.setItem(LOCAL_USER_KEY, JSON.stringify(this.data));
|
|
4739
|
+
this.opts.onUserChanged && this.opts.onUserChanged(this.data);
|
|
4740
|
+
}
|
|
4741
|
+
/**
|
|
4742
|
+
* Logout
|
|
4743
|
+
*
|
|
4744
|
+
* @description Logout will clear login status, but not clear user data (nick, email, link)
|
|
4745
|
+
*/
|
|
4746
|
+
logout() {
|
|
4747
|
+
this.update({
|
|
4748
|
+
token: "",
|
|
4749
|
+
isAdmin: false
|
|
4750
|
+
});
|
|
4751
|
+
}
|
|
4752
|
+
/** 是否已填写基本用户信息 */
|
|
4753
|
+
checkHasBasicUserInfo() {
|
|
4754
|
+
return !!this.data.nick && !!this.data.email;
|
|
4755
|
+
}
|
|
4756
|
+
}
|
|
4756
4757
|
const services = {
|
|
4757
4758
|
// I18n
|
|
4758
4759
|
i18n(ctx) {
|
|
@@ -4763,10 +4764,12 @@ const services = {
|
|
|
4763
4764
|
},
|
|
4764
4765
|
// User Store
|
|
4765
4766
|
user(ctx) {
|
|
4766
|
-
|
|
4767
|
-
|
|
4767
|
+
const user = new User({
|
|
4768
|
+
onUserChanged: (data) => {
|
|
4769
|
+
ctx.trigger("user-changed", data);
|
|
4770
|
+
}
|
|
4768
4771
|
});
|
|
4769
|
-
return
|
|
4772
|
+
return user;
|
|
4770
4773
|
},
|
|
4771
4774
|
// 弹出层
|
|
4772
4775
|
layerManager(ctx) {
|
|
@@ -4816,11 +4819,8 @@ function showErrorDialog(opts) {
|
|
|
4816
4819
|
errEl.appendChild($retryBtn);
|
|
4817
4820
|
}
|
|
4818
4821
|
if (opts.onOpenSidebar) {
|
|
4819
|
-
const $openSidebar = createElement(
|
|
4822
|
+
const $openSidebar = createElement(`<span atk-only-admin-show> | <span style="cursor:pointer;">${t("open") + t("ctrlCenter")}</span></span>`);
|
|
4820
4823
|
errEl.appendChild($openSidebar);
|
|
4821
|
-
if (!UserInstance.data.isAdmin) {
|
|
4822
|
-
$openSidebar.classList.add("atk-hide");
|
|
4823
|
-
}
|
|
4824
4824
|
$openSidebar.onclick = () => opts.onOpenSidebar && opts.onOpenSidebar();
|
|
4825
4825
|
}
|
|
4826
4826
|
setError(opts.$err, errEl);
|
|
@@ -4856,9 +4856,10 @@ function loadConf(ctx) {
|
|
|
4856
4856
|
errMsg: err.msg || String(err),
|
|
4857
4857
|
errData: err.data,
|
|
4858
4858
|
retryFn: () => loadConf(ctx),
|
|
4859
|
-
onOpenSidebar: () => ctx.showSidebar({
|
|
4859
|
+
onOpenSidebar: ctx.get("user").getData().isAdmin ? () => ctx.showSidebar({
|
|
4860
4860
|
view: sidebarOpenView
|
|
4861
|
-
})
|
|
4861
|
+
}) : void 0
|
|
4862
|
+
// only show open sidebar button when user is admin
|
|
4862
4863
|
});
|
|
4863
4864
|
throw err;
|
|
4864
4865
|
}).then(() => {
|
|
@@ -4963,7 +4964,7 @@ class SubmitAddPreset {
|
|
|
4963
4964
|
});
|
|
4964
4965
|
}
|
|
4965
4966
|
getSubmitAddParams() {
|
|
4966
|
-
const { nick, email, link } =
|
|
4967
|
+
const { nick, email, link } = this.kit.useUser().getData();
|
|
4967
4968
|
const conf = this.kit.useConf();
|
|
4968
4969
|
return {
|
|
4969
4970
|
content: this.kit.useEditor().getContentFinal(),
|
|
@@ -5161,7 +5162,7 @@ class StateEdit extends EditorPlug {
|
|
|
5161
5162
|
ui.$editCancelBtn = void 0;
|
|
5162
5163
|
}
|
|
5163
5164
|
this.comment = void 0;
|
|
5164
|
-
const { nick, email, link } =
|
|
5165
|
+
const { nick, email, link } = this.kit.useUser().getData();
|
|
5165
5166
|
ui.$nick.value = nick;
|
|
5166
5167
|
ui.$email.value = email;
|
|
5167
5168
|
ui.$link.value = link;
|
|
@@ -5200,7 +5201,7 @@ class Closable extends EditorPlug {
|
|
|
5200
5201
|
close() {
|
|
5201
5202
|
if (!this.kit.useUI().$textareaWrap.querySelector(".atk-comment-closed"))
|
|
5202
5203
|
this.kit.useUI().$textareaWrap.prepend(createElement(`<div class="atk-comment-closed">${t("onlyAdminCanReply")}</div>`));
|
|
5203
|
-
if (!
|
|
5204
|
+
if (!this.kit.useUser().getData().isAdmin) {
|
|
5204
5205
|
this.kit.useUI().$textarea.style.display = "none";
|
|
5205
5206
|
this.kit.useEvents().trigger("panel-close");
|
|
5206
5207
|
this.kit.useUI().$bottom.style.display = "none";
|
|
@@ -5245,14 +5246,14 @@ class HeaderUser extends EditorPlug {
|
|
|
5245
5246
|
const onInput = ({ $input, field }) => {
|
|
5246
5247
|
if (this.kit.useEditor().getState() === "edit")
|
|
5247
5248
|
return;
|
|
5248
|
-
|
|
5249
|
+
this.kit.useUser().update({ [field]: $input.value.trim() });
|
|
5249
5250
|
if (field === "nick" || field === "email")
|
|
5250
5251
|
this.fetchUserInfo();
|
|
5251
5252
|
};
|
|
5252
5253
|
this.kit.useMounted(() => {
|
|
5253
5254
|
Object.entries(this.kit.useEditor().getHeaderInputEls()).forEach(([key, $input]) => {
|
|
5254
5255
|
$input.placeholder = `${t(key)}`;
|
|
5255
|
-
$input.value =
|
|
5256
|
+
$input.value = this.kit.useUser().getData()[key] || "";
|
|
5256
5257
|
});
|
|
5257
5258
|
this.kit.useEvents().on("header-input", onInput);
|
|
5258
5259
|
});
|
|
@@ -5264,7 +5265,7 @@ class HeaderUser extends EditorPlug {
|
|
|
5264
5265
|
* Fetch user info from server
|
|
5265
5266
|
*/
|
|
5266
5267
|
fetchUserInfo() {
|
|
5267
|
-
|
|
5268
|
+
this.kit.useUser().logout();
|
|
5268
5269
|
if (this.query.timer)
|
|
5269
5270
|
window.clearTimeout(this.query.timer);
|
|
5270
5271
|
if (this.query.abortFn)
|
|
@@ -5272,8 +5273,8 @@ class HeaderUser extends EditorPlug {
|
|
|
5272
5273
|
this.query.timer = window.setTimeout(() => {
|
|
5273
5274
|
this.query.timer = null;
|
|
5274
5275
|
const { req, abort } = this.kit.useApi().user.userGet(
|
|
5275
|
-
|
|
5276
|
-
|
|
5276
|
+
this.kit.useUser().getData().nick,
|
|
5277
|
+
this.kit.useUser().getData().email
|
|
5277
5278
|
);
|
|
5278
5279
|
this.query.abortFn = abort;
|
|
5279
5280
|
req.then((data) => this.onUserInfoFetched(data)).catch((err) => {
|
|
@@ -5290,9 +5291,9 @@ class HeaderUser extends EditorPlug {
|
|
|
5290
5291
|
onUserInfoFetched(data) {
|
|
5291
5292
|
var _a;
|
|
5292
5293
|
if (!data.is_login)
|
|
5293
|
-
|
|
5294
|
+
this.kit.useUser().logout();
|
|
5294
5295
|
this.kit.useGlobalCtx().getData().updateUnreads(data.unread);
|
|
5295
|
-
if (
|
|
5296
|
+
if (this.kit.useUser().checkHasBasicUserInfo() && !data.is_login && ((_a = data.user) == null ? void 0 : _a.is_admin)) {
|
|
5296
5297
|
this.kit.useGlobalCtx().checkAdmin({
|
|
5297
5298
|
onSuccess: () => {
|
|
5298
5299
|
}
|
|
@@ -5300,7 +5301,7 @@ class HeaderUser extends EditorPlug {
|
|
|
5300
5301
|
}
|
|
5301
5302
|
if (data.user && data.user.link) {
|
|
5302
5303
|
this.kit.useUI().$link.value = data.user.link;
|
|
5303
|
-
|
|
5304
|
+
this.kit.useUser().update({ link: data.user.link });
|
|
5304
5305
|
}
|
|
5305
5306
|
}
|
|
5306
5307
|
}
|
|
@@ -5322,11 +5323,10 @@ class HeaderLink extends EditorPlug {
|
|
|
5322
5323
|
const link = this.kit.useUI().$link.value.trim();
|
|
5323
5324
|
if (!!link && !/^(http|https):\/\//.test(link)) {
|
|
5324
5325
|
this.kit.useUI().$link.value = `https://${link}`;
|
|
5325
|
-
|
|
5326
|
+
this.kit.useUser().update({ link: this.kit.useUI().$link.value });
|
|
5326
5327
|
}
|
|
5327
5328
|
}
|
|
5328
5329
|
}
|
|
5329
|
-
const emoticons = "";
|
|
5330
5330
|
class Emoticons extends EditorPlug {
|
|
5331
5331
|
constructor(kit) {
|
|
5332
5332
|
super(kit);
|
|
@@ -5442,7 +5442,8 @@ class Emoticons extends EditorPlug {
|
|
|
5442
5442
|
return json;
|
|
5443
5443
|
} catch (err) {
|
|
5444
5444
|
hideLoading(this.$panel);
|
|
5445
|
-
|
|
5445
|
+
console.error("[Emoticons] Load Failed:", err);
|
|
5446
|
+
setError(this.$panel, `${t("emoticon")}${t("loadFail")} ${String(err)}`);
|
|
5446
5447
|
return [];
|
|
5447
5448
|
}
|
|
5448
5449
|
});
|
|
@@ -5651,7 +5652,7 @@ class Upload extends EditorPlug {
|
|
|
5651
5652
|
const fileExt = /[^.]+$/.exec(file.name);
|
|
5652
5653
|
if (!fileExt || !AllowImgExts.includes(fileExt[0]))
|
|
5653
5654
|
return;
|
|
5654
|
-
if (!
|
|
5655
|
+
if (!this.kit.useUser().checkHasBasicUserInfo()) {
|
|
5655
5656
|
this.kit.useEditor().showNotify(t("uploadLoginMsg"), "w");
|
|
5656
5657
|
return;
|
|
5657
5658
|
}
|
|
@@ -5686,7 +5687,6 @@ class Upload extends EditorPlug {
|
|
|
5686
5687
|
});
|
|
5687
5688
|
}
|
|
5688
5689
|
}
|
|
5689
|
-
const preview = "";
|
|
5690
5690
|
class Preview extends EditorPlug {
|
|
5691
5691
|
constructor(kit) {
|
|
5692
5692
|
super(kit);
|
|
@@ -5749,7 +5749,11 @@ class PlugKit {
|
|
|
5749
5749
|
useEditor() {
|
|
5750
5750
|
return this.plugs.editor;
|
|
5751
5751
|
}
|
|
5752
|
-
/**
|
|
5752
|
+
/**
|
|
5753
|
+
* Use the context of global
|
|
5754
|
+
*
|
|
5755
|
+
* @deprecated The calls to this function should be reduced as much as possible
|
|
5756
|
+
*/
|
|
5753
5757
|
useGlobalCtx() {
|
|
5754
5758
|
return this.plugs.editor.ctx;
|
|
5755
5759
|
}
|
|
@@ -5761,6 +5765,10 @@ class PlugKit {
|
|
|
5761
5765
|
useApi() {
|
|
5762
5766
|
return this.plugs.editor.ctx.getApi();
|
|
5763
5767
|
}
|
|
5768
|
+
/** Use the user manager */
|
|
5769
|
+
useUser() {
|
|
5770
|
+
return this.plugs.editor.ctx.get("user");
|
|
5771
|
+
}
|
|
5764
5772
|
/** Use the ui of editor */
|
|
5765
5773
|
useUI() {
|
|
5766
5774
|
return this.plugs.editor.getUI();
|
|
@@ -5978,7 +5986,7 @@ const SidebarBtn = (ctx) => {
|
|
|
5978
5986
|
const syncByUser = () => {
|
|
5979
5987
|
if (!$openSidebarBtn)
|
|
5980
5988
|
return;
|
|
5981
|
-
const user = ctx.get("user").
|
|
5989
|
+
const user = ctx.get("user").getData();
|
|
5982
5990
|
if (!!user.nick && !!user.email) {
|
|
5983
5991
|
$openSidebarBtn.classList.remove("atk-hide");
|
|
5984
5992
|
const $btnText = $openSidebarBtn.querySelector(".atk-text");
|
|
@@ -6077,7 +6085,7 @@ function extractCommentID() {
|
|
|
6077
6085
|
}
|
|
6078
6086
|
return commentId || null;
|
|
6079
6087
|
}
|
|
6080
|
-
const version = "2.7.
|
|
6088
|
+
const version = "2.7.2";
|
|
6081
6089
|
const Copyright = (ctx) => {
|
|
6082
6090
|
ctx.on("conf-loaded", () => {
|
|
6083
6091
|
const list = ctx.get("list");
|
|
@@ -6351,12 +6359,15 @@ function initCountWidget(opt) {
|
|
|
6351
6359
|
if (opt.countEl && document.querySelector(opt.countEl)) {
|
|
6352
6360
|
refreshStatCount(opt, { query: "page_comment", numEl: opt.countEl });
|
|
6353
6361
|
}
|
|
6354
|
-
const
|
|
6362
|
+
const initialData = opt.pvAdd ? {
|
|
6363
|
+
[opt.pageKey]: yield opt.getApi().page.pv()
|
|
6364
|
+
// pv+1 and get pv count
|
|
6365
|
+
} : void 0;
|
|
6355
6366
|
if (opt.pvEl && document.querySelector(opt.pvEl)) {
|
|
6356
6367
|
refreshStatCount(opt, {
|
|
6357
6368
|
query: "page_pv",
|
|
6358
6369
|
numEl: opt.pvEl,
|
|
6359
|
-
data:
|
|
6370
|
+
data: initialData
|
|
6360
6371
|
});
|
|
6361
6372
|
}
|
|
6362
6373
|
});
|
|
@@ -6364,10 +6375,10 @@ function initCountWidget(opt) {
|
|
|
6364
6375
|
function refreshStatCount(opt, args) {
|
|
6365
6376
|
return __async(this, null, function* () {
|
|
6366
6377
|
let data = args.data || {};
|
|
6367
|
-
let
|
|
6368
|
-
|
|
6369
|
-
if (
|
|
6370
|
-
const res = yield opt.getApi().page.stat(args.query,
|
|
6378
|
+
let queryPageKeys = Array.from(document.querySelectorAll(args.numEl)).map((e) => e.getAttribute("data-page-key") || opt.pageKey).filter((k) => typeof data[k] !== "number");
|
|
6379
|
+
queryPageKeys = [...new Set(queryPageKeys)];
|
|
6380
|
+
if (queryPageKeys.length > 0) {
|
|
6381
|
+
const res = yield opt.getApi().page.stat(args.query, queryPageKeys);
|
|
6371
6382
|
data = __spreadValues(__spreadValues({}, data), res);
|
|
6372
6383
|
}
|
|
6373
6384
|
applyCountData(args.numEl, data, data[opt.pageKey]);
|
|
@@ -6394,9 +6405,9 @@ function versionCheck(list, feVer, beVer) {
|
|
|
6394
6405
|
if (sameVer)
|
|
6395
6406
|
return;
|
|
6396
6407
|
const errEl = createElement(
|
|
6397
|
-
`<div
|
|
6408
|
+
`<div>${t("updateMsg", { name: comp < 0 ? t("frontend") : t("backend") })}<br/><br/><span style="color: var(--at-color-meta);">${t("currentVersion")}: ${t("frontend")} ${feVer} / ${t("backend")} ${beVer}</span><br/><br/></div>`
|
|
6398
6409
|
);
|
|
6399
|
-
const ignoreBtn = createElement(
|
|
6410
|
+
const ignoreBtn = createElement(`<span style="cursor:pointer">${t("ignore")}</span>`);
|
|
6400
6411
|
ignoreBtn.onclick = () => {
|
|
6401
6412
|
setError(list.$el.parentElement, null);
|
|
6402
6413
|
IgnoreVersionCheck = true;
|
|
@@ -6407,7 +6418,7 @@ function versionCheck(list, feVer, beVer) {
|
|
|
6407
6418
|
}
|
|
6408
6419
|
const AdminOnlyElem = (ctx) => {
|
|
6409
6420
|
const scanApply = () => {
|
|
6410
|
-
applyAdminOnlyEls(ctx.get("user").
|
|
6421
|
+
applyAdminOnlyEls(ctx.get("user").getData().isAdmin, getAdminOnlyEls({
|
|
6411
6422
|
$root: ctx.$root
|
|
6412
6423
|
}));
|
|
6413
6424
|
};
|
|
@@ -6434,38 +6445,44 @@ function applyAdminOnlyEls(isAdmin, els) {
|
|
|
6434
6445
|
$item.classList.add("atk-hide");
|
|
6435
6446
|
});
|
|
6436
6447
|
}
|
|
6437
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
6440
|
-
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
darkModeMedia.addEventListener("change", darkModeAutoFunc);
|
|
6447
|
-
}
|
|
6448
|
-
apply(darkModeMedia.matches);
|
|
6449
|
-
} else {
|
|
6450
|
-
if (darkModeAutoFunc)
|
|
6451
|
-
darkModeMedia.removeEventListener("change", darkModeAutoFunc);
|
|
6452
|
-
apply(darkMode);
|
|
6453
|
-
}
|
|
6454
|
-
}
|
|
6455
|
-
const DarkModeClassName = "atk-dark-mode";
|
|
6456
|
-
function updateClassName($el, darkMode) {
|
|
6457
|
-
if (darkMode)
|
|
6458
|
-
$el.classList.add(DarkModeClassName);
|
|
6459
|
-
else
|
|
6460
|
-
$el.classList.remove(DarkModeClassName);
|
|
6448
|
+
let darkModeMedia;
|
|
6449
|
+
function updateClassnames($els, darkMode) {
|
|
6450
|
+
const DarkModeClassName = "atk-dark-mode";
|
|
6451
|
+
$els.forEach(($el) => {
|
|
6452
|
+
if (darkMode)
|
|
6453
|
+
$el.classList.add(DarkModeClassName);
|
|
6454
|
+
else
|
|
6455
|
+
$el.classList.remove(DarkModeClassName);
|
|
6456
|
+
});
|
|
6461
6457
|
}
|
|
6462
6458
|
const DarkMode = (ctx) => {
|
|
6463
|
-
|
|
6464
|
-
|
|
6459
|
+
let darkModeAutoHandler;
|
|
6460
|
+
const sync = (darkMode) => {
|
|
6461
|
+
const $els = [ctx.$root, ctx.get("layerManager").getEl()];
|
|
6462
|
+
if (!darkModeMedia) {
|
|
6463
|
+
darkModeMedia = window.matchMedia("(prefers-color-scheme: dark)");
|
|
6464
|
+
}
|
|
6465
|
+
if (darkMode === "auto") {
|
|
6466
|
+
if (!darkModeAutoHandler) {
|
|
6467
|
+
darkModeAutoHandler = (evt) => updateClassnames($els, evt.matches);
|
|
6468
|
+
darkModeMedia.addEventListener("change", darkModeAutoHandler);
|
|
6469
|
+
}
|
|
6470
|
+
updateClassnames($els, darkModeMedia.matches);
|
|
6471
|
+
} else {
|
|
6472
|
+
if (darkModeAutoHandler) {
|
|
6473
|
+
darkModeMedia.removeEventListener("change", darkModeAutoHandler);
|
|
6474
|
+
darkModeAutoHandler = void 0;
|
|
6475
|
+
}
|
|
6476
|
+
updateClassnames($els, darkMode);
|
|
6477
|
+
}
|
|
6465
6478
|
};
|
|
6466
|
-
ctx.on("inited", () => sync());
|
|
6467
|
-
ctx.on("conf-loaded", () => sync());
|
|
6468
|
-
ctx.on("dark-mode-changed", () => sync());
|
|
6479
|
+
ctx.on("inited", () => sync(ctx.conf.darkMode));
|
|
6480
|
+
ctx.on("conf-loaded", (conf) => sync(conf.darkMode));
|
|
6481
|
+
ctx.on("dark-mode-changed", (darkMode) => sync(darkMode));
|
|
6482
|
+
ctx.on("destroy", () => {
|
|
6483
|
+
darkModeAutoHandler && (darkModeMedia == null ? void 0 : darkModeMedia.removeEventListener("change", darkModeAutoHandler));
|
|
6484
|
+
darkModeAutoHandler = void 0;
|
|
6485
|
+
});
|
|
6469
6486
|
};
|
|
6470
6487
|
const DefaultPlugins = [
|
|
6471
6488
|
ConfRemoter,
|
|
@@ -6478,7 +6495,7 @@ const DefaultPlugins = [
|
|
|
6478
6495
|
DarkMode
|
|
6479
6496
|
];
|
|
6480
6497
|
const GlobalPlugins = [...DefaultPlugins];
|
|
6481
|
-
|
|
6498
|
+
class Artalk {
|
|
6482
6499
|
constructor(conf) {
|
|
6483
6500
|
__publicField(this, "conf");
|
|
6484
6501
|
__publicField(this, "ctx");
|
|
@@ -6530,9 +6547,12 @@ const _Artalk = class _Artalk {
|
|
|
6530
6547
|
setDarkMode(darkMode) {
|
|
6531
6548
|
this.ctx.setDarkMode(darkMode);
|
|
6532
6549
|
}
|
|
6550
|
+
// ===========================
|
|
6551
|
+
// Static Members
|
|
6552
|
+
// ===========================
|
|
6533
6553
|
/** Init Artalk */
|
|
6534
6554
|
static init(conf) {
|
|
6535
|
-
return new
|
|
6555
|
+
return new Artalk(conf);
|
|
6536
6556
|
}
|
|
6537
6557
|
/** Use plugin, the plugin will be used when Artalk.init */
|
|
6538
6558
|
static use(plugin) {
|
|
@@ -6551,17 +6571,18 @@ const _Artalk = class _Artalk {
|
|
|
6551
6571
|
pvAdd: false
|
|
6552
6572
|
});
|
|
6553
6573
|
}
|
|
6554
|
-
}
|
|
6555
|
-
// ===========================
|
|
6556
|
-
// Static Members
|
|
6557
|
-
// ===========================
|
|
6558
|
-
/** Default Configs */
|
|
6559
|
-
__publicField(_Artalk, "defaults", defaults);
|
|
6560
|
-
let Artalk = _Artalk;
|
|
6574
|
+
}
|
|
6561
6575
|
const index = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
6562
6576
|
__proto__: null
|
|
6563
6577
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
6578
|
+
const init = Artalk.init;
|
|
6579
|
+
const use = Artalk.use;
|
|
6580
|
+
const loadCountWidget = Artalk.loadCountWidget;
|
|
6564
6581
|
export {
|
|
6565
6582
|
index as ArtalkType,
|
|
6566
|
-
Artalk as default
|
|
6583
|
+
Artalk as default,
|
|
6584
|
+
init,
|
|
6585
|
+
loadCountWidget,
|
|
6586
|
+
use
|
|
6567
6587
|
};
|
|
6588
|
+
//# sourceMappingURL=ArtalkLite.es.js.map
|