diff --git a/._Update.json b/._Update.json
new file mode 100644
index 00000000..7ebf9cdf
Binary files /dev/null and b/._Update.json differ
diff --git a/._package.json b/._package.json
new file mode 100644
index 00000000..7ebf9cdf
Binary files /dev/null and b/._package.json differ
diff --git a/.github/workflows/AutoLabelIssue.yml b/.github/workflows/AutoLabelIssue.yml
index 4bea3674..5258387f 100644
--- a/.github/workflows/AutoLabelIssue.yml
+++ b/.github/workflows/AutoLabelIssue.yml
@@ -14,7 +14,7 @@ jobs:
fetch-depth: 0
- name: Generate a token
id: generate_token
- uses: actions/create-github-app-token@v1
+ uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/.github/workflows/AutoLablePR.yml b/.github/workflows/AutoLablePR.yml
index a9811485..cb6a4abf 100644
--- a/.github/workflows/AutoLablePR.yml
+++ b/.github/workflows/AutoLablePR.yml
@@ -13,7 +13,7 @@ jobs:
steps:
- name: Generate a token
id: generate_token
- uses: actions/create-github-app-token@v1
+ uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/.github/workflows/Daily.yml b/.github/workflows/Daily.yml
index 47c64980..a4695afe 100644
--- a/.github/workflows/Daily.yml
+++ b/.github/workflows/Daily.yml
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Generate a token
id: generate_token
- uses: actions/create-github-app-token@v1
+ uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/.github/workflows/Prerelease.yml b/.github/workflows/Prerelease.yml
index 9db58f06..799f4f7d 100644
--- a/.github/workflows/Prerelease.yml
+++ b/.github/workflows/Prerelease.yml
@@ -13,7 +13,7 @@ jobs:
steps:
- name: Generate a token
id: generate_token
- uses: actions/create-github-app-token@v1
+ uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml
index e6777c3d..b2daa4bc 100644
--- a/.github/workflows/Release.yml
+++ b/.github/workflows/Release.yml
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Generate a token
id: generate_token
- uses: actions/create-github-app-token@v1
+ uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/.github/workflows/UpdateVersion.yml b/.github/workflows/UpdateVersion.yml
index e77c9093..c13c0017 100644
--- a/.github/workflows/UpdateVersion.yml
+++ b/.github/workflows/UpdateVersion.yml
@@ -17,7 +17,7 @@ jobs:
steps:
- name: Generate a token
id: generate_token
- uses: actions/create-github-app-token@v1
+ uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/Update.json b/Update.json
index 2f0f30a3..7174ea30 100644
--- a/Update.json
+++ b/Update.json
@@ -2777,6 +2777,17 @@
}
],
"Notes": "No release notes were provided for this release."
+ },
+ "1.5.1": {
+ "UpdateDate": 1745307653685,
+ "Prerelease": true,
+ "UpdateContents": [
+ {
+ "PR": 791,
+ "Description": "remove ACM rankings"
+ }
+ ],
+ "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 522a79ca..e7e25384 100644
--- a/XMOJ.user.js
+++ b/XMOJ.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name XMOJ
-// @version 1.5.0
+// @version 1.5.1
// @description XMOJ增强脚本
// @author @XMOJ-Script-dev, @langningchen and the community
// @namespace https://github/langningchen
@@ -665,13 +665,6 @@ async function main() {
document.querySelector("#navbar > ul:nth-child(1)").appendChild(Discussion);
Discussion.innerHTML = "讨论";
}
-
- if (document.querySelector("#navbar > ul:nth-child(1)").childElementCount > 8 && UtilityEnabled("ACMRank")) {
- let ACMRank = document.createElement("li");
- document.querySelector("#navbar > ul:nth-child(1)").insertBefore(ACMRank, document.querySelector("#navbar > ul:nth-child(1) > li:nth-child(9)"));
- ACMRank.innerHTML = "ACM 排名";
- ACMRank.classList.add("active");
- }
if (UtilityEnabled("Translate")) {
document.querySelector("#navbar > ul:nth-child(1) > li:nth-child(2) > a").innerText = "题库";
}
@@ -1356,9 +1349,7 @@ async function main() {
}
return List;
};
- UtilitiesCardBody.appendChild(CreateList([{
- "ID": "ACMRank", "Type": "A", "Name": "比赛ACM排名,并且能下载ACM排名"
- }, {"ID": "Discussion", "Type": "F", "Name": "恢复讨论与短消息功能"}, {
+ UtilitiesCardBody.appendChild(CreateList([{"ID": "Discussion", "Type": "F", "Name": "恢复讨论与短消息功能"}, {
"ID": "MoreSTD", "Type": "F", "Name": "查看到更多标程"
}, {"ID": "ApplyData", "Type": "A", "Name": "获取数据功能"}, {
"ID": "AutoCheat", "Type": "A", "Name": "自动提交当年代码"
@@ -2293,397 +2284,6 @@ async function main() {
addEventListener("focus", RefreshOIRank);
}
}
- } else if (UtilityEnabled("ACMRank")) {
- if (document.querySelector("body > div > div.mt-3 > center > h3").innerText != "比赛排名") {
- 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) + "(ACM排名)";
- }
- let RankData = [];
- let RefreshACMRank = async (ProblemCount) => {
- let LastPositionX = scrollX;
- let LastPositionY = scrollY;
- let NewURL = new URL(location.href);
- NewURL.pathname = "/contestrank2.php";
- await fetch(NewURL.toString())
- .then((Response) => {
- return Response.text()
- })
- .then(async (Response) => {
- RankData = [];
- let Table = document.querySelector("#rank");
- Table.classList.add("table");
- Table.innerHTML = "";
- let StartPosition = Response.indexOf("var solutions=") + 14;
- let EndPosition = Response.indexOf("}];", StartPosition) + 2;
- if (EndPosition == 1) {
- Table.innerHTML = "暂时还没有人提交呢";
- } else {
- let SubmitRecord = JSON.parse(Response.substring(StartPosition, EndPosition));
-
- for (let i = 0; i < SubmitRecord.length; i++) {
- let CurrentSubmission = SubmitRecord[i];
- let CurrentRow = RankData.find((CurrentRow) => {
- if (CurrentRow.Username == CurrentSubmission.user_id) {
- return true;
- }
- });
- if (CurrentRow == null) {
- CurrentRow = {
- Username: CurrentSubmission.user_id,
- Nickname: CurrentSubmission.nick,
- Solved: 0,
- Penalty: 0,
- Problem: [],
- QuickSubmitCount: 0
- };
- RankData.push(CurrentRow);
- }
- let CurrentProblem = CurrentRow.Problem.find((CurrentRow) => {
- if (CurrentRow.Index == CurrentSubmission.num) {
- return true;
- }
- });
- if (CurrentProblem == null) {
- CurrentProblem = {
- Index: CurrentSubmission.num, Attempts: [], SolveTime: 0
- };
- CurrentRow.Problem.push(CurrentProblem);
- }
- if (CurrentSubmission.result == 4 && CurrentProblem.SolveTime == 0) {
- CurrentProblem.SolveTime = parseInt(CurrentSubmission.in_date);
- CurrentRow.Solved++;
- CurrentRow.Penalty += parseInt(CurrentSubmission.in_date) + CurrentProblem.Attempts.length * 20 * 60;
- }
- CurrentProblem.Attempts.push({
- Time: CurrentSubmission.in_date, Result: CurrentSubmission.result
- });
- }
-
- for (let i = 0; i < RankData.length; i++) {
- for (let j = 0; j < RankData[i].Problem.length; j++) {
- for (let k = 0; k < RankData[i].Problem.length; k++) {
- if (j != k && RankData[i].Problem[j].SolveTime != 0 && RankData[i].Problem[k].SolveTime != 0 && Math.abs(RankData[i].Problem[j].SolveTime - RankData[i].Problem[k].SolveTime) < 60) {
- RankData[i].QuickSubmitCount++;
- }
- }
- }
- }
-
- RankData.sort((a, b) => {
- if (a.Solved != b.Solved) {
- return a.Solved < b.Solved ? 1 : -1;
- } else if (a.Penalty != b.Penalty) {
- return a.Penalty > b.Penalty ? 1 : -1;
- }
- return 0;
- });
-
- let Header = document.createElement("thead");
- Table.appendChild(Header);
- let RowHeader = document.createElement("tr");
- Header.appendChild(RowHeader);
- let MetalHeader = document.createElement("th");
- RowHeader.appendChild(MetalHeader);
- MetalHeader.innerText = "排名";
- MetalHeader.style.width = "5%";
- let UsernameHeader = document.createElement("th");
- RowHeader.appendChild(UsernameHeader);
- UsernameHeader.innerText = "用户";
- UsernameHeader.style.width = "10%";
- let NicknameHeader = document.createElement("th");
- RowHeader.appendChild(NicknameHeader);
- NicknameHeader.innerText = "昵称";
- NicknameHeader.style.width = "10%";
- let NameHeader = document.createElement("th");
- RowHeader.appendChild(NameHeader);
- NameHeader.innerText = "姓名";
- NameHeader.style.width = "5%";
- let SolvedHeader = document.createElement("th");
- RowHeader.appendChild(SolvedHeader);
- SolvedHeader.innerText = "AC数";
- SolvedHeader.style.width = "5%";
- let PenaltyHeader = document.createElement("th");
- RowHeader.appendChild(PenaltyHeader);
- PenaltyHeader.innerText = "罚时";
- PenaltyHeader.style.width = "10%";
-
- for (let i = 0; i < ProblemCount; i++) {
- let ProblemHeader = document.createElement("th");
- RowHeader.appendChild(ProblemHeader);
- let ProblemLink = document.createElement("a");
- ProblemHeader.appendChild(ProblemLink);
- ProblemLink.href = "problem.php?cid=" + SearchParams.get("cid") + "&pid=" + i;
- ProblemLink.innerText = String.fromCharCode(65 + i);
- ProblemHeader.classList.add("header");
- ProblemHeader.style.width = (50 / ProblemCount) + "%";
- }
-
- let Body = document.createElement("tbody");
- Table.appendChild(Body);
- Body.className = "table-group-divider";
- for (let i = 0; i < RankData.length; i++) {
- let RowData = RankData[i];
- let Row = document.createElement("tr");
- Body.appendChild(Row);
- let MetalCell = document.createElement("td");
- Row.appendChild(MetalCell);
- let UsernameCell = document.createElement("td");
- Row.appendChild(UsernameCell);
- let NicknameCell = document.createElement("td");
- Row.appendChild(NicknameCell);
- let NameCell = document.createElement("td");
- Row.appendChild(NameCell);
- let SolvedCell = document.createElement("td");
- Row.appendChild(SolvedCell);
- let PenaltyCell = document.createElement("td");
- Row.appendChild(PenaltyCell);
-
- let Medal = document.createElement("span");
- MetalCell.appendChild(Medal);
- Medal.innerText = i + 1;
- Medal.classList.add("badge");
- if (i <= RankData.length * 0.05) {
- Medal.classList.add("text-bg-danger");
- } else if (i <= RankData.length * 0.15) {
- Medal.classList.add("text-bg-warning");
- } else if (i <= RankData.length * 0.4) {
- Medal.classList.add("text-bg-primary");
- } else {
- Medal.classList.add("text-bg-secondary");
- }
-
- let UsernameSpan = document.createElement("span");
- UsernameCell.appendChild(UsernameSpan);
- GetUsernameHTML(UsernameSpan, RowData.Username);
- if (RowData.Username == CurrentUsername) {
- Row.classList.add("table-primary");
- }
- if (RowData.QuickSubmitCount >= 2) {
- let QuickSubmitBadge = document.createElement("span");
- UsernameCell.appendChild(QuickSubmitBadge);
- QuickSubmitBadge.innerText = "疑似提交当年代码";
- QuickSubmitBadge.className = "badge text-bg-warning ms-2";
- }
-
- NicknameCell.innerText = (RowData.Nickname.length < 16 ? RowData.Nickname : RowData.Nickname.substring(0, 15) + "...");
-
- let Names = {
- "chenlangning": "陈朗宁",
- "chensiru": "陈斯如",
- "chensiqi": "陈思齐",
- "chentianle": "陈天乐",
- "chenxi": "陈曦",
- "chenxuanhe": "陈宣合",
- "chenyiming5": "陈一铭",
- "chenzecong": "陈泽聪",
- "chenzerui": "陈泽睿",
- "danwenxiao": "单文骁",
- "dengwanting": "邓万廷",
- "dongminghui": "董明辉",
- "dujianping": "杜建平",
- "fanxiaoran": "范小冉",
- "gaochenming": "高晨茗",
- "guhongran": "顾泓然",
- "guoluxi": "郭麓羲",
- "guoqingtong": "郭庆桐",
- "guoruiqun": "郭睿群",
- "guyuchen": "顾毓辰",
- "guzheran": "顾哲然",
- "hanshujian": "韩书简",
- "heshuhan": "贺书瀚",
- "hexinyi": "何昕弈",
- "huheng": "胡恒",
- "huangkai": "黄开",
- "huangmingxuan": "黄铭宣",
- "huangruina": "黄睿纳",
- "huangwei": "黄唯",
- "huyiyang": "胡以杨",
- "hongshaolin": "洪绍霖",
- "jiangxingyu": "姜星宇",
- "jingtaiyu": "荆泰宇",
- "jinweizhe": "金炜喆",
- "leijiahan": "雷家涵",
- "leizihao": "雷子昊",
- "leiwenda": "雷文达",
- "lidonglin": "李东霖",
- "lihanzhang": "李含章",
- "lijiayi": "李佳毅",
- "limingrui": "李明睿",
- "lishinong": "李诗浓",
- "lizhishan": "李执善",
- "lianzhongzhe": "连中哲",
- "liaoyanxu": "廖彦旭",
- "lingzixiang": "凌梓翔",
- "linziyi": "林子懿",
- "liujianhao": "刘健豪",
- "liujiankun": "刘健坤",
- "liuxianyong": "刘先勇",
- "liuxixian": "刘希贤",
- "liuyuxi": "刘雨夕",
- "liyihan": "李亦涵",
- "lejingyuan": "乐静远",
- "luhanlin": "陆涵琳",
- "lutianfeng": "陆天枫",
- "luojinyang": "罗金阳",
- "lvhouxi": "吕厚希",
- "meitianyi": "梅天一",
- "niruolin": "倪若琳",
- "panyinliang": "潘胤良",
- "pengyixuan": "彭议萱",
- "putong": "蒲通",
- "qianqingyuan": "钱清源",
- "qidekai": "戚得凯",
- "renzhizhou": "任知周",
- "shanwenxiao": "单文骁",
- "shenhaoze": "沈昊泽",
- "shenxichen": "沈熙晨",
- "shenzichen": "沈孜晨",
- "shihongxi": "施泓熙",
- "shimufan": "施慕梵",
- "shiyichen": "施奕辰",
- "shiyunhao": "施云浩",
- "shuxinmo": "舒馨墨",
- "suiruochen": "隋若宸",
- "sunyihan": "孙艺涵",
- "sunyimiao": "孙义淼",
- "sunyichen2": "孙袆辰",
- "tangchao": "唐潮",
- "tangyuhan": "唐钰涵",
- "tanhaoxuan": "谭皓轩",
- "tanghaoran": "汤皓然",
- "taoxianyu": "陶羡榆",
- "wangkangming": "王康明",
- "wangmaohua": "王茂骅",
- "wangminghao": "王明浩",
- "wangmingshuo": "王茗铄",
- "wangpengyu": "王芃雨",
- "wangsiyuan3": "王思源",
- "wangtianqi": "王天琦",
- "wangzetong": "王泽通",
- "wangjiarui5": "王加睿",
- "wangjunzhe": "王俊喆",
- "wanxinlian": "万馨联",
- "weilai3": "魏铼",
- "weilai4": "魏来",
- "wensiyi": "闻思奕",
- "wujinhong": "吴锦鸿",
- "wuruitong": "吴瑞桐",
- "wumingxuan2": "吴明轩",
- "wurunze": "吴润泽",
- "wuyukai": "巫昱恺",
- "xiangjicheng": "项际诚",
- "xiaoguanxun": "肖贯勋",
- "xiaojiasheng": "肖嘉盛",
- "xiaruicheng": "夏瑞成",
- "xiaweimin": "夏蔚民",
- "xiaxuran": "夏诩然",
- "xiebingxiu": "谢秉修",
- "xieliren": "谢立仁",
- "xieruiqi": "谢睿棋",
- "xiongluofei": "熊洛菲",
- "xinyihan": "辛轶涵",
- "xuconghan": "徐从瀚",
- "xukan": "徐衎",
- "xuweiyi": "徐维易",
- "yanghaochen": "杨皓宸",
- "yangsining": "杨思凝",
- "yangqinyu": "杨钦宇",
- "yezijiong": "叶梓炅",
- "youzhouhang": "尤周杭",
- "yuanruiqing": "袁瑞擎",
- "yuanyueyang": "袁悦洋",
- "yutingjun": "于庭郡",
- "yuqiuning": "余秋凝",
- "zhangchenming": "张宸铭",
- "zhangqiuze": "张秋泽",
- "zhangshuxuan": "张澍萱",
- "zhangwenda": "张闻达",
- "zhangyifu": "张亦夫",
- "zhangyouheng": "张佑恒",
- "zhaochenshen": "赵晨神",
- "zhaochenwei": "赵晨伟",
- "zhengyinan": "郑逸楠",
- "zhonghongyi": "钟弘毅",
- "zhouyiqing": "周意清",
- "zhoujunyu": "周峻瑜",
- "zhouziyi": "周子逸",
- "zhuziruo": "朱子若",
- "zhouziyou": "周子游",
- "zhuchenrui2": "朱晨瑞",
- "zhuruichen": "朱睿宸",
- "zhuxule": "朱徐乐",
- "zhuyikun": "朱奕坤",
- "wangyuancheng": "王源成",
- "zhuyiyang": "朱奕阳",
- "hanjialin": "韩佳霖",
- "zhaozichen": "赵紫辰",
- "zhuochengjie": "卓成杰",
- "zhouhaiyang": "周海洋",
- "zhuaiwei": "朱艾薇",
- "linlitong": "林立桐",
- "xuyan": "徐衍",
- "fenghaochen": "冯皓宸",
- "lutianlang": "陆天朗",
- "jiangbowen": "姜博闻",
- "shangguanbocheng": "上官伯呈",
- "wangchengqi": "王呈齐",
- "yanpeitong": "颜培桐",
- "gongcheng": "龚橙",
- "weijiefu": "韦杰夫",
- "": ""
- };
- NameCell.innerText = (Names[RowData.Username] == undefined ? "" : Names[RowData.Username]);
-
- SolvedCell.innerText = RowData.Solved;
-
- PenaltyCell.innerText = SecondsToString(RowData.Penalty);
-
- for (let j = 0; j < ProblemCount; j++) {
- let Problem = document.createElement("td");
- Row.appendChild(Problem);
- let ProblemData = RowData.Problem.find((CurrentRow) => {
- if (CurrentRow.Index == j) {
- return true;
- }
- });
- if (ProblemData == undefined) {
- Problem.style.backgroundColor = "rgba(0, 0, 0, 0)";
- } else if (ProblemData.SolveTime != 0) {
- Problem.innerText = SecondsToString(ProblemData.SolveTime) + "(" + ProblemData.Attempts.length + ")";
- let Color = Math.max(1 / 10 * (10 - ProblemData.Attempts.length), 0.2);
- Problem.style.backgroundColor = "rgba(0, 255, 0, " + Color + ")";
- } else {
- Problem.innerText = "(" + ProblemData.Attempts.length + ")";
- let Color = Math.min(ProblemData.Attempts.length / 10 + 0.2, 1);
- Problem.style.backgroundColor = "rgba(255, 0, 0, " + Color + ")";
- }
- Problem.style.color = (UtilityEnabled("DarkMode") ? "white" : "black");
- }
- }
-
- TidyTable(Table);
-
- scrollTo({
- left: LastPositionX, top: LastPositionY, behavior: "instant"
- });
- }
- });
- }
- document.getElementById("rank").style.width = "100%";
- let DownloadButton = document.createElement("button");
- document.querySelector("body > div.container > div > center").insertBefore(DownloadButton, document.querySelector("body > div.container > div > center > a"));
- DownloadButton.className = "btn btn-outline-secondary";
- DownloadButton.innerText = "下载ACM排名";
- DownloadButton.style.marginBottom = "20px";
- DownloadButton.addEventListener("click", () => {
- location.href = "https://www.xmoj.tech/contestrank.xls.php?cid=" + SearchParams.get("cid");
- });
- let ProblemCount = localStorage.getItem("UserScript-Contest-" + SearchParams.get("cid") + "-ProblemCount");
- RefreshACMRank(ProblemCount);
- if (UtilityEnabled("AutoRefresh")) {
- addEventListener("focus", () => {
- RefreshACMRank(ProblemCount);
- });
- }
}
Style.innerHTML += "td {";
Style.innerHTML += " white-space: nowrap;";
diff --git a/package.json b/package.json
index 8fab9821..359328a9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "xmoj-script",
- "version": "1.5.0",
+ "version": "1.5.1",
"description": "an improvement script for xmoj.tech",
"main": "AddonScript.js",
"scripts": {