Skip to content

Instantly share code, notes, and snippets.

@cbrumelle
Created February 9, 2010 00:36
Show Gist options
  • Select an option

  • Save cbrumelle/298772 to your computer and use it in GitHub Desktop.

Select an option

Save cbrumelle/298772 to your computer and use it in GitHub Desktop.
(function($) {
$.fn.tweet = function(o){
var s = {
username: ["your-twitter-username"],
count: 3,
loading_text: null
};
$.fn.extend({
linkUrl: function() {
var returning = [];
var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
this.each(function() {
returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"))
});
return $(returning);
},
linkUser: function() {
var returning = [];
var regexp = /(\s|^)[\@]+(\w+)/gi;
this.each(function() {
returning.push(this.replace(regexp," <a href=\"http://twitter.com/$2\">@$2</a>"))
});
return $(returning);
},
linkHash: function() {
var returning = [];
var regexp = / [\#]+(\w+)/gi;
this.each(function() {
returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from='+s.username.join("%2BOR%2B")+'">#$1</a>'))
});
return $(returning);
}
});
function relative_time(time_value) {
var parsed_date = Date.parse(time_value);
var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
if(delta < 60) {
return 'less than a minute ago';
} else if(delta < 120) {
return 'about a minute ago';
} else if(delta < (45*60)) {
return (parseInt(delta / 60)).toString() + ' minutes ago';
} else if(delta < (90*60)) {
return 'about an hour ago';
} else if(delta < (24*60*60)) {
return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
} else if(delta < (48*60*60)) {
return '1 day ago';
} else {
return (parseInt(delta / 86400)).toString() + ' days ago';
}
}
if(o) $.extend(s, o);
return this.each(function(){
var list = $('<ul>').appendTo(this);
var loading = $('<p class="loading">'+s.loading_text+'</p>');
if(typeof(s.username) == "string"){
s.username = [s.username];
}
var query = '';
if(s.query) {
query += 'q='+s.query;
}
query += '&q=from:'+s.username.join('%20OR%20from:');
var url = 'http://search.twitter.com/search.json?&'+query+'&rpp='+s.count+'&callback=?';
if (s.loading_text) $(this).append(loading);
$.getJSON(url, function(data){
if (s.loading_text) loading.remove();
$.each(data.results, function(i,item){
var date = '<br /><span class="tweet_date"><a href="http://twitter.com/'+item.from_user+'/statuses/'+item.id+'" title="view tweet on twitter"> ~ '+relative_time(item.created_at)+'</a></span> ';
var text = $([item.text]).linkUrl().linkUser().linkHash()[0];
list.append('<li>'+ text + date +'</li>');
});
});
});
};
})(jQuery);
/* USAGE EXAMPLE */
$(document).ready(function(){
$(".tweet").tweet({
username: "thebirdherd",
count: 3,
loading_text: "loading tweets..."
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment