// ==UserScript== // @name scnu 学者网sso界面改善 // @namespace https://github.com/wulnm/ // @version 1.0 // @description 学者网未结课课程排版优化,sso默认显示我的应用,教务系统跳过等待页面 // @author wulnm // @match https://www.scholat.com/myCourses.html // @match https://sso.scnu.edu.cn/AccountService/user/index.html // @match https://jwxt.scnu.edu.cn/xtgl/index_initMenu.html?jsdm=&_t=* // @require https://cdn.jsdelivr.net/npm/vue/dist/vue.js // @grant GM_getValue // @grant GM_setValue // @run-at document-end // @note 2020年12月4日 改良了学者网课程判定逻辑 // @note 2020年12月7日 增加学者网自定义选项按钮 // @note 2021年1月22日 增加学者网自定义显示正在学习课程 // @note 2021年1月22日 将设置按钮移动至右上角 // @note 2021年1月31日 小小美化 // @downloadURL none // ==/UserScript== (function () { "use strict"; // 学者网 if (window.location.href == "https://www.scholat.com/myCourses.html") { var completedTD = []; var tab3 = document.getElementById("tabs_3"); function getCourseList(type) { let ObjList; if (type != undefined) ObjList = document.getElementById(type); else ObjList = document; let lessons = Array.from(ObjList.getElementsByClassName("evlistTitle")); let res = []; for (let i in lessons) { let text = lessons[i].innerText; if (text == undefined) continue; res.push(text); } return res; } var userList = GM_getValue("userList"); // 用户设置课程列表 var closedLessonObj = document.getElementById("closeCourse"); var learnLessonObj = document.getElementById("learnCourse"); function toLessons() { // 点击“学习的课程” document.getElementById("ui-id-4").click(); } function toRealLessons() { function getTD(title) { // 获取课程 td return title.parentNode.parentNode.parentNode.parentNode; } let lessons = Array.from(document.getElementsByClassName("evlistTitle")); // 所有课程的集合 // 对titles进行处理 for (let i = lessons.length - 1; i >= 0; i--) { if (getTD(lessons[i]).parentNode == closedLessonObj) { lessons.splice(i, 1, 0); // 删除已经学习完毕的课程 } } while (lessons[lessons.length - 1] == 0) { lessons.pop(); //删除尾部的空元素 } var myLessons = userList == undefined ? lessons : userList; for (let i = 0; i < lessons.length; i++) { if (!myLessons.includes(lessons[i].innerText)) { completedTD.push(getTD(lessons[i])); } } //删除已完成的课程 for (let i = 0; i < completedTD.length; i++) { learnLessonObj.removeChild(completedTD[i]); } //更改正在学习x门课的x let learnMsg = document.getElementById("learn_course_msg"); let learnCnt = Number( learnMsg.innerText .replace(" ", "") //文本比较特殊需要删除两个不同的空格 .replace(" ", "") .match(/正在学习(\S*)门课程/)[1] ); learnMsg.innerHTML = "正在学习 " + (learnCnt - completedTD.length + "") + " 门课程"; //新增一个未结课模块 var almostMsg = document.createElement("div"); almostMsg.innerHTML = '已结课但未被教师关闭 ' + completedTD.length + " 门课程"; tab3.appendChild(almostMsg); var Intro3 = document.createElement("div"); Intro3.innerHTML = '\
\ \
'; sch_setting.appendChild(t5); document.getElementsByClassName("navList")[0].appendChild(sch_setting); // document.getElementsByClassName("c")[0].appendChild(sch_setting); var allLessons = getCourseList(); // 自定义div var listDiv = document.getElementById('list'); var learnList = getCourseList("learnCourse"); //正在学习列表(学者网展示的列表) var closeList = getCourseList("closeCourse"); //已经被关闭的列表 // 生成列表变量 let tempList = []; for (let i = 0; i < allLessons.length; i++) { let lesson = allLessons[i]; if (!closeList.includes(lesson)) tempList.push(lesson); } // 生成列表视图 genUserlist(tempList); function genUserlist(lessons) { for (let i = 0; i < lessons.length; i++) { let lesson = lessons[i]; if (lesson == undefined) continue; listDiv.innerHTML += '' + ''+lesson+'' + "