Mercurial > ec-userscripts
diff surugaya-direct-image.user.js @ 116:0e108a9dc6d7
Split suruga-ya scripts
author | nanaya <me@nanaya.net> |
---|---|
date | Sun, 15 Jan 2023 23:46:56 +0900 |
parents | surugaya-fixes.user.js@ef21ef445fc6 |
children | 8de2d53a4cb1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/surugaya-direct-image.user.js Sun Jan 15 23:46:56 2023 +0900 @@ -0,0 +1,49 @@ +// ==UserScript== +// @name suruga-ya direct image +// @namespace https://nanaya.net +// @version 2.0.3 +// @description skip loading image through php which seems to take forever +// @author nanaya +// @match https://www.suruga-ya.jp/* +// @grant none +// @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/surugaya-fixes.user.js +// ==/UserScript== + +'use strict'; + +const itemImageRegexp = /photo\.php\?shinaban=([0-9A-Z]+)/; +function fix (image) { + const origSrc = image.getAttribute('src'); + if (origSrc == null) return; + const found = origSrc.match(itemImageRegexp); + if (found == null) return; + + const src = `https://www.suruga-ya.jp/database/pics_light/game/${found[1].toLowerCase()}.jpg`; + const setNotFound = () => { + image.removeEventListener('error', setNotFound); + image.setAttribute('src', 'https://www.suruga-ya.jp/database/images/no_photo.jpg'); + }; + image.addEventListener('error', setNotFound); + image.setAttribute('src', src); +} + +function run (node) { + if (!(node instanceof window.HTMLElement)) return; + + fix(node); + for (const image of node.querySelectorAll('img')) { + fix(image); + } +} + +function onMutate (mutations) { + for (const mutation of mutations) { + for (const node of mutation.addedNodes) { + run(node); + } + } +} + +const observer = new window.MutationObserver(onMutate); +observer.observe(document, { childList: true, subtree: true }); +run(document.body);