AutoReblog2Queue

Make your Tumblr queue in a single key press.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         AutoReblog2Queue
// @namespace    https://github.com/KeyWeeUsr/Userscripts
// @version      1.0
// @description  Make your Tumblr queue in a single key press.
// @author       Peter Badida
// @copyright    2018+, Peter Badida
// @license      GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt
// @homepage     https://github.com/KeyWeeUsr/Userscripts/tree/master/AutoReblog2Queue
// @supportURL   https://github.com/KeyWeeUsr/Userscripts/issues
// @icon         https://assets.tumblr.com/images/favicons/favicon.ico
// @include      https://www.tumblr.com/dashboard*
// @include      https://www.tumblr.com/dashboard/*
// @grant        unsafeWindow
// @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ACVM74AYCXVWQ
// ==/UserScript==
'use strict';

/**
 * Autoreblog to Queue
 *
 * Userscript for Tumblr Dashboard which automatically changes the reblogging
 * option to "Add to queue" and reblogs it immediately.
 *
 * Basically this little script takes an advantage of the already available
 * behavior of Tumblr keyboard shortcuts i.e. navigating via J and K keys
 * together with R for reblogging. The script works in the background, checks
 * whether the modal window is present (waits if not), changes the reblogging
 * options and then presses the "Queue" button (changed "Reblog" button).
 *
 * Just use these navigation keys: J (up), K (down), L (heart), R (reblog).
 *
 * You can toggle the autoreblogging script on/off with the Ctrl + Q keys.
 * It's turned on by default.
 *
 * Also, if you deactivated the script and pressed R (reblog), you can always
 * activate it back with Ctrl + Q keys and the script will automatically add
 * the current post you are reblogging to the queue.
 *
 * Notify me if there's something missing/undesirable.
 */

var DEBUG = false;

/* how often to check for reblog modal */
var INTERVAL = 500;


function sleep(ms) {
    var i;
    var start = new Date().getTime();

    while (i < 1e7) {
        if ((new Date().getTime() - start) > ms) {
            break;
        }
        i++;
    }
}


function reblog_to_queue() {
    var modal;
    var button;
    var arrow;
    var menu;
    var items;
    var i;

    /* find the modal window and wait if not available */
    modal = document.getElementsByClassName("post-forms-modal")[0];
    button = modal.getElementsByClassName("post-form--save-button");
    if (!button.length) {
        return;
    }

    /* modal window is available, reblog button is found, open the options */
    button = button[0];
    arrow = button.getElementsByClassName("icon_arrow_carrot_down")[0];
    arrow.click();

    /* find the options menu element and pull the items out */
    menu = modal.getElementsByClassName("pop-menu")[0];
    items = menu.getElementsByClassName("item-option");

    /* find the "Add to queue" option in the reblog options and select it */
    for (i = 0; i < items.length; i++) {
        if (items[i].innerText !== "Add to queue") {
            continue;
        }
        items[i].click();
        break;
    }

    /* press the reblog button */
    button.getElementsByTagName("button")[0].click();

    /**
     * and remove it from parent to prevent duplicates in the queue
     * from pressing the button multiple times via interval
     */
    button.parentNode.removeChild(button);
}


function bind_CtrlQ_keys() {
    var key;

    document.body.addEventListener("keydown", function(eve) {
        if (DEBUG) {
            console.log(window.autoreblogscript);
            console.log(eve);
        }

        /* get keycode from event */
        key = eve.which || eve.keyCode;

        /* check if Q and Ctrl are pressed */
        if (eve.ctrlKey && key == 81) {
            if (window.autoreblogscript) {
                /* toggle off */
                clearInterval(window.autoreblogscript);
                window.autoreblogscript = null;
                /* make sure the interval is really stopped */
                console.log("[AutoReblog2Queue] off");
            } else {
                /* toggle on */
                window.autoreblogscript = setInterval(
                    reblog_to_queue, INTERVAL
                );
                console.log("[AutoReblog2Queue] on");
            }
        }
    });
}


bind_CtrlQ_keys();
window.autoreblogscript = setInterval(reblog_to_queue, INTERVAL);