view pixiv-fanbox-unlazy.user.js @ 102:3fded109e23a

Also run on own node
author nanaya <me@nanaya.net>
date Sat, 24 Dec 2022 21:33:30 +0900
parents e21710f5dd7b
children 93e21738b588
line wrap: on
line source

// ==UserScript==
// @name         pixiv fanbox no lazy loading image
// @namespace    https://myconan.net
// @version      2.1.1
// @description  Lazy loading is bad for environment. Disable it.
// @author       nanaya
// @match        https://*.fanbox.cc/*
// @grant        none
// @run-at       document-start
// @downloadURL  https://hg.nanaya.net/ec-userscripts/raw-file/tip/pixiv-fanbox-unlazy.user.js
// ==/UserScript==

'use strict'

const imageUrlPrefix = 'https://downloads.fanbox.cc/images/post/'

function disableEventLink (event) {
  event.stopPropagation()
}

function fix (link) {
  const href = link.href

  // basic sanity check
  if (typeof href !== 'string' || !href.startsWith(imageUrlPrefix)) {
    return
  }

  // don't run again if already run on passed link
  if (link._ecUserscript) {
    return
  }
  link._ecUserscript = true

  link.addEventListener('click', disableEventLink)
  const image = document.createElement('img')
  image.style.width = '100%'
  image.src = href
  link.replaceChildren(image)
}

function onMutate (mutations) {
  for (const mutation of mutations) {
    for (const node of mutation.addedNodes) {
      if (node instanceof window.HTMLElement) {
        fix(node)
        for (const link of node.querySelectorAll(`[href^="${imageUrlPrefix}"]`)) {
          fix(link)
        }
      }
    }
  }
}

const observer = new window.MutationObserver(onMutate)
observer.observe(document, { childList: true, subtree: true })