Adds endless scroll function to Gelbooru
当前为
// ==UserScript==
// @id gelbooru-endless-scroll
// @name Gelbooru Endless Scroll
// @version 1.0.2
// @namespace intermission
// @author intermission
// @license CC0; https://wiki.creativecommons.org/wiki/CC0
// @description Adds endless scroll function to Gelbooru
// @include http://gelbooru.com/index.php?*
// @include https://gelbooru.com/index.php?*
// @run-at document-end
// @grant none
// ==/UserScript==
(function(){
var d = document, _on = false, test_var,
vis = function(el) {
var rect = el.getBoundingClientRect();
return (
rect.top + rect.height >= 0 &&
( d.documentElement.clientHeight - rect.bottom ) + rect.height >= 0
);
}, target = d.querySelector("div.pagination"),
page = function(doc, url) {
var images, pageNo = d.createElement("span"), frag = d.createDocumentFragment();
images = [].slice.call(doc.querySelectorAll("span.thumb[id^='s']"));
if (images.length == 0) {
let x = new XMLHttpRequest();
x.open("get", "/intermission.php", false);
x.onreadystatechange = function() {
if (x.readyState == 4)
if (x.status == 200) {
return req(url);
}
};
return x.send();
}
pageNo.textContent = "Page " + url.index + "~";
pageNo.className = "thumb";
frag.appendChild(pageNo);
images.map(a => frag.appendChild(a));
d.querySelector("span.thumb[id^='s']").parentNode.appendChild(frag);
if (list.length > 0) events();
}, req = function(url) {
var x = new XMLHttpRequest();
x.open("get", url.href, false);
x.onreadystatechange = function() {
if (x.readyState == 4)
if (x.status == 200 || x.status == 304) {
let div = d.createElement("div");
div.innerHTML = x.responseText;
page(div, url);
} else {
setTimeout(a => req(url), 5000);
}
};
x.send();
}, process = function() {
if (vis(target)) {
events();
req(list.shift());
}
}, events = function() {
var name = (_on = !_on) ? "addEventListener" : "removeEventListener";
window[name]("scroll", process, false);
window[name]("resize", process, false);
window[name]("visibilitychange", process, false);
}, list = [];
if (!target || !target.querySelector("a")) return;
{
let pagination = target.lastElementChild,
pid = window.location.href.match(/pid=([0-9]+)/),
start_index = pid ? pid[1] / 42 + 1 : 1,
end_index;
if (!pagination.href) return;
else {
end_index = pagination.href.match(/pid=([0-9]+)/)[1] / 42 + 1;
do {
list.push({
href: pagination.href.replace(/pid=[0-9]+/, "pid=" + start_index * 42),
index: ++start_index
});
} while(start_index != end_index);
}
}
events();
process();
}())