carlfoxmarten / FA - Select YCH and Stream notices

// ==UserScript==
// @name         FA - Select YCH and Stream notices
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Selects YCH and Stream notice submissions and journals so you can delete them faster.
// @author       Carl Foxmarten
// @match        https://www.furaffinity.net/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    var notify = function(text){
        var div = document.createElement("div");
        div.style.border = "1px solid black";
        div.style.borderBottom = "none";
        div.style.backgroundColor = "#ffc";
        div.style.color = "black";
        div.style.borderTopLeftRadius = div.style.borderTopRightRadius = "0.4em";
        div.style.left = "50%";
        div.style.transform = "translateX(-50%)";
        div.style.bottom = "0";
        div.style.position = "fixed";
        div.style.paddingTop = "3px";
        div.style.paddingLeft = div.style.paddingRight = "9px";

        div.innerText = text;
        document.body.appendChild(div);
    };

    // The regular expressions to match go here:
    const matcher_caps = /.*YCH.*/;
    const matcher_insens = /.*(streaming|adopt|closed).*/i;

    /*
        The goal of this script is to add a button to select all the YCH and Streaming reminder submissions.

        - Add a panel (somewhere) to have a button to do this.

        Optional:
        - Add an option to automatically do this, by setting a cookie.
            - Refresh said cookie whenever the page is loaded.
    */
    // The root element:
    var relem = document.createElement("DIV");

    // Add button for "Select YCHs and Streams"
    relem.innerHTML = "<button class=\"standard\" type=\"button\" value=\"YCH-streams\" id=\"ych\">YCH&<span class=\"hideontablet hideondesktop\"><br></span>Streams</button>";

    // If this is the Submissions page:
    if (document.location.pathname.indexOf("/msg/submissions") == 0)
    {
        var sections = document.getElementsByClassName("section-body");
        var section = sections[sections.length-1].children[1];
        section.insertBefore(relem.firstElementChild, section.childNodes[0]);
        var btn = document.getElementById("ych");

        btn.addEventListener("click", function (e){
            // Select all the YCH and Stream submissions
            var submissions = document.getElementsByTagName("figure");
            var name, count=0;
            for (var i=0; i < submissions.length; i++)
            {
                name = submissions[i].querySelector("label p a").innerText;
                if (name.match(matcher_caps) != null || name.match(matcher_insens) != null)
                {
                    // This is a match, make sure it's checked.
                    submissions[i].querySelector("label input[type=checkbox]").checked = true;
                    submissions[i].className += " checked";
                    ++count;
                }
            }

            if (count > 0)
            {
                // TODO: We had matches, give a warning.
                notify(`Found ${count} submissions.`);
            }
            return false;
        }, true);
    }
    else if (document.location.pathname.indexOf("/msg/others") == 0)
    {
        // If this is the Other Messages page:
        section = document.getElementById("messages-journals").querySelector(".section-header .section_controls");
        section.insertBefore(relem.firstElementChild, section.childNodes[1]);

        btn = document.getElementById("ych");

        btn.addEventListener("click", function (e){
            // Select all the YCH and Stream journals
            var submissions = document.querySelectorAll("#messages-journals li");
            var name, count=0;
            for (var i=0; i < submissions.length; i++)
            {
                name = submissions[i].querySelector(".journal_subject").innerText;
                if (name.match(matcher_caps) != null || name.match(matcher_insens) != null)
                {
                    // This is a match, make sure it's checked
                    submissions[i].querySelector("input[type=checkbox]").checked = true;
                    submissions[i].className += " checked";
                    ++count;
                }
            }

            if (count > 0)
            {
                // TODO: We had matches, give a warning.
                notify(`Found ${count} journals.`);
            }
            return false;
        }, true);
    } // end if (Submissions/Others)

    // Any other page, don't do anything.
})();