Twitter media-only filter toggle.

Toggle non-media tweets on and off, for the power-viewer!

ของเมื่อวันที่ 04-03-2018 ดู เวอร์ชันล่าสุด

// ==UserScript==
// @name         Twitter media-only filter toggle.
// @version      0.2
// @description  Toggle non-media tweets on and off, for the power-viewer!
// @author       Cro
// @match        https://twitter.com/*
// @grant        GM_setValue
// @grant        GM_getValue
// @namespace https://greatest.deepsurf.us/users/10865
// ==/UserScript==

(function() {
    'use strict';

    var hideIfTarget = function(node)
    {
        if (node.tagName &&
            node.tagName.toLowerCase() == "li" &&
            node.classList.contains("stream-item") &&
            null === node.querySelector("div.AdaptiveMediaOuterContainer"))
        {
            node.hidden = true;
        }
    };

    var mutationCallback = function(mutations)
    {
        for (var mutation of mutations)
        {
            for (var node of mutation.addedNodes)
            {
                hideIfTarget(node);
            }
        }
    };

    var hideAllNonMedia = function()
    {
        document.querySelectorAll("li.stream-item").forEach(hideIfTarget);
    };

    var showAllTweets = function()
    {
        document.querySelectorAll("li.stream-item").forEach(function (node) { node.hidden = false; });
    };

    var observer = new MutationObserver(mutationCallback);
    var stream = document.getElementsByClassName("stream")[0];

    // UI
    var buttonBar = document.getElementById("global-actions");
    var li = document.createElement("li");
    var button = document.createElement("button");
    var only = "Only Media Tweets";
    var all = "All Tweets";
    var storageKey = "cro-media-toggle";
    buttonBar.appendChild(li);
    li.appendChild(button);

    button.onclick = function(event)
    {
        GM_setValue(storageKey, !GM_getValue(storageKey));

        if (GM_getValue(storageKey))
        {
            button.innerText = only;
            hideAllNonMedia();
            observer.observe(stream, { childList: true, subtree: true });
        }
        else
        {
            button.innerText = all;
            showAllTweets();
            observer.disconnect();
        }
    };

    button.click();
})();