+ let CountDownData = document.querySelector("#countdown_list").innerHTML;
+ document.querySelector("body > div > div.mt-3 > div > div.col-md-4").innerHTML = `
`;
- let Tables = document.getElementsByTagName("table");
- for (let i = 0; i < Tables.length; i++) {
- TidyTable(Tables[i]);
- }
- document.querySelector("body > div > div.mt-3 > div > div.col-md-4").innerHTML += `
+ let Tables = document.getElementsByTagName("table");
+ for (let i = 0; i < Tables.length; i++) {
+ TidyTable(Tables[i]);
+ }
+ document.querySelector("body > div > div.mt-3 > div > div.col-md-4").innerHTML += `
`;
- RequestAPI("GetNotice", {}, (Response) => {
- if (Response.Success) {
- document.querySelector("body > div.container > div > div > div.col-md-4 > div:nth-child(2) > div.cnt-row-body").innerHTML = marked.parse(Response.Data["Notice"]).replaceAll(/@([a-zA-Z0-9]+)/g, `
@$1`);
- RenderMathJax();
- let UsernameElements = document.getElementsByClassName("Usernames");
- for (let i = 0; i < UsernameElements.length; i++) {
- GetUsernameHTML(UsernameElements[i], UsernameElements[i].innerText, true);
+ RequestAPI("GetNotice", {}, (Response) => {
+ if (Response.Success) {
+ document.querySelector("body > div.container > div > div > div.col-md-4 > div:nth-child(2) > div.cnt-row-body").innerHTML = marked.parse(Response.Data["Notice"]).replaceAll(/@([a-zA-Z0-9]+)/g, `
@$1`);
+ RenderMathJax();
+ let UsernameElements = document.getElementsByClassName("Usernames");
+ for (let i = 0; i < UsernameElements.length; i++) {
+ GetUsernameHTML(UsernameElements[i], UsernameElements[i].innerText, true);
+ }
+ } else {
+ document.querySelector("body > div.container > div > div > div.col-md-4 > div:nth-child(2) > div.cnt-row-body").innerHTML = "加载失败: " + Response.Message;
}
- } else {
- document.querySelector("body > div.container > div > div > div.col-md-4 > div:nth-child(2) > div.cnt-row-body").innerHTML = "加载失败: " + Response.Message;
- }
- });
- }
- } else if (location.pathname == "/problemset.php") {
- if (UtilityEnabled("Translate")) {
- document.querySelector("body > div > div.mt-3 > center > table:nth-child(2) > tbody > tr > td:nth-child(2) > form > input").placeholder = "题目编号";
- document.querySelector("body > div > div.mt-3 > center > table:nth-child(2) > tbody > tr > td:nth-child(2) > form > button").innerText = "确认";
- document.querySelector("body > div > div.mt-3 > center > table:nth-child(2) > tbody > tr > td:nth-child(3) > form > input").placeholder = "标题或内容";
- document.querySelector("#problemset > thead > tr > th:nth-child(1)").innerText = "状态";
- }
- if (UtilityEnabled("ResetType")) {
- document.querySelector("#problemset > thead > tr > th:nth-child(1)").style.width = "5%";
- document.querySelector("#problemset > thead > tr > th:nth-child(2)").style.width = "10%";
- document.querySelector("#problemset > thead > tr > th:nth-child(3)").style.width = "75%";
- document.querySelector("#problemset > thead > tr > th:nth-child(4)").style.width = "5%";
- document.querySelector("#problemset > thead > tr > th:nth-child(5)").style.width = "5%";
- }
- document.querySelector("body > div > div.mt-3 > center > table:nth-child(2)").outerHTML = `
+ });
+ }
+ } else if (location.pathname == "/problemset.php") {
+ if (UtilityEnabled("Translate")) {
+ document.querySelector("body > div > div.mt-3 > center > table:nth-child(2) > tbody > tr > td:nth-child(2) > form > input").placeholder = "题目编号";
+ document.querySelector("body > div > div.mt-3 > center > table:nth-child(2) > tbody > tr > td:nth-child(2) > form > button").innerText = "确认";
+ document.querySelector("body > div > div.mt-3 > center > table:nth-child(2) > tbody > tr > td:nth-child(3) > form > input").placeholder = "标题或内容";
+ document.querySelector("#problemset > thead > tr > th:nth-child(1)").innerText = "状态";
+ }
+ if (UtilityEnabled("ResetType")) {
+ document.querySelector("#problemset > thead > tr > th:nth-child(1)").style.width = "5%";
+ document.querySelector("#problemset > thead > tr > th:nth-child(2)").style.width = "10%";
+ document.querySelector("#problemset > thead > tr > th:nth-child(3)").style.width = "75%";
+ document.querySelector("#problemset > thead > tr > th:nth-child(4)").style.width = "5%";
+ document.querySelector("#problemset > thead > tr > th:nth-child(5)").style.width = "5%";
+ }
+ document.querySelector("body > div > div.mt-3 > center > table:nth-child(2)").outerHTML = `
@@ -1517,629 +1582,281 @@ async function main() {
`;
- if (SearchParams.get("search") != null) {
- document.querySelector("body > div > div.mt-3 > center > div > div:nth-child(3) > form > input").value = SearchParams.get("search");
- }
-
- let Temp = document.querySelector("#problemset").rows;
- for (let i = 1; i < Temp.length; i++) {
- localStorage.setItem("UserScript-Problem-" + Temp[i].children[1].innerText + "-Name", Temp[i].children[2].innerText);
- }
- } else if (location.pathname == "/problem.php") {
- await RenderMathJax();
- if (SearchParams.get("cid") != null) {
- document.getElementsByTagName("h2")[0].innerHTML += " (" + localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID") + ")";
- }
- if (document.querySelector("body > div > div.mt-3 > h2") != null) {
- document.querySelector("body > div > div.mt-3").innerHTML = "没有此题目或题目对你不可见";
- setTimeout(() => {
- location.href = "https://www.xmoj.tech/problemset.php";
- }, 1000);
- } else {
- let PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID");
-
- document.querySelector("body > div > div.mt-3 > center").lastChild.style.marginLeft = "10px";
- //修复提交按钮
- let SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(12)');
- if (SubmitLink == null) { //a special type of problem
- SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(10)');
- }
- if (SubmitLink == null) {
- SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(11)');
- }
- if (SubmitLink == null) {
- SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(13)');
- }
- if (SubmitLink == null) {
- SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(9)');
- }
- let SubmitButton = document.createElement('button');
- SubmitButton.id = 'SubmitButton';
- SubmitButton.className = 'btn btn-outline-secondary';
- SubmitButton.textContent = '提交';
- SubmitButton.href = SubmitLink.href;
- SubmitButton.onclick = function () {
- window.location.href = SubmitLink.href;
- console.log(SubmitLink.href);
- };
-
- // Replace the
element with the button
- SubmitLink.parentNode.replaceChild(SubmitButton, SubmitLink);
- // Remove the button's outer []
- let str = document.querySelector('.mt-3 > center:nth-child(1)').innerHTML;
- let target = SubmitButton.outerHTML;
- let result = str.replace(new RegExp(`(.?)${target}(.?)`, 'g'), target);
- document.querySelector('.mt-3 > center:nth-child(1)').innerHTML = result;
- document.querySelector('html body.placeholder-glow div.container div.mt-3 center button#SubmitButton.btn.btn-outline-secondary').onclick = function () {
- window.location.href = SubmitLink.href;
- console.log(SubmitLink.href);
- };
- var Temp = document.querySelectorAll(".sampledata");
- for (var i = 0; i < Temp.length; i++) {
- Temp[i].parentElement.className = "card";
- }
- if (UtilityEnabled("RemoveUseless")) {
- document.querySelector("h2.lang_en").remove();
- document.getElementsByTagName("center")[1].remove();
- }
- if (UtilityEnabled("CopySamples")) {
- $(".copy-btn").click((Event) => {
- let CurrentButton = $(Event.currentTarget);
- let span = CurrentButton.parent().last().find(".sampledata");
- if (!span.length) {
- CurrentButton.text("未找到代码块").addClass("done");
- setTimeout(() => {
- $(".copy-btn").text("复制").removeClass("done");
- }, 1000);
- return;
- }
- GM_setClipboard(span.text());
- CurrentButton.text("复制成功").addClass("done");
- setTimeout(() => {
- $(".copy-btn").text("复制").removeClass("done");
- }, 1000);
- //document.body.removeChild(textarea[0]);
- });
- }
- let IOFileElement = document.querySelector("body > div > div.mt-3 > center > h3");
- if (IOFileElement != null) {
- while (IOFileElement.childNodes.length >= 1) {
- IOFileElement.parentNode.insertBefore(IOFileElement.childNodes[0], IOFileElement);
- }
- IOFileElement.parentNode.insertBefore(document.createElement("br"), IOFileElement);
- IOFileElement.remove();
- let Temp = document.querySelector("body > div > div.mt-3 > center").childNodes[2].data.trim();
- let IOFilename = Temp.substring(0, Temp.length - 3);
- localStorage.setItem("UserScript-Problem-" + PID + "-IOFilename", IOFilename);
- }
-
- if (UtilityEnabled("CopyMD")) {
- await fetch(location.href).then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- let Temp = ParsedDocument.querySelectorAll(".cnt-row-body");
- if (UtilityEnabled("DebugMode")) console.log(Temp);
- for (let i = 0; i < Temp.length; i++) {
- if (Temp[i].children[0].className === "content lang_cn") {
- let CopyMDButton = document.createElement("button");
- CopyMDButton.className = "btn btn-sm btn-outline-secondary copy-btn";
- CopyMDButton.innerText = "复制";
- CopyMDButton.style.marginLeft = "10px";
- CopyMDButton.type = "button";
- document.querySelectorAll(".cnt-row-head.title")[i].appendChild(CopyMDButton);
- CopyMDButton.addEventListener("click", () => {
- GM_setClipboard(Temp[i].children[0].innerText.trim().replaceAll("\n\t", "\n").replaceAll("\n\n", "\n"));
- CopyMDButton.innerText = "复制成功";
- setTimeout(() => {
- CopyMDButton.innerText = "复制";
- }, 1000);
- });
- }
- }
- });
+ if (SearchParams.get("search") != null) {
+ document.querySelector("body > div > div.mt-3 > center > div > div:nth-child(3) > form > input").value = SearchParams.get("search");
}
- if (UtilityEnabled("Discussion")) {
- let DiscussButton = document.createElement("button");
- DiscussButton.className = "btn btn-outline-secondary position-relative";
- DiscussButton.innerHTML = `讨论`;
- DiscussButton.style.marginLeft = "10px";
- DiscussButton.type = "button";
- DiscussButton.addEventListener("click", () => {
- if (SearchParams.get("cid") != null) {
- open("https://www.xmoj.tech/discuss3/discuss.php?pid=" + PID, "_blank");
- } else {
- open("https://www.xmoj.tech/discuss3/discuss.php?pid=" + SearchParams.get("id"), "_blank");
- }
- });
- document.querySelector("body > div > div.mt-3 > center").appendChild(DiscussButton);
- let UnreadBadge = document.createElement("span");
- UnreadBadge.className = "position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger";
- UnreadBadge.style.display = "none";
- DiscussButton.appendChild(UnreadBadge);
-
- let RefreshCount = () => {
- RequestAPI("GetPostCount", {
- "ProblemID": Number(PID)
- }, (Response) => {
- if (Response.Success) {
- if (Response.Data.DiscussCount != 0) {
- UnreadBadge.innerText = Response.Data.DiscussCount;
- UnreadBadge.style.display = "";
- }
- }
- });
- };
- RefreshCount();
- addEventListener("focus", RefreshCount);
- }
-
- let Tables = document.getElementsByTagName("table");
- for (let i = 0; i < Tables.length; i++) {
- TidyTable(Tables[i]);
+ let Temp = document.querySelector("#problemset").rows;
+ for (let i = 1; i < Temp.length; i++) {
+ localStorage.setItem("UserScript-Problem-" + Temp[i].children[1].innerText + "-Name", Temp[i].children[2].innerText);
}
- }
- Style.innerHTML += "code, kbd, pre, samp {";
- Style.innerHTML += " font-family: monospace, Consolas, 'Courier New';";
- Style.innerHTML += " font-size: 1rem;";
- Style.innerHTML += "}";
- Style.innerHTML += "pre {";
- Style.innerHTML += " padding: 0.3em 0.5em;";
- Style.innerHTML += " margin: 0.5em 0;";
- Style.innerHTML += "}";
- Style.innerHTML += ".in-out {";
- Style.innerHTML += " overflow: hidden;";
- Style.innerHTML += " display: flex;";
- Style.innerHTML += " padding: 0.5em 0;";
- Style.innerHTML += "}";
- Style.innerHTML += ".in-out .in-out-item {";
- Style.innerHTML += " flex: 1;";
- Style.innerHTML += " overflow: hidden;";
- Style.innerHTML += "}";
- Style.innerHTML += ".cnt-row .title {";
- Style.innerHTML += " font-weight: bolder;";
- Style.innerHTML += " font-size: 1.1rem;";
- Style.innerHTML += "}";
- Style.innerHTML += ".cnt-row .content {";
- Style.innerHTML += " overflow: hidden;";
- Style.innerHTML += "}";
- Style.innerHTML += "a.copy-btn {";
- Style.innerHTML += " float: right;";
- Style.innerHTML += " padding: 0 0.4em;";
- Style.innerHTML += " border: 1px solid var(--bs-primary);";
- Style.innerHTML += " border-radius: 3px;";
- Style.innerHTML += " color: var(--bs-primary);";
- Style.innerHTML += " cursor: pointer;";
- Style.innerHTML += "}";
- Style.innerHTML += "a.copy-btn:hover {";
- Style.innerHTML += " background-color: var(--bs-secondary-bg);";
- Style.innerHTML += "}";
- Style.innerHTML += "a.done, a.done:hover {";
- Style.innerHTML += " background-color: var(--bs-primary);";
- Style.innerHTML += " color: white;";
- Style.innerHTML += "}";
- } else if (location.pathname == "/status.php") {
- if (SearchParams.get("ByUserScript") == null) {
- document.title = "提交状态";
- document.querySelector("body > script:nth-child(5)").remove();
- if (UtilityEnabled("NewBootstrap")) {
- document.querySelector("#simform").outerHTML = ``;
+ } else if (location.pathname == "/problem.php") {
+ await RenderMathJax();
+ if (SearchParams.get("cid") != null) {
+ document.getElementsByTagName("h2")[0].innerHTML += " (" + localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID") + ")";
}
+ if (document.querySelector("body > div > div.mt-3 > h2") != null) {
+ document.querySelector("body > div > div.mt-3").innerHTML = "没有此题目或题目对你不可见";
+ setTimeout(() => {
+ location.href = "https://www.xmoj.tech/problemset.php";
+ }, 1000);
+ } else {
+ let PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID");
- if (UtilityEnabled("ImproveACRate")) {
- let ImproveACRateButton = document.createElement("button");
- document.querySelector("body > div.container > div > div.input-append").appendChild(ImproveACRateButton);
- ImproveACRateButton.className = "btn btn-outline-secondary";
- ImproveACRateButton.innerText = "提高正确率";
- ImproveACRateButton.disabled = true;
- let ACProblems = [];
- await fetch("https://www.xmoj.tech/userinfo.php?user=" + CurrentUsername)
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- ImproveACRateButton.innerText += "(" + (parseInt(ParsedDocument.querySelector("#statics > tbody > tr:nth-child(4) > td:nth-child(2)").innerText) / parseInt(ParsedDocument.querySelector("#statics > tbody > tr:nth-child(3) > td:nth-child(2)").innerText) * 100).toFixed(2) + "%)";
- let Temp = ParsedDocument.querySelector("#statics > tbody > tr:nth-child(2) > td:nth-child(3) > script").innerText.split("\n")[5].split(";");
- for (let i = 0; i < Temp.length; i++) {
- ACProblems.push(Number(Temp[i].substring(2, Temp[i].indexOf(","))));
- }
- ImproveACRateButton.disabled = false;
- });
- ImproveACRateButton.addEventListener("click", async () => {
- ImproveACRateButton.disabled = true;
- let SubmitTimes = 3;
- let Count = 0;
- let SubmitInterval = setInterval(async () => {
- if (Count >= SubmitTimes) {
- clearInterval(SubmitInterval);
- location.reload();
- return;
- }
- ImproveACRateButton.innerText = "正在提交 (" + (Count + 1) + "/" + SubmitTimes + ")";
- let PID = ACProblems[Math.floor(Math.random() * ACProblems.length)];
- let SID = 0;
- await fetch("https://www.xmoj.tech/status.php?problem_id=" + PID + "&jresult=4")
- .then((Result) => {
- return Result.text();
- }).then((Result) => {
- let ParsedDocument = new DOMParser().parseFromString(Result, "text/html");
- SID = ParsedDocument.querySelector("#result-tab > tbody > tr:nth-child(1) > td:nth-child(2)").innerText;
- });
- let Code = "";
- await fetch("https://www.xmoj.tech/getsource.php?id=" + SID)
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- Code = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
- });
- await fetch("https://www.xmoj.tech/submit.php", {
- "headers": {
- "content-type": "application/x-www-form-urlencoded"
- },
- "referrer": "https://www.xmoj.tech/submitpage.php?id=" + PID,
- "method": "POST",
- "body": "id=" + PID + "&" + "language=1&" + "source=" + encodeURIComponent(Code) + "&" + "enable_O2=on"
- });
- Count++;
- }, 1000);
- });
- ImproveACRateButton.style.marginBottom = ImproveACRateButton.style.marginRight = "7px";
- ImproveACRateButton.style.marginRight = "7px";
- }
- if (UtilityEnabled("CompareSource")) {
- let CompareButton = document.createElement("button");
- document.querySelector("body > div.container > div > div.input-append").appendChild(CompareButton);
- CompareButton.className = "btn btn-outline-secondary";
- CompareButton.innerText = "比较提交记录";
- CompareButton.addEventListener("click", () => {
- location.href = "https://www.xmoj.tech/comparesource.php";
- });
- CompareButton.style.marginBottom = "7px";
- }
- if (UtilityEnabled("ResetType")) {
- document.querySelector("#result-tab > thead > tr > th:nth-child(1)").remove();
- document.querySelector("#result-tab > thead > tr > th:nth-child(2)").remove();
- document.querySelector("#result-tab > thead > tr > th:nth-child(10)").innerHTML = "开启O2";
- }
- let Temp = document.querySelector("#result-tab > tbody").childNodes;
- let SolutionIDs = [];
- for (let i = 1; i < Temp.length; i += 2) {
- let SID = Number(Temp[i].childNodes[1].innerText);
- SolutionIDs.push(SID);
- if (UtilityEnabled("ResetType")) {
- Temp[i].childNodes[0].remove();
- Temp[i].childNodes[0].innerHTML = "" + SID + " " + "
重交";
- Temp[i].childNodes[1].remove();
- Temp[i].childNodes[1].children[0].removeAttribute("class");
- Temp[i].childNodes[3].childNodes[0].innerText = SizeToStringSize(Temp[i].childNodes[3].childNodes[0].innerText);
- Temp[i].childNodes[4].childNodes[0].innerText = TimeToStringTime(Temp[i].childNodes[4].childNodes[0].innerText);
- Temp[i].childNodes[5].innerText = Temp[i].childNodes[5].childNodes[0].innerText;
- Temp[i].childNodes[6].innerText = CodeSizeToStringSize(Temp[i].childNodes[6].innerText.substring(0, Temp[i].childNodes[6].innerText.length - 1));
- Temp[i].childNodes[9].innerText = (Temp[i].childNodes[9].innerText == "" ? "否" : "是");
+ document.querySelector("body > div > div.mt-3 > center").lastChild.style.marginLeft = "10px";
+ //修复提交按钮
+ let SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(12)');
+ if (SubmitLink == null) { //a special type of problem
+ SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(10)');
}
- if (SearchParams.get("cid") === null) {
- localStorage.setItem("UserScript-Solution-" + SID + "-Problem", Temp[i].childNodes[1].innerText);
- } else {
- localStorage.setItem("UserScript-Solution-" + SID + "-Contest", SearchParams.get("cid"));
- localStorage.setItem("UserScript-Solution-" + SID + "-PID-Contest", Temp[i].childNodes[1].innerText.charAt(0));
+ if (SubmitLink == null) {
+ SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(11)');
}
- }
-
- if (UtilityEnabled("RefreshSolution")) {
- let StdList;
- await new Promise((Resolve) => {
- RequestAPI("GetStdList", {}, async (Result) => {
- if (Result.Success) {
- StdList = Result.Data.StdList;
- Resolve();
- }
- })
- });
-
- let Rows = document.getElementById("result-tab").rows;
- let Points = Array();
- for (let i = 1; i <= SolutionIDs.length; i++) {
- Rows[i].cells[2].className = "td_result";
- let SolutionID = SolutionIDs[i - 1];
- if (Rows[i].cells[2].children.length == 2) {
- Points[SolutionID] = Rows[i].cells[2].children[1].innerText;
- Rows[i].cells[2].children[1].remove();
- }
- Rows[i].cells[2].innerHTML += "

";
- setTimeout(() => {
- RefreshResult(SolutionID);
- }, 0);
+ if (SubmitLink == null) {
+ SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(13)');
}
-
- let RefreshResult = async (SolutionID) => {
- let CurrentRow = null;
- let Rows = document.getElementById("result-tab").rows;
- for (let i = 0; i < SolutionIDs.length; i++) {
- if (SolutionIDs[i] == SolutionID) {
- CurrentRow = Rows[i + 1];
- break;
- }
- }
- await fetch("status-ajax.php?solution_id=" + SolutionID)
- .then((Response) => {
- return Response.text();
- })
- .then((Response) => {
- let PID = 0;
- if (SearchParams.get("cid") === null) {
- PID = localStorage.getItem("UserScript-Solution-" + SolutionID + "-Problem");
- } else {
- PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + (CurrentRow.cells[1].innerText.charCodeAt(0) - 65) + "-PID");
- }
- let ResponseData = Response.split(",");
- CurrentRow.cells[3].innerHTML = "
" + SizeToStringSize(ResponseData[1]) + "
";
- CurrentRow.cells[4].innerHTML = "
" + TimeToStringTime(ResponseData[2]) + "
";
- let TempHTML = "
";
- TempHTML += judge_result[ResponseData[0]];
- TempHTML += "";
- if (Points[SolutionID] != undefined) {
- TempHTML += "
" + Points[SolutionID] + "";
- if (Points[SolutionID].substring(0, Points[SolutionID].length - 1) >= 50) {
- TempHTML += `
查看标程`;
- }
- }
- if (ResponseData[0] < 4) {
- setTimeout(() => {
- RefreshResult(SolutionID)
- }, 500);
- TempHTML += "

";
- } else if (ResponseData[0] == 4 && UtilityEnabled("UploadStd")) {
- if (SearchParams.get("cid") == null) CurrentRow.cells[1].innerText;
- let Std = StdList.find((Element) => {
- return Element == Number(PID);
- });
- if (Std != undefined) {
- TempHTML += "✅";
- } else {
- RequestAPI("UploadStd", {
- "ProblemID": Number(PID),
- }, (Result) => {
- if (Result.Success) {
- CurrentRow.cells[2].innerHTML += "🆗";
- } else {
- CurrentRow.cells[2].innerHTML += "⚠️";
- }
- });
- }
- }
- CurrentRow.cells[2].innerHTML = TempHTML;
- });
+ if (SubmitLink == null) {
+ SubmitLink = document.querySelector('.mt-3 > center:nth-child(1) > a:nth-child(9)');
+ }
+ let SubmitButton = document.createElement('button');
+ SubmitButton.id = 'SubmitButton';
+ SubmitButton.className = 'btn btn-outline-secondary';
+ SubmitButton.textContent = '提交';
+ SubmitButton.href = SubmitLink.href;
+ SubmitButton.onclick = function () {
+ window.location.href = SubmitLink.href;
+ console.log(SubmitLink.href);
};
- }
- }
- } else if (location.pathname == "/contest.php") {
- if (UtilityEnabled("AutoCountdown")) {
- clock = () => {
- }
- }
- if (location.href.indexOf("?cid=") == -1) {
- if (UtilityEnabled("ResetType")) {
- document.querySelector("body > div > div.mt-3 > center").innerHTML = String(document.querySelector("body > div > div.mt-3 > center").innerHTML).replaceAll("ServerTime:", "服务器时间:");
- document.querySelector("body > div > div.mt-3 > center > table").style.marginTop = "10px";
- document.querySelector("body > div > div.mt-3 > center > form").outerHTML = `
`;
- }
- if (UtilityEnabled("Translate")) {
- document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[0].innerText = "编号";
- document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[1].innerText = "标题";
- document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[2].innerText = "状态";
- document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[3].remove();
- document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[3].innerText = "创建者";
- }
- let Temp = document.querySelector("body > div > div.mt-3 > center > table > tbody").childNodes;
- for (let i = 1; i < Temp.length; i++) {
- let CurrentElement = Temp[i].childNodes[2].childNodes;
- if (CurrentElement[1].childNodes[0].data.indexOf("运行中") != -1) {
- let Time = String(CurrentElement[1].childNodes[1].innerText).substring(4);
- let Day = parseInt(Time.substring(0, Time.indexOf("天"))) || 0;
- let Hour = parseInt(Time.substring((Time.indexOf("天") == -1 ? 0 : Time.indexOf("天") + 1), Time.indexOf("小时"))) || 0;
- let Minute = parseInt(Time.substring((Time.indexOf("小时") == -1 ? 0 : Time.indexOf("小时") + 2), Time.indexOf("分"))) || 0;
- let Second = parseInt(Time.substring((Time.indexOf("分") == -1 ? 0 : Time.indexOf("分") + 1), Time.indexOf("秒"))) || 0;
- let TimeStamp = new Date().getTime() + diff + ((((isNaN(Day) ? 0 : Day) * 24 + Hour) * 60 + Minute) * 60 + Second) * 1000;
- CurrentElement[1].childNodes[1].setAttribute("EndTime", TimeStamp);
- CurrentElement[1].childNodes[1].classList.add("UpdateByJS");
- } else if (CurrentElement[1].childNodes[0].data.indexOf("开始于") != -1) {
- let TimeStamp = Date.parse(String(CurrentElement[1].childNodes[0].data).substring(4)) + diff;
- CurrentElement[1].setAttribute("EndTime", TimeStamp);
- CurrentElement[1].classList.add("UpdateByJS");
- } else if (CurrentElement[1].childNodes[0].data.indexOf("已结束") != -1) {
- let TimeStamp = String(CurrentElement[1].childNodes[0].data).substring(4);
- CurrentElement[1].childNodes[0].data = " 已结束 ";
- CurrentElement[1].className = "red";
- let Temp = document.createElement("span");
- CurrentElement[1].appendChild(Temp);
- Temp.className = "green";
- Temp.innerHTML = TimeStamp;
+ // Replace the
element with the button
+ SubmitLink.parentNode.replaceChild(SubmitButton, SubmitLink);
+ // Remove the button's outer []
+ let str = document.querySelector('.mt-3 > center:nth-child(1)').innerHTML;
+ let target = SubmitButton.outerHTML;
+ let result = str.replace(new RegExp(`(.?)${target}(.?)`, 'g'), target);
+ document.querySelector('.mt-3 > center:nth-child(1)').innerHTML = result;
+ document.querySelector('html body.placeholder-glow div.container div.mt-3 center button#SubmitButton.btn.btn-outline-secondary').onclick = function () {
+ window.location.href = SubmitLink.href;
+ console.log(SubmitLink.href);
+ };
+ var Temp = document.querySelectorAll(".sampledata");
+ for (var i = 0; i < Temp.length; i++) {
+ Temp[i].parentElement.className = "card";
+ }
+ if (UtilityEnabled("RemoveUseless")) {
+ document.querySelector("h2.lang_en").remove();
+ document.getElementsByTagName("center")[1].remove();
+ }
+ if (UtilityEnabled("CopySamples")) {
+ $(".copy-btn").click((Event) => {
+ let CurrentButton = $(Event.currentTarget);
+ let span = CurrentButton.parent().last().find(".sampledata");
+ if (!span.length) {
+ CurrentButton.text("未找到代码块").addClass("done");
+ setTimeout(() => {
+ $(".copy-btn").text("复制").removeClass("done");
+ }, 1000);
+ return;
+ }
+ GM_setClipboard(span.text());
+ CurrentButton.text("复制成功").addClass("done");
+ setTimeout(() => {
+ $(".copy-btn").text("复制").removeClass("done");
+ }, 1000);
+ //document.body.removeChild(textarea[0]);
+ });
}
- Temp[i].childNodes[3].style.display = "none";
- Temp[i].childNodes[4].innerHTML = "" + Temp[i].childNodes[4].innerHTML + "";
- localStorage.setItem("UserScript-Contest-" + Temp[i].childNodes[0].innerText + "-Name", Temp[i].childNodes[1].innerText);
- }
- } else {
- document.getElementsByTagName("h3")[0].innerHTML = "比赛" + document.getElementsByTagName("h3")[0].innerHTML.substring(7);
- if (document.querySelector("#time_left") != null) {
- let EndTime = document.querySelector("body > div > div.mt-3 > center").childNodes[3].data;
- EndTime = EndTime.substring(EndTime.indexOf("结束时间是:") + 6, EndTime.lastIndexOf("。"));
- EndTime = new Date(EndTime).getTime();
- if (new Date().getTime() < EndTime) {
- document.querySelector("#time_left").classList.add("UpdateByJS");
- document.querySelector("#time_left").setAttribute("EndTime", EndTime);
+ let IOFileElement = document.querySelector("body > div > div.mt-3 > center > h3");
+ if (IOFileElement != null) {
+ while (IOFileElement.childNodes.length >= 1) {
+ IOFileElement.parentNode.insertBefore(IOFileElement.childNodes[0], IOFileElement);
+ }
+ IOFileElement.parentNode.insertBefore(document.createElement("br"), IOFileElement);
+ IOFileElement.remove();
+ let Temp = document.querySelector("body > div > div.mt-3 > center").childNodes[2].data.trim();
+ let IOFilename = Temp.substring(0, Temp.length - 3);
+ localStorage.setItem("UserScript-Problem-" + PID + "-IOFilename", IOFilename);
}
- }
- let HTMLData = document.querySelector("body > div > div.mt-3 > center > div").innerHTML;
- HTMLData = HTMLData.replaceAll(" \n ", " ")
- HTMLData = HTMLData.replaceAll("
开始于: ", "开始时间:")
- HTMLData = HTMLData.replaceAll("\n结束于: ", "
结束时间:")
- HTMLData = HTMLData.replaceAll("\n订正截止日期: ", "
订正截止日期:")
- HTMLData = HTMLData.replaceAll("\n现在时间: ", "当前时间:")
- HTMLData = HTMLData.replaceAll("\n状态:", "
状态:")
- document.querySelector("body > div > div.mt-3 > center > div").innerHTML = HTMLData;
- if (UtilityEnabled("RemoveAlerts") && document.querySelector("body > div > div.mt-3 > center").innerHTML.indexOf("尚未开始比赛") != -1) {
- document.querySelector("body > div > div.mt-3 > center > a").setAttribute("href", "start_contest.php?cid=" + SearchParams.get("cid"));
- } else if (UtilityEnabled("AutoRefresh")) {
- addEventListener("focus", async () => {
- await fetch(location.href)
- .then((Response) => {
- return Response.text();
- })
- .then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- let Temp = ParsedDocument.querySelector("#problemset > tbody").children;
- if (UtilityEnabled("ReplaceYN")) {
- for (let i = 0; i < Temp.length; i++) {
- let Status = Temp[i].children[0].innerText;
- if (Status.indexOf("Y") != -1) {
- document.querySelector("#problemset > tbody").children[i].children[0].children[0].className = "status status_y";
- document.querySelector("#problemset > tbody").children[i].children[0].children[0].innerText = "✓";
- } else if (Status.indexOf("N") != -1) {
- document.querySelector("#problemset > tbody").children[i].children[0].children[0].className = "status status_n";
- document.querySelector("#problemset > tbody").children[i].children[0].children[0].innerText = "✗";
- }
- }
- }
- });
- });
- document.querySelector("body > div > div.mt-3 > center > br:nth-child(2)").remove();
- document.querySelector("body > div > div.mt-3 > center > br:nth-child(2)").remove();
- document.querySelector("body > div > div.mt-3 > center > div > .red").innerHTML = String(document.querySelector("body > div > div.mt-3 > center > div > .red").innerHTML).replaceAll("
", "
");
- let StaticButton = document.createElement("button");
- document.querySelectorAll("body > div > div.mt-3 > center > div > .red")[1].appendChild(StaticButton);
- StaticButton.className = "btn btn-outline-secondary";
- StaticButton.innerText = "统计";
- StaticButton.addEventListener("click", () => {
- location.href = "https://www.xmoj.tech/conteststatistics.php?cid=" + SearchParams.get("cid");
- });
- document.querySelector("#problemset > tbody").innerHTML = String(document.querySelector("#problemset > tbody").innerHTML).replaceAll(/\t ([0-9]*) 问题 ([^<]*)/g, "$2. $1");
+ if (UtilityEnabled("CopyMD")) {
+ await fetch(location.href).then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let Temp = ParsedDocument.querySelectorAll(".cnt-row-body");
+ if (UtilityEnabled("DebugMode")) console.log(Temp);
+ for (let i = 0; i < Temp.length; i++) {
+ if (Temp[i].children[0].className === "content lang_cn") {
+ let CopyMDButton = document.createElement("button");
+ CopyMDButton.className = "btn btn-sm btn-outline-secondary copy-btn";
+ CopyMDButton.innerText = "复制";
+ CopyMDButton.style.marginLeft = "10px";
+ CopyMDButton.type = "button";
+ document.querySelectorAll(".cnt-row-head.title")[i].appendChild(CopyMDButton);
+ CopyMDButton.addEventListener("click", () => {
+ GM_setClipboard(Temp[i].children[0].innerText.trim().replaceAll("\n\t", "\n").replaceAll("\n\n", "\n"));
+ CopyMDButton.innerText = "复制成功";
+ setTimeout(() => {
+ CopyMDButton.innerText = "复制";
+ }, 1000);
+ });
+ }
+ }
+ });
+ }
- document.querySelector("#problemset > tbody").innerHTML = String(document.querySelector("#problemset > tbody").innerHTML).replaceAll(/\t\*([0-9]*) 问题 ([^<]*)/g, "拓展$2. $1");
+ if (UtilityEnabled("Discussion")) {
+ let DiscussButton = document.createElement("button");
+ DiscussButton.className = "btn btn-outline-secondary position-relative";
+ DiscussButton.innerHTML = `讨论`;
+ DiscussButton.style.marginLeft = "10px";
+ DiscussButton.type = "button";
+ DiscussButton.addEventListener("click", () => {
+ if (SearchParams.get("cid") != null) {
+ open("https://www.xmoj.tech/discuss3/discuss.php?pid=" + PID, "_blank");
+ } else {
+ open("https://www.xmoj.tech/discuss3/discuss.php?pid=" + SearchParams.get("id"), "_blank");
+ }
+ });
+ document.querySelector("body > div > div.mt-3 > center").appendChild(DiscussButton);
+ let UnreadBadge = document.createElement("span");
+ UnreadBadge.className = "position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger";
+ UnreadBadge.style.display = "none";
+ DiscussButton.appendChild(UnreadBadge);
- if (UtilityEnabled("MoreSTD") && document.querySelector("#problemset > thead > tr").innerHTML.indexOf("标程") != -1) {
- let Temp = document.querySelector("#problemset > thead > tr").children;
- for (let i = 0; i < Temp.length; i++) {
- if (Temp[i].innerText == "标程") {
- Temp[i].remove();
- let Temp2 = document.querySelector("#problemset > tbody").children;
- for (let j = 0; j < Temp2.length; j++) {
- if (Temp2[j].children[i] != undefined) {
- Temp2[j].children[i].remove();
+ let RefreshCount = () => {
+ RequestAPI("GetPostCount", {
+ "ProblemID": Number(PID)
+ }, (Response) => {
+ if (Response.Success) {
+ if (Response.Data.DiscussCount != 0) {
+ UnreadBadge.innerText = Response.Data.DiscussCount;
+ UnreadBadge.style.display = "";
}
}
- }
- }
- document.querySelector("#problemset > thead > tr").innerHTML += "
标程 | ";
- Temp = document.querySelector("#problemset > tbody").children;
- for (let i = 0; i < Temp.length; i++) {
- Temp[i].innerHTML += "
打开 | ";
- }
+ });
+ };
+ RefreshCount();
+ addEventListener("focus", RefreshCount);
}
- Temp = document.querySelector("#problemset > tbody").rows;
- for (let i = 0; i < Temp.length; i++) {
- if (Temp[i].childNodes[0].children.length == 0) {
- Temp[i].childNodes[0].innerHTML = "
";
- }
- let PID = Temp[i].childNodes[1].innerHTML;
- if (PID.substring(0, 2) == "拓展") {
- PID = PID.substring(2);
- }
- Temp[i].children[2].children[0].target = "_blank";
- localStorage.setItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + i + "-PID", PID.substring(3));
- localStorage.setItem("UserScript-Problem-" + PID.substring(3) + "-Name", Temp[i].childNodes[2].innerText);
+ let Tables = document.getElementsByTagName("table");
+ for (let i = 0; i < Tables.length; i++) {
+ TidyTable(Tables[i]);
+ }
+ }
+ Style.innerHTML += "code, kbd, pre, samp {";
+ Style.innerHTML += " font-family: monospace, Consolas, 'Courier New';";
+ Style.innerHTML += " font-size: 1rem;";
+ Style.innerHTML += "}";
+ Style.innerHTML += "pre {";
+ Style.innerHTML += " padding: 0.3em 0.5em;";
+ Style.innerHTML += " margin: 0.5em 0;";
+ Style.innerHTML += "}";
+ Style.innerHTML += ".in-out {";
+ Style.innerHTML += " overflow: hidden;";
+ Style.innerHTML += " display: flex;";
+ Style.innerHTML += " padding: 0.5em 0;";
+ Style.innerHTML += "}";
+ Style.innerHTML += ".in-out .in-out-item {";
+ Style.innerHTML += " flex: 1;";
+ Style.innerHTML += " overflow: hidden;";
+ Style.innerHTML += "}";
+ Style.innerHTML += ".cnt-row .title {";
+ Style.innerHTML += " font-weight: bolder;";
+ Style.innerHTML += " font-size: 1.1rem;";
+ Style.innerHTML += "}";
+ Style.innerHTML += ".cnt-row .content {";
+ Style.innerHTML += " overflow: hidden;";
+ Style.innerHTML += "}";
+ Style.innerHTML += "a.copy-btn {";
+ Style.innerHTML += " float: right;";
+ Style.innerHTML += " padding: 0 0.4em;";
+ Style.innerHTML += " border: 1px solid var(--bs-primary);";
+ Style.innerHTML += " border-radius: 3px;";
+ Style.innerHTML += " color: var(--bs-primary);";
+ Style.innerHTML += " cursor: pointer;";
+ Style.innerHTML += "}";
+ Style.innerHTML += "a.copy-btn:hover {";
+ Style.innerHTML += " background-color: var(--bs-secondary-bg);";
+ Style.innerHTML += "}";
+ Style.innerHTML += "a.done, a.done:hover {";
+ Style.innerHTML += " background-color: var(--bs-primary);";
+ Style.innerHTML += " color: white;";
+ Style.innerHTML += "}";
+ } else if (location.pathname == "/status.php") {
+ if (SearchParams.get("ByUserScript") == null) {
+ document.title = "提交状态";
+ document.querySelector("body > script:nth-child(5)").remove();
+ if (UtilityEnabled("NewBootstrap")) {
+ document.querySelector("#simform").outerHTML = `
`;
}
- let CheatDiv = document.createElement("div");
- CheatDiv.style.marginTop = "20px";
- CheatDiv.style.textAlign = "left";
- document.querySelector("body > div > div.mt-3 > center").insertBefore(CheatDiv, document.querySelector("#problemset"));
- if (UtilityEnabled("AutoCheat")) {
- let AutoCheatButton = document.createElement("button");
- CheatDiv.appendChild(AutoCheatButton);
- AutoCheatButton.className = "btn btn-outline-secondary";
- AutoCheatButton.innerText = "自动提交当年代码";
- AutoCheatButton.style.marginRight = "5px";
- AutoCheatButton.disabled = true;
- let ACProblems = [], ContestProblems = [];
- const UrlParams = new URLSearchParams(window.location.search);
- const CID = UrlParams.get("cid");
+
+ if (UtilityEnabled("ImproveACRate")) {
+ let ImproveACRateButton = document.createElement("button");
+ document.querySelector("body > div.container > div > div.input-append").appendChild(ImproveACRateButton);
+ ImproveACRateButton.className = "btn btn-outline-secondary";
+ ImproveACRateButton.innerText = "提高正确率";
+ ImproveACRateButton.disabled = true;
+ let ACProblems = [];
await fetch("https://www.xmoj.tech/userinfo.php?user=" + CurrentUsername)
.then((Response) => {
return Response.text();
}).then((Response) => {
let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ ImproveACRateButton.innerText += "(" + (parseInt(ParsedDocument.querySelector("#statics > tbody > tr:nth-child(4) > td:nth-child(2)").innerText) / parseInt(ParsedDocument.querySelector("#statics > tbody > tr:nth-child(3) > td:nth-child(2)").innerText) * 100).toFixed(2) + "%)";
let Temp = ParsedDocument.querySelector("#statics > tbody > tr:nth-child(2) > td:nth-child(3) > script").innerText.split("\n")[5].split(";");
for (let i = 0; i < Temp.length; i++) {
ACProblems.push(Number(Temp[i].substring(2, Temp[i].indexOf(","))));
}
- AutoCheatButton.disabled = false;
+ ImproveACRateButton.disabled = false;
});
- let Rows = document.querySelector("#problemset > tbody").rows;
- for (let i = 0; i < Rows.length; i++) {
- ContestProblems.push(Rows[i].children[1].innerText.substring(Rows[i].children[1].innerText.indexOf('.') + 2)).toFixed;
- }
- AutoCheatButton.addEventListener("click", async () => {
- AutoCheatButton.disabled = true;
- let Submitted = false;
- for (let i = 0; i < ContestProblems.length; i++) {
- let PID = ContestProblems[i];
- if (ACProblems.indexOf(Number(PID)) == -1) {
- console.log("Ignoring problem " + PID + " as it has not been solved yet.");
- continue;
- }
- if (Rows[i].children[0].children[0].classList.contains("status_y")) {
- console.log("Ignoring problem " + PID + " as it has already been solved in this contest.");
- continue;
+ ImproveACRateButton.addEventListener("click", async () => {
+ ImproveACRateButton.disabled = true;
+ let SubmitTimes = 3;
+ let Count = 0;
+ let SubmitInterval = setInterval(async () => {
+ if (Count >= SubmitTimes) {
+ clearInterval(SubmitInterval);
+ location.reload();
+ return;
}
- console.log("Submitting problem " + PID);
- Submitted = true;
- AutoCheatButton.innerHTML = "正在提交 " + PID;
+ ImproveACRateButton.innerText = "正在提交 (" + (Count + 1) + "/" + SubmitTimes + ")";
+ let PID = ACProblems[Math.floor(Math.random() * ACProblems.length)];
let SID = 0;
await fetch("https://www.xmoj.tech/status.php?problem_id=" + PID + "&jresult=4")
.then((Result) => {
@@ -2148,7 +1865,6 @@ async function main() {
let ParsedDocument = new DOMParser().parseFromString(Result, "text/html");
SID = ParsedDocument.querySelector("#result-tab > tbody > tr:nth-child(1) > td:nth-child(2)").innerText;
});
- await new Promise(r => setTimeout(r, 500));
let Code = "";
await fetch("https://www.xmoj.tech/getsource.php?id=" + SID)
.then((Response) => {
@@ -2156,73 +1872,508 @@ async function main() {
}).then((Response) => {
Code = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
});
- await new Promise(r => setTimeout(r, 500));
await fetch("https://www.xmoj.tech/submit.php", {
"headers": {
"content-type": "application/x-www-form-urlencoded"
},
"referrer": "https://www.xmoj.tech/submitpage.php?id=" + PID,
"method": "POST",
- "body": "cid=" + CID + "&pid=" + i + "&" + "language=1&" + "source=" + encodeURIComponent(Code) + "&" + "enable_O2=on"
+ "body": "id=" + PID + "&" + "language=1&" + "source=" + encodeURIComponent(Code) + "&" + "enable_O2=on"
});
- await new Promise(r => setTimeout(r, 500));
- }
- if (!Submitted) {
- AutoCheatButton.innerHTML = "没有可以提交的题目!";
- await new Promise(r => setTimeout(r, 1000));
- }
- AutoCheatButton.disabled = false;
- if (Submitted) location.reload(); else AutoCheatButton.innerHTML = "自动提交当年代码";
+ Count++;
+ }, 1000);
});
- document.addEventListener("keydown", (Event) => {
- if (Event.code === 'Enter' && Event.ctrlKey) {
- AutoCheatButton.click();
- }
+ ImproveACRateButton.style.marginBottom = ImproveACRateButton.style.marginRight = "7px";
+ ImproveACRateButton.style.marginRight = "7px";
+ }
+ if (UtilityEnabled("CompareSource")) {
+ let CompareButton = document.createElement("button");
+ document.querySelector("body > div.container > div > div.input-append").appendChild(CompareButton);
+ CompareButton.className = "btn btn-outline-secondary";
+ CompareButton.innerText = "比较提交记录";
+ CompareButton.addEventListener("click", () => {
+ location.href = "https://www.xmoj.tech/comparesource.php";
});
+ CompareButton.style.marginBottom = "7px";
}
- if (UtilityEnabled("OpenAllProblem")) {
- let OpenAllButton = document.createElement("button");
- OpenAllButton.className = "btn btn-outline-secondary";
- OpenAllButton.innerText = "打开全部题目";
- OpenAllButton.style.marginRight = "5px";
- CheatDiv.appendChild(OpenAllButton);
- OpenAllButton.addEventListener("click", () => {
- let Rows = document.querySelector("#problemset > tbody").rows;
- for (let i = 0; i < Rows.length; i++) {
- open(Rows[i].children[2].children[0].href, "_blank");
+ if (UtilityEnabled("ResetType")) {
+ document.querySelector("#result-tab > thead > tr > th:nth-child(1)").remove();
+ document.querySelector("#result-tab > thead > tr > th:nth-child(2)").remove();
+ document.querySelector("#result-tab > thead > tr > th:nth-child(10)").innerHTML = "开启O2";
+ }
+ let Temp = document.querySelector("#result-tab > tbody").childNodes;
+ let SolutionIDs = [];
+ for (let i = 1; i < Temp.length; i += 2) {
+ let SID = Number(Temp[i].childNodes[1].innerText);
+ SolutionIDs.push(SID);
+ if (UtilityEnabled("ResetType")) {
+ Temp[i].childNodes[0].remove();
+ Temp[i].childNodes[0].innerHTML = "
" + SID + " " + "
重交";
+ Temp[i].childNodes[1].remove();
+ Temp[i].childNodes[1].children[0].removeAttribute("class");
+ Temp[i].childNodes[3].childNodes[0].innerText = SizeToStringSize(Temp[i].childNodes[3].childNodes[0].innerText);
+ Temp[i].childNodes[4].childNodes[0].innerText = TimeToStringTime(Temp[i].childNodes[4].childNodes[0].innerText);
+ Temp[i].childNodes[5].innerText = Temp[i].childNodes[5].childNodes[0].innerText;
+ Temp[i].childNodes[6].innerText = CodeSizeToStringSize(Temp[i].childNodes[6].innerText.substring(0, Temp[i].childNodes[6].innerText.length - 1));
+ Temp[i].childNodes[9].innerText = (Temp[i].childNodes[9].innerText == "" ? "否" : "是");
+ }
+ if (SearchParams.get("cid") === null) {
+ localStorage.setItem("UserScript-Solution-" + SID + "-Problem", Temp[i].childNodes[1].innerText);
+ } else {
+ localStorage.setItem("UserScript-Solution-" + SID + "-Contest", SearchParams.get("cid"));
+ localStorage.setItem("UserScript-Solution-" + SID + "-PID-Contest", Temp[i].childNodes[1].innerText.charAt(0));
+ }
+ }
+
+ if (UtilityEnabled("RefreshSolution")) {
+ let StdList;
+ await new Promise((Resolve) => {
+ RequestAPI("GetStdList", {}, async (Result) => {
+ if (Result.Success) {
+ StdList = Result.Data.StdList;
+ Resolve();
+ }
+ })
+ });
+
+ let Rows = document.getElementById("result-tab").rows;
+ let Points = Array();
+ for (let i = 1; i <= SolutionIDs.length; i++) {
+ Rows[i].cells[2].className = "td_result";
+ let SolutionID = SolutionIDs[i - 1];
+ if (Rows[i].cells[2].children.length == 2) {
+ Points[SolutionID] = Rows[i].cells[2].children[1].innerText;
+ Rows[i].cells[2].children[1].remove();
+ }
+ Rows[i].cells[2].innerHTML += "

";
+ setTimeout(() => {
+ RefreshResult(SolutionID);
+ }, 0);
+ }
+
+ let RefreshResult = async (SolutionID) => {
+ let CurrentRow = null;
+ let Rows = document.getElementById("result-tab").rows;
+ for (let i = 0; i < SolutionIDs.length; i++) {
+ if (SolutionIDs[i] == SolutionID) {
+ CurrentRow = Rows[i + 1];
+ break;
+ }
}
+ await fetch("status-ajax.php?solution_id=" + SolutionID)
+ .then((Response) => {
+ return Response.text();
+ })
+ .then((Response) => {
+ let PID = 0;
+ if (SearchParams.get("cid") === null) {
+ PID = localStorage.getItem("UserScript-Solution-" + SolutionID + "-Problem");
+ } else {
+ PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + (CurrentRow.cells[1].innerText.charCodeAt(0) - 65) + "-PID");
+ }
+ let ResponseData = Response.split(",");
+ CurrentRow.cells[3].innerHTML = "
" + SizeToStringSize(ResponseData[1]) + "
";
+ CurrentRow.cells[4].innerHTML = "
" + TimeToStringTime(ResponseData[2]) + "
";
+ let TempHTML = "
";
+ TempHTML += judge_result[ResponseData[0]];
+ TempHTML += "";
+ if (Points[SolutionID] != undefined) {
+ TempHTML += "
" + Points[SolutionID] + "";
+ if (Points[SolutionID].substring(0, Points[SolutionID].length - 1) >= 50) {
+ TempHTML += `
查看标程`;
+ }
+ }
+ if (ResponseData[0] < 4) {
+ setTimeout(() => {
+ RefreshResult(SolutionID)
+ }, 500);
+ TempHTML += "

";
+ } else if (ResponseData[0] == 4 && UtilityEnabled("UploadStd")) {
+ if (SearchParams.get("cid") == null) CurrentRow.cells[1].innerText;
+ let Std = StdList.find((Element) => {
+ return Element == Number(PID);
+ });
+ if (Std != undefined) {
+ TempHTML += "✅";
+ } else {
+ RequestAPI("UploadStd", {
+ "ProblemID": Number(PID),
+ }, (Result) => {
+ if (Result.Success) {
+ CurrentRow.cells[2].innerHTML += "🆗";
+ } else {
+ CurrentRow.cells[2].innerHTML += "⚠️";
+ }
+ });
+ }
+ }
+ CurrentRow.cells[2].innerHTML = TempHTML;
+ });
+ };
+ }
+ }
+ } else if (location.pathname == "/contest.php") {
+ if (UtilityEnabled("AutoCountdown")) {
+ clock = () => {
+ }
+ }
+ if (location.href.indexOf("?cid=") == -1) {
+ if (UtilityEnabled("ResetType")) {
+ document.querySelector("body > div > div.mt-3 > center").innerHTML = String(document.querySelector("body > div > div.mt-3 > center").innerHTML).replaceAll("ServerTime:", "服务器时间:");
+ document.querySelector("body > div > div.mt-3 > center > table").style.marginTop = "10px";
+
+ document.querySelector("body > div > div.mt-3 > center > form").outerHTML = `
`;
+ }
+ if (UtilityEnabled("Translate")) {
+ document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[0].innerText = "编号";
+ document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[1].innerText = "标题";
+ document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[2].innerText = "状态";
+ document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[3].remove();
+ document.querySelector("body > div > div.mt-3 > center > table > thead > tr").childNodes[3].innerText = "创建者";
+ }
+ let Temp = document.querySelector("body > div > div.mt-3 > center > table > tbody").childNodes;
+ for (let i = 1; i < Temp.length; i++) {
+ let CurrentElement = Temp[i].childNodes[2].childNodes;
+ if (CurrentElement[1].childNodes[0].data.indexOf("运行中") != -1) {
+ let Time = String(CurrentElement[1].childNodes[1].innerText).substring(4);
+ let Day = parseInt(Time.substring(0, Time.indexOf("天"))) || 0;
+ let Hour = parseInt(Time.substring((Time.indexOf("天") == -1 ? 0 : Time.indexOf("天") + 1), Time.indexOf("小时"))) || 0;
+ let Minute = parseInt(Time.substring((Time.indexOf("小时") == -1 ? 0 : Time.indexOf("小时") + 2), Time.indexOf("分"))) || 0;
+ let Second = parseInt(Time.substring((Time.indexOf("分") == -1 ? 0 : Time.indexOf("分") + 1), Time.indexOf("秒"))) || 0;
+ let TimeStamp = new Date().getTime() + diff + ((((isNaN(Day) ? 0 : Day) * 24 + Hour) * 60 + Minute) * 60 + Second) * 1000;
+ CurrentElement[1].childNodes[1].setAttribute("EndTime", TimeStamp);
+ CurrentElement[1].childNodes[1].classList.add("UpdateByJS");
+ } else if (CurrentElement[1].childNodes[0].data.indexOf("开始于") != -1) {
+ let TimeStamp = Date.parse(String(CurrentElement[1].childNodes[0].data).substring(4)) + diff;
+ CurrentElement[1].setAttribute("EndTime", TimeStamp);
+ CurrentElement[1].classList.add("UpdateByJS");
+ } else if (CurrentElement[1].childNodes[0].data.indexOf("已结束") != -1) {
+ let TimeStamp = String(CurrentElement[1].childNodes[0].data).substring(4);
+ CurrentElement[1].childNodes[0].data = " 已结束 ";
+ CurrentElement[1].className = "red";
+ let Temp = document.createElement("span");
+ CurrentElement[1].appendChild(Temp);
+ Temp.className = "green";
+ Temp.innerHTML = TimeStamp;
+ }
+ Temp[i].childNodes[3].style.display = "none";
+ Temp[i].childNodes[4].innerHTML = "
" + Temp[i].childNodes[4].innerHTML + "";
+ localStorage.setItem("UserScript-Contest-" + Temp[i].childNodes[0].innerText + "-Name", Temp[i].childNodes[1].innerText);
+ }
+ } else {
+ document.getElementsByTagName("h3")[0].innerHTML = "比赛" + document.getElementsByTagName("h3")[0].innerHTML.substring(7);
+ if (document.querySelector("#time_left") != null) {
+ let EndTime = document.querySelector("body > div > div.mt-3 > center").childNodes[3].data;
+ EndTime = EndTime.substring(EndTime.indexOf("结束时间是:") + 6, EndTime.lastIndexOf("。"));
+ EndTime = new Date(EndTime).getTime();
+ if (new Date().getTime() < EndTime) {
+ document.querySelector("#time_left").classList.add("UpdateByJS");
+ document.querySelector("#time_left").setAttribute("EndTime", EndTime);
+ }
+ }
+ let HTMLData = document.querySelector("body > div > div.mt-3 > center > div").innerHTML;
+ HTMLData = HTMLData.replaceAll(" \n ", " ")
+ HTMLData = HTMLData.replaceAll("
开始于: ", "开始时间:")
+ HTMLData = HTMLData.replaceAll("\n结束于: ", "
结束时间:")
+ HTMLData = HTMLData.replaceAll("\n订正截止日期: ", "
订正截止日期:")
+ HTMLData = HTMLData.replaceAll("\n现在时间: ", "当前时间:")
+ HTMLData = HTMLData.replaceAll("\n状态:", "
状态:")
+ document.querySelector("body > div > div.mt-3 > center > div").innerHTML = HTMLData;
+ if (UtilityEnabled("RemoveAlerts") && document.querySelector("body > div > div.mt-3 > center").innerHTML.indexOf("尚未开始比赛") != -1) {
+ document.querySelector("body > div > div.mt-3 > center > a").setAttribute("href", "start_contest.php?cid=" + SearchParams.get("cid"));
+ } else if (UtilityEnabled("AutoRefresh")) {
+ addEventListener("focus", async () => {
+ await fetch(location.href)
+ .then((Response) => {
+ return Response.text();
+ })
+ .then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let Temp = ParsedDocument.querySelector("#problemset > tbody").children;
+ if (UtilityEnabled("ReplaceYN")) {
+ for (let i = 0; i < Temp.length; i++) {
+ let Status = Temp[i].children[0].innerText;
+ if (Status.indexOf("Y") != -1) {
+ document.querySelector("#problemset > tbody").children[i].children[0].children[0].className = "status status_y";
+ document.querySelector("#problemset > tbody").children[i].children[0].children[0].innerText = "✓";
+ } else if (Status.indexOf("N") != -1) {
+ document.querySelector("#problemset > tbody").children[i].children[0].children[0].className = "status status_n";
+ document.querySelector("#problemset > tbody").children[i].children[0].children[0].innerText = "✗";
+ }
+ }
+ }
+ });
+ });
+ document.querySelector("body > div > div.mt-3 > center > br:nth-child(2)").remove();
+ document.querySelector("body > div > div.mt-3 > center > br:nth-child(2)").remove();
+ document.querySelector("body > div > div.mt-3 > center > div > .red").innerHTML = String(document.querySelector("body > div > div.mt-3 > center > div > .red").innerHTML).replaceAll("
", "
");
+ let StaticButton = document.createElement("button");
+ document.querySelectorAll("body > div > div.mt-3 > center > div > .red")[1].appendChild(StaticButton);
+ StaticButton.className = "btn btn-outline-secondary";
+ StaticButton.innerText = "统计";
+ StaticButton.addEventListener("click", () => {
+ location.href = "https://www.xmoj.tech/conteststatistics.php?cid=" + SearchParams.get("cid");
});
- let OpenUnsolvedButton = document.createElement("button");
- OpenUnsolvedButton.className = "btn btn-outline-secondary";
- OpenUnsolvedButton.innerText = "打开未解决题目";
- CheatDiv.appendChild(OpenUnsolvedButton);
- OpenUnsolvedButton.addEventListener("click", () => {
+
+ document.querySelector("#problemset > tbody").innerHTML = String(document.querySelector("#problemset > tbody").innerHTML).replaceAll(/\t ([0-9]*) 问题 ([^<]*)/g, "$2. $1");
+
+ document.querySelector("#problemset > tbody").innerHTML = String(document.querySelector("#problemset > tbody").innerHTML).replaceAll(/\t\*([0-9]*) 问题 ([^<]*)/g, "拓展$2. $1");
+
+ if (UtilityEnabled("MoreSTD") && document.querySelector("#problemset > thead > tr").innerHTML.indexOf("标程") != -1) {
+ let Temp = document.querySelector("#problemset > thead > tr").children;
+ for (let i = 0; i < Temp.length; i++) {
+ if (Temp[i].innerText == "标程") {
+ Temp[i].remove();
+ let Temp2 = document.querySelector("#problemset > tbody").children;
+ for (let j = 0; j < Temp2.length; j++) {
+ if (Temp2[j].children[i] != undefined) {
+ Temp2[j].children[i].remove();
+ }
+ }
+ }
+ }
+ document.querySelector("#problemset > thead > tr").innerHTML += "
标程 | ";
+ Temp = document.querySelector("#problemset > tbody").children;
+ for (let i = 0; i < Temp.length; i++) {
+ Temp[i].innerHTML += "
打开 | ";
+ }
+ }
+
+ Temp = document.querySelector("#problemset > tbody").rows;
+ for (let i = 0; i < Temp.length; i++) {
+ if (Temp[i].childNodes[0].children.length == 0) {
+ Temp[i].childNodes[0].innerHTML = "
";
+ }
+ let PID = Temp[i].childNodes[1].innerHTML;
+ if (PID.substring(0, 2) == "拓展") {
+ PID = PID.substring(2);
+ }
+ Temp[i].children[2].children[0].target = "_blank";
+ localStorage.setItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + i + "-PID", PID.substring(3));
+ localStorage.setItem("UserScript-Problem-" + PID.substring(3) + "-Name", Temp[i].childNodes[2].innerText);
+ }
+ let CheatDiv = document.createElement("div");
+ CheatDiv.style.marginTop = "20px";
+ CheatDiv.style.textAlign = "left";
+ document.querySelector("body > div > div.mt-3 > center").insertBefore(CheatDiv, document.querySelector("#problemset"));
+ if (UtilityEnabled("AutoCheat")) {
+ let AutoCheatButton = document.createElement("button");
+ CheatDiv.appendChild(AutoCheatButton);
+ AutoCheatButton.className = "btn btn-outline-secondary";
+ AutoCheatButton.innerText = "自动提交当年代码";
+ AutoCheatButton.style.marginRight = "5px";
+ AutoCheatButton.disabled = true;
+ let ACProblems = [], ContestProblems = [];
+ const UrlParams = new URLSearchParams(window.location.search);
+ const CID = UrlParams.get("cid");
+ await fetch("https://www.xmoj.tech/userinfo.php?user=" + CurrentUsername)
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let Temp = ParsedDocument.querySelector("#statics > tbody > tr:nth-child(2) > td:nth-child(3) > script").innerText.split("\n")[5].split(";");
+ for (let i = 0; i < Temp.length; i++) {
+ ACProblems.push(Number(Temp[i].substring(2, Temp[i].indexOf(","))));
+ }
+ AutoCheatButton.disabled = false;
+ });
let Rows = document.querySelector("#problemset > tbody").rows;
for (let i = 0; i < Rows.length; i++) {
- if (!Rows[i].children[0].children[0].classList.contains("status_y")) {
+ ContestProblems.push(Rows[i].children[1].innerText.substring(Rows[i].children[1].innerText.indexOf('.') + 2)).toFixed;
+ }
+ AutoCheatButton.addEventListener("click", async () => {
+ AutoCheatButton.disabled = true;
+ let Submitted = false;
+ for (let i = 0; i < ContestProblems.length; i++) {
+ let PID = ContestProblems[i];
+ if (ACProblems.indexOf(Number(PID)) == -1) {
+ console.log("Ignoring problem " + PID + " as it has not been solved yet.");
+ continue;
+ }
+ if (Rows[i].children[0].children[0].classList.contains("status_y")) {
+ console.log("Ignoring problem " + PID + " as it has already been solved in this contest.");
+ continue;
+ }
+ console.log("Submitting problem " + PID);
+ Submitted = true;
+ AutoCheatButton.innerHTML = "正在提交 " + PID;
+ let SID = 0;
+ await fetch("https://www.xmoj.tech/status.php?problem_id=" + PID + "&jresult=4")
+ .then((Result) => {
+ return Result.text();
+ }).then((Result) => {
+ let ParsedDocument = new DOMParser().parseFromString(Result, "text/html");
+ SID = ParsedDocument.querySelector("#result-tab > tbody > tr:nth-child(1) > td:nth-child(2)").innerText;
+ });
+ await new Promise(r => setTimeout(r, 500));
+ let Code = "";
+ await fetch("https://www.xmoj.tech/getsource.php?id=" + SID)
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ Code = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
+ });
+ await new Promise(r => setTimeout(r, 500));
+ await fetch("https://www.xmoj.tech/submit.php", {
+ "headers": {
+ "content-type": "application/x-www-form-urlencoded"
+ },
+ "referrer": "https://www.xmoj.tech/submitpage.php?id=" + PID,
+ "method": "POST",
+ "body": "cid=" + CID + "&pid=" + i + "&" + "language=1&" + "source=" + encodeURIComponent(Code) + "&" + "enable_O2=on"
+ });
+ await new Promise(r => setTimeout(r, 500));
+ }
+ if (!Submitted) {
+ AutoCheatButton.innerHTML = "没有可以提交的题目!";
+ await new Promise(r => setTimeout(r, 1000));
+ }
+ AutoCheatButton.disabled = false;
+ if (Submitted) location.reload(); else AutoCheatButton.innerHTML = "自动提交当年代码";
+ });
+ document.addEventListener("keydown", (Event) => {
+ if (Event.code === 'Enter' && Event.ctrlKey) {
+ AutoCheatButton.click();
+ }
+ });
+ }
+ if (UtilityEnabled("OpenAllProblem")) {
+ let OpenAllButton = document.createElement("button");
+ OpenAllButton.className = "btn btn-outline-secondary";
+ OpenAllButton.innerText = "打开全部题目";
+ OpenAllButton.style.marginRight = "5px";
+ CheatDiv.appendChild(OpenAllButton);
+ OpenAllButton.addEventListener("click", () => {
+ let Rows = document.querySelector("#problemset > tbody").rows;
+ for (let i = 0; i < Rows.length; i++) {
open(Rows[i].children[2].children[0].href, "_blank");
}
- }
- });
+ });
+ let OpenUnsolvedButton = document.createElement("button");
+ OpenUnsolvedButton.className = "btn btn-outline-secondary";
+ OpenUnsolvedButton.innerText = "打开未解决题目";
+ CheatDiv.appendChild(OpenUnsolvedButton);
+ OpenUnsolvedButton.addEventListener("click", () => {
+ let Rows = document.querySelector("#problemset > tbody").rows;
+ for (let i = 0; i < Rows.length; i++) {
+ if (!Rows[i].children[0].children[0].classList.contains("status_y")) {
+ open(Rows[i].children[2].children[0].href, "_blank");
+ }
+ }
+ });
+ }
+ localStorage.setItem("UserScript-Contest-" + SearchParams.get("cid") + "-ProblemCount", document.querySelector("#problemset > tbody").rows.length);
}
- localStorage.setItem("UserScript-Contest-" + SearchParams.get("cid") + "-ProblemCount", document.querySelector("#problemset > tbody").rows.length);
}
- }
- } else if (location.pathname == "/contestrank-oi.php") {
- if (document.querySelector("#rank") == null) {
- document.querySelector("body > div > div.mt-3").innerHTML = "
比赛排名
";
- }
- if (SearchParams.get("ByUserScript") == null) {
+ } else if (location.pathname == "/contestrank-oi.php") {
+ if (document.querySelector("#rank") == null) {
+ document.querySelector("body > div > div.mt-3").innerHTML = "比赛排名
";
+ }
+ if (SearchParams.get("ByUserScript") == null) {
+ if (document.querySelector("body > div > div.mt-3 > center > h3").innerText == "比赛排名") {
+ document.querySelector("#rank").innerText = "比赛暂时还没有排名";
+ } else {
+ document.querySelector("body > div > div.mt-3 > center > h3").innerText = document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(document.querySelector("body > div > div.mt-3 > center > h3").innerText.indexOf(" -- ") + 4) + "(OI排名)";
+ document.querySelector("#rank > thead > tr > :nth-child(1)").innerText = "排名";
+ document.querySelector("#rank > thead > tr > :nth-child(2)").innerText = "用户";
+ document.querySelector("#rank > thead > tr > :nth-child(3)").innerText = "昵称";
+ document.querySelector("#rank > thead > tr > :nth-child(4)").innerText = "AC数";
+ document.querySelector("#rank > thead > tr > :nth-child(5)").innerText = "得分";
+ let RefreshOIRank = async () => {
+ await fetch(location.href)
+ .then((Response) => {
+ return Response.text()
+ })
+ .then(async (Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ TidyTable(ParsedDocument.getElementById("rank"));
+ let Temp = ParsedDocument.getElementById("rank").rows;
+ for (var i = 1; i < Temp.length; i++) {
+ let MetalCell = Temp[i].cells[0];
+ let Metal = document.createElement("span");
+ Metal.innerText = MetalCell.innerText;
+ Metal.className = "badge text-bg-primary";
+ MetalCell.innerText = "";
+ MetalCell.appendChild(Metal);
+ GetUsernameHTML(Temp[i].cells[1], Temp[i].cells[1].innerText);
+ Temp[i].cells[2].innerHTML = Temp[i].cells[2].innerText;
+ Temp[i].cells[3].innerHTML = Temp[i].cells[3].innerText;
+ for (let j = 5; j < Temp[i].cells.length; j++) {
+ let InnerText = Temp[i].cells[j].innerText;
+ let BackgroundColor = Temp[i].cells[j].style.backgroundColor;
+ let Red = BackgroundColor.substring(4, BackgroundColor.indexOf(","));
+ let Green = BackgroundColor.substring(BackgroundColor.indexOf(",") + 2, BackgroundColor.lastIndexOf(","));
+ let Blue = BackgroundColor.substring(BackgroundColor.lastIndexOf(",") + 2, BackgroundColor.lastIndexOf(")"));
+ let NoData = (Red == 238 && Green == 238 && Blue == 238);
+ let FirstBlood = (Red == 170 && Green == 170 && Blue == 255);
+ let Solved = (Green == 255);
+ let ErrorCount = "";
+ if (Solved) {
+ ErrorCount = (Blue == 170 ? 5 : (Blue - 51) / 32);
+ } else {
+ ErrorCount = (Blue == 22 ? 15 : (170 - Blue) / 10);
+ }
+ if (NoData) {
+ BackgroundColor = "";
+ } else if (FirstBlood) {
+ BackgroundColor = "rgb(127, 127, 255)";
+ } else if (Solved) {
+ BackgroundColor = "rgb(0, 255, 0, " + Math.max(1 / 10 * (10 - ErrorCount), 0.2) + ")";
+ if (ErrorCount != 0) {
+ InnerText += " (" + (ErrorCount == 5 ? "4+" : ErrorCount) + ")";
+ }
+ } else {
+ BackgroundColor = "rgba(255, 0, 0, " + Math.min(ErrorCount / 10 + 0.2, 1) + ")";
+ if (ErrorCount != 0) {
+ InnerText += " (" + (ErrorCount == 15 ? "14+" : ErrorCount) + ")";
+ }
+ }
+ Temp[i].cells[j].innerHTML = InnerText;
+ Temp[i].cells[j].style.backgroundColor = BackgroundColor;
+ Temp[i].cells[j].style.color = (UtilityEnabled("DarkMode") ? "white" : "black");
+ }
+ }
+ document.querySelector("#rank > tbody").innerHTML = ParsedDocument.querySelector("#rank > tbody").innerHTML;
+ });
+ };
+ RefreshOIRank();
+ document.title = document.querySelector("body > div.container > div > center > h3").innerText;
+ if (UtilityEnabled("AutoRefresh")) {
+ addEventListener("focus", RefreshOIRank);
+ }
+ }
+ }
+ Style.innerHTML += "td {";
+ Style.innerHTML += " white-space: nowrap;";
+ Style.innerHTML += "}";
+ document.querySelector("body > div.container > div > center").style.paddingBottom = "10px";
+ document.querySelector("body > div.container > div > center > a").style.display = "none";
+ document.title = document.querySelector("body > div.container > div > center > h3").innerText;
+ } else if (location.pathname == "/contestrank-correct.php") {
+ if (document.querySelector("#rank") == null) {
+ document.querySelector("body > div > div.mt-3").innerHTML = "比赛排名
";
+ }
if (document.querySelector("body > div > div.mt-3 > center > h3").innerText == "比赛排名") {
document.querySelector("#rank").innerText = "比赛暂时还没有排名";
} else {
- document.querySelector("body > div > div.mt-3 > center > h3").innerText = document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(document.querySelector("body > div > div.mt-3 > center > h3").innerText.indexOf(" -- ") + 4) + "(OI排名)";
+ if (UtilityEnabled("ResetType")) {
+ document.querySelector("body > div > div.mt-3 > center > h3").innerText = document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(document.querySelector("body > div > div.mt-3 > center > h3").innerText.indexOf(" -- ") + 4) + "(订正排名)";
+ document.querySelector("body > div > div.mt-3 > center > a").remove();
+ }
document.querySelector("#rank > thead > tr > :nth-child(1)").innerText = "排名";
document.querySelector("#rank > thead > tr > :nth-child(2)").innerText = "用户";
document.querySelector("#rank > thead > tr > :nth-child(3)").innerText = "昵称";
document.querySelector("#rank > thead > tr > :nth-child(4)").innerText = "AC数";
document.querySelector("#rank > thead > tr > :nth-child(5)").innerText = "得分";
- let RefreshOIRank = async () => {
+ let RefreshCorrectRank = async () => {
await fetch(location.href)
.then((Response) => {
return Response.text()
@@ -2252,127 +2403,41 @@ async function main() {
let Solved = (Green == 255);
let ErrorCount = "";
if (Solved) {
- ErrorCount = (Blue == 170 ? 5 : (Blue - 51) / 32);
+ ErrorCount = (Blue == 170 ? "4+" : (Blue - 51) / 32);
} else {
- ErrorCount = (Blue == 22 ? 15 : (170 - Blue) / 10);
+ ErrorCount = (Blue == 22 ? "14+" : (170 - Blue) / 10);
}
if (NoData) {
BackgroundColor = "";
} else if (FirstBlood) {
- BackgroundColor = "rgb(127, 127, 255)";
+ BackgroundColor = "rgba(127, 127, 255, 0.5)";
} else if (Solved) {
- BackgroundColor = "rgb(0, 255, 0, " + Math.max(1 / 10 * (10 - ErrorCount), 0.2) + ")";
+ BackgroundColor = "rgba(0, 255, 0, 0.5)";
if (ErrorCount != 0) {
- InnerText += " (" + (ErrorCount == 5 ? "4+" : ErrorCount) + ")";
+ InnerText += " (" + ErrorCount + ")";
}
} else {
- BackgroundColor = "rgba(255, 0, 0, " + Math.min(ErrorCount / 10 + 0.2, 1) + ")";
+ BackgroundColor = "rgba(255, 0, 0, 0.5)";
if (ErrorCount != 0) {
- InnerText += " (" + (ErrorCount == 15 ? "14+" : ErrorCount) + ")";
+ InnerText += " (" + ErrorCount + ")";
}
}
Temp[i].cells[j].innerHTML = InnerText;
Temp[i].cells[j].style.backgroundColor = BackgroundColor;
- Temp[i].cells[j].style.color = (UtilityEnabled("DarkMode") ? "white" : "black");
}
}
document.querySelector("#rank > tbody").innerHTML = ParsedDocument.querySelector("#rank > tbody").innerHTML;
});
};
- RefreshOIRank();
+ RefreshCorrectRank();
document.title = document.querySelector("body > div.container > div > center > h3").innerText;
if (UtilityEnabled("AutoRefresh")) {
- addEventListener("focus", RefreshOIRank);
+ addEventListener("focus", RefreshCorrectRank);
}
}
- }
- Style.innerHTML += "td {";
- Style.innerHTML += " white-space: nowrap;";
- Style.innerHTML += "}";
- document.querySelector("body > div.container > div > center").style.paddingBottom = "10px";
- document.querySelector("body > div.container > div > center > a").style.display = "none";
- document.title = document.querySelector("body > div.container > div > center > h3").innerText;
- } else if (location.pathname == "/contestrank-correct.php") {
- if (document.querySelector("#rank") == null) {
- document.querySelector("body > div > div.mt-3").innerHTML = "比赛排名
";
- }
- if (document.querySelector("body > div > div.mt-3 > center > h3").innerText == "比赛排名") {
- document.querySelector("#rank").innerText = "比赛暂时还没有排名";
- } else {
- if (UtilityEnabled("ResetType")) {
- document.querySelector("body > div > div.mt-3 > center > h3").innerText = document.querySelector("body > div > div.mt-3 > center > h3").innerText.substring(document.querySelector("body > div > div.mt-3 > center > h3").innerText.indexOf(" -- ") + 4) + "(订正排名)";
- document.querySelector("body > div > div.mt-3 > center > a").remove();
- }
- document.querySelector("#rank > thead > tr > :nth-child(1)").innerText = "排名";
- document.querySelector("#rank > thead > tr > :nth-child(2)").innerText = "用户";
- document.querySelector("#rank > thead > tr > :nth-child(3)").innerText = "昵称";
- document.querySelector("#rank > thead > tr > :nth-child(4)").innerText = "AC数";
- document.querySelector("#rank > thead > tr > :nth-child(5)").innerText = "得分";
- let RefreshCorrectRank = async () => {
- await fetch(location.href)
- .then((Response) => {
- return Response.text()
- })
- .then(async (Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- TidyTable(ParsedDocument.getElementById("rank"));
- let Temp = ParsedDocument.getElementById("rank").rows;
- for (var i = 1; i < Temp.length; i++) {
- let MetalCell = Temp[i].cells[0];
- let Metal = document.createElement("span");
- Metal.innerText = MetalCell.innerText;
- Metal.className = "badge text-bg-primary";
- MetalCell.innerText = "";
- MetalCell.appendChild(Metal);
- GetUsernameHTML(Temp[i].cells[1], Temp[i].cells[1].innerText);
- Temp[i].cells[2].innerHTML = Temp[i].cells[2].innerText;
- Temp[i].cells[3].innerHTML = Temp[i].cells[3].innerText;
- for (let j = 5; j < Temp[i].cells.length; j++) {
- let InnerText = Temp[i].cells[j].innerText;
- let BackgroundColor = Temp[i].cells[j].style.backgroundColor;
- let Red = BackgroundColor.substring(4, BackgroundColor.indexOf(","));
- let Green = BackgroundColor.substring(BackgroundColor.indexOf(",") + 2, BackgroundColor.lastIndexOf(","));
- let Blue = BackgroundColor.substring(BackgroundColor.lastIndexOf(",") + 2, BackgroundColor.lastIndexOf(")"));
- let NoData = (Red == 238 && Green == 238 && Blue == 238);
- let FirstBlood = (Red == 170 && Green == 170 && Blue == 255);
- let Solved = (Green == 255);
- let ErrorCount = "";
- if (Solved) {
- ErrorCount = (Blue == 170 ? "4+" : (Blue - 51) / 32);
- } else {
- ErrorCount = (Blue == 22 ? "14+" : (170 - Blue) / 10);
- }
- if (NoData) {
- BackgroundColor = "";
- } else if (FirstBlood) {
- BackgroundColor = "rgba(127, 127, 255, 0.5)";
- } else if (Solved) {
- BackgroundColor = "rgba(0, 255, 0, 0.5)";
- if (ErrorCount != 0) {
- InnerText += " (" + ErrorCount + ")";
- }
- } else {
- BackgroundColor = "rgba(255, 0, 0, 0.5)";
- if (ErrorCount != 0) {
- InnerText += " (" + ErrorCount + ")";
- }
- }
- Temp[i].cells[j].innerHTML = InnerText;
- Temp[i].cells[j].style.backgroundColor = BackgroundColor;
- }
- }
- document.querySelector("#rank > tbody").innerHTML = ParsedDocument.querySelector("#rank > tbody").innerHTML;
- });
- };
- RefreshCorrectRank();
- document.title = document.querySelector("body > div.container > div > center > h3").innerText;
- if (UtilityEnabled("AutoRefresh")) {
- addEventListener("focus", RefreshCorrectRank);
- }
- }
- } else if (location.pathname == "/submitpage.php") {
- document.title = "提交代码: " + (SearchParams.get("id") != null ? "题目" + Number(SearchParams.get("id")) : "比赛" + Number(SearchParams.get("cid")));
- document.querySelector("body > div > div.mt-3").innerHTML = `` + `提交代码
` + (SearchParams.get("id") != null ? `题目${Number(SearchParams.get("id"))}` : `比赛${Number(SearchParams.get("cid")) + ` 题目` + String.fromCharCode(65 + parseInt(SearchParams.get("pid")))}`) + `
+ } else if (location.pathname == "/submitpage.php") {
+ document.title = "提交代码: " + (SearchParams.get("id") != null ? "题目" + Number(SearchParams.get("id")) : "比赛" + Number(SearchParams.get("cid")));
+ document.querySelector("body > div > div.mt-3").innerHTML = `` + `提交代码
` + (SearchParams.get("id") != null ? `题目${Number(SearchParams.get("id"))}` : `比赛${Number(SearchParams.get("cid")) + ` 题目` + String.fromCharCode(65 + parseInt(SearchParams.get("pid")))}`) + `
@@ -2383,284 +2448,284 @@ async function main() {
`;
- if (UtilityEnabled("AutoO2")) {
- document.querySelector("#enable_O2").checked = true;
- }
- let CodeMirrorElement;
- (() => {
- CodeMirrorElement = CodeMirror.fromTextArea(document.querySelector("#CodeInput"), {
- lineNumbers: true,
- matchBrackets: true,
- mode: "text/x-c++src",
- indentUnit: 4,
- indentWithTabs: true,
- enterMode: "keep",
- tabMode: "shift",
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
- extraKeys: {
- "Ctrl-Space": "autocomplete", "Ctrl-Enter": function (instance) {
- Submit.click();
+ if (UtilityEnabled("AutoO2")) {
+ document.querySelector("#enable_O2").checked = true;
+ }
+ let CodeMirrorElement;
+ (() => {
+ CodeMirrorElement = CodeMirror.fromTextArea(document.querySelector("#CodeInput"), {
+ lineNumbers: true,
+ matchBrackets: true,
+ mode: "text/x-c++src",
+ indentUnit: 4,
+ indentWithTabs: true,
+ enterMode: "keep",
+ tabMode: "shift",
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
+ extraKeys: {
+ "Ctrl-Space": "autocomplete", "Ctrl-Enter": function (instance) {
+ Submit.click();
+ }
}
- }
- })
- })();
- CodeMirrorElement.setSize("100%", "auto");
- CodeMirrorElement.getWrapperElement().style.border = "1px solid #ddd";
-
- if (SearchParams.get("sid") !== null) {
- await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("sid"))
- .then((Response) => {
- return Response.text()
})
- .then((Response) => {
- CodeMirrorElement.setValue(Response.substring(0, Response.indexOf("/**************************************************************")).trim());
- });
- }
+ })();
+ CodeMirrorElement.setSize("100%", "auto");
+ CodeMirrorElement.getWrapperElement().style.border = "1px solid #ddd";
+
+ if (SearchParams.get("sid") !== null) {
+ await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("sid"))
+ .then((Response) => {
+ return Response.text()
+ })
+ .then((Response) => {
+ CodeMirrorElement.setValue(Response.substring(0, Response.indexOf("/**************************************************************")).trim());
+ });
+ }
+
+ PassCheck.addEventListener("click", async () => {
+ ErrorElement.style.display = "none";
+ document.querySelector("#Submit").disabled = true;
+ document.querySelector("#Submit").value = "正在提交...";
+ let o2Switch = "&enable_O2=on";
+ if (!document.querySelector("#enable_O2").checked) o2Switch = "";
+ await fetch("https://www.xmoj.tech/submit.php", {
+ "headers": {
+ "content-type": "application/x-www-form-urlencoded"
+ },
+ "referrer": location.href,
+ "method": "POST",
+ "body": (SearchParams.get("id") != null ? "id=" + SearchParams.get("id") : "cid=" + SearchParams.get("cid") + "&pid=" + SearchParams.get("pid")) + "&language=1&" + "source=" + encodeURIComponent(CodeMirrorElement.getValue()) + o2Switch
+ }).then(async (Response) => {
+ if (Response.redirected) {
+ location.href = Response.url;
+ } else {
+ const text = await Response.text();
+ if (text.indexOf("没有这个比赛!") !== -1 && new URL(location.href).searchParams.get("pid") !== null) {
+ // Credit: https://github.com/boomzero/quicksubmit/blob/main/index.ts
+ // Also licensed under GPL-3.0
+ const contestReq = await fetch("https://www.xmoj.tech/contest.php?cid=" + new URL(location.href).searchParams.get("cid"));
+ const res = await contestReq.text();
+ if (
+ contestReq.status !== 200 ||
+ res.indexOf("比赛尚未开始或私有,不能查看题目。") !== -1
+ ) {
+ console.error(`Failed to get contest page!`);
+ return;
+ }
+ const parser = new DOMParser();
+ const dom = parser.parseFromString(res, "text/html");
+ const contestProblems = [];
+ const rows = (dom.querySelector(
+ "#problemset > tbody",
+ )).rows;
+ for (let i = 0; i < rows.length; i++) {
+ contestProblems.push(
+ rows[i].children[1].textContent.substring(2, 6).replaceAll(
+ "\t",
+ "",
+ ),
+ );
+ }
+ rPID = contestProblems[new URL(location.href).searchParams.get("pid")];
+ if (UtilityEnabled("DebugMode")) {
+ console.log("Contest Problems:", contestProblems);
+ console.log("Real PID:", rPID);
+ }
+ ErrorElement.style.display = "block";
+ ErrorMessage.style.color = "red";
+ ErrorMessage.innerText = "比赛已结束, 正在尝试像题目 " + rPID + " 提交";
+ console.log("比赛已结束, 正在尝试像题目 " + rPID + " 提交");
+ let o2Switch = "&enable_O2=on";
+ if (!document.querySelector("#enable_O2").checked) o2Switch = "";
+ await fetch("https://www.xmoj.tech/submit.php", {
+ "headers": {
+ "content-type": "application/x-www-form-urlencoded"
+ },
+ "referrer": location.href,
+ "method": "POST",
+ "body": "id=" + rPID + "&language=1&" + "source=" + encodeURIComponent(CodeMirrorElement.getValue()) + o2Switch
+ }).then(async (Response) => {
+ if (Response.redirected) {
+ location.href = Response.url;
+ }
+ console.log(await Response.text());
+ });
- PassCheck.addEventListener("click", async () => {
- ErrorElement.style.display = "none";
- document.querySelector("#Submit").disabled = true;
- document.querySelector("#Submit").value = "正在提交...";
- let o2Switch = "&enable_O2=on";
- if (!document.querySelector("#enable_O2").checked) o2Switch = "";
- await fetch("https://www.xmoj.tech/submit.php", {
- "headers": {
- "content-type": "application/x-www-form-urlencoded"
- },
- "referrer": location.href,
- "method": "POST",
- "body": (SearchParams.get("id") != null ? "id=" + SearchParams.get("id") : "cid=" + SearchParams.get("cid") + "&pid=" + SearchParams.get("pid")) + "&language=1&" + "source=" + encodeURIComponent(CodeMirrorElement.getValue()) + o2Switch
- }).then(async (Response) => {
- if (Response.redirected) {
- location.href = Response.url;
- } else {
- const text = await Response.text();
- if (text.indexOf("没有这个比赛!") !== -1 && new URL(location.href).searchParams.get("pid") !== null) {
- // Credit: https://github.com/boomzero/quicksubmit/blob/main/index.ts
- // Also licensed under GPL-3.0
- const contestReq = await fetch("https://www.xmoj.tech/contest.php?cid=" + new URL(location.href).searchParams.get("cid"));
- const res = await contestReq.text();
- if (
- contestReq.status !== 200 ||
- res.indexOf("比赛尚未开始或私有,不能查看题目。") !== -1
- ) {
- console.error(`Failed to get contest page!`);
- return;
- }
- const parser = new DOMParser();
- const dom = parser.parseFromString(res, "text/html");
- const contestProblems = [];
- const rows = (dom.querySelector(
- "#problemset > tbody",
- )).rows;
- for (let i = 0; i < rows.length; i++) {
- contestProblems.push(
- rows[i].children[1].textContent.substring(2, 6).replaceAll(
- "\t",
- "",
- ),
- );
}
- rPID = contestProblems[new URL(location.href).searchParams.get("pid")];
if (UtilityEnabled("DebugMode")) {
- console.log("Contest Problems:", contestProblems);
- console.log("Real PID:", rPID);
+ console.log("Submission failed! Response:", text);
}
ErrorElement.style.display = "block";
ErrorMessage.style.color = "red";
- ErrorMessage.innerText = "比赛已结束, 正在尝试像题目 " + rPID + " 提交";
- console.log("比赛已结束, 正在尝试像题目 " + rPID + " 提交");
- let o2Switch = "&enable_O2=on";
- if (!document.querySelector("#enable_O2").checked) o2Switch = "";
- await fetch("https://www.xmoj.tech/submit.php", {
- "headers": {
- "content-type": "application/x-www-form-urlencoded"
- },
- "referrer": location.href,
- "method": "POST",
- "body": "id=" + rPID + "&language=1&" + "source=" + encodeURIComponent(CodeMirrorElement.getValue()) + o2Switch
- }).then(async (Response) => {
- if (Response.redirected) {
- location.href = Response.url;
- }
- console.log(await Response.text());
- });
-
- }
- if (UtilityEnabled("DebugMode")) {
- console.log("Submission failed! Response:", text);
+ ErrorMessage.innerText = "提交失败!请关闭脚本后重试!";
+ Submit.disabled = false;
+ Submit.value = "提交";
}
- ErrorElement.style.display = "block";
- ErrorMessage.style.color = "red";
- ErrorMessage.innerText = "提交失败!请关闭脚本后重试!";
- Submit.disabled = false;
- Submit.value = "提交";
- }
- })
- });
+ })
+ });
- Submit.addEventListener("click", async () => {
- PassCheck.style.display = "none";
- ErrorElement.style.display = "none";
- document.querySelector("#Submit").disabled = true;
- document.querySelector("#Submit").value = "正在检查...";
- let Source = CodeMirrorElement.getValue();
- let PID = 0;
- let IOFilename = "";
- if (SearchParams.get("cid") != null && SearchParams.get("pid") != null) {
- PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID")
- } else {
- PID = SearchParams.get("id");
- }
- IOFilename = localStorage.getItem("UserScript-Problem-" + PID + "-IOFilename");
- if (UtilityEnabled("IOFile") && IOFilename != null) {
- if (Source.indexOf(IOFilename) == -1) {
- PassCheck.style.display = "";
- ErrorElement.style.display = "block";
- if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
- ErrorMessage.innerText = "此题输入输出文件名为" + IOFilename + ",请检查是否填错";
+ Submit.addEventListener("click", async () => {
+ PassCheck.style.display = "none";
+ ErrorElement.style.display = "none";
+ document.querySelector("#Submit").disabled = true;
+ document.querySelector("#Submit").value = "正在检查...";
+ let Source = CodeMirrorElement.getValue();
+ let PID = 0;
+ let IOFilename = "";
+ if (SearchParams.get("cid") != null && SearchParams.get("pid") != null) {
+ PID = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-Problem-" + SearchParams.get("pid") + "-PID")
+ } else {
+ PID = SearchParams.get("id");
+ }
+ IOFilename = localStorage.getItem("UserScript-Problem-" + PID + "-IOFilename");
+ if (UtilityEnabled("IOFile") && IOFilename != null) {
+ if (Source.indexOf(IOFilename) == -1) {
+ PassCheck.style.display = "";
+ ErrorElement.style.display = "block";
+ if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
+ ErrorMessage.innerText = "此题输入输出文件名为" + IOFilename + ",请检查是否填错";
- let freopenText = document.createElement('small');
- if (UtilityEnabled("DarkMode")) freopenText.style.color = "white"; else freopenText.style.color = "black";
- freopenText.textContent = '\n您也可以复制freopen语句。\n';
- document.getElementById('ErrorMessage').appendChild(freopenText);
- let copyFreopenButton = document.createElement("button");
- copyFreopenButton.className = "btn btn-sm btn-outline-secondary copy-btn";
- copyFreopenButton.innerText = "复制代码";
- copyFreopenButton.style.marginLeft = "10px";
- copyFreopenButton.style.marginTop = "10px";
- copyFreopenButton.style.marginBottom = "10px";
- copyFreopenButton.type = "button";
- copyFreopenButton.addEventListener("click", () => {
- navigator.clipboard.writeText('\n freopen("' + IOFilename + '.in", "r", stdin);\n freopen("' + IOFilename + '.out", "w", stdout);');
- copyFreopenButton.innerText = "复制成功";
- setTimeout(() => {
- copyFreopenButton.innerText = "复制代码";
- }, 1500);
- });
- document.getElementById('ErrorMessage').appendChild(copyFreopenButton);
- let freopenCodeField = CodeMirror(document.getElementById('ErrorMessage'), {
- value: 'freopen("' + IOFilename + '.in", "r", stdin);\nfreopen("' + IOFilename + '.out", "w", stdout);',
- mode: 'text/x-c++src',
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
- readOnly: true,
- lineNumbers: true
- });
- freopenCodeField.setSize("100%", "auto");
- document.querySelector("#Submit").disabled = false;
- document.querySelector("#Submit").value = "提交";
- return false;
- } else if (RegExp("//.*freopen").test(Source)) {
+ let freopenText = document.createElement('small');
+ if (UtilityEnabled("DarkMode")) freopenText.style.color = "white"; else freopenText.style.color = "black";
+ freopenText.textContent = '\n您也可以复制freopen语句。\n';
+ document.getElementById('ErrorMessage').appendChild(freopenText);
+ let copyFreopenButton = document.createElement("button");
+ copyFreopenButton.className = "btn btn-sm btn-outline-secondary copy-btn";
+ copyFreopenButton.innerText = "复制代码";
+ copyFreopenButton.style.marginLeft = "10px";
+ copyFreopenButton.style.marginTop = "10px";
+ copyFreopenButton.style.marginBottom = "10px";
+ copyFreopenButton.type = "button";
+ copyFreopenButton.addEventListener("click", () => {
+ navigator.clipboard.writeText('\n freopen("' + IOFilename + '.in", "r", stdin);\n freopen("' + IOFilename + '.out", "w", stdout);');
+ copyFreopenButton.innerText = "复制成功";
+ setTimeout(() => {
+ copyFreopenButton.innerText = "复制代码";
+ }, 1500);
+ });
+ document.getElementById('ErrorMessage').appendChild(copyFreopenButton);
+ let freopenCodeField = CodeMirror(document.getElementById('ErrorMessage'), {
+ value: 'freopen("' + IOFilename + '.in", "r", stdin);\nfreopen("' + IOFilename + '.out", "w", stdout);',
+ mode: 'text/x-c++src',
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
+ readOnly: true,
+ lineNumbers: true
+ });
+ freopenCodeField.setSize("100%", "auto");
+ document.querySelector("#Submit").disabled = false;
+ document.querySelector("#Submit").value = "提交";
+ return false;
+ } else if (RegExp("//.*freopen").test(Source)) {
+ PassCheck.style.display = "";
+ ErrorElement.style.display = "block";
+ if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
+ ErrorMessage.innerText = "请不要注释freopen语句";
+ document.querySelector("#Submit").disabled = false;
+ document.querySelector("#Submit").value = "提交";
+ return false;
+ }
+ }
+ if (Source == "") {
PassCheck.style.display = "";
ErrorElement.style.display = "block";
if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
- ErrorMessage.innerText = "请不要注释freopen语句";
+ ErrorMessage.innerText = "源代码为空";
document.querySelector("#Submit").disabled = false;
document.querySelector("#Submit").value = "提交";
return false;
}
- }
- if (Source == "") {
- PassCheck.style.display = "";
- ErrorElement.style.display = "block";
- if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
- ErrorMessage.innerText = "源代码为空";
- document.querySelector("#Submit").disabled = false;
- document.querySelector("#Submit").value = "提交";
- return false;
- }
- if (UtilityEnabled("CompileError")) {
- let ResponseData = await new Promise((Resolve) => {
- GM_xmlhttpRequest({
- method: "POST", url: "https://cppinsights.io/api/v1/transform", headers: {
- "content-type": "application/json;charset=UTF-8"
- }, referrer: "https://cppinsights.io/", data: JSON.stringify({
- "insightsOptions": ["cpp14"], "code": Source
- }), onload: (Response) => {
- Resolve(Response);
- }
+ if (UtilityEnabled("CompileError")) {
+ let ResponseData = await new Promise((Resolve) => {
+ GM_xmlhttpRequest({
+ method: "POST", url: "https://cppinsights.io/api/v1/transform", headers: {
+ "content-type": "application/json;charset=UTF-8"
+ }, referrer: "https://cppinsights.io/", data: JSON.stringify({
+ "insightsOptions": ["cpp14"], "code": Source
+ }), onload: (Response) => {
+ Resolve(Response);
+ }
+ });
});
- });
- let Response = JSON.parse(ResponseData.responseText);
- if (Response.returncode) {
- PassCheck.style.display = "";
- ErrorElement.style.display = "block";
- if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
- ErrorMessage.innerText = "编译错误:\n" + Response.stderr.trim();
- document.querySelector("#Submit").disabled = false;
- document.querySelector("#Submit").value = "提交";
- return false;
+ let Response = JSON.parse(ResponseData.responseText);
+ if (Response.returncode) {
+ PassCheck.style.display = "";
+ ErrorElement.style.display = "block";
+ if (UtilityEnabled("DarkMode")) ErrorMessage.style.color = "yellow"; else ErrorMessage.style.color = "red";
+ ErrorMessage.innerText = "编译错误:\n" + Response.stderr.trim();
+ document.querySelector("#Submit").disabled = false;
+ document.querySelector("#Submit").value = "提交";
+ return false;
+ } else {
+ PassCheck.click();
+ }
} else {
PassCheck.click();
}
- } else {
- PassCheck.click();
- }
- });
- } else if (location.pathname == "/modifypage.php") {
- if (SearchParams.get("ByUserScript") != null) {
- document.title = "XMOJ-Script 更新日志";
- document.querySelector("body > div > div.mt-3").innerHTML = "";
- await fetch(ServerURL + "/Update.json", {cache: "no-cache"})
- .then((Response) => {
- return Response.json();
- })
- .then((Response) => {
- for (let i = Object.keys(Response.UpdateHistory).length - 1; i >= 0; i--) {
- let Version = Object.keys(Response.UpdateHistory)[i];
- let Data = Response.UpdateHistory[Version];
- let UpdateDataCard = document.createElement("div");
- document.querySelector("body > div > div.mt-3").appendChild(UpdateDataCard);
- UpdateDataCard.className = "card mb-3";
- if (Data.Prerelease) UpdateDataCard.classList.add("text-secondary");
- let UpdateDataCardBody = document.createElement("div");
- UpdateDataCard.appendChild(UpdateDataCardBody);
- UpdateDataCardBody.className = "card-body";
- let UpdateDataCardTitle = document.createElement("h5");
- UpdateDataCardBody.appendChild(UpdateDataCardTitle);
- UpdateDataCardTitle.className = "card-title";
- UpdateDataCardTitle.innerText = Version;
- if (Data.Prerelease) {
- UpdateDataCardTitle.innerHTML += "(预览版)";
- }
- let UpdateDataCardSubtitle = document.createElement("h6");
- UpdateDataCardBody.appendChild(UpdateDataCardSubtitle);
- UpdateDataCardSubtitle.className = "card-subtitle mb-2 text-muted";
- UpdateDataCardSubtitle.innerHTML = GetRelativeTime(Data.UpdateDate);
- let UpdateDataCardText = document.createElement("p");
- UpdateDataCardBody.appendChild(UpdateDataCardText);
- UpdateDataCardText.className = "card-text";
- //release notes
- if (Data.Notes != undefined) {
- UpdateDataCardText.innerHTML = Data.Notes;
- }
- let UpdateDataCardList = document.createElement("ul");
- UpdateDataCardText.appendChild(UpdateDataCardList);
- UpdateDataCardList.className = "list-group list-group-flush";
- for (let j = 0; j < Data.UpdateContents.length; j++) {
- let UpdateDataCardListItem = document.createElement("li");
- UpdateDataCardList.appendChild(UpdateDataCardListItem);
- UpdateDataCardListItem.className = "list-group-item";
- UpdateDataCardListItem.innerHTML = "(
" + "#" + Data.UpdateContents[j].PR + ") " + Data.UpdateContents[j].Description;
+ });
+ } else if (location.pathname == "/modifypage.php") {
+ if (SearchParams.get("ByUserScript") != null) {
+ document.title = "XMOJ-Script 更新日志";
+ document.querySelector("body > div > div.mt-3").innerHTML = "";
+ await fetch(ServerURL + "/Update.json", {cache: "no-cache"})
+ .then((Response) => {
+ return Response.json();
+ })
+ .then((Response) => {
+ for (let i = Object.keys(Response.UpdateHistory).length - 1; i >= 0; i--) {
+ let Version = Object.keys(Response.UpdateHistory)[i];
+ let Data = Response.UpdateHistory[Version];
+ let UpdateDataCard = document.createElement("div");
+ document.querySelector("body > div > div.mt-3").appendChild(UpdateDataCard);
+ UpdateDataCard.className = "card mb-3";
+ if (Data.Prerelease) UpdateDataCard.classList.add("text-secondary");
+ let UpdateDataCardBody = document.createElement("div");
+ UpdateDataCard.appendChild(UpdateDataCardBody);
+ UpdateDataCardBody.className = "card-body";
+ let UpdateDataCardTitle = document.createElement("h5");
+ UpdateDataCardBody.appendChild(UpdateDataCardTitle);
+ UpdateDataCardTitle.className = "card-title";
+ UpdateDataCardTitle.innerText = Version;
+ if (Data.Prerelease) {
+ UpdateDataCardTitle.innerHTML += "(预览版)";
+ }
+ let UpdateDataCardSubtitle = document.createElement("h6");
+ UpdateDataCardBody.appendChild(UpdateDataCardSubtitle);
+ UpdateDataCardSubtitle.className = "card-subtitle mb-2 text-muted";
+ UpdateDataCardSubtitle.innerHTML = GetRelativeTime(Data.UpdateDate);
+ let UpdateDataCardText = document.createElement("p");
+ UpdateDataCardBody.appendChild(UpdateDataCardText);
+ UpdateDataCardText.className = "card-text";
+ //release notes
+ if (Data.Notes != undefined) {
+ UpdateDataCardText.innerHTML = Data.Notes;
+ }
+ let UpdateDataCardList = document.createElement("ul");
+ UpdateDataCardText.appendChild(UpdateDataCardList);
+ UpdateDataCardList.className = "list-group list-group-flush";
+ for (let j = 0; j < Data.UpdateContents.length; j++) {
+ let UpdateDataCardListItem = document.createElement("li");
+ UpdateDataCardList.appendChild(UpdateDataCardListItem);
+ UpdateDataCardListItem.className = "list-group-item";
+ UpdateDataCardListItem.innerHTML = "(
" + "#" + Data.UpdateContents[j].PR + ") " + Data.UpdateContents[j].Description;
+ }
+ let UpdateDataCardLink = document.createElement("a");
+ UpdateDataCardBody.appendChild(UpdateDataCardLink);
+ UpdateDataCardLink.className = "card-link";
+ UpdateDataCardLink.href = "https://github.com/XMOJ-Script-dev/XMOJ-Script/releases/tag/" + Version;
+ UpdateDataCardLink.target = "_blank";
+ UpdateDataCardLink.innerText = "查看该版本";
}
- let UpdateDataCardLink = document.createElement("a");
- UpdateDataCardBody.appendChild(UpdateDataCardLink);
- UpdateDataCardLink.className = "card-link";
- UpdateDataCardLink.href = "https://github.com/XMOJ-Script-dev/XMOJ-Script/releases/tag/" + Version;
- UpdateDataCardLink.target = "_blank";
- UpdateDataCardLink.innerText = "查看该版本";
- }
- });
- } else {
- document.title = "修改账号";
- let Nickname = document.getElementsByName("nick")[0].value;
- let School = document.getElementsByName("school")[0].value;
- let EmailAddress = document.getElementsByName("email")[0].value;
- let CodeforcesAccount = document.getElementsByName("acc_cf")[0].value;
- let AtcoderAccount = document.getElementsByName("acc_atc")[0].value;
- let USACOAccount = document.getElementsByName("acc_usaco")[0].value;
- let LuoguAccount = document.getElementsByName("acc_luogu")[0].value;
- document.querySelector("body > div > div").innerHTML = `
+ });
+ } else {
+ document.title = "修改账号";
+ let Nickname = document.getElementsByName("nick")[0].value;
+ let School = document.getElementsByName("school")[0].value;
+ let EmailAddress = document.getElementsByName("email")[0].value;
+ let CodeforcesAccount = document.getElementsByName("acc_cf")[0].value;
+ let AtcoderAccount = document.getElementsByName("acc_atc")[0].value;
+ let USACOAccount = document.getElementsByName("acc_usaco")[0].value;
+ let LuoguAccount = document.getElementsByName("acc_luogu")[0].value;
+ document.querySelector("body > div > div").innerHTML = `
@@ -2735,215 +2800,241 @@ async function main() {
修改成功
`;
- document.getElementById("Nickname").value = Nickname;
- document.getElementById("School").value = School;
- document.getElementById("EmailAddress").value = EmailAddress;
- document.getElementById("CodeforcesAccount").value = CodeforcesAccount;
- document.getElementById("AtcoderAccount").value = AtcoderAccount;
- document.getElementById("USACOAccount").value = USACOAccount;
- document.getElementById("LuoguAccount").value = LuoguAccount;
- RequestAPI("GetBadge", {
- "UserID": String(CurrentUsername)
- }, (Response) => {
- if (Response.Success) {
- BadgeRow.style.display = "";
- BadgeContent.value = Response.Data.Content;
- BadgeBackgroundColor.value = Response.Data.BackgroundColor;
- BadgeColor.value = Response.Data.Color;
- let Temp = [];
- for (let i = 0; i < localStorage.length; i++) {
- if (localStorage.key(i).startsWith("UserScript-User-" + CurrentUsername + "-Badge-")) {
- Temp.push(localStorage.key(i));
+ document.getElementById("Nickname").value = Nickname;
+ document.getElementById("School").value = School;
+ document.getElementById("EmailAddress").value = EmailAddress;
+ document.getElementById("CodeforcesAccount").value = CodeforcesAccount;
+ document.getElementById("AtcoderAccount").value = AtcoderAccount;
+ document.getElementById("USACOAccount").value = USACOAccount;
+ document.getElementById("LuoguAccount").value = LuoguAccount;
+ RequestAPI("GetBadge", {
+ "UserID": String(CurrentUsername)
+ }, (Response) => {
+ if (Response.Success) {
+ BadgeRow.style.display = "";
+ BadgeContent.value = Response.Data.Content;
+ BadgeBackgroundColor.value = Response.Data.BackgroundColor;
+ BadgeColor.value = Response.Data.Color;
+ let Temp = [];
+ for (let i = 0; i < localStorage.length; i++) {
+ if (localStorage.key(i).startsWith("UserScript-User-" + CurrentUsername + "-Badge-")) {
+ Temp.push(localStorage.key(i));
+ }
}
- }
- for (let i = 0; i < Temp.length; i++) {
- localStorage.removeItem(Temp[i]);
- }
- }
- });
- ModifyInfo.addEventListener("click", async () => {
- ModifyInfo.disabled = true;
- ModifyInfo.querySelector("span").style.display = "";
- ErrorElement.style.display = "none";
- SuccessElement.style.display = "none";
- let BadgeContent = document.querySelector("#BadgeContent").value;
- let BadgeBackgroundColor = document.querySelector("#BadgeBackgroundColor").value;
- let BadgeColor = document.querySelector("#BadgeColor").value;
- await new Promise((Resolve) => {
- RequestAPI("EditBadge", {
- "UserID": String(CurrentUsername),
- "Content": String(BadgeContent),
- "BackgroundColor": String(BadgeBackgroundColor),
- "Color": String(BadgeColor)
- }, (Response) => {
- if (Response.Success) {
- Resolve();
- } else {
- ModifyInfo.disabled = false;
- ModifyInfo.querySelector("span").style.display = "none";
- ErrorElement.style.display = "block";
- ErrorElement.innerText = Response.Message;
+ for (let i = 0; i < Temp.length; i++) {
+ localStorage.removeItem(Temp[i]);
}
- });
- });
- let Nickname = document.querySelector("#Nickname").value;
- let OldPassword = document.querySelector("#OldPassword").value;
- let NewPassword = document.querySelector("#NewPassword").value;
- let NewPasswordAgain = document.querySelector("#NewPasswordAgain").value;
- let School = document.querySelector("#School").value;
- let EmailAddress = document.querySelector("#EmailAddress").value;
- let CodeforcesAccount = document.querySelector("#CodeforcesAccount").value;
- let AtcoderAccount = document.querySelector("#AtcoderAccount").value;
- let USACOAccount = document.querySelector("#USACOAccount").value;
- let LuoguAccount = document.querySelector("#LuoguAccount").value;
- await fetch("https://www.xmoj.tech/modify.php", {
- "headers": {
- "content-type": "application/x-www-form-urlencoded"
- },
- "referrer": location.href,
- "method": "POST",
- "body": "nick=" + encodeURIComponent(Nickname) + "&" + "opassword=" + encodeURIComponent(OldPassword) + "&" + "npassword=" + encodeURIComponent(NewPassword) + "&" + "rptpassword=" + encodeURIComponent(NewPasswordAgain) + "&" + "school=" + encodeURIComponent(School) + "&" + "email=" + encodeURIComponent(EmailAddress) + "&" + "acc_cf=" + encodeURIComponent(CodeforcesAccount) + "&" + "acc_atc=" + encodeURIComponent(AtcoderAccount) + "&" + "acc_usaco=" + encodeURIComponent(USACOAccount) + "&" + "acc_luogu=" + encodeURIComponent(LuoguAccount)
+ }
});
- ModifyInfo.disabled = false;
- ModifyInfo.querySelector("span").style.display = "none";
- SuccessElement.style.display = "block";
- });
- if (UtilityEnabled("ExportACCode")) {
- let ExportACCode = document.createElement("button");
- document.querySelector("body > div.container > div").appendChild(ExportACCode);
- ExportACCode.innerText = "导出AC代码";
- ExportACCode.className = "btn btn-outline-secondary";
- ExportACCode.addEventListener("click", () => {
- ExportACCode.disabled = true;
- ExportACCode.innerText = "正在导出...";
- let Request = new XMLHttpRequest();
- Request.addEventListener("readystatechange", () => {
- if (Request.readyState == 4) {
- if (Request.status == 200) {
- let Response = Request.responseText;
- let ACCode = Response.split("------------------------------------------------------\r\n");
- let ScriptElement = document.createElement("script");
- ScriptElement.src = "https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js";
- document.head.appendChild(ScriptElement);
- ScriptElement.onload = () => {
- var Zip = new JSZip();
- for (let i = 0; i < ACCode.length; i++) {
- let CurrentCode = ACCode[i];
- if (CurrentCode != "") {
- let CurrentQuestionID = CurrentCode.substring(7, 11);
- CurrentCode = CurrentCode.substring(14);
- CurrentCode = CurrentCode.replaceAll("\r", "");
- Zip.file(CurrentQuestionID + ".cpp", CurrentCode);
- }
- }
- ExportACCode.innerText = "正在生成压缩包……";
- Zip.generateAsync({type: "blob"})
- .then(function (Content) {
- saveAs(Content, "ACCodes.zip");
- ExportACCode.innerText = "AC代码导出成功";
- ExportACCode.disabled = false;
- setTimeout(() => {
- ExportACCode.innerText = "导出AC代码";
- }, 1000);
- });
- };
+ ModifyInfo.addEventListener("click", async () => {
+ ModifyInfo.disabled = true;
+ ModifyInfo.querySelector("span").style.display = "";
+ ErrorElement.style.display = "none";
+ SuccessElement.style.display = "none";
+ let BadgeContent = document.querySelector("#BadgeContent").value;
+ let BadgeBackgroundColor = document.querySelector("#BadgeBackgroundColor").value;
+ let BadgeColor = document.querySelector("#BadgeColor").value;
+ await new Promise((Resolve) => {
+ RequestAPI("EditBadge", {
+ "UserID": String(CurrentUsername),
+ "Content": String(BadgeContent),
+ "BackgroundColor": String(BadgeBackgroundColor),
+ "Color": String(BadgeColor)
+ }, (Response) => {
+ if (Response.Success) {
+ Resolve();
} else {
- ExportACCode.disabled = false;
- ExportACCode.innerText = "AC代码导出失败";
- setTimeout(() => {
- ExportACCode.innerText = "导出AC代码";
- }, 1000);
+ ModifyInfo.disabled = false;
+ ModifyInfo.querySelector("span").style.display = "none";
+ ErrorElement.style.display = "block";
+ ErrorElement.innerText = Response.Message;
}
- }
+ });
});
- Request.open("GET", "https://www.xmoj.tech/export_ac_code.php", true);
- Request.send();
+ let Nickname = document.querySelector("#Nickname").value;
+ let OldPassword = document.querySelector("#OldPassword").value;
+ let NewPassword = document.querySelector("#NewPassword").value;
+ let NewPasswordAgain = document.querySelector("#NewPasswordAgain").value;
+ let School = document.querySelector("#School").value;
+ let EmailAddress = document.querySelector("#EmailAddress").value;
+ let CodeforcesAccount = document.querySelector("#CodeforcesAccount").value;
+ let AtcoderAccount = document.querySelector("#AtcoderAccount").value;
+ let USACOAccount = document.querySelector("#USACOAccount").value;
+ let LuoguAccount = document.querySelector("#LuoguAccount").value;
+ await fetch("https://www.xmoj.tech/modify.php", {
+ "headers": {
+ "content-type": "application/x-www-form-urlencoded"
+ },
+ "referrer": location.href,
+ "method": "POST",
+ "body": "nick=" + encodeURIComponent(Nickname) + "&" + "opassword=" + encodeURIComponent(OldPassword) + "&" + "npassword=" + encodeURIComponent(NewPassword) + "&" + "rptpassword=" + encodeURIComponent(NewPasswordAgain) + "&" + "school=" + encodeURIComponent(School) + "&" + "email=" + encodeURIComponent(EmailAddress) + "&" + "acc_cf=" + encodeURIComponent(CodeforcesAccount) + "&" + "acc_atc=" + encodeURIComponent(AtcoderAccount) + "&" + "acc_usaco=" + encodeURIComponent(USACOAccount) + "&" + "acc_luogu=" + encodeURIComponent(LuoguAccount)
+ });
+ ModifyInfo.disabled = false;
+ ModifyInfo.querySelector("span").style.display = "none";
+ SuccessElement.style.display = "block";
});
- }
- }
- } else if (location.pathname == "/userinfo.php") {
- if (SearchParams.get("ByUserScript") === null) {
- if (UtilityEnabled("RemoveUseless")) {
- let Temp = document.getElementById("submission").childNodes;
- for (let i = 0; i < Temp.length; i++) {
- Temp[i].remove();
+ if (UtilityEnabled("ExportACCode")) {
+ let ExportACCode = document.createElement("button");
+ document.querySelector("body > div.container > div").appendChild(ExportACCode);
+ ExportACCode.innerText = "导出AC代码";
+ ExportACCode.className = "btn btn-outline-secondary";
+ ExportACCode.addEventListener("click", () => {
+ ExportACCode.disabled = true;
+ ExportACCode.innerText = "正在导出...";
+ let Request = new XMLHttpRequest();
+ Request.addEventListener("readystatechange", () => {
+ if (Request.readyState == 4) {
+ if (Request.status == 200) {
+ let Response = Request.responseText;
+ let ACCode = Response.split("------------------------------------------------------\r\n");
+ let ScriptElement = document.createElement("script");
+ ScriptElement.src = "https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js";
+ document.head.appendChild(ScriptElement);
+ ScriptElement.onload = () => {
+ var Zip = new JSZip();
+ for (let i = 0; i < ACCode.length; i++) {
+ let CurrentCode = ACCode[i];
+ if (CurrentCode != "") {
+ let CurrentQuestionID = CurrentCode.substring(7, 11);
+ CurrentCode = CurrentCode.substring(14);
+ CurrentCode = CurrentCode.replaceAll("\r", "");
+ Zip.file(CurrentQuestionID + ".cpp", CurrentCode);
+ }
+ }
+ ExportACCode.innerText = "正在生成压缩包……";
+ Zip.generateAsync({type: "blob"})
+ .then(function (Content) {
+ saveAs(Content, "ACCodes.zip");
+ ExportACCode.innerText = "AC代码导出成功";
+ ExportACCode.disabled = false;
+ setTimeout(() => {
+ ExportACCode.innerText = "导出AC代码";
+ }, 1000);
+ });
+ };
+ } else {
+ ExportACCode.disabled = false;
+ ExportACCode.innerText = "AC代码导出失败";
+ setTimeout(() => {
+ ExportACCode.innerText = "导出AC代码";
+ }, 1000);
+ }
+ }
+ });
+ Request.open("GET", "https://www.xmoj.tech/export_ac_code.php", true);
+ Request.send();
+ });
}
}
- eval(document.querySelector("body > script:nth-child(5)").innerHTML);
- document.querySelector("#statics > tbody > tr:nth-child(1)").remove();
+ } else if (location.pathname == "/userinfo.php") {
+ if (SearchParams.get("ByUserScript") === null) {
+ if (UtilityEnabled("RemoveUseless")) {
+ let Temp = document.getElementById("submission").childNodes;
+ for (let i = 0; i < Temp.length; i++) {
+ Temp[i].remove();
+ }
+ }
+ eval(document.querySelector("body > script:nth-child(5)").innerHTML);
+ document.querySelector("#statics > tbody > tr:nth-child(1)").remove();
- let Temp = document.querySelector("#statics > tbody").children;
- for (let i = 0; i < Temp.length; i++) {
- if (Temp[i].children[0] != undefined) {
- if (Temp[i].children[0].innerText == "Statistics") {
- Temp[i].children[0].innerText = "统计";
- } else if (Temp[i].children[0].innerText == "Email:") {
- Temp[i].children[0].innerText = "电子邮箱";
+ let Temp = document.querySelector("#statics > tbody").children;
+ for (let i = 0; i < Temp.length; i++) {
+ if (Temp[i].children[0] != undefined) {
+ if (Temp[i].children[0].innerText == "Statistics") {
+ Temp[i].children[0].innerText = "统计";
+ } else if (Temp[i].children[0].innerText == "Email:") {
+ Temp[i].children[0].innerText = "电子邮箱";
+ }
+ Temp[i].children[1].removeAttribute("align");
}
- Temp[i].children[1].removeAttribute("align");
}
- }
- Temp = document.querySelector("#statics > tbody > tr:nth-child(1) > td:nth-child(3)").childNodes;
- let ACProblems = [];
- for (let i = 0; i < Temp.length; i++) {
- if (Temp[i].tagName == "A" && Temp[i].href.indexOf("problem.php?id=") != -1) {
- ACProblems.push(Number(Temp[i].innerText.trim()));
+ Temp = document.querySelector("#statics > tbody > tr:nth-child(1) > td:nth-child(3)").childNodes;
+ let ACProblems = [];
+ for (let i = 0; i < Temp.length; i++) {
+ if (Temp[i].tagName == "A" && Temp[i].href.indexOf("problem.php?id=") != -1) {
+ ACProblems.push(Number(Temp[i].innerText.trim()));
+ }
}
- }
- document.querySelector("#statics > tbody > tr:nth-child(1) > td:nth-child(3)").remove();
+ document.querySelector("#statics > tbody > tr:nth-child(1) > td:nth-child(3)").remove();
- let UserID, UserNick;
- [UserID, UserNick] = document.querySelector("#statics > caption").childNodes[0].data.trim().split("--");
- document.querySelector("#statics > caption").remove();
- document.title = "用户 " + UserID + " 的个人中心";
- let Row = document.createElement("div");
- Row.className = "row";
- let LeftDiv = document.createElement("div");
- LeftDiv.className = "col-md-5";
- Row.appendChild(LeftDiv);
+ let UserID, UserNick;
+ [UserID, UserNick] = document.querySelector("#statics > caption").childNodes[0].data.trim().split("--");
+ document.querySelector("#statics > caption").remove();
+ document.title = "用户 " + UserID + " 的个人中心";
+ let Row = document.createElement("div");
+ Row.className = "row";
+ let LeftDiv = document.createElement("div");
+ LeftDiv.className = "col-md-5";
+ Row.appendChild(LeftDiv);
- let LeftTopDiv = document.createElement("div");
- LeftTopDiv.className = "row mb-2";
- LeftDiv.appendChild(LeftTopDiv);
- let AvatarContainer = document.createElement("div");
- AvatarContainer.classList.add("col-auto");
- let AvatarElement = document.createElement("img");
- let UserEmailHash = (await GetUserInfo(UserID)).EmailHash;
- if (UserEmailHash == undefined) {
- AvatarElement.src = `https://cravatar.cn/avatar/00000000000000000000000000000000?d=mp&f=y`;
- } else {
- AvatarElement.src = `https://cravatar.cn/avatar/${UserEmailHash}?d=retro`;
- }
- AvatarElement.classList.add("rounded", "me-2");
- AvatarElement.style.height = "120px";
- AvatarContainer.appendChild(AvatarElement);
- LeftTopDiv.appendChild(AvatarContainer);
+ let LeftTopDiv = document.createElement("div");
+ LeftTopDiv.className = "row mb-2";
+ LeftDiv.appendChild(LeftTopDiv);
+ let AvatarContainer = document.createElement("div");
+ AvatarContainer.classList.add("col-auto");
+ let AvatarElement = document.createElement("img");
+ let UserEmailHash = (await GetUserInfo(UserID)).EmailHash;
+ if (UserEmailHash == undefined) {
+ AvatarElement.src = `https://cravatar.cn/avatar/00000000000000000000000000000000?d=mp&f=y`;
+ } else {
+ AvatarElement.src = `https://cravatar.cn/avatar/${UserEmailHash}?d=retro`;
+ }
+ AvatarElement.classList.add("rounded", "me-2");
+ AvatarElement.style.height = "120px";
+ AvatarContainer.appendChild(AvatarElement);
+ LeftTopDiv.appendChild(AvatarContainer);
- let UserInfoElement = document.createElement("div");
- UserInfoElement.classList.add("col-auto");
- UserInfoElement.style.lineHeight = "40px";
- UserInfoElement.innerHTML += "用户名:" + UserID + "
";
- UserInfoElement.innerHTML += "昵称:" + UserNick + "
";
- if (UtilityEnabled("Rating")) {
- UserInfoElement.innerHTML += "评分:" + ((await GetUserInfo(UserID)).Rating) + "
";
- }
- // Create a placeholder for the last online time
- let lastOnlineElement = document.createElement('div');
- lastOnlineElement.innerHTML = "最后在线:加载中...
";
- UserInfoElement.appendChild(lastOnlineElement);
- let BadgeInfo = await GetUserBadge(UserID);
- if (IsAdmin) {
- if (BadgeInfo.Content !== "") {
- let DeleteBadgeButton = document.createElement("button");
- DeleteBadgeButton.className = "btn btn-outline-danger btn-sm";
- DeleteBadgeButton.innerText = "删除标签";
- DeleteBadgeButton.addEventListener("click", async () => {
- if (confirm("您确定要删除此标签吗?")) {
- RequestAPI("DeleteBadge", {
+ let UserInfoElement = document.createElement("div");
+ UserInfoElement.classList.add("col-auto");
+ UserInfoElement.style.lineHeight = "40px";
+ UserInfoElement.innerHTML += "用户名:" + UserID + "
";
+ UserInfoElement.innerHTML += "昵称:" + UserNick + "
";
+ if (UtilityEnabled("Rating")) {
+ UserInfoElement.innerHTML += "评分:" + ((await GetUserInfo(UserID)).Rating) + "
";
+ }
+ // Create a placeholder for the last online time
+ let lastOnlineElement = document.createElement('div');
+ lastOnlineElement.innerHTML = "最后在线:加载中...
";
+ UserInfoElement.appendChild(lastOnlineElement);
+ let BadgeInfo = await GetUserBadge(UserID);
+ if (IsAdmin) {
+ if (BadgeInfo.Content !== "") {
+ let DeleteBadgeButton = document.createElement("button");
+ DeleteBadgeButton.className = "btn btn-outline-danger btn-sm";
+ DeleteBadgeButton.innerText = "删除标签";
+ DeleteBadgeButton.addEventListener("click", async () => {
+ if (confirm("您确定要删除此标签吗?")) {
+ RequestAPI("DeleteBadge", {
+ "UserID": UserID
+ }, (Response) => {
+ if (UtilityEnabled("DebugMode")) console.log(Response);
+ if (Response.Success) {
+ let Temp = [];
+ for (let i = 0; i < localStorage.length; i++) {
+ if (localStorage.key(i).startsWith("UserScript-User-" + UserID + "-Badge-")) {
+ Temp.push(localStorage.key(i));
+ }
+ }
+ for (let i = 0; i < Temp.length; i++) {
+ localStorage.removeItem(Temp[i]);
+ }
+ window.location.reload();
+ } else {
+ SmartAlert(Response.Message);
+ }
+ });
+ }
+ });
+ UserInfoElement.appendChild(DeleteBadgeButton);
+ } else {
+ let AddBadgeButton = document.createElement("button");
+ AddBadgeButton.className = "btn btn-outline-primary btn-sm";
+ AddBadgeButton.innerText = "添加标签";
+ AddBadgeButton.addEventListener("click", async () => {
+ RequestAPI("NewBadge", {
"UserID": UserID
}, (Response) => {
- if (UtilityEnabled("DebugMode")) console.log(Response);
if (Response.Success) {
let Temp = [];
for (let i = 0; i < localStorage.length; i++) {
@@ -2959,63 +3050,37 @@ async function main() {
SmartAlert(Response.Message);
}
});
- }
- });
- UserInfoElement.appendChild(DeleteBadgeButton);
- } else {
- let AddBadgeButton = document.createElement("button");
- AddBadgeButton.className = "btn btn-outline-primary btn-sm";
- AddBadgeButton.innerText = "添加标签";
- AddBadgeButton.addEventListener("click", async () => {
- RequestAPI("NewBadge", {
- "UserID": UserID
- }, (Response) => {
- if (Response.Success) {
- let Temp = [];
- for (let i = 0; i < localStorage.length; i++) {
- if (localStorage.key(i).startsWith("UserScript-User-" + UserID + "-Badge-")) {
- Temp.push(localStorage.key(i));
- }
- }
- for (let i = 0; i < Temp.length; i++) {
- localStorage.removeItem(Temp[i]);
- }
- window.location.reload();
- } else {
- SmartAlert(Response.Message);
- }
});
- });
- UserInfoElement.appendChild(AddBadgeButton);
- }
- }
- RequestAPI("LastOnline", {"Username": UserID}, (result) => {
- if (result.Success) {
- if (UtilityEnabled("DebugMode")) {
- console.log('lastOnline:' + result.Data.logintime);
+ UserInfoElement.appendChild(AddBadgeButton);
}
- lastOnlineElement.innerHTML = "最后在线:" + GetRelativeTime(result.Data.logintime) + "
";
- } else {
- lastOnlineElement.innerHTML = "最后在线:近三个月内从未
";
}
- });
- LeftTopDiv.appendChild(UserInfoElement);
- LeftDiv.appendChild(LeftTopDiv);
+ RequestAPI("LastOnline", {"Username": UserID}, (result) => {
+ if (result.Success) {
+ if (UtilityEnabled("DebugMode")) {
+ console.log('lastOnline:' + result.Data.logintime);
+ }
+ lastOnlineElement.innerHTML = "最后在线:" + GetRelativeTime(result.Data.logintime) + "
";
+ } else {
+ lastOnlineElement.innerHTML = "最后在线:近三个月内从未
";
+ }
+ });
+ LeftTopDiv.appendChild(UserInfoElement);
+ LeftDiv.appendChild(LeftTopDiv);
- let LeftTable = document.querySelector("body > div > div > center > table");
- LeftDiv.appendChild(LeftTable);
- let RightDiv = document.createElement("div");
- RightDiv.className = "col-md-7";
- Row.appendChild(RightDiv);
- RightDiv.innerHTML = "
已解决题目
";
- for (let i = 0; i < ACProblems.length; i++) {
- RightDiv.innerHTML += "
" + ACProblems[i] + " ";
- }
- document.querySelector("body > div > div").innerHTML = "";
- document.querySelector("body > div > div").appendChild(Row);
- } else {
- document.title = "上传标程";
- document.querySelector("body > div > div.mt-3").innerHTML = `
+ let LeftTable = document.querySelector("body > div > div > center > table");
+ LeftDiv.appendChild(LeftTable);
+ let RightDiv = document.createElement("div");
+ RightDiv.className = "col-md-7";
+ Row.appendChild(RightDiv);
+ RightDiv.innerHTML = "
已解决题目
";
+ for (let i = 0; i < ACProblems.length; i++) {
+ RightDiv.innerHTML += "
" + ACProblems[i] + " ";
+ }
+ document.querySelector("body > div > div").innerHTML = "";
+ document.querySelector("body > div > div").appendChild(Row);
+ } else {
+ document.title = "上传标程";
+ document.querySelector("body > div > div.mt-3").innerHTML = `
0%
@@ -3025,168 +3090,168 @@ async function main() {
首次上传标程可能会比较慢,请耐心等待。后续将可以自动上传AC代码。
系统每过30天会自动提醒您上传标程,您必须要上传标程,否则将会被禁止使用“查看标程”功能。
`;
- UploadStd.addEventListener("click", async () => {
- UploadStd.disabled = true;
- ErrorElement.style.display = "none";
- ErrorElement.innerText = "";
- UploadProgress.classList.remove("bg-success");
- UploadProgress.classList.remove("bg-warning");
- UploadProgress.classList.remove("bg-danger");
- UploadProgress.classList.add("progress-bar-animated");
- UploadProgress.style.width = "0%";
- UploadProgress.innerText = "0%";
- let ACList = [];
- await fetch("https://www.xmoj.tech/userinfo.php?user=" + CurrentUsername)
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- let ScriptData = ParsedDocument.querySelector("#statics > tbody > tr:nth-child(2) > td:nth-child(3) > script").innerText;
- ScriptData = ScriptData.substr(ScriptData.indexOf("}") + 1).trim();
- ScriptData = ScriptData.split(";");
- for (let i = 0; i < ScriptData.length; i++) {
- ACList.push(Number(ScriptData[i].substring(2, ScriptData[i].indexOf(","))));
- }
- });
- RequestAPI("GetStdList", {}, async (Result) => {
- if (Result.Success) {
- let StdList = Result.Data.StdList;
- for (let i = 0; i < ACList.length; i++) {
- if (StdList.indexOf(ACList[i]) === -1 && ACList[i] !== 0) {
- await new Promise((Resolve) => {
- RequestAPI("UploadStd", {
- "ProblemID": Number(ACList[i])
- }, (Result) => {
- if (!Result.Success) {
- ErrorElement.style.display = "block";
- ErrorElement.innerText += Result.Message + "\n";
- UploadProgress.classList.add("bg-warning");
- }
- UploadProgress.innerText = (i / ACList.length * 100).toFixed(1) + "% (" + ACList[i] + ")";
- UploadProgress.style.width = (i / ACList.length * 100) + "%";
- Resolve();
+ UploadStd.addEventListener("click", async () => {
+ UploadStd.disabled = true;
+ ErrorElement.style.display = "none";
+ ErrorElement.innerText = "";
+ UploadProgress.classList.remove("bg-success");
+ UploadProgress.classList.remove("bg-warning");
+ UploadProgress.classList.remove("bg-danger");
+ UploadProgress.classList.add("progress-bar-animated");
+ UploadProgress.style.width = "0%";
+ UploadProgress.innerText = "0%";
+ let ACList = [];
+ await fetch("https://www.xmoj.tech/userinfo.php?user=" + CurrentUsername)
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let ScriptData = ParsedDocument.querySelector("#statics > tbody > tr:nth-child(2) > td:nth-child(3) > script").innerText;
+ ScriptData = ScriptData.substr(ScriptData.indexOf("}") + 1).trim();
+ ScriptData = ScriptData.split(";");
+ for (let i = 0; i < ScriptData.length; i++) {
+ ACList.push(Number(ScriptData[i].substring(2, ScriptData[i].indexOf(","))));
+ }
+ });
+ RequestAPI("GetStdList", {}, async (Result) => {
+ if (Result.Success) {
+ let StdList = Result.Data.StdList;
+ for (let i = 0; i < ACList.length; i++) {
+ if (StdList.indexOf(ACList[i]) === -1 && ACList[i] !== 0) {
+ await new Promise((Resolve) => {
+ RequestAPI("UploadStd", {
+ "ProblemID": Number(ACList[i])
+ }, (Result) => {
+ if (!Result.Success) {
+ ErrorElement.style.display = "block";
+ ErrorElement.innerText += Result.Message + "\n";
+ UploadProgress.classList.add("bg-warning");
+ }
+ UploadProgress.innerText = (i / ACList.length * 100).toFixed(1) + "% (" + ACList[i] + ")";
+ UploadProgress.style.width = (i / ACList.length * 100) + "%";
+ Resolve();
+ });
});
- });
+ }
}
+ UploadProgress.classList.add("bg-success");
+ UploadProgress.classList.remove("progress-bar-animated");
+ UploadProgress.innerText = "100%";
+ UploadProgress.style.width = "100%";
+ UploadStd.disabled = false;
+ localStorage.setItem("UserScript-LastUploadedStdTime", new Date().getTime());
+ } else {
+ ErrorElement.style.display = "block";
+ ErrorElement.innerText = Result.Message;
+ UploadStd.disabled = false;
}
- UploadProgress.classList.add("bg-success");
- UploadProgress.classList.remove("progress-bar-animated");
- UploadProgress.innerText = "100%";
- UploadProgress.style.width = "100%";
- UploadStd.disabled = false;
- localStorage.setItem("UserScript-LastUploadedStdTime", new Date().getTime());
- } else {
- ErrorElement.style.display = "block";
- ErrorElement.innerText = Result.Message;
- UploadStd.disabled = false;
- }
+ });
});
- });
- }
- } else if (location.pathname == "/conteststatistics.php") {
- if (new URL(location.href).searchParams.get("cid") != null) {
- document.title = "比赛 " + new URL(location.href).searchParams.get("cid") + " 统计";
- }
- document.querySelector("body > div > div.mt-3 > center > h3").innerText = "比赛统计";
- if (UtilityEnabled("ResetType")) {
- let Temp = document.getElementById("submission").childNodes;
- for (let i = 0; i < Temp.length; i++) {
- Temp[i].remove();
}
- eval(document.querySelector("body > div.container > div > center > table:nth-child(4) > script:nth-child(6)").innerHTML);
- document.querySelector("#cs > thead > tr > th:nth-child(1)").innerText = "题目编号";
- document.querySelector("#cs > thead > tr > th:nth-child(10)").remove();
- document.querySelector("#cs > thead > tr > th:nth-child(11)").innerText = "总和";
- document.querySelector("#cs > thead > tr > th:nth-child(12)").remove();
- document.querySelector("#cs > thead > tr > th:nth-child(12)").remove();
- document.querySelector("#cs > thead > tr > th:nth-child(12)").remove();
- document.querySelector("#cs > tbody > tr:last-child > td").innerText = "总和";
- TidyTable(document.getElementById("cs"));
- Temp = document.querySelector("#cs > tbody").children;
- for (let i = 0; i < Temp.length; i++) {
- let CurrentRowChildren = Temp[i].children;
- CurrentRowChildren[9].remove();
- CurrentRowChildren[11].remove();
- CurrentRowChildren[11].remove();
- CurrentRowChildren[11].remove();
- for (let j = 0; j < CurrentRowChildren.length; j++) {
- if (CurrentRowChildren[j].innerText == "") {
- CurrentRowChildren[j].innerText = "0";
+ } else if (location.pathname == "/conteststatistics.php") {
+ if (new URL(location.href).searchParams.get("cid") != null) {
+ document.title = "比赛 " + new URL(location.href).searchParams.get("cid") + " 统计";
+ }
+ document.querySelector("body > div > div.mt-3 > center > h3").innerText = "比赛统计";
+ if (UtilityEnabled("ResetType")) {
+ let Temp = document.getElementById("submission").childNodes;
+ for (let i = 0; i < Temp.length; i++) {
+ Temp[i].remove();
+ }
+ eval(document.querySelector("body > div.container > div > center > table:nth-child(4) > script:nth-child(6)").innerHTML);
+ document.querySelector("#cs > thead > tr > th:nth-child(1)").innerText = "题目编号";
+ document.querySelector("#cs > thead > tr > th:nth-child(10)").remove();
+ document.querySelector("#cs > thead > tr > th:nth-child(11)").innerText = "总和";
+ document.querySelector("#cs > thead > tr > th:nth-child(12)").remove();
+ document.querySelector("#cs > thead > tr > th:nth-child(12)").remove();
+ document.querySelector("#cs > thead > tr > th:nth-child(12)").remove();
+ document.querySelector("#cs > tbody > tr:last-child > td").innerText = "总和";
+ TidyTable(document.getElementById("cs"));
+ Temp = document.querySelector("#cs > tbody").children;
+ for (let i = 0; i < Temp.length; i++) {
+ let CurrentRowChildren = Temp[i].children;
+ CurrentRowChildren[9].remove();
+ CurrentRowChildren[11].remove();
+ CurrentRowChildren[11].remove();
+ CurrentRowChildren[11].remove();
+ for (let j = 0; j < CurrentRowChildren.length; j++) {
+ if (CurrentRowChildren[j].innerText == "") {
+ CurrentRowChildren[j].innerText = "0";
+ }
}
}
}
- }
- } else if (location.pathname == "/comparesource.php") {
- if (UtilityEnabled("CompareSource")) {
- if (location.search == "") {
- document.querySelector("body > div.container > div").innerHTML = "";
- let LeftCodeText = document.createElement("span");
- document.querySelector("body > div.container > div").appendChild(LeftCodeText);
- LeftCodeText.innerText = "左侧代码的运行编号:";
- let LeftCode = document.createElement("input");
- document.querySelector("body > div.container > div").appendChild(LeftCode);
- LeftCode.classList.add("form-control");
- LeftCode.style.width = "40%";
- LeftCode.style.marginBottom = "5px";
- let RightCodeText = document.createElement("span");
- document.querySelector("body > div.container > div").appendChild(RightCodeText);
- RightCodeText.innerText = "右侧代码的运行编号:";
- let RightCode = document.createElement("input");
- document.querySelector("body > div.container > div").appendChild(RightCode);
- RightCode.classList.add("form-control");
- RightCode.style.width = "40%";
- RightCode.style.marginBottom = "5px";
- let CompareButton = document.createElement("button");
- document.querySelector("body > div.container > div").appendChild(CompareButton);
- CompareButton.innerText = "比较";
- CompareButton.className = "btn btn-primary";
- CompareButton.addEventListener("click", () => {
- location.href = "https://www.xmoj.tech/comparesource.php?left=" + Number(LeftCode.value) + "&right=" + Number(RightCode.value);
- });
- } else {
- document.querySelector("body > div > div.mt-3").innerHTML = `
+ } else if (location.pathname == "/comparesource.php") {
+ if (UtilityEnabled("CompareSource")) {
+ if (location.search == "") {
+ document.querySelector("body > div.container > div").innerHTML = "";
+ let LeftCodeText = document.createElement("span");
+ document.querySelector("body > div.container > div").appendChild(LeftCodeText);
+ LeftCodeText.innerText = "左侧代码的运行编号:";
+ let LeftCode = document.createElement("input");
+ document.querySelector("body > div.container > div").appendChild(LeftCode);
+ LeftCode.classList.add("form-control");
+ LeftCode.style.width = "40%";
+ LeftCode.style.marginBottom = "5px";
+ let RightCodeText = document.createElement("span");
+ document.querySelector("body > div.container > div").appendChild(RightCodeText);
+ RightCodeText.innerText = "右侧代码的运行编号:";
+ let RightCode = document.createElement("input");
+ document.querySelector("body > div.container > div").appendChild(RightCode);
+ RightCode.classList.add("form-control");
+ RightCode.style.width = "40%";
+ RightCode.style.marginBottom = "5px";
+ let CompareButton = document.createElement("button");
+ document.querySelector("body > div.container > div").appendChild(CompareButton);
+ CompareButton.innerText = "比较";
+ CompareButton.className = "btn btn-primary";
+ CompareButton.addEventListener("click", () => {
+ location.href = "https://www.xmoj.tech/comparesource.php?left=" + Number(LeftCode.value) + "&right=" + Number(RightCode.value);
+ });
+ } else {
+ document.querySelector("body > div > div.mt-3").innerHTML = `
`;
- let LeftCode = "";
- await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("left"))
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- LeftCode = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
- });
- let RightCode = "";
- await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("right"))
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- RightCode = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
+ let LeftCode = "";
+ await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("left"))
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ LeftCode = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
+ });
+ let RightCode = "";
+ await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("right"))
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ RightCode = Response.substring(0, Response.indexOf("/**************************************************************")).trim();
+ });
+
+ let MergeViewElement = CodeMirror.MergeView(CompareElement, {
+ value: LeftCode,
+ origLeft: null,
+ orig: RightCode,
+ lineNumbers: true,
+ mode: "text/x-c++src",
+ collapseIdentical: "true",
+ readOnly: true,
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
+ revertButtons: false,
+ ignoreWhitespace: true
});
- let MergeViewElement = CodeMirror.MergeView(CompareElement, {
- value: LeftCode,
- origLeft: null,
- orig: RightCode,
- lineNumbers: true,
- mode: "text/x-c++src",
- collapseIdentical: "true",
- readOnly: true,
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
- revertButtons: false,
- ignoreWhitespace: true
- });
-
- IgnoreWhitespace.addEventListener("change", () => {
- MergeViewElement.ignoreWhitespace = ignorews.checked;
- });
+ IgnoreWhitespace.addEventListener("change", () => {
+ MergeViewElement.ignoreWhitespace = ignorews.checked;
+ });
+ }
}
- }
- } else if (location.pathname == "/loginpage.php") {
- if (UtilityEnabled("NewBootstrap")) {
- document.querySelector("#login").innerHTML = `
`;
- }
- let ErrorText = document.createElement("div");
- ErrorText.style.color = "red";
- ErrorText.style.marginBottom = "5px";
- document.querySelector("#login").appendChild(ErrorText);
- let LoginButton = document.getElementsByName("submit")[0];
- LoginButton.addEventListener("click", async () => {
- let Username = document.getElementsByName("user_id")[0].value;
- let Password = document.getElementsByName("password")[0].value;
- if (Username == "" || Password == "") {
- ErrorText.innerText = "用户名或密码不能为空";
- } else {
- await fetch("https://www.xmoj.tech/login.php", {
- method: "POST", headers: {
- "Content-Type": "application/x-www-form-urlencoded"
- }, body: "user_id=" + encodeURIComponent(Username) + "&password=" + hex_md5(Password)
- })
- .then((Response) => {
- return Response.text();
+ }
+ let ErrorText = document.createElement("div");
+ ErrorText.style.color = "red";
+ ErrorText.style.marginBottom = "5px";
+ document.querySelector("#login").appendChild(ErrorText);
+ let LoginButton = document.getElementsByName("submit")[0];
+ LoginButton.addEventListener("click", async () => {
+ let Username = document.getElementsByName("user_id")[0].value;
+ let Password = document.getElementsByName("password")[0].value;
+ if (Username == "" || Password == "") {
+ ErrorText.innerText = "用户名或密码不能为空";
+ } else {
+ await fetch("https://www.xmoj.tech/login.php", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded"
+ },
+ body: "user_id=" + encodeURIComponent(Username) + "&password=" + hex_md5(Password)
})
- .then((Response) => {
- if (UtilityEnabled("LoginFailed")) {
- if (Response.indexOf("history.go(-2);") != -1) {
- if (UtilityEnabled("SavePassword")) {
- localStorage.setItem("UserScript-Username", Username);
- localStorage.setItem("UserScript-Password", Password);
- }
- let NewPage = localStorage.getItem("UserScript-LastPage");
- if (NewPage == null) {
- NewPage = "https://www.xmoj.tech/index.php";
- }
- location.href = NewPage;
- } else {
- if (UtilityEnabled("SavePassword")) {
- localStorage.removeItem("UserScript-Username");
- localStorage.removeItem("UserScript-Password");
- }
- Response = Response.substring(Response.indexOf("alert('") + 7);
- Response = Response.substring(0, Response.indexOf("');"));
- if (Response == "UserName or Password Wrong!") {
- ErrorText.innerText = "用户名或密码错误!";
+ .then((Response) => {
+ return Response.text();
+ })
+ .then((Response) => {
+ if (UtilityEnabled("LoginFailed")) {
+ if (Response.indexOf("history.go(-2);") != -1) {
+ if (UtilityEnabled("SavePassword")) {
+ localStorage.setItem("UserScript-Username", Username);
+ localStorage.setItem("UserScript-Password", Password);
+ }
+ let NewPage = localStorage.getItem("UserScript-LastPage");
+ if (NewPage == null) {
+ NewPage = "https://www.xmoj.tech/index.php";
+ }
+ location.href = NewPage;
} else {
- ErrorText.innerText = Response;
+ if (UtilityEnabled("SavePassword")) {
+ localStorage.removeItem("UserScript-Username");
+ localStorage.removeItem("UserScript-Password");
+ }
+ Response = Response.substring(Response.indexOf("alert('") + 7);
+ Response = Response.substring(0, Response.indexOf("');"));
+ if (Response == "UserName or Password Wrong!") {
+ ErrorText.innerText = "用户名或密码错误!";
+ } else {
+ ErrorText.innerText = Response;
+ }
}
+ } else {
+ document.innerHTML = Response;
}
- } else {
- document.innerHTML = Response;
- }
- });
+ });
+ }
+ });
+ if (UtilityEnabled("SavePassword") && localStorage.getItem("UserScript-Username") != null && localStorage.getItem("UserScript-Password") != null) {
+ document.querySelector("#login > div:nth-child(1) > div > input").value = localStorage.getItem("UserScript-Username");
+ document.querySelector("#login > div:nth-child(2) > div > input").value = localStorage.getItem("UserScript-Password");
+ LoginButton.click();
}
- });
- if (UtilityEnabled("SavePassword") && localStorage.getItem("UserScript-Username") != null && localStorage.getItem("UserScript-Password") != null) {
- document.querySelector("#login > div:nth-child(1) > div > input").value = localStorage.getItem("UserScript-Username");
- document.querySelector("#login > div:nth-child(2) > div > input").value = localStorage.getItem("UserScript-Password");
- LoginButton.click();
- }
- } else if (location.pathname == "/contest_video.php" || location.pathname == "/problem_video.php") {
- let ScriptData = document.querySelector("body > div > div.mt-3 > center > script").innerHTML;
- if (document.getElementById("J_prismPlayer0").innerHTML != "") {
- document.getElementById("J_prismPlayer0").innerHTML = "";
- if (player) {
- player.dispose();
+ } else if (location.pathname == "/contest_video.php" || location.pathname == "/problem_video.php") {
+ let ScriptData = document.querySelector("body > div > div.mt-3 > center > script").innerHTML;
+ if (document.getElementById("J_prismPlayer0").innerHTML != "") {
+ document.getElementById("J_prismPlayer0").innerHTML = "";
+ if (player) {
+ player.dispose();
+ }
+ eval(ScriptData);
}
- eval(ScriptData);
- }
- if (UtilityEnabled("DownloadPlayback")) {
- ScriptData = ScriptData.substring(ScriptData.indexOf("{"));
- ScriptData = ScriptData.substring(0, ScriptData.indexOf("}") + 1);
- ScriptData = ScriptData.replace(/([a-zA-Z0-9]+) ?:/g, "\"$1\":");
- ScriptData = ScriptData.replace(/'/g, "\"");
- let VideoData = JSON.parse(ScriptData);
- let RandomUUID = () => {
- let t = "0123456789abcdef";
- let e = [];
- for (let r = 0; r < 36; r++) e[r] = t.substr(Math.floor(16 * Math.random()), 1);
- e[14] = "4";
- e[19] = t.substr(3 & e[19] | 8, 1);
- e[8] = e[13] = e[18] = e[23] = "-";
- return e.join("");
- };
- let URLParams = new URLSearchParams({
- "AccessKeyId": VideoData.accessKeyId,
- "Action": "GetPlayInfo",
- "VideoId": VideoData.vid,
- "Formats": "",
- "AuthTimeout": 7200,
- "Rand": RandomUUID(),
- "SecurityToken": VideoData.securityToken,
- "StreamType": "video",
- "Format": "JSON",
- "Version": "2017-03-21",
- "SignatureMethod": "HMAC-SHA1",
- "SignatureVersion": "1.0",
- "SignatureNonce": RandomUUID(),
- "PlayerVersion": "2.9.3",
- "Channel": "HTML5"
- });
- URLParams.sort();
- await fetch("https://vod." + VideoData.region + ".aliyuncs.com/?" + URLParams.toString() + "&Signature=" + encodeURIComponent(CryptoJS.HmacSHA1("GET&%2F&" + encodeURIComponent(URLParams.toString()), VideoData.accessKeySecret + "&").toString(CryptoJS.enc.Base64)))
- .then((Response) => {
- return Response.json();
- })
- .then((Response) => {
- let DownloadButton = document.createElement("a");
- DownloadButton.className = "btn btn-outline-secondary";
- DownloadButton.innerText = "下载";
- DownloadButton.href = Response.PlayInfoList.PlayInfo[0].PlayURL;
- DownloadButton.download = Response.VideoBase.Title;
- document.querySelector("body > div > div.mt-3 > center").appendChild(DownloadButton);
+ if (UtilityEnabled("DownloadPlayback")) {
+ ScriptData = ScriptData.substring(ScriptData.indexOf("{"));
+ ScriptData = ScriptData.substring(0, ScriptData.indexOf("}") + 1);
+ ScriptData = ScriptData.replace(/([a-zA-Z0-9]+) ?:/g, "\"$1\":");
+ ScriptData = ScriptData.replace(/'/g, "\"");
+ let VideoData = JSON.parse(ScriptData);
+ let RandomUUID = () => {
+ let t = "0123456789abcdef";
+ let e = [];
+ for (let r = 0; r < 36; r++) e[r] = t.substr(Math.floor(16 * Math.random()), 1);
+ e[14] = "4";
+ e[19] = t.substr(3 & e[19] | 8, 1);
+ e[8] = e[13] = e[18] = e[23] = "-";
+ return e.join("");
+ };
+ let URLParams = new URLSearchParams({
+ "AccessKeyId": VideoData.accessKeyId,
+ "Action": "GetPlayInfo",
+ "VideoId": VideoData.vid,
+ "Formats": "",
+ "AuthTimeout": 7200,
+ "Rand": RandomUUID(),
+ "SecurityToken": VideoData.securityToken,
+ "StreamType": "video",
+ "Format": "JSON",
+ "Version": "2017-03-21",
+ "SignatureMethod": "HMAC-SHA1",
+ "SignatureVersion": "1.0",
+ "SignatureNonce": RandomUUID(),
+ "PlayerVersion": "2.9.3",
+ "Channel": "HTML5"
});
- }
- } else if (location.pathname == "/reinfo.php") {
- document.title = "测试点信息: " + SearchParams.get("sid");
- if (document.querySelector("#results > div") == undefined) {
- document.querySelector("#results").parentElement.innerHTML = "没有测试点信息";
- } else {
- for (let i = 0; i < document.querySelector("#results > div").children.length; i++) {
- let CurrentElement = document.querySelector("#results > div").children[i].children[0].children[0].children[0];
- let Temp = CurrentElement.innerText.substring(0, CurrentElement.innerText.length - 2).split("/");
- CurrentElement.innerText = TimeToStringTime(Temp[0]) + "/" + SizeToStringSize(Temp[1]);
+ URLParams.sort();
+ await fetch("https://vod." + VideoData.region + ".aliyuncs.com/?" + URLParams.toString() + "&Signature=" + encodeURIComponent(CryptoJS.HmacSHA1("GET&%2F&" + encodeURIComponent(URLParams.toString()), VideoData.accessKeySecret + "&").toString(CryptoJS.enc.Base64)))
+ .then((Response) => {
+ return Response.json();
+ })
+ .then((Response) => {
+ let DownloadButton = document.createElement("a");
+ DownloadButton.className = "btn btn-outline-secondary";
+ DownloadButton.innerText = "下载";
+ DownloadButton.href = Response.PlayInfoList.PlayInfo[0].PlayURL;
+ DownloadButton.download = Response.VideoBase.Title;
+ document.querySelector("body > div > div.mt-3 > center").appendChild(DownloadButton);
+ });
}
- if (document.getElementById("apply_data")) {
- let ApplyDiv = document.getElementById("apply_data").parentElement;
- console.log("启动!!!");
- if (UtilityEnabled("ApplyData")) {
- let GetDataButton = document.createElement("button");
- GetDataButton.className = "ms-2 btn btn-outline-secondary";
- GetDataButton.innerText = "获取数据";
- console.log("按钮创建成功");
- ApplyDiv.appendChild(GetDataButton);
- GetDataButton.addEventListener("click", async () => {
- GetDataButton.disabled = true;
- GetDataButton.innerText = "正在获取数据...";
- let PID = localStorage.getItem("UserScript-Solution-" + SearchParams.get("sid") + "-Problem");
- if (PID == null) {
- GetDataButton.innerText = "失败! 无法获取PID";
- GetDataButton.disabled = false;
- await new Promise((resolve) => {
- setTimeout(resolve, 800);
- });
- GetDataButton.innerText = "获取数据";
- return;
- }
- let Code = "";
- if (localStorage.getItem(`UserScript-Problem-${PID}-IOFilename`) !== null) {
- Code = `#define IOFile "${localStorage.getItem(`UserScript-Problem-${PID}-IOFilename`)}"\n`;
- }
- Code += `//XMOJ-Script 获取数据代码
+ } else if (location.pathname == "/reinfo.php") {
+ document.title = "测试点信息: " + SearchParams.get("sid");
+ if (document.querySelector("#results > div") == undefined) {
+ document.querySelector("#results").parentElement.innerHTML = "没有测试点信息";
+ } else {
+ for (let i = 0; i < document.querySelector("#results > div").children.length; i++) {
+ let CurrentElement = document.querySelector("#results > div").children[i].children[0].children[0].children[0];
+ let Temp = CurrentElement.innerText.substring(0, CurrentElement.innerText.length - 2).split("/");
+ CurrentElement.innerText = TimeToStringTime(Temp[0]) + "/" + SizeToStringSize(Temp[1]);
+ }
+ if (document.getElementById("apply_data")) {
+ let ApplyDiv = document.getElementById("apply_data").parentElement;
+ console.log("启动!!!");
+ if (UtilityEnabled("ApplyData")) {
+ let GetDataButton = document.createElement("button");
+ GetDataButton.className = "ms-2 btn btn-outline-secondary";
+ GetDataButton.innerText = "获取数据";
+ console.log("按钮创建成功");
+ ApplyDiv.appendChild(GetDataButton);
+ GetDataButton.addEventListener("click", async () => {
+ GetDataButton.disabled = true;
+ GetDataButton.innerText = "正在获取数据...";
+ let PID = localStorage.getItem("UserScript-Solution-" + SearchParams.get("sid") + "-Problem");
+ if (PID == null) {
+ GetDataButton.innerText = "失败! 无法获取PID";
+ GetDataButton.disabled = false;
+ await new Promise((resolve) => {
+ setTimeout(resolve, 800);
+ });
+ GetDataButton.innerText = "获取数据";
+ return;
+ }
+ let Code = "";
+ if (localStorage.getItem(`UserScript-Problem-${PID}-IOFilename`) !== null) {
+ Code = `#define IOFile "${localStorage.getItem(`UserScript-Problem-${PID}-IOFilename`)}"\n`;
+ }
+ Code += `//XMOJ-Script 获取数据代码
#include
using namespace std;
string Base64Encode(string Input)
@@ -3393,282 +3460,282 @@ int main()
return 0;
}`;
- await fetch("https://www.xmoj.tech/submit.php", {
- "headers": {
- "content-type": "application/x-www-form-urlencoded"
- },
- "referrer": "https://www.xmoj.tech/submitpage.php?id=" + PID,
- "method": "POST",
- "body": "id=" + PID + "&" + "language=1&" + "source=" + encodeURIComponent(Code) + "&" + "enable_O2=on"
- });
+ await fetch("https://www.xmoj.tech/submit.php", {
+ "headers": {
+ "content-type": "application/x-www-form-urlencoded"
+ },
+ "referrer": "https://www.xmoj.tech/submitpage.php?id=" + PID,
+ "method": "POST",
+ "body": "id=" + PID + "&" + "language=1&" + "source=" + encodeURIComponent(Code) + "&" + "enable_O2=on"
+ });
- let SID = await fetch("https://www.xmoj.tech/status.php").then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- return ParsedDocument.querySelector("#result-tab > tbody > tr:nth-child(1) > td:nth-child(2)").innerText;
- });
+ let SID = await fetch("https://www.xmoj.tech/status.php").then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ return ParsedDocument.querySelector("#result-tab > tbody > tr:nth-child(1) > td:nth-child(2)").innerText;
+ });
- await new Promise((Resolve) => {
- let Interval = setInterval(async () => {
- await fetch("status-ajax.php?solution_id=" + SID).then((Response) => {
- return Response.text();
- }).then((Response) => {
- if (Response.split(",")[0] >= 4) {
- clearInterval(Interval);
- Resolve();
- }
- });
- }, 500);
- });
+ await new Promise((Resolve) => {
+ let Interval = setInterval(async () => {
+ await fetch("status-ajax.php?solution_id=" + SID).then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ if (Response.split(",")[0] >= 4) {
+ clearInterval(Interval);
+ Resolve();
+ }
+ });
+ }, 500);
+ });
- await fetch(`https://www.xmoj.tech/reinfo.php?sid=${SID}`).then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- let ErrorData = ParsedDocument.getElementById("errtxt").innerText;
- let MatchResult = ErrorData.match(/\what\(\): \[([A-Za-z0-9+\/=]+)\]/g);
- if (MatchResult === null) {
- GetDataButton.innerText = "获取数据失败";
+ await fetch(`https://www.xmoj.tech/reinfo.php?sid=${SID}`).then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let ErrorData = ParsedDocument.getElementById("errtxt").innerText;
+ let MatchResult = ErrorData.match(/\what\(\): \[([A-Za-z0-9+\/=]+)\]/g);
+ if (MatchResult === null) {
+ GetDataButton.innerText = "获取数据失败";
+ GetDataButton.disabled = false;
+ return;
+ }
+ for (let i = 0; i < MatchResult.length; i++) {
+ let Data = CryptoJS.enc.Base64.parse(MatchResult[i].substring(10, MatchResult[i].length - 1)).toString(CryptoJS.enc.Utf8);
+ ApplyDiv.appendChild(document.createElement("hr"));
+ ApplyDiv.appendChild(document.createTextNode("数据" + (i + 1) + ":"));
+ let CodeElement = document.createElement("div");
+ ApplyDiv.appendChild(CodeElement);
+ CodeMirror(CodeElement, {
+ value: Data,
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
+ lineNumbers: true,
+ readOnly: true
+ }).setSize("100%", "auto");
+ }
+ GetDataButton.innerText = "获取数据成功";
GetDataButton.disabled = false;
- return;
- }
- for (let i = 0; i < MatchResult.length; i++) {
- let Data = CryptoJS.enc.Base64.parse(MatchResult[i].substring(10, MatchResult[i].length - 1)).toString(CryptoJS.enc.Utf8);
- ApplyDiv.appendChild(document.createElement("hr"));
- ApplyDiv.appendChild(document.createTextNode("数据" + (i + 1) + ":"));
- let CodeElement = document.createElement("div");
- ApplyDiv.appendChild(CodeElement);
- CodeMirror(CodeElement, {
- value: Data,
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default"),
- lineNumbers: true,
- readOnly: true
- }).setSize("100%", "auto");
- }
- GetDataButton.innerText = "获取数据成功";
- GetDataButton.disabled = false;
+ });
});
+ }
+ document.getElementById("apply_data").addEventListener("click", () => {
+ let ApplyElements = document.getElementsByClassName("data");
+ for (let i = 0; i < ApplyElements.length; i++) {
+ ApplyElements[i].style.display = (ApplyElements[i].style.display == "block" ? "" : "block");
+ }
});
}
- document.getElementById("apply_data").addEventListener("click", () => {
- let ApplyElements = document.getElementsByClassName("data");
- for (let i = 0; i < ApplyElements.length; i++) {
- ApplyElements[i].style.display = (ApplyElements[i].style.display == "block" ? "" : "block");
- }
- });
- }
- let ApplyElements = document.getElementsByClassName("data");
- for (let i = 0; i < ApplyElements.length; i++) {
- ApplyElements[i].addEventListener("click", async () => {
- await fetch("https://www.xmoj.tech/data_distribute_ajax_apply.php", {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded"
- },
- body: "user_id=" + CurrentUsername + "&" + "solution_id=" + SearchParams.get("sid") + "&" + "name=" + ApplyElements[i].getAttribute("name")
- }).then((Response) => {
- return Response.json();
- }).then((Response) => {
- ApplyElements[i].innerText = Response.msg;
- setTimeout(() => {
- ApplyElements[i].innerText = "申请数据";
- }, 1000);
+ let ApplyElements = document.getElementsByClassName("data");
+ for (let i = 0; i < ApplyElements.length; i++) {
+ ApplyElements[i].addEventListener("click", async () => {
+ await fetch("https://www.xmoj.tech/data_distribute_ajax_apply.php", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded"
+ },
+ body: "user_id=" + CurrentUsername + "&" + "solution_id=" + SearchParams.get("sid") + "&" + "name=" + ApplyElements[i].getAttribute("name")
+ }).then((Response) => {
+ return Response.json();
+ }).then((Response) => {
+ ApplyElements[i].innerText = Response.msg;
+ setTimeout(() => {
+ ApplyElements[i].innerText = "申请数据";
+ }, 1000);
+ });
});
- });
+ }
}
- }
- } else if (location.pathname == "/downloads.php") {
- let SoftwareList = document.querySelector("body > div > ul");
- SoftwareList.remove();
- SoftwareList = document.createElement("ul");
- SoftwareList.className = "software_list";
- let Container = document.createElement("div");
- document.querySelector("body > div").appendChild(Container);
- Container.className = "mt-3";
- Container.appendChild(SoftwareList);
- if (UtilityEnabled("NewDownload")) {
- let Softwares = [{
- "Name": "Bloodshed Dev-C++",
- "Image": "https://a.fsdn.com/allura/p/dev-cpp/icon",
- "URL": "https://sourceforge.net/projects/dev-cpp/"
- }, {
- "Name": "DevC++ 5.11 TDM-GCC 4.9.2",
- "Image": "https://www.xmoj.tech/image/devcpp.png",
- "URL": "https://www.xmoj.tech/downloads/Dev-Cpp+5.11+TDM-GCC+4.9.2+Setup.exe"
- }, {
- "Name": "Orwell Dev-C++",
- "Image": "https://a.fsdn.com/allura/p/orwelldevcpp/icon",
- "URL": "https://sourceforge.net/projects/orwelldevcpp/"
- }, {
- "Name": "Embarcadero Dev-C++",
- "Image": "https://a.fsdn.com/allura/s/embarcadero-dev-cpp/icon",
- "URL": "https://sourceforge.net/software/product/Embarcadero-Dev-Cpp/"
- }, {
- "Name": "RedPanda C++",
- "Image": "https://a.fsdn.com/allura/p/redpanda-cpp/icon",
- "URL": "https://sourceforge.net/projects/redpanda-cpp/"
- }, {
- "Name": "CP Editor",
- "Image": "https://a.fsdn.com/allura/mirror/cp-editor/icon?c35437565079e4135a985ba557ef2fdbe97de6bafb27aceafd76bc54490c26e3?&w=90",
- "URL": "https://cpeditor.org/zh/download/"
- }, {
- "Name": "CLion",
- "Image": "https://resources.jetbrains.com/storage/products/company/brand/logos/CLion_icon.png",
- "URL": "https://www.jetbrains.com/clion/download"
- }, {
- "Name": "CP Editor",
- "Image": "https://a.fsdn.com/allura/mirror/cp-editor/icon",
- "URL": "https://sourceforge.net/projects/cp-editor.mirror/"
- }, {
- "Name": "Code::Blocks",
- "Image": "https://a.fsdn.com/allura/p/codeblocks/icon",
- "URL": "https://sourceforge.net/projects/codeblocks/"
- }, {
- "Name": "Visual Studio Code",
- "Image": "https://code.visualstudio.com/favicon.ico",
- "URL": "https://code.visualstudio.com/Download"
- }, {
- "Name": "Lazarus",
- "Image": "https://a.fsdn.com/allura/p/lazarus/icon",
- "URL": "https://sourceforge.net/projects/lazarus/"
- }, {
- "Name": "Geany",
- "Image": "https://www.geany.org/static/img/geany.svg",
- "URL": "https://www.geany.org/download/releases/"
- }, {
- "Name": "NOI Linux",
- "Image": "https://www.noi.cn/upload/resources/image/2021/07/16/163780.jpg",
- "URL": "https://www.noi.cn/gynoi/jsgz/2021-07-16/732450.shtml"
- }, {
- "Name": "VirtualBox",
- "Image": "https://www.virtualbox.org/graphics/vbox_logo2_gradient.png",
- "URL": "https://www.virtualbox.org/wiki/Downloads"
- }, {
- "Name": "MinGW",
- "Image": "https://www.mingw-w64.org/logo.svg",
- "URL": "https://sourceforge.net/projects/mingw/"
- }];
- for (let i = 0; i < Softwares.length; i++) {
- SoftwareList.innerHTML += "" + "" + "" + "
" + "

" + "
" + "
" + Softwares[i].Name + "
" + "
" + "" + "";
+ } else if (location.pathname == "/downloads.php") {
+ let SoftwareList = document.querySelector("body > div > ul");
+ SoftwareList.remove();
+ SoftwareList = document.createElement("ul");
+ SoftwareList.className = "software_list";
+ let Container = document.createElement("div");
+ document.querySelector("body > div").appendChild(Container);
+ Container.className = "mt-3";
+ Container.appendChild(SoftwareList);
+ if (UtilityEnabled("NewDownload")) {
+ let Softwares = [{
+ "Name": "Bloodshed Dev-C++",
+ "Image": "https://a.fsdn.com/allura/p/dev-cpp/icon",
+ "URL": "https://sourceforge.net/projects/dev-cpp/"
+ }, {
+ "Name": "DevC++ 5.11 TDM-GCC 4.9.2",
+ "Image": "https://www.xmoj.tech/image/devcpp.png",
+ "URL": "https://www.xmoj.tech/downloads/Dev-Cpp+5.11+TDM-GCC+4.9.2+Setup.exe"
+ }, {
+ "Name": "Orwell Dev-C++",
+ "Image": "https://a.fsdn.com/allura/p/orwelldevcpp/icon",
+ "URL": "https://sourceforge.net/projects/orwelldevcpp/"
+ }, {
+ "Name": "Embarcadero Dev-C++",
+ "Image": "https://a.fsdn.com/allura/s/embarcadero-dev-cpp/icon",
+ "URL": "https://sourceforge.net/software/product/Embarcadero-Dev-Cpp/"
+ }, {
+ "Name": "RedPanda C++",
+ "Image": "https://a.fsdn.com/allura/p/redpanda-cpp/icon",
+ "URL": "https://sourceforge.net/projects/redpanda-cpp/"
+ }, {
+ "Name": "CP Editor",
+ "Image": "https://a.fsdn.com/allura/mirror/cp-editor/icon?c35437565079e4135a985ba557ef2fdbe97de6bafb27aceafd76bc54490c26e3?&w=90",
+ "URL": "https://cpeditor.org/zh/download/"
+ }, {
+ "Name": "CLion",
+ "Image": "https://resources.jetbrains.com/storage/products/company/brand/logos/CLion_icon.png",
+ "URL": "https://www.jetbrains.com/clion/download"
+ }, {
+ "Name": "CP Editor",
+ "Image": "https://a.fsdn.com/allura/mirror/cp-editor/icon",
+ "URL": "https://sourceforge.net/projects/cp-editor.mirror/"
+ }, {
+ "Name": "Code::Blocks",
+ "Image": "https://a.fsdn.com/allura/p/codeblocks/icon",
+ "URL": "https://sourceforge.net/projects/codeblocks/"
+ }, {
+ "Name": "Visual Studio Code",
+ "Image": "https://code.visualstudio.com/favicon.ico",
+ "URL": "https://code.visualstudio.com/Download"
+ }, {
+ "Name": "Lazarus",
+ "Image": "https://a.fsdn.com/allura/p/lazarus/icon",
+ "URL": "https://sourceforge.net/projects/lazarus/"
+ }, {
+ "Name": "Geany",
+ "Image": "https://www.geany.org/static/img/geany.svg",
+ "URL": "https://www.geany.org/download/releases/"
+ }, {
+ "Name": "NOI Linux",
+ "Image": "https://www.noi.cn/upload/resources/image/2021/07/16/163780.jpg",
+ "URL": "https://www.noi.cn/gynoi/jsgz/2021-07-16/732450.shtml"
+ }, {
+ "Name": "VirtualBox",
+ "Image": "https://www.virtualbox.org/graphics/vbox_logo2_gradient.png",
+ "URL": "https://www.virtualbox.org/wiki/Downloads"
+ }, {
+ "Name": "MinGW",
+ "Image": "https://www.mingw-w64.org/logo.svg",
+ "URL": "https://sourceforge.net/projects/mingw/"
+ }];
+ for (let i = 0; i < Softwares.length; i++) {
+ SoftwareList.innerHTML += "" + "" + "" + "
" + "

" + "
" + "
" + Softwares[i].Name + "
" + "
" + "" + "";
+ }
}
- }
- } else if (location.pathname == "/problemstatus.php") {
- document.querySelector("body > div > div.mt-3 > center").insertBefore(document.querySelector("#statics"), document.querySelector("body > div > div.mt-3 > center > table"));
- document.querySelector("body > div > div.mt-3 > center").insertBefore(document.querySelector("#problemstatus"), document.querySelector("body > div > div.mt-3 > center > table"));
+ } else if (location.pathname == "/problemstatus.php") {
+ document.querySelector("body > div > div.mt-3 > center").insertBefore(document.querySelector("#statics"), document.querySelector("body > div > div.mt-3 > center > table"));
+ document.querySelector("body > div > div.mt-3 > center").insertBefore(document.querySelector("#problemstatus"), document.querySelector("body > div > div.mt-3 > center > table"));
- document.querySelector("body > div > div.mt-3 > center > table:nth-child(3)").remove();
- let Temp = document.querySelector("#statics").rows;
- for (let i = 0; i < Temp.length; i++) {
- Temp[i].removeAttribute("class");
- }
+ document.querySelector("body > div > div.mt-3 > center > table:nth-child(3)").remove();
+ let Temp = document.querySelector("#statics").rows;
+ for (let i = 0; i < Temp.length; i++) {
+ Temp[i].removeAttribute("class");
+ }
- document.querySelector("#problemstatus > thead > tr").innerHTML = document.querySelector("#problemstatus > thead > tr").innerHTML.replaceAll("td", "th");
- document.querySelector("#problemstatus > thead > tr > th:nth-child(2)").innerText = "运行编号";
- document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
- document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
- document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
- document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
- Temp = document.querySelector("#problemstatus > thead > tr").children;
- for (let i = 0; i < Temp.length; i++) {
- Temp[i].removeAttribute("class");
- }
- Temp = document.querySelector("#problemstatus > tbody").children;
- for (let i = 0; i < Temp.length; i++) {
- if (Temp[i].children[5].children[0] != null) {
- Temp[i].children[1].innerHTML = `${escapeHTML(Temp[i].children[1].innerText.trim())}`;
+ document.querySelector("#problemstatus > thead > tr").innerHTML = document.querySelector("#problemstatus > thead > tr").innerHTML.replaceAll("td", "th");
+ document.querySelector("#problemstatus > thead > tr > th:nth-child(2)").innerText = "运行编号";
+ document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
+ document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
+ document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
+ document.querySelector("#problemstatus > thead > tr > th:nth-child(4)").remove();
+ Temp = document.querySelector("#problemstatus > thead > tr").children;
+ for (let i = 0; i < Temp.length; i++) {
+ Temp[i].removeAttribute("class");
+ }
+ Temp = document.querySelector("#problemstatus > tbody").children;
+ for (let i = 0; i < Temp.length; i++) {
+ if (Temp[i].children[5].children[0] != null) {
+ Temp[i].children[1].innerHTML = `${escapeHTML(Temp[i].children[1].innerText.trim())}`;
+ }
+ GetUsernameHTML(Temp[i].children[2], Temp[i].children[2].innerText);
+ Temp[i].children[3].remove();
+ Temp[i].children[3].remove();
+ Temp[i].children[3].remove();
+ Temp[i].children[3].remove();
}
- GetUsernameHTML(Temp[i].children[2], Temp[i].children[2].innerText);
- Temp[i].children[3].remove();
- Temp[i].children[3].remove();
- Temp[i].children[3].remove();
- Temp[i].children[3].remove();
- }
- let CurrentPage = parseInt(SearchParams.get("page") || 0);
- let PID = Number(SearchParams.get("id"));
- document.title = "问题 " + PID + " 状态";
- let Pagination = ``;
- document.querySelector("body > div > div.mt-3 > center").innerHTML += Pagination;
- } else if (location.pathname == "/problem_solution.php") {
- if (UtilityEnabled("RemoveUseless")) {
- document.querySelector("h2.lang_en").remove(); //fixes #332
- }
- if (UtilityEnabled("CopyMD")) {
- await fetch(location.href).then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- let CopyMDButton = document.createElement("button");
- CopyMDButton.className = "btn btn-sm btn-outline-secondary copy-btn";
- CopyMDButton.innerText = "复制";
- CopyMDButton.style.marginLeft = "10px";
- CopyMDButton.type = "button";
- document.querySelector("body > div > div.mt-3 > center > h2").appendChild(CopyMDButton);
- CopyMDButton.addEventListener("click", () => {
- GM_setClipboard(ParsedDocument.querySelector("body > div > div > div").innerText.trim().replaceAll("\n\t", "\n").replaceAll("\n\n", "\n"));
- CopyMDButton.innerText = "复制成功";
- setTimeout(() => {
- CopyMDButton.innerText = "复制";
- }, 1000);
+ let CurrentPage = parseInt(SearchParams.get("page") || 0);
+ let PID = Number(SearchParams.get("id"));
+ document.title = "问题 " + PID + " 状态";
+ let Pagination = ``;
+ document.querySelector("body > div > div.mt-3 > center").innerHTML += Pagination;
+ } else if (location.pathname == "/problem_solution.php") {
+ if (UtilityEnabled("RemoveUseless")) {
+ document.querySelector("h2.lang_en").remove(); //fixes #332
+ }
+ if (UtilityEnabled("CopyMD")) {
+ await fetch(location.href).then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let CopyMDButton = document.createElement("button");
+ CopyMDButton.className = "btn btn-sm btn-outline-secondary copy-btn";
+ CopyMDButton.innerText = "复制";
+ CopyMDButton.style.marginLeft = "10px";
+ CopyMDButton.type = "button";
+ document.querySelector("body > div > div.mt-3 > center > h2").appendChild(CopyMDButton);
+ CopyMDButton.addEventListener("click", () => {
+ GM_setClipboard(ParsedDocument.querySelector("body > div > div > div").innerText.trim().replaceAll("\n\t", "\n").replaceAll("\n\n", "\n"));
+ CopyMDButton.innerText = "复制成功";
+ setTimeout(() => {
+ CopyMDButton.innerText = "复制";
+ }, 1000);
+ });
});
- });
- }
- let Temp = document.getElementsByClassName("prettyprint");
- for (let i = 0; i < Temp.length; i++) {
- let Code = Temp[i].innerText;
- Temp[i].outerHTML = ``;
- Temp[i].value = Code;
- }
- for (let i = 0; i < Temp.length; i++) {
- CodeMirror.fromTextArea(Temp[i], {
- lineNumbers: true,
- mode: "text/x-c++src",
- readOnly: true,
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
- }).setSize("100%", "auto");
- }
- } else if (location.pathname == "/open_contest.php") {
- let Temp = document.querySelector("body > div > div.mt-3 > div > div.col-md-8").children;
- let NewsData = [];
- for (let i = 0; i < Temp.length; i += 2) {
- let Title = Temp[i].children[0].innerText;
- let Time = 0;
- if (Temp[i].children[1] != null) {
- Time = Temp[i].children[1].innerText;
}
- let Body = Temp[i + 1].innerHTML;
- NewsData.push({"Title": Title, "Time": new Date(Time), "Body": Body});
- }
- document.querySelector("body > div > div.mt-3 > div > div.col-md-8").innerHTML = "";
- for (let i = 0; i < NewsData.length; i++) {
- let NewsRow = document.createElement("div");
- NewsRow.className = "cnt-row";
- let NewsRowHead = document.createElement("div");
- NewsRowHead.className = "cnt-row-head title";
- NewsRowHead.innerText = NewsData[i].Title;
- if (NewsData[i].Time.getTime() != 0) {
- NewsRowHead.innerHTML += "" + NewsData[i].Time.toLocaleDateString() + "";
+ let Temp = document.getElementsByClassName("prettyprint");
+ for (let i = 0; i < Temp.length; i++) {
+ let Code = Temp[i].innerText;
+ Temp[i].outerHTML = ``;
+ Temp[i].value = Code;
}
- NewsRow.appendChild(NewsRowHead);
- let NewsRowBody = document.createElement("div");
- NewsRowBody.className = "cnt-row-body";
- NewsRowBody.innerHTML = NewsData[i].Body;
- NewsRow.appendChild(NewsRowBody);
- document.querySelector("body > div > div.mt-3 > div > div.col-md-8").appendChild(NewsRow);
- }
- let MyContestData = document.querySelector("body > div > div.mt-3 > div > div.col-md-4 > div:nth-child(2)").innerHTML;
- let CountDownData = document.querySelector("#countdown_list").innerHTML;
- document.querySelector("body > div > div.mt-3 > div > div.col-md-4").innerHTML = `
+ for (let i = 0; i < Temp.length; i++) {
+ CodeMirror.fromTextArea(Temp[i], {
+ lineNumbers: true,
+ mode: "text/x-c++src",
+ readOnly: true,
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
+ }).setSize("100%", "auto");
+ }
+ } else if (location.pathname == "/open_contest.php") {
+ let Temp = document.querySelector("body > div > div.mt-3 > div > div.col-md-8").children;
+ let NewsData = [];
+ for (let i = 0; i < Temp.length; i += 2) {
+ let Title = Temp[i].children[0].innerText;
+ let Time = 0;
+ if (Temp[i].children[1] != null) {
+ Time = Temp[i].children[1].innerText;
+ }
+ let Body = Temp[i + 1].innerHTML;
+ NewsData.push({"Title": Title, "Time": new Date(Time), "Body": Body});
+ }
+ document.querySelector("body > div > div.mt-3 > div > div.col-md-8").innerHTML = "";
+ for (let i = 0; i < NewsData.length; i++) {
+ let NewsRow = document.createElement("div");
+ NewsRow.className = "cnt-row";
+ let NewsRowHead = document.createElement("div");
+ NewsRowHead.className = "cnt-row-head title";
+ NewsRowHead.innerText = NewsData[i].Title;
+ if (NewsData[i].Time.getTime() != 0) {
+ NewsRowHead.innerHTML += "
" + NewsData[i].Time.toLocaleDateString() + "";
+ }
+ NewsRow.appendChild(NewsRowHead);
+ let NewsRowBody = document.createElement("div");
+ NewsRowBody.className = "cnt-row-body";
+ NewsRowBody.innerHTML = NewsData[i].Body;
+ NewsRow.appendChild(NewsRowBody);
+ document.querySelector("body > div > div.mt-3 > div > div.col-md-8").appendChild(NewsRow);
+ }
+ let MyContestData = document.querySelector("body > div > div.mt-3 > div > div.col-md-4 > div:nth-child(2)").innerHTML;
+ let CountDownData = document.querySelector("#countdown_list").innerHTML;
+ document.querySelector("body > div > div.mt-3 > div > div.col-md-4").innerHTML = `
@@ -3676,83 +3743,83 @@ int main()
倒计时
${CountDownData}
`;
- } else if (location.pathname == "/showsource.php") {
- let Code = "";
- if (SearchParams.get("ByUserScript") == null) {
- document.title = "查看代码: " + SearchParams.get("id");
- await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("id"))
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- Code = Response.replace("\n\n", "");
+ } else if (location.pathname == "/showsource.php") {
+ let Code = "";
+ if (SearchParams.get("ByUserScript") == null) {
+ document.title = "查看代码: " + SearchParams.get("id");
+ await fetch("https://www.xmoj.tech/getsource.php?id=" + SearchParams.get("id"))
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ Code = Response.replace("\n\n", "");
+ });
+ } else {
+ document.title = "查看标程: " + SearchParams.get("pid");
+ if (localStorage.getItem("UserScript-LastUploadedStdTime") === undefined || new Date().getTime() - localStorage.getItem("UserScript-LastUploadedStdTime") > 1000 * 60 * 60 * 24 * 30) {
+ location.href = "https://www.xmoj.tech/userinfo.php?ByUserScript=1";
+ }
+ await new Promise((Resolve) => {
+ RequestAPI("GetStd", {
+ "ProblemID": Number(SearchParams.get("pid"))
+ }, (Response) => {
+ if (Response.Success) {
+ Code = Response.Data.StdCode;
+ } else {
+ Code = Response.Message;
+ }
+ Resolve();
+ });
});
- } else {
- document.title = "查看标程: " + SearchParams.get("pid");
- if (localStorage.getItem("UserScript-LastUploadedStdTime") === undefined || new Date().getTime() - localStorage.getItem("UserScript-LastUploadedStdTime") > 1000 * 60 * 60 * 24 * 30) {
- location.href = "https://www.xmoj.tech/userinfo.php?ByUserScript=1";
}
- await new Promise((Resolve) => {
- RequestAPI("GetStd", {
- "ProblemID": Number(SearchParams.get("pid"))
- }, (Response) => {
- if (Response.Success) {
- Code = Response.Data.StdCode;
- } else {
- Code = Response.Message;
- }
- Resolve();
- });
- });
- }
- document.querySelector("body > div > div.mt-3").innerHTML = ``;
- CodeMirror.fromTextArea(document.querySelector("body > div > div.mt-3 > textarea"), {
- lineNumbers: true,
- mode: "text/x-c++src",
- readOnly: true,
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
- }).setSize("100%", "auto");
- } else if (location.pathname == "/ceinfo.php") {
- await fetch(location.href)
- .then((Result) => {
- return Result.text();
- }).then((Result) => {
- let ParsedDocument = new DOMParser().parseFromString(Result, "text/html");
- document.querySelector("body > div > div.mt-3").innerHTML = "";
- let CodeElement = document.createElement("div");
- CodeElement.className = "mb-3";
- document.querySelector("body > div > div.mt-3").appendChild(CodeElement);
- CodeMirror(CodeElement, {
- value: ParsedDocument.getElementById("errtxt").innerHTML.replaceAll("<", "<").replaceAll(">", ">"),
- lineNumbers: true,
- mode: "text/x-c++src",
- readOnly: true,
- theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
- }).setSize("100%", "auto");
- });
- } else if (location.pathname == "/problem_std.php") {
- await fetch("https://www.xmoj.tech/problem_std.php?cid=" + SearchParams.get("cid") + "&pid=" + SearchParams.get("pid"))
- .then((Response) => {
- return Response.text();
- }).then((Response) => {
- let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
- let Temp = ParsedDocument.getElementsByTagName("pre");
- document.querySelector("body > div > div.mt-3").innerHTML = "";
- for (let i = 0; i < Temp.length; i++) {
+ document.querySelector("body > div > div.mt-3").innerHTML = ``;
+ CodeMirror.fromTextArea(document.querySelector("body > div > div.mt-3 > textarea"), {
+ lineNumbers: true,
+ mode: "text/x-c++src",
+ readOnly: true,
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
+ }).setSize("100%", "auto");
+ } else if (location.pathname == "/ceinfo.php") {
+ await fetch(location.href)
+ .then((Result) => {
+ return Result.text();
+ }).then((Result) => {
+ let ParsedDocument = new DOMParser().parseFromString(Result, "text/html");
+ document.querySelector("body > div > div.mt-3").innerHTML = "";
let CodeElement = document.createElement("div");
CodeElement.className = "mb-3";
document.querySelector("body > div > div.mt-3").appendChild(CodeElement);
CodeMirror(CodeElement, {
- value: Temp[i].innerText,
+ value: ParsedDocument.getElementById("errtxt").innerHTML.replaceAll("<", "<").replaceAll(">", ">"),
lineNumbers: true,
mode: "text/x-c++src",
readOnly: true,
theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
}).setSize("100%", "auto");
- }
- });
- } else if (location.pathname == "/mail.php") {
- if (SearchParams.get("to_user") == null) {
- document.querySelector("body > div > div.mt-3").innerHTML = `
+ });
+ } else if (location.pathname == "/problem_std.php") {
+ await fetch("https://www.xmoj.tech/problem_std.php?cid=" + SearchParams.get("cid") + "&pid=" + SearchParams.get("pid"))
+ .then((Response) => {
+ return Response.text();
+ }).then((Response) => {
+ let ParsedDocument = new DOMParser().parseFromString(Response, "text/html");
+ let Temp = ParsedDocument.getElementsByTagName("pre");
+ document.querySelector("body > div > div.mt-3").innerHTML = "";
+ for (let i = 0; i < Temp.length; i++) {
+ let CodeElement = document.createElement("div");
+ CodeElement.className = "mb-3";
+ document.querySelector("body > div > div.mt-3").appendChild(CodeElement);
+ CodeMirror(CodeElement, {
+ value: Temp[i].innerText,
+ lineNumbers: true,
+ mode: "text/x-c++src",
+ readOnly: true,
+ theme: (UtilityEnabled("DarkMode") ? "darcula" : "default")
+ }).setSize("100%", "auto");
+ }
+ });
+ } else if (location.pathname == "/mail.php") {
+ if (SearchParams.get("to_user") == null) {
+ document.querySelector("body > div > div.mt-3").innerHTML = `