Adds dark mode, search in tasks and other to MENDO.MK
当前为
// ==UserScript==
// @name MENDO.MK Enhancement
// @version 16
// @namespace mendo-mk-enhancement
// @description Adds dark mode, search in tasks and other to MENDO.MK
// @author EntityPlantt
// @match *://mendo.mk/*
// @noframes
// @icon https://mendo.mk/img/favicon.ico
// @grant none
// @license CC-BY-ND
// ==/UserScript==
console.log("%cMENDO.MK Enhancement%c loaded", "color:magenta;text-decoration:underline", "");
var loadingSuccess = 0;
setTimeout(() => {
if (loadingSuccess == 1) {
console.log("Loading %csuccessful", "color:#0f0");
}
else if (loadingSuccess == 2) {
console.log("Loading %cwith errors", "color:#ff0");
}
else {
console.log("Loading %cunsuccessful", "color:red");
}
}, 1000);
async function MendoMkEnhancement() {
try {
function logFinish(taskName) {
console.log("%cFinished task:%c " + taskName, "color:#0f0", "");
}
console.groupCollapsed("Start log");
var style = document.createElement("style");
style.innerHTML = `
${ // Dark mode
localStorage.getItem("mendo-mk-enhancement-theme") == "dark" ? `
html, img, svg, #cboxOverlay, .copy-io-btn span {
filter: invert(1) hue-rotate(180deg);
}
body, img, svg {
background: white;
}
::-webkit-scrollbar {
width: initial;
}
::-webkit-scrollbar-track {
background: #eee;
}
body::-webkit-scrollbar-track {
background: #111;
}
::-webkit-scrollbar-thumb {
background: #ddd;
}
body::-webkit-scrollbar-thumb {
background: #222;
}
td.solved, td.correct {
background: #bfb !important;
}
td.wrong {
background: #fbb !important;
}
` : ""}
#search {
font-family: consolas;
}
#search, #search-submit {
border: solid 2px black;
transition: box-shadow .5s;
}
#search-submit:hover {
cursor: pointer;
}
#search:focus {
background: #eee;
}
#search-submit:hover, #search:hover {
background: #ddd;
}
.copy-io-btn {
float: right;
background: #ddd;
padding: 5px;
cursor: pointer;
border-radius: 5px;
user-select: none;
}
.copy-io-btn:hover {
background: #e8e8e8;
}
#search:active, #search:focus, #search-submit:active, #search-submit:focus {
box-shadow: 0 0 2.5px 2.5px black;
}
`;
document.head.appendChild(style);
logFinish("inject style sheet");
if (/^http(s)?:\/\/(www\.)?mendo\.mk\/Training\.do/.test(document.URL)) {
document.querySelectorAll("div.main-content > div:nth-child(3) > div > table > tbody > tr > td:nth-child(2) > a").forEach(e => {
e.target = "_blank";
});
logFinish("make task links open in another window");
var search = document.createElement("form");
search.className = "content-search";
search.action = "#";
search.innerHTML = `
<input type=text id=search autocomplete=off>
<input type=submit id=search-submit value=Search>
`;
search.onsubmit = e => {
e.preventDefault();
location.hash = "#" + escape(search.querySelector("#search").value);
hashChange();
}
function hashChange() {
var kw = unescape(location.hash.substr(1));
search.querySelector("#search").value = kw;
kw = kw.toLowerCase();
console.log("Searching keyword:", kw);
document.querySelectorAll("body > div.page-container > div.main > div.main-content > div:nth-child(4) > div > table > tbody > tr").forEach(elm => {
if (!elm.querySelector("td:nth-child(2) > a")) {
return;
}
if (elm.innerText.toLowerCase().includes(kw) || elm.querySelector("td:nth-child(2) > a").href.toLowerCase().includes(kw)) {
elm.style.display = "";
}
else {
elm.style.display = "none";
}
});
}
window.onhashcange = hashChange;
setTimeout(hashChange, 500);
document.querySelector(".main-content").prepend(search);
logFinish("add task search bar");
document.querySelector("body > div.page-container > div.main > div.main-content > div:nth-child(3)").innerHTML += `<a href="./Training.do?cid=5">[ ${document.cookie.includes("mkjudge_language=en") ? "Other tasks" : "Други задачи"} ]</a> `;
document.querySelector("body > div.page-container > div.main > div.main-content > div:last-child").innerHTML =
document.querySelector("body > div.page-container > div.main > div.main-content > div:nth-child(3)").innerHTML;
logFinish("add secret tasks");
}
if (document.URL.match(/https?:\/\/mendo.mk\/algoritmi/)) {
document.querySelector("body > div.page-container > div.header > div.header-bottom > div").innerHTML += `<ul><li><a href='/algoritmi'>${document.cookie.includes("mkjudge_language=en") ? "II Algorithms" : "ИИ Алгоритми"}</a></li></ul>`;
}
logFinish("add ii algorithm button");
if (document.querySelector("body > div.page-container > div.header > div.header-breadcrumbs > ul > li:last-child > a")) {
window.name = document.querySelector("body > div.page-container > div.header > div.header-breadcrumbs > ul > li:last-child > a").innerText;
}
else if (document.querySelector(".pagetitle")) {
window.name = document.querySelector(".pagetitle").innerText;
}
document.title = (document.querySelector("body > div.page-container > div.header > div.header-breadcrumbs > ul > li:last-child > a")
?? document.querySelector(".pagetitle")
?? document.querySelector(".pagename")
?? {innerText: document.URL.substr(document.URL.indexOf("/", 8))}
).innerText + " – МЕНДО";
logFinish("document title set");
if (document.URL.includes("Task.do?id=")) {
document.querySelectorAll("body > div.page-container > div.main > div.main-content > div.column1-unit.taskContentView > table pre").forEach(pre => {
var text = pre.innerText.substr(pre.innerText.indexOf("\n") + 1);
var copyIoBtn = document.createElement("span");
copyIoBtn.innerHTML = "<span>📃</span>";
copyIoBtn.setAttribute("onclick", `navigator.clipboard.writeText(${JSON.stringify(text)})`);
copyIoBtn.className = "copy-io-btn";
pre.parentElement.appendChild(copyIoBtn);
});
logFinish("copy io buttons");
}
(document.querySelector(".footer") ?? {}).innerHTML += `<p class="credits">MENDO.MK Enhancement <a href="javascript:toggleTheme()">🎨</a></p>`;
window.toggleTheme = () => {
localStorage.setItem("mendo-mk-enhancement-theme", localStorage.getItem("mendo-mk-enhancement-theme") == "dark" ? "light" : "dark");
location.reload();
};
logFinish("dark mode button");
loadingSuccess = 1;
if (/^https?:\/\/mendo\.mk\/.+\.do/.test(document.URL) && Math.random() < .01) {
document.querySelector(".sitelogo").style.backgroundImage = "url(https://i1.sndcdn.com/artworks-TWCDacMc5lCrZIPb-2W7mgg-t500x500.jpg)";
document.querySelector(".sitelogo").style.backgroundSize = "contain";
document.querySelector(".sitename h1").innerText = "𝐎 𝐁 𝐀 𝐌 𝐈 𝐔 𝐌";
document.querySelector(".sitename h2").innerText = "𝐋𝐞𝐭 𝐎𝐛𝐚𝐦𝐢𝐮𝐦 𝐛𝐥𝐞𝐬𝐬 𝐲𝐨𝐮";
(document.querySelector(".footer") || {}).innerHTML = "<p>𝐋𝐞𝐭 𝐎𝐛𝐚𝐦𝐢𝐮𝐦 𝐛𝐥𝐞𝐬𝐬 𝐲𝐨𝐮</p>";
document.querySelectorAll("img").forEach(elm => {
elm.src = "https://i1.sndcdn.com/artworks-TWCDacMc5lCrZIPb-2W7mgg-t500x500.jpg";
elm.width = elm.height ||= 50;
});
document.querySelector("link[rel*=icon]").href = "https://i1.sndcdn.com/artworks-TWCDacMc5lCrZIPb-2W7mgg-t500x500.jpg";
document.querySelector("link[rel*=icon]").removeAttribute("type");
document.title = "𝐎 𝐁 𝐀 𝐌 𝐈 𝐔 𝐌";
logFinish("obamium");
}
}
catch (_) {
console.error(_);
loadingSuccess = 2;
}
console.groupEnd();
}
window.MendoMkEnhancement = MendoMkEnhancement;
MendoMkEnhancement();