(function($){
$.fn.tweet=function(o){
var s={
username: ["seaofclouds"],
avatar_size: null,
count: 3,
intro_text: null,
outro_text: null,
join_text: null,
auto_join_text_default: "i said,",
auto_join_text_ed: "i",
auto_join_text_ing: "i am",
auto_join_text_reply: "i replied to",
auto_join_text_url: "i was looking at",
loading_text: null,
query: 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=/[\@]+([A-Za-z0-9-_]+)/gi
this.each(function(){
returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"))
})
return $(returning)
},
linkHash: function(){
var returning=[]
var regexp=/[\#]+([A-Za-z0-9-_]+)/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)
},
capAwesome: function(){
var returning=[]
this.each(function(){
returning.push(this.replace(/(a|A)wesome/gi,'AWESOME'))
})
return $(returning)
},
capEpic: function(){
var returning=[]
this.each(function(){
returning.push(this.replace(/(e|E)pic/gi,'EPIC'))
})
return $(returning)
},
makeHeart: function(){
var returning=[]
this.each(function(){
returning.push(this.replace(/[&lt;]+[3]/gi,"<tt class='heart'>&#x2665;</tt>"))
})
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 class="tweet_list">').appendTo(this)
var intro='<p class="tweet_intro">'+s.intro_text+'</p>'
var outro='<p class="tweet_outro">'+s.outro_text+'</p>'
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()
if(s.intro_text)list.before(intro)
$.each(data.results,function(i,item){
if(s.join_text=="auto"){
if(item.text.match(/^(@([A-Za-z0-9-_]+)).*/i)){
var join_text=s.auto_join_text_reply
}else if(item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+).*/i)){
var join_text=s.auto_join_text_url
}else if(item.text.match(/^((\w+ed)|just).*/im)){
var join_text=s.auto_join_text_ed
}else if(item.text.match(/^(\w*ing).*/i)){
var join_text=s.auto_join_text_ing
}else{
var join_text=s.auto_join_text_default}
}else{
var join_text=s.join_text}
var join_template='<span class="tweet_join"> '+join_text+' </span>'
var join=((s.join_text)? join_template : ' ')
var avatar_template='<a class="tweet_avatar" href="http://twitter.com/'+item.from_user+'"><img src="'+item.profile_image_url+'" height="'+s.avatar_size+'" width="'+s.avatar_size+'" alt="'+item.from_user+'\'s avatar" border="0"/></a>'
var avatar=(s.avatar_size ? avatar_template : '')
var date='<a href="http://twitter.com/'+item.from_user+'/statuses/'+item.id+'" title="view tweet on twitter">'+relative_time(item.created_at)+'</a>'
var text='<span class="tweet_text">'+$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+'</span>'
list.append('<li>'+avatar+date+join+text+'</li>')
list.children('li:first').addClass('tweet_first')
list.children('li:odd').addClass('tweet_even')
list.children('li:even').addClass('tweet_odd')
})
if(s.outro_text)list.after(outro)
})
})}
})(jQuery)

