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