view mandarake-direct-link.user.js @ 113:647ade033475

Backed out changeset 684704b5adbf
author nanaya <me@nanaya.net>
date Sun, 15 Jan 2023 23:43:37 +0900
parents ef21ef445fc6
children d9dc190bccaf
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';

function directLink () {
  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);
}

directLink();