您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
由於中正大學的開課系統在對時間上過於麻煩,用JavaScript生成課表,用於對照時間
// ==UserScript== // @name 中正開課表格優化 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 由於中正大學的開課系統在對時間上過於麻煩,用JavaScript生成課表,用於對照時間 // @author 楊長茂(409220055) // @match https://kiki.ccu.edu.tw/~ccmisp06/Course/* // @exclude https://kiki.ccu.edu.tw/~ccmisp06/Course/ // @exclude https://kiki.ccu.edu.tw/~ccmisp06/Course/index.html // @exclude https://kiki.ccu.edu.tw/~ccmisp06/Course/*_e.html // @grant none // @icon https://raw.githubusercontent.com/Jeffreymaomao/figure/main/fig3.jpg // ==/UserScript== // 更改表格內部的邊緣弧度-------------------------------------------- function adjust_border_radius(radius){ const box = document.querySelectorAll('td,th'); for (const element of box) { element.style.borderRadius = radius; } } // 在原有的 object 之後,新增 n 行空白------------------------------- function newline(n,object){ for(var i=0;i<n-1; i++){ object.insertAdjacentHTML('beforeend', '<br>'); } } // 自動調整課表時間的高度-------------------------------------------- function adjust_table_height(){ var H1 = document.getElementById("R1"); var H2 = document.getElementById("R2"); var H3 = document.getElementById("R3"); var H4 = document.getElementById("R4"); var H5 = document.getElementById("R5"); document.getElementById("b1").style.height= "120px"; document.getElementById("b2").style.height= "120px"; document.getElementById("b3").style.height= "120px"; document.getElementById("b4").style.height= "120px"; document.getElementById("b5").style.height= "120px"; document.getElementById("b1").style.height= H1.offsetHeight +"px"; document.getElementById("b2").style.height= H2.offsetHeight +"px"; document.getElementById("b3").style.height= H3.offsetHeight +"px"; document.getElementById("b4").style.height= H4.offsetHeight +"px"; document.getElementById("b5").style.height= H5.offsetHeight +"px"; } // Xpath 尋找元素-------------------------------------------------- function getElementByXpath(path) { return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } // 輸入值行最上的中文,回傳以下所有中文--------------------------------- function get_column(name){ var tables = document.getElementsByTagName("table"); var table_index = 0; for(let k = 0; k < tables.length; k++){ var W = tables[k].rows[0].cells.length; if(W == 13){ table_index = k; } } var table = tables[table_index] var width = tables[table_index].rows[0].cells.length; var height= tables[table_index].rows.length; var column_index = 0; var column_text = []; for (let i = 0; i < width; i++){ var TEXT = tables[table_index].rows[0].cells[i].innerText; if (TEXT == name){column_index = i;} } for (let j = 0; j < height; j++){ column_text.push(tables[table_index].rows[j].cells[column_index].innerText); } return column_text; } // 將中文數字字符轉換成數字輸出--------------------------------------- function change_chinese_to_number(chinese_number){ var C = chinese_number; var n = 1; if(C=="一"){n=1}; if(C=="二"){n=2}; if(C=="三"){n=3}; if(C=="四"){n=4}; if(C=="五"){n=5}; if(C=="六"){n=6}; if(C=="日"){n=7}; return n } // 將中文數字字符轉換成數字輸出--------------------------------------- function change_time_to_region(time){ var c = time; var n = 1; if(c=="1" ||c=="2" ||c=="3" ||c=="A"||c=="B"){n=1}; if(c=="4" ||c=="5" ||c=="6" ||c=="C"||c=="D"){n=2}; if(c=="7" ||c=="8" ||c=="9" ||c=="E"||c=="F"){n=3}; if(c=="10"||c=="11"||c=="12"||c=="G"||c=="H"){n=4}; if(c=="13"||c=="14"||c=="15"||c=="I"||c=="J"){n=5}; return n } // 輸入中文時間,回傳時間向量---------------------------------------- function check_time(time){ time = time.replace(" ",""); var data_index = [] for(let i = 0; i < time.length; i++){ var cha = time[i] if(cha=="一"||cha=="二"||cha=="三"||cha=="四"||cha=="五"||cha=="六"||cha=="日"){ data_index.push(i) } } for(let j = data_index.length-1; j >= 0 ; j--){ time = time.slice(0, data_index[j]) + "|" + time.slice(data_index[j]); } time = time.slice(1,time.length); time = time.split("|"); var vector = []; for(let k = 0; k < time.length; k++){ var sub_time = time[k]; //alert("sub : "+sub_time) var W = change_chinese_to_number(sub_time[0]); //alert("week : "+W); var T = sub_time.slice(1,sub_time.length); T = T.split(",") for(let l = 0; l < T.length; l++){ var region = change_time_to_region(T[l]); vector.push([W,region,T[l]]); } } return vector } // 生程課表矩陣---------------------------------------------------- function generate_array(){ var times = get_column("上課時間"); var years = get_column("年級"); var id = get_column("編號"); var title = get_column("科目名稱"); var professor = get_column("任課教授"); var credit = get_column("學分"); var people = get_column("限修人數"); var type = get_column("選必"); var place = get_column("上課地點"); var A = [["","","","","","",""],["","","","","","",""],["","","","","","",""],["","","","","","",""],["","","","","","",""]]; for(let i = 1; i < times.length; i++){ var vector = check_time(times[i]); for(let j = 0; j < vector.length; j++){ var w = vector[j][0]-1; //week 0~6 var r = vector[j][1]-1; //region 0 ~ 4 var t = vector[j][2].replace(" ",""); // 1~15 , A~J var num = 1; if(type[i]=="必修"){num=1}; if(type[i]=="選修"){num=2}; if(type[i]=="通識"){num=3}; A[r][w] += '<div class="Class'+num+'">'; A[r][w] += "("+t+")"+ title[i] +"<br>" + professor[i]; A[r][w] += '<div class="hide">'; A[r][w] += "年級:"+years[i]+"<br>"; A[r][w] += "人數:"+people[i]+"<br>"; A[r][w] += "學分:"+credit[i]+"<br>"; A[r][w] += "地點:"+place[i]+"<br>"; A[r][w] += "編號:"+id[i]+"<br>"; A[r][w] += "</div></div>"; } } return A } //---------------------------------------------------------------- // 寫入星期一到星期日的每一個元素,回傳html---------------------------- function generate_region(A="",B="",C="",D="",E="",F="",G=""){ var html = "<td>" + A + "</td>"; html += "<td>" + B + "</td>"; html += "<td>" + C + "</td>"; html += "<td>" + D + "</td>"; html += "<td>" + E + "</td>"; html += "<td>" + F + "</td>"; html += "<td>" + G + "</td>"; return html; } // 寫入五個時間區塊,回傳html---------------------------------------- function generate_html(R1,R2,R3,R4,R5){ var html1 = ` <!DOCTYPE html> <html> <head> <!--<link rel="stylesheet" href="style.css">--> <style> .table1 {display: table;border-collapse: separate;box-sizing: border-box;text-indent: initial;white-space: normal;line-height: normal;font-weight: normal;font-size: medium;font-style: normal;color: -internal-quirk-inherit;text-align: start;border-spacing: 2px;border-color: #ccc;font-variant: normal;margin: 0 10 0 0} .table2 {display: table;border-collapse: separate;box-sizing: border-box;text-indent: initial;white-space: normal;font-weight: normal;font-size: medium;font-style: normal;color: -internal-quirk-inherit;text-align: start;border-spacing: 2px;font-variant: normal;height:auto;width:100%;border="0";} tr {padding:1px;display: table-row;} td {border-radius:3px;} th {border-radius:5px;display: table-cell;vertical-align: inherit;font-weight: bold;} .WEEK {background-color:#d9d9f3;border-radius:5px;} .TIME {background-color:#d9d9f3;border:solid 0.5px;border-color:#bbb;border-radius:5px;} .REGION {padding:0px;background-color:#f4f0e6;border-radius:5px;} table {border-radius:10px;} .button span {cursor: pointer;display: inline-block;position: relative;transition: 0.5s;} .button {display: inline-block;border-radius: 10px;background-color: #656566;border: solid 3px;border-color:#bbb;color: white;text-align: center;font-size: 20px;padding: 10px;width: 200px;transition: all 0.5s;cursor: pointer;margin: 5px;} .button span:after {content: '→';position: absolute;opacity: 0;top: 0;right: -20px;transition: 0.5s;} .button:hover span {padding-right: 25px;} .button:hover span:after {opacity: 1;right: 0;} /*時間大框框*/ .block1 {height:120px;min-width:140px;background-color:rgb(244,244,244);padding:-10px} .block2 {width:45%;display:inline-block;text-align:center;border-radius:5px;height:100%;min-height:120px;margin-left:2px;min-width:65px;} .block2 table {height:100%;} .block2 td {border:solid 1px;min-width:10px;} .REGION td{background-color:#d9d9f3;} .WEEK {font-size:15px;font-size:xx-small;font-style: normal;font-weight: normal;} .TIME {font-size:xx-small;font-size:xx-small;font-style: normal;font-weight: normal;} tr td {font-size:10px;} .TIME td, tr{text-align:center;} .hide {display: none;} /*必修---------------------*/ .Class1 {border:solid 1px;border-radius:5px;margin:5px;background-color:rgba(255,204,204,0.5);} .Class1:hover{position;absolute;display: block;border:solid 1px;border-radius:5px;margin:5px;background-color:rgba(255,204,204,0.8);} .Class1:hover .hide { display: block;background-color:rgba(255,255,255,0.8);border:solid 0.5px;border-radius:3px;margin:1px 5px 3px 5px;} /*-選修------------------*/ .Class2 {border:solid 1px;border-radius:5px;margin:5px;background-color:rgba(204,229,255,0.5);} .Class2:hover{position;absolute;display: block;border:solid 1px;border-radius:5px;margin:5px;background-color:rgba(204,229,255,0.8);} .Class2:hover .hide {display: block;background-color:rgba(255,255,255,0.8);border:solid 0.5px;border-radius:3px;margin:1px 5px 3px 5px;} /*必修---------------------*/ .Class3 {border:solid 1px;border-radius:5px;margin:5px;background-color:rgba(229,255,204,0.5);} .Class3:hover{position;absolute;display: block;border:solid 1px;border-radius:5px;margin:5px;background-color:rgba(229,255,204,0.8);} .Class3:hover .hide {display: block;background-color:rgba(255,255,255,0.8);border:solid 0.5px;border-radius:3px;margin:1px 5px 3px 5px;} .div1 {font-size:18px;display: inline-block;border:solid 1px;padding:10px 40px 10px 40px;border-radius: 10px;background-color:rgba(255,204,204,0.5);margin:5px;} .div2 {font-size:18px;display: inline-block;border:solid 1px;padding:10px 40px 10px 40px;border-radius: 10px;background-color:rgba(204,229,255,0.5);margin:5px;} .div3 {font-size:18px;display: inline-block;border:solid 1px;padding:10px 40px 10px 40px;border-radius: 10px;background-color:rgba(229,255,204,0.5);margin:5px;} .div1:hover {background-color:rgba(255,204,204,0.9);} .div2:hover {background-color:rgba(204,229,255,0.9);} .div3:hover {background-color:rgba(229,255,204,0.9);} </style> </head> <body> <hr> <p style="text-align:right;margin:10px 100px 10px 0px;font-size:5px"> by 物理系-楊長茂 ( <a href = "mailto: [email protected]">[email protected]</a> ) </p> <!--<span style="margin:100px;"><button class="button" onclick="changeColor();" ><span>Change color</span></button></span><br>--> <span style="margin:120px;"> <div class="div1">必修</div> <div class="div2">選修</div> <div class="div3">通識</div> </span><br> <table class="table1" align="center" border="12" width="90%";> <tbody> <!--------------------------------------------------------------------------------------------------------------------------------> <tr> <th class="WEEK" id = "COLOR1" width="10%">星期/區段</th> <th class="WEEK">一</th> <th class="WEEK">二</th> <th class="WEEK">三</th> <th class="WEEK">四</th> <th class="WEEK">五</th> <th class="WEEK">六</th> <th class="WEEK">日</th> </tr> <!--------------------------------------------------------------------------------------------------------------------------------> <tr valign="center" width="100px"> <th class="REGION" id="R1" style="height:auto;"> <div class="block1" id="b1"> <div class="block2"> <table> <tr> <td rowspan="3" class="TIME">I</td> <td class="TIME">1</td> <td class="TIME">7:10<br>8:00</td> </tr> <tr> <td class="TIME">2</td> <td class="TIME">8:10<br>9:00</td> </tr> <tr> <td class="TIME">3</td> <td class="TIME">9:10<br>10:00</td> </tr> </table> </div> <div class="block2"> <table width="55px"> <tr> <td class="TIME">A</td> <td class="TIME">7:00<br>8:00</td> </tr> <td class="TIME">B</td> <td class="TIME">8:10<br>9:00</td> </tr> </table> </div> </div> </th>`; var html2 = `</tr> <!--------------------------------------------------------------------------------------------------------------------------------> <tr valign="center"> <th class="REGION" id="R2" style="height:auto;width:auto"> <div class="block1" id="b2"> <div class="block2"> <table> <tr> <td rowspan="3" class="TIME">II</td> <td class="TIME">4</td> <td class="TIME">10:10<br>11:00</td> </tr> <tr> <td class="TIME">5</td> <td class="TIME">11:10<br>12:00</td> </tr> <tr> <td class="TIME">6</td> <td class="TIME">12:10<br>13:00</td> </tr> </table> </div> <div class="block2"> <table width="55px"> <tr> <td class="TIME">C</td> <td class="TIME">10:15<br>11:30</td> </tr> <tr> <td class="TIME">D</td> <td class="TIME">11:45<br>13:00</td> </tr> </table> </div> </div> </th>`; var html3 = ` </tr> <!--------------------------------------------------------------------------------------------------------------------------------> <tr valign="center"> <th class="REGION" id="R3" style="height:auto;width:auto"> <div class="block1" id="b3"> <div class="block2"> <table> <tr> <td rowspan="3" class="TIME">III</td> <td class="TIME">7</td> <td class="TIME">13:10<br>14:00</td> </tr> <tr> <td class="TIME">8</td> <td class="TIME">14:10<br>15:00</td> </tr> <tr> <td class="TIME">9</td> <td class="TIME">15:10<br>16:00</td> </tr> </table> </div> <div class="block2"> <table width="55px"> <tr> <td class="TIME">E</td> <td class="TIME">13:15<br>14:30</td> </tr> <tr> <td class="TIME">F</td> <td class="TIME">14:45<br>16:00</td> </tr> </table> </div> </div> </th>`; var html4 = `</tr> <!--------------------------------------------------------------------------------------------------------------------------------> <tr valign="center"> <th class="REGION" id="R4" style="height:auto;width:auto"> <div class="block1" id="b4"> <div class="block2"> <table> <tr> <td rowspan="3" class="TIME">IV</td> <td class="TIME">10</td> <td class="TIME">16:10<br>17:00</td> </tr> <tr> <td class="TIME">11</td> <td class="TIME">17:10<br>18:00</td> </tr> <tr> <td class="TIME">12</td> <td class="TIME">18:10<br>19:00</td> </tr> </table> </div> <div class="block2"> <table width="55px"> <tr> <td class="TIME">G</td> <td class="TIME">16:15<br>17:30</td> </tr> <tr> <td class="TIME">H</td> <td class="TIME">17:45<br>19:00</td> </tr> </table> </div> </div> </th>`; var html5 = `</tr> <!--------------------------------------------------------------------------------------------------------------------------------> <tr valign="center"> <th class="REGION" id="R5" style="height:auto;width:auto"> <div class="block1" id="b5"> <div class="block2"> <table> <tr> <td rowspan="3" class="TIME">V</td> <td class="TIME">13</td> <td class="TIME">19:10<br>20:00</td> </tr> <tr> <td class="TIME">14</td> <td class="TIME">20:10<br>21:00</td> </tr> <tr> <td class="TIME">15</td> <td class="TIME">21:10<br>22:00</td> </tr> </table> </div> <div class="block2"> <table width="55px"> <tr> <td class="TIME">I</td> <td class="TIME">19:15<br>20:30</td> </tr> <tr> <td class="TIME">J</td> <td class="TIME">20:45<br>22:00</td> </tr> </table> </div> </div> </th>`; var html6 = ` </tr> <!--------------------------------------------------------------------------------------------------------------------------------> </tbody> </table> </body> </html>`; var html = html1 +R1+ html2 +R2+ html3 +R3+ html4 +R4+ html5 +R5+ html6; return html; }; // 將表格插入在輸入之 tag 之後--------------------------------------- function add_table_after_tags(tags,array){ var a = array; var H1 = document.getElementsByTagName(tags); newline(2,H1[0]); var R1 = generate_region(a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6]); var R2 = generate_region(a[1][0],a[1][1],a[1][2],a[1][3],a[1][4],a[1][5],a[1][6]); var R3 = generate_region(a[2][0],a[2][1],a[2][2],a[2][3],a[2][4],a[2][5],a[2][6]); var R4 = generate_region(a[3][0],a[3][1],a[3][2],a[3][3],a[3][4],a[3][5],a[3][6]); var R5 = generate_region(a[4][0],a[4][1],a[4][2],a[4][3],a[4][4],a[4][5],a[4][6]); var html = generate_html(R1,R2,R3,R4,R5); H1[0].insertAdjacentHTML('beforeend', html); newline(2,H1[0]) } //---------------------------------------------------------------------------------------------------------- // 執行程式 (function() {'use strict'; //修改弧角度 adjust_border_radius("5px"); //生成 table 並加在第一個 tag 之後 add_table_after_tags("h1",generate_array()); })(); //修正表格內部時間表的高度 var intervalId = window.setInterval(function(){adjust_table_height()}, 10);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址