xmoj-script 1.1.25 → 1.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/Update.json +68 -0
  2. package/XMOJ.user.js +566 -372
  3. package/package.json +1 -1
package/XMOJ.user.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // ==UserScript==
2
2
  // @name XMOJ
3
- // @version 1.1.25
3
+ // @version 1.1.32
4
4
  // @description XMOJ增强脚本
5
5
  // @author @XMOJ-Script-dev, @langningchen and the community
6
6
  // @namespace https://github/langningchen
@@ -55,13 +55,21 @@ let GetRelativeTime = (Input) => {
55
55
  let Now = new Date().getTime();
56
56
  let Delta = Now - Input.getTime();
57
57
  let RelativeName = "";
58
- if (Delta < 0) { RelativeName = "未来"; }
59
- else if (Delta <= 1000 * 60) { RelativeName = "刚刚"; }
60
- else if (Delta <= 1000 * 60 * 60) { RelativeName = Math.floor((Now - Input) / 1000 / 60) + "分钟前"; }
61
- else if (Delta <= 1000 * 60 * 60 * 24) { RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60) + "小时前"; }
62
- else if (Delta <= 1000 * 60 * 60 * 24 * 31) { RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60 / 24) + "天前"; }
63
- else if (Delta <= 1000 * 60 * 60 * 24 * 365) { RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60 / 24 / 31) + "个月前"; }
64
- else { RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60 / 24 / 365) + "年前"; }
58
+ if (Delta < 0) {
59
+ RelativeName = "未来";
60
+ } else if (Delta <= 1000 * 60) {
61
+ RelativeName = "刚刚";
62
+ } else if (Delta <= 1000 * 60 * 60) {
63
+ RelativeName = Math.floor((Now - Input) / 1000 / 60) + "分钟前";
64
+ } else if (Delta <= 1000 * 60 * 60 * 24) {
65
+ RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60) + "小时前";
66
+ } else if (Delta <= 1000 * 60 * 60 * 24 * 31) {
67
+ RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60 / 24) + "天前";
68
+ } else if (Delta <= 1000 * 60 * 60 * 24 * 365) {
69
+ RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60 / 24 / 31) + "个月前";
70
+ } else {
71
+ RelativeName = Math.floor((Now - Input) / 1000 / 60 / 60 / 24 / 365) + "年前";
72
+ }
65
73
  return "<span title=\"" + Input.toLocaleString() + "\">" + RelativeName + "</span>";
66
74
  };
67
75
  let RenderMathJax = async () => {
@@ -116,7 +124,7 @@ let GetUserInfo = async (Username) => {
116
124
  };
117
125
  /**
118
126
  * Retrieves the badge information for a given user.
119
- *
127
+ *
120
128
  * @param {string} Username - The username of the user.
121
129
  * @returns {Promise<Object>} - A promise that resolves to an object containing the badge information.
122
130
  * @property {string} BackgroundColor - The background color of the badge.
@@ -183,8 +191,7 @@ let GetUsernameHTML = async (Element, Username, Simple = false, Href = "https://
183
191
  HTMLData += `<img src="`;
184
192
  if (UserInfo.EmailHash == undefined) {
185
193
  HTMLData += `https://cravatar.cn/avatar/00000000000000000000000000000000?d=mp&f=y`;
186
- }
187
- else {
194
+ } else {
188
195
  HTMLData += `https://cravatar.cn/avatar/${UserInfo.EmailHash}?d=retro`;
189
196
  }
190
197
  HTMLData += `" class="rounded me-2" style="width: 20px; height: 20px; ">`;
@@ -205,8 +212,7 @@ let GetUsernameHTML = async (Element, Username, Simple = false, Href = "https://
205
212
  } else {
206
213
  HTMLData += "link-info";
207
214
  }
208
- }
209
- else {
215
+ } else {
210
216
  HTMLData += "link-info";
211
217
  }
212
218
  HTMLData += `\";"></a>`;
@@ -265,8 +271,7 @@ let SizeToStringSize = (Memory) => {
265
271
  } else {
266
272
  return (Memory / 1024 / 1024 / 1024).toFixed(2) + "GB";
267
273
  }
268
- }
269
- else {
274
+ } else {
270
275
  return Memory;
271
276
  }
272
277
  };
@@ -282,14 +287,13 @@ let TimeToStringTime = (Time) => {
282
287
  } else if (Time < 1000 * 60) {
283
288
  return (Time / 1000).toFixed(2) + "s";
284
289
  }
285
- }
286
- else {
290
+ } else {
287
291
  return Time;
288
292
  }
289
293
  };
290
294
  /**
291
295
  * Tidies up the given table by applying Bootstrap styling and removing unnecessary attributes.
292
- *
296
+ *
293
297
  * @param {HTMLElement} Table - The table element to be tidied up.
294
298
  */
295
299
  let TidyTable = (Table) => {
@@ -324,7 +328,7 @@ let TidyTable = (Table) => {
324
328
  let UtilityEnabled = (Name) => {
325
329
  if (localStorage.getItem("UserScript-Setting-" + Name) == null) {
326
330
  //DebugMode is off by default
327
- localStorage.setItem("UserScript-Setting-" + Name, (Name == "DebugMode" ? "false" : "true"));
331
+ localStorage.setItem("UserScript-Setting-" + Name, (Name == "DebugMode" || Name == "UnpkgCdn" ? "false" : "true"));
328
332
  }
329
333
  return localStorage.getItem("UserScript-Setting-" + Name) == "true";
330
334
  };
@@ -399,14 +403,13 @@ let ServerURL = (UtilityEnabled("DebugMode") ? "https://ghpages.xmoj-bbs.tech/"
399
403
  let CurrentUsername = document.querySelector("#profile").innerText;
400
404
  CurrentUsername = CurrentUsername.replaceAll(/[^a-zA-Z0-9]/g, "");
401
405
  let IsAdmin = AdminUserList.indexOf(CurrentUsername) !== -1;
402
- if (location.href.startsWith('http://')){
406
+ if (location.href.startsWith('http://')) {
403
407
  //use https
404
408
  location.href = location.href.replace('http://', 'https://');
405
409
  }
406
410
  if (location.host != "www.xmoj.tech") {
407
411
  location.host = "www.xmoj.tech";
408
- }
409
- else {
412
+ } else {
410
413
  document.body.classList.add("placeholder-glow");
411
414
  if (document.querySelector("#navbar") != null) {
412
415
  if (document.querySelector("body > div > div.jumbotron") != null) {
@@ -469,61 +472,83 @@ else {
469
472
  for (var i = 0; i < Temp.length; i++) {
470
473
  if (Temp[i].href.indexOf("bootstrap.min.css") != -1) {
471
474
  Temp[i].remove();
472
- }
473
- else if (Temp[i].href.indexOf("white.css") != -1) {
475
+ } else if (Temp[i].href.indexOf("white.css") != -1) {
474
476
  Temp[i].remove();
475
- }
476
- else if (Temp[i].href.indexOf("semantic.min.css") != -1) {
477
+ } else if (Temp[i].href.indexOf("semantic.min.css") != -1) {
477
478
  Temp[i].remove();
478
- }
479
- else if (Temp[i].href.indexOf("bootstrap-theme.min.css") != -1) {
479
+ } else if (Temp[i].href.indexOf("bootstrap-theme.min.css") != -1) {
480
480
  Temp[i].remove();
481
- }
482
- else if (Temp[i].href.indexOf("problem.css") != -1) {
481
+ } else if (Temp[i].href.indexOf("problem.css") != -1) {
483
482
  Temp[i].remove();
484
483
  }
485
484
  }
486
485
  if (UtilityEnabled("DarkMode")) {
487
486
  document.querySelector("html").setAttribute("data-bs-theme", "dark");
488
- }
489
- else {
487
+ } else {
490
488
  document.querySelector("html").setAttribute("data-bs-theme", "light");
491
489
  }
492
-
493
- let PopperScriptElement = document.createElement("script"); document.head.appendChild(PopperScriptElement);
494
- PopperScriptElement.type = "module";
495
- PopperScriptElement.src = "https://cdn.bootcdn.net/ajax/libs/popper.js/2.11.7/umd/popper.min.js";
496
- let CodeMirrorStyleElement = document.createElement("link"); document.head.appendChild(CodeMirrorStyleElement);
497
- CodeMirrorStyleElement.rel = "stylesheet";
498
- CodeMirrorStyleElement.href = "https://cdn.bootcdn.net/ajax/libs/codemirror/6.65.7/codemirror.min.css";
499
- let CodeMirrorThemeStyleElement = document.createElement("link"); document.head.appendChild(CodeMirrorThemeStyleElement);
500
- CodeMirrorThemeStyleElement.rel = "stylesheet";
501
- CodeMirrorThemeStyleElement.href = "https://cdn.bootcdn.net/ajax/libs/codemirror/6.65.7/theme/darcula.min.css";
502
- let CodeMirrorMergeStyleElement = document.createElement("link"); document.head.appendChild(CodeMirrorMergeStyleElement);
503
- CodeMirrorMergeStyleElement.rel = "stylesheet";
504
- CodeMirrorMergeStyleElement.href = "https://cdn.bootcdn.net/ajax/libs/codemirror/6.65.7/addon/merge/merge.min.css";
505
- let BootstrapStyleElement = document.createElement("link"); document.head.appendChild(BootstrapStyleElement);
506
- BootstrapStyleElement.rel = "stylesheet";
507
- BootstrapStyleElement.href = "https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/css/bootstrap.min.css";
508
- await new Promise((Resolve) => {
509
- PopperScriptElement.onload = () => {
510
- Resolve();
511
- };
512
- });
513
- Temp = document.querySelectorAll("script");
514
- for (var i = 0; i < Temp.length; i++) {
515
- if (Temp[i].src.indexOf("bootstrap.min.js") != -1) {
516
- Temp[i].remove();
517
- let BootstrapScriptElement = document.createElement("script"); document.head.appendChild(BootstrapScriptElement);
518
- BootstrapScriptElement.type = "module";
519
- BootstrapScriptElement.src = "https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/js/bootstrap.min.js";
520
- await new Promise((Resolve) => {
521
- BootstrapScriptElement.onload = () => {
522
- Resolve();
523
- };
524
- });
490
+ var resources = [
491
+ {
492
+ type: 'script',
493
+ src: 'https://cdn.bootcdn.net/ajax/libs/popper.js/2.11.7/umd/popper.min.js',
494
+ isModule: true
495
+ },
496
+ {
497
+ type: 'link',
498
+ href: 'https://cdn.bootcdn.net/ajax/libs/codemirror/6.65.7/codemirror.min.css',
499
+ rel: 'stylesheet'
500
+ },
501
+ {
502
+ type: 'link',
503
+ href: 'https://cdn.bootcdn.net/ajax/libs/codemirror/6.65.7/theme/darcula.min.css',
504
+ rel: 'stylesheet'
505
+ },
506
+ {
507
+ type: 'link',
508
+ href: 'https://cdn.bootcdn.net/ajax/libs/codemirror/6.65.7/addon/merge/merge.min.css',
509
+ rel: 'stylesheet'
510
+ },
511
+ {
512
+ type: 'link',
513
+ href: 'https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/css/bootstrap.min.css',
514
+ rel: 'stylesheet'
515
+ },
516
+ {
517
+ type: 'script',
518
+ src: 'https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/js/bootstrap.min.js',
519
+ isModule: true
525
520
  }
521
+ ];
522
+ if (UtilityEnabled("UnpkgCdn")) {
523
+ resources[0].src = 'https://unpkg.com/@popperjs/core@2.11.8/dist/umd/popper.min.js';
524
+ resources[4].href = 'https://unpkg.com/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css';
526
525
  }
526
+ let loadResources = async () => {
527
+ let promises = resources.map(resource => {
528
+ return new Promise((resolve, reject) => {
529
+ let element;
530
+ if (resource.type === 'script') {
531
+ element = document.createElement('script');
532
+ element.src = resource.src;
533
+ if (resource.isModule) {
534
+ element.type = 'module';
535
+ }
536
+ element.onload = resolve;
537
+ element.onerror = reject;
538
+ } else if (resource.type === 'link') {
539
+ element = document.createElement('link');
540
+ element.href = resource.href;
541
+ element.rel = resource.rel;
542
+ resolve(); // Stylesheets don't have an onload event
543
+ }
544
+ document.head.appendChild(element);
545
+ });
546
+ });
547
+
548
+ await Promise.all(promises);
549
+ };
550
+
551
+ loadResources();
527
552
  document.querySelector("nav").className = "navbar navbar-expand-lg bg-body-tertiary";
528
553
  document.querySelector("#navbar > ul:nth-child(1)").classList = "navbar-nav me-auto mb-2 mb-lg-0";
529
554
  document.querySelector("body > div > nav > div > div.navbar-header").outerHTML = `<a class="navbar-brand" href="https://www.xmoj.tech/">${UtilityEnabled("ReplaceXM") ? "高老师" : "小明"}的OJ</a><button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar"><span class="navbar-toggler-icon"></span></button>`;
@@ -669,7 +694,8 @@ else {
669
694
  (Hours < 10 ? "0" : "") + Hours + ":" +
670
695
  (Minutes < 10 ? "0" : "") + Minutes + ":" +
671
696
  (Seconds < 10 ? "0" : "") + Seconds;
672
- } catch (Error) { }
697
+ } catch (Error) {
698
+ }
673
699
 
674
700
  if (UtilityEnabled("ResetType")) {
675
701
  if (document.querySelector("#profile") != undefined &&
@@ -677,8 +703,7 @@ else {
677
703
  if (document.querySelector("#navbar > ul.nav.navbar-nav.navbar-right > li > ul").childNodes.length == 3) {
678
704
  document.querySelector("#navbar > ul.nav.navbar-nav.navbar-right > li > ul").childNodes[3].remove();
679
705
  }
680
- }
681
- else if (document.querySelector("#navbar > ul.nav.navbar-nav.navbar-right > li > ul > li:nth-child(3) > a > span") != undefined &&
706
+ } else if (document.querySelector("#navbar > ul.nav.navbar-nav.navbar-right > li > ul > li:nth-child(3) > a > span") != undefined &&
682
707
  document.querySelector("#navbar > ul.nav.navbar-nav.navbar-right > li > ul > li:nth-child(3) > a > span").innerText != "个人中心") {
683
708
  let PopupUL = document.querySelector("#navbar > ul.nav.navbar-nav.navbar-right > li > ul");
684
709
  PopupUL.innerHTML = `<li class="dropdown-item">修改帐号</li>
@@ -734,7 +759,7 @@ else {
734
759
  }
735
760
  }, 100);
736
761
 
737
- fetch(ServerURL + "/Update.json", { cache: "no-cache" })
762
+ fetch(ServerURL + "/Update.json", {cache: "no-cache"})
738
763
  .then((Response) => {
739
764
  return Response.json();
740
765
  })
@@ -762,61 +787,78 @@ else {
762
787
  }
763
788
  if (localStorage.getItem("UserScript-Update-LastVersion") != GM_info.script.version) {
764
789
  localStorage.setItem("UserScript-Update-LastVersion", GM_info.script.version);
765
- let UpdateDiv = document.createElement("div"); document.querySelector("body").appendChild(UpdateDiv);
790
+ let UpdateDiv = document.createElement("div");
791
+ document.querySelector("body").appendChild(UpdateDiv);
766
792
  UpdateDiv.className = "modal fade";
767
793
  UpdateDiv.id = "UpdateModal";
768
794
  UpdateDiv.tabIndex = -1;
769
- let UpdateDialog = document.createElement("div"); UpdateDiv.appendChild(UpdateDialog);
795
+ let UpdateDialog = document.createElement("div");
796
+ UpdateDiv.appendChild(UpdateDialog);
770
797
  UpdateDialog.className = "modal-dialog";
771
- let UpdateContent = document.createElement("div"); UpdateDialog.appendChild(UpdateContent);
798
+ let UpdateContent = document.createElement("div");
799
+ UpdateDialog.appendChild(UpdateContent);
772
800
  UpdateContent.className = "modal-content";
773
- let UpdateHeader = document.createElement("div"); UpdateContent.appendChild(UpdateHeader);
801
+ let UpdateHeader = document.createElement("div");
802
+ UpdateContent.appendChild(UpdateHeader);
774
803
  UpdateHeader.className = "modal-header";
775
- let UpdateTitle = document.createElement("h5"); UpdateHeader.appendChild(UpdateTitle);
804
+ let UpdateTitle = document.createElement("h5");
805
+ UpdateHeader.appendChild(UpdateTitle);
776
806
  UpdateTitle.className = "modal-title";
777
807
  UpdateTitle.innerText = "更新日志";
778
- let UpdateCloseButton = document.createElement("button"); UpdateHeader.appendChild(UpdateCloseButton);
808
+ let UpdateCloseButton = document.createElement("button");
809
+ UpdateHeader.appendChild(UpdateCloseButton);
779
810
  UpdateCloseButton.type = "button";
780
811
  UpdateCloseButton.className = "btn-close";
781
812
  UpdateCloseButton.setAttribute("data-bs-dismiss", "modal");
782
- let UpdateBody = document.createElement("div"); UpdateContent.appendChild(UpdateBody);
813
+ let UpdateBody = document.createElement("div");
814
+ UpdateContent.appendChild(UpdateBody);
783
815
  UpdateBody.className = "modal-body";
784
- let UpdateFooter = document.createElement("div"); UpdateContent.appendChild(UpdateFooter);
816
+ let UpdateFooter = document.createElement("div");
817
+ UpdateContent.appendChild(UpdateFooter);
785
818
  UpdateFooter.className = "modal-footer";
786
- let UpdateButton = document.createElement("button"); UpdateFooter.appendChild(UpdateButton);
819
+ let UpdateButton = document.createElement("button");
820
+ UpdateFooter.appendChild(UpdateButton);
787
821
  UpdateButton.type = "button";
788
822
  UpdateButton.className = "btn btn-secondary";
789
823
  UpdateButton.setAttribute("data-bs-dismiss", "modal");
790
824
  UpdateButton.innerText = "关闭";
791
825
  let Version = Object.keys(Response.UpdateHistory)[Object.keys(Response.UpdateHistory).length - 1]
792
826
  let Data = Response.UpdateHistory[Version];
793
- let UpdateDataCard = document.createElement("div"); UpdateBody.appendChild(UpdateDataCard);
827
+ let UpdateDataCard = document.createElement("div");
828
+ UpdateBody.appendChild(UpdateDataCard);
794
829
  UpdateDataCard.className = "card mb-3";
795
- let UpdateDataCardBody = document.createElement("div"); UpdateDataCard.appendChild(UpdateDataCardBody);
830
+ let UpdateDataCardBody = document.createElement("div");
831
+ UpdateDataCard.appendChild(UpdateDataCardBody);
796
832
  UpdateDataCardBody.className = "card-body";
797
- let UpdateDataCardTitle = document.createElement("h5"); UpdateDataCardBody.appendChild(UpdateDataCardTitle);
833
+ let UpdateDataCardTitle = document.createElement("h5");
834
+ UpdateDataCardBody.appendChild(UpdateDataCardTitle);
798
835
  UpdateDataCardTitle.className = "card-title";
799
836
  UpdateDataCardTitle.innerText = Version;
800
- let UpdateDataCardSubtitle = document.createElement("h6"); UpdateDataCardBody.appendChild(UpdateDataCardSubtitle);
837
+ let UpdateDataCardSubtitle = document.createElement("h6");
838
+ UpdateDataCardBody.appendChild(UpdateDataCardSubtitle);
801
839
  UpdateDataCardSubtitle.className = "card-subtitle mb-2 text-muted";
802
840
  UpdateDataCardSubtitle.innerHTML = GetRelativeTime(Data.UpdateDate);
803
- let UpdateDataCardText = document.createElement("p"); UpdateDataCardBody.appendChild(UpdateDataCardText);
841
+ let UpdateDataCardText = document.createElement("p");
842
+ UpdateDataCardBody.appendChild(UpdateDataCardText);
804
843
  UpdateDataCardText.className = "card-text";
805
844
  //release notes
806
- if (Data.Notes != undefined){
845
+ if (Data.Notes != undefined) {
807
846
  UpdateDataCardText.innerHTML = Data.Notes;
808
847
  }
809
- let UpdateDataCardList = document.createElement("ul"); UpdateDataCardText.appendChild(UpdateDataCardList);
848
+ let UpdateDataCardList = document.createElement("ul");
849
+ UpdateDataCardText.appendChild(UpdateDataCardList);
810
850
  UpdateDataCardList.className = "list-group list-group-flush";
811
851
  for (let j = 0; j < Data.UpdateContents.length; j++) {
812
- let UpdateDataCardListItem = document.createElement("li"); UpdateDataCardList.appendChild(UpdateDataCardListItem);
852
+ let UpdateDataCardListItem = document.createElement("li");
853
+ UpdateDataCardList.appendChild(UpdateDataCardListItem);
813
854
  UpdateDataCardListItem.className = "list-group-item";
814
855
  UpdateDataCardListItem.innerHTML =
815
856
  "(<a href=\"https://github.com/XMOJ-Script-dev/XMOJ-Script/pull/" + Data.UpdateContents[j].PR + "\" target=\"_blank\">" +
816
857
  "#" + Data.UpdateContents[j].PR + "</a>) " +
817
858
  Data.UpdateContents[j].Description;
818
859
  }
819
- let UpdateDataCardLink = document.createElement("a"); UpdateDataCardBody.appendChild(UpdateDataCardLink);
860
+ let UpdateDataCardLink = document.createElement("a");
861
+ UpdateDataCardBody.appendChild(UpdateDataCardLink);
820
862
  UpdateDataCardLink.className = "card-link";
821
863
  UpdateDataCardLink.href = "https://github.com/XMOJ-Script-dev/XMOJ-Script/releases/tag/" + Version;
822
864
  UpdateDataCardLink.target = "_blank";
@@ -824,7 +866,7 @@ else {
824
866
  new bootstrap.Modal(document.getElementById("UpdateModal")).show();
825
867
  }
826
868
  });
827
- fetch(ServerURL + "/AddonScript.js", { cache: "no-cache" })
869
+ fetch(ServerURL + "/AddonScript.js", {cache: "no-cache"})
828
870
  .then((Response) => {
829
871
  return Response.text();
830
872
  })
@@ -873,7 +915,8 @@ else {
873
915
  ToastDismissButton.addEventListener("click", () => {
874
916
  RequestAPI("ReadBBSMention", {
875
917
  "MentionID": Number(MentionList[i].MentionID)
876
- }, () => { });
918
+ }, () => {
919
+ });
877
920
  Toast.remove();
878
921
  });
879
922
  ToastFooter.appendChild(ToastDismissButton);
@@ -885,7 +928,8 @@ else {
885
928
  open("https://www.xmoj.tech/discuss3/thread.php?tid=" + MentionList[i].PostID, "_blank");
886
929
  RequestAPI("ReadBBSMention", {
887
930
  "MentionID": Number(MentionList[i].MentionID)
888
- }, () => { });
931
+ }, () => {
932
+ });
889
933
  });
890
934
  ToastFooter.appendChild(ToastViewButton);
891
935
  ToastBody.appendChild(ToastFooter);
@@ -938,7 +982,8 @@ else {
938
982
  ToastDismissButton.addEventListener("click", () => {
939
983
  RequestAPI("ReadMailMention", {
940
984
  "MentionID": Number(MentionList[i].MentionID)
941
- }, () => { });
985
+ }, () => {
986
+ });
942
987
  });
943
988
  ToastFooter.appendChild(ToastDismissButton);
944
989
  let ToastViewButton = document.createElement("button");
@@ -949,7 +994,8 @@ else {
949
994
  open("https://www.xmoj.tech/mail.php?to_user=" + MentionList[i].FromUserID, "_blank");
950
995
  RequestAPI("ReadMailMention", {
951
996
  "MentionID": Number(MentionList[i].MentionID)
952
- }, () => { });
997
+ }, () => {
998
+ });
953
999
  });
954
1000
  ToastFooter.appendChild(ToastViewButton);
955
1001
  ToastBody.appendChild(ToastFooter);
@@ -994,11 +1040,9 @@ else {
994
1040
  Row.classList.add("list-group-item");
995
1041
  if (Data[i].Type == "A") {
996
1042
  Row.classList.add("list-group-item-success");
997
- }
998
- else if (Data[i].Type == "F") {
1043
+ } else if (Data[i].Type == "F") {
999
1044
  Row.classList.add("list-group-item-warning");
1000
- }
1001
- else if (Data[i].Type == "D") {
1045
+ } else if (Data[i].Type == "D") {
1002
1046
  Row.classList.add("list-group-item-danger");
1003
1047
  }
1004
1048
  if (Data[i].Children == undefined) {
@@ -1012,8 +1056,7 @@ else {
1012
1056
  }
1013
1057
  if (localStorage.getItem("UserScript-Setting-" + Data[i].ID) == "false") {
1014
1058
  CheckBox.checked = false;
1015
- }
1016
- else {
1059
+ } else {
1017
1060
  CheckBox.checked = true;
1018
1061
  }
1019
1062
  CheckBox.addEventListener("change", () => {
@@ -1026,8 +1069,7 @@ else {
1026
1069
  Label.htmlFor = Data[i].ID;
1027
1070
  Label.innerText = Data[i].Name;
1028
1071
  Row.appendChild(Label);
1029
- }
1030
- else {
1072
+ } else {
1031
1073
  let Label = document.createElement("label");
1032
1074
  Label.innerText = Data[i].Name;
1033
1075
  Row.appendChild(Label);
@@ -1040,56 +1082,61 @@ else {
1040
1082
  return List;
1041
1083
  };
1042
1084
  UtilitiesCardBody.appendChild(CreateList([
1043
- { "ID": "ACMRank", "Type": "A", "Name": "比赛ACM排名,并且能下载ACM排名" },
1044
- { "ID": "Discussion", "Type": "F", "Name": "恢复讨论与短消息功能" },
1045
- { "ID": "MoreSTD", "Type": "F", "Name": "查看到更多标程" },
1085
+ {"ID": "ACMRank", "Type": "A", "Name": "比赛ACM排名,并且能下载ACM排名"},
1086
+ {"ID": "Discussion", "Type": "F", "Name": "恢复讨论与短消息功能"},
1087
+ {"ID": "MoreSTD", "Type": "F", "Name": "查看到更多标程"},
1046
1088
  {
1047
1089
  "ID": "StudyMode", "Type": "A", "Name": "学术模式", "Children": [
1048
- { "ID": "ApplyData", "Type": "A", "Name": "获取数据功能" },
1049
- { "ID": "AutoCheat", "Type": "A", "Name": "自动提交当年代码" }
1090
+ {"ID": "ApplyData", "Type": "A", "Name": "获取数据功能"},
1091
+ {"ID": "AutoCheat", "Type": "A", "Name": "自动提交当年代码"}
1050
1092
  ]
1051
1093
  },
1052
- { "ID": "Rating", "Type": "A", "Name": "添加用户评分和用户名颜色" },
1053
- { "ID": "AutoRefresh", "Type": "A", "Name": "比赛列表、比赛排名界面自动刷新" },
1054
- { "ID": "AutoCountdown", "Type": "A", "Name": "比赛列表等界面的时间自动倒计时" },
1055
- { "ID": "DownloadPlayback", "Type": "A", "Name": "回放视频增加下载功能" },
1056
- { "ID": "ImproveACRate", "Type": "A", "Name": "自动提交已AC题目以提高AC率" },
1057
- { "ID": "AutoO2", "Type": "F", "Name": "代码提交界面自动选择O2优化" },
1094
+ {"ID": "Rating", "Type": "A", "Name": "添加用户评分和用户名颜色"},
1095
+ {"ID": "AutoRefresh", "Type": "A", "Name": "比赛列表、比赛排名界面自动刷新"},
1096
+ {"ID": "AutoCountdown", "Type": "A", "Name": "比赛列表等界面的时间自动倒计时"},
1097
+ {"ID": "DownloadPlayback", "Type": "A", "Name": "回放视频增加下载功能"},
1098
+ {"ID": "ImproveACRate", "Type": "A", "Name": "自动提交已AC题目以提高AC率"},
1099
+ {"ID": "AutoO2", "Type": "F", "Name": "代码提交界面自动选择O2优化"},
1058
1100
  {
1059
1101
  "ID": "Beautify", "Type": "F", "Name": "美化界面", "Children": [
1060
- { "ID": "NewBootstrap", "Type": "F", "Name": "使用新版的Bootstrap样式库*" },
1061
- { "ID": "ResetType", "Type": "F", "Name": "重新排版*" },
1062
- { "ID": "AddColorText", "Type": "A", "Name": "增加彩色文字" },
1063
- { "ID": "AddUnits", "Type": "A", "Name": "状态界面内存与耗时添加单位" },
1064
- { "ID": "DarkMode", "Type": "A", "Name": "使用暗色模式" },
1065
- { "ID": "AddAnimation", "Type": "A", "Name": "增加动画" },
1066
- { "ID": "ReplaceYN", "Type": "F", "Name": "题目前对错的Y和N替换为勾和叉" },
1067
- { "ID": "RemoveAlerts", "Type": "D", "Name": "去除多余反复的提示" },
1068
- { "ID": "Translate", "Type": "F", "Name": "统一使用中文,翻译了部分英文*" },
1069
- { "ID": "ReplaceLinks", "Type": "F", "Name": "将网站中所有以方括号包装的链接替换为按钮" },
1070
- { "ID": "RemoveUseless", "Type": "D", "Name": "删去无法使用的功能*" },
1071
- { "ID": "ReplaceXM", "Type": "F", "Name": "将网站中所有“小明”和“我”关键字替换为“高老师”,所有“小红”替换为“徐师娘”,所有“小粉”替换为“彩虹”,所有“下海”、“海上”替换为“上海”" }
1102
+ {"ID": "NewBootstrap", "Type": "F", "Name": "使用新版的Bootstrap样式库*"},
1103
+ {"ID": "ResetType", "Type": "F", "Name": "重新排版*"},
1104
+ {"ID": "AddColorText", "Type": "A", "Name": "增加彩色文字"},
1105
+ {"ID": "AddUnits", "Type": "A", "Name": "状态界面内存与耗时添加单位"},
1106
+ {"ID": "DarkMode", "Type": "A", "Name": "使用暗色模式"},
1107
+ {"ID": "AddAnimation", "Type": "A", "Name": "增加动画"},
1108
+ {"ID": "ReplaceYN", "Type": "F", "Name": "题目前对错的Y和N替换为勾和叉"},
1109
+ {"ID": "RemoveAlerts", "Type": "D", "Name": "去除多余反复的提示"},
1110
+ {"ID": "Translate", "Type": "F", "Name": "统一使用中文,翻译了部分英文*"},
1111
+ {"ID": "ReplaceLinks", "Type": "F", "Name": "将网站中所有以方括号包装的链接替换为按钮"},
1112
+ {"ID": "RemoveUseless", "Type": "D", "Name": "删去无法使用的功能*"},
1113
+ {
1114
+ "ID": "ReplaceXM",
1115
+ "Type": "F",
1116
+ "Name": "将网站中所有“小明”和“我”关键字替换为“高老师”,所有“小红”替换为“徐师娘”,所有“小粉”替换为“彩虹”,所有“下海”、“海上”替换为“上海”"
1117
+ }
1072
1118
  ]
1073
1119
  },
1074
- { "ID": "AutoLogin", "Type": "A", "Name": "在需要登录的界面自动跳转到登陆界面" },
1075
- { "ID": "SavePassword", "Type": "A", "Name": "自动保存用户名与密码,免去每次手动输入密码的繁琐" },
1076
- { "ID": "CopySamples", "Type": "F", "Name": "题目界面测试样例有时复制无效" },
1077
- { "ID": "RefreshSolution", "Type": "F", "Name": "状态页面结果自动刷新每次只能刷新一个" },
1078
- { "ID": "CopyMD", "Type": "A", "Name": "复制题目或题解内容" },
1079
- { "ID": "OpenAllProblem", "Type": "A", "Name": "比赛题目界面一键打开所有题目" },
1120
+ {"ID": "AutoLogin", "Type": "A", "Name": "在需要登录的界面自动跳转到登陆界面"},
1121
+ {"ID": "SavePassword", "Type": "A", "Name": "自动保存用户名与密码,免去每次手动输入密码的繁琐"},
1122
+ {"ID": "CopySamples", "Type": "F", "Name": "题目界面测试样例有时复制无效"},
1123
+ {"ID": "RefreshSolution", "Type": "F", "Name": "状态页面结果自动刷新每次只能刷新一个"},
1124
+ {"ID": "CopyMD", "Type": "A", "Name": "复制题目或题解内容"},
1125
+ {"ID": "OpenAllProblem", "Type": "A", "Name": "比赛题目界面一键打开所有题目"},
1080
1126
  {
1081
1127
  "ID": "CheckCode", "Type": "A", "Name": "提交代码前对代码进行检查", "Children": [
1082
- { "ID": "IOFile", "Type": "A", "Name": "是否使用了文件输入输出(如果需要使用)" },
1083
- { "ID": "CompileError", "Type": "A", "Name": "是否有编译错误" }
1128
+ {"ID": "IOFile", "Type": "A", "Name": "是否使用了文件输入输出(如果需要使用)"},
1129
+ {"ID": "CompileError", "Type": "A", "Name": "是否有编译错误"}
1084
1130
  ]
1085
1131
  },
1086
- { "ID": "ExportACCode", "Type": "F", "Name": "导出AC代码每一道题目一个文件" },
1087
- { "ID": "LoginFailed", "Type": "F", "Name": "修复登录后跳转失败*" },
1088
- { "ID": "NewDownload", "Type": "A", "Name": "下载页面增加下载内容" },
1089
- { "ID": "CompareSource", "Type": "A", "Name": "比较代码" },
1090
- { "ID": "BBSPopup", "Type": "A", "Name": "讨论提醒" },
1091
- { "ID": "MessagePopup", "Type": "A", "Name": "短消息提醒" },
1092
- { "ID": "DebugMode", "Type": "A", "Name": "调试模式(仅供开发者使用)" }
1132
+ {"ID": "ExportACCode", "Type": "F", "Name": "导出AC代码每一道题目一个文件"},
1133
+ {"ID": "LoginFailed", "Type": "F", "Name": "修复登录后跳转失败*"},
1134
+ {"ID": "NewDownload", "Type": "A", "Name": "下载页面增加下载内容"},
1135
+ {"ID": "CompareSource", "Type": "A", "Name": "比较代码"},
1136
+ {"ID": "BBSPopup", "Type": "A", "Name": "讨论提醒"},
1137
+ {"ID": "MessagePopup", "Type": "A", "Name": "短消息提醒"},
1138
+ {"ID": "DebugMode", "Type": "A", "Name": "调试模式(仅供开发者使用)"},
1139
+ {"ID": "UnpkgCdn", "Type": "A", "Name": "使用unpkg CDN(不建议使用)"}
1093
1140
  ]));
1094
1141
  let UtilitiesCardFooter = document.createElement("div");
1095
1142
  UtilitiesCardFooter.className = "card-footer text-muted";
@@ -1116,8 +1163,7 @@ else {
1116
1163
  FeedbackCardBody.appendChild(FeedbackCardLink);
1117
1164
  FeedbackCard.appendChild(FeedbackCardBody);
1118
1165
  Container.appendChild(FeedbackCard);
1119
- }
1120
- else {
1166
+ } else {
1121
1167
  let Temp = document.querySelector("body > div > div.mt-3 > div > div.col-md-8").children;
1122
1168
  let NewsData = [];
1123
1169
  for (let i = 0; i < Temp.length; i += 2) {
@@ -1127,7 +1173,7 @@ else {
1127
1173
  Time = Temp[i].children[1].innerText;
1128
1174
  }
1129
1175
  let Body = Temp[i + 1].innerHTML;
1130
- NewsData.push({ "Title": Title, "Time": new Date(Time), "Body": Body });
1176
+ NewsData.push({"Title": Title, "Time": new Date(Time), "Body": Body});
1131
1177
  }
1132
1178
  document.querySelector("body > div > div.mt-3 > div > div.col-md-8").innerHTML = "";
1133
1179
  for (let i = 0; i < NewsData.length; i++) {
@@ -1203,8 +1249,7 @@ else {
1203
1249
  setTimeout(() => {
1204
1250
  location.href = "https://www.xmoj.tech/problemset.php";
1205
1251
  }, 1000);
1206
- }
1207
- else {
1252
+ } else {
1208
1253
  let PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") +
1209
1254
  "-Problem-" + SearchParams.get("pid") + "-PID");
1210
1255
 
@@ -1318,8 +1363,7 @@ else {
1318
1363
  DiscussButton.addEventListener("click", () => {
1319
1364
  if (SearchParams.get("cid") != null) {
1320
1365
  open("https://www.xmoj.tech/discuss3/discuss.php?pid=" + PID, "_blank");
1321
- }
1322
- else {
1366
+ } else {
1323
1367
  open("https://www.xmoj.tech/discuss3/discuss.php?pid=" + SearchParams.get("id"), "_blank");
1324
1368
  }
1325
1369
  });
@@ -1528,8 +1572,7 @@ else {
1528
1572
  if (SearchParams.get("cid") === null) {
1529
1573
  localStorage.setItem("UserScript-Solution-" + SID + "-Problem",
1530
1574
  Temp[i].childNodes[1].innerText);
1531
- }
1532
- else {
1575
+ } else {
1533
1576
  localStorage.setItem("UserScript-Solution-" + SID + "-Contest",
1534
1577
  SearchParams.get("cid"));
1535
1578
  localStorage.setItem("UserScript-Solution-" + SID + "-PID-Contest",
@@ -1600,8 +1643,7 @@ else {
1600
1643
  RefreshResult(SolutionID)
1601
1644
  }, 500);
1602
1645
  TempHTML += "<img style=\"margin-left: 5px\" height=\"18\" width=\"18\" src=\"image/loader.gif\">";
1603
- }
1604
- else if (ResponseData[0] == 4 && UtilityEnabled("UploadStd")) {
1646
+ } else if (ResponseData[0] == 4 && UtilityEnabled("UploadStd")) {
1605
1647
  if (SearchParams.get("cid") == null)
1606
1648
  CurrentRow.cells[1].innerText;
1607
1649
  let Std = StdList.find((Element) => {
@@ -1609,15 +1651,13 @@ else {
1609
1651
  });
1610
1652
  if (Std != undefined) {
1611
1653
  TempHTML += "✅";
1612
- }
1613
- else {
1654
+ } else {
1614
1655
  RequestAPI("UploadStd", {
1615
1656
  "ProblemID": Number(PID),
1616
1657
  }, (Result) => {
1617
1658
  if (Result.Success) {
1618
1659
  CurrentRow.cells[2].innerHTML += "🆗";
1619
- }
1620
- else {
1660
+ } else {
1621
1661
  CurrentRow.cells[2].innerHTML += "⚠️";
1622
1662
  }
1623
1663
  });
@@ -1630,7 +1670,8 @@ else {
1630
1670
  }
1631
1671
  } else if (location.pathname == "/contest.php") {
1632
1672
  if (UtilityEnabled("AutoCountdown")) {
1633
- clock = () => { }
1673
+ clock = () => {
1674
+ }
1634
1675
  }
1635
1676
  if (location.href.indexOf("?cid=") == -1) {
1636
1677
  if (UtilityEnabled("ResetType")) {
@@ -1707,8 +1748,7 @@ else {
1707
1748
  if (UtilityEnabled("RemoveAlerts") && document.querySelector("body > div > div.mt-3 > center").innerHTML.indexOf("尚未开始比赛") != -1) {
1708
1749
  document.querySelector("body > div > div.mt-3 > center > a").setAttribute("href",
1709
1750
  "start_contest.php?cid=" + SearchParams.get("cid"));
1710
- }
1711
- else if (UtilityEnabled("AutoRefresh")) {
1751
+ } else if (UtilityEnabled("AutoRefresh")) {
1712
1752
  addEventListener("focus", async () => {
1713
1753
  await fetch(location.href)
1714
1754
  .then((Response) => {
@@ -1723,8 +1763,7 @@ else {
1723
1763
  if (Status.indexOf("Y") != -1) {
1724
1764
  document.querySelector("#problemset > tbody").children[i].children[0].children[0].className = "status status_y";
1725
1765
  document.querySelector("#problemset > tbody").children[i].children[0].children[0].innerText = "✓";
1726
- }
1727
- else if (Status.indexOf("N") != -1) {
1766
+ } else if (Status.indexOf("N") != -1) {
1728
1767
  document.querySelector("#problemset > tbody").children[i].children[0].children[0].className = "status status_n";
1729
1768
  document.querySelector("#problemset > tbody").children[i].children[0].children[0].innerText = "✗";
1730
1769
  }
@@ -1913,8 +1952,7 @@ else {
1913
1952
  if (SearchParams.get("ByUserScript") == null) {
1914
1953
  if (document.querySelector("body > div > div.mt-3 > center > h3").innerText == "比赛排名") {
1915
1954
  document.querySelector("#rank").innerText = "比赛暂时还没有排名";
1916
- }
1917
- else {
1955
+ } else {
1918
1956
  document.querySelector("body > div > div.mt-3 > center > h3").innerText =
1919
1957
  document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(
1920
1958
  document.querySelector("body > div > div.mt-3 > center > h3").innerText.indexOf(" -- ") + 4)
@@ -1955,23 +1993,19 @@ else {
1955
1993
  let ErrorCount = "";
1956
1994
  if (Solved) {
1957
1995
  ErrorCount = (Blue == 170 ? 5 : (Blue - 51) / 32);
1958
- }
1959
- else {
1996
+ } else {
1960
1997
  ErrorCount = (Blue == 22 ? 15 : (170 - Blue) / 10);
1961
1998
  }
1962
1999
  if (NoData) {
1963
2000
  BackgroundColor = "";
1964
- }
1965
- else if (FirstBlood) {
2001
+ } else if (FirstBlood) {
1966
2002
  BackgroundColor = "rgb(127, 127, 255)";
1967
- }
1968
- else if (Solved) {
2003
+ } else if (Solved) {
1969
2004
  BackgroundColor = "rgb(0, 255, 0, " + Math.max(1 / 10 * (10 - ErrorCount), 0.2) + ")";
1970
2005
  if (ErrorCount != 0) {
1971
2006
  InnerText += " (" + (ErrorCount == 5 ? "4+" : ErrorCount) + ")";
1972
2007
  }
1973
- }
1974
- else {
2008
+ } else {
1975
2009
  BackgroundColor = "rgba(255, 0, 0, " + Math.min(ErrorCount / 10 + 0.2, 1) + ")";
1976
2010
  if (ErrorCount != 0) {
1977
2011
  InnerText += " (" + (ErrorCount == 15 ? "14+" : ErrorCount) + ")";
@@ -1990,8 +2024,7 @@ else {
1990
2024
  addEventListener("focus", RefreshOIRank);
1991
2025
  }
1992
2026
  }
1993
- }
1994
- else if (UtilityEnabled("ACMRank")) {
2027
+ } else if (UtilityEnabled("ACMRank")) {
1995
2028
  if (document.querySelector("body > div > div.mt-3 > center > h3").innerText != "比赛排名") {
1996
2029
  document.querySelector("body > div > div.mt-3 > center > h3").innerText =
1997
2030
  document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(
@@ -2011,13 +2044,13 @@ else {
2011
2044
  .then(async (Response) => {
2012
2045
  RankData = [];
2013
2046
 
2014
- let Table = document.querySelector("#rank"); Table.innerHTML = "";
2047
+ let Table = document.querySelector("#rank");
2048
+ Table.innerHTML = "";
2015
2049
  let StartPosition = Response.indexOf("var solutions=") + 14;
2016
2050
  let EndPosition = Response.indexOf("}];", StartPosition) + 2;
2017
2051
  if (EndPosition == 1) {
2018
2052
  Table.innerHTML = "暂时还没有人提交呢";
2019
- }
2020
- else {
2053
+ } else {
2021
2054
  let SubmitRecord = JSON.parse(Response.substring(StartPosition, EndPosition));
2022
2055
 
2023
2056
  for (let i = 0; i < SubmitRecord.length; i++) {
@@ -2082,75 +2115,216 @@ else {
2082
2115
  return 0;
2083
2116
  });
2084
2117
 
2085
- let Header = document.createElement("thead"); Table.appendChild(Header);
2086
- let RowHeader = document.createElement("tr"); Header.appendChild(RowHeader);
2087
- let MetalHeader = document.createElement("th"); RowHeader.appendChild(MetalHeader); MetalHeader.innerText = "排名"; MetalHeader.style.width = "5%";
2088
- let UsernameHeader = document.createElement("th"); RowHeader.appendChild(UsernameHeader); UsernameHeader.innerText = "用户"; UsernameHeader.style.width = "10%";
2089
- let NicknameHeader = document.createElement("th"); RowHeader.appendChild(NicknameHeader); NicknameHeader.innerText = "昵称"; NicknameHeader.style.width = "10%";
2090
- let NameHeader = document.createElement("th"); RowHeader.appendChild(NameHeader); NameHeader.innerText = "姓名"; NameHeader.style.width = "5%";
2091
- let SolvedHeader = document.createElement("th"); RowHeader.appendChild(SolvedHeader); SolvedHeader.innerText = "AC数"; SolvedHeader.style.width = "5%";
2092
- let PenaltyHeader = document.createElement("th"); RowHeader.appendChild(PenaltyHeader); PenaltyHeader.innerText = "罚时"; PenaltyHeader.style.width = "10%";
2118
+ let Header = document.createElement("thead");
2119
+ Table.appendChild(Header);
2120
+ let RowHeader = document.createElement("tr");
2121
+ Header.appendChild(RowHeader);
2122
+ let MetalHeader = document.createElement("th");
2123
+ RowHeader.appendChild(MetalHeader);
2124
+ MetalHeader.innerText = "排名";
2125
+ MetalHeader.style.width = "5%";
2126
+ let UsernameHeader = document.createElement("th");
2127
+ RowHeader.appendChild(UsernameHeader);
2128
+ UsernameHeader.innerText = "用户";
2129
+ UsernameHeader.style.width = "10%";
2130
+ let NicknameHeader = document.createElement("th");
2131
+ RowHeader.appendChild(NicknameHeader);
2132
+ NicknameHeader.innerText = "昵称";
2133
+ NicknameHeader.style.width = "10%";
2134
+ let NameHeader = document.createElement("th");
2135
+ RowHeader.appendChild(NameHeader);
2136
+ NameHeader.innerText = "姓名";
2137
+ NameHeader.style.width = "5%";
2138
+ let SolvedHeader = document.createElement("th");
2139
+ RowHeader.appendChild(SolvedHeader);
2140
+ SolvedHeader.innerText = "AC数";
2141
+ SolvedHeader.style.width = "5%";
2142
+ let PenaltyHeader = document.createElement("th");
2143
+ RowHeader.appendChild(PenaltyHeader);
2144
+ PenaltyHeader.innerText = "罚时";
2145
+ PenaltyHeader.style.width = "10%";
2093
2146
 
2094
2147
  for (let i = 0; i < ProblemCount; i++) {
2095
- let ProblemHeader = document.createElement("th"); RowHeader.appendChild(ProblemHeader);
2096
- let ProblemLink = document.createElement("a"); ProblemHeader.appendChild(ProblemLink);
2097
- ProblemLink.href = "problem.php?cid=" + SearchParams.get("cid") + "&pid=" + i; ProblemLink.innerText = String.fromCharCode(65 + i);
2098
- ProblemHeader.classList.add("header"); ProblemHeader.style.width = (50 / ProblemCount) + "%";
2148
+ let ProblemHeader = document.createElement("th");
2149
+ RowHeader.appendChild(ProblemHeader);
2150
+ let ProblemLink = document.createElement("a");
2151
+ ProblemHeader.appendChild(ProblemLink);
2152
+ ProblemLink.href = "problem.php?cid=" + SearchParams.get("cid") + "&pid=" + i;
2153
+ ProblemLink.innerText = String.fromCharCode(65 + i);
2154
+ ProblemHeader.classList.add("header");
2155
+ ProblemHeader.style.width = (50 / ProblemCount) + "%";
2099
2156
  }
2100
2157
 
2101
- let Body = document.createElement("tbody"); Table.appendChild(Body);
2158
+ let Body = document.createElement("tbody");
2159
+ Table.appendChild(Body);
2102
2160
  Body.className = "table-group-divider";
2103
2161
  for (let i = 0; i < RankData.length; i++) {
2104
2162
  let RowData = RankData[i];
2105
- let Row = document.createElement("tr"); Body.appendChild(Row);
2106
- let MetalCell = document.createElement("td"); Row.appendChild(MetalCell);
2107
- let UsernameCell = document.createElement("td"); Row.appendChild(UsernameCell);
2108
- let NicknameCell = document.createElement("td"); Row.appendChild(NicknameCell);
2109
- let NameCell = document.createElement("td"); Row.appendChild(NameCell);
2110
- let SolvedCell = document.createElement("td"); Row.appendChild(SolvedCell);
2111
- let PenaltyCell = document.createElement("td"); Row.appendChild(PenaltyCell);
2163
+ let Row = document.createElement("tr");
2164
+ Body.appendChild(Row);
2165
+ let MetalCell = document.createElement("td");
2166
+ Row.appendChild(MetalCell);
2167
+ let UsernameCell = document.createElement("td");
2168
+ Row.appendChild(UsernameCell);
2169
+ let NicknameCell = document.createElement("td");
2170
+ Row.appendChild(NicknameCell);
2171
+ let NameCell = document.createElement("td");
2172
+ Row.appendChild(NameCell);
2173
+ let SolvedCell = document.createElement("td");
2174
+ Row.appendChild(SolvedCell);
2175
+ let PenaltyCell = document.createElement("td");
2176
+ Row.appendChild(PenaltyCell);
2112
2177
 
2113
- let Medal = document.createElement("span"); MetalCell.appendChild(Medal);
2178
+ let Medal = document.createElement("span");
2179
+ MetalCell.appendChild(Medal);
2114
2180
  Medal.innerText = i + 1;
2115
2181
  Medal.classList.add("badge");
2116
2182
  if (i <= RankData.length * 0.05) {
2117
2183
  Medal.classList.add("text-bg-danger");
2118
- }
2119
- else if (i <= RankData.length * 0.15) {
2184
+ } else if (i <= RankData.length * 0.15) {
2120
2185
  Medal.classList.add("text-bg-warning");
2121
- }
2122
- else if (i <= RankData.length * 0.4) {
2186
+ } else if (i <= RankData.length * 0.4) {
2123
2187
  Medal.classList.add("text-bg-primary");
2124
- }
2125
- else {
2188
+ } else {
2126
2189
  Medal.classList.add("text-bg-secondary");
2127
2190
  }
2128
2191
 
2129
- let UsernameSpan = document.createElement("span"); UsernameCell.appendChild(UsernameSpan);
2192
+ let UsernameSpan = document.createElement("span");
2193
+ UsernameCell.appendChild(UsernameSpan);
2130
2194
  GetUsernameHTML(UsernameSpan, RowData.Username);
2131
2195
  if (RowData.Username == CurrentUsername) {
2132
2196
  Row.classList.add("table-primary");
2133
2197
  }
2134
2198
  if (RowData.QuickSubmitCount >= 2) {
2135
- let QuickSubmitBadge = document.createElement("span"); UsernameCell.appendChild(QuickSubmitBadge);
2136
- QuickSubmitBadge.innerText = "作弊者";
2199
+ let QuickSubmitBadge = document.createElement("span");
2200
+ UsernameCell.appendChild(QuickSubmitBadge);
2201
+ QuickSubmitBadge.innerText = "疑似提交当年代码";
2137
2202
  QuickSubmitBadge.className = "badge text-bg-warning ms-2";
2138
2203
  }
2139
2204
 
2140
2205
  NicknameCell.innerText = (RowData.Nickname.length < 16 ? RowData.Nickname : RowData.Nickname.substring(0, 15) + "...");
2141
2206
 
2142
2207
  let Names = {
2143
- "huangkai": "黄开", "chenlangning": "陈朗宁", "chensiru": "陈斯如", "chentianle": "陈天乐", "chenxuanhe": "陈宣合", "chenzecong": "陈泽聪", "chenzerui": "陈泽睿", "danwenxiao": "单文骁", "dongminghui": "董明辉", "gaochenming": "高晨茗", "guoqingtong": "郭庆桐", "guoruiqun": "郭睿群", "guyuchen": "顾毓辰",
2144
- "hanshujian": "韩书简", "heshuhan": "贺书瀚", "hexinyi": "何昕弈", "huangmingxuan": "黄铭宣", "huangruina": "黄睿纳", "huangwei": "黄唯", "huyiyang": "胡以杨", "jiangxingyu": "姜星宇", "jingtaiyu": "荆泰宇", "jinweizhe": "金炜喆", "leijiahan": "雷家涵",
2145
- "lianzhongzhe": "连中哲", "liaoyanxu": "廖彦旭", "lingzixiang": "凌梓翔", "linziyi": "林子懿", "liujianhao": "刘健豪", "liujiankun": "刘健坤", "liuxianyong": "刘先勇", "liuxixian": "刘希贤", "liyihan": "李亦涵", "luojinyang": "罗金阳", "lutianfeng": "陆天枫",
2146
- "meitianyi": "梅天一", "panyinliang": "潘胤良", "pengyixuan": "彭议萱", "putong": "蒲通", "qianqingyuan": "钱清源", "qidekai": "戚得凯", "shanwenxiao": "单文骁", "shenxichen": "沈熙晨", "shihongxi": "施泓熙", "shimufan": "施慕梵", "shiyichen": "施奕辰",
2147
- "shiyunhao": "施云浩", "shuxinmo": "舒馨墨", "suiruochen": "隋若宸", "sunyihan": "孙艺涵", "sunyimiao": "孙义淼", "tangchao": "唐潮", "tangyuhan": "唐钰涵", "tanhaoxuan": "谭皓轩", "taoxianyu": "陶羡榆", "wangkangming": "王康明", "wangminghao": "王明浩",
2148
- "wangmingshuo": "王茗铄", "wangpengyu": "王芃雨", "wangsiyuan3": "王思源", "wangtianqi": "王天琦", "wangzetong": "王泽通", "wanxinlian": "万馨联", "wensiyi": "闻思奕", "wujinhong": "吴锦鸿", "wurunze": "吴润泽", "wuyukai": "巫昱恺", "xiangjicheng": "项际诚",
2149
- "xiaoguanxun": "肖贯勋", "xiaojiasheng": "肖嘉盛", "xiaruicheng": "夏瑞成", "xiaweimin": "夏蔚民", "xiaxuran": "夏诩然", "xiebingxiu": "谢秉修", "xiebingxiu": "谢秉修", "xieliren": "谢立仁", "xinyihan": "辛轶涵", "xuconghan": "徐从瀚", "xukan": "徐衎",
2150
- "xuweiyi": "徐维易", "yanghaochen": "杨皓宸", "yezijiong": "叶梓炅", "youzhouhang": "尤周杭", "yuanruiqing": "袁瑞擎", "yutingjun": "于庭郡", "zhangchenming": "张宸铭", "zhangqiuze": "张秋泽", "zhangshuxuan": "张澍萱", "zhangwenda": "张闻达", "zhangyifu": "张亦夫",
2151
- "zhangyouheng": "张佑恒", "zhaochenshen": "赵晨神", "zhaochenwei": "赵晨伟", "zhengyinan": "郑逸楠", "zhonghongyi": "钟弘毅", "zhoujunyu": "周峻瑜", "zhouziyi": "周子逸", "zhouziyou": "周子游", "zhuchenrui2": "朱晨瑞", "zhuruichen": "朱睿宸", "zhuxule": "朱徐乐",
2152
- "zhuyikun": "朱奕坤", "leiwenda": "雷文达", "wangyuancheng": "王源成", "zhuyiyang": "朱奕阳", "hanjialin": "韩佳霖", "zhaozichen": "赵紫辰", "zhuaiwei": "朱艾薇", "linlitong": "林立桐", "xuyan": "徐衍", "fenghaochen": "冯皓宸", "lutianlang": "陆天朗", "tangyuhan": "唐钰涵",
2153
- "jiangbowen": "姜博文", "shangguanbocheng": "上官伯呈", "wangchengqi": "王呈齐", "yanpeitong": "颜培桐", "gongcheng": "龚橙", "weijiefu": "韦杰夫", "": ""
2208
+ "huangkai": "黄开",
2209
+ "chenlangning": "陈朗宁",
2210
+ "chensiru": "陈斯如",
2211
+ "chentianle": "陈天乐",
2212
+ "chenxuanhe": "陈宣合",
2213
+ "chenzecong": "陈泽聪",
2214
+ "chenzerui": "陈泽睿",
2215
+ "danwenxiao": "单文骁",
2216
+ "dongminghui": "董明辉",
2217
+ "gaochenming": "高晨茗",
2218
+ "guoqingtong": "郭庆桐",
2219
+ "guoruiqun": "郭睿群",
2220
+ "guyuchen": "顾毓辰",
2221
+ "hanshujian": "韩书简",
2222
+ "heshuhan": "贺书瀚",
2223
+ "hexinyi": "何昕弈",
2224
+ "huangmingxuan": "黄铭宣",
2225
+ "huangruina": "黄睿纳",
2226
+ "huangwei": "黄唯",
2227
+ "huyiyang": "胡以杨",
2228
+ "jiangxingyu": "姜星宇",
2229
+ "jingtaiyu": "荆泰宇",
2230
+ "jinweizhe": "金炜喆",
2231
+ "leijiahan": "雷家涵",
2232
+ "lianzhongzhe": "连中哲",
2233
+ "liaoyanxu": "廖彦旭",
2234
+ "lingzixiang": "凌梓翔",
2235
+ "linziyi": "林子懿",
2236
+ "liujianhao": "刘健豪",
2237
+ "liujiankun": "刘健坤",
2238
+ "liuxianyong": "刘先勇",
2239
+ "liuxixian": "刘希贤",
2240
+ "liyihan": "李亦涵",
2241
+ "luojinyang": "罗金阳",
2242
+ "lutianfeng": "陆天枫",
2243
+ "meitianyi": "梅天一",
2244
+ "panyinliang": "潘胤良",
2245
+ "pengyixuan": "彭议萱",
2246
+ "putong": "蒲通",
2247
+ "qianqingyuan": "钱清源",
2248
+ "qidekai": "戚得凯",
2249
+ "shanwenxiao": "单文骁",
2250
+ "shenxichen": "沈熙晨",
2251
+ "shihongxi": "施泓熙",
2252
+ "shimufan": "施慕梵",
2253
+ "shiyichen": "施奕辰",
2254
+ "shiyunhao": "施云浩",
2255
+ "shuxinmo": "舒馨墨",
2256
+ "suiruochen": "隋若宸",
2257
+ "sunyihan": "孙艺涵",
2258
+ "sunyimiao": "孙义淼",
2259
+ "tangchao": "唐潮",
2260
+ "tangyuhan": "唐钰涵",
2261
+ "tanhaoxuan": "谭皓轩",
2262
+ "taoxianyu": "陶羡榆",
2263
+ "wangkangming": "王康明",
2264
+ "wangminghao": "王明浩",
2265
+ "wangmingshuo": "王茗铄",
2266
+ "wangpengyu": "王芃雨",
2267
+ "wangsiyuan3": "王思源",
2268
+ "wangtianqi": "王天琦",
2269
+ "wangzetong": "王泽通",
2270
+ "wanxinlian": "万馨联",
2271
+ "wensiyi": "闻思奕",
2272
+ "wujinhong": "吴锦鸿",
2273
+ "wurunze": "吴润泽",
2274
+ "wuyukai": "巫昱恺",
2275
+ "xiangjicheng": "项际诚",
2276
+ "xiaoguanxun": "肖贯勋",
2277
+ "xiaojiasheng": "肖嘉盛",
2278
+ "xiaruicheng": "夏瑞成",
2279
+ "xiaweimin": "夏蔚民",
2280
+ "xiaxuran": "夏诩然",
2281
+ "xiebingxiu": "谢秉修",
2282
+ "xiebingxiu": "谢秉修",
2283
+ "xieliren": "谢立仁",
2284
+ "xinyihan": "辛轶涵",
2285
+ "xuconghan": "徐从瀚",
2286
+ "xukan": "徐衎",
2287
+ "xuweiyi": "徐维易",
2288
+ "yanghaochen": "杨皓宸",
2289
+ "yezijiong": "叶梓炅",
2290
+ "youzhouhang": "尤周杭",
2291
+ "yuanruiqing": "袁瑞擎",
2292
+ "yutingjun": "于庭郡",
2293
+ "zhangchenming": "张宸铭",
2294
+ "zhangqiuze": "张秋泽",
2295
+ "zhangshuxuan": "张澍萱",
2296
+ "zhangwenda": "张闻达",
2297
+ "zhangyifu": "张亦夫",
2298
+ "zhangyouheng": "张佑恒",
2299
+ "zhaochenshen": "赵晨神",
2300
+ "zhaochenwei": "赵晨伟",
2301
+ "zhengyinan": "郑逸楠",
2302
+ "zhonghongyi": "钟弘毅",
2303
+ "zhoujunyu": "周峻瑜",
2304
+ "zhouziyi": "周子逸",
2305
+ "zhouziyou": "周子游",
2306
+ "zhuchenrui2": "朱晨瑞",
2307
+ "zhuruichen": "朱睿宸",
2308
+ "zhuxule": "朱徐乐",
2309
+ "zhuyikun": "朱奕坤",
2310
+ "leiwenda": "雷文达",
2311
+ "wangyuancheng": "王源成",
2312
+ "zhuyiyang": "朱奕阳",
2313
+ "hanjialin": "韩佳霖",
2314
+ "zhaozichen": "赵紫辰",
2315
+ "zhuaiwei": "朱艾薇",
2316
+ "linlitong": "林立桐",
2317
+ "xuyan": "徐衍",
2318
+ "fenghaochen": "冯皓宸",
2319
+ "lutianlang": "陆天朗",
2320
+ "tangyuhan": "唐钰涵",
2321
+ "jiangbowen": "姜博文",
2322
+ "shangguanbocheng": "上官伯呈",
2323
+ "wangchengqi": "王呈齐",
2324
+ "yanpeitong": "颜培桐",
2325
+ "gongcheng": "龚橙",
2326
+ "weijiefu": "韦杰夫",
2327
+ "": ""
2154
2328
  };
2155
2329
  NameCell.innerText = (Names[RowData.Username] == undefined ? "" : Names[RowData.Username]);
2156
2330
 
@@ -2159,7 +2333,8 @@ else {
2159
2333
  PenaltyCell.innerText = SecondsToString(RowData.Penalty);
2160
2334
 
2161
2335
  for (let j = 0; j < ProblemCount; j++) {
2162
- let Problem = document.createElement("td"); Row.appendChild(Problem);
2336
+ let Problem = document.createElement("td");
2337
+ Row.appendChild(Problem);
2163
2338
  let ProblemData = RowData.Problem.find((CurrentRow) => {
2164
2339
  if (CurrentRow.Index == j) {
2165
2340
  return true;
@@ -2167,13 +2342,11 @@ else {
2167
2342
  });
2168
2343
  if (ProblemData == undefined) {
2169
2344
  Problem.style.backgroundColor = "rgba(0, 0, 0, 0)";
2170
- }
2171
- else if (ProblemData.SolveTime != 0) {
2345
+ } else if (ProblemData.SolveTime != 0) {
2172
2346
  Problem.innerText = SecondsToString(ProblemData.SolveTime) + "(" + ProblemData.Attempts.length + ")";
2173
2347
  let Color = Math.max(1 / 10 * (10 - ProblemData.Attempts.length), 0.2);
2174
2348
  Problem.style.backgroundColor = "rgba(0, 255, 0, " + Color + ")";
2175
- }
2176
- else {
2349
+ } else {
2177
2350
  Problem.innerText = "(" + ProblemData.Attempts.length + ")";
2178
2351
  let Color = Math.min(ProblemData.Attempts.length / 10 + 0.2, 1);
2179
2352
  Problem.style.backgroundColor = "rgba(255, 0, 0, " + Color + ")";
@@ -2220,8 +2393,7 @@ else {
2220
2393
  }
2221
2394
  if (document.querySelector("body > div > div.mt-3 > center > h3").innerText == "比赛排名") {
2222
2395
  document.querySelector("#rank").innerText = "比赛暂时还没有排名";
2223
- }
2224
- else {
2396
+ } else {
2225
2397
  if (UtilityEnabled("ResetType")) {
2226
2398
  document.querySelector("body > div > div.mt-3 > center > h3").innerText =
2227
2399
  document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(
@@ -2265,23 +2437,19 @@ else {
2265
2437
  let ErrorCount = "";
2266
2438
  if (Solved) {
2267
2439
  ErrorCount = (Blue == 170 ? "4+" : (Blue - 51) / 32);
2268
- }
2269
- else {
2440
+ } else {
2270
2441
  ErrorCount = (Blue == 22 ? "14+" : (170 - Blue) / 10);
2271
2442
  }
2272
2443
  if (NoData) {
2273
2444
  BackgroundColor = "";
2274
- }
2275
- else if (FirstBlood) {
2445
+ } else if (FirstBlood) {
2276
2446
  BackgroundColor = "rgba(127, 127, 255, 0.5)";
2277
- }
2278
- else if (Solved) {
2447
+ } else if (Solved) {
2279
2448
  BackgroundColor = "rgba(0, 255, 0, 0.5)";
2280
2449
  if (ErrorCount != 0) {
2281
2450
  InnerText += " (" + ErrorCount + ")";
2282
2451
  }
2283
- }
2284
- else {
2452
+ } else {
2285
2453
  BackgroundColor = "rgba(255, 0, 0, 0.5)";
2286
2454
  if (ErrorCount != 0) {
2287
2455
  InnerText += " (" + ErrorCount + ")";
@@ -2371,8 +2539,10 @@ else {
2371
2539
  }).then((Response) => {
2372
2540
  if (Response.redirected) {
2373
2541
  location.href = Response.url;
2374
- }
2375
- else {
2542
+ } else {
2543
+ if (UtilityEnabled("DebugMode")) {
2544
+ console.log("Submission failed! Response:", Response.text());
2545
+ }
2376
2546
  ErrorElement.style.display = "block";
2377
2547
  ErrorMessage.style.color = "red";
2378
2548
  ErrorMessage.innerText = "提交失败!请关闭脚本后重试!";
@@ -2392,8 +2562,7 @@ else {
2392
2562
  let IOFilename = "";
2393
2563
  if (SearchParams.get("cid") != null && SearchParams.get("pid") != null) {
2394
2564
  PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID")
2395
- }
2396
- else {
2565
+ } else {
2397
2566
  PID = SearchParams.get("id");
2398
2567
  }
2399
2568
  IOFilename = localStorage.getItem("UserScript-Problem-" + PID + "-IOFilename");
@@ -2406,8 +2575,7 @@ else {
2406
2575
  document.querySelector("#Submit").disabled = false;
2407
2576
  document.querySelector("#Submit").value = "提交";
2408
2577
  return false;
2409
- }
2410
- else if (RegExp("//.*freopen").test(Source)) {
2578
+ } else if (RegExp("//.*freopen").test(Source)) {
2411
2579
  PassCheck.style.display = "";
2412
2580
  ErrorElement.style.display = "block";
2413
2581
  ErrorMessage.style.color = "red";
@@ -2455,19 +2623,17 @@ else {
2455
2623
  document.querySelector("#Submit").disabled = false;
2456
2624
  document.querySelector("#Submit").value = "提交";
2457
2625
  return false;
2458
- }
2459
- else {
2626
+ } else {
2460
2627
  PassCheck.click();
2461
2628
  }
2462
- }
2463
- else {
2629
+ } else {
2464
2630
  PassCheck.click();
2465
2631
  }
2466
2632
  });
2467
2633
  } else if (location.pathname == "/modifypage.php") {
2468
2634
  if (SearchParams.get("ByUserScript") != null) {
2469
2635
  document.querySelector("body > div > div.mt-3").innerHTML = "";
2470
- await fetch(ServerURL + "/Update.json", { cache: "no-cache" })
2636
+ await fetch(ServerURL + "/Update.json", {cache: "no-cache"})
2471
2637
  .then((Response) => {
2472
2638
  return Response.json();
2473
2639
  })
@@ -2475,46 +2641,53 @@ else {
2475
2641
  for (let i = Object.keys(Response.UpdateHistory).length - 1; i >= 0; i--) {
2476
2642
  let Version = Object.keys(Response.UpdateHistory)[i];
2477
2643
  let Data = Response.UpdateHistory[Version];
2478
- let UpdateDataCard = document.createElement("div"); document.querySelector("body > div > div.mt-3").appendChild(UpdateDataCard);
2644
+ let UpdateDataCard = document.createElement("div");
2645
+ document.querySelector("body > div > div.mt-3").appendChild(UpdateDataCard);
2479
2646
  UpdateDataCard.className = "card mb-3";
2480
2647
  if (Data.Prerelease)
2481
2648
  UpdateDataCard.classList.add("text-secondary");
2482
- let UpdateDataCardBody = document.createElement("div"); UpdateDataCard.appendChild(UpdateDataCardBody);
2649
+ let UpdateDataCardBody = document.createElement("div");
2650
+ UpdateDataCard.appendChild(UpdateDataCardBody);
2483
2651
  UpdateDataCardBody.className = "card-body";
2484
- let UpdateDataCardTitle = document.createElement("h5"); UpdateDataCardBody.appendChild(UpdateDataCardTitle);
2652
+ let UpdateDataCardTitle = document.createElement("h5");
2653
+ UpdateDataCardBody.appendChild(UpdateDataCardTitle);
2485
2654
  UpdateDataCardTitle.className = "card-title";
2486
2655
  UpdateDataCardTitle.innerText = Version;
2487
2656
  if (Data.Prerelease) {
2488
2657
  UpdateDataCardTitle.innerHTML += "(预览版)";
2489
2658
  }
2490
- let UpdateDataCardSubtitle = document.createElement("h6"); UpdateDataCardBody.appendChild(UpdateDataCardSubtitle);
2659
+ let UpdateDataCardSubtitle = document.createElement("h6");
2660
+ UpdateDataCardBody.appendChild(UpdateDataCardSubtitle);
2491
2661
  UpdateDataCardSubtitle.className = "card-subtitle mb-2 text-muted";
2492
2662
  UpdateDataCardSubtitle.innerHTML = GetRelativeTime(Data.UpdateDate);
2493
- let UpdateDataCardText = document.createElement("p"); UpdateDataCardBody.appendChild(UpdateDataCardText);
2663
+ let UpdateDataCardText = document.createElement("p");
2664
+ UpdateDataCardBody.appendChild(UpdateDataCardText);
2494
2665
  UpdateDataCardText.className = "card-text";
2495
2666
  //release notes
2496
2667
  if (Data.Notes != undefined) {
2497
2668
  UpdateDataCardText.innerHTML = Data.Notes;
2498
2669
  }
2499
- let UpdateDataCardList = document.createElement("ul"); UpdateDataCardText.appendChild(UpdateDataCardList);
2670
+ let UpdateDataCardList = document.createElement("ul");
2671
+ UpdateDataCardText.appendChild(UpdateDataCardList);
2500
2672
  UpdateDataCardList.className = "list-group list-group-flush";
2501
2673
  for (let j = 0; j < Data.UpdateContents.length; j++) {
2502
- let UpdateDataCardListItem = document.createElement("li"); UpdateDataCardList.appendChild(UpdateDataCardListItem);
2674
+ let UpdateDataCardListItem = document.createElement("li");
2675
+ UpdateDataCardList.appendChild(UpdateDataCardListItem);
2503
2676
  UpdateDataCardListItem.className = "list-group-item";
2504
2677
  UpdateDataCardListItem.innerHTML =
2505
2678
  "(<a href=\"https://github.com/XMOJ-Script-dev/XMOJ-Script/pull/" + Data.UpdateContents[j].PR + "\" target=\"_blank\">" +
2506
2679
  "#" + Data.UpdateContents[j].PR + "</a>) " +
2507
2680
  Data.UpdateContents[j].Description;
2508
2681
  }
2509
- let UpdateDataCardLink = document.createElement("a"); UpdateDataCardBody.appendChild(UpdateDataCardLink);
2682
+ let UpdateDataCardLink = document.createElement("a");
2683
+ UpdateDataCardBody.appendChild(UpdateDataCardLink);
2510
2684
  UpdateDataCardLink.className = "card-link";
2511
2685
  UpdateDataCardLink.href = "https://github.com/XMOJ-Script-dev/XMOJ-Script/releases/tag/" + Version;
2512
2686
  UpdateDataCardLink.target = "_blank";
2513
2687
  UpdateDataCardLink.innerText = "查看该版本";
2514
2688
  }
2515
2689
  });
2516
- }
2517
- else {
2690
+ } else {
2518
2691
  let Nickname = document.getElementsByName("nick")[0].value;
2519
2692
  let School = document.getElementsByName("school")[0].value;
2520
2693
  let EmailAddress = document.getElementsByName("email")[0].value;
@@ -2632,8 +2805,7 @@ else {
2632
2805
  }, (Response) => {
2633
2806
  if (Response.Success) {
2634
2807
  Resolve();
2635
- }
2636
- else {
2808
+ } else {
2637
2809
  ModifyInfo.disabled = false;
2638
2810
  ModifyInfo.querySelector("span").style.display = "none";
2639
2811
  ErrorElement.style.display = "block";
@@ -2747,13 +2919,9 @@ else {
2747
2919
  if (Temp[i].children[0] != undefined) {
2748
2920
  if (Temp[i].children[0].innerText == "Statistics") {
2749
2921
  Temp[i].children[0].innerText = "统计";
2750
- }
2751
- else if (Temp[i].children[0].innerText == "Email:") {
2922
+ } else if (Temp[i].children[0].innerText == "Email:") {
2752
2923
  Temp[i].children[0].innerText = "电子邮箱";
2753
2924
  }
2754
- else {
2755
- Temp[i].children[1].innerText = Temp[i].children[1].innerText;
2756
- }
2757
2925
  Temp[i].children[1].removeAttribute("align");
2758
2926
  }
2759
2927
  }
@@ -2771,18 +2939,22 @@ else {
2771
2939
  [UserID, UserNick] = document.querySelector("#statics > caption").childNodes[0].data.trim().split("--");
2772
2940
  document.querySelector("#statics > caption").remove();
2773
2941
 
2774
- let Row = document.createElement("div"); Row.className = "row";
2775
- let LeftDiv = document.createElement("div"); LeftDiv.className = "col-md-5"; Row.appendChild(LeftDiv);
2942
+ let Row = document.createElement("div");
2943
+ Row.className = "row";
2944
+ let LeftDiv = document.createElement("div");
2945
+ LeftDiv.className = "col-md-5";
2946
+ Row.appendChild(LeftDiv);
2776
2947
 
2777
- let LeftTopDiv = document.createElement("div"); LeftTopDiv.className = "row mb-2"; LeftDiv.appendChild(LeftTopDiv);
2948
+ let LeftTopDiv = document.createElement("div");
2949
+ LeftTopDiv.className = "row mb-2";
2950
+ LeftDiv.appendChild(LeftTopDiv);
2778
2951
  let AvatarContainer = document.createElement("div");
2779
2952
  AvatarContainer.classList.add("col-auto");
2780
2953
  let AvatarElement = document.createElement("img");
2781
2954
  let UserEmailHash = (await GetUserInfo(UserID)).EmailHash;
2782
2955
  if (UserEmailHash == undefined) {
2783
2956
  AvatarElement.src = `https://cravatar.cn/avatar/00000000000000000000000000000000?d=mp&f=y`;
2784
- }
2785
- else {
2957
+ } else {
2786
2958
  AvatarElement.src = `https://cravatar.cn/avatar/${UserEmailHash}?d=retro`;
2787
2959
  }
2788
2960
  AvatarElement.classList.add("rounded", "me-2");
@@ -2816,8 +2988,11 @@ else {
2816
2988
  LeftTopDiv.appendChild(UserInfoElement);
2817
2989
  LeftDiv.appendChild(LeftTopDiv);
2818
2990
 
2819
- let LeftTable = document.querySelector("body > div > div > center > table"); LeftDiv.appendChild(LeftTable);
2820
- let RightDiv = document.createElement("div"); RightDiv.className = "col-md-7"; Row.appendChild(RightDiv);
2991
+ let LeftTable = document.querySelector("body > div > div > center > table");
2992
+ LeftDiv.appendChild(LeftTable);
2993
+ let RightDiv = document.createElement("div");
2994
+ RightDiv.className = "col-md-7";
2995
+ Row.appendChild(RightDiv);
2821
2996
  RightDiv.innerHTML = "<h5>已解决题目</h5>";
2822
2997
  for (let i = 0; i < ACProblems.length; i++) {
2823
2998
  RightDiv.innerHTML += "<a href=\"https://www.xmoj.tech/problem.php?id=" + ACProblems[i] + "\" target=\"_blank\">" + ACProblems[i] + "</a> ";
@@ -2832,7 +3007,7 @@ else {
2832
3007
  </div>
2833
3008
  <p class="mt-2 text-muted">
2834
3009
  您必须要上传标程以后才能使用“查看标程”功能。点击“上传标程”按钮以后,系统会自动上传标程,请您耐心等待。<br>
2835
- 首次上传标程可能会比较慢,请耐心等待。后续上传标程将会快很多。请不要直接抄袭或递交标程,否则会给予"作弊者"badge的惩罚!<br>
3010
+ 首次上传标程可能会比较慢,请耐心等待。后续上传标程将会快很多。<br>
2836
3011
  系统每过30天会自动提醒您上传标程,您必须要上传标程,否则将会被禁止使用“查看标程”功能。<br>
2837
3012
  </p>`;
2838
3013
  UploadStd.addEventListener("click", async () => {
@@ -2885,8 +3060,7 @@ else {
2885
3060
  UploadProgress.style.width = "100%";
2886
3061
  UploadStd.disabled = false;
2887
3062
  localStorage.setItem("UserScript-LastUploadedStdTime", new Date().getTime());
2888
- }
2889
- else {
3063
+ } else {
2890
3064
  ErrorElement.style.display = "block";
2891
3065
  ErrorElement.innerText = Result.Message;
2892
3066
  UploadStd.disabled = false;
@@ -2951,8 +3125,7 @@ else {
2951
3125
  CompareButton.addEventListener("click", () => {
2952
3126
  location.href = "https://www.xmoj.tech/comparesource.php?left=" + Number(LeftCode.value) + "&right=" + Number(RightCode.value);
2953
3127
  });
2954
- }
2955
- else {
3128
+ } else {
2956
3129
  document.querySelector("body > div > div.mt-3").innerHTML = `
2957
3130
  <div class="form-check">
2958
3131
  <input class="form-check-input" type="checkbox" checked id="IgnoreWhitespace">
@@ -3066,13 +3239,11 @@ else {
3066
3239
  Response = Response.substring(0, Response.indexOf("');"));
3067
3240
  if (Response == "UserName or Password Wrong!") {
3068
3241
  ErrorText.innerText = "用户名或密码错误!";
3069
- }
3070
- else {
3242
+ } else {
3071
3243
  ErrorText.innerText = Response;
3072
3244
  }
3073
3245
  }
3074
- }
3075
- else {
3246
+ } else {
3076
3247
  document.innerHTML = Response;
3077
3248
  }
3078
3249
  });
@@ -3148,8 +3319,7 @@ else {
3148
3319
  } else if (location.pathname == "/reinfo.php") {
3149
3320
  if (document.querySelector("#results > div") == undefined) {
3150
3321
  document.querySelector("#results").parentElement.innerHTML = "没有测试点信息";
3151
- }
3152
- else {
3322
+ } else {
3153
3323
  for (let i = 0; i < document.querySelector("#results > div").children.length; i++) {
3154
3324
  let CurrentElement = document.querySelector("#results > div").children[i].children[0].children[0].children[0];
3155
3325
  let Temp = CurrentElement.innerText.substring(0, CurrentElement.innerText.length - 2).split("/");
@@ -3296,7 +3466,8 @@ int main()
3296
3466
  SoftwareList.remove();
3297
3467
  SoftwareList = document.createElement("ul");
3298
3468
  SoftwareList.className = "software_list";
3299
- let Container = document.createElement("div"); document.querySelector("body > div").appendChild(Container);
3469
+ let Container = document.createElement("div");
3470
+ document.querySelector("body > div").appendChild(Container);
3300
3471
  Container.className = "mt-3";
3301
3472
  Container.appendChild(SoftwareList);
3302
3473
  if (UtilityEnabled("NewDownload")) {
@@ -3375,9 +3546,6 @@ int main()
3375
3546
  let Temp = document.querySelector("#statics").rows;
3376
3547
  for (let i = 0; i < Temp.length; i++) {
3377
3548
  Temp[i].removeAttribute("class");
3378
- if (Temp[i].children.length == 2) {
3379
- Temp[i].children[1].innerText = Temp[i].children[1].innerText;
3380
- }
3381
3549
  }
3382
3550
 
3383
3551
  document.querySelector("#problemstatus > thead > tr").innerHTML =
@@ -3464,7 +3632,7 @@ int main()
3464
3632
  Time = Temp[i].children[1].innerText;
3465
3633
  }
3466
3634
  let Body = Temp[i + 1].innerHTML;
3467
- NewsData.push({ "Title": Title, "Time": new Date(Time), "Body": Body });
3635
+ NewsData.push({"Title": Title, "Time": new Date(Time), "Body": Body});
3468
3636
  }
3469
3637
  document.querySelector("body > div > div.mt-3 > div > div.col-md-8").innerHTML = "";
3470
3638
  for (let i = 0; i < NewsData.length; i++) {
@@ -3502,8 +3670,7 @@ int main()
3502
3670
  }).then((Response) => {
3503
3671
  Code = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
3504
3672
  });
3505
- }
3506
- else {
3673
+ } else {
3507
3674
  if (localStorage.getItem("UserScript-LastUploadedStdTime") === undefined ||
3508
3675
  new Date().getTime() - localStorage.getItem("UserScript-LastUploadedStdTime") > 1000 * 60 * 60 * 24 * 30) {
3509
3676
  location.href = "https://www.xmoj.tech/userinfo.php?ByUserScript=1";
@@ -3514,8 +3681,7 @@ int main()
3514
3681
  }, (Response) => {
3515
3682
  if (Response.Success) {
3516
3683
  Code = Response.Data.StdCode;
3517
- }
3518
- else {
3684
+ } else {
3519
3685
  Code = Response.Message;
3520
3686
  }
3521
3687
  Resolve();
@@ -3597,9 +3763,11 @@ int main()
3597
3763
  if (!Silent) {
3598
3764
  ReceiveTable.children[1].innerHTML = "";
3599
3765
  for (let i = 0; i < 10; i++) {
3600
- let Row = document.createElement("tr"); ReceiveTable.children[1].appendChild(Row);
3766
+ let Row = document.createElement("tr");
3767
+ ReceiveTable.children[1].appendChild(Row);
3601
3768
  for (let j = 0; j < 3; j++) {
3602
- let Cell = document.createElement("td"); Row.appendChild(Cell);
3769
+ let Cell = document.createElement("td");
3770
+ Row.appendChild(Cell);
3603
3771
  Cell.innerHTML = `<span class="placeholder col-${Math.ceil(Math.random() * 12)}"></span>`;
3604
3772
  }
3605
3773
  }
@@ -3610,22 +3778,27 @@ int main()
3610
3778
  let Data = ResponseData.Data.MailList;
3611
3779
  ReceiveTable.children[1].innerHTML = "";
3612
3780
  for (let i = 0; i < Data.length; i++) {
3613
- let Row = document.createElement("tr"); ReceiveTable.children[1].appendChild(Row);
3614
- let UsernameCell = document.createElement("td"); Row.appendChild(UsernameCell);
3615
- let UsernameSpan = document.createElement("span"); UsernameCell.appendChild(UsernameSpan);
3781
+ let Row = document.createElement("tr");
3782
+ ReceiveTable.children[1].appendChild(Row);
3783
+ let UsernameCell = document.createElement("td");
3784
+ Row.appendChild(UsernameCell);
3785
+ let UsernameSpan = document.createElement("span");
3786
+ UsernameCell.appendChild(UsernameSpan);
3616
3787
  GetUsernameHTML(UsernameSpan, Data[i].OtherUser, false, "https://www.xmoj.tech/mail.php?to_user=");
3617
3788
  if (Data[i].UnreadCount != 0) {
3618
- let UnreadCountSpan = document.createElement("span"); UsernameCell.appendChild(UnreadCountSpan);
3789
+ let UnreadCountSpan = document.createElement("span");
3790
+ UsernameCell.appendChild(UnreadCountSpan);
3619
3791
  UnreadCountSpan.className = "ms-1 badge text-bg-danger";
3620
3792
  UnreadCountSpan.innerText = Data[i].UnreadCount;
3621
3793
  }
3622
- let LastsMessageCell = document.createElement("td"); Row.appendChild(LastsMessageCell);
3794
+ let LastsMessageCell = document.createElement("td");
3795
+ Row.appendChild(LastsMessageCell);
3623
3796
  LastsMessageCell.innerText = Data[i].LastsMessage;
3624
- let SendTimeCell = document.createElement("td"); Row.appendChild(SendTimeCell);
3797
+ let SendTimeCell = document.createElement("td");
3798
+ Row.appendChild(SendTimeCell);
3625
3799
  SendTimeCell.innerHTML = GetRelativeTime(Data[i].SendTime);
3626
3800
  }
3627
- }
3628
- else {
3801
+ } else {
3629
3802
  ErrorElement.innerText = ResponseData.Message;
3630
3803
  ErrorElement.style.display = "";
3631
3804
  }
@@ -3651,8 +3824,7 @@ int main()
3651
3824
  if (ResponseData.Success) {
3652
3825
  ErrorElement.style.display = "none";
3653
3826
  RefreshMessageList();
3654
- }
3655
- else {
3827
+ } else {
3656
3828
  ErrorElement.innerText = ResponseData.Message;
3657
3829
  ErrorElement.style.display = "";
3658
3830
  }
@@ -3660,8 +3832,7 @@ int main()
3660
3832
  });
3661
3833
  RefreshMessageList(false);
3662
3834
  addEventListener("focus", RefreshMessageList);
3663
- }
3664
- else {
3835
+ } else {
3665
3836
  document.querySelector("body > div > div.mt-3").innerHTML = `<div class="row g-2 mb-3">
3666
3837
  <div class="col-md form-floating">
3667
3838
  <div class="form-control" id="ToUser"></div>
@@ -3693,9 +3864,11 @@ int main()
3693
3864
  if (!Silent) {
3694
3865
  MessageTable.children[1].innerHTML = "";
3695
3866
  for (let i = 0; i < 10; i++) {
3696
- let Row = document.createElement("tr"); MessageTable.children[1].appendChild(Row);
3867
+ let Row = document.createElement("tr");
3868
+ MessageTable.children[1].appendChild(Row);
3697
3869
  for (let j = 0; j < 4; j++) {
3698
- let Cell = document.createElement("td"); Row.appendChild(Cell);
3870
+ let Cell = document.createElement("td");
3871
+ Row.appendChild(Cell);
3699
3872
  Cell.innerHTML = `<span class="placeholder col-${Math.ceil(Math.random() * 12)}"></span>`;
3700
3873
  }
3701
3874
  }
@@ -3708,21 +3881,25 @@ int main()
3708
3881
  let Data = ResponseData.Data.Mail;
3709
3882
  MessageTable.children[1].innerHTML = "";
3710
3883
  for (let i = 0; i < Data.length; i++) {
3711
- let Row = document.createElement("tr"); MessageTable.children[1].appendChild(Row);
3884
+ let Row = document.createElement("tr");
3885
+ MessageTable.children[1].appendChild(Row);
3712
3886
  if (!Data[i].IsRead && Data[i].FromUser != CurrentUsername) {
3713
3887
  Row.className = "table-info";
3714
3888
  }
3715
- let UsernameCell = document.createElement("td"); Row.appendChild(UsernameCell);
3889
+ let UsernameCell = document.createElement("td");
3890
+ Row.appendChild(UsernameCell);
3716
3891
  GetUsernameHTML(UsernameCell, Data[i].FromUser);
3717
- let ContentCell = document.createElement("td"); Row.appendChild(ContentCell);
3892
+ let ContentCell = document.createElement("td");
3893
+ Row.appendChild(ContentCell);
3718
3894
  ContentCell.innerHTML = PurifyHTML(Data[i].Content);
3719
- let SendTimeCell = document.createElement("td"); Row.appendChild(SendTimeCell);
3895
+ let SendTimeCell = document.createElement("td");
3896
+ Row.appendChild(SendTimeCell);
3720
3897
  SendTimeCell.innerHTML = GetRelativeTime(Data[i].SendTime);
3721
- let IsReadCell = document.createElement("td"); Row.appendChild(IsReadCell);
3898
+ let IsReadCell = document.createElement("td");
3899
+ Row.appendChild(IsReadCell);
3722
3900
  IsReadCell.innerHTML = (Data[i].IsRead ? "已读" : "未读");
3723
3901
  }
3724
- }
3725
- else {
3902
+ } else {
3726
3903
  ErrorElement.innerText = ResponseData.Message;
3727
3904
  ErrorElement.style.display = "";
3728
3905
  }
@@ -3754,8 +3931,7 @@ int main()
3754
3931
  ErrorElement.style.display = "none";
3755
3932
  Content.value = "";
3756
3933
  RefreshMessage();
3757
- }
3758
- else {
3934
+ } else {
3759
3935
  ErrorElement.innerText = ResponseData.Message;
3760
3936
  ErrorElement.style.display = "";
3761
3937
  }
@@ -3801,11 +3977,9 @@ int main()
3801
3977
  NewPost.addEventListener("click", () => {
3802
3978
  if (!isNaN(ProblemID)) {
3803
3979
  location.href = "https://www.xmoj.tech/discuss3/newpost.php?pid=" + ProblemID;
3804
- }
3805
- else if (SearchParams.get("bid") != null) {
3980
+ } else if (SearchParams.get("bid") != null) {
3806
3981
  location.href = "https://www.xmoj.tech/discuss3/newpost.php?bid=" + SearchParams.get("bid");
3807
- }
3808
- else {
3982
+ } else {
3809
3983
  location.href = "https://www.xmoj.tech/discuss3/newpost.php";
3810
3984
  }
3811
3985
  });
@@ -3813,9 +3987,11 @@ int main()
3813
3987
  if (!Silent) {
3814
3988
  PostList.children[1].innerHTML = "";
3815
3989
  for (let i = 0; i < 10; i++) {
3816
- let Row = document.createElement("tr"); PostList.children[1].appendChild(Row);
3990
+ let Row = document.createElement("tr");
3991
+ PostList.children[1].appendChild(Row);
3817
3992
  for (let j = 0; j < 7; j++) {
3818
- let Cell = document.createElement("td"); Row.appendChild(Cell);
3993
+ let Cell = document.createElement("td");
3994
+ Row.appendChild(Cell);
3819
3995
  Cell.innerHTML = `<span class="placeholder col-${Math.ceil(Math.random() * 12)}"></span>`;
3820
3996
  }
3821
3997
  }
@@ -3848,34 +4024,43 @@ int main()
3848
4024
  PostList.children[1].innerHTML = `<tr><td colspan="7">暂无数据</td></tr>`;
3849
4025
  }
3850
4026
  for (let i = 0; i < Posts.length; i++) {
3851
- let Row = document.createElement("tr"); PostList.children[1].appendChild(Row);
3852
- let IDCell = document.createElement("td"); Row.appendChild(IDCell);
4027
+ let Row = document.createElement("tr");
4028
+ PostList.children[1].appendChild(Row);
4029
+ let IDCell = document.createElement("td");
4030
+ Row.appendChild(IDCell);
3853
4031
  IDCell.innerText = Posts[i].PostID + " " + Posts[i].BoardName;
3854
- let TitleCell = document.createElement("td"); Row.appendChild(TitleCell);
3855
- let TitleLink = document.createElement("a"); TitleCell.appendChild(TitleLink);
4032
+ let TitleCell = document.createElement("td");
4033
+ Row.appendChild(TitleCell);
4034
+ let TitleLink = document.createElement("a");
4035
+ TitleCell.appendChild(TitleLink);
3856
4036
  TitleLink.href = "https://www.xmoj.tech/discuss3/thread.php?tid=" + Posts[i].PostID;
3857
4037
  if (Posts[i].Lock.Locked) {
3858
4038
  TitleLink.classList.add("link-secondary");
3859
4039
  TitleLink.innerHTML = "🔒 ";
3860
4040
  }
3861
4041
  TitleLink.innerHTML += Posts[i].Title;
3862
- let AuthorCell = document.createElement("td"); Row.appendChild(AuthorCell);
4042
+ let AuthorCell = document.createElement("td");
4043
+ Row.appendChild(AuthorCell);
3863
4044
  GetUsernameHTML(AuthorCell, Posts[i].UserID);
3864
- let ProblemIDCell = document.createElement("td"); Row.appendChild(ProblemIDCell);
4045
+ let ProblemIDCell = document.createElement("td");
4046
+ Row.appendChild(ProblemIDCell);
3865
4047
  if (Posts[i].ProblemID != 0) {
3866
- let ProblemIDLink = document.createElement("a"); ProblemIDCell.appendChild(ProblemIDLink);
4048
+ let ProblemIDLink = document.createElement("a");
4049
+ ProblemIDCell.appendChild(ProblemIDLink);
3867
4050
  ProblemIDLink.href = "https://www.xmoj.tech/problem.php?id=" + Posts[i].ProblemID;
3868
4051
  ProblemIDLink.innerText = Posts[i].ProblemID;
3869
4052
  }
3870
- let PostTimeCell = document.createElement("td"); Row.appendChild(PostTimeCell);
4053
+ let PostTimeCell = document.createElement("td");
4054
+ Row.appendChild(PostTimeCell);
3871
4055
  PostTimeCell.innerHTML = GetRelativeTime(Posts[i].PostTime);
3872
- let ReplyCountCell = document.createElement("td"); Row.appendChild(ReplyCountCell);
4056
+ let ReplyCountCell = document.createElement("td");
4057
+ Row.appendChild(ReplyCountCell);
3873
4058
  ReplyCountCell.innerText = Posts[i].ReplyCount;
3874
- let LastReplyTimeCell = document.createElement("td"); Row.appendChild(LastReplyTimeCell);
4059
+ let LastReplyTimeCell = document.createElement("td");
4060
+ Row.appendChild(LastReplyTimeCell);
3875
4061
  LastReplyTimeCell.innerHTML = GetRelativeTime(Posts[i].LastReplyTime);
3876
4062
  }
3877
- }
3878
- else {
4063
+ } else {
3879
4064
  ErrorElement.innerText = ResponseData.Message;
3880
4065
  ErrorElement.style.display = "block";
3881
4066
  }
@@ -3969,8 +4154,7 @@ int main()
3969
4154
  if (ResponseData.Success) {
3970
4155
  ContentElement.value = Before + `![](https://assets.xmoj-bbs.tech/GetImage?ImageID=${ResponseData.Data.ImageID})` + After;
3971
4156
  ContentElement.dispatchEvent(new Event("input"));
3972
- }
3973
- else {
4157
+ } else {
3974
4158
  ContentElement.value = Before + `![上传失败!]()` + After;
3975
4159
  ContentElement.dispatchEvent(new Event("input"));
3976
4160
  }
@@ -4011,8 +4195,7 @@ int main()
4011
4195
  SubmitElement.children[0].style.display = "none";
4012
4196
  if (ResponseData.Success == true) {
4013
4197
  location.href = "https://www.xmoj.tech/discuss3/thread.php?tid=" + ResponseData.Data.PostID;
4014
- }
4015
- else {
4198
+ } else {
4016
4199
  ErrorElement.innerText = ResponseData.Message;
4017
4200
  ErrorElement.style.display = "block";
4018
4201
  }
@@ -4054,8 +4237,7 @@ int main()
4054
4237
  } else if (location.pathname == "/discuss3/thread.php") {
4055
4238
  if (SearchParams.get("tid") == null) {
4056
4239
  location.href = "https://www.xmoj.tech/discuss3/discuss.php";
4057
- }
4058
- else {
4240
+ } else {
4059
4241
  let ThreadID = SearchParams.get("tid");
4060
4242
  let Page = Number(SearchParams.get("page")) || 1;
4061
4243
  document.querySelector("body > div > div").innerHTML = `<h3 id="PostTitle"></h3>
@@ -4146,8 +4328,7 @@ int main()
4146
4328
  if (ResponseData.Success) {
4147
4329
  ContentElement.value = Before + `![](https://assets.xmoj-bbs.tech/GetImage?ImageID=${ResponseData.Data.ImageID})` + After;
4148
4330
  ContentElement.dispatchEvent(new Event("input"));
4149
- }
4150
- else {
4331
+ } else {
4151
4332
  ContentElement.value = Before + `![上传失败!]()` + After;
4152
4333
  ContentElement.dispatchEvent(new Event("input"));
4153
4334
  }
@@ -4212,27 +4393,36 @@ int main()
4212
4393
  let Replies = ResponseData.Data.Reply;
4213
4394
  PostReplies.innerHTML = "";
4214
4395
  for (let i = 0; i < Replies.length; i++) {
4215
- let CardElement = document.createElement("div"); PostReplies.appendChild(CardElement);
4396
+ let CardElement = document.createElement("div");
4397
+ PostReplies.appendChild(CardElement);
4216
4398
  CardElement.className = "card mb-3";
4217
- let CardBodyElement = document.createElement("div"); CardElement.appendChild(CardBodyElement);
4399
+ let CardBodyElement = document.createElement("div");
4400
+ CardElement.appendChild(CardBodyElement);
4218
4401
  CardBodyElement.className = "card-body row";
4219
- let CardBodyRowElement = document.createElement("div"); CardBodyElement.appendChild(CardBodyRowElement);
4402
+ let CardBodyRowElement = document.createElement("div");
4403
+ CardBodyElement.appendChild(CardBodyRowElement);
4220
4404
  CardBodyRowElement.className = "row mb-3";
4221
- let AuthorElement = document.createElement("span"); CardBodyRowElement.appendChild(AuthorElement);
4405
+ let AuthorElement = document.createElement("span");
4406
+ CardBodyRowElement.appendChild(AuthorElement);
4222
4407
  AuthorElement.className = "col-4 text-muted";
4223
- let AuthorSpanElement = document.createElement("span"); AuthorElement.appendChild(AuthorSpanElement);
4408
+ let AuthorSpanElement = document.createElement("span");
4409
+ AuthorElement.appendChild(AuthorSpanElement);
4224
4410
  AuthorSpanElement.innerText = "作者:";
4225
- let AuthorUsernameElement = document.createElement("span"); AuthorElement.appendChild(AuthorUsernameElement);
4411
+ let AuthorUsernameElement = document.createElement("span");
4412
+ AuthorElement.appendChild(AuthorUsernameElement);
4226
4413
  GetUsernameHTML(AuthorUsernameElement, Replies[i].UserID);
4227
- let SendTimeElement = document.createElement("span"); CardBodyRowElement.appendChild(SendTimeElement);
4414
+ let SendTimeElement = document.createElement("span");
4415
+ CardBodyRowElement.appendChild(SendTimeElement);
4228
4416
  SendTimeElement.className = "col-4 text-muted";
4229
4417
  SendTimeElement.innerHTML = "发布时间:" + GetRelativeTime(Replies[i].ReplyTime);
4230
4418
 
4231
4419
  let OKButton;
4232
4420
  if (!LockButtons) {
4233
- let ButtonsElement = document.createElement("span"); CardBodyRowElement.appendChild(ButtonsElement);
4421
+ let ButtonsElement = document.createElement("span");
4422
+ CardBodyRowElement.appendChild(ButtonsElement);
4234
4423
  ButtonsElement.className = "col-4";
4235
- let ReplyButton = document.createElement("button"); ButtonsElement.appendChild(ReplyButton);
4424
+ let ReplyButton = document.createElement("button");
4425
+ ButtonsElement.appendChild(ReplyButton);
4236
4426
  ReplyButton.type = "button";
4237
4427
  ReplyButton.className = "btn btn-sm btn-info";
4238
4428
  ReplyButton.innerText = "回复";
@@ -4248,7 +4438,8 @@ int main()
4248
4438
  ContentElement.value += Content + `\n\n@${Replies[i].UserID} `;
4249
4439
  ContentElement.focus();
4250
4440
  });
4251
- let DeleteButton = document.createElement("button"); ButtonsElement.appendChild(DeleteButton);
4441
+ let DeleteButton = document.createElement("button");
4442
+ ButtonsElement.appendChild(DeleteButton);
4252
4443
  DeleteButton.type = "button";
4253
4444
  DeleteButton.className = "btn btn-sm btn-danger ms-1";
4254
4445
  DeleteButton.innerText = "删除";
@@ -4261,8 +4452,7 @@ int main()
4261
4452
  }, (ResponseData) => {
4262
4453
  if (ResponseData.Success == true) {
4263
4454
  RefreshReply();
4264
- }
4265
- else {
4455
+ } else {
4266
4456
  DeleteButton.disabled = false;
4267
4457
  DeleteButton.lastChild.style.display = "none";
4268
4458
  ErrorElement.innerText = ResponseData.Message;
@@ -4270,16 +4460,19 @@ int main()
4270
4460
  }
4271
4461
  });
4272
4462
  });
4273
- let DeleteSpin = document.createElement("div"); DeleteButton.appendChild(DeleteSpin);
4463
+ let DeleteSpin = document.createElement("div");
4464
+ DeleteButton.appendChild(DeleteSpin);
4274
4465
  DeleteSpin.className = "spinner-border spinner-border-sm";
4275
4466
  DeleteSpin.role = "status";
4276
4467
  DeleteSpin.style.display = "none";
4277
- OKButton = document.createElement("button"); ButtonsElement.appendChild(OKButton);
4468
+ OKButton = document.createElement("button");
4469
+ ButtonsElement.appendChild(OKButton);
4278
4470
  OKButton.type = "button";
4279
4471
  OKButton.style.display = "none";
4280
4472
  OKButton.className = "btn btn-sm btn-success ms-1";
4281
4473
  OKButton.innerText = "确认";
4282
- let OKSpin = document.createElement("div"); OKButton.appendChild(OKSpin);
4474
+ let OKSpin = document.createElement("div");
4475
+ OKButton.appendChild(OKSpin);
4283
4476
  OKSpin.className = "spinner-border spinner-border-sm";
4284
4477
  OKSpin.role = "status";
4285
4478
  OKSpin.style.display = "none";
@@ -4292,8 +4485,7 @@ int main()
4292
4485
  }, (ResponseData) => {
4293
4486
  if (ResponseData.Success == true) {
4294
4487
  RefreshReply();
4295
- }
4296
- else {
4488
+ } else {
4297
4489
  OKButton.disabled = false;
4298
4490
  OKButton.lastChild.style.display = "none";
4299
4491
  ErrorElement.innerText = ResponseData.Message;
@@ -4301,7 +4493,8 @@ int main()
4301
4493
  }
4302
4494
  });
4303
4495
  });
4304
- let CancelButton = document.createElement("button"); ButtonsElement.appendChild(CancelButton);
4496
+ let CancelButton = document.createElement("button");
4497
+ ButtonsElement.appendChild(CancelButton);
4305
4498
  CancelButton.type = "button";
4306
4499
  CancelButton.style.display = "none";
4307
4500
  CancelButton.className = "btn btn-sm btn-secondary ms-1";
@@ -4313,7 +4506,8 @@ int main()
4313
4506
  OKButton.style.display = "none";
4314
4507
  CancelButton.style.display = "none";
4315
4508
  });
4316
- let EditButton = document.createElement("button"); ButtonsElement.appendChild(EditButton);
4509
+ let EditButton = document.createElement("button");
4510
+ ButtonsElement.appendChild(EditButton);
4317
4511
  EditButton.type = "button";
4318
4512
  EditButton.className = "btn btn-sm btn-warning ms-1";
4319
4513
  EditButton.innerText = "编辑";
@@ -4327,22 +4521,25 @@ int main()
4327
4521
  });
4328
4522
  }
4329
4523
 
4330
- let CardBodyHRElement = document.createElement("hr"); CardBodyElement.appendChild(CardBodyHRElement);
4524
+ let CardBodyHRElement = document.createElement("hr");
4525
+ CardBodyElement.appendChild(CardBodyHRElement);
4331
4526
 
4332
- let ReplyContentElement = document.createElement("div"); CardBodyElement.appendChild(ReplyContentElement);
4527
+ let ReplyContentElement = document.createElement("div");
4528
+ CardBodyElement.appendChild(ReplyContentElement);
4333
4529
  ReplyContentElement.innerHTML = PurifyHTML(marked.parse(Replies[i].Content)).replaceAll(/@([a-zA-Z0-9]+)/g, `<b>@</b><span class="ms-1 Usernames">$1</span>`);
4334
4530
  if (Replies[i].EditTime != null) {
4335
4531
  if (Replies[i].EditPerson == Replies[i].UserID) {
4336
4532
  ReplyContentElement.innerHTML += `<span class="text-muted" style="font-size: 12px">最后编辑于${GetRelativeTime(Replies[i].EditTime)}</span>`;
4337
- }
4338
- else {
4533
+ } else {
4339
4534
  ReplyContentElement.innerHTML += `<span class="text-muted" style="font-size: 12px">最后被<span class="Usernames">${Replies[i].EditPerson}</span>编辑于${GetRelativeTime(Replies[i].EditTime)}</span>`;
4340
4535
  }
4341
4536
  }
4342
- let ContentEditElement = document.createElement("div"); CardBodyElement.appendChild(ContentEditElement);
4537
+ let ContentEditElement = document.createElement("div");
4538
+ CardBodyElement.appendChild(ContentEditElement);
4343
4539
  ContentEditElement.classList.add("input-group");
4344
4540
  ContentEditElement.style.display = "none";
4345
- let ContentEditor = document.createElement("textarea"); ContentEditElement.appendChild(ContentEditor);
4541
+ let ContentEditor = document.createElement("textarea");
4542
+ ContentEditElement.appendChild(ContentEditor);
4346
4543
  ContentEditor.className = "form-control col-6";
4347
4544
  ContentEditor.rows = 3;
4348
4545
  ContentEditor.value = Replies[i].Content;
@@ -4354,7 +4551,8 @@ int main()
4354
4551
  OKButton.click();
4355
4552
  }
4356
4553
  });
4357
- let PreviewTab = document.createElement("div"); ContentEditElement.appendChild(PreviewTab);
4554
+ let PreviewTab = document.createElement("div");
4555
+ ContentEditElement.appendChild(PreviewTab);
4358
4556
  PreviewTab.className = "form-control col-6";
4359
4557
  PreviewTab.innerHTML = PurifyHTML(marked.parse(ContentEditor.value));
4360
4558
  ContentEditor.addEventListener("input", () => {
@@ -4380,8 +4578,7 @@ int main()
4380
4578
  if (ResponseData.Success) {
4381
4579
  ContentEditor.value = Before + `![](https://assets.xmoj-bbs.tech/GetImage?ImageID=${ResponseData.Data.ImageID})` + After;
4382
4580
  ContentEditor.dispatchEvent(new Event("input"));
4383
- }
4384
- else {
4581
+ } else {
4385
4582
  ContentEditor.value = Before + `![上传失败!]()` + After;
4386
4583
  ContentEditor.dispatchEvent(new Event("input"));
4387
4584
  }
@@ -4403,8 +4600,7 @@ int main()
4403
4600
  let ModeName = "text/x-c++src";
4404
4601
  if (CodeElements[i].className == "language-c") {
4405
4602
  ModeName = "text/x-csrc";
4406
- }
4407
- else if (CodeElements[i].className == "language-cpp") {
4603
+ } else if (CodeElements[i].className == "language-cpp") {
4408
4604
  ModeName = "text/x-c++src";
4409
4605
  }
4410
4606
  CodeMirror(CodeElements[i].parentElement, {
@@ -4420,7 +4616,8 @@ int main()
4420
4616
  if (LockButtons) {
4421
4617
  let LockElement = ContentElement.parentElement.parentElement;
4422
4618
  LockElement.innerHTML = "讨论已于 " + await GetRelativeTime(ResponseData.Data.Lock.LockTime) + " 被 ";
4423
- let LockUsernameSpan = document.createElement("span"); LockElement.appendChild(LockUsernameSpan);
4619
+ let LockUsernameSpan = document.createElement("span");
4620
+ LockElement.appendChild(LockUsernameSpan);
4424
4621
  GetUsernameHTML(LockUsernameSpan, ResponseData.Data.Lock.LockPerson);
4425
4622
  LockElement.innerHTML += " 锁定";
4426
4623
  LockElement.classList.add("mb-5");
@@ -4459,8 +4656,7 @@ int main()
4459
4656
  behavior: "instant"
4460
4657
  });
4461
4658
  }
4462
- }
4463
- else {
4659
+ } else {
4464
4660
  PostTitle.innerText = "错误:" + ResponseData.Message;
4465
4661
  }
4466
4662
  });
@@ -4475,8 +4671,7 @@ int main()
4475
4671
  Delete.children[0].style.display = "none";
4476
4672
  if (ResponseData.Success == true) {
4477
4673
  location.href = "https://www.xmoj.tech/discuss3/discuss.php";
4478
- }
4479
- else {
4674
+ } else {
4480
4675
  ErrorElement.innerText = ResponseData.Message;
4481
4676
  ErrorElement.style.display = "block";
4482
4677
  }
@@ -4505,8 +4700,7 @@ int main()
4505
4700
  ContentElement.focus();
4506
4701
  ContentElement.scrollIntoView();
4507
4702
  turnstile.reset();
4508
- }
4509
- else {
4703
+ } else {
4510
4704
  ErrorElement.innerText = ResponseData.Message;
4511
4705
  ErrorElement.style.display = "block";
4512
4706
  }