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.
- package/Update.json +68 -0
- package/XMOJ.user.js +566 -372
- 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.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) {
|
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) => {
|
@@ -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
|
-
|
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
|
-
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", {
|
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");
|
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");
|
795
|
+
let UpdateDialog = document.createElement("div");
|
796
|
+
UpdateDiv.appendChild(UpdateDialog);
|
770
797
|
UpdateDialog.className = "modal-dialog";
|
771
|
-
let UpdateContent = document.createElement("div");
|
798
|
+
let UpdateContent = document.createElement("div");
|
799
|
+
UpdateDialog.appendChild(UpdateContent);
|
772
800
|
UpdateContent.className = "modal-content";
|
773
|
-
let UpdateHeader = document.createElement("div");
|
801
|
+
let UpdateHeader = document.createElement("div");
|
802
|
+
UpdateContent.appendChild(UpdateHeader);
|
774
803
|
UpdateHeader.className = "modal-header";
|
775
|
-
let UpdateTitle = document.createElement("h5");
|
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");
|
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");
|
813
|
+
let UpdateBody = document.createElement("div");
|
814
|
+
UpdateContent.appendChild(UpdateBody);
|
783
815
|
UpdateBody.className = "modal-body";
|
784
|
-
let UpdateFooter = document.createElement("div");
|
816
|
+
let UpdateFooter = document.createElement("div");
|
817
|
+
UpdateContent.appendChild(UpdateFooter);
|
785
818
|
UpdateFooter.className = "modal-footer";
|
786
|
-
let UpdateButton = document.createElement("button");
|
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");
|
827
|
+
let UpdateDataCard = document.createElement("div");
|
828
|
+
UpdateBody.appendChild(UpdateDataCard);
|
794
829
|
UpdateDataCard.className = "card mb-3";
|
795
|
-
let UpdateDataCardBody = document.createElement("div");
|
830
|
+
let UpdateDataCardBody = document.createElement("div");
|
831
|
+
UpdateDataCard.appendChild(UpdateDataCardBody);
|
796
832
|
UpdateDataCardBody.className = "card-body";
|
797
|
-
let UpdateDataCardTitle = document.createElement("h5");
|
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");
|
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");
|
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");
|
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");
|
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");
|
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", {
|
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
|
-
{
|
1044
|
-
{
|
1045
|
-
{
|
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
|
-
{
|
1049
|
-
{
|
1090
|
+
{"ID": "ApplyData", "Type": "A", "Name": "获取数据功能"},
|
1091
|
+
{"ID": "AutoCheat", "Type": "A", "Name": "自动提交当年代码"}
|
1050
1092
|
]
|
1051
1093
|
},
|
1052
|
-
{
|
1053
|
-
{
|
1054
|
-
{
|
1055
|
-
{
|
1056
|
-
{
|
1057
|
-
{
|
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
|
-
{
|
1061
|
-
{
|
1062
|
-
{
|
1063
|
-
{
|
1064
|
-
{
|
1065
|
-
{
|
1066
|
-
{
|
1067
|
-
{
|
1068
|
-
{
|
1069
|
-
{
|
1070
|
-
{
|
1071
|
-
{
|
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
|
-
{
|
1075
|
-
{
|
1076
|
-
{
|
1077
|
-
{
|
1078
|
-
{
|
1079
|
-
{
|
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
|
-
{
|
1083
|
-
{
|
1128
|
+
{"ID": "IOFile", "Type": "A", "Name": "是否使用了文件输入输出(如果需要使用)"},
|
1129
|
+
{"ID": "CompileError", "Type": "A", "Name": "是否有编译错误"}
|
1084
1130
|
]
|
1085
1131
|
},
|
1086
|
-
{
|
1087
|
-
{
|
1088
|
-
{
|
1089
|
-
{
|
1090
|
-
{
|
1091
|
-
{
|
1092
|
-
{
|
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({
|
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");
|
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");
|
2086
|
-
|
2087
|
-
let
|
2088
|
-
|
2089
|
-
let
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
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");
|
2096
|
-
|
2097
|
-
ProblemLink
|
2098
|
-
ProblemHeader.
|
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");
|
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");
|
2106
|
-
|
2107
|
-
let
|
2108
|
-
|
2109
|
-
let
|
2110
|
-
|
2111
|
-
let
|
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");
|
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");
|
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");
|
2136
|
-
QuickSubmitBadge
|
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": "黄开",
|
2144
|
-
"
|
2145
|
-
"
|
2146
|
-
"
|
2147
|
-
"
|
2148
|
-
"
|
2149
|
-
"
|
2150
|
-
"
|
2151
|
-
"
|
2152
|
-
"
|
2153
|
-
"
|
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");
|
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
|
-
|
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", {
|
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");
|
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");
|
2649
|
+
let UpdateDataCardBody = document.createElement("div");
|
2650
|
+
UpdateDataCard.appendChild(UpdateDataCardBody);
|
2483
2651
|
UpdateDataCardBody.className = "card-body";
|
2484
|
-
let UpdateDataCardTitle = document.createElement("h5");
|
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");
|
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");
|
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");
|
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");
|
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");
|
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");
|
2775
|
-
|
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");
|
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");
|
2820
|
-
|
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
|
-
|
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");
|
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({
|
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");
|
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");
|
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");
|
3614
|
-
|
3615
|
-
let
|
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");
|
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");
|
3794
|
+
let LastsMessageCell = document.createElement("td");
|
3795
|
+
Row.appendChild(LastsMessageCell);
|
3623
3796
|
LastsMessageCell.innerText = Data[i].LastsMessage;
|
3624
|
-
let SendTimeCell = document.createElement("td");
|
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");
|
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");
|
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");
|
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");
|
3889
|
+
let UsernameCell = document.createElement("td");
|
3890
|
+
Row.appendChild(UsernameCell);
|
3716
3891
|
GetUsernameHTML(UsernameCell, Data[i].FromUser);
|
3717
|
-
let ContentCell = document.createElement("td");
|
3892
|
+
let ContentCell = document.createElement("td");
|
3893
|
+
Row.appendChild(ContentCell);
|
3718
3894
|
ContentCell.innerHTML = PurifyHTML(Data[i].Content);
|
3719
|
-
let SendTimeCell = document.createElement("td");
|
3895
|
+
let SendTimeCell = document.createElement("td");
|
3896
|
+
Row.appendChild(SendTimeCell);
|
3720
3897
|
SendTimeCell.innerHTML = GetRelativeTime(Data[i].SendTime);
|
3721
|
-
let IsReadCell = document.createElement("td");
|
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");
|
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");
|
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");
|
3852
|
-
|
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");
|
3855
|
-
|
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");
|
4042
|
+
let AuthorCell = document.createElement("td");
|
4043
|
+
Row.appendChild(AuthorCell);
|
3863
4044
|
GetUsernameHTML(AuthorCell, Posts[i].UserID);
|
3864
|
-
let ProblemIDCell = document.createElement("td");
|
4045
|
+
let ProblemIDCell = document.createElement("td");
|
4046
|
+
Row.appendChild(ProblemIDCell);
|
3865
4047
|
if (Posts[i].ProblemID != 0) {
|
3866
|
-
let ProblemIDLink = document.createElement("a");
|
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");
|
4053
|
+
let PostTimeCell = document.createElement("td");
|
4054
|
+
Row.appendChild(PostTimeCell);
|
3871
4055
|
PostTimeCell.innerHTML = GetRelativeTime(Posts[i].PostTime);
|
3872
|
-
let ReplyCountCell = document.createElement("td");
|
4056
|
+
let ReplyCountCell = document.createElement("td");
|
4057
|
+
Row.appendChild(ReplyCountCell);
|
3873
4058
|
ReplyCountCell.innerText = Posts[i].ReplyCount;
|
3874
|
-
let LastReplyTimeCell = document.createElement("td");
|
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 + `` + 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 + `` + 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");
|
4396
|
+
let CardElement = document.createElement("div");
|
4397
|
+
PostReplies.appendChild(CardElement);
|
4216
4398
|
CardElement.className = "card mb-3";
|
4217
|
-
let CardBodyElement = document.createElement("div");
|
4399
|
+
let CardBodyElement = document.createElement("div");
|
4400
|
+
CardElement.appendChild(CardBodyElement);
|
4218
4401
|
CardBodyElement.className = "card-body row";
|
4219
|
-
let CardBodyRowElement = document.createElement("div");
|
4402
|
+
let CardBodyRowElement = document.createElement("div");
|
4403
|
+
CardBodyElement.appendChild(CardBodyRowElement);
|
4220
4404
|
CardBodyRowElement.className = "row mb-3";
|
4221
|
-
let AuthorElement = document.createElement("span");
|
4405
|
+
let AuthorElement = document.createElement("span");
|
4406
|
+
CardBodyRowElement.appendChild(AuthorElement);
|
4222
4407
|
AuthorElement.className = "col-4 text-muted";
|
4223
|
-
let AuthorSpanElement = document.createElement("span");
|
4408
|
+
let AuthorSpanElement = document.createElement("span");
|
4409
|
+
AuthorElement.appendChild(AuthorSpanElement);
|
4224
4410
|
AuthorSpanElement.innerText = "作者:";
|
4225
|
-
let AuthorUsernameElement = document.createElement("span");
|
4411
|
+
let AuthorUsernameElement = document.createElement("span");
|
4412
|
+
AuthorElement.appendChild(AuthorUsernameElement);
|
4226
4413
|
GetUsernameHTML(AuthorUsernameElement, Replies[i].UserID);
|
4227
|
-
let SendTimeElement = document.createElement("span");
|
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");
|
4421
|
+
let ButtonsElement = document.createElement("span");
|
4422
|
+
CardBodyRowElement.appendChild(ButtonsElement);
|
4234
4423
|
ButtonsElement.className = "col-4";
|
4235
|
-
let ReplyButton = document.createElement("button");
|
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");
|
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");
|
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");
|
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");
|
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");
|
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");
|
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");
|
4524
|
+
let CardBodyHRElement = document.createElement("hr");
|
4525
|
+
CardBodyElement.appendChild(CardBodyHRElement);
|
4331
4526
|
|
4332
|
-
let ReplyContentElement = document.createElement("div");
|
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");
|
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");
|
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");
|
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 + `` + 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");
|
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
|
}
|