// ==UserScript== // @name JUST EVO // @description Patches & tools for JUST Website // @namespace https://greasyfork.org/users/197529 // @version 0.1.9 // @author kkocdko // @license Unlicense // @match *://*.just.edu.cn/* // @match *://*.just.edu.cn:8080/* // @match *://*.just.edu.cn:80/* // @match *://10.250.255.34/authentication/* // @downloadURL none // ==/UserScript== "use strict"; const { addFloatButton, waitValue, downloadText } = { addFloatButton(text, onClick) /* 20200707-1237 */ { if (!document.addFloatButton) { const container = document.body .appendChild(document.createElement("div")) .attachShadow({ mode: "open" }); container.innerHTML = ""; document.addFloatButton = (text, onClick) => { const button = document.createElement("button"); button.textContent = text; button.addEventListener("click", onClick); return container.appendChild(button); }; } return document.addFloatButton(text, onClick); }, waitValue(fn, interval = 200, timeout = 3000) /* 20210928-1143 */ { return new Promise((resolve, reject) => { const intervalHandle = setInterval(() => { try { const value = fn(); if (!value) return; clearInterval(intervalHandle); clearTimeout(timeoutHandle); resolve(value); } catch {} }, interval); const timeoutHandle = setTimeout(() => { clearInterval(intervalHandle); reject(); }, timeout); }); }, downloadText(name, contentStr) /* 20211027-0709 */ { const blob = new window.Blob([contentStr]); const href = URL.createObjectURL(blob); URL.revokeObjectURL(blob); const aTag = document.createElement("a"); aTag.download = name; aTag.href = href; aTag.click(); }, }; // Auto login waitValue(() => document.querySelector(".login_btn")).then((e) => e.click()); // Fix JUST P.E. waitValue(() => leftFrame.document.readyState === "complete").then(() => { leftFrame.document.querySelectorAll("[onclick]").forEach((el) => { const v = el.getAttribute("onclick").replace("href(", "href=("); el.setAttribute("onclick", v); }); }); // Health clock in waitValue(() => input_zwtw).then(() => { addFloatButton("Clock in", () => { input_tw.value = input_zwtw.value = 36; post.click(); }); }); // Shedule dump waitValue(() => kbtable).then((el) => { addFloatButton("Dump schedule", () => { downloadText( `schedule_${zc.value}_${Date.now()}.html`, `` + el.outerHTML ); }); }); // Fix `window.showModalDialog` for book purchase page (this.unsafeWindow || self).showModalDialog = async (url, args, opt = "") => { // Thanks for github.com/niutech/showModalDialog const dialog = document.body.appendChild(document.createElement("dialog")); dialog.style = `padding:0;${opt.replace(/dialog/gi, "")}`; const iframe = dialog.appendChild(document.createElement("iframe")); iframe.style = "width:100%;height:100%;border:0"; iframe.src = url; dialog.showModal(); await new Promise((r) => (iframe.onload = r)); iframe.contentWindow.dialogArguments = args; iframe.contentWindow.close = dialog.remove; }; /* http://ids2.just.edu.cn/cas/logout http://jwgl.just.edu.cn:8080/jsxsd/framework/xsMain.jsp https://client.v.just.edu.cn/http/webvpn764a2e4853ae5e537560ba711c0f46bd/_s2/students_sy/main.psp */