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);
})();