xmoj-script 1.2.47 → 1.2.48
Sign up to get free protection for your applications and to get access to all the features.
- package/Update.json +11 -0
- package/XMOJ.user.js +73 -3
- package/package.json +1 -1
package/Update.json
CHANGED
@@ -2307,6 +2307,17 @@
|
|
2307
2307
|
}
|
2308
2308
|
],
|
2309
2309
|
"Notes": "No release notes were provided for this release."
|
2310
|
+
},
|
2311
|
+
"1.2.48": {
|
2312
|
+
"UpdateDate": 1723183783191,
|
2313
|
+
"Prerelease": true,
|
2314
|
+
"UpdateContents": [
|
2315
|
+
{
|
2316
|
+
"PR": 671,
|
2317
|
+
"Description": "允许在已结束的比赛下提交 #287"
|
2318
|
+
}
|
2319
|
+
],
|
2320
|
+
"Notes": "No release notes were provided for this release."
|
2310
2321
|
}
|
2311
2322
|
}
|
2312
2323
|
}
|
package/XMOJ.user.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
// ==UserScript==
|
2
2
|
// @name XMOJ
|
3
|
-
// @version 1.2.
|
3
|
+
// @version 1.2.48
|
4
4
|
// @description XMOJ增强脚本
|
5
5
|
// @author @XMOJ-Script-dev, @langningchen and the community
|
6
6
|
// @namespace https://github/langningchen
|
@@ -2764,12 +2764,82 @@ async function main() {
|
|
2764
2764
|
"referrer": location.href,
|
2765
2765
|
"method": "POST",
|
2766
2766
|
"body": (SearchParams.get("id") != null ? "id=" + SearchParams.get("id") : "cid=" + SearchParams.get("cid") + "&pid=" + SearchParams.get("pid")) + "&language=1&" + "source=" + encodeURIComponent(CodeMirrorElement.getValue()) + "&" + "enable_O2=on"
|
2767
|
-
}).then((Response) => {
|
2767
|
+
}).then(async (Response) => {
|
2768
2768
|
if (Response.redirected) {
|
2769
2769
|
location.href = Response.url;
|
2770
2770
|
} else {
|
2771
|
+
const text = await Response.text();
|
2772
|
+
if (text.indexOf("没有这个比赛!") !== -1 && new URL(location.href).searchParams.get("pid") !== null) {
|
2773
|
+
// Credit: https://github.com/boomzero/quicksubmit/blob/main/index.ts
|
2774
|
+
// Also licensed under GPL-3.0
|
2775
|
+
const contestReq = await fetch(
|
2776
|
+
"https://www.xmoj.tech/contest.php?cid=" + new URL(location.href).searchParams.get("cid"),
|
2777
|
+
{
|
2778
|
+
"credentials": "include",
|
2779
|
+
"headers": {
|
2780
|
+
"User-Agent":
|
2781
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0",
|
2782
|
+
"Accept":
|
2783
|
+
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
2784
|
+
"Accept-Language": "en-US,en;q=0.5",
|
2785
|
+
"Upgrade-Insecure-Requests": "1",
|
2786
|
+
"Sec-Fetch-Dest": "document",
|
2787
|
+
"Sec-Fetch-Mode": "navigate",
|
2788
|
+
"Sec-Fetch-Site": "same-origin"
|
2789
|
+
},
|
2790
|
+
"referrer": "https://www.xmoj.tech/contest.php",
|
2791
|
+
"method": "GET",
|
2792
|
+
"mode": "cors",
|
2793
|
+
},
|
2794
|
+
);
|
2795
|
+
const res = await contestReq.text();
|
2796
|
+
if (
|
2797
|
+
contestReq.status !== 200 ||
|
2798
|
+
res.indexOf("比赛尚未开始或私有,不能查看题目。") !== -1
|
2799
|
+
) {
|
2800
|
+
console.error(`Failed to get contest page!`);
|
2801
|
+
return;
|
2802
|
+
}
|
2803
|
+
const parser = new DOMParser();
|
2804
|
+
const dom = parser.parseFromString(res, "text/html");
|
2805
|
+
const contestProblems = [];
|
2806
|
+
const rows = (dom.querySelector(
|
2807
|
+
"#problemset > tbody",
|
2808
|
+
)).rows;
|
2809
|
+
for (let i = 0; i < rows.length; i++) {
|
2810
|
+
contestProblems.push(
|
2811
|
+
rows[i].children[1].textContent.substring(2, 6).replaceAll(
|
2812
|
+
"\t",
|
2813
|
+
"",
|
2814
|
+
),
|
2815
|
+
);
|
2816
|
+
}
|
2817
|
+
rPID = contestProblems[new URL(location.href).searchParams.get("pid")];
|
2818
|
+
if (UtilityEnabled("DebugMode")) {
|
2819
|
+
console.log("Contest Problems:", contestProblems);
|
2820
|
+
console.log("Real PID:", rPID);
|
2821
|
+
}
|
2822
|
+
ErrorElement.style.display = "block";
|
2823
|
+
ErrorMessage.style.color = "red";
|
2824
|
+
ErrorMessage.innerText = "比赛已结束, 正在尝试像题目 " + rPID + " 提交";
|
2825
|
+
console.log("比赛已结束, 正在尝试像题目 " + rPID + " 提交");
|
2826
|
+
await fetch("https://www.xmoj.tech/submit.php", {
|
2827
|
+
"headers": {
|
2828
|
+
"content-type": "application/x-www-form-urlencoded"
|
2829
|
+
},
|
2830
|
+
"referrer": location.href,
|
2831
|
+
"method": "POST",
|
2832
|
+
"body": "id=" + rPID + "&language=1&" + "source=" + encodeURIComponent(CodeMirrorElement.getValue()) + "&" + "enable_O2=on"
|
2833
|
+
}).then(async (Response) => {
|
2834
|
+
if (Response.redirected) {
|
2835
|
+
location.href = Response.url;
|
2836
|
+
}
|
2837
|
+
console.log(await Response.text());
|
2838
|
+
});
|
2839
|
+
|
2840
|
+
}
|
2771
2841
|
if (UtilityEnabled("DebugMode")) {
|
2772
|
-
console.log("Submission failed! Response:",
|
2842
|
+
console.log("Submission failed! Response:", text);
|
2773
2843
|
}
|
2774
2844
|
ErrorElement.style.display = "block";
|
2775
2845
|
ErrorMessage.style.color = "red";
|