您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在英文题面前显示 AtCoder 中文题面。
// ==UserScript== // @name AtCoder 中文助手 // @namespace Violentmonkey Scripts // @match https://atcoder.jp/contests/*/tasks/* // @grant none // @license MIT // @version 3.3.1 // @author Acfboy, psz2007 // @description 在英文题面前显示 AtCoder 中文题面。 // ==/UserScript== function readTextFile(file, ext, callback) { let xhr = new XMLHttpRequest(); xhr.overrideMimeType("application/" + ext); xhr.open("GET", file, false); xhr.onreadystatechange = function () { if (xhr.readyState === 4){ callback(xhr.responseText, xhr.status); } } xhr.send(); } function getPoints() { let cur = document.getElementsByClassName('lang-ja')[0].childNodes[1].innerHTML; if(cur.indexOf("配点") == -1){ return ""; }else{ return cur.replace("配点", "分值").replace("点", "分"); } } let url = window.location.href, contId = url.split('/')[4], probId = url.split('/')[6], traId = "", traList = [], failFlg = 0, notFoundFlg = 0, src = "" readTextFile("https://atcoder-for-chinese-developers.github.io/translations/list.json", "json", function(txt, stat){ if(stat == 200){ traList = JSON.parse(txt).data }else{ alert("翻译列表加载失败") failFlg = 1 } }) if(!failFlg){ if(!(contId in traList) || !(probId in traList[contId])){ failFlg = notFoundFlg = 1 }else{ for(let i in traList[contId][probId]){ traId = i } readTextFile("https://atcoder-for-chinese-developers.github.io/translations/" + contId + "." + probId + "." + traId + ".html", "html", function(txt, stat){ if(stat == 200){ src = txt }else{ alert("翻译加载失败") failFlg = 1 } }) } } let script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.innerText = 'function showChn() {\ document.getElementsByClassName("lang-en")[0].style = "display: none";\ document.getElementsByClassName("lang-ja")[0].style = "display: none";\ document.getElementsByClassName("lang-cn")[0].style = "display: inline";\ }\ function showEng() {\ document.getElementsByClassName("lang-en")[0].style = "display: inline";\ document.getElementsByClassName("lang-ja")[0].style = "display: none";\ document.getElementsByClassName("lang-cn")[0].style = "display: none";\ }\ function showJpn() {\ document.getElementsByClassName("lang-en")[0].style = "display: none";\ document.getElementsByClassName("lang-ja")[0].style = "display: inline";\ document.getElementsByClassName("lang-cn")[0].style = "display: none";\ }' document.getElementsByTagName('head')[0].appendChild(script); let isOldCont = document.getElementById("task-statement").childElementCount > 1; if(document.getElementById("task-statement").childNodes[1].getAttribute("id") != null){ isOldCont = 1 document.getElementById("task-statement").innerHTML = document.getElementById("task-statement").childNodes[1].innerHTML } if(isOldCont){ document.getElementById("task-lang-btn").setAttribute("style","display: block;") document.getElementById("task-lang-btn").innerHTML=document.getElementById("task-lang-btn").innerHTML.replace(" / ", "") document.getElementById("task-lang-btn").innerHTML=document.getElementById("task-lang-btn").innerHTML.replace("<span data-lang=\"ja\">", "<span onclick=\"showJpn()\" data-lang=\"ja\">") document.getElementById("task-lang-btn").innerHTML=document.getElementById("task-lang-btn").innerHTML.replace("<span data-lang=\"en\">", "<span style=\"display: none;\" data-lang=\"en\">") let langSpan = document.createElement('span'), jaSta = document.getElementById("task-statement").innerHTML, jaSpan = document.createElement("span"), enSpan = document.createElement("span") enSpan.setAttribute("class", "lang-en") jaSpan.setAttribute("class", "lang-ja") jaSpan.setAttribute("style", "display: inline;") jaSpan.innerHTML = jaSta langSpan.setAttribute("class", "lang") langSpan.appendChild(jaSpan) langSpan.appendChild(enSpan) document.getElementById("task-statement").innerHTML=""; document.getElementById("task-statement").appendChild(langSpan); } let allBtn = document.getElementById('task-lang-btn'), chnBtn = document.createElement('span'); chnBtn.setAttribute('data-lang', 'cn') chnBtn.innerHTML = ' / <img src=\"//img.atcoder.jp/assets/flag/CN.png\">' chnBtn.setAttribute('onclick', 'showChn()') allBtn.appendChild(chnBtn) let cnSpan = document.createElement('span') cnSpan.setAttribute('class', 'lang-cn') if(notFoundFlg){ cnSpan.innerHTML = "暂无中文题面,欢迎<a href=\"https://github.com/atcoder-for-chinese-developers/atcoder-for-chinese\">贡献</a>!" }else if(failFlg){ cnSpan.innerHTML = "翻译加在过程中出现错误,请刷新界面并重试。" }else{ cnSpan.innerHTML = getPoints() + src; } document.getElementsByClassName('lang')[0].appendChild(cnSpan)