forked from philipbeel/Tweetable
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.tweetable.js
executable file
·92 lines (84 loc) · 4.04 KB
/
jquery.tweetable.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* tweetable 1.6.1 - jQuery twitter feed generator plugin
*
* Copyright (c) 2009 Philip Beel (http://www.theodin.co.uk/)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* With modifications from Philipp Robbel (http://www.robbel.com/) and Patrick DW (stackoverflow)
* for IE compatibility.
*
* Revision: $Id: jquery.tweetable.js 2011-01-06 $
*
*/
(function ($) {
//define the tweetable plugin
$.fn.tweetable = function (options) {
//specify the plugins defauls
var defaults = {
limit: 5, //number of tweets to show
username: 'philipbeel', //@username tweets to display
time: false, //display date
rotate: false,
speed: 5000,
replies: false, //filter out @replys
position: 'append', //append position
onComplete: function($ul) {}
};
//overwrite the defaults
var options = $.extend(defaults, options);
//loop through each instance
return this.each(function (options) {
//assign our initial vars
var act = $(this);
var $tweetList = $('<ul class="tweetList">')[defaults.position.toLowerCase() + 'To'](act);
var tweetMonth = '';
var shortMonths = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var api = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=";
var count = "&count=";
//do a JSON request to twitters API
$.getJSON(api + defaults.username + count + defaults.limit + "&callback=?", act, function (data) {
var ctr = 0;
//loop through twitters response
$.each(data, function (i, tweet) {
//handle @reply filtering if required
if (defaults.replies === false && tweet.in_reply_to_status_id != null)
return;
i = ctr++;
$tweetList.append('<li class="tweet_content_' + i + '"><p class="tweet_link_' + i + '">' + tweet.text.replace(/#(.*?)(\s|$)/g, '<span class="hash">#$1 </span>').replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, '<a href="$&">$&</a> ').replace(/@(.*?)(\s|\(|\)|$)/g, '<a href="http://twitter.com/$1">@$1 </a>$2') + '</p></li>');
//display the time of tweet if required
if (defaults.time == true) {
for(var iterate=0; iterate<=12; iterate++) {
if(shortMonths[iterate] == tweet.created_at.substr(4, 3)) {
tweetMonth = iterate + 1;
if(tweetMonth < 10) {
tweetMonth = '0' + tweetMonth;
}
}
}
$('.tweet_link_' + i).prepend('<p><small> ' + tweet.created_at.substr(8, 2) + '/' + tweetMonth + '/' + tweet.created_at.substr(26,4) + ', ' + tweet.created_at.substr(11,5) + '</small></p>');
}
});//close the unordered list
//rotate tweets if required
if ( defaults.rotate == true ) {
var element = $tweetList.find('li'),
length = element.length,
current = 0,
timeout = defaults.speed;
function changeTweets() {
element.eq(current++).fadeOut(300, function(){
if(current === length){
current = 0;
}
element.eq(current).fadeIn(300);
});
setTimeout(changeTweets, timeout);
}
element.slice(1).hide();
setTimeout(changeTweets, timeout);
}
defaults.onComplete($tweetList);
});
});
}
})(jQuery);