// ==UserScript==
// @name 北理工乐学增强
// @namespace YinTianliang_i
// @version 0.4.3
// @description 增强北理工乐学的功能
// @author Yin Tianliang
// @include *//online.bit.edu.cn/*
// @grant none
// @require https://code.jquery.com/jquery-3.2.1.min.js
// @downloadURL none
// ==/UserScript==
/*jshint esversion: 6 */
let divTemp = (color, text) => {
return `
${text}
`;
};
let reg = new RegExp("userloginex|contest_login.php.cid=(\\d+)");
let matches = location.toString().match(reg);
if (/course\/view.php\?id=\d+/.test(location.toString())) {
let id = location.toString().match(/id=(\d+)/)[1];
problem_list = document.getElementsByClassName("activity programming modtype_programming");
for (let problem of problem_list) {
let problem_id = problem.id.split("-")[1];
let dstDiv = problem.firstChild.firstChild.firstChild;
// 有些题目没有没对齐不能忍
if (dstDiv.className == "mod-indent") {
dstDiv.className += " mod-indent-1";
}
// 待优化
if (!localStorage["AC_" + id] || localStorage["AC_" + id].indexOf(problem_id) == -1) {
$.post(`http://online.bit.edu.cn/moodle/mod/programming/result.php?id=${problem_id}`,
null, res => {
matches = res.match(/未能通过的有 *(\d+)* *个/);
if (matches) {
if (matches[1] == "0") {
if (!localStorage["AC_" + id]) {
localStorage["AC_" + id] = problem_id;
} else {
localStorage["AC_" + id] += "|" + problem_id;
}
dstDiv.innerHTML = divTemp('green', 'AC');
} else {
dstDiv.innerHTML = divTemp('red', 'WA');
}
} else if (/当前状态:程序编译失败。/.test(res)) {
dstDiv.innerHTML = divTemp('orange', 'CE');
} else if (/当前状态:程序已提交,正等待编译。/.test(res)) {
dstDiv.innerHTML = divTemp('gray', 'PE');
}
});
} else {
dstDiv.innerHTML = divTemp('green', 'AC');
}
}
// 增加 "自己的AC数"
let table = document.getElementsByClassName('generaltable')[1].children[1];
let row = table.insertRow(0);
row.insertCell(0).textContent = '0';
row.insertCell(1).textContent = 'Your';
row.insertCell(2).textContent = localStorage["AC_" + id].split('|').length;
}
// 隐藏 上传文件
if (/programming\/submit.php\?id=\d+/.test(location.toString()))
document.getElementsByClassName('fitem fitem_ffilepicker')[0].style = 'display:none'