(function($){//BEGIN $ = jQuery $.makeLink = $.makeLink || function(str, options){ options = $.extend({ target: '_blank' }, options); return str.replace(/[A-Za-z]+?:\/\/[A-Za-z0-9_-]+\.[A-Za-z0-9:%&\?\/.=~_-]+/g, function(m){ return [ '' : '' , m , '' ].join(''); }); }; $.twitter = { make_user_link: function(str){ return str.replace(/@(\w+)/g, function(m, user){ return [ '@' , user , '' ].join(''); }); } , make_hash_link: function(str){ return str.replace(/#(\w+)/g, function(m, hashtag){ return [ '#' , hashtag , '' ].join(''); }); } , related_time: function(created_at, options){ options = $.extend({ sec: function(c, d, diff){ return [(Math.floor(diff / 5) + 1) * 5, '秒以内前'].join(''); } , min: function(c, d, diff){ var m = Math.floor(diff / 60); return m < 45 ? [m, '分前'].join('') : '約1時間前'; } , hour: function(c, d, diff){ var h = Math.floor(diff / 60 / 60) + 1; return h < 24 ? ['約', h, '時間前'].join('') : options.other(c, d, diff); } , other: function(c, d, diff){ var dd = new Date(c); var m = dd.getMonth() + 1; var d = dd.getDate(); var h = dd.getHours(); var i = dd.getMinutes(); return [ [ dd.getFullYear() || dd.getYear() , m < 10 ? ['0', m].join('') : m , d < 10 ? ['0', d].join('') : d ].join('/') , [ h < 10 ? ['0', h].join('') : h , i < 10 ? ['0', i].join('') : i ].join(':') ].join(' '); } }, options); var d = new Date().getTime(); var c = Date.parse(created_at) || (function(at){ var c = new Date([at[1], at[2], at[5], at[3]].join(' ')); c.setTime(c.getTime() - (!(at[4] - 0) ? c.getTimezoneOffset() * 60 * 1000 : 0)); return c.getTime(); })(created_at.split(' ')); var diff = (d - c) / 1000; if(diff < 60){ return options.sec(c, d, diff); }else if(diff < 60 * 60){ return options.min(c, d, diff); }else if(diff < 60 * 60 * 24){ return options.hour(c, d, diff); } return options.other(c, d, diff); } }; $.twitter.convert_link = function(str){ var $tw = $.twitter; return $tw.make_user_link($tw.make_hash_link($.makeLink(str))); }; $.fn.twitter = function(username, options){ if(!username || typeof arguments[0] != 'string') throw 'requires a username'; var $this = this; var default_count = 5; options = $.extend({ method: 'status/user_timeline' , count: default_count , loading: 'now loading...' , prefix: '