Mercurial > ec-userscripts
comparison surugaya-fixes.user.js @ 105:6b354277f2d1
[surugaya-fixes] faster image load
| author | nanaya <me@nanaya.net> |
|---|---|
| date | Sun, 08 Jan 2023 00:02:28 +0900 |
| parents | 86da34e62d29 |
| children | 42fbeb68c0e5 |
comparison
equal
deleted
inserted
replaced
| 104:93e21738b588 | 105:6b354277f2d1 |
|---|---|
| 1 // ==UserScript== | 1 // ==UserScript== |
| 2 // @name suruga-ya fixes | 2 // @name suruga-ya fixes |
| 3 // @namespace https://myconan.net | 3 // @namespace https://myconan.net |
| 4 // @version 1.0.2 | 4 // @version 2.0.0 |
| 5 // @description Show all products | 5 // @description Show all products with fast image |
| 6 // @author nanaya | 6 // @author nanaya |
| 7 // @match https://www.suruga-ya.jp/* | 7 // @match https://www.suruga-ya.jp/* |
| 8 // @grant none | 8 // @grant none |
| 9 // @downloadURL https://hg.myconan.net/ec-userscripts/raw-file/tip/surugaya-fixes.user.js | 9 // @downloadURL https://hg.myconan.net/ec-userscripts/raw-file/tip/surugaya-fixes.user.js |
| 10 // ==/UserScript== | 10 // ==/UserScript== |
| 11 | 11 |
| 12 'use strict' | |
| 13 | |
| 14 // always inject adult consent cookie | |
| 12 ;(function () { | 15 ;(function () { |
| 13 'use strict' | 16 const hasAdultCookie = document.cookie.split('; ').includes('adult=1') |
| 17 if (!hasAdultCookie) { | |
| 18 const d = new Date() | |
| 19 d.setTime(d.getTime() + (100 * 24 * 60 * 60 * 1000)) | |
| 20 document.cookie = `adult=1; expires=${d.toGMTString()}; path=/` | |
| 21 window.location.reload() | |
| 22 } | |
| 23 })() | |
| 14 | 24 |
| 15 const hasAdultCookie = document.cookie.split('; ').includes('adult=1') | 25 // skip loading image through php which seems to take forever |
| 26 ;(function () { | |
| 27 const itemImageRegexp = /photo\.php\?shinaban=(\d+)/ | |
| 28 function fix (image) { | |
| 29 const origSrc = image.getAttribute('src') | |
| 30 if (origSrc == null) return | |
| 31 const found = origSrc.match(itemImageRegexp) | |
| 32 if (found == null) return | |
| 16 | 33 |
| 17 if (hasAdultCookie) { | 34 const src = `https://www.suruga-ya.jp/database/pics_light/game/${found[1]}.jpg` |
| 18 return | 35 const setNotFound = () => { |
| 36 image.removeEventListener('error', setNotFound) | |
| 37 image.setAttribute('src', 'https://www.suruga-ya.jp/database/images/no_photo.jpg') | |
| 38 } | |
| 39 image.addEventListener('error', setNotFound) | |
| 40 image.setAttribute('src', src) | |
| 19 } | 41 } |
| 20 | 42 |
| 21 const d = new Date() | 43 function run (node) { |
| 22 d.setTime(d.getTime() + (100 * 24 * 60 * 60 * 1000)) | 44 if (!(node instanceof window.HTMLElement)) return |
| 23 document.cookie = `adult=1; expires=${d.toGMTString()}; path=/` | 45 |
| 24 window.location.reload() | 46 fix(node) |
| 25 }).call() | 47 for (const image of node.querySelectorAll('img')) { |
| 48 fix(image) | |
| 49 } | |
| 50 } | |
| 51 | |
| 52 function onMutate (mutations) { | |
| 53 for (const mutation of mutations) { | |
| 54 for (const node of mutation.addedNodes) { | |
| 55 run(node) | |
| 56 } | |
| 57 } | |
| 58 } | |
| 59 | |
| 60 const observer = new window.MutationObserver(onMutate) | |
| 61 observer.observe(document, { childList: true, subtree: true }) | |
| 62 run(document.body) | |
| 63 })() |
