diff --git a/Update.json b/Update.json index 1c7bd178..fede9840 100644 --- a/Update.json +++ b/Update.json @@ -3288,6 +3288,17 @@ } ], "Notes": "No release notes were provided for this release." + }, + "2.7.3": { + "UpdateDate": 1770436447016, + "Prerelease": true, + "UpdateContents": [ + { + "PR": 901, + "Description": "Add isSubmitting flags to prevent multiple submissions" + } + ], + "Notes": "No release notes were provided for this release." } } } \ No newline at end of file diff --git a/XMOJ.user.js b/XMOJ.user.js index 035aa0e0..002c5a83 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name XMOJ -// @version 2.7.2 +// @version 2.7.3 // @description XMOJ增强脚本 // @author @XMOJ-Script-dev, @langningchen and the community // @namespace https://github/langningchen @@ -2667,11 +2667,17 @@ async function main() { ErrorMessage.innerText = "提交失败!请关闭脚本后重试!"; Submit.disabled = false; Submit.value = "提交"; + isSubmitting = false; } }) }); + let isSubmitting = false; Submit.addEventListener("click", async () => { + if (isSubmitting) { + return; + } + isSubmitting = true; PassCheck.style.display = "none"; ErrorElement.style.display = "none"; document.querySelector("#Submit").disabled = true; @@ -2721,6 +2727,7 @@ async function main() { freopenCodeField.setSize("100%", "auto"); document.querySelector("#Submit").disabled = false; document.querySelector("#Submit").value = "提交"; + isSubmitting = false; return false; } else if (RegExp("//.*freopen").test(Source)) { PassCheck.style.display = ""; @@ -2729,6 +2736,7 @@ async function main() { ErrorMessage.innerText = "请不要注释freopen语句"; document.querySelector("#Submit").disabled = false; document.querySelector("#Submit").value = "提交"; + isSubmitting = false; return false; } } @@ -2739,6 +2747,7 @@ async function main() { ErrorMessage.innerText = "源代码为空"; document.querySelector("#Submit").disabled = false; document.querySelector("#Submit").value = "提交"; + isSubmitting = false; return false; } if (UtilityEnabled("CompileError")) { @@ -2761,6 +2770,7 @@ async function main() { ErrorMessage.innerText = "编译错误:\n" + Response.stderr.trim(); document.querySelector("#Submit").disabled = false; document.querySelector("#Submit").value = "提交"; + isSubmitting = false; return false; } else { PassCheck.click(); @@ -4378,22 +4388,30 @@ int main() } } }); + let isSubmittingPost = false; SubmitElement.addEventListener("click", async () => { + if (isSubmittingPost) { + return; + } + isSubmittingPost = true; ErrorElement.style.display = "none"; let Title = TitleElement.value; let Content = ContentElement.value; let ProblemID = parseInt(SearchParams.get("pid")); if (Title === "") { TitleElement.classList.add("is-invalid"); + isSubmittingPost = false; return; } if (Content === "") { ContentElement.classList.add("is-invalid"); + isSubmittingPost = false; return; } if (document.querySelector("#Board input:checked") === null) { ErrorElement.innerText = "请选择要发布的板块"; ErrorElement.style.display = "block"; + isSubmittingPost = false; return; } SubmitElement.disabled = true; @@ -4407,6 +4425,7 @@ int main() }, (ResponseData) => { SubmitElement.disabled = false; SubmitElement.children[0].style.display = "none"; + isSubmittingPost = false; if (ResponseData.Success == true) { location.href = "https://www.xmoj.tech/discuss3/thread.php?tid=" + ResponseData.Data.PostID; } else { @@ -4897,7 +4916,12 @@ int main() } }); }); + let isSubmittingReply = false; SubmitElement.addEventListener("click", async () => { + if (isSubmittingReply) { + return; + } + isSubmittingReply = true; ErrorElement.style.display = "none"; SubmitElement.disabled = true; SubmitElement.children[0].style.display = "inline-block"; @@ -4908,6 +4932,7 @@ int main() }, async (ResponseData) => { SubmitElement.disabled = false; SubmitElement.children[0].style.display = "none"; + isSubmittingReply = false; if (ResponseData.Success == true) { RefreshReply(); ContentElement.value = ""; @@ -4944,4 +4969,4 @@ int main() main().then(r => { console.log("XMOJ-Script loaded successfully!"); -}); \ No newline at end of file +}); diff --git a/package.json b/package.json index d558b7ac..3c315c9f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xmoj-script", - "version": "2.7.2", + "version": "2.7.3", "description": "an improvement script for xmoj.tech", "main": "AddonScript.js", "scripts": {