- // ==UserScript==
- // @name UESTC学分查看辅助2
- // @namespace http://tampermonkey.net/
- // @version 0.11
- // @description 本脚本旨在方便学生计划自己的学分。
- // @description 只在“课程管理->我的计划中生效”。
- // @description 灰色斜体字:已经修过并拿到学分的科目
- // @description 黄色背景:本学期正在学习的科目
- // @description 绿色背景:下学期可选科目
- // @description P.S: 本脚本以每年的2月1日和8月1日作为学期的分界线。
- // @author RobinEatCorn
- // @match http://eams.uestc.edu.cn/eams/*
- // @grant none
- // ==/UserScript==
-
-
- function compareArrays(a,b){
- if(a.length!=b.length)return false;
- for(let i=0;i<a.length;i++){
- if(a[i]!=b[i])return false;
- }
- return true;
- }
-
- function matchCourses(txt,tbs){
- var flag=false;
- for(let i=0;i<tbs.length;i++){
- flag|=(txt.indexOf(tbs[i])!=-1);
- }
- return flag;
- }
-
- function setStyles(x){
- "使得x之后的5个格子都和x具有相同的样式"
- //console.log(x.nextElementSibling);
- var y;
- for(let i=0;i<5;i=i+1){
- y=x.nextElementSibling;
- y.style.color=x.style.color;
- y.style.fontStyle=x.style.fontStyle;
- y.style.fontWeight=x.style.fontWeight;
- y.style.fontSize=x.style.fontSize;
- y.bgColor=x.bgColor;
- x=y;
- }
- }
-
- function processPage(){
- var dt=new Date();
- var nextSemesterCourses=[];
- var courses=[];
- var ids=0;
- var XHR_ids=new XMLHttpRequest();
- var res;
-
- function getIds(){
- XHR_ids.onreadystatechange=()=>{
- if(XHR_ids.readyState==4&&XHR_ids.status==200){
- res=XHR_ids.response;
- var stt=res.indexOf("form,\"ids\",")+12;
- var ed=stt;
- while("0"<=res[ed]&&res[ed]<="9")ed++;
- ids=Number(res.substr(stt,ed-stt));
- console.log(`Get ids=${ids}`);
- checkSemester(0,processCheck,[]);
- }
- }
- XHR_ids.open("GET","/eams/courseTableForStd.action",true);
- XHR_ids.send();
- }
-
- function compareArrays(a,b){
- if(a.length!=b.length)return false;
- for(let i=0;i<a.length;i++){
- if(a[i]!=b[i])return false;
- }
- return true;
- }
-
- function matchCourses(txt,tbs){
- var flag=false;
- for(let i=0;i<tbs.length;i++){
- flag|=(txt.indexOf(tbs[i])!=-1);
- }
- return flag;
- }
-
- function setStyles(x){
- "使得x之后的5个格子都和x具有相同的样式"
- //console.log(x.nextElementSibling);
- var y;
- for(let i=0;i<5;i=i+1){
- y=x.nextElementSibling;
- y.style.color=x.style.color;
- y.style.fontStyle=x.style.fontStyle;
- y.style.fontWeight=x.style.fontWeight;
- y.style.fontSize=x.style.fontSize;
- y.bgColor=x.bgColor;
- x=y;
- }
- }
-
-
- var pInnerText=document.getElementsByTagName("p")[0].innerText;
- var pCut=pInnerText.indexOf("生效日期:")+5;
- var sttDate=Number(pInnerText.substr(pCut,4));
-
- currentSemester=2*(dt.getFullYear()-sttDate)-(dt.getMonth()<2)+(dt.getMonth()>8);
- var nextSemester=currentSemester+1;
-
- if(nextSemester<8){
- var table=document.getElementsByTagName("table")[3+2*nextSemester];
- var trs=table.getElementsByTagName("tr");
- for(let i=0;i<trs.length;i++){
- nextSemesterCourses.push(trs[i].children[1].innerText);
- }
- }
-
- if(courses.length==0){
- courses=document.getElementsByClassName("course");
- }
- for(let i=0;i<courses.length;i++){
- if(matchCourses(courses[i].innerText,nextSemesterCourses)){
- courses[i].bgColor="#00ff00";
- setStyles(courses[i]);
- }
- }
-
-
- var latestCourses=[];
-
- function checkSemester(s,callback,latch){
- "callback(s,currentCourses,latch)"
- var fd=new FormData();
- var XHR=new XMLHttpRequest();
- var currentCourses=[];
- var doc;
-
- fd.append("ignoreHead","1");
- fd.append("setting.kind","std");
- fd.append("startWeek","1");
- fd.append("project.id","1");
- fd.append("isEng","0");
- fd.append("semester.id",String(s));
- fd.append("ids",ids);
-
- XHR.addEventListener("load",()=>{console.log("Done");});
- XHR.addEventListener("error",()=>{alert("Error");});
- XHR.onreadystatechange=()=>{
- if(XHR.readyState==4&&XHR.status==200){
- var parser=new DOMParser();
- doc=parser.parseFromString(XHR.response,"text/html");
- var tbd=doc.getElementsByTagName("tbody")[1];
- trs=tbd.getElementsByTagName("tr");
- if(trs.length<=1){callback(s,currentCourses,latch);return;}
- for(let i=0;i<trs.length;i++){
- currentCourses.push(trs[i].children[2].innerText);
- }
-
- callback(s,currentCourses,latch);
-
- }
- }
-
- XHR.open("POST","/eams/courseTableForStd!courseTable.action",true);
- XHR.send(fd);
- }
-
- function processCheck(s,currentCourses,latch){
- if(currentCourses.length==0){
- //此时latch中是目前最新的课表
- currentCourses=latch;
- latestCourses=latch;
- if(courses.length==0){
- courses=document.getElementsByClassName("course");
- }
- for(let i=0;i<courses.length;i++){
- if(matchCourses(courses[i].innerText,currentCourses)){
- courses[i].bgColor="#ffff00";
- setStyles(courses[i]);
- }
- }
-
- } else {
- console.log(s);
- checkSemester(s+20,processCheck,currentCourses);
- }
- }
-
- //checkSemester(0,processCheck,[]);
- getIds();
-
- var xhttp=new XMLHttpRequest();
- var doc;
- var coursesName=[];
- var currentSemester=0;
-
-
- xhttp.onreadystatechange=()=>{
- if(xhttp.readyState==4&&xhttp.status==200){
- //处理xhttp带来的网页
- var parser=new DOMParser();
- doc=parser.parseFromString(xhttp.response,"text/html");
- var tds=doc.getElementsByTagName("td");
- for(let i=63;i<tds.length;i++){
- if(tds[i].colSpan==4&&tds[i].innerText.length>1){
- coursesName.push(tds[i].innerText);
- var smst=Number(tds[i].previousElementSibling.innerText);
- currentSemester=(smst>currentSemester)?smst:currentSemester;
- //console.log(tds[i]);
- }
- }
- currentSemester++;
- //匹配课程
-
- if(courses.length==0){
- courses=document.getElementsByClassName("course");
- }
- for(let i=0;i<courses.length;i++){
- if(matchCourses(courses[i].innerText,coursesName)){
- courses[i].style.color="gray";
- courses[i].style.fontStyle="italic";
- //console.log(courses[i]);
- setStyles(courses[i]);
- }
- }
-
- }
- }
- xhttp.open("GET","/eams/teach/grade/transcript/stdFinal.action",true);
- xhttp.send();
-
-
-
-
- }
-
- function checkAndProcess(){
- if(location.href.indexOf("http://eams.uestc.edu.cn/eams/programDoc!info.action")!=-1){
- processPage();
- }
- }
-
- (function() {
- 'use strict';
-
- document.addEventListener("click",()=>{
- setTimeout(checkAndProcess,1000);
- });
-
- window.onload=()=>{
- setTimeout(checkAndProcess,1000);
- }
- })();