| Current File : //var/tiffanylin/lef/wp-content/themes/care3/functions/shortcodes-ultimate/js/jquery.minitwitter.js |
// jquery.minitwitter.js - http://minitwitter.webdevdesigner.com/
// Copyright © 2012 Olivier Bréchet
(function( $, window, document, undefined ) {
$.fn.miniTwitter = function( options ) {
var o = $.extend({
username: ['webdevdesigner'],
list: null,
favorite: false,
query: null,
limit: 5,
max: null,
page: 1,
retweet: true,
refresh: null,
linkColor: null,
nofollow: true,
blank: true,
tweetId: 0
}, options);
function fetch () {
return $.ajax({
url: url(),
dataType: 'jsonp'
});
};
function url() {
var p = ('https:' == document.location.protocol ? 'https:' : 'http:');
var limit = (o.max === null) ? o.limit : o.max;
if (o.favorite) {
return p+'//api.twitter.com/favorites/'+o.username[0]+'.json?page='+o.page+'&count='+limit+'&include_entities=1&callback=?';
} else if (o.list) {
return p+'//api.twitter.com/1/'+o.username[0]+'/lists/'+o.list+'/statuses.json?page='+o.page+'&per_page='+limit+'&include_entities=1&callback=?';
} else if (o.query === null && o.username.length == 1) {
return p+'//api.twitter.com/1/statuses/user_timeline.json?screen_name='+o.username[0]+'&count='+limit+(o.retweet ? '&include_rts=1' : '')+'&page='+o.page+'&include_entities=1&callback=?';
} else {
var query = (o.query || 'from:'+o.username.join(' OR from:'));
return p+'//search.twitter.com/search.json?&q='+encodeURIComponent(query)+'&rpp='+limit+'&page='+o.page+'&include_entities=1&callback=?';
}
};
function parse_date (date_str) {
return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
}
function createdAt (date) {
var d = (new Date).getTime() - parse_date(date);
var thedate = new Date(parse_date(date));
var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
if (d>86400000) {
d = thedate.getDate()+' '+month[thedate.getMonth()];
} else if (d>3600000) {
d = parseInt(d/3600000)+'h';
} else if (d>60000) {
d = parseInt(d/60000)+'m';
}else if (d>1000) {
d = parseInt(d/1000)+'s';
}
return d;
}
function replacer (regex, replacement) {
return function() {
var res = [];
this.each(function() {
res.push(this.replace(regex, replacement));
});
return $(res);
};
}
function escapeHTML(s) {
return s.replace(/</g,"<").replace(/>/g,"^>");
}
$.fn.extend({
linkUser: replacer(/(^|[\W])@(\w+)/gi, '$1<a '+rel()+' '+target()+' href="http://twitter.com/$2">@$2</a>'),
linkHash: replacer(/(?:^| )[\#]+([\w\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff\u0600-\u06ff]+)/gi,
' <a '+rel()+' '+target()+' href="http://search.twitter.com/search?q=&tag=$1&lang=all">#$1</a>')
});
function rel() {
return ( o.nofollow ? 'rel="nofollow"' : '');
}
function target() {
return ( o.blank ? 'target="_blank"' : '');
}
function linkURLs(text, entities) {
var regexToken = /(((ftp|https?):\/\/)[\-\w@:%_\+.~#?,&\/\/=]+)|((mailto:)?[_.\w-]+@([\w][\w\-]+\.)+[a-zA-Z]{2,3})/g;
return text.replace(regexToken, function(match) {
var url = (/^[a-z]+:/i).test(match) ? match : 'http://'+match;
var text = match;
for(var i = 0; i < entities.length; ++i) {
var entity = entities[i];
if (entity.url == url && entity.expanded_url) {
url = entity.expanded_url;
text = entity.display_url;
break;
}
}
return '<a '+rel()+' '+target()+' href="'+escapeHTML(url)+'">'+escapeHTML(text)+'</a>';
});
}
function fetchTweetsData ( object ) {
var obj = {};
obj.text = object.text;
obj.tweetId = object.id_str;
obj.tweetUrl = obj.userUrl+"/status/"+obj.tweetId;
obj.retweet = typeof(object.retweeted_status) != 'undefined';
obj.screenName = obj.retweet ? object.retweeted_status.user.screen_name : (object.from_user || object.user.screen_name ) ;
obj.realName = obj.retweet ? object.retweeted_status.user.name : (object.from_user_name || object.user.name);
obj.userUrl = obj.retweet ? "http://twitter.com/"+object.retweeted_status.user.screen_name : "http://twitter.com/"+obj.screenName;
obj.tweetTime = createdAt(object.created_at);
obj.image = obj.retweet ? object.retweeted_status.user.profile_image_url : object.profile_image_url || object.user.profile_image_url ;
obj.replyUrl = "http://twitter.com/intent/tweet?in_reply_to="+o.tweetId;
obj.retweetUrl = "http://twitter.com/intent/retweet?tweet_id="+o.tweetId;
obj.favoriteUrl = "http://twitter.com/intent/favorite?tweet_id="+o.tweetId;
obj.entities = object.entities ? (object.entities.urls || []).concat(object.entities.media || []) : [];
obj.retweetScreenName = obj.retweet && object.retweeted_status.user.screen_name;
obj.retweetName = obj.retweet && object.retweeted_status.user.name;
obj.writeTweet = obj.retweet ? object.retweeted_status.text : object.text;
obj.finalText = $([linkURLs(obj.writeTweet, obj.entities)]).linkUser().linkHash()[0];
obj.header = '<div class="mt_header"> <a '+rel()+' '+target()+' class="mt_user" href="'+obj.userUrl+'">'+obj.realName+'</a> <span class="mt_screen_name">@'+obj.screenName+'</span> <div class="time">'+obj.tweetTime+'</div></div>';
obj.avatar = '<div class="tweet"><div class="avatar"><a '+rel()+' '+target()+' class="mt_avatar" href="'+obj.userUrl+'"><img src="'+obj.image+'" alt="'+obj.realName+'\'s avatar" border="0"/></a></div>';
obj.textTweet = '<div class="mt_text">'+obj.finalText+'</div>';
obj.footer = obj.retweet ? '<div class="mt_footer"><span class="image_r"></span>Retweeted by <a '+rel()+' '+target()+' class="mt_retweet" href="http://twitter.com/'+object.user.screen_name+'">'+object.user.name+'</a></div><div style="clear:both;"></div></div>' : '<div class="mt_footer"></div><div style="clear:both;"></div></div>';
//obj.replyName = (object.in_reply_to_screen_name != 'undefined') ? object.in_reply_to_screen_name : '';
//linkcolors
obj.linkColor = (o.linkColor == null) ? ( object.from_user_id || object.user.profile_link_color) : o.linkColor;
return obj;
}
function display ( widget ) {
fetch().done(function( res ) {
//o.tweetId = results[0].id;
tweets = $.map( res.results || res , function( obj, i) {
return fetchTweetsData ( obj );
});
for(var i=0; i<tweets.length; i++) {
$(widget).append(tweets[i].avatar+tweets[i].header+tweets[i].textTweet+tweets[i].footer);
}
});
};
function hover ( element, newcolor, initcolor ) {
$(element).hover(function(){
$(this).css('color', '#'+newcolor);
}, function () {
$(this).css('color',"#"+initcolor);
});
}
return this.each(function(i, widget) {
if(typeof(options) == "string"){
o.username = [options];
}
if(o.username && typeof(o.username) == "string"){
o.username = [o.username];
}
display( widget );
if( o.refresh != null ) {
//to do
}
});
};
})( jQuery, window, document );