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.2
  4. // @description Toggle non-media tweets on and off, for the power-viewer!
  5. // @author Cro
  6. // @match https://twitter.com/*
  7. // @grant GM_setValue
  8. // @grant GM_getValue
  9. // @namespace https://greasyfork.org/users/10865
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. var hideIfTarget = function(node)
  16. {
  17. if (node.tagName &&
  18. node.tagName.toLowerCase() == "li" &&
  19. node.classList.contains("stream-item") &&
  20. null === node.querySelector("div.AdaptiveMediaOuterContainer"))
  21. {
  22. node.hidden = true;
  23. }
  24. };
  25.  
  26. var mutationCallback = function(mutations)
  27. {
  28. for (var mutation of mutations)
  29. {
  30. for (var node of mutation.addedNodes)
  31. {
  32. hideIfTarget(node);
  33. }
  34. }
  35. };
  36.  
  37. var hideAllNonMedia = function()
  38. {
  39. document.querySelectorAll("li.stream-item").forEach(hideIfTarget);
  40. };
  41.  
  42. var showAllTweets = function()
  43. {
  44. document.querySelectorAll("li.stream-item").forEach(function (node) { node.hidden = false; });
  45. };
  46.  
  47. var observer = new MutationObserver(mutationCallback);
  48. var stream = document.getElementsByClassName("stream")[0];
  49.  
  50. // UI
  51. var buttonBar = document.getElementById("global-actions");
  52. var li = document.createElement("li");
  53. var button = document.createElement("button");
  54. var only = "Only Media Tweets";
  55. var all = "All Tweets";
  56. var storageKey = "cro-media-toggle";
  57. buttonBar.appendChild(li);
  58. li.appendChild(button);
  59.  
  60. button.onclick = function(event)
  61. {
  62. GM_setValue(storageKey, !GM_getValue(storageKey));
  63.  
  64. if (GM_getValue(storageKey))
  65. {
  66. button.innerText = only;
  67. hideAllNonMedia();
  68. observer.observe(stream, { childList: true, subtree: true });
  69. }
  70. else
  71. {
  72. button.innerText = all;
  73. showAllTweets();
  74. observer.disconnect();
  75. }
  76. };
  77.  
  78. button.click();
  79. })();