Twitter media-only filter toggle.

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

当前为 2018-03-04 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Twitter media-only filter toggle.
  3. // @version 0.4
  4. // @description Toggle non-media tweets on and off, for the power-viewer!
  5. // @author Cro
  6. // @match https://twitter.com/*
  7. // @run-at document-idle
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @namespace https://greasyfork.org/users/10865
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. // Die fast if we cannot hook into the button bar.
  16. var buttonBar = document.getElementById("global-actions");
  17. if (buttonBar === null) return;
  18.  
  19. var hideIfTarget = function(node)
  20. {
  21. if (node.tagName &&
  22. node.tagName.toLowerCase() == "li" &&
  23. node.classList.contains("stream-item") &&
  24. null === node.querySelector("div.AdaptiveMediaOuterContainer"))
  25. {
  26. node.hidden = true;
  27. }
  28. };
  29.  
  30. var observer = new MutationObserver(mutations => mutations.forEach(mutation => mutation.addedNodes.forEach(hideIfTarget)));
  31. var stream = document.getElementsByClassName("stream")[0];
  32.  
  33. // UI
  34. var li = document.createElement("li");
  35. var button = document.createElement("button");
  36. var only = "Only Media Tweets";
  37. var all = "All Tweets";
  38. var storageKey = "cro-media-toggle";
  39.  
  40. button.onclick = function(event)
  41. {
  42. GM_setValue(storageKey, !GM_getValue(storageKey));
  43. var items = document.querySelectorAll("li.stream-item");
  44.  
  45. if (GM_getValue(storageKey))
  46. {
  47. button.innerText = only;
  48. items.forEach(hideIfTarget);
  49. observer.observe(stream, { childList: true, subtree: true });
  50. }
  51. else
  52. {
  53. button.innerText = all;
  54. items.forEach(node => node.hidden = false);
  55. observer.disconnect();
  56. }
  57. };
  58.  
  59. buttonBar.appendChild(li);
  60. li.appendChild(button);
  61. button.click();
  62. })();