Toggle non-media tweets on and off, for the power-viewer!
À partir de
// ==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();
})();