master
1(function($){
2 $.fn.getTwitterFeed = function(userid, count, reply){
3 var banner = $(this),
4 feed = banner.find('.feed'),
5 interval = 10000,
6 speed = 500;
7
8 var linkify = function(text){
9 text = text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>').replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>').replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
10
11 return text;
12 }
13
14 var relativeDate = function(date){
15 if (navigator.appName === 'Microsoft Internet Explorer') return '';
16
17 var unit = {
18 now: 'Now',
19 minute: '1 min',
20 minutes: ' mins',
21 hour: '1 hr',
22 hours: ' hrs',
23 day: 'Yesterday',
24 days: ' days',
25 week: '1 week',
26 weeks: ' weeks'
27 };
28
29 var current = new Date(),
30 tweet = new Date(date),
31 diff = (((current.getTime() + (1 * 60000)) - tweet.getTime()) / 1000),
32 day_diff = Math.floor(diff / 86400);
33
34 if (day_diff == 0){
35 if (diff < 60) return unit.now;
36 else if (diff < 120) return unit.minute;
37 else if (diff < 3600) return Math.floor(diff / 60) + unit.minutes;
38 else if (diff < 7200) return unit.hour;
39 else if (diff < 86400) return Math.floor(diff / 3600) + unit.hours;
40 else return '';
41 } else if (day_diff == 1) {
42 return unit.day;
43 } else if (day_diff < 7) {
44 return day_diff + unit.days;
45 } else if (day_diff == 7) {
46 return unit.week;
47 } else if (day_diff > 7) {
48 return Math.ceil(day_diff / 7) + unit.weeks;
49 } else {
50 return '';
51 }
52 }
53
54 if ($(window).width() > 600){
55 var url = 'https://api.twitter.com/1/statuses/user_timeline/'+userid+'.json?count='+count+'&exclude_replies='+(reply ? '0' : '1')+'&trim_user=true&callback=?';
56 banner.show();
57 $.getJSON(url, function(json){
58 var length = json.length,
59 fragment = document.createDocumentFragment(),
60 counts = 0,
61 timeout;
62
63 for (var i=0; i<length; i++){
64 var item = document.createElement('li');
65 item.innerHTML = linkify(json[i].text) + '<small>'+relativeDate(json[i].created_at)+'</small>';
66 fragment.appendChild(item);
67 }
68
69 var play = function(){
70 timeout = setTimeout(function(){
71 feed.animate({top: '-='+30}, speed, function(){
72 $(this).append($(this).children().eq(counts).clone());
73 counts++;
74 play();
75 });
76 }, interval);
77 }
78
79 var pause = function(){
80 clearTimeout(timeout);
81 }
82
83 banner.on('mouseenter', pause).on('mouseleave', play)
84 .children('.loading').hide().end()
85 .children('.container').show()
86 .children('.feed').append(fragment);
87
88 play();
89 });
90 }
91 };
92})(jQuery);