// ==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();
};
})();