summaryrefslogtreecommitdiffstats
path: root/source/javascripts/twitter.js
diff options
context:
space:
mode:
Diffstat (limited to 'source/javascripts/twitter.js')
-rw-r--r--source/javascripts/twitter.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/source/javascripts/twitter.js b/source/javascripts/twitter.js
new file mode 100644
index 0000000..5a7b9d5
--- /dev/null
+++ b/source/javascripts/twitter.js
@@ -0,0 +1,88 @@
+(function($){
+ var banner = $('#banner'),
+ feed = banner.find('.feed'),
+ interval = 10000,
+ speed = 500;
+
+ var linkify = function(text){
+ 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>');
+
+ return text;
+ }
+
+ var relativeDate = function(date){
+ if (navigator.appName === 'Microsoft Internet Explorer') return '';
+
+ var unit = {
+ now: '現在',
+ minute: '1 分鐘前',
+ minutes: ' 分鐘前',
+ hour: '1 小時前',
+ hours: ' 小時前',
+ day: '昨天',
+ days: ' 天前',
+ week: '1 週前',
+ weeks: ' 週前'
+ };
+
+ var current = new Date(),
+ tweet = new Date(date),
+ diff = (((current.getTime() + (1 * 60000)) - tweet.getTime()) / 1000),
+ day_diff = Math.floor(diff / 86400);
+
+ if (day_diff == 0){
+ if (diff < 60) return unit.now;
+ else if (diff < 120) return unit.minute;
+ else if (diff < 3600) return Math.floor(diff / 60) + unit.minutes;
+ else if (diff < 7200) return unit.hour;
+ else if (diff < 86400) return Math.floor(diff / 3600) + unit.hours;
+ else return '';
+ } else if (day_diff == 1) {
+ return unit.day;
+ } else if (day_diff < 7) {
+ return day_diff + unit.days;
+ } else if (day_diff == 7) {
+ return unit.week;
+ } else if (day_diff > 7) {
+ return Math.ceil(day_diff / 7) + unit.weeks;
+ } else {
+ return '';
+ }
+ }
+
+ banner.show();
+
+ $.getJSON('http://twitter.com/status/user_timeline/tommy351.json?count=10&callback=?', function(json){
+ var length = json.length,
+ fragment = document.createDocumentFragment(),
+ counts = 0,
+ timeout;
+
+ for (var i=0; i<length; i++){
+ var item = document.createElement('li');
+ item.innerHTML = linkify(json[i].text) + '<small>'+relativeDate(json[i].created_at)+'</small>';
+ fragment.appendChild(item);
+ }
+
+ var play = function(){
+ timeout = setTimeout(function(){
+ feed.animate({top: '-='+30}, speed, function(){
+ $(this).append($(this).children().eq(counts).clone());
+ counts++;
+ play();
+ });
+ }, interval);
+ }
+
+ var pause = function(){
+ clearTimeout(timeout);
+ }
+
+ banner.on('mouseenter', pause).on('mouseleave', play)
+ .children('.loading').hide().end()
+ .children('.container').show()
+ .children('.feed').append(fragment);
+
+ play();
+ });
+})(jQuery); \ No newline at end of file