view mandarake-direct-link.user.js @ 127:a701294f38ff

More reliable state handling
author nanaya <me@nanaya.net>
date Sat, 21 Jan 2023 03:15:26 +0900
parents 8de2d53a4cb1
children 8ccdc82249a2
line wrap: on
line source

// ==UserScript==
// @name        mandarake direct link
// @namespace   https://nanaya.net
// @version     2.0.1
// @description Make proper link on mandarake pages
// @author      nanaya
// @match       https://order.mandarake.co.jp/*
// @match       http://order.mandarake.co.jp/*
// @grant       none
// @run-at      document-start
// @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/mandarake-direct-link.user.js
// ==/UserScript==

'use strict';

const r18ConfirmLink = '#adult_confirm';
function fixR18Link (link) {
  if (!(link instanceof window.HTMLAnchorElement) || link.getAttribute('href') !== r18ConfirmLink) return;

  link.setAttribute('href', `/order/detailPage/item?itemCode=${link.id}`);
  link.removeAttribute('class');
}

function removeR18Mark (node) {
  if (node.classList.contains('r18mark')) {
    node.remove();
    return true;
  }

  for (const mark of node.querySelectorAll('.r18mark')) {
    mark.remove();
  }
}

function run (node) {
  if (!(node instanceof window.HTMLElement)) return;
  if (removeR18Mark(node)) return;

  fixR18Link(node);
  for (const link of node.querySelectorAll(`a[href='${r18ConfirmLink}']`)) {
    fixR18Link(link);
  }
}

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);