/* JUITTER 0.9.4 - 02/03/2009 - http://juitter.com BY RODRIGO FANTE - http://rodrigofante.com ** jQuery 1.2.* or higher required Juitter is distributed under the MIT License Read more about the MIT License --> http://www.opensource.org/licenses/mit-license.php This script is just a beta test version, download and use it at your own risk. The Juitter developer shall have no responsability for data loss or damage of any kind by using this script. */ (function($) { var conf = {}, // JUITTER DEFAULT CONFIGURATION ======================== // YOU CAN CHANGE THE DYNAMIC VARS ON CALLING THE start method, see the system.js for more information about it. numMSG = 20; // set the number of messages to be show containerDiv="juitterContainer", // //Set a place holder DIV which will receive the list of tweets example
loadMSG="Loading messages...", // Loading message, if you want to show an image, fill it with "image/gif" and go to the next variable to set which image you want to use on imgName="loader.gif", // Loading image, to enable it, go to the loadMSG var above and change it to "image/gif" readMore="Read it on Twitter", // read more message to be show after the tweet content nameUser="image" // insert "image" to show avatar of "text" to show the name of the user that sent the tweet live:"live-20", //optional, disabled by default, the number after "live-" indicates the time in seconds to wait before request the Twitter API for updates, I do not recommend to use less than 60 seconds. // end of configuration // some global vars aURL="";msgNb=1; var mode,param,time,lang,contDiv,loadMSG,gifName,numMSG,readMore,fromID,ultID; var running=false; // Twitter API Urls apifMultipleUSER = "http://search.twitter.com/search.json?from%3A"; apifUSER = "http://search.twitter.com/search.json?q=from%3A"; apitMultipleUSER = "http://search.twitter.com/search.json?to%3A"; apitUSER = "http://search.twitter.com/search.json?q=to%3A"; apiSEARCH = "http://search.twitter.com/search.json?q="; $.Juitter = { registerVar: function(opt){ mode=opt.searchType; param=opt.searchObject; timer=opt.live; lang=opt.lang?opt.lang:""; contDiv=opt.placeHolder?opt.placeHolder:containerDiv; loadMSG=opt.loadMSG?opt.loadMSG:loadMSG; gifName=opt.imgName?opt.imgName:imgName; numMSG=opt.total?opt.total:numMSG; readMore=opt.readMore?opt.readMore:readMore; fromID=opt.nameUser?nameUser:nameUser; }, start: function(opt) { ultID=0; if($("#"+contDiv)){ this.registerVar(opt); // show the load message this.loading(); // create the URL to be request at the Twitter API aURL = this.createURL(); // query the twitter API and create the tweets list this.conectaTwitter(1); // if live mode is enabled, schedule the next twitter API query if(timer!=undefined&&!running) this.temporizador(); } }, update: function(){ this.conectaTwitter(2); if(timer!=undefined) this.temporizador(); }, loading: function(){ if(loadMSG=="image/gif"){ $("") .attr('src', gifName) .appendTo("#"+contDiv); } else $("#"+contDiv).html(loadMSG); }, createURL: function(){ var url = ""; jlg=lang.length>0?"&lang="+lang:jlg=""; var seachMult = param.search(/,/); if(seachMult>0) param = "&ors="+param.replace(/,/g,"+"); if(mode=="fromUser" && seachMult<=0) url=apifUSER+param; else if(mode=="fromUser" && seachMult>=0) url=apifMultipleUSER+param; else if(mode=="toUser" && seachMult<=0) url=apitUSER+param; else if(mode=="toUser" && seachMult>=0) url=apitMultipleUSER+param; else if(mode=="searchWord") url=apiSEARCH+param+jlg; url += "&rpp="+numMSG; return url; }, delRegister: function(){ // remove the oldest entry on the tweets list if(msgNb>=numMSG){ $(".twittLI").each( function(o,elemLI){ if(o>=numMSG) $(this).hide("slow"); } ); } }, conectaTwitter: function(e){ // query the twitter api and create the tweets list $.ajax({ url: aURL, type: 'GET', dataType: 'jsonp', timeout: 1000, error: function(){ $("#"+contDiv).html("fail#"); }, success: function(json){ if(e==1) $("#"+contDiv).html(""); $.each(json.results,function(i,item) { if(e==1 || (iultID)){ if(i==0){ tultID = item.id; $("") .attr('id', 'twittList'+ultID) .attr('class','twittList') .prependTo("#"+contDiv); } if (item.text != "undefined") { var link = "http://twitter.com/"+item.from_user+"/status/"+item.id; if(fromID=="image") mHTML=""+item.from_user+" "+$.Juitter.textFormat(item.text)+" "+readMore+""; else mHTML="@"+item.from_user+": "+$.Juitter.textFormat(item.text)+ " "+readMore+""; $("
  • ") .html(mHTML) .attr('id', 'twittLI'+msgNb) .attr('class', 'twittLI') .appendTo("#twittList"+ultID); $('#twittLI'+msgNb).hide(); $('#twittLI'+msgNb).show("slow"); // remove old entries $.Juitter.delRegister(); msgNb++; } } }); ultID=tultID; } }); }, textFormat: function(texto){ //make links var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; texto = texto.replace(exp,"$1"); var exp = /[\@]+([A-Za-z0-9-_]+)/ig; texto = texto.replace(exp,"@$1"); var exp = /[\#]+([A-Za-z0-9-_]+)/ig; texto = texto.replace(exp,"#$1"); // make it bold if(mode=="searchWord"){ tempParam = param.replace(/&ors=/,""); arrParam = tempParam.split("+"); $.each(arrParam,function(i,item){ regExp=eval('/ '+item+'/ig'); newString = new String(' '+item+' '); texto = texto.replace(regExp, newString); }); } return texto; }, temporizador: function(){ // live mode timer running=true; aTim = timer.split("-"); if(aTim[0]=="live" && aTim[1].length>0){ tempo = aTim[1]*1000; setTimeout("$.Juitter.update()",tempo); } } }; })(jQuery);