Eienteibooru

Userscripts for grabbing

Posted under General

4chan

// ==UserScript==
// @name         Manual media grab
// @namespace    http://eientei.org/
// @version      0.2
// @description  Removes non-media posts from the threads, simplifying manual content grabbing
// @author       iamtakingiteasy
// @match        https://boards.4chan.org/*/thread/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=4chan.org
// @grant        none
// @run-at document-end
// ==/UserScript==

(function() {
    'use strict';

    document.querySelectorAll('.sideArrows').forEach(x => x.parentElement.removeChild(x));

    document.querySelectorAll('.replyContainer img').forEach(r => ((f, p) => {
        const base = 200;
        const oi = f.querySelector('img');

        const a = document.createElement('a');
        a.href = f.href;
        a.onclick = e => e.preventDefault();
        a.appendChild(oi);
        a.style = 'text-align: center; vertical-align: middle; justify-content: center; align-items: center; display: inline-flex';

        const vid = a.href.endsWith('.webm') || a.href.endsWith('.mp4');
        const gif = a.href.endsWith('.gif');

        if (vid || gif) {
            a.style.width = `calc(${base}px - 0.2ex)`;
            a.style.height = `calc(${base}px - 0.2ex)`;
            a.style.border = `0.1ex ${gif ? 'dashed' : 'solid'} maroon`;
        } else {
            a.style.width = `${base}px`;
            a.style.height = `${base}px`;
        }

        oi.onclick = ((a, oi, vid) => (e) => {
            const ni = document.createElement(vid ? 'video' : 'img');
            ni.style.maxWidth = `calc(${base}px - 1ex)`;
            ni.style.maxHeight = `calc(${base}px - 1ex)`;
            ni.src = a.href;
            if (vid) {
                ni.controls = true;
                ni.autoplay = true;
            };

            const d = document.createElement('div');
            d.style = 'border: 0.5ex solid #d9bfb7';
            d.onclick = ((a,d,oi) => () => {
                a.removeChild(d);
                oi.style.display = 'inherit';
            })(a, d, oi);

            d.appendChild(ni);
            a.appendChild(d);

            oi.style.display = 'none';
        })(a, oi, vid);

        p.parentElement.replaceChild(a, p);
    })(r.parentElement, r.parentElement.parentElement.parentElement.parentElement));

    document.querySelectorAll('.replyContainer').forEach(x => x.parentElement.removeChild(x));

    const op = document.querySelector('.opContainer');
    ((p) => { p.removeChild(op); p.appendChild(op); })(op.parentElement);

    setTimeout(() => { document.querySelector('.thread').scrollIntoView(); }, 0);
})();

Updated

  • Reply
  • 1