Hentai in New Tabs by One Click

Make Lewding Easier

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Hentai in New Tabs by One Click
// @namespace    https://github.com/CinnamonJui
// @version      0.2.3
// @description  Make Lewding Easier
// @author       CinnamonJui
// @match        https://exhentai.org/g/*
// @match        https://e-hentai.org/g/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=e-hentai.org
// @grant        none
// @license MIT
// ==/UserScript==

/* jshint esversion:6 */

function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}

function getImagePageLinks() {
    const gallery = document.getElementById('gdt');
    const imgs = Array(...gallery.children).filter( e => e.className === 'gdtl');
    const links = imgs.map(e => e.children[0].href);
    return links;
}



function openLinkInNewTab(l) {
    window.open(l, '_blank')
}

(function() {
    'use strict';
    addGlobalStyle('#gdo2 { width: 350px !important; }');

    const newTabBtn = document.createElement('div');
    newTabBtn.textContent = 'New Tab';
    newTabBtn.className = 'tha nosel';
    let isLewding = false;
    let NUM_LINK_PROCESSED = 0;
    let NUM_TOTAL_LINK = 0;
    function fetchImageLinkInImagePage(l) {
        const ret = fetch(l)
            .then(res => res.arrayBuffer())
            .then(u8arr => new TextDecoder().decode(u8arr))
            .then(body => new DOMParser().parseFromString(body, 'text/html'))
            .then(dom => dom.getElementById('img').src)
            .finally(_ => {
                NUM_LINK_PROCESSED += 1;
                newTabBtn.textContent = `${NUM_LINK_PROCESSED}/${NUM_TOTAL_LINK}`;
            });
        return ret;
    }
    newTabBtn.onclick = e => {
        e.preventDefault();
        if (isLewding) {
            console.log('Already opening image sources. Patience makes you a better person at lewding. 🍆');
            return;
        }
        isLewding = true;
        const pageLinks = getImagePageLinks();
        NUM_TOTAL_LINK = pageLinks.length;
        NUM_LINK_PROCESSED = 0;
        const imageLinks = pageLinks.map(fetchImageLinkInImagePage);
        Promise.all(imageLinks)
            .then(links => links.map(openLinkInNewTab))
            .finally(_ => {
                isLewding = false;
                newTabBtn.textContent = 'New Tab';
             });
    };

    const rowNumSec = document.getElementById('gd5');
    rowNumSec.append(newTabBtn);
})();