Mercurial > ec-userscripts
comparison pixiv-fanbox-unlazy.user.js @ 100:74c33632c353
Simplify script
author | nanaya <me@nanaya.net> |
---|---|
date | Sat, 24 Dec 2022 21:28:36 +0900 |
parents | 9c8cde985caf |
children | e21710f5dd7b |
comparison
equal
deleted
inserted
replaced
99:b44d5cb661c5 | 100:74c33632c353 |
---|---|
1 // ==UserScript== | 1 // ==UserScript== |
2 // @name pixiv fanbox no lazy loading image | 2 // @name pixiv fanbox no lazy loading image |
3 // @namespace https://myconan.net | 3 // @namespace https://myconan.net |
4 // @version 2.0.2 | 4 // @version 2.1.0 |
5 // @description Lazy loading is bad for environment. Disable it. | 5 // @description Lazy loading is bad for environment. Disable it. |
6 // @author nanaya | 6 // @author nanaya |
7 // @match https://*.fanbox.cc/* | 7 // @match https://*.fanbox.cc/* |
8 // @grant none | 8 // @grant none |
9 // @downloadURL https://hg.myconan.net/ec-userscripts/raw-file/tip/pixiv-fanbox-unlazy.user.js | 9 // @run-at document-start |
10 // @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/pixiv-fanbox-unlazy.user.js | |
10 // ==/UserScript== | 11 // ==/UserScript== |
11 | 12 |
12 ;(function () { | 13 'use strict' |
13 'use strict' | |
14 | 14 |
15 const imageUrlPrefix = 'https://downloads.fanbox.cc/images/post/' | 15 const imageUrlPrefix = 'https://downloads.fanbox.cc/images/post/' |
16 | 16 |
17 const fix = function (link) { | 17 function disableEventLink (event) { |
18 const href = link.href | 18 event.stopPropagation() |
19 } | |
19 | 20 |
20 // basic sanity check | 21 function fix (link) { |
21 if (typeof href !== 'string' || !href.startsWith(imageUrlPrefix)) { | 22 const href = link.href |
22 return | |
23 } | |
24 | 23 |
25 // don't run again if already run on passed link | 24 // basic sanity check |
26 if (link._ecUserscript) { | 25 if (typeof href !== 'string' || !href.startsWith(imageUrlPrefix)) { |
27 return | 26 return |
28 } | |
29 link._ecUserscript = true | |
30 | |
31 link.addEventListener('click', (event) => { | |
32 event.stopPropagation() | |
33 }) | |
34 link.innerHTML = `<img style="width: 100%;" src="${href}" />` | |
35 } | 27 } |
36 | 28 |
37 const onMutate = function (mutations) { | 29 // don't run again if already run on passed link |
38 for (const mutation in mutations) { | 30 if (link._ecUserscript) { |
39 run(mutation.addedNodes) | 31 return |
40 } | |
41 } | 32 } |
33 link._ecUserscript = true | |
42 | 34 |
43 // loop through passed nodes (or body if called without arguments) | 35 link.addEventListener('click', disableEventLink) |
44 const run = function (nodes) { | 36 const image = document.createElement('img') |
45 if (nodes == null) { | 37 image.style.width = '100%' |
46 nodes = [document.body] | 38 image.src = href |
47 } | 39 link.replaceChildren(image) |
40 } | |
48 | 41 |
49 for (let i = 0; i < nodes.length; i++) { | 42 function onMutate (mutations) { |
50 // first try fixing itself | 43 for (const mutation of mutations) { |
51 fix(nodes[i]) | 44 for (const node of mutation.addedNodes) { |
52 | 45 if (node instanceof window.HTMLElement) { |
53 // and then find all the links inside | 46 for (const link of node.querySelectorAll(`[href^="${imageUrlPrefix}"]`)) { |
54 const links = nodes[i].querySelectorAll(`[href^="${imageUrlPrefix}"]`) | 47 fix(link) |
55 | 48 } |
56 for (let j = 0; j < links.length; j++) { | |
57 fix(links[j]) | |
58 } | 49 } |
59 } | 50 } |
60 } | 51 } |
52 } | |
61 | 53 |
62 // the observer | 54 const observer = new window.MutationObserver(onMutate) |
63 const observer = new window.MutationObserver(onMutate) | 55 observer.observe(document, { childList: true, subtree: true }) |
64 | |
65 // start the observer | |
66 observer.observe(document, { childList: true, subtree: true }) | |
67 // initial run on existing document | |
68 run() | |
69 }).call() |