您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This adds a couple of changes to the layout and behaviour of the site
当前为
"use strict"; // ==UserScript== // @name Booru Revamped // @namespace westerhold78 // @version 2.3 // @description This adds a couple of changes to the layout and behaviour of the site // @match *://gelbooru.com/* // @match *://yande.re/* // @match *://danbooru.donmai.us/* // @match *://safebooru.org/* // @match *://konachan.com/* // @match *://konachan.net/* // @match *://rule34.paheal.net/* // @match *://rule34.xxx/* // @icon data:image/png;base64,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 // @copyright 2022, westerhold78 // @grant GM_addStyle // @grant GM_xmlhttpRequest // ==/UserScript== const style = []; const newTabForDetailPage = true; const zoomScale = 2.5; const zoomDelay = 0.4; const imageTypes = ['jpg', 'png', 'jpeg', 'gif']; const movieExtensions = ['mp4', 'webm']; const rule34pahealSelectorImg = '#image-list .shm-thumb-link img'; const rule34pahealSelectorVideo = '#image-list .shm-thumb-link video'; const replaceMeString = '>>[[REPLACEME]]<<'; const { hash, hostname, pathname, searchParams } = new URL(window.location.href); let anchorElement; const configuration = { 'yande.re': { pages: { list: { pathname: /^\/post$/, }, post: { pathname: /^\/post\/show\/.*$/, }, }, selectors: { anchor: '#post-list-posts .inner .thumb', image: '#post-list-posts .inner .thumb img.preview', }, sample: { type: 'selector', selector: '#image', }, original: { type: 'selector', selector: '#highres', }, postPageImageId: 'image', maxHeight: 'calc(100vh - 260px)', maxWidth: 'calc(100vw - 310px)', }, 'gelbooru.com': { pages: { list: { searchParams: { page: 'post', s: 'list', }, }, post: { searchParams: { page: 'post', s: 'view', }, }, }, selectors: { anchor: '#container main .thumbnail-container .thumbnail-preview a', image: '#container main .thumbnail-container .thumbnail-preview a img', }, sample: { type: 'selector', selector: '#image', }, original: { type: 'ogImage', }, postPageImageId: 'image', maxHeight: 'calc(100vh - 285px)', maxWidth: 'calc(100vw - 260px)', }, 'safebooru.org': { pages: { list: { searchParams: { page: 'post', s: 'list', }, }, post: { searchParams: { page: 'post', s: 'view', }, }, }, selectors: { anchor: '#post-list .content .thumb a', image: '#post-list .content .thumb a img.preview', }, sample: { type: 'selector', selector: '#image', }, original: { type: 'ogImage', }, postPageImageId: 'image', maxHeight: 'calc(100vh - 200px)', maxWidth: 'calc(100vw - 260px)', }, 'danbooru.donmai.us': { pages: { list: { pathname: /^\/posts$/, }, post: { pathname: /^\/posts\/.*$/, }, }, selectors: { anchor: '#posts .posts-container article .post-preview-link', image: '#posts .posts-container article .post-preview-link img.post-preview-image', }, sample: { type: 'ogImage', }, original: { type: 'selector', selector: '#image', }, postPageImageId: 'image', maxHeight: 'calc(100vh - 200px)', maxWidth: 'calc(100vw - 260px)', }, 'konachan.net': { pages: { list: { pathname: /^\/post$/, }, post: { pathname: /^\/post\/show\/.*$/, }, }, selectors: { anchor: '#post-list-posts .inner .thumb', image: '#post-list-posts .inner .thumb img.preview', }, sample: { type: 'selector', selector: '#image', }, original: { type: 'selector', selector: '#highres', }, postPageImageId: 'image', maxHeight: 'calc(100vh - 240px)', maxWidth: 'calc(100vw - 280px)', }, 'konachan.com': { pages: { list: { pathname: /^\/post$/, }, post: { pathname: /^\/post\/show\/.*$/, }, }, selectors: { anchor: '#post-list-posts .inner .thumb', image: '#post-list-posts .inner .thumb img.preview', }, sample: { type: 'ogImage', }, original: { type: 'selector', selector: '#image', }, postPageImageId: 'image', maxHeight: 'calc(100vh - 240px)', maxWidth: 'calc(100vw - 280px)', }, 'rule34.paheal.net': { pages: { list: { pathname: /^\/post\/list\/?.*$/, }, post: { pathname: /^\/post\/view\/.*$/, }, }, selectors: { anchor: '.shm-image-list .shm-thumb-link', image: '.shm-image-list .shm-thumb-link img', }, sample: { type: 'ogImage', }, original: { type: 'selector', selector: '#main_image', }, postPageImageId: 'main_image', maxHeight: 'calc(100vh - 345px)', maxWidth: 'calc(100vw - 380px)', }, 'rule34.xxx': { pages: { list: { searchParams: { page: 'post', s: 'list', }, }, post: { searchParams: { page: 'post', s: 'view', }, }, }, selectors: { anchor: '#post-list .content .image-list .thumb a', image: '#post-list .content .image-list .thumb a img', }, sample: { type: 'selector', selector: '#image', }, original: { type: 'ogImage', fallback: { type: 'selector', selector: '#gelcomVideoPlayer', }, }, postPageImageId: 'image', maxHeight: 'calc(100vh - 220px)', maxWidth: 'calc(100vw - 270px)', }, }; const stylesArr = { 'yande.re': { overflowSelector: '#post-list-posts .inner', frameSelector: '#post-list .content .thumb video', scalingSelector: '#post-list .content .thumb *:is(img, video):hover', zIndexSelector: '#post-list .content .thumb *:is(img, video):hover', }, 'gelbooru.com': { scalingSelector: 'article.thumbnail-preview *:is(img, video):hover', frameSelector: 'article.thumbnail-preview video', zIndexSelector: 'article.thumbnail-preview *:is(img, video):hover', }, 'danbooru.donmai.us': { scalingSelector: 'a.post-preview-link *:is(img, video):hover', frameSelector: 'a.post-preview-link video', zIndexSelector: 'a.post-preview-link *:is(img, video):hover', }, 'safebooru.org': { scalingSelector: '#post-list .content .thumb a *:is(img, video):hover', zIndexSelector: '#post-list .content .thumb a *:is(img, video):hover', }, 'konachan.com': { overflowSelector: '#post-list-posts .inner', scalingSelector: '#post-list-posts .inner a.thumb *:is(img, video):hover', zIndexSelector: '#post-list-posts .inner a.thumb *:is(img, video):hover', }, 'konachan.net': { overflowSelector: '#post-list-posts .inner', scalingSelector: '#post-list-posts .inner a.thumb *:is(img, video):hover', zIndexSelector: '#post-list-posts .inner a.thumb *:is(img, video):hover', }, 'rule34.paheal.net': { scalingSelector: '#image-list .shm-image-list .shm-thumb-link *:is(img, video):hover', zIndexSelector: '#image-list .shm-image-list .shm-thumb-link *:is(img, video):hover', }, 'rule34.xxx': { scalingSelector: '#post-list .content .image-list .thumb a *:is(img, video):hover', zIndexSelector: '#post-list .content .image-list .thumb a *:is(img, video):hover', }, }; const element = stylesArr[hostname]; const { scalingSelector, frameSelector, overflowSelector, zIndexSelector } = element || {}; if (scalingSelector) { style.push(`${scalingSelector} { transform: scale(${zoomScale}); -moz-transform: scale(${zoomScale}); -webkit-transform: scale(${zoomScale}); transition-delay: ${zoomDelay}s; transition-property: transform; }`); } if (frameSelector) { style.push(`${element.frameSelector} { border: 3px solid #0000ff; }`); } if (overflowSelector) { style.push(`${overflowSelector} { position: inherit; overflow: visible !important; }`); } if (zIndexSelector) { style.push(`${zIndexSelector} { position: relative; z-index: 9001; }`); } style.push(`[data-ext="mp4"] a video, [data-ext="webm"] a video { border: 3px solid #0000ff; }`); GM_addStyle(style.join('\n')); // -- - - - - - const onLoad = () => { // handleHostname() handlePaths(); }; // start of the application code if (document.readyState !== 'loading') { onLoad(); } else { document.addEventListener('DOMContentLoaded', () => { onLoad(); }); } function handlePaths() { var _a, _b, _c, _d; const pathnameMatch = (_b = (_a = Object.entries(configuration[hostname].pages).filter(([pageName, page]) => { var _a, _b, _c; return ((_c = (_b = (_a = page.pathname) === null || _a === void 0 ? void 0 : _a.exec(pathname)) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 0; })) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b[0]; const searchParamsMatch = (_d = (_c = Object.entries(configuration[hostname].pages).filter(([pageName, page]) => { var _a; const searchParamsLength = Object.entries(page.searchParams || []).filter(([key, param]) => { return param === searchParams.get(key); }).length; const pageSearchParamsLength = Object.keys((_a = page.searchParams) !== null && _a !== void 0 ? _a : []).length; return (searchParamsLength === pageSearchParamsLength && searchParamsLength > 0 && pageSearchParamsLength > 0); })) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d[0]; if (pathnameMatch === 'list' || searchParamsMatch === 'list' || (hostname === 'danbooru.donmai.us' && pathname === '/')) { // on the list page openImageInNewTab(); document .querySelectorAll(configuration[hostname].selectors.image) .forEach(async (image) => { image.addEventListener('mouseover', async (event) => await onImageMouseOver(event)); }); } else if (pathnameMatch === 'post' || searchParamsMatch === 'post') { // on the post page const original = getUrl(document, 'original'); const imageElement = document.getElementById(configuration[hostname].postPageImageId); imageElement.onclick = null; imageElement === null || imageElement === void 0 ? void 0 : imageElement.addEventListener('click', () => { window.open(original, '_self'); }); imageElement.style.maxHeight = configuration[hostname].maxHeight; imageElement.style.maxWidth = configuration[hostname].maxWidth; imageElement.style.height = 'unset'; imageElement.style.width = 'unset'; imageElement === null || imageElement === void 0 ? void 0 : imageElement.scrollIntoView({ behavior: 'smooth', block: 'end', }); } } function openImageInNewTab() { // Open detail page in new tab if (newTabForDetailPage) { const thumbs = document.querySelectorAll(configuration[hostname].selectors.anchor); Array.from(thumbs).map(thumb => thumb.setAttribute('target', '_blank')); } } async function onImageMouseOver(event) { var _a; const image = event.target; // remove tooltip image.title = ''; if (!image.classList.contains('loaded')) { const urlList = await getURLList(image); if (hostname === 'rule34.paheal.net') { const parent = (_a = image.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement; const sibling = parent === null || parent === void 0 ? void 0 : parent.children[2]; urlList.original = sibling.href; } const type = await getType(image); if (type === 'video') { await swapVideo(image, urlList.original); } else { await swapImageURLs(image, urlList); } } } async function getType(image) { var _a, _b; switch (hostname) { case 'gelbooru.com': return movieExtensions.includes(image.classList[0]) ? 'video' : 'image'; case 'danbooru.donmai.us': { const url = new URL(((_a = image.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement).href); const doc = await getDocFromURL(url.href); const type = getPostType(doc); return type; } case 'rule34.paheal.net': { const extension = ((_b = image.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement) .dataset['ext']; return movieExtensions.includes(extension) ? 'video' : 'image'; } case 'rule34.xxx': { const url = new URL(image.parentElement.href); const doc = await getDocFromURL(url.href); const type = getPostType(doc); return type; } default: return null; } } async function swapImageURLs(image, urlList) { const { sample, original } = urlList; if (sample !== undefined) { setAsyncImage(image, sample).then(img => { if (original !== undefined) { setImage(image, original, image.width); } }); } else { if (original !== undefined) { setImage(image, original, image.width); } } } async function getURLList(image) { var _a; switch (hostname) { case 'danbooru.donmai.us': { const url = ((_a = image === null || image === void 0 ? void 0 : image.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement) .href; const list = await fetchImageURLGeneric(url); return list; } default: { const url = (image === null || image === void 0 ? void 0 : image.parentElement).href; const list = await fetchImageURLGeneric(url); return list !== null && list !== void 0 ? list : {}; } } } function swapVideo(image, url) { const video = document.createElement('video'); video.autoplay = true; video.loop = true; video.muted = true; video.poster = image.src; video.height = image.height; video.width = image.width; const source = document.createElement('source'); source.type = 'video/mp4'; source.src = url; video.appendChild(source); image.replaceWith(video); } async function fetchImageURLGeneric(url) { const doc = await getDocFromURL(url); const sample = getUrl(doc, 'sample'); const original = getUrl(doc, 'original'); const returnValue = { ...(original !== undefined && original.length > 0 && { original }), ...(sample !== undefined && sample !== original && { sample }), }; return returnValue; } async function getDocFromURL(url) { const doc = await fetch(url) .then(response => { // The API call was successful! return response.text(); }) .then(html => { // Convert the HTML string into a document object const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); return doc; }); return doc; } function getUrl(doc, quality) { var _a, _b; const settings = configuration[hostname][quality]; switch (settings.type) { case 'ogImage': return doc .querySelector("meta[property='og:image']") .getAttribute('content'); case 'selector': { const element = doc.querySelector(settings.selector); return ((_b = (_a = element === null || element === void 0 ? void 0 : element.src) !== null && _a !== void 0 ? _a : element === null || element === void 0 ? void 0 : element.href) !== null && _b !== void 0 ? _b : element === null || element === void 0 ? void 0 : element.getElementsByTagName('source')[0].src); } default: return ''; } } function getPostType(doc) { var _a; const element = (_a = doc.querySelector(configuration[hostname]['original'].selector)) !== null && _a !== void 0 ? _a : doc.querySelector(configuration[hostname]['original'].fallback.selector); return element instanceof HTMLVideoElement ? 'video' : element instanceof HTMLImageElement ? 'image' : null; } function setImage(image, url, width) { return new Promise((resolve, reject) => { var _a; image.onload = () => resolve(); image.onerror = () => reject(); image.width = width; image.src = url; if (hostname === 'danbooru.donmai.us') { (_a = image.previousElementSibling) === null || _a === void 0 ? void 0 : _a.remove(); } }); } async function setAsyncImage(image, url) { return new Promise((resolve, reject) => { setTimeout(async () => { try { if (url === undefined) { return; } await setImage(image, url, image.width); return url; } catch (error) { console.error(error); reject(error); return; } finally { resolve(url); } }); }); } //# sourceMappingURL=index.js.map