Greasy Fork is available in English.

Dump shit

I'm sick of right clicking download or resorting to the shitty 1 click downloader (which doesn't use the timestamp filename) for my cartoons

// ==UserScript==
// @name         Dump shit
// @version      1.1
// @description  I'm sick of right clicking download or resorting to the shitty 1 click downloader (which doesn't use the timestamp filename) for my cartoons
// @author       Ayoholup
// @match        *://*/*
// @grant        GM_download
// @require      https://code.jquery.com/jquery-3.1.1.min.js
// @namespace https://greasyfork.org/users/476679
// ==/UserScript==

(function() {
    const HOTKEY = "NumpadMultiply";

    let previews4Chan = (src) => {
        let spl = src.split(".");
        let filename = spl[spl.length - 2];
        let hasS = filename.substr(filename.length - 1).toLowerCase() == "s";
        if (hasS) { spl[spl.length-2] = spl[spl.length-2].slice(0, -1); }
        return spl.join(".");
    };
    //forceExt is to bruce force all extensions in the array below.
    //not needed for tiktok as videos only have 1 extension and is provided before calling the download function.
    let download = (url, filename, forceExt = false) => {
        if (!forceExt) {
            //runs if you know the specific file extension needed.
            GM_download({
                url: url,
                name: filename,
                onload: () => console.log(`${filename} worked out fine`)
            });
        } else {
            //brute forces all the following file extensions. Only 1 will work so no duplicates i hope
            let ext = ["jpg", "jpeg", "png", "gif", "webm", "mp4"].forEach((ext) => {
                let newURL = url.substring(0, url.lastIndexOf(".") + 1) + ext;
                let newFilename = filename.substring(0, filename.lastIndexOf(".") + 1) + ext;
                GM_download({
                    url: newURL,
                    name: newFilename,
                    onload: () => console.log(`${newFilename} worked out fine`),
                    onerror: (error, details) => console.log(error, details)
                });
            });
        }
    }
    let parseImg = (e) => {
        if (e.code == HOTKEY) {
            let hover = Array.from(document.querySelectorAll(":hover"));
            hover.forEach((el) => {
                //images and stuff (4chan etc...)
                if (el.tagName.toLowerCase() == "img") {
                    let src = el.currentSrc;
                    //Downloads full image if hovering over preview
                    if (window.location.hostname.includes("4chan")) {
                        src = previews4Chan(src);
                    }
                    //filename without extension, will be brute forced later.
                    let filename = src.split("/").pop();
                    console.log(`Downloading URL: ${src} into Filename: ${filename}`);
                    download(src, filename, forceURLExt = true);
                }
            });
        }
    };
    document.addEventListener("keydown", parseImg);
})();