JSFiddle - React, Tailwind, and code Playground
HTML
<div id="jstwitter"></div>
CSS
#jstwitter{width:300px;font-family:georgia;font-size:10px;color:#333333;padding:10px;}#jstwitter .tweet{margin:0 auto 15px auto;padding:0 0 15px 0;border-bottom:1px dotted #ccc;}#jstwitter .tweet a{text-decoration:none;color:#13c9d0;}#jstwitter .tweet a:hover{text-decoration:underline;}#jstwitter .tweet .time{font-size:10px;font-style:italic;color:#666666;}
JavaScript
JQTWEET={user:'toki4razu',numTweets:5,appendTo:'#jstwitter',loadTweets:function(){$.ajax({url:'http://api.twitter.com/1/statuses/user_timeline.json/',type:'GET',dataType:'jsonp',data:{screen_name:JQTWEET.user,include_rts:true,count:JQTWEET.numTweets,include_entities:true},success:function(data,textStatus,xhr){var html='<div class="tweet">TWEET_TEXT<div class="time">AGO</div>';for(var i=0;i<data.length;i++){$(JQTWEET.appendTo).append(html.replace('TWEET_TEXT',JQTWEET.ify.clean(data[i].text)).replace(/USER/g,data[i].user.screen_name).replace('AGO',JQTWEET.timeAgo(data[i].created_at)).replace(/ID/g,data[i].id_str));}}});},timeAgo:function(dateString){var rightNow=new Date();var then=new Date(dateString);if($.browser.msie){then=Date.parse(dateString.replace(/( \+)/,' UTC$1'));}
var diff=rightNow- then;var second=1000,minute=second*60,hour=minute*60,day=hour*24,week=day*7;if(isNaN(diff)||diff<0){return"";}
if(diff<second*2){return"right now";}
if(diff<minute){return Math.floor(diff/second)+" seconds ago";}
if(diff<minute*2){return"about 1 minute ago";}
if(diff<hour){return Math.floor(diff/minute)+" minutes ago";}
if(diff<hour*2){return"about 1 hour ago";}
if(diff<day){return Math.floor(diff/hour)+" hours ago";}
if(diff>day&&diff<day*2){return"yesterday";}
if(diff<day*365){return Math.floor(diff/day)+" days ago";}
else{return"over a year ago";}},ify:{link:function(tweet){return tweet.replace(/\b(((https*\:\/\/)|www\.)[^\"\']+?)(([!?,.\)]+)?(\s|$))/g,function(link,m1,m2,m3,m4){var http=m2.match(/w/)?'http://':'';return'<a class="twtr-hyperlink" target="_blank" href="'+ http+ m1+'">'+((m1.length>25)?m1.substr(0,24)+'...':m1)+'</a>'+ m4;});},at:function(tweet){return tweet.replace(/\B[@�]([a-zA-Z0-9_]{1,20})/g,function(m,username){return'<a target="_blank" class="twtr-atreply" href="http://twitter.com/intent/user?screen_name='+ username+'">@'+ username+'</a>';});},list:function(tweet){return tweet.replace(/\B[@�]([a-zA-Z0-9_]{1,20}\/\w+)/g,function(m,userlist){return'<a...