view surugaya-fixes.user.js @ 106:42fbeb68c0e5

Product id may contain uppercase letters
author nanaya <me@nanaya.net>
date Sun, 15 Jan 2023 23:13:33 +0900
parents 6b354277f2d1
children 4bc5a633437c
line wrap: on
line source

// ==UserScript==
// @name         suruga-ya fixes
// @namespace    https://myconan.net
// @version      2.0.1
// @description  Show all products with fast image
// @author       nanaya
// @match        https://www.suruga-ya.jp/*
// @grant        none
// @downloadURL  https://hg.myconan.net/ec-userscripts/raw-file/tip/surugaya-fixes.user.js
// ==/UserScript==

'use strict'

// always inject adult consent cookie
;(function () {
  const hasAdultCookie = document.cookie.split('; ').includes('adult=1')
  if (!hasAdultCookie) {
    const d = new Date()
    d.setTime(d.getTime() + (100 * 24 * 60 * 60 * 1000))
    document.cookie = `adult=1; expires=${d.toGMTString()}; path=/`
    window.location.reload()
  }
})()

// skip loading image through php which seems to take forever
;(function () {
  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]}.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)
})()