您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Finds links to posts on Danbooru and appends that post's rating to the end
当前为
// ==UserScript== // @name Danbooru Post Link Rating // @namespace DoomTay // @description Finds links to posts on Danbooru and appends that post's rating to the end // @include http://danbooru.donmai.us/* // @include https://danbooru.donmai.us/* // @version 1.2.0 // ==/UserScript== var links = document.links; for(var l = 0; l < links.length; l++) { if(links[l].firstChild.nodeName == "IMG") continue; if(document.getElementById("pool-nav") && document.getElementById("pool-nav").contains(links[l])) continue; if(links[l].href.includes("/posts/") && /\/posts\/(\d+)/.test(links[l].href)) { var postID = /\/posts\/(\d+)/.exec(links[l].href)[1]; } else if(links[l].href.includes("/post/show/") && /\/post\/show\/(\d+)(?:\/)?/.test(links[l].href)) { var postID = /\/post\/show\/(\d+)(?:\/)?/.exec(links[l].href)[1]; } else if(links[l].href.includes("/pools/") && /\/pools\/(\d+)/.test(links[l].href)) { var poolID = /\/pools\/(\d+)/.exec(links[l].href)[1]; if(links[l].href.includes("?page=")) continue; if(links[l].href.includes("/edit")) continue; collectPool(links[l], poolID); continue; } else continue; if(window.location.href.includes(postID)) continue; if(!isNaN(postID)) appendPostRating(links[l],postID); } function getJSON(url) { var promise = new Promise(function(resolve, reject) { var request = new XMLHttpRequest(); request.onload = function () { if(this.status == 200) resolve(this.response); else if(this.status == 421) reject("User Throttled"); else reject(this.statusText); } request.onerror = function () { reject("Connection Failed"); } request.open("GET", url, true); request.responseType = "json"; request.send(); }); return promise; } function appendPostRating(link,id) { getJSON("/posts/" + id + ".json").then(data => { var rating = data.rating; var ratingReading = document.createElement("span"); ratingReading.innerHTML = " (rating: " + rating + ")"; link.parentNode.insertBefore(ratingReading, link.nextSibling); }) } function collectPool(link, id) { var ratingReading = document.createElement("span"); ratingReading.innerHTML = " (loading...)"; link.parentNode.insertBefore(ratingReading, link.nextSibling); getJSON("/pools/" + id + ".json").then(data => { var pages = Math.ceil((data.post_count)/100); var searchCount = []; for(var c = 0; c < pages; c++) { searchCount[c] = getJSON("/posts.json?tags=pool:" + id + "&page=" + (c + 1) + "&limit=100"); } Promise.all(searchCount).then((data) => { var ratingCount = [0,0,0]; for(var d = 0; d < data.length; d++) { for(var p = 0; p < data[d].length; p++) { switch (data[d][p].rating) { case "s": ratingCount[0]++; break; case "q": ratingCount[1]++; break; case "e": ratingCount[2]++; break; } } } var total = ratingCount[0] + ratingCount[1] + ratingCount[2]; ratingReading.innerHTML = " (" + FractionToPercentage(ratingCount[0],total) + " s, " + FractionToPercentage(ratingCount[1],total) + " q, " + FractionToPercentage(ratingCount[2],total) + " e)"; },reason => { ratingReading.innerHTML = " (" + reason + ")"; }); },reason => { ratingReading.innerHTML = " (" + reason + ")"; }); } function FractionToPercentage(count, total) { return Math.round((count / total) * 100) + "%"; }