By
Ikaros
—
Uploaded
May 30, 2009
/*
@author: Ikaros
@url: http://userscripts.org/jetpacks/13
@update: http://userscripts.org/jetpacks/13.js
@title: Twitter Notifier
@description: Displays Twitter notifications about every minute with the most recent tweet from your friends timeline ("wall").
@version: 0.3
*/
function TwitterNotifier() {
self = this;
self.update(); // initial update
setInterval(function() {
self.update(); // update it
}, 60000); // every 60 seconds (60 * 1000 milliseconds)
}
TwitterNotifier.prototype = {
openTwitter: function() {
jetpack.tabs.open(this.twitterUrl);
jetpack.tabs[jetpack.tabs.length - 1].focus();
},
notify: function(body, title, icon) {
jetpack.notifications.show({
title: title,
body: body,
icon: icon
});
},
update: function() {
self = this;
$.get(self.xmlUrl, function(xml) {
var el = $(xml).find("text"); // get the tweets
var al = $(xml).find("name"); // get the tweets' authors
var il = $(xml).find("profile_image_url"); // get their profile pictures
if (el) {
var newTweet = el.get(0).textContent; // get the first (0th) tweet
var author;
var profilePic;
if (al) {
author = al.get(0).textContent; // get the first author
} else {
author = "Twitter"; // something went wrong, set to default
}
if (il) {
profilePic = il.get(0).textContent; // get the first profile picture
} else {
profilePic = self.defaultProfile; // something went wrong, set to default
}
if (self.oldTweet != newTweet) {
self.notify(newTweet, author, profilePic);
self.oldTweet = newTweet;
}
} else {
self.notify("Please login to Twitter", "Twitter Notifier"); // user hasn't logged into Twitter yet
}
});
},
oldTweet: null,
xmlUrl: "http://twitter.com/statuses/friends_timeline.xml",
twitterUrl: "http://twitter.com/",
defaultProfilePic: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAACiFBMVEV9UTd9TzN9UDWDu/+Dvv+DvP99TzR9UDZ9UTZ9TjF9TjKDuf99TC59TS99TC2Dvf99UDR9V0KDuP99Ujl9TzJ9VT6Duv99Uzx9VT+DtPiAi6h9TTCCqeN9XEyCqOB+XE2CsPCDtvyAj7B+YVd/f5F+YlmAh6J9TjOCreuAjq5/d4GAkbSDtvuBmcJ+ZF2Ah6F9UjqAh6CBkbN+W0p9TjB+bW6Dv/9+ZmB+YFSDt/6Cs/aCsvSBmcSDsfKCq+eBlbt+YVaAiaaAhJt/gJR8TjGAhp9+aGWCqN99Z2J+X1OAja6CsfOCreqDr+2DuP59Uzt/d4B9X1ODs/V+bGx9YFR9XlGBnsx+Z2KCsfJ/eod+XlGAk7d8TS9+a2t9Sy2CodJ9XU9/fpCDtvp+XU9+Y1mBotR/bnB9WEaCr++BkrZ9X1J9W0qCqeF+cXZ/e4iBmMGBo9d/eYeBj7F/bW59WESCquWBlLp/gJKCsvV/bnF9VkCCpNd+YFV9WkiAhp59Ujt+ZmKAhJx+amd9VD2Bmsd/d4OBns5/g5mDt/1/h59+Y1qDtfp+WUd/dn99VUCCodN/iqd8TC2BmsaBoNF/d4KCpdp/cHZ9XU5+dX19WUZ/fY59TS5/fYx+bG2Bjq6Bns2DwP99V0OAjKmBlLt/c3qBncp/eIKCt/1/fo9+aWZ/e4p+ZV6AiqZ/cniDtfuAmsR+X1WDs/d9VD5/gJOCtfqBncuAiqiCtPeDsPGAnMp+WkmAiKKBkrWCp96AmcN+a2qBnMmCruyCsfCBptt/f49/fIuCtPl9Wkl+ZF6CruuCsvOBodR/eIN9VDx9V0SCtvt/bW9/c3t/b3N+Y1t9UTiAiqeCqOF+cXcHDNQ9AAACOElEQVR4Xu2SU9PkUBBAcxUObXy27bVt27Zt27Zt2/b+nd3cSWYzU/swT1u1VXOeutL3dKe7mvlnJEgAgU0UgYmPU+CEkV1npjfp1JqxxVfemh1A5DfuNn1APPWdHoRWrBzfO6cO+3pmaAUecn8RQBFKamq1AdCs1XbsG8RGBGiA5o46IVYQ8tuSAwDKoa5FjfEIiCSCzSdO6jFlKojuwrMFxpo0EI5BX9K+OwwLYv+WuEugHRqyYGHU8qB5OK61KkXEEZYOy0tpyHbOJMnd7OvW9yLPRa1gCr7AWf1Ue0wS8QwIh8l4oEuAQDcY1Q+FGoEdJqHFBlWYNgqP1tPPY8eVT5Ajkz8kTdZrhQrJkapTN2yejmeI8i+DlFnSbFmAc+biAoNWmGcxpkc6zK/GxdS2LUI3lwhyjaXLDuV4NWPDkhAuFnjFTluFVlMbrFlbVeaVhQ0b8abN2i3Zt+CtdmUqYZuUu0Ogu9hZb9wl94K7Mx179jIavPuIZb8QlgsPkh+HaTeuMK/8KAd5Xn9MqqsAWgH4feS4S+R4HupPnESnlKR42m0544TM2QA+F3OR4vkL6OIlJ7CaUy/j2itQLXT1mnT9RsMtcvuOieFZBQDl48iuNoby7t6770APSiK3x4GHjx67nzx9ZmcZ3lXZKEzKS3pCrxpe5zqq3rx9957VXhn7Id/PyTXFso8EUXAWpOsEwU+fv3z9lgGZKOTXNF9Z9L0xxfNTOTsolApRs8WaKpD5v0mQ4BfrGmuJRpIi3QAAAABJRU5ErkJggg==",
twitterIcon: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMG5mZmnjJysy/4eLm1u7w89ru8PPa7/D02+Hi5dasrK2iNDQzKwAAAAAAAAAAAAAAAAAAAAAAAAAAYWFhNN/f4cb///////7y///22f//89P///PU///z0///+OH//////8jIybkgICAVAAAAAAAAAAAAAAAAZmZmJOvs7c7///3//+u4//3Ygf/81HP//NRz//zUc//81HH//NV1///wyP/6/P/6fHx8TwAAAAAAAAAAAAAAAMnJypT//////uar//zSbP/8027//NNu//zSbf/80m3//NJt//zQZP//5af/+/z9/5ycnV4AAAAAAAAAAHJyciP4+f3h//TW//zTcv/803D//NNx//3YgP/93Iz//dyL//3bif/93ZL///jf//n6/edvb28xAAAAAAAAAACkpaVK+vr8+f/or//80mz//NNu//3dkf//9+f///34///89v///Pb///35//r7/O7FxsZuAAAAAAAAAAAAAAAAsrO0Vvn5+fz/5qb//NJs//zSbf/96rn////////////////////////////BwcKvNDQ0FwAAAAAAAAAAAAAAALCxsVb5+fr8/+an//zSbP/8027//eeu//767//++Ov//vjq//746v///PP/+fn6+6Kio5kTExMLAAAAAAAAAACwsbFW+fn6/P/mp//80m3//NRy//zWef/82ID//Nh///zYf//8133//dqF///22P/3+Pvzb29vRAAAAAAAAAAAsLGxVvn5+vz/5qf//NJt//zUc//81HH//NNu//zTbv/8027//NNu//zPZP//5aX//Pz9/5eXmGAAAAAAAAAAALCxsVb5+fr8/+an//zSbf/81HP//NV1//zWeP/81nj//NZ4//zVdv/8133///PQ//n6/fKGhoY/AAAAAAAAAACwsbFW+fn6/P/mp//80mz//NNu//zkqP//9uH///jh///23///9t7///vs///////S0tOTW1tbBAAAAAAAAAAAsrO0V/r6+v3/5aX//NFp//zRav/+6rn//P7//e7w88T19vmv8/T3s+zt767Y2Nltg4ODDQAAAAAAAAAAAAAAAKampj79/v/z/+/H//zUc//81nv///bb//P0+OSHh4gsAAAAAODg4AbFxcUEAAAAAAAAAAAAAAAAAAAAAAAAAABTU1MI7e3upf//////99////nk///////Dw8OFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJOTkxfW19eI5+nszujp7Mnb29t1dnZ2DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AMAwOABAMDAAWxpwAE+CoABICCAAyAggAMgIIABICCAASAggAEgIIABICCAASAggAMgIIBPICCA/yAgwP8gIA=="
}
jetpack.statusBar.append({
html: <>
<div style="position: absolute; width: 100%; height: 100%; text-align: center; padding-top: 2px; cursor: pointer;">
<img id="twitterIcon" />
</div>
</>,
width: 24,
onReady: function(doc) {
var twitNot = new TwitterNotifier();
$("img#twitterIcon", doc).attr("src", twitNot.twitterIcon); // set the statusbar icon
$(doc).click(function() { twitNot.openTwitter(); }); // open Twitter home when clicked
}
});