您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
燕山大学教室课表标色
当前为
// ==UserScript== // @name YSU教室课表标色 // @version 1.0.3.2 // @author Haomin Kong // @description 燕山大学教室课表标色 // @match */zjdxgc/mycjcx/* // @icon http://ysu.edu.cn/images/favicon.png // @require https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @grant GM_notification // @grant GM_registerMenuCommand // @grant GM_addStyle // @license GPL-3.0 License // @run-at document-end // @namespace https://gitee.com/a645162/ysu-web-browser-scripts // ==/UserScript== (function () { ("use strict"); GM_registerMenuCommand("更新脚本", function () { window.location.href = "https://gitee.com/a645162/ysu-web-browser-scripts"; }); var week = 1; let CurrentConfig = { auto: true, week: 0, colornow: true, delform: true, selflearn: true, delselflearn: true, colorfuture: true, delnow: false, delfuture: false, }; let DefaultConfig = { auto: true, //自动执行脚本 week: 0, //自定义周数 colornow: true, //标色当前周 delform: true, //删除没课 selflearn: true, //忽略自习借教室 delselflearn: true, //删除自习借教室 colorfuture: true, //标色未来周 delnow: false, //删除当前周 delfuture: false, //删除未来周 }; function UpdateSettings() { let settingString = JSON.stringify(CurrentConfig); GM_setValue("YSUJWConfig", settingString); //setCookie(("YSUKHMJSCOLOR", settingString)); } Promise.all([GM_getValue("YSUJWConfig")]) //Promise.all(getCookie("YSUKHMJSCOLOR")) .then(function (data) { if (data[0] !== undefined) { try { CurrentConfig = JSON.parse(data[0]); } catch (e) { CurrentConfig = data[0]; } } else { CurrentConfig = DefaultConfig; } for (var key in DefaultConfig) { if (typeof CurrentConfig[key] == "undefined") { CurrentConfig[key] = DefaultConfig[key]; } } }) .catch(function (except) { console.log("错误!请复制后上报bug。谢谢==>", except); }); function DoJob() { let weekText = /本周为第[0-9]+周周[0-9]/.exec( document.getElementsByTagName("body")[0].textContent ); weekText = /第[0-9]+周/.exec(weekText); week = parseInt(/[0-9]+/.exec(weekText)); let as = document.getElementsByTagName("table"); for (var i = 0, j = as.length; i < j; ++i) { TraverseTable(as[i]); } } function TraverseTable(tableObj) { for (var i = 0, i1 = tableObj.rows.length; i < i1 && i1 >= 8; i++) { for (var j = 0, j1 = tableObj.rows[i].cells.length; j < j1; j++) { re(tableObj.rows[i].cells[j]); } } } function re(td) { let text = td.innerText.trim(); let regExp = /[0-9]+-[0-9]+周/g; if (!regExp.test(text)) { return; } let courseSplit = text.split("\n\n"); //console.log(courseSplit); let now = week; if (CurrentConfig.week > 0) { now = week; } //now = 10; let state = 0; let finalIsSelf = false; for (let i = 0, j = courseSplit.length; i < j; i++) { let current = courseSplit[i].trim(); //console.log(current); //type:1正常上课 2考试 3借用 4借用(自习) let type = 0; if (current.indexOf("正常上课") !== -1) { type = 1; } else if (current.indexOf("考试") !== -1) { type = 2; } else if (current.indexOf("借用") !== -1) { type = 3; if (current.indexOf("自习") !== -1) { type = 4; } } let oneLineText = current; while (oneLineText.indexOf("\n") !== -1) { oneLineText = oneLineText.replace("\n", ""); } let match = /[0-9]+-[0-9]+周/g.exec(oneLineText); match = /[0-9]+-[0-9]+/.exec(match[0].trim())[0].trim(); let l = match.split("-"); if (l.length === 2) { let start = parseInt(l[0]); let end = parseInt(l[1]); if (start <= now && now <= end) { //还在上 state = 1; if (type === 4) { finalIsSelf = true; } } if (now < start && state !== 1) { //未开课 state = 2; if (type === 4) { //finalIsSelf = true; } } } } if (courseSplit.length !== 0) { if (state === 1) { if (CurrentConfig.colornow) { td.bgColor = "FFFFBB"; } if (finalIsSelf && CurrentConfig.selflearn) { td.bgColor = "FFFFFF"; if (CurrentConfig.delselflearn) { td.textContent = ""; } } else if (CurrentConfig.delnow) { td.textContent = ""; } } else if (state === 2) { if (CurrentConfig.colorfuture) { td.bgColor = "FFDDDD"; } if (CurrentConfig.delfuture) { td.textContent = ""; } } else { td.bgColor = "FFFFFF"; if (CurrentConfig.delform) { td.textContent = ""; } } } } function addLink() { let submit = document.getElementsByName("Submit")[0]; let parent1 = submit.parentNode; let parent2 = submit.parentNode.parentNode.childNodes[1]; submit.insertAdjacentHTML("afterend", "<br />"); //let as = document.getElementsByTagName("table"); var cbauto = document.createElement("input"); cbauto.id = "cbauto"; cbauto.type = "checkbox"; cbauto.checked = CurrentConfig.auto; cbauto.addEventListener("change", function (e) { //alert(Boolean(cb1.checked)); CurrentConfig.auto = cbauto.checked; UpdateSettings(); }); parent1.appendChild(cbauto); cbauto.insertAdjacentText("afterend", "自动执行脚本"); var cb1 = document.createElement("input"); cb1.id = "cbdelform"; cb1.type = "checkbox"; cb1.checked = CurrentConfig.delform; cb1.addEventListener("change", function (e) { //alert(Boolean(cb1.checked)); CurrentConfig.delform = cb1.checked; UpdateSettings(); }); parent1.appendChild(cb1); cb1.insertAdjacentText("afterend", "自动删除没课的格子"); var cb2 = document.createElement("input"); cb2.id = "cbselflearn"; cb2.type = "checkbox"; cb2.checked = CurrentConfig.selflearn; cb2.addEventListener("change", function (e) { //alert(Boolean(cb1.checked)); CurrentConfig.selflearn = cb2.checked; UpdateSettings(); }); parent1.appendChild(cb2); cb2.insertAdjacentText("afterend", "借教室自习当做没课"); cb2.insertAdjacentHTML("beforebegin", "<br />"); var cb3 = document.createElement("input"); cb3.id = "cbdelselflearn"; cb3.type = "checkbox"; cb3.checked = CurrentConfig.delselflearn; cb3.addEventListener("change", function (e) { CurrentConfig.delselflearn = cb3.checked; UpdateSettings(); }); parent1.appendChild(cb3); cb3.insertAdjacentText("afterend", "自动删除借教室自习的格子"); cb3.insertAdjacentHTML("beforebegin", "<br />"); if (!CurrentConfig.auto) { var btn2 = document.createElement("Button"); btn2.addEventListener("click", function (e) { DoJob(); }); btn2.innerText = "执行脚本"; parent1.appendChild(btn2); btn2.insertAdjacentHTML("beforebegin", "<br />"); } //第二个格子 var text1 = document.createElement("input"); text1.id = "text_week"; text1.type = "number"; text1.max = 20; text1.min = 0; text1.value = CurrentConfig.week.toString(); parent2.appendChild(text1); text1.insertAdjacentText("afterend", "周(0为自动获取)"); text1.insertAdjacentHTML("beforebegin", "<br />"); text1.insertAdjacentHTML("beforebegin", "设置当前周数:"); var btn_save_week = document.createElement("Button"); btn_save_week.addEventListener("click", function (e) { CurrentConfig.week = parseInt(text1.value); UpdateSettings(); }); btn_save_week.innerText = "保存"; parent2.appendChild(btn_save_week); var cb_color_now = document.createElement("input"); cb_color_now.id = "cb_color_now"; cb_color_now.type = "checkbox"; cb_color_now.checked = CurrentConfig.colornow; cb_color_now.addEventListener("change", function (e) { CurrentConfig.colornow = cb_color_now.checked; UpdateSettings(); }); parent2.appendChild(cb_color_now); cb_color_now.insertAdjacentText("afterend", "标色当前周有课"); cb_color_now.insertAdjacentHTML("beforebegin", "<br />"); var cb_del_now = document.createElement("input"); cb_del_now.id = "cb_color_now"; cb_del_now.type = "checkbox"; cb_del_now.checked = CurrentConfig.delnow; cb_del_now.addEventListener("change", function (e) { CurrentConfig.delnow = cb_del_now.checked; UpdateSettings(); }); parent2.appendChild(cb_del_now); cb_del_now.insertAdjacentText("afterend", "删除当前周有课"); cb_del_now.insertAdjacentHTML("beforebegin", " "); var cb_color_future = document.createElement("input"); cb_color_future.id = "cb_color_now"; cb_color_future.type = "checkbox"; cb_color_future.checked = CurrentConfig.colorfuture; cb_color_future.addEventListener("change", function (e) { CurrentConfig.colorfuture = cb_color_future.checked; UpdateSettings(); }); parent2.appendChild(cb_color_future); cb_color_future.insertAdjacentText("afterend", "标色未来周有课"); cb_color_future.insertAdjacentHTML("beforebegin", "<br />"); var cb_del_future = document.createElement("input"); cb_del_future.id = "cb_color_now"; cb_del_future.type = "checkbox"; cb_del_future.checked = CurrentConfig.delfuture; cb_del_future.addEventListener("change", function (e) { CurrentConfig.delfuture = cb_del_future.checked; UpdateSettings(); }); parent2.appendChild(cb_del_future); cb_del_future.insertAdjacentText("afterend", "删除未来周有课"); cb_del_future.insertAdjacentHTML("beforebegin", " "); var btn1 = document.createElement("Button"); btn1.setAttribute("onclick", "location.reload();"); btn1.innerText = "刷新页面"; parent2.appendChild(btn1); btn1.insertAdjacentHTML("beforebegin", "<br />"); var btn3 = document.createElement("Button"); btn3.innerText = "更新脚本"; btn3.setAttribute( "onclick", "window.location.href = 'https://gitee.com/a645162/ysu-web-browser-scripts'" ); parent2.appendChild(btn3); btn3.insertAdjacentHTML("beforebegin", "<br />"); btn3.insertAdjacentHTML("beforebegin", "<br />"); var lab1 = document.createElement("a"); lab1.innerText = " 脚本作者:孔昊旻"; lab1.setAttribute("href", "https://gitee.com/a645162"); parent2.appendChild(lab1); } //JS操作cookies方法! //写cookies function setCookie(name, value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); } //读取cookies function getCookie(name) { var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if ((arr = document.cookie.match(reg))) return unescape(arr[2]); else return null; } //删除cookies function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = getCookie(name); if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); } function print() { document.body.innerHTML = temp1.outerHTML; } //DoJob(); //addLink(); window.onload = function () { if (CurrentConfig.auto) { DoJob(); } addLink(); }; })();