您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
显示条目页面关联条目的完成情况
// ==UserScript== // @name bangumi关联条目显示增强 // @namespace https://github.com/bangumi/scripts/liaune // @version 0.4.3 // @description 显示条目页面关联条目的完成情况 // @author Liaune // @include /^https?:\/\/((bangumi|bgm)\.tv|chii.in)\/subject\/\d+$/ // @grant GM_addStyle // ==/UserScript== (function() { GM_addStyle(` .rank{ padding: 2px 5px 1px 5px; background: #b4b020; color: #FFF; -webkit-box-shadow: 0 1px 2px #EEE,inset 0 1px 1px #FFF; -moz-box-shadow: 0 1px 2px #EEE,inset 0 1px 1px #FFF; box-shadow: 0 1px 2px #EEE,inset 0 1px 1px #FFF; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px } .rank_1{ padding: 2px 5px 1px 5px; background: #15d7b3; color: #FFF; -webkit-box-shadow: 0 1px 2px #EEE,inset 0 1px 1px #FFF; -moz-box-shadow: 0 1px 2px #EEE,inset 0 1px 1px #FFF; box-shadow: 0 1px 2px #EEE,inset 0 1px 1px #FFF; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px } .wish{ border-color: #fd59a9; border-style: solid; border-width:2px; border-radius: 4px } .collect{ border-color: #3838e6; border-style: solid; border-width:2px; border-radius: 4px } .do{ border-color: #15d748; border-style: solid; border-width:2px; border-radius: 4px } .on_hold{ border-color: #f6af45; border-style: solid; border-width:2px; border-radius: 4px } .dropped{ border-color: #5a5855; border-style: solid; border-width:2px; border-radius: 4px } `); let update=0,count=0; const itemsList = document.querySelectorAll('#columnSubjectHomeB ul.browserCoverMedium li'); const itemsList2 = document.querySelectorAll('#columnSubjectHomeB ul.coversSmall li'); const TotalItems=itemsList.length + itemsList2.length; //修改柱状图高度 let votes_subject = document.querySelectorAll('.horizontalChart li a .count'); let vote_subject = new Array(); for(i=0;i<votes_subject.length;i++) vote_subject[i]=votes_subject[i].textContent.match(/\d+/)?votes_subject[i].textContent.match(/\d+/)[0]:0; let largest=0; for(i=0;i<vote_subject.length;i++) {if(parseInt(vote_subject[i])>largest) largest=parseInt(vote_subject[i]);} for(i=0;i<votes_subject.length;i++){height=parseFloat(parseInt(vote_subject[i])/largest*100).toFixed(2).toString(); votes_subject[i].style.height=height+'%';} //更新缓存数据 const showBtn = document.createElement('a'); showBtn.addEventListener('click', Update); showBtn.className = 'chiiBtn'; showBtn.href='javascript:;'; showBtn.textContent = '更新'; GetInfo(update); function Update(){ count=0; update=1; GetInfo(update); } function GetInfo(update){ itemsList.forEach( (elem, index) => { elem.style.height="150px"; let href = elem.querySelector('a.avatar').href; let href1 = href.replace(/subject/,"update"); let ID = href.split('/subject/')[1]; if(localStorage.getItem(ID+'Votes') && !update) DisplayRank(localStorage.getItem(ID+'Rank'),index,1); else ShowRank(href,index,1); if(localStorage.getItem(ID+'Interest') && !update) DisplayCollect(localStorage.getItem(ID+'Interest'),index,1); else if(localStorage.getItem(ID+'Votes')>20 || !localStorage.getItem(ID+'Votes')) ShowCollect(href1,index,1); }); itemsList2.forEach( (elem, index) => { elem.style.height="150px"; elem.style.width="82px"; let href = elem.querySelector('a').href; let href1 = href.replace(/subject/,"update"); let ID = href.split('/subject/')[1]; if(localStorage.getItem(ID+'Votes') && !update) DisplayRank(localStorage.getItem(ID+'Rank'),index,0); else ShowRank(href,index,0); if(localStorage.getItem(ID+'Interest') && !update) DisplayCollect(localStorage.getItem(ID+'Interest'),index,0); else if(localStorage.getItem(ID+'Votes')>20 || !localStorage.getItem(ID+'Votes')) ShowCollect(href1,index,0); }); } function ShowCollect(href,index,args){ fetch(href,{credentials: "include"}) .then(data => { return new Promise(function (resovle, reject) { let targetStr = data.text(); resovle(targetStr); }); }) .then(targetStr => { let Match = targetStr.match(/"GenInterestBox\('(\S+?)'\)" checked="checked"/); let interest = Match ? Match[1] : null; let ID = href.split('/update/')[1]; if(Match) localStorage.setItem(ID+'Interest',interest); if(!update) DisplayCollect(interest,index,args); else{ count+=1; showBtn.textContent='更新中... (' + count + '/' + TotalItems +')'; if(count==TotalItems){ location.reload(); showBtn4.textContent='更新完毕!';} } }); } function DisplayCollect(interest,index,args){ let avatarNeue,pictureFrameGroup; if(args) avatarNeue = document.querySelectorAll('#columnSubjectHomeB ul.browserCoverMedium li')[index].querySelector('span.avatarNeue'); else pictureFrameGroup = document.querySelectorAll('#columnSubjectHomeB ul.coversSmall li')[index].querySelector('span.pictureFrameGroup'); if(interest=='wish'){ if(args) avatarNeue.classList.add('wish'); else pictureFrameGroup.classList.add('wish'); } else if(interest=='collect'){ if(args) avatarNeue.classList.add('collect'); else pictureFrameGroup.classList.add('collect'); } else if(interest=='do'){ if(args) avatarNeue.classList.add('do'); else pictureFrameGroup.classList.add('do'); } else if(interest=='on_hold'){ if(args) avatarNeue.classList.add('on_hold'); else pictureFrameGroup.classList.add('on_hold'); } else if(interest=='dropped'){ if(args) avatarNeue.classList.add('dropped'); else pictureFrameGroup.classList.add('dropped'); } } function ShowRank(href,index,args){ fetch(href,{credentials: "include"}) .then(data => { return new Promise(function (resovle, reject) { let targetStr = data.text(); resovle(targetStr); }); }) .then(targetStr => { let canMatch = targetStr.match(/<small class="alarm">#(\S+?)<\/small>/); let rankNum = canMatch ? parseInt(canMatch[1], 10) : null; let ID = href.split('/subject/')[1]; if(canMatch) localStorage.setItem(ID+'Rank',rankNum); let Match2 = targetStr.match(/<span property="v:votes">(\S+?)<\/span>/); let votes = Match2? parseInt(Match2[1]) : null; if(Match2) localStorage.setItem(ID+'Votes',votes); if(!update) DisplayRank(rankNum,index,args); else{ showBtn.textContent='更新中... (' + count + '/' + TotalItems +')'; if(count==itemsList.length){ location.reload(); showBtn4.textContent='更新完毕!';} } }); } function DisplayRank(rankNum,index,args){ let rankSp = document.createElement('span'); rankSp.className = 'rank'; if (rankNum) { if(rankNum<=1500) rankSp.classList.add('rank_1'); else rankSp.classList.add('rank'); rankSp.innerHTML = `<small>Rank </small>${rankNum}`; } else rankSp.style.display="none"; if(args) document.querySelectorAll('#columnSubjectHomeB ul.browserCoverMedium li')[index].append(rankSp); else document.querySelectorAll('#columnSubjectHomeB ul.coversSmall li')[index].append(rankSp); count+=1; if(count==TotalItems && document.querySelector('#columnSubjectHomeB .subject_section .clearit')) document.querySelector('#columnSubjectHomeB .subject_section .clearit').append(showBtn); } })();