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": {