您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds endless scroll function to Gelbooru
当前为
// ==UserScript== // @id gelbooru-endless-scroll // @name Gelbooru Endless Scroll // @version 1.5 // @namespace intermission // @author intermission // @license WTFPL; http://www.wtfpl.net/about/ // @description Adds endless scroll function to Gelbooru // @include http://gelbooru.com/index.php?* // @include https://gelbooru.com/index.php?* // @include http://rule34.xxx/index.php?* // @include https://rule34.xxx/index.php?* // @include http://*.booru.org/index.php?* // @include https://*.booru.org/index.php?* // @include http://e621.net/post/index/* // @include https://e621.net/post/index/* // @run-at document-end // @grant none // ==/UserScript== (function(){ "use strict"; var d = document, _on = false, url, v = "span.thumb", vis = function() { var rect = target().getBoundingClientRect(); console.log(rect); return rect.x === 0 && rect.y === 0 ? false : ( rect.top + rect.height >= 0 && ( document.documentElement.clientHeight - rect.bottom ) + rect.height >= 0 ); }, total, page = function(doc) { var images, pageNo = d.createElement("span"), frag = d.createDocumentFragment(), container; images = [...doc.querySelectorAll(v)]; if (images.length === 0) throw Error("API error"); pageNo.innerHTML = '<span style="height:inherit;display:flex;flex-direction:column;">Page ' + url.index + '~<span style="margin:auto 0 30px">out of ' + total + "</span></span>"; pageNo.className = "thumb"; frag.appendChild(pageNo); images.map(a => { let fn = e => { e.target.onload = null; a.removeAttribute("style"); }; a.style.overflow = "hidden"; a.querySelector("img").onload = fn; frag.appendChild(a); }); container = d.querySelector(v).parentNode; if (container.lastElementChild.matches("span")) container.appendChild(frag); else container.insertBefore(frag, container.querySelector("span.thumb:last-of-type + *")); if (list.length > 0) { events(); process(); } return; }, req = _ => fetch(url.href).then( x => x.text().then( text => page((new DOMParser()).parseFromString(text, "text/html")) ) ).catch(err => { if (typeof err != "undefined") { console.error("Something unexpected happened\n", err); setTimeout(() => req(), 5000); } }), process = function() { if (vis()) { events(); url = list.shift(); return req(); } }, events = function() { var name = (_on = !_on) ? "addEventListener" : "removeEventListener"; window[name]("scroll", process); window[name]("resize", process); window[name]("visibilitychange", process); }, list = [], r = /(pid=|index\/)([0-9]+)/; const target = () => (d.querySelector("div.pagination") || d.querySelector("div#paginator")); if (!target() || !target().querySelector("a") || !/\/post\/|page=post/.test(location.href)) return; else { let pid = location.href.match(r), p = ((pid && pid[1] == "index/") ? target().lastElementChild.previousElementSibling : target().lastElementChild).href, n = d.querySelectorAll(v).length, start_index, end_index, increment, index = 0; console.log(pid, p); if (!p) return; switch(location.hostname.match(/[^\.]+\.[^\.]+$/)[0]) { case "gelbooru.com": case "rule34.xxx": start_index = pid ? pid[2] / n : 0; increment = n; end_index = p.match(r)[2] / n; index = 1; break; case "booru.org": start_index = pid ? pid[2] / n : 0; increment = n; end_index = p.match(r)[2] / n; index = 1; break; case "e621.net": start_index = pid ? +pid[2] : 2; increment = 1; end_index = +p.match(r)[2]; } console.log(start_index, end_index); while(start_index < end_index) { list.push({ href: p.replace(r, "$1" + (++start_index * increment)), index: start_index + index }); } total = end_index + index; } d.addEventListener("gelbooru-slide", _ => { if (list.length > 0) events(); }, false); d.addEventListener("gelbooru-slide-next", _ => { if (list.length > 0) events(); }, false); events(); if (vis()) process(); }())