e621 Thumbnail Enhancer 2

Resizes thumbnails on e621.net and replaces them with hi-rez version. Modified for the new site design sometime around 2020-03-06

Fra 09.03.2020. Se den seneste versjonen.

// ==UserScript==
// @name         e621 Thumbnail Enhancer 2
// @version      1.05
// @description  Resizes thumbnails on e621.net and replaces them with hi-rez version. Modified for the new site design sometime around 2020-03-06
// @author       justrunmyscripts
// @include      *://*e621.net*
// @grant        GM.xmlHttpRequest
// @namespace    https://sleazyfork.org/en/users/96703-justrunmyscripts
// @run-at       document-end
// ==/UserScript==


// original script creator https://greasyfork.org/de/users/398891
// to edit the size of the thumbnails, change the 25vw values below (the ones marked with !important... ;D )

try {
  
  let isMyAbsoluteFavoritePath = window.location.toString().endsWith('/favorites');
  let postContainerHash = isMyAbsoluteFavoritePath ? '#posts' : '#posts-container';

  let sty =document.createElement("style");
  sty.innerHTML=[
       ""
      ,".thumbEnh_cont {"
      ,"    display: flex;"
      ,"    flex-flow: row wrap;"
      ,"}"
      ,".thumbEnh_cont img.thumbEnh_img {"
      ,"    max-height: 100%;"
      ,"    max-width: 100%;"
      ,"}"
      ,"article.post-preview {"
      ,"    height: 25vw !important;"
      ,"    width: 25vw !important;"
      ,"}"
      ,"article.post-preview > a, article.post-preview > a > picture {"
      ,"    height: 94%;"
      ,"    width: 100%;"
      ,"}"
  ].join("");
  document.head.appendChild(sty);


  /* Replace image thumbnails with higher resolution */
  const imageThumb = (thumb) => {
      let newThumb = document.createElement('img');
      let replace = function (thumb) {
        thumb.src = this.src;
      };
      let tryNoSample = function (thumb) {
        this.onerror = tryPng.bind(this, thumb);
        this.src = thumb.src.replace('/preview/', '/');
      };
      let tryPng = function (thumb) {
        this.onerror = tryGif.bind(this, thumb);
        this.src = thumb.src.replace('/preview/', '/').replace('.jpg', '.png');
      };
      let tryGif = function (thumb) {
        this.onerror = null;
        this.src = thumb.src.replace('/preview/', '/').replace('.jpg', '.gif');
      };
      newThumb.onload = replace.bind(newThumb, thumb);
      newThumb.onerror = tryNoSample.bind(newThumb, thumb);
      newThumb.src = thumb.src.replace('/preview/', '/sample/');
  }

  const main = () => {
      let contDiv = document.querySelector(postContainerHash);
      contDiv.className = "thumbEnh_cont";

      let imgs = document.querySelectorAll('article.post-preview img');
      for (img of imgs) {
        img.className = "thumbEnh_img";
        imageThumb(img);
      }

      // remove extra sources, since we're just using the "high rez" version anyways!
      let sources = document.querySelectorAll('article.post-preview source');
      for (source of sources) {  
        let parent = source.parentNode;
        parent.removeChild(source);
      }
  };

  main();

} catch (e) {
  // due to the way greasemonkey 'traps' errors, it kinda hides where the problem is!
  // this is an attempt at "fixing" that
	console.error(e);
}