// ==UserScript== // @name Bangumi 条目排序 // @namespace https://github.com/bangumi/scripts/liaune // @version 1.3 // @description 对条目列表进行按排名、人数、评分、时间排序,并可以按人数、时间筛选 // @author Liaune // @include /^https?://(bangumi\.tv|bgm\.tv|chii\.in)/(.+?/tag|.+?/browser|subject_search)(/|\?).+/ // @grant none // @downloadURL https://update.greasyfork.icu/scripts/373280/Bangumi%20%E6%9D%A1%E7%9B%AE%E6%8E%92%E5%BA%8F.user.js // @updateURL https://update.greasyfork.icu/scripts/373280/Bangumi%20%E6%9D%A1%E7%9B%AE%E6%8E%92%E5%BA%8F.meta.js // ==/UserScript== (function() { let sortstyle = -1, sortstyle1 = 1,sortstyle2 = 1,sortstyle3 = -1; //按排名排序 const showBtn = document.createElement('a'); showBtn.addEventListener('click', SortByRank); showBtn.className = 'chiiBtn'; showBtn.href='javascript:;'; showBtn.textContent = '排名排序';document.querySelector('#browserTools').append(showBtn); //按评分人数排序 const showBtn1 = document.createElement('a'); showBtn1.addEventListener('click', SortByVote); showBtn1.className = 'chiiBtn'; showBtn1.href='javascript:;'; showBtn1.textContent = '人数排序';document.querySelector('#browserTools').append(showBtn1); //按人数筛选 const voteRange = document.createElement('input');voteRange.addEventListener('blur',Select);voteRange.className = 'textfield';$(voteRange).css({"width":"30px","height":"15px"});document.querySelector('#browserTools').append(voteRange);$(voteRange).hide(); const voteRange1 = document.createElement('input');voteRange1.addEventListener('blur',Select);voteRange1.className = 'textfield';$(voteRange1).css({"width":"30px","height":"15px"});document.querySelector('#browserTools').append(voteRange1);$(voteRange1).hide(); //按评分排序 //const showBtn2 = document.createElement('a'); showBtn2.addEventListener('click', SortByPoint); showBtn2.className = 'chiiBtn'; showBtn2.href='javascript:;'; showBtn2.textContent = '评分排序';document.querySelector('#browserTools').append(showBtn2); //按时间排序 const showBtn3 = document.createElement('a'); showBtn3.addEventListener('click', SortByTime); showBtn3.className = 'chiiBtn'; showBtn3.href='javascript:;'; showBtn3.textContent = '时间排序';document.querySelector('#browserTools').append(showBtn3); //按时间筛选 const timeRange = document.createElement('input');timeRange.addEventListener('blur',Select);timeRange.className = 'textfield';$(timeRange).css({"width":"60px","height":"15px"});document.querySelector('#browserTools').append(timeRange);$(timeRange).hide(); const timeRange1 = document.createElement('input');timeRange1.addEventListener('blur',Select);timeRange1.className = 'textfield';$(timeRange1).css({"width":"60px","height":"15px"});document.querySelector('#browserTools').append(timeRange1);$(timeRange1).hide(); function ParseRank(rankstring){ let rank = rankstring.match(/Rank (\d{1,4})/)? rankstring.match(/Rank (\d{1,4})/)[1]: 9999; return rank; } function ParseVote(votestring){ let vote = votestring.match(/(\d{1,5})人评分/)? votestring.match(/(\d{1,5})人评分/)[1]: 0; return vote; } function ParseDate(Datestring){ let yy = Datestring.match(/(\d{4})/)? Datestring.match(/(\d{4})/)[1].toString():'1000'; Datestring = Datestring.match(/(\d{4})(年|-)(\d{1,2})(月|-)(\d{1,2})/); let year = Datestring ? Datestring[1].toString(): yy; let month = Datestring ? Datestring[3].toString(): '01'; let day = Datestring ?Datestring[5].toString(): '01'; let date= new Date(year+'/'+month+'/'+day); let now = new Date(); return now.getTime()-date.getTime(); } function SortByRank() { let itemsList = document.querySelectorAll('#browserItemList li.item'); sortstyle = (sortstyle==1)? -1 :1; showBtn.textContent = (showBtn.textContent=='排名排序↑') ? '排名排序↓':'排名排序↑'; let container = document.querySelector('ul#browserItemList'); let arr=[]; for(let i=0;i { $(elem).show(); let time = elem.querySelector('.inner .info')? ParseDate(elem.querySelector('.inner .info').textContent): 0; let mintime = timeRange.value !="" ? ParseDate(timeRange.value):ParseDate("1000-1-1"); let maxtime = timeRange1.value !="" ? ParseDate(timeRange1.value):ParseDate("3000-1-1"); let vote = elem.querySelector('.inner .rateInfo .tip_j')? ParseVote(elem.querySelector('.inner .rateInfo .tip_j').textContent): 0; let minvote = voteRange.value !="" ? parseInt(voteRange.value):0; let maxvote = voteRange1.value !="" ? parseInt(voteRange1.value):20000; if(time>mintime || timemaxvote) $(elem).hide(); }); } })();