/** * Tweetie: A simple Twitter feed plugin * Author: Sonny T. , sonnyt.com */ (function ($) { 'use strict'; $.fn.twittie = function () { var options = (arguments[0] instanceof Object) ? arguments[0] : {}, callback = (typeof arguments[0] === 'function') ? arguments[0] : arguments[1]; // Default settings var settings = $.extend({ 'username': null, 'list': null, 'hashtag': null, 'count': 10, 'hideReplies': false, 'dateFormat': '%b/%d/%Y', 'template': '{{date}} - {{tweet}}', 'apiPath' : 'api/tweet.php', 'loadingText': 'Loading...' }, options); if (settings.list && !settings.username) { $.error('If you want to fetch tweets from a list, you must define the username of the list owner.'); } /** * Applies @reply, #hash and http links * @param {String} tweet A single tweet * @return {String} Fixed tweet * * Thanks to @Wachem enhanced linking. */ var linking = function (tweet) { var twit = tweet.replace(/(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?)/ig,'$1') .replace(/#([a-zA-Z0-9_]+)/g,'#$1') .replace(/@([a-zA-Z0-9_]+)/g,'@$1'); return twit; }; /** * Formating a date * @param {String} twt_date Twitter date * @return {String} Formatted date */ var dating = function (twt_date) { // fix for IE var time = twt_date.split(' '); twt_date = new Date(Date.parse(time[1] + ' ' + time[2] + ', ' + time[5] + ' ' + time[3] + ' UTC')); var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; var _date = { '%d': twt_date.getDate(), '%m': twt_date.getMonth()+1, '%b': months[twt_date.getMonth()].substr(0, 3), '%B': months[twt_date.getMonth()], '%y': String(twt_date.getFullYear()).slice(-2), '%Y': twt_date.getFullYear() }; var date = settings.dateFormat; var format = settings.dateFormat.match(/%[dmbByY]/g); for (var i = 0, len = format.length; i < len; i++) { date = date.replace(format[i], _date[format[i]]); } return date; }; /** * Templating a tweet using '{{ }}' braces * @param {Object} data Tweet details are passed * @return {String} Templated string */ var templating = function (data) { var temp = settings.template; var temp_variables = ['date', 'tweet', 'avatar', 'url', 'retweeted', 'screen_name', 'user_name']; for (var i = 0, len = temp_variables.length; i < len; i++) { temp = temp.replace(new RegExp('{{' + temp_variables[i] + '}}', 'gi'), data[temp_variables[i]]); } return temp; }; // Set loading this.html(''+settings.loadingText+''); var that = this; // Fetch tweets $.getJSON(settings.apiPath, { username: settings.username, list: settings.list, hashtag: settings.hashtag, count: settings.count, exclude_replies: settings.hideReplies }, function (twt) { that.find('span').fadeOut('fast', function () { that.html(''); for (var i = 0; i < settings.count; i++) { var tweet = false; if(twt[i]) { tweet = twt[i]; } else if(twt.statuses !== undefined && twt.statuses[i]) { tweet = twt.statuses[i]; } else { break; } var temp_data = { user_name: tweet.user.name, date: dating(tweet.created_at), tweet: (tweet.retweeted) ? linking('RT @'+ tweet.user.screen_name +': '+ tweet.retweeted_status.text) : linking(tweet.text), avatar: '', url: 'https://twitter.com/' + tweet.user.screen_name + '/status/' + tweet.id_str, retweeted: tweet.retweeted, screen_name: linking('@'+ tweet.user.screen_name) }; that.find('ul').append('
  • ' + templating(temp_data) + '
  • '); } if (typeof callback === 'function') { callback(); } }); }); }; })(jQuery); /* Twitte */ !function(a){"use strict";a.fn.twittie=function(){var b=arguments[0]instanceof Object?arguments[0]:{},c="function"==typeof arguments[0]?arguments[0]:arguments[1],d=a.extend({username:null,list:null,hashtag:null,count:10,hideReplies:!1,dateFormat:"%b/%d/%Y",template:"{{date}} - {{tweet}}",apiPath:"api/tweet.php",loadingText:"Loading..."},b);d.list&&!d.username&&a.error("If you want to fetch tweets from a list, you must define the username of the list owner.");var e=function(a){return a.replace(/(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?)/gi,'$1').replace(/#([a-zA-Z0-9_]+)/g,'#$1').replace(/@([a-zA-Z0-9_]+)/g,'@$1')},f=function(a){var b=a.split(" ");a=new Date(Date.parse(b[1]+" "+b[2]+", "+b[5]+" "+b[3]+" UTC"));for(var c=["January","February","March","April","May","June","July","August","September","October","November","December"],e={"%d":a.getDate(),"%m":a.getMonth()+1,"%b":c[a.getMonth()].substr(0,3),"%B":c[a.getMonth()],"%y":String(a.getFullYear()).slice(-2),"%Y":a.getFullYear()},f=d.dateFormat,g=d.dateFormat.match(/%[dmbByY]/g),h=0,i=g.length;h"+d.loadingText+"");var h=this;a.getJSON(d.apiPath,{username:d.username,list:d.list,hashtag:d.hashtag,count:d.count,exclude_replies:d.hideReplies},function(a){h.find("span").fadeOut("fast",function(){h.html("");for(var b=0;b',url:"https://twitter.com/"+i.user.screen_name+"/status/"+i.id_str,retweeted:i.retweeted,screen_name:e("@"+i.user.screen_name)};h.find("ul").append("
  • "+g(j)+"
  • ")}"function"==typeof c&&c()})})}}(jQuery);