Twitter - Timeline Filter

By kepp Last update Feb 14, 2008 — Installed 356 times.
// ==UserScript==
// @name           Twitter - Timeline Filter
// @namespace      http://twitter.timeline.filter/kepp
// @description    Dynamically filter items in timelines
// @include        http://twitter.com/*
// @include        https://twitter.com/*
// ==/UserScript==


// get text for each tweet in the timeline
function getTweets() {
  var tweets = new Array();
  var result = document.evaluate("id('timeline')//tr", document, null,
               XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
  var tweets = new Array(), node;
  while (tweet = result.iterateNext()) {
    var text = tweet.textContent.replace(/\s/gm, " ");
    tweets.push({node: tweet, text: text});
  }
  return tweets;
}

function filterTweets(event) {
  var input = event.target;
  clearTimeout(this.to);
  this.to = setTimeout(function() {
    var tweets = getTweets();
    for each (var tweet in tweets) {
      var show = new RegExp((input.value || "."), "i").test(tweet.text);
      tweet.node.style.display = (show) ? "" : "none";
    }
  }, 500)
}

function $x(query) {
  return document.evaluate(query, document, null,
         XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

(function() {

  // add the filter input
  var menu = $x("id('content')//*[@class='tabMenu']") ||
              $x("id('timeline')/preceding-sibling::p");

  var filter = document.createElement("li");
  filter.innerHTML = "<input \
    onblur=\"if (this.value) return; this.style.color = '#999';\
             this.value = 'filter...';\" \
    style='margin-left: 1em; color: #999; \
    text-align: center;' type='text' value='filter...'/>";

  var input = filter.firstChild;
  input.addEventListener("focus", function(event) {
    this.style.color = "black";
    this.value = "";
    filterTweets(event);
  }, false);

  // filter tweets as text is typed
  input.addEventListener("keyup", filterTweets, false);

  menu.appendChild(filter);

})();