Extra Fabulous Comics simplifier and next and previous buttons

Adds previous and next buttons/links to Extra Fabulous Comics to make it easier to read a lot of older comics.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Extra Fabulous Comics simplifier and next and previous buttons
// @namespace   Tehhund
// @match       *://*.extrafabulouscomics.com/*
// @icon        https://static.wixstatic.com/media/904535_d7187dcb8545431db8f80865f59ef376%7Emv2.png/v1/fill/w_32%2Ch_32%2Clg_1%2Cusm_0.66_1.00_0.01/904535_d7187dcb8545431db8f80865f59ef376%7Emv2.png
// @grant       none
// @version     24
// @author      Tehhund
// @description Adds previous and next buttons/links to Extra Fabulous Comics to make it easier to read a lot of older comics.
// @license     MIT
// @run-at      document-start
// ==/UserScript==

const blankScreenUntilLoad = () => {
  style = document.createElement('style');
  style.type = 'text/css';
  style.innerHTML = '* { filter: brightness(0); }';
  style.id = 'tehhundScriptBlankStyle';
  setTimeout(() => { // prevents running before document.head loads. May need to switch to a MutationObserver.
    document.head.prepend(style);
    unBlankScreen();
  });
}
blankScreenUntilLoad();

const unBlankScreen = () => {
  document.body.style.backgroundColor = "black";
  document.getElementById('tehhundScriptBlankStyle').remove();
  const scriptTag = document.getElementById('tehhundScriptBlankStyle');
  if (scriptTag) {
    scriptTag.remove();
  }
}

const calculateCurrentPrevNext = () => {
  let currentComic = window.location.href;
  currentComic = currentComic.slice(-5); // example: https://www.extrafabulouscomics.com/____1
  currentComic = parseInt(currentComic.replace(/\D/g, ''));

  let nextComic = currentComic + 1;
  nextComic = nextComic.toString().padStart(5, '_');
  nextComic = 'https://www.extrafabulouscomics.com/' + nextComic;

  let prevComic = currentComic - 1;
  prevComic = prevComic.toString().padStart(5, '_');
  prevComic = 'https://www.extrafabulouscomics.com/' + prevComic;

  return { 'current': currentComic, 'next': nextComic, 'prev': prevComic };
}

const addLinks = () => {
  let nextPrevLinks = document.getElementsByClassName('tehhundScript');
  while (nextPrevLinks.length > 0) {
    nextPrevLinks[0].remove(); // For of was skipping elements so this fixes that.
  }

  let comic = document.querySelectorAll('img')[0].cloneNode();
  document.body.innerHTML += '<style>* { background: black; }</style>';
  const allElems = document.body.getElementsByTagName('*');
  for (let elem of allElems) {
    //elem.style.filter = 'brightness(0%)';
    elem.remove();
  }
  document.body.appendChild(comic);
  comic.style.paddingTop = '7rem';
  comic.style.paddingBottom = '7rem';

  /*const currentComic = window.location.href;

  document.body.innerHTML += '<a class="tehhundScript tehhundScriptPrev" href="https://paulkoepke.com/redirector/?redirectUrl=' + currentComic + '&direction=prev" style="position: fixed;top: 5rem;left: 0;border: 1px solid #000000;font-size: 1rem;">Prev</button>';
  document.body.innerHTML += '<a class="tehhundScript tehhundScriptPrev" href="https://paulkoepke.com/redirector/?redirectUrl=' + currentComic + '&direction=prev" style="position: fixed;bottom: 5rem;left: 0;border: 1px solid #000000;font-size: 1rem;">Prev</button>';

  document.body.innerHTML += '<a class="tehhundScript tehhundScriptNext" href="https://paulkoepke.com/redirector/?redirectUrl=' + currentComic + '&direction=next" style="position: fixed;top: 5rem;right: 0;border: 1px solid #000000;font-size: 1rem;">Next</button>';
  document.body.innerHTML += '<a class="tehhundScript tehhundScriptNext" href="https://paulkoepke.com/redirector/?redirectUrl=' + currentComic + '&direction=next" style="position: fixed;bottom: 5rem;right: 0;border: 1px solid #000000;font-size: 1rem;">Next</button>';*/
  const topNextLink = document.createElement('a');
  topNextLink.style.position = 'fixed';
  topNextLink.style.top = '5rem';
  topNextLink.style.right = '0';
  topNextLink.style.border = '1px solid #000000';
  topNextLink.style.fontSize = '1rem';
  topNextLink.classList = 'tehhundScript tehhundScriptNext';
  topNextLink.href = calculateCurrentPrevNext()['next'];
  topNextLink.textContent = 'Next';
  document.body.append(topNextLink);

  const bottomNextLink = topNextLink.cloneNode(true);
  bottomNextLink.style.top = '';
  bottomNextLink.style.bottom = '5rem';
  document.body.append(bottomNextLink);

  const topPrevLink = topNextLink.cloneNode(true);
  topPrevLink.style.right = '';
  topPrevLink.style.left = '0';
  topPrevLink.href = calculateCurrentPrevNext()['prev'];
  topPrevLink.textContent = 'Prev';
  document.body.append(topPrevLink);

  const bottomPrevLink = topPrevLink.cloneNode(true);
  bottomPrevLink.style.top = '';
  bottomPrevLink.style.bottom = '5rem';
  document.body.append(bottomPrevLink);

  // EFC website is slow to load new pages. This should speed it up a bit.
  const linkRels = ['prefetch', 'preload', 'preconnect', 'dns-prefetch', 'prerender'];
  for (let rel of linkRels) {
    document.head.innerHTML += '<link link rel="' + rel + '" href="' + calculateCurrentPrevNext()['next'] + '" >';
    document.head.innerHTML += '<link link rel="' + rel + '" href="' + calculateCurrentPrevNext()['prev'] + '" >';
  }

  //Move the whole body up a bit.
  /*document.getElementsByTagName('body')[0].style.position = 'relative';
  document.getElementsByTagName('body')[0].style.top = '-2rem';*/

}
window.addEventListener("DOMContentLoaded", (event) => {
  addLinks();
  setTimeout(unBlankScreen);
});