Adds dark mode, search in tasks and other to MENDO.MK
当前为
// ==UserScript==
// @name MENDO.MK Enhancement
// @namespace -
// @version 3
// @description Adds dark mode, search in tasks and other to MENDO.MK
// @author Plantt
// @match https://mendo.mk/*
// @match http://mendo.mk/*
// @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 = false;
setTimeout(() => {
if (loadingSuccess) {
console.log("Loading %csuccessful", "color: #0f0");
}
else {
console.warn("Loading %cunsuccessful", "color: red");
}
}, 1000);
async function MendoMkEnhancement() {
function logFinish(taskName) {
console.log("%cFinished task:%c " + taskName, "color: #0f0", "");
}
console.groupCollapsed("Start log");
loadingSuccess = true;
var style = document.createElement("style");
style.innerHTML = `
html, img, svg, #cboxOverlay {
filter: invert(1);
}
body, img, svg {
background: white;
}
::-webkit-scrollbar {
width: initial;
}
::-webkit-scrollbar-track {
background: #111;
}
::-webkit-scrollbar-thumb {
background: #222;
}
#search {
font-family: consolas;
}
#search, #search-submit {
border: solid 2px black;
}
#search-submit:hover {
cursor: pointer;
}
#search:focus {
background: #eee;
}
#search-submit:hover, #search:hover {
background: #ddd;
}
.copy-io-btn {
float: right;
background: #222;
padding: 5px;
filter: invert(1);
cursor: pointer;
border-radius: 5px;
user-select: none;
}
.copy-io-btn:hover {
background: #181818;
}
/*
* {
color: white !important;
background-color: #222 !important;
}
h1.pagetitle {
border-bottom-color: rgb(60, 60, 60) !important;
}
a {
color: darkred !important;
}
div.main-navigation *, div.main-navigation {
background-color: #111 !important;
}
*/
`;
document.head.appendChild(style);
logFinish("dark mode");
if (/^http(s)?:\/\/(www\.)?mendo\.mk\/Training\.do/.test(document.URL)) {
logFinish("training site detected");
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");
}
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 = window.name + " – МЕНДО";
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.innerText = "📃";
copyIoBtn.setAttribute("onclick", `navigator.clipboard.writeText(${JSON.stringify(text)})`);
copyIoBtn.className = "copy-io-btn";
pre.parentElement.appendChild(copyIoBtn);
});
logFinish("copy io buttons");
}
/*
if (/^http(s)?:\/\/(www\.)?mendo\.mk\/Task\.do/.test(document.URL)) {
await fetch("https://entityplantt.github.io/Canvas2d.js/Canvas2d.js").then(arg => arg.text()).then((1, eval));
console.log(window.Canvas2d);
async function nameOf(id) {
var i = document.createElement("iframe");
i.src = "https://mendo.mk/Task.do?id=" + id;
i.style.display = "none";
document.body.append(i);
await new Promise(res => {
i.onload = res;
});
if (!i.contentDocument.querySelector(".pagetitle")) {
return null;
}
const r = i.contentDocument.querySelector(".pagetitle").innerText;
i.remove();
return r;
}
window.nameOf = nameOf;
var canvas = new window.Canvas2d.Scene(), id = parseInt(document.URL.substr(28));
canvas.background = "#111";
var grayCircle = await fetch("https://upload.wikimedia.org/wikipedia/commons/thumb/5/55/Small-dark-grey-circle.svg/1024px-Small-dark-grey-circle.svg.png").then(arg => arg.blob());
grayCircle = await createImageBitmap(grayCircle);
document.querySelector(".main-content").prepend(canvas.canvas);
canvas.width = 500;
var points = new Array, boundLeft = id, boundRight = id, selected = id;
async function addToPoints(id) {
points[id] = await nameOf(id);
var img = new window.Canvas2d.ImageAsset(grayCircle, 50, 50);
img.posFromCenter = true;
img.x = 100 * id;
img.y = canvas.height / 2;
canvas.add(img);
var text = new window.Canvas2d.TextAsset(points[id], id * 100, canvas.height / 2, "15px Arial", "white");
text.align = "center";
text.baseline = "middle";
canvas.add(text);
}
function extendBound(right) {
if (right) {
addToPoints(boundRight);
boundRight++;
}
else {
addToPoints(boundLeft);
boundLeft--;
}
}
canvas.context.translate(selected * 100, 0);
canvas.canvas.onwheel = e => {
e.preventDefault();
if (e.deltaY > 0) {
canvas.context.translate(100, 0);
selected++;
}
else {
canvas.context.translate(-100, 0);
selected--;
}
while (boundLeft > selected - 5) {
extendBound(false);
}
while (boundRight < selected + 5) {
extendBound(true);
}
canvas.draw();
};
canvas.canvas.onwheel({preventDefault: () => {}, deltaY: -1});
}
*/
console.groupEnd();
}
window.MendoMkEnhancement = MendoMkEnhancement;
MendoMkEnhancement();