您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
dark theme for codeforces
// ==UserScript== // @name Codechef theme // @version 2.0.0 // @description dark theme for codeforces // @author Gaurang Tandon // @match https://codeforces.com/* // @match http://codeforces.com/* // @match https://www.codechef.com/* // @match https://calendar.google.com/calendar/embed* // @match https://www.facebook.com/v2.8/plugins/like.php* // @resource desertCSS desert.css // @resource monokaiEditorTheme https://raw.githubusercontent.com/ajaxorg/ace/master/lib/ace/theme/monokai.css // @resource darkthemecss darktheme.css // @grant GM_addStyle // @grant GM_getResourceText // @run-at document-start // @namespace https://gf.zukizuki.org/users/920052 // ==/UserScript== (function () { "use strict"; var colors = { tableGreyRow: "#2e2e2e", whiteTextColor: "rgb(220, 220, 220)", inputBoxBackgroundBorderColor: "#383838", redColorJustPassesA11Y: "#ff3333", genericLinkBlueColor: "#4d9fef" }; function overrideStyleAttribute(elm, prop, value) { elm.setAttribute("style", elm.getAttribute("style") + `; ${prop}: ${value} !important; `); } if (window.self != window.top && /calendar\.google\.com/.test(window.self.location.hostname)) { // cannot add the other styles as they interfere with // calendar's elements (since the selectors are so generic) GM_addStyle(` /* google calendar logo, see #13 */ div.logo-plus-button { filter: invert(1) hue-rotate(180deg); }`); // rest of the google calendar has already been inverted // so return return; } var style = GM_getResourceText("darkthemecss"), desertCSS = GM_getResourceText("desertCSS"); GM_addStyle(style); GM_addStyle(desertCSS); // to avoid long FOUT duration function applyFuncWhenElmLoaded(sel, func) { var elm = document.querySelectorAll(sel); if (!elm || elm.length == 0) return setTimeout(applyFuncWhenElmLoaded, 100, sel, func); for (let i = 0, len = elm.length; i < len; i++) func(elm[i]); } // some properties are added via element.style // need to override them via javascript // div div h3 a = the top header "@user's blog" whose color property is added via js applyFuncWhenElmLoaded( "#pageContent div div h3 a, .comment-table.highlight-blue .right .ttypography p, .comment-table.highlight-blue .right .info", function (elm) { var obs = new MutationObserver(function (mutationList, observer) { mutationList.forEach(function (mutation) { if (mutation.type == "attributes" && mutation.attributeName == "style") { elm.setAttribute("style", elm.getAttribute("style") + "; color: white !important; "); } }); }); overrideStyleAttribute(elm, "color", "white"); obs.observe(elm, { attributes: true }); } ); applyFuncWhenElmLoaded(".datatable div:nth-child(5)", function (elm) { elm.classList.add("dark"); }); // in this case !important doesn't workthrough css stylesheet applyFuncWhenElmLoaded(".unread td", function (elm) { elm.style.backgroundColor = "#13203a !important"; }); (function detect404Page() { applyFuncWhenElmLoaded("body > h3", function (elm) { if (elm.innerText.startsWith("The requested URL was not found on this server.")) { document.body.classList.add("notfoundpage"); } }); })(); (function fixLavaMenu() { applyFuncWhenElmLoaded(".second-level-menu-list li.backLava", function (elm) { elm.style.backgroundImage = "url(https://github.com/GaurangTandon/codeforces-darktheme/raw/master/imgs/lava-right2.png)"; elm.firstElementChild.style.backgroundImage = "url(https://github.com/GaurangTandon/codeforces-darktheme/raw/master/imgs/lava-left2.png)"; }); })(); (function fixAceEditor() { applyFuncWhenElmLoaded("#editor", function (elm) { var monokaiEditorThemeCSS = GM_getResourceText("monokaiEditorTheme"), aceChromeClass = "ace-chrome"; GM_addStyle(monokaiEditorThemeCSS); elm.classList.remove(aceChromeClass); elm.classList.add("ace-monokai"); // using a mutationobserver to revert addition of class ace-chome // goes into an infinite loop, presumably because the script run // by codeforces adds it back function checkAceClassRemoved() { if (elm.classList.contains(aceChromeClass)) { elm.classList.remove(aceChromeClass); } } setInterval(checkAceClassRemoved, 10); }); })(); (function fixColorRedGreenContrast() { if (document.readyState != "complete") { return setTimeout(fixColorRedGreenContrast, 100); } var elms = document.querySelectorAll("*"); for (let i = 0, len = elms.length; i < len; i++) { if (getComputedStyle(elms[i]).color == "rgb(0, 128, 0)") { overrideStyleAttribute(elms[i], "color", "#00c700"); } } elms = document.querySelectorAll("font"); for (let i = 0, len = elms.length; i < len; i++) { if (elms[i].getAttribute("color") == "red") { elms[i].setAttribute("color", colors.redColorJustPassesA11Y); } } })(); (function fixBlackTextInRightTableDuringContest() { applyFuncWhenElmLoaded(".rtable span", function (elm) { if (elm.style && elm.style.color == "rgb(0, 0, 0)") overrideStyleAttribute(elm, "color", colors.whiteTextColor); }); })(); // cannot override through css since specifity issue (function improveLinkColorInGreenAlerts() { applyFuncWhenElmLoaded("div.alert-success a", function (elm) { overrideStyleAttribute(elm, "color", "#004794"); }); })(); })();