From e5a9ab3e31c752d1e90f3d98c8833a9e86231f0e Mon Sep 17 00:00:00 2001 From: langningc2009 Date: Thu, 24 Aug 2023 11:33:22 +0800 Subject: [PATCH 01/27] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/README.md b/README.md index e55ad143..28c1835c 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,74 @@ ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/langningchen/XMOJ-Script) ![GitHub release](https://img.shields.io/github/v/release/langningchen/XMOJ-Script) ![GitHub issues](https://img.shields.io/github/issues/langningchen/XMOJ-Script) + +[点击此处访问官网查看更多内容](https://web.xmoj-bbs.tech) + +### 介绍 + +XMOJ增强脚本是一个功能强大的浏览器扩展,旨在提升用户在XMOJ(虚拟在线竞赛平台)上的使用体验。 +该脚本通过添加多种实用功能和界面优化,使用户能够更高效地参与竞赛、管理代码和享受更好的界面交互。 + +- **比赛ACM排名与下载功能**:允许用户查看比赛的ACM排名,并提供下载选项,方便离线查阅。 +- **查看更多标程**:展示更多的标准程序代码,帮助用户更好地理解题目要求和正确解法。 +- **获取别人的测试点数据**:允许用户获取其他人的测试点数据,用于分析问题和优化代码。 +- **自动刷新比赛列表与排名**:使比赛列表和排名页面自动定时刷新,获取最新信息。 +- **界面时间自动倒计时**:在比赛列表等界面上自动显示剩余时间倒计时,方便用户了解时间情况。 +- **回放视频下载功能**:为回放视频添加下载选项,方便用户离线观看回放。 +- **自动提交已AC题目**:自动将已通过的题目再次提交,提高题目的通过率。 +- **自动选择O2优化**:在代码提交界面自动选择O2优化选项,提高代码效率。 +- **界面美化**:改善界面外观,提供更好的用户体验。 + - 使用新版的Bootstrap样式库:更新界面样式,使之更现代。 + - 重新排版:对界面进行重新排版,提高可读性。 + - 增加彩色文字:为界面增加彩色文字元素,增添视觉吸引力。 + - 状态界面添加单位:为状态界面的内存和耗时添加单位,方便理解。 + - 暗色模式:引入暗色模式,减少眼部疲劳。 + - 增加动画:为界面元素增加动画效果,提升交互体验。 + - 对错符号替换:将题目前的对错符号替换为勾和叉,更直观。 + - 去除多余提示:消除界面上多余反复的提示信息。 + - 中文翻译:统一使用中文,翻译部分英文内容,提高可理解性。 + - 替换链接为按钮:将方括号包装的链接替换为按钮,提升操作便捷性。 + - 移除无用功能:去除无法使用的功能,精简界面。 + - 关键词替换:将特定关键词替换为相应内容,增强可读性。 +- **自动跳转到登录界面**:在需要登录的页面自动跳转到登录界面,提高操作便捷性。 +- **自动保存用户名与密码**:自动保存登录信息,免去每次手动输入的步骤。 +- **复制测试样例**:在题目界面复制测试样例内容,方便粘贴到本地编辑器。 +- **自动刷新状态页面结果**:使状态页面中的结果自动刷新,便于实时查看变化。 +- **复制题目或题解内容**:允许用户复制题目或题解的内容,方便保存和分享。 +- **一键打开所有题目**:在比赛题目界面一键打开所有题目,提高操作效率。 +- **代码检查功能**:在提交代码前对代码进行检查,以确保代码质量。 + - 是否使用了文件输入输出:检查是否正确使用了文件输入输出功能。 + - 是否有编译错误:检查是否存在编译错误,避免提交无效代码。 +- **登录后跳转失败**:解决登录后跳转问题,确保用户能够顺利进入下一步操作。 +- **下载页面增加内容**:在下载页面增加更多内容,提供更多资源下载。 +- **比较代码**:允许用户比较不同版本的代码,方便进行代码对比与分析。 + +![](Image/01.png) +![](Image/02.png) +![](Image/03.png) +![](Image/04.png) +![](Image/05.png) +![](Image/06.png) +![](Image/07.png) +![](Image/08.png) +![](Image/09.png) +![](Image/10.png) +![](Image/11.png) +![](Image/12.png) +![](Image/13.png) +![](Image/14.png) +![](Image/15.png) +![](Image/16.png) +![](Image/17.png) +![](Image/18.png) +![](Image/19.png) +![](Image/20.png) + +通过XMOJ增强脚本,您将能够更便捷地参与竞赛,提高AC率,管理代码,优化学习体验,同时享受美化界面带来的愉悦感受。 +无论是竞技还是学习,这个脚本都将成为您在XMOJ平台上的得力助手。 +无论您是新手还是经验丰富的竞赛选手,XMOJ增强脚本都将为您的比赛体验带来前所未有的便利和效率。 +立即安装并体验吧! + + +### 安装 +请参考 [官网介绍](https://web.xmoj-bbs.tech) 。 From 32a0f8d75014a3180ff4f2eb9e861796453363f7 Mon Sep 17 00:00:00 2001 From: Zhu Chenrui <85378277+boomzero@users.noreply.github.com> Date: Thu, 24 Aug 2023 13:28:29 +0800 Subject: [PATCH 02/27] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=AF=94=E8=BE=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compare.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/Compare.md b/Compare.md index b950ec1d..b97872bd 100644 --- a/Compare.md +++ b/Compare.md @@ -1,21 +1,23 @@ -| 项目 | 小明的OJ外挂论坛 | XMOJ增强脚本 | +| 项目 | 小明的OJ 论坛 | XMOJ增强脚本 | | :--------- | :----------------------------------- | :------------------------------------------- | -| Markdown | :+1: 支持 | :+1: 支持 | -| 域名 | :x: 使用共享域名 | :x: 使用共享域名 | -| 安全性 | :+1: 使用 Cloudflare保护 | :x: 没有任何保护 | -| 安装方式 | :+1: 无需安装,直接使用 | :x: 需要安装用户脚本管理器 | -| 开发过程 | :x: 套的模板,只有很少一部分是手写的 | :+1: 从零开始手写开发 | +| 界面 | :+1: 界面很好看 | :x: 界面不是很好看 | +| `Markdown` | :+1: 支持 | :+1: 支持 | +| `KaTex` | :+1: 支持 | :+1: 支持 | +| 论坛功能 | :+1: 支持投票、邮件提醒、博客、头像等衍生功能 | :x: 仅支持论坛 | | 总体功能 | :x: 仅支持论坛与Blog | :+1: 支持ACM排名等多种实用功能 | -| 服务器地点 | :x: 美国 | :x: 英国纽卡斯尔市 | -| 服务器开源 | :+1: 在Github上开源 | :+1: 在Github上开源 | -| 浏览 | :x: 打开需要隐私浏览或者清理历史记录 | :+1: 访问后看到的域名也是XMOJ | +| 浏览 | :x: 访问后看到的不是XMOJ域名 | :+1: 访问后看到的域名也是XMOJ | | 版本 | :+1: 已经进行了稳定的发布 | :+1: 已经进行了稳定的发布 | -| 界面 | :+1: 界面很好看 | :x: 界面不是很好看 | -| 稳定性 | :x: 服务器有的时候会崩溃 | :x: 服务器有的时候会崩溃 | | 管理 | :+1: 管理内容丰富 | :x: 无法进行细致的管理 | -| 言论安全性 | :+1: 评论可以被自动过滤 | :x: 评论只能管理员手动删除 | -| 言论自由度 | :x: 评论可能会被自动屏蔽 | :+1: 管理员一般不会删除评论 | -| 论坛功能 | :+1: 支持投票、邮件提醒 | :x: 仅支持论坛 | -| 账号 | :x: 需要注册账号或者使用第三方登录 | :+1: 与XMOJ账号通用,自动登录 | | 隐私 | :x: “小明”可以看到你发的内容 | :+1: 你的浏览记录完全被保护不会被“小明”看到 | -| ChatGPT | :x: 认为外挂论坛不好 | :+1: 认为增强脚本很好 | +| 稳定性 | :x: 服务器相对稳定 (请勿使用共享办公室WiFi访问) | :+1: 服务器稳定 | +| 安全性 | :+1: 使用Cloudflare保护 | :+1: 使用Cloudflare保护 | +| 服务器开源 | :+1: 在Github上开源 | :+1: 在Github上开源 | +| 开发过程 | :x: 套的模板,加入了权限、昵称、CDN等 | :+1: 从零开始手写开发 | +| 服务器地点 | :+1: 中国贵州贵阳市+Cloudflare泛播 | :+1: Cloudflare泛播 | +| 域名 | :x: 使用共享域名(单独域名申请中) | :+1: 使用单独域名 | +| 安装方式 | :+1: 无需安装,直接使用 | :x: 需要安装用户脚本管理器 +| 账号 | :x: 需要注册账号或者使用第三方登录 | :+1: 与XMOJ账号通用,自动登录 | +| 言论安全性 | :+1: 评论可以被自动过滤 | :x: 评论只能管理员手动删除 | +| 言论自由度 | :x: 攻击性发言可能会被自动屏蔽 | :+1: 管理员一般不会删除评论 | +| 网站安全性 | :+1: 使用SSL证书加密 | :+1: 使用SSL证书加密 | +| ChatGPT | :x: ChatGPT认为不好 | :+1: ChatGPT认为很好| From fb076d0629c6eb3d89567c035f8abb2dd02eeed1 Mon Sep 17 00:00:00 2001 From: langningc2009 Date: Thu, 24 Aug 2023 14:44:07 +0800 Subject: [PATCH 03/27] =?UTF-8?q?[#60]=20=E5=9C=A8=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=A2=9E=E5=8A=A0=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XMOJ.user.js | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/XMOJ.user.js b/XMOJ.user.js index 46ba85a9..b066f691 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -48,6 +48,18 @@ let GetRating = async (Username) => { localStorage.setItem("UserScript-UserRating-" + Username + "-Time", new Date().getTime()); return Rating; }; +let GetUsernameColorClass = async (Username) => { + let Rating = await GetRating(Username); + if (Rating > 500) { + return "link-danger"; + } else if (Rating >= 400) { + return "link-warning"; + } else if (Rating >= 300) { + return "link-success"; + } else { + return "link-info"; + } +} let SecondsToString = (InputSeconds) => { let Hours = Math.floor(InputSeconds / 3600); let Minutes = Math.floor((InputSeconds % 3600) / 60); @@ -1671,17 +1683,11 @@ else { UsernameLink.href = "userinfo.php?user=" + RowData.Username; UsernameLink.innerText = RowData.Username; UsernameLink.className = "link-primary link-offset-2 link-underline-opacity-50"; if (UtilityEnabled("Rating")) { - let rating = await GetRating(RowData.Username).then(); if (RowData.QuickSubmitCount >= 2) { UsernameLink.className += " link-info"; - } else if (rating > 500) { - UsernameLink.className += " link-danger"; - } else if (rating >= 400) { - UsernameLink.className += " link-warning"; - } else if (rating >= 300) { - UsernameLink.className += " link-success"; } else { - UsernameLink.className += " link-info"; + debugger + UsernameLink.className += " " + (await GetUsernameColorClass(RowData.Username)); } } if (RowData.Username == document.getElementById("profile").innerText) { @@ -2967,7 +2973,7 @@ else { RequestAPI("GetPosts", { "ProblemID": Number(ProblemID || 0), "Page": Number(Page) - }, (ResponseData) => { + }, async (ResponseData) => { if (ResponseData.Success == true) { ErrorElement.style.display = "none"; if (!Silent) { @@ -2994,11 +3000,11 @@ else { PostList.children[1].innerHTML += ` ${Posts[i].PostID} ${Posts[i].Title} - ${Posts[i].UserID}` + + ${Posts[i].UserID}` + (Posts[i].ProblemID == 0 ? `` : `${Posts[i].ProblemID}`) + `${Posts[i].PostTime} ${Posts[i].ReplyCount} - ${Posts[i].LastReplyUserID} ${Posts[i].LastReplyTime} + ${Posts[i].LastReplyUserID} ${Posts[i].LastReplyTime} `; } } From 5b70ba3d9a8eb96ff6979a63351717b38db8d432 Mon Sep 17 00:00:00 2001 From: langningc2009 Date: Thu, 24 Aug 2023 14:47:10 +0800 Subject: [PATCH 04/27] =?UTF-8?q?[#58]=20=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E9=80=9A=E8=BF=87=E4=B9=8B=E5=89=8D=E4=B8=8D?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XMOJ.user.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/XMOJ.user.js b/XMOJ.user.js index b066f691..00ed290f 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -3028,7 +3028,7 @@ else {
- @@ -3040,6 +3040,7 @@ else { sitekey: CaptchaSiteKey, callback: function (CaptchaSecretKeyValue) { CaptchaSecretKey.value = CaptchaSecretKeyValue; + SubmitElement.disabled = false; }, }); }; @@ -3120,7 +3121,7 @@ else {
- @@ -3132,6 +3133,7 @@ else { sitekey: CaptchaSiteKey, callback: function (CaptchaSecretKeyValue) { CaptchaSecretKey.value = CaptchaSecretKeyValue; + SubmitElement.disabled = false; }, }); }; From 714b25b91427dd875808bd404433936bf65578fc Mon Sep 17 00:00:00 2001 From: langningc2009 Date: Thu, 24 Aug 2023 14:56:53 +0800 Subject: [PATCH 05/27] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XMOJ.user.js | 8 ++++---- index.html | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/XMOJ.user.js b/XMOJ.user.js index 00ed290f..49f9f6dd 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -481,7 +481,7 @@ else { } }, 100); - fetch("https://langningchen.github.io/XMOJ-Script/Update.json", { cache: "no-cache" }) + fetch("https://web.xmoj-bbs.tech/Update.json", { cache: "no-cache" }) .then((Response) => { return Response.json(); }) @@ -493,7 +493,7 @@ else { UpdateDiv.innerHTML = `