您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一鍵閱讀所有Eclass iMails
// ==UserScript== // @name Read All iMails // @namespace http://tampermonkey.net/ // @version 1.0 // @description 一鍵閱讀所有Eclass iMails // @author HKquiet, discord: hkquiet // @match https://*/home/imail/viewfolder.php* // @match https://*/home/imail/viewmail.php* // @icon https://inet.kyc.edu.hk/images/2020a/iMail/icon_open_mail.gif // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // ==/UserScript== var go = 0; var toastPos = 5; var toastsList = []; var toastTypeColour = { 'message':'#4aaed9', 'error':'#d95d4a', 'success':'#4ad958' }; let toastStyle = document.createElement('style'); toastStyle.innerHTML = ` .toast { visibility: hidden; position: fixed; border-radius: 10px; text-align: center; color: white; right:1%; padding: 10px; } .toast[name="In"] { visibility: visible; animation: AMtoastIn 0.3s, AMtoastOut 0.3s 2s; } @keyframes AMtoastIn { from {top: 95%; opacity: 0;} to {opacity: 9;} } @keyframes AMtoastOut { from {opacity: 9;} to {opacity: 0;} }`; document.body.appendChild(toastStyle); (function() { if(GM_getValue("Reading") == true){main();} let btn= document.createElement("button"); btn.innerHTML = "Read All"; if ((GM_getValue("Reading") == null)&&(window.location.pathname == "/home/imail/viewfolder.php")){document.getElementsByClassName("imailpagetitle")[0].parentElement.appendChild(btn);} btn.addEventListener("click", ()=>{ GM_setValue("Reading",true); btn.remove(); main(); }); })(); function main(){ let mailsRem = ""; try{mailsRem = document.getElementsByClassName("menuon")[2].innerHTML.split("(")[1].split(")")[0];}catch(e){mailsRem = 0} let pages = document.getElementsByClassName('formtextbox')[0].children; let CurrentPage; for(let i = 0;i<pages.length;i++) { if(pages[i].selected) { CurrentPage = i+1; break; } } toastAdd("Reading iMails..."+mailsRem+" iMails remaining",'message'); toastAdd("Page "+CurrentPage.toString()+" of "+pages.length.toString(),'message'); let mails = document.getElementsByClassName("iMailsubjectunread"); let mailsSender = document.getElementsByClassName("iMailsender"); let row = document.getElementsByClassName("iMailrow"); if(mails.length!=0){for(let i=0;i<mails.length;i++){mark(mails[i].href,mails[i].innerText,mailsSender[i].innerText);}} let nextPg = document.getElementById("page_next"); let nextPgL = nextPg.parentElement; const goLoop = setInterval(()=>{if(go==mails.length){if(nextPgL.href != null){clearInterval(goLoop);nextPgL.click()}else{GM_deleteValue("Reading");clearInterval(goLoop);toastAdd("All iMails have been Read.",'message')}}},100); } function mark(url,name,sender){ if(name.length > 15) name.substring(0,15)+"..."; fetch(url).then((r)=>{ if(!r.ok){ toastAdd("Failed to Read '"+name+"', Retrying...",'error'); mark(url,name,sender); }else{ go+=1; toastAdd("["+go+"]Read '"+name+"' From '"+sender+"'"); } }) } function toastAdd(msg,type="success") { let newToast = document.createElement("div"); newToast.className = "toast"; newToast.innerText = msg; newToast.style.backgroundColor = toastTypeColour[type]; newToast.style.top = toastPos.toString()+"px" toastPos += 45; document.body.appendChild(newToast); toastsList.push(newToast); newToast.setAttribute('name','In'); setTimeout(()=>{ toastPos-=45; newToast.remove(); toastsList.shift(); toastsList.forEach(toasts => { toasts.style.top = (parseInt(toasts.style.top.split("%")[0])-45).toString()+"px" }); },2300); }