From e6653cc6d5ec49a64341460c72b3db35ac80f415 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 01:19:08 +0000 Subject: [PATCH 1/5] Initial plan From c1e52467a9728ae044e41145b86ae07d71ff1646 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 01:22:23 +0000 Subject: [PATCH 2/5] Address review feedback: fix accessibility, modal exclusion, currentSrc, and MutationObserver performance Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com> --- XMOJ.user.js | 69 +++++++++++++++++++++++----------------------------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/XMOJ.user.js b/XMOJ.user.js index b2f990ed..b4dfc714 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -5590,26 +5590,6 @@ int main() transition: opacity 0.2s ease; } - .xmoj-image-preview::after { - content: "点击放大"; - position: absolute; - background-color: rgba(0, 0, 0, 0.7); - color: white; - padding: 5px 10px; - border-radius: 3px; - font-size: 12px; - white-space: nowrap; - pointer-events: none; - opacity: 0; - transition: opacity 0.2s ease; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } - - .xmoj-image-preview:hover::after { - opacity: 1; - } .xmoj-image-modal { display: none; @@ -5691,8 +5671,11 @@ int main() ImageModal.className = "xmoj-image-modal"; ImageModal.id = "xmoj-image-modal"; - let CloseButton = document.createElement("span"); + let CloseButton = document.createElement("button"); CloseButton.className = "xmoj-image-modal-close"; + CloseButton.type = "button"; + CloseButton.setAttribute("aria-label", "关闭图片"); + CloseButton.title = "关闭图片"; CloseButton.innerHTML = "×"; ImageModal.appendChild(CloseButton); @@ -5804,23 +5787,24 @@ int main() }); // Apply to all images on the page + let ApplyEnlargerToImage = (img) => { + if (!img.classList.contains("xmoj-image-preview") && + !img.closest(".xmoj-image-modal") && + img.src && + !img.src.includes("gravatar") && + !img.src.includes("cravatar")) { + + img.classList.add("xmoj-image-preview"); + img.title = "点击放大"; + img.addEventListener("click", (e) => { + e.stopPropagation(); + OpenImageModal(img.currentSrc || img.src); + }); + } + }; + let ApplyEnlargerToImages = () => { - let Images = document.querySelectorAll("img"); - Images.forEach((img) => { - if (!img.classList.contains("xmoj-image-preview") && - !img.parentElement.classList.contains("xmoj-image-modal") && - img.src && - !img.src.includes("gravatar") && - !img.src.includes("cravatar")) { - - img.classList.add("xmoj-image-preview"); - img.style.position = "relative"; - img.addEventListener("click", (e) => { - e.stopPropagation(); - OpenImageModal(img.src); - }); - } - }); + document.querySelectorAll("img").forEach(ApplyEnlargerToImage); }; // Apply to existing images @@ -5828,7 +5812,16 @@ int main() // Apply to dynamically added images let Observer = new MutationObserver((mutations) => { - ApplyEnlargerToImages(); + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((node) => { + if (node.nodeType !== Node.ELEMENT_NODE) return; + if (node.tagName === "IMG") { + ApplyEnlargerToImage(node); + } else { + node.querySelectorAll("img").forEach(ApplyEnlargerToImage); + } + }); + }); }); Observer.observe(document.body, { From 9b68c78f59c4dc775badfe5894ebad2383ba6398 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 01:26:34 +0000 Subject: [PATCH 3/5] Fix close button background: reset browser default button styles Co-authored-by: PythonSmall-Q <106425289+PythonSmall-Q@users.noreply.github.com> --- XMOJ.user.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/XMOJ.user.js b/XMOJ.user.js index b4dfc714..b5f9d6a5 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -5654,6 +5654,10 @@ int main() top: 20px; right: 30px; color: white; + background: none; + border: none; + padding: 0; + line-height: 1; font-size: 40px; font-weight: bold; cursor: pointer; From 2b8330db5800892ec2ffb23818020c2914a5238c Mon Sep 17 00:00:00 2001 From: Shan Wenxiao Date: Sat, 7 Mar 2026 09:35:05 +0800 Subject: [PATCH 4/5] Update XMOJ.user.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Shan Wenxiao --- XMOJ.user.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/XMOJ.user.js b/XMOJ.user.js index b5f9d6a5..203b627e 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -5792,17 +5792,18 @@ int main() // Apply to all images on the page let ApplyEnlargerToImage = (img) => { - if (!img.classList.contains("xmoj-image-preview") && + const effectiveSrc = img.currentSrc || img.src; + if (!img.classList.contains("xmoj-image-preview") && !img.closest(".xmoj-image-modal") && - img.src && - !img.src.includes("gravatar") && - !img.src.includes("cravatar")) { - + effectiveSrc && + !effectiveSrc.includes("gravatar") && + !effectiveSrc.includes("cravatar")) { + img.classList.add("xmoj-image-preview"); img.title = "点击放大"; img.addEventListener("click", (e) => { e.stopPropagation(); - OpenImageModal(img.currentSrc || img.src); + OpenImageModal(effectiveSrc); }); } }; From 259cc7ae833c8c3f31f5a0fd9ae22785ce23c623 Mon Sep 17 00:00:00 2001 From: Shan Wenxiao Date: Sat, 7 Mar 2026 09:35:20 +0800 Subject: [PATCH 5/5] Update XMOJ.user.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Shan Wenxiao --- XMOJ.user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/XMOJ.user.js b/XMOJ.user.js index 203b627e..f4459add 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -5800,7 +5800,9 @@ int main() !effectiveSrc.includes("cravatar")) { img.classList.add("xmoj-image-preview"); - img.title = "点击放大"; + if (!img.title) { + img.title = "点击放大"; + } img.addEventListener("click", (e) => { e.stopPropagation(); OpenImageModal(effectiveSrc);