您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show the top 10 with album art rather than as a list
当前为
// ==UserScript== // @name PTH Top 10 Cover Art View // @version 0.4 // @description Show the top 10 with album art rather than as a list // @author Chameleon // @include http*://passtheheadphones.me/top10.php // @include http*://*passtheheadphones.me/forums.php?*threadid=2625* // @grant none // @namespace https://greasyfork.org/users/87476 // ==/UserScript== (function() { 'use strict'; if(window.location.href.indexOf('forums.php') != -1) showSettings(); else showTop10(); })(); function showTop10() { var div=document.createElement('div'); var content = document.getElementById('content').firstElementChild; content.parentNode.insertBefore(div, content); getTop10(div); } function getTop10(div) { var xhr = new XMLHttpRequest(); xhr.open('GET', "/ajax.php?action=top10&limit=100"); xhr.onreadystatechange = xhr_func.bind(undefined, div, xhr, gotTop10.bind(undefined, div), getTop10.bind(undefined, div)); xhr.send(); } function alreadyDone(id, done) { for(var i=0; i<done.length; i++) { if(id == done[i]) return true; } return false; } function prettyPrint(number) { var amount = number; var pow = 0; for(var i=10; i<=50; i=i+10) { if(Math.abs(amount)/Math.pow(2, i) > 1) pow=i/10; } var suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; return (Math.round(amount/Math.pow(2, pow*10)*100))/100+' '+suffixes[pow]; } function addTorrent(div, t, dlLinkAdd, width) { var d1=document.createElement('div'); d1.setAttribute('style', 'margin: auto; margin-top: 5px; background: rgba(0,0,0,1); border-radius: 10px; width:'+width+'px'); div.appendChild(d1); var s=document.createElement('span'); d1.appendChild(s); s.innerHTML = t.format+' / '+t.encoding+' / '+t.media+' - '+prettyPrint(t.size); d1.appendChild(document.createElement('br')); var s=document.createElement('span'); d1.appendChild(s); s.innerHTML = t.snatched; s.title='Snatched'; d1.appendChild(document.createTextNode(' / ')); var s=document.createElement('span'); d1.appendChild(s); s.innerHTML = t.seeders; s.title='Seeders'; d1.appendChild(document.createTextNode(' / ')); var s=document.createElement('span'); d1.appendChild(s); s.innerHTML = t.leechers; s.title='Leechers'; d1.appendChild(document.createTextNode(' - ')); var a=document.createElement('a'); a.href='/torrents.php?action=download&id='+t.torrentId+dlLinkAdd; a.innerHTML = '[DL]'; d1.appendChild(a); //div.appendChild(document.createElement('br')); } function gotTop10(div, response) { var settings = getSettings(); var r=JSON.parse(response); var width=Math.floor((document.getElementById('content').clientWidth)/settings.horizontalCoverCount)-1; var margin=5; var innerWidth=width-(2*margin); var borderRadius=15; var dlLinkAdd="&authkey="+document.getElementsByClassName('group_info')[0].getElementsByTagName('a')[0].href.split('authkey=')[1]; for(var j=0; j<r.response.length; j++) { var done=[]; var r1=r.response[j]; var torrents=r1.results; var section=document.createElement('section'); section.setAttribute('style', 'text-align: center; border-radius: '+borderRadius+'px;'); section.setAttribute('class', 'box'); div.appendChild(section); var hr=document.createElement('hr'); hr.setAttribute('style', 'width: '+((width*settings.horizontalCoverCount)-(2*borderRadius))+'px; margin: auto;'); section.appendChild(hr); var a=document.createElement('a'); a.setAttribute('style', 'text-align: center; display: block; font-size: 2em;'); section.appendChild(a); a.innerHTML = "Top "+settings.topX+" "+r1.caption.replace("Torrents", "Groups"); a.href='javascript:void(0);'; var torrentSection = document.createElement('div'); a.addEventListener('click', toggle.bind(undefined, torrentSection), false); section.appendChild(torrentSection); var alCount=0; for(var i=0; i<torrents.length && alCount<settings.topX; i++) { var t=torrents[i]; if(alreadyDone(t.groupId, done)) { var tDiv=document.getElementById('overlayGroup_'+t.groupId+'_'+j); var tDiv1=document.createElement('div'); tDiv.appendChild(tDiv1); addTorrent(tDiv1, t, dlLinkAdd, innerWidth-6); continue; } if(!t.artist) continue; done.push(t.groupId); alCount++; var torrentDiv = document.createElement('div'); torrentDiv.setAttribute('style', 'width: '+innerWidth+'px; border-radius: '+borderRadius+'px; background: rgba(0,0,0,0.5); margin: '+margin+'px; display:inline-block; text-align: center;'); torrentDiv.setAttribute('id', 'topX_'+t.groupId+'_'+j); torrentSection.appendChild(torrentDiv); var tDiv = document.createElement('div'); tDiv.setAttribute('id', 'overlayGroup_'+t.groupId+'_'+j); tDiv.setAttribute('class', 'overlayGroup'); var tDiv1=document.createElement('div'); tDiv.appendChild(tDiv1); addTorrent(tDiv1, t, dlLinkAdd, innerWidth-6); /* var rect=torrentDiv.getBoundingClientRect(); var top=rect.top+window.scrollY; var left=rect.left+window.scrollX; tDiv.setAttribute('style', 'position: absolute; top: '+top+'px; left: '+left+'px; background: rgba(0,0,0,0.8); width: '+innerWidth+'px; height: '+innerWidth+'px; border-radius: '+borderRadius+'px '+borderRadius+'px 0 0;');*/ torrentDiv.addEventListener('mouseover', mouseOver.bind(undefined, tDiv), false); torrentDiv.addEventListener('mouseout', mouseOut.bind(undefined, torrentDiv, tDiv), false); tDiv.addEventListener('mouseout', mouseOut.bind(undefined, torrentDiv, tDiv), false); document.body.appendChild(tDiv); var a=document.createElement('a'); a.href='/torrents.php?id='+t.groupId+'&torrentid='+t.torrentId; torrentDiv.appendChild(a); var img=document.createElement('img'); a.appendChild(img); img.src=t.wikiImage; img.setAttribute('style', 'width: '+innerWidth+'px; height: '+innerWidth+'px; border-radius: '+borderRadius+'px '+borderRadius+'px 0 0;'); var meta=document.createElement('div'); torrentDiv.appendChild(meta); var s=document.createElement('span'); s.setAttribute('style', 'display: inline-block; white-space: nowrap;'); s.innerHTML=t.artist; s.title=s.textContent; s.innerHTML = t.artist+'...'; meta.appendChild(s); count=0; if(s.clientWidth >= innerWidth) { while(s.clientWidth >= innerWidth) { s.innerHTML = s.innerHTML.slice(0, -4)+'...'; count++; if(count > 100) break; } } else { s.innerHTML = s.innerHTML.slice(0, -3); } meta.appendChild(document.createElement('br')); var s=document.createElement('span'); s.setAttribute('style', 'display: inline-block; white-space: nowrap;'); s.innerHTML = t.groupName+' ['+t.groupYear+']'; s.title = s.innerHTML; s.innerHTML = t.groupName+'... ['+t.groupYear+']'; meta.appendChild(s); count=0; var gName=t.groupName; if(s.clientWidth >= innerWidth) { while(s.clientWidth >= innerWidth) { gName = gName.slice(0, -1); s.innerHTML = '<a href="/torrents.php?id='+t.groupId+'" style="font-weight: bold;">'+gName+'...</a> ['+t.groupYear+']'; count++; if(count > 100) break; } } else { s.innerHTML = '<a href="/torrents.php?id='+t.groupId+'" style="font-weight: bold;">'+t.groupName+'</a> ['+t.groupYear+']'; } meta.appendChild(document.createElement('br')); /*var s=document.createElement('span'); s.innerHTML = t.format+' / '+t.encoding+' / '+t.media; meta.appendChild(s); meta.appendChild(document.createElement('br'));*/ var s=document.createElement('span'); meta.appendChild(s); /*var a=document.createElement('a'); a.href='/torrents.php?action=download&id='+t.torrentId+dlLinkAdd; a.innerHTML = '[DL]'; s.appendChild(a); s.appendChild(document.createTextNode(' '));*/ var clonedBookmark=document.getElementById('bookmarklink_torrent_'+t.groupId); if(clonedBookmark) clonedBookmark=clonedBookmark.cloneNode(true); else { clonedBookmark=document.createElement('a'); clonedBookmark.href='#'; clonedBookmark.setAttribute('id', 'bookmarklink_torrent_'+t.groupId); clonedBookmark.setAttribute('class', 'bookmarklink_torrent_'+t.groupId+' brackets'); clonedBookmark.onclick="Bookmark('torrent', "+t.groupId+", 'Remove bookmark'); return false;"; clonedBookmark.innerHTML = 'Bookmark'; } s.appendChild(clonedBookmark); } } var overlays=document.getElementsByClassName('overlayGroup'); for(var j=0; j<r.response.length; j++) { for(var i=0; i<overlays.length; i++) { var tDiv=overlays[i]; var id=tDiv.id.split('_')[1]; j=tDiv.id.split('_')[2]; var torrentDiv=document.getElementById('topX_'+id+'_'+j); var rect=torrentDiv.getBoundingClientRect(); var top=rect.top+window.scrollY; var left=rect.left+window.scrollX; tDiv.setAttribute('style', 'position: absolute; top: '+top+'px; left: '+left+'px; background: rgba(0,0,0,0.8); width: '+innerWidth+'px; height: '+innerWidth+'px; border-radius: '+borderRadius+'px '+borderRadius+'px 0 0; text-align: center;'); tDiv.style.display='none'; } } } function mouseOver(div) { div.style.display = 'initial'; } function mouseOut(div1, div2, event) { if(event.relatedTarget == div1 || isDescendant(div2, event.relatedTarget) || event.relatedTarget == div2) return; div2.style.display = 'none'; } function showSettings(message) { var div=document.getElementById('ChameleonSettings'); if(!div) { var before = document.getElementsByClassName('forum_post')[0]; div = document.createElement('div'); div.setAttribute('id', 'ChameleonSettings'); before.parentNode.insertBefore(div, before); div.setAttribute('style', 'width: 100%; text-align: center; padding-bottom: 10px;'); div.setAttribute('class', 'box'); } div.innerHTML = '<h2>Top 10 Cover Art View Settings</h2><br />'; var settings = getSettings(); var labelStyle = ''; var label = document.createElement('span'); label.setAttribute('style', labelStyle); label.innerHTML = 'Covers per Row: '; div.appendChild(label); var input=document.createElement('input'); input.setAttribute('style', 'width: 4em;'); input.placeholder='Covers per row'; input.type='number'; input.value = settings.horizontalCoverCount ? settings.horizontalCoverCount:5; div.appendChild(input); input.addEventListener('change', changeSettings.bind(undefined, div), false); div.appendChild(document.createElement('br')); var label = document.createElement('span'); label.setAttribute('style', labelStyle); label.innerHTML = 'Top X: '; div.appendChild(label); var input=document.createElement('input'); input.setAttribute('style', 'width: 4em;'); input.placeholder='Show X albums per category'; input.type='number'; input.value = settings.topX ? settings.topX:10; div.appendChild(input); input.addEventListener('change', changeSettings.bind(undefined, div), false); var a=document.createElement('a'); a.href='javascript:void(0);'; a.innerHTML = 'Save'; div.appendChild(document.createElement('br')); div.appendChild(a); } function changeSettings(div, nul, message) { var settings = getSettings(); var inputs=div.getElementsByTagName('input'); settings.horizontalCoverCount = parseInt(inputs[0].value); if(isNaN(settings.horizontalCoverCount)) settings.horizontalCoverCount = 5; settings.topX = parseInt(inputs[1].value); if(isNaN(settings.topX)) settings.topX = 10; window.localStorage.top10CoverArtViewSettings = JSON.stringify(settings); showSettings(message); } function getSettings() { var settings = window.localStorage.top10CoverArtViewSettings; if(!settings) { settings = {horizontalCoverCount:5, topX:10}; } else settings = JSON.parse(settings); return settings; } function toggle(div) { if(div.style.display == 'none') div.style.display = 'initial'; else div.style.display = 'none'; } function xhr_func(messageDiv, xhr, func, repeatFunc) { if(xhr.readyState == 4) { if(xhr.status == 200) func(xhr.responseText); else { messageDiv.innerHTML = 'Error: '+xhr.status+'<br />retrying in 1 second'; window.setTimeout(repeatFunc, 1000); } } } function isDescendant(parent, child) { if(child === null) return false; var node = child.parentNode; while(node !== null) { if(node == parent) return true; node = node.parentNode; } return false; }