1var elementAudio=document.createElement('audio');elementAudio.src=IRON.state.theme_url+'/js/assets/default.wav';var elementAudioSingle=document.createElement('audio');elementAudioSingle.src=IRON.state.theme_url+'/js/assets/default.wav';IRON.audioPlayer=function($){"use strict";var seekTimeOut;function initPlayer(player){var audioPlayer=player;this.audioPlayer=player;var waveContainer=this.audioPlayer.find('.player .wave').attr('id');var playlist=audioPlayer.find('.playlist');this.playlist=playlist;var wavesurfer=WaveSurfer.create({container:'#'+waveContainer,cursorWidth:0,barWidth:1,progressColor:iron_vars.soundrise_music.color_progress,waveColor:iron_vars.soundrise_music.color_base,height:70,backend:'MediaElement',mediaControls:!1,});wavesurfer.on('loading',function(){var progressLoad=arguments[0] 2audioPlayer.find('.progressLoading').css('background',iron_vars.soundrise_music.color_base);audioPlayer.find('.progressLoading').css('width','calc( '+progressLoad+'% - 200px )') 3if(progressLoad==100){audioPlayer.find('.player').addClass('reveal') 4audioPlayer.find('.progressLoading').css('opacity','0')}}) 5this.wavesurfer=wavesurfer;setPlaylist(playlist,wavesurfer,audioPlayer);setCurrentTrack(playlist.find('li').eq(0),playlist.find('li').index(),audioPlayer,wavesurfer);setControl(wavesurfer,audioPlayer,playlist);setNextSong(wavesurfer,audioPlayer,playlist);trackListItemResize();if(audioPlayer.data('autoplay')){if(IRON.state.enable_ajax){if(typeof IRON.continuousPlayer.wavesurfer!=="undefined"&&IRON.continuousPlayer.wavesurfer.isPlaying()) 6return 7$.when(IRON.continuousPlayer.ready).done(function(){play(audioPlayer,wavesurfer)})}else{if(wavesurfer.isPlaying()) 8return 9triggerPlay(wavesurfer,audioPlayer)}}} 10var setNextSong=function(wavesurfer,audioPlayer,playlist){wavesurfer.on('finish',function(){next(audioPlayer,playlist)})} 11function triggerPlay(wavesurfer,audioPlayer){wavesurfer.on('ready',function(){if(wavesurfer.isPlaying()) 12return 13wavesurfer.play();togglePlaying(audioPlayer,wavesurfer)})} 14function setCurrentTrack(track,index,audioPlayer,wavesurfer){var albumArt=audioPlayer.find('.album .album-art');var trackTitle=audioPlayer.find('.track-title');var trackArtist=audioPlayer.find('.sr_it-artists-value');var albumTitle=audioPlayer.find('.album-title');var albumTitle=audioPlayer.find('.sr_it-playlist-title');var albumReleaseDate=audioPlayer.find('.sr_it-date-value');if(albumArt.find('img').length){albumArt.find('img').attr('src',track.data('albumart'))}else{albumArt.css('background-image','url('+track.data('albumart')+')')} 15if(!audioPlayer.hasClass('show-playlist')){albumArt.one('click',function(){setContinuousPlayer(index,audioPlayer)}) 16albumArt.css('cursor','pointer')} 17audioPlayer.data('currentTrack',index);if(!IRON.state.enable_ajax){trackTitle.text(track.data('tracktitle'));trackArtist.text(track.data('trackartists'));albumReleaseDate.text(track.data('releasedate'));albumTitle.text(track.data('albumtitle'));audioPlayer.find('.player').removeClass('hide') 18if(!track.data('showloading')){audioPlayer.find('.player').addClass('hide')}else{audioPlayer.find('.progressLoading').css('opacity','0.75')} 19setAudio(track.data('audiopath'),wavesurfer);setTime(audioPlayer,wavesurfer)} 20hideEmptyAttribut(track.data('releasedate'),audioPlayer.find('.sr_it-playlist-release-date'));hideEmptyAttribut(track.data('trackartists'),audioPlayer.find('.sr_it-playlist-artists'))} 21function setPlaylist(playlist,wavesurfer,audioPlayer){playlist.find('li').each(function(){setSingleTrack($(this),$(this).index(),wavesurfer,audioPlayer)})} 22function setTime(audioPlayer,wavesurfer){wavesurfer.on('ready',function(){if(wavesurfer.isPlaying()) 23return 24var totalTime=moment.duration(wavesurfer.getDuration(),'seconds');audioPlayer.find('.totalTime').html(moment(totalTime.minutes()+':'+totalTime.seconds(),'m:s').format('mm:ss'));wavesurfer.on('audioprocess',function(){var time=moment.duration(wavesurfer.getCurrentTime(),'seconds');audioPlayer.find('.currentTime').html(moment(time.minutes()+':'+time.seconds(),'m:s').format('mm:ss'))})})} 25function setControl(wavesurfer,audioPlayer,playlist){var ctrl=audioPlayer.find('.control');if(IRON.state.enable_ajax){audioPlayer.find('.wave').remove()} 26ctrl.on('click','.play',function(){play(audioPlayer,wavesurfer) 27triggerPlay(wavesurfer,audioPlayer)}
27) 28ctrl.on('click','.previous',function(){previous(audioPlayer,wavesurfer,playlist)}) 29ctrl.on('click','.next',function(){next(audioPlayer,wavesurfer,playlist)})} 30function setSingleTrack(singleTrack,eq,wavesurfer,audioPlayer){var tracknumber=eq+1;var trackplay=$('<span/>',{class:'track-number',html:'<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 17.5 21.2" style="enable-background:new 0 0 17.5 21.2;" xml:space="preserve"><path d="M0,0l17.5,10.9L0,21.2V0z"></path><rect width="6" height="21.2"></rect><rect x="11.5" width="6" height="21.2"></rect></svg><span class="number">'+tracknumber+'</span>'}) 31$('') 32$('<a/>',{class:'audio-track',click:function(){if(IRON.state.enable_ajax){setContinuousPlayer(eq,audioPlayer);audioPlayer.data('currentTrack',eq)}else{setCurrentTrack(singleTrack,eq,audioPlayer,wavesurfer);audioPlayer.find('.playlist li').removeClass('current');singleTrack.addClass('current');triggerPlay(wavesurfer,audioPlayer) 33togglePlaying(audioPlayer,wavesurfer)}}}).appendTo(singleTrack).prepend(trackplay).append('<div class="tracklist-item-title">'+singleTrack.data('tracktitle')+'</div>')} 34function trackListItemResize(){$('.playlist li').each(function(){$(this).find('.tracklist-item-title').css('max-width',$(this).outerWidth()-$(this).find('.button').outerWidth()-$(this).find('.track-number').outerWidth()-10)})};var setAudio=function(audio,wavesurfer){seekTimeOut=setTimeout(function(){elementAudio.src=audio 35wavesurfer.load(elementAudio)},250)} 36function getTime(wavesurfer){return wavesurfer.getCurrentTime()} 37function togglePlaying(audioPlayer,wavesurfer){$.each(IRON.players,function(index,value){IRON.players[index].audioPlayer.removeClass('audio-playing')}) 38if(wavesurfer.isPlaying()){audioPlayer.addClass('audio-playing');return} 39audioPlayer.removeClass('audio-playing')} 40function play(audioPlayer,wavesurfer){if(IRON.state.enable_ajax){var playlist=audioPlayer.find('.playlist');var currentTrack=audioPlayer.data('currentTrack');if((IRON.continuousPlayer.wavesurfer.getCurrentTime()>=0.1||IRON.continuousPlayer.wavesurfer.isPlaying())&&IRON.continuousPlayer.playlist.url==audioPlayer.data('url-playlist')){IRON.continuousPlayer.play() 41return} 42if(IRON.continuousPlayer.wavesurfer.getDuration()==1){IRON.continuousPlayer.wavesurfer.play()} 43playlist.find('li').eq(currentTrack).find('a').click();return} 44wavesurfer.playPause();togglePlaying(audioPlayer,wavesurfer)} 45function previous(audioPlayer,wavesurfer,playlist){var currentTrack=audioPlayer.data('currentTrack');var nextTrack=currentTrack-1;if('2'<getTime(wavesurfer)){wavesurfer.seekTo(0);return} 46playlist.find('li').eq(nextTrack).find('a').click()} 47function next(audioPlayer,wavesurfer,playlist){var currentTrack=audioPlayer.data('currentTrack');var nextTrack=currentTrack+1;if(!playlist.find('li').eq(nextTrack).length){nextTrack=0} 48wavesurfer.pause();playlist.find('li').eq(nextTrack).find('a').click()} 49function getPlayer(){return this} 50function getplay(){play(this.audioPlayer,this.wavesurfer)} 51function setContinuousPlayer(eq,audioPlayer){IRON.continuousPlayer.setPlaylist(audioPlayer) 52IRON.continuousPlayer.setCurrentTrack(eq,audioPlayer)} 53return{init:initPlayer,getPlayer:getPlayer,play:getplay}}(jQuery);IRON.continuousPlayer=function($){"use strict";var playlist={'promise':$.Deferred()} 54var playing=!1 55var wavesurfer 56var continuousPlayer={} 57var seekTimeOut 58var ready=$.Deferred() 59var playerConsent=!1 60var setPlayer=function(player){var ready=this.ready 61$.get(IRON.state.theme_url+'/js/assets/audioplayer.html').done(function(data){$('body').append(data) 62continuousPlayer=$('.continuousPlayer');var continuous_background=iron_vars.soundrise_music.continuous_background 63if(iron_vars.soundrise_music.continuous_background==''){continuous_background='rgb(0,0,0)'} 64continuousPlayer.css('background-color',continuous_background) 65wavesurfer=WaveSurfer.create({container:'#cplayer',cursorWidth:0,barWidth:1,progressColor:iron_vars.soundrise_music.continuous_timeline_background,waveColor:iron_vars.soundrise_music.continuous_progress_bar,height:36,backend:'MediaElement',mediaControl
65s:!1,partialRender:!0});wavesurfer.load(elementAudio) 66IRON.continuousPlayer.wavesurfer=wavesurfer 67setControl() 68setNextSong() 69wavesurfer.on('ready',function(){setLoading('done')}) 70wavesurfer.on('loading',function(){var progressLoad=arguments[0] 71continuousPlayer.find('.progressLoading').css('background',iron_vars.soundrise_music.continuous_progress_bar);continuousPlayer.find('.progressLoading').css('width','calc( '+progressLoad+'% - 200px )')}) 72wavesurfer.on('waveform-ready',function(){revealWave();continuousPlayer.find('.progressLoading').css('opacity','0')}) 73ready.resolve()})} 74var revealWave=function(){continuousPlayer.find('#cplayer').addClass('reveal')} 75var setPlaylist=function(audioPlayer){playlist.promise=$.Deferred() 76if(playlist.url==undefined||playlist.url!=audioPlayer.data('url-playlist')){$.when($.getJSON(audioPlayer.data('url-playlist'))).done(function(data){if(!$('body').hasClass('artistPlayer-enable')){IRON.initPusherHeight() 77continuousPlayer.addClass('enable') 78$('body').addClass('continuousPlayer-enable')} 79playlist.url=audioPlayer.data('url-playlist') 80playlist.list=data 81playlist.promise.resolve()})}else{IRON.continuousPlayer.playlist.promise.resolve()}} 82var setCurrentTrack=function(eq,audioPlayer){playing=!0 83if(playlist.currentTrack==eq&&playlist.url==audioPlayer.data('url-playlist')){
83wavesurfer.playPause();setStatus()}else{playlist.currentTrack=eq 84continuousPlayer.find('#cplayer').removeClass('reveal') 85$.when(playlist.promise).done(function(){setTrackInfo(eq);setAudio(playlist.list[eq].mp3);if(!playlist.list[eq].showLoading){continuousPlayer.find('#cplayer').addClass('hide')}else{continuousPlayer.find('.progressLoading').css('opacity','0.75')} 86if(playerConsent||(!isiPhone&&!isiPad)){wavesurfer.on('ready',function(){wavesurfer.play();setStatus() 87playing=!1})}})}} 88var setTrackInfo=function(eq){$.when(playlist.promise).done(function(){continuousPlayer.find('.album-art img').attr('src',playlist.list[eq].poster) 89$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('.album-art img').attr('src',playlist.list[eq].poster) 90continuousPlayer.find('.metadata .album-title').text(playlist.list[eq].album_title) 91continuousPlayer.find('.metadata .track-name').text(playlist.list[eq].track_title) 92$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('.sr_it-playlist-title').html(playlist.list[eq].album_title) 93$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('.sr_it-artists-value').html(playlist.list[eq].artist) 94$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('.sr_it-date-value').html(playlist.list[eq].release_date)}) 95hideEmptyAttribut(playlist.list[eq].release_date,$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('.sr_it-playlist-release-date'));hideEmptyAttribut(playlist.list[eq].artist,$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('.sr_it-playlist-artists'))} 96var setNextSong=function(){wavesurfer.on('finish',function(){if(!playing) 97next()})}
98var setLoading=function(classes){switch(classes){case 'loading':continuousPlayer.addClass('loading') 99break;default:continuousPlayer.removeClass('loading')}} 100var setAudio=function(audio){seekTimeOut=setTimeout(function(){elementAudio.src=audio 101wavesurfer.load(elementAudio)},250)} 102function setControl(){var ctrl=continuousPlayer.find('.control');ctrl.on('click','.play',function(){play()}) 103ctrl.on('click','.previous',function(){previous()}) 104ctrl.on('click','.next',function(){next()})} 105function play(){playerConsent=!0;wavesurfer.playPause();setStatus()} 106var setStatus=function(){$.each(IRON.players,function(index,value){IRON.players[index].audioPlayer.removeClass('audio-playing')}) 107if(wavesurfer.isPlaying()){$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').addClass('audio-playing') 108$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('li').removeClass('current');$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('li').eq(IRON.continuousPlayer.playlist.currentTrack).addClass('current');continuousPlayer.addClass('audio-playing');return} 109$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').removeClass('audio-playing') 110$('.iron-audioplayer[data-url-playlist="'+playlist.url+'"]').find('li').removeClass('current');continuousPlayer.removeClass('audio-playing')} 111function previous(){clearTimeout(seekTimeOut) 112var currentTrack=playlist.currentTrack;var nextTrack=currentTrack-1;if('2'<getTime(wavesurfer)){wavesurfer.seekTo(0);return} 113if(nextTrack<0){nextTrack=playlist.list.length-1} 114setCurrentTrack(nextTrack)} 115function next(){clearTimeout(seekTimeOut) 116var currentTrack=playlist.currentTrack;var nextTrack=currentTrack+1;if(nextTrack+1>playlist.list.length){nextTrack=0} 117setCurrentTrack(nextTrack)} 118function getTime(){return wavesurfer.getCurrentTime()} 119return{setPlayer:setPlayer,setPlaylist:setPlaylist,setCurrentTrack:setCurrentTrack,setTrackInfo:setTrackInfo,setAudio:setAudio,playlist:playlist,play:play,ready:ready}}(jQuery);function hideEmptyAttribut(string,selector){if(string==''){selector.css('display','none')}else{selector.css('display','block')}} 120IRON.artistPlayer=function($){"use strict";var artistWavesurfer 121var artistPlayer 122var seekTimeOut 123var playlist={'promise':$.Deferred()} 124var playerConsent=!1 125var setPlayer=function(){IRON.artistPlayer.continuousPlayer=!1;playerConsent=!1 126artistPlayer=$('.artist_player');var continuous_background=iron_vars.soundrise_music.continuous_background 127if(iron_vars.soundrise_music.continuous_background==''){continuous_background='rgb(0,0,0)'} 128artistPlayer.css('background-color',continuous_background) 129artistWavesurfer=WaveSurfer.create({container:'#artistPlayer',cursorWidth:0,barWidth:1,progressColor:iron_vars.soundrise_music.continuous_timeline_background,waveColor:iron_vars.soundrise_music.continuous_progress_bar,height:36,backend:'MediaElement',mediaControls:!1,partialRender:!0});artistWavesurfer.load(elementAudioSingle) 130IRON.artistPlayer.wavesurfer=artistWavesurfer 131setControl() 132setNextSong() 133IRON.artistPlayer.playlist.promise=$.Deferred();setPlaylist() 134setCurrentTrack(0) 135artistWavesurfer.on('loading',function(){var progressLoad=arguments[0] 136artistPlayer.find('.progressLoading').css('background',iron_vars.soundrise_music.continuous_progress_bar);artistPlayer.find('.progressLoading').css('width','calc( '+progressLoad+'% - 275px )') 137if(progressLoad==100){revealWave();artistPlayer.find('.progressLoading').css('opacity','0')}})} 138var revealWave=function(){artistPlayer.find('#artistPlayer').addClass('reveal')} 139var setPlaylist=function(){IRON.artistPlayer.playlist.promise=$.Deferred();$.when($.getJSON(artistPlayer.data('url-playlist'))).done(function(data){artistPlayer.addClass('enable') 140IRON.initPusherHeight() 141$('body').addClass('artistPlayer-enable') 142playlist.url=artistPlayer.data('url-playlist') 143playlist.list=data 144IRON.artistPlayer.playlist.promise.resolve()})} 145var setCurrentTrack=function(eq,audioPlayer){playlist.currentTrack=eq 146artistPlayer.find('#artistPlayer').removeClass('reveal') 147$.when(IRON.artistPlayer.playlist.promise).done(function(){artistPlayer.find('.album-art img').attr('src',playlist.list[eq].poster).css('display','block');artistPlayer.find('.metadata .album-title').text(playlist.list[eq].album_title) 148artistPlayer.find('.sr_it-playlist-title').text(playlist.list[eq].album_title) 149artistPlayer.find('.metadata .track-name').text(playlist.list[eq].track_title) 150artistPlayer.find('.sr_it-artists-value').html(playlist.list[eq].release_date) 151artistPlayer.find('.sr_it-date-value').html(playlist.list[eq].artist) 152setAudio(playlist.list[eq].mp3);if(IRON.artistPlayer.continuousPlayer){transfertPlaylist()} 153if(!playlist.list[eq].showLoading){artistPlayer.find('#artistPlayer').addClass('hide')}else{artistPlayer.find('.progressLoading').css('opacity','0.75')} 154if(playerConsent){artistWavesurfer.on('ready',function(){artistWavesurfer.play();setStatus()})}})} 155var setNextSong=function(){artistWavesurfer.on('finish',function(){next()})}
156var setLoading=function(classes){switch(classes){case 'loading':artistPlayer.addClass('loading') 157break;default:artistPlayer.removeClass('loading')}} 158var setAudio=function(audio){seekTimeOut=setTimeout(function(){if(IRON.artistPlayer.continuousPlayer){elementAudio.src=audio 159artistWavesurfer.load(elementAudio)}else{elementAudioSingle.src=audio 160artistWavesurfer.load(elementAudioSingle)}},250)} 161function setControl(){var ctrl=artistPlayer.find('.control');ctrl.find('.play').css({'fill':iron_vars.soundrise_music.continuous_control_color,'path':iron_vars.soundrise_music.continuous_control_color}) 162ctrl.find('.next').css({'fill':iron_vars.soundrise_music.continuous_control_color,'path':iron_vars.soundrise_music.continuous_control_color}) 163ctrl.find('.previous').css({'fill':iron_vars.soundrise_music.continuous_control_color,'path':iron_vars.soundrise_music.continuous_control_color}) 164ctrl.on('click','.play',function(){if(!IRON.artistPlayer.continuousPlayer){playerConsent=!0;$('.continuousPlayer').removeClass('enable') 165$('body').removeClass('continuousPlayer-enable') 166IRON.initPusherHeight() 167enableContinuousPlayer() 168transfertPlaylist() 169setPlaylist() 170setCurrentTrack(playlist.currentTrack)}else{play()}}) 171ctrl.on('click','.previous',function(){previous()}) 172ctrl.on('click','.next',function(){next()})} 173var enableContinuousPlayer=function(){IRON.artistPlayer.continuousPlayer=!0} 174var setStatus=function(){if(artistWavesurfer.isPlaying()){artistPlayer.addClass('audio-playing');return} 175artistPlayer.removeClass('audio-playing')} 176function play(){playerConsent=!0;artistWavesurfer.playPause();setStatus()} 177var transfertPlaylist=function(){$.when(IRON.continuousPlayer.ready).done(function(){IRON.continuousPlayer.setPlaylist(artistPlayer);$.when(IRON.continuousPlayer.playlist.promise).done(function(){IRON.continuousPlayer.setTrackInfo(IRON.artistPlayer.playlist.currentTrack);IRON.continuousPlayer.playlist.currentTrack=IRON.artistPlayer.playlist.currentTrack;IRON.continuousPlayer.setAudio(IRON.continuousPlayer.playlist.list[IRON.artistPlayer.playlist.currentTrack].mp3)})})} 178function previous(){clearTimeout(seekTimeOut) 179var currentTrack=playlist.currentTrack;var nextTrack=currentTrack-1;if('2'<getTime(artistWavesurfer)){artistWavesurfer.seekTo(0);return} 180if(nextTrack<0){nextTrack=playlist.list.length-1} 181setCurrentTrack(nextTrack)} 182function next(){clearTimeout(seekTimeOut) 183var currentTrack=playlist.currentTrack;var nextTrack=currentTrack+1;if(nextTrack+1>playlist.list.length){nextTrack=0} 184setCurrentTrack(nextTrack)} 185function getTime(){return artistWavesurfer.getCurrentTime()} 186return{setPlayer:setPlayer,setPlaylist:setPlaylist,setCurrentTrack:setCurrentTrack,playlist:playlist,play:play}}(jQuery);if(jQuery('.artist_player').length){IRON.artistPlayer.setPlayer()} 187IRON.continuousPlayer.setPlayer() 188IRON.players=[];jQuery('.iron-audioplayer').each(function(){var player=Object.create(IRON.audioPlayer);player.init(jQuery(this));IRON.players.push(player)}); 189// jquery.tweet.js - See http://tweet.seaofclouds.com/ or https://github.com/seaofclouds/tweet for more info 190// Copyright (c) 2008-2012 Todd Matthews & Steve Purcell 191// Modified by Stan Scates for https://github.com/StanScates/Tweet.js-Mod 192 193(function (factory) { 194 if (typeof define === 'function' && define.amd) 195 define(['jquery'], factory); // AMD support for RequireJS etc. 196 else 197 factory(jQuery); 198}(function ($) { 199 $.fn.tweet = function(o){ 200 var s = $.extend({ 201 modpath: ajax_vars.ajax_url, // [string] relative URL to Tweet.js mod (see https://github.com/StanScates/Tweet.js-Mod) 202 username: null, // [string or array] required unless using the 'query' option; one or more twitter screen names (use 'list' option for multiple names, where possible) 203 list_id: null, // [integer] ID of list to fetch when using list functionality 204 list: null, // [string] optional slug of list belonging to username 205 favorites: false, // [boolean] display the user's favorites instead of his tweets 206 query: null, // [string] optional search query (see also: http://search.twitter.com/operators) 207 avatar_size: null, // [integer] height and width of avatar if displayed (48px max) 208 count: 3, // [integer] how many tweets to display? 209 fetch: null, // [integer] how many tweets to fetch via the API (set this higher than 'count' if using the 'filter' option) 210 page: 1, // [integer] which page of results to fetch (if count != fetch, you'll get unexpected results) 211 retweets: true, // [boolean] whether to fetch (official) retweets (not supported in all display modes) 212 intro_text: null, // [string] do you want text BEFORE your your tweets? 213 outro_text: null, // [string] do you want text AFTER your tweets? 214 join_text: null, // [string] optional text in between date and tweet, try setting to "auto" 215 auto_join_text_default: "i said,", // [string] auto text for non verb: "i said" bullocks 216 auto_join_text_ed: "i", // [string] auto text for past tense: "i" surfed 217 auto_join_text_ing: "i am", // [string] auto tense for present tense: "i was" surfing 218 auto_join_text_reply: "i replied to", // [string] auto tense for replies: "i replied to" @someone "with" 219 auto_join_text_url: "i was looking at", // [string] auto tense for urls: "i was looking at" http:... 220 loading_text: null, // [string] optional loading text, displayed while tweets load 221 refresh_interval: null , // [integer] optional number of seconds after which to reload tweets 222 twitter_url: "twitter.com", // [string] custom twitter url, if any (apigee, etc.) 223 twitter_api_url: "api.twitter.com", // [string] custom twitter api url, if any (apigee, etc.) 224 twitter_search_url: "api.twitter.com", // [string] custom twitter search url, if any (apigee, etc.) 225 template: "{avatar}{time}{join}{text}", // [string or function] template used to construct each tweet <li> - see code for available vars 226 comparator: function(tweet1, tweet2) { // [function] comparator used to sort tweets (see Array.sort) 227 return tweet2["tweet_time"] - tweet1["tweet_time"]; 228 }, 229 filter: function(tweet) { // [function] whether or not to include a particular tweet (be sure to also set 'fetch') 230 return true; 231 } 232 // You can attach callbacks to the following events using jQuery's standard .bind() mechanism: 233 // "loaded" -- triggered when tweets have been fetched and rendered 234 }, o); 235 236 // See http://daringfireball.net/2010/07/improved_regex_for_matching_urls 237 var url_regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»ââââ]))/gi; 238 239 // Expand values inside simple string templates with {placeholders} 240 function t(template, info) { 241 if (typeof template === "string") { 242 var result = template; 243 for(var key in info) { 244 var val = info[key]; 245 result = result.replace(new RegExp('{'+key+'}','g'), val === null ? '' : val); 246 } 247 return result; 248 } else return template(info); 249 } 250 // Export the t function for use when passing a function as the 'template' option 251 $.extend({tweet: {t: t}}); 252 253 function replacer (regex, replacement) { 254 return function() { 255 var returning = []; 256 this.each(function() { 257 returning.push(this.replace(regex, replacement)); 258 }); 259 return $(returning); 260 }; 261 } 262 263 function escapeHTML(s) { 264 return s.replace(/</g,"<").replace(/>/g,"^>"); 265 } 266 267 $.fn.extend({ 268 linkUser: replacer(/(^|[\W])@(\w+)/gi, "$1<span class=\"at\">@</span><a href=\"http://"+s.twitter_url+"/$2\">$2</a>"),
269 // Support various latin1 (\u00**) and arabic (\u06**) alphanumeric chars 270 linkHash: replacer(/(?:^| )[\#]+([\w\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff\u0600-\u06ff]+)/gi, 271 ' <a href="https://twitter.com/search?q=%23$1'+((s.username && s.username.length == 1 && !s.list) ? '&from='+s.username.join("%2BOR%2B") : '')+'" class="tweet_hashtag">#$1</a>'), 272 makeHeart: replacer(/(<)+[3]/gi, "<tt class='heart'>♥</tt>") 273 }); 274 275 function linkURLs(text, entities) { 276 return text.replace(url_regexp, function(match) { 277 var url = (/^[a-z]+:/i).test(match) ? match : "http://"+match; 278 var text = match; 279 for(var i = 0; i < entities.length; ++i) { 280 var entity = entities[i]; 281 if (entity.url == url && entity.expanded_url) { 282 url = entity.expanded_url; 283 text = entity.display_url; 284 break; 285 } 286 } 287 return "<a href=\""+escapeHTML(url)+"\">"+escapeHTML(text)+"</a>"; 288 }); 289 } 290 291 function parse_date(date_str) { 292 // The non-search twitter APIs return inconsistently-formatted dates, which Date.parse 293 // cannot handle in IE. We therefore perform the following transformation: 294 // "Wed Apr 29 08:53:31 +0000 2009" => "Wed, Apr 29 2009 08:53:31 +0000" 295 return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3')); 296 } 297 298 function relative_time(date) { 299 var relative_to = (arguments.length > 1) ? arguments[1] : new Date(); 300 var delta = parseInt((relative_to.getTime() - date) / 1000, 10); 301 var r = ''; 302 if (delta < 1) { 303 r = 'just now'; 304 } else if (delta < 60) { 305 r = delta + ' seconds ago'; 306 } else if(delta < 120) { 307 r = 'about a minute ago'; 308 } else if(delta < (45*60)) { 309 r = 'about ' + (parseInt(delta / 60, 10)).toString() + ' minutes ago'; 310 } else if(delta < (2*60*60)) { 311 r = 'about an hour ago'; 312 } else if(delta < (24*60*60)) { 313 r = 'about ' + (parseInt(delta / 3600, 10)).toString() + ' hours ago'; 314 } else if(delta < (48*60*60)) { 315 r = 'about a day ago'; 316 } else { 317 r = 'about ' + (parseInt(delta / 86400, 10)).toString() + ' days ago'; 318 } 319 return r; 320 } 321 322 function build_auto_join_text(text) { 323 if (text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) { 324 return s.auto_join_text_reply; 325 } else if (text.match(url_regexp)) { 326 return s.auto_join_text_url; 327 } else if (text.match(/^((\w+ed)|just) .*/im)) { 328 return s.auto_join_text_ed; 329 } else if (text.match(/^(\w*ing) .*/i)) { 330 return s.auto_join_text_ing; 331 } else { 332 return s.auto_join_text_default; 333 } 334 } 335 336 function build_api_request() { 337 var modpath = s.modpath, 338 count = (s.fetch === null) ? s.count : s.fetch, 339 defaults = { 340 include_entities: 1 341 }; 342 343 if (s.list) { 344 return { 345 host: s.twitter_api_url, 346 url: "/1.1/lists/statuses.json", 347 parameters: $.extend({}, defaults, { 348 list_id: s.list_id, 349 slug: s.list, 350 owner_screen_name: s.username, 351 page: s.page, 352 count: count, 353 include_rts: (s.retweets ? 1 : 0) 354 }) 355 }; 356 } else if (s.favorites) { 357 return { 358 host: s.twitter_api_url, 359 url: "/1.1/favorites/list.json", 360 parameters: $.extend({}, defaults, { 361 list_id: s.list_id, 362 screen_name: s.username, 363 page: s.page, 364 count: count 365 }) 366 }; 367 } else if (s.query === null && s.username.length === 1) { 368 return { 369 host: s.twitter_api_url, 370 url: "/1.1/statuses/user_timeline.json", 371 parameters: $.extend({}, defaults, { 372 screen_name: s.username, 373 page: s.page, 374 count: count, 375 include_rts: (s.retweets ? 1 : 0) 376 }) 377 }; 378 } else { 379 var query = (s.query || 'from:'+s.username.join(' OR from:')); 380 return { 381 host: s.twitter_search_url, 382 url: "/1.1/search/tweets.json", 383 parameters: $.extend({}, defaults, { 384 q: query, 385 count: count 386 }) 387 }; 388 } 389 } 390 391 function extract_avatar_url(item, secure) { 392 if (secure) { 393 return ('user' in item) ? 394 item.user.profile_image_url_https : 395 extract_avatar_url(item, false). 396 replace(/^http:\/\/[a-z0-9]{1,3}\.twimg\.com\//, "https://s3.amazonaws.com/twitter_production/"); 397 } else { 398 return item.profile_image_url || item.user.profile_image_url; 399 } 400 } 401 402 // Convert twitter API objects into data available for 403 // constructing each tweet <li> using a template 404 function extract_template_data(item) { 405 var o = {}; 406 o.item = item; 407 o.source = item.source; 408 // The actual user name is not returned by all Twitter APIs, so please do not file an issue if it is empty. 409 o.name = item.from_user_name || item.user.name; 410 o.screen_name = item.from_user || item.user.screen_name; 411 o.avatar_size = s.avatar_size; 412 o.avatar_url = extract_avatar_url(item, (document.location.protocol === 'https:')); 413 o.retweet = typeof(item.retweeted_status) != 'undefined'; 414 o.tweet_time = parse_date(item.created_at); 415 o.join_text = s.join_text == "auto" ? build_auto_join_text(item.text) : s.join_text; 416 o.tweet_id = item.id_str; 417 o.twitter_base = "http://"+s.twitter_url+"/"; 418 o.user_url = o.twitter_base+o.screen_name; 419 o.tweet_url = o.user_url+"/status/"+o.tweet_id; 420 o.reply_url = o.twitter_base+"intent/tweet?in_reply_to="+o.tweet_id; 421 o.retweet_url = o.twitter_base+"intent/retweet?tweet_id="+o.tweet_id; 422 o.favorite_url = o.twitter_base+"intent/favorite?tweet_id="+o.tweet_id; 423 o.retweeted_screen_name = o.retweet && item.retweeted_status.user.screen_name; 424 o.tweet_relative_time = relative_time(o.tweet_time); 425 o.entities = item.entities ? (item.entities.urls || []).concat(item.entities.media || []) : []; 426 o.tweet_raw_text = o.retweet ? ('RT @'+o.retweeted_screen_name+' '+item.retweeted_status.text) : item.text; // avoid '...' in long retweets 427 o.tweet_text = $([linkURLs(o.tweet_raw_text, o.entities)]).linkUser().linkHash()[0]; 428 o.tweet_text_fancy = $([o.tweet_text]).makeHeart()[0]; 429
430 // Default spans, and pre-formatted blocks for common layouts 431 o.user = t('<a class="tweet_user" href="{user_url}">{screen_name}</a>', o); 432 o.join = s.join_text ? t(' <span class="tweet_join">{join_text}</span> ', o) : ' '; 433 o.avatar = o.avatar_size ? 434 t('<a class="tweet_avatar" href="{user_url}"><img src="{avatar_url}" height="{avatar_size}" width="{avatar_size}" alt="{screen_name}\'s avatar" title="{screen_name}\'s avatar" border="0"/></a>', o) : ''; 435 o.time = t('<span class="tweet_time"><a href="{tweet_url}" title="view tweet on twitter">{tweet_relative_time}</a></span>', o); 436 o.text = t('<span class="tweet_text">{tweet_text_fancy}</span>', o); 437 o.reply_action = t('<a class="tweet_action tweet_reply" href="{reply_url}">reply</a>', o); 438 o.retweet_action = t('<a class="tweet_action tweet_retweet" href="{retweet_url}">retweet</a>', o); 439 o.favorite_action = t('<a class="tweet_action tweet_favorite" href="{favorite_url}">favorite</a>', o); 440 return o; 441 } 442 443 return this.each(function(i, widget){ 444 var list = $('<ul class="tweet_list">'); 445 var intro = '<p class="tweet_intro">'+s.intro_text+'</p>'; 446 var outro = '<p class="tweet_outro">'+s.outro_text+'</p>'; 447 var loading = $('<p class="loading">'+s.loading_text+'</p>'); 448 449 if(s.username && typeof(s.username) == "string"){ 450 s.username = [s.username]; 451 } 452 453 $(widget).unbind("tweet:load").bind("tweet:load", function(){ 454 if (s.loading_text) $(widget).empty().append(loading); 455 456 $.ajax({ 457 dataType: "json", 458 type: "post", 459 url: ajax_vars.ajax_url, 460 data: { 461 request: build_api_request(), 462 action: 'ironTwitter' 463 } 464 }) 465 .done(function(data, status) { 466 467 var response = data.response; 468 $(widget).empty().append(list); 469 if (s.intro_text) list.before(intro); 470 list.empty(); 471 472 if(response.statuses !== undefined) { 473 resp = response.statuses; 474 } else if(response.results !== undefined) { 475 resp = response.results; 476 } else { 477 resp = response; 478 } 479 480 var tweets = $.map(resp, extract_template_data); 481 tweets = $.grep(tweets, s.filter).sort(s.comparator).slice(0, s.count); 482 483 list.append($.map(tweets, function(o) { return "<li>" + t(s.template, o) + "</li>"; }).join('')). 484 children('li:first').addClass('tweet_first').end(). 485 children('li:odd').addClass('tweet_even').end(). 486 children('li:even').addClass('tweet_odd'); 487 488 if (s.outro_text) list.after(outro); 489 $(widget).trigger("loaded").trigger((tweets ? "empty" : "full")); 490 if (s.refresh_interval) { 491 window.setTimeout(function() { $(widget).trigger("tweet:load"); }, 1000 * s.refresh_interval); 492 } 493 }) 494 .always(function(data, status){ 495 if(data.message) { 496 console.log(data.message); 497 } 498 }); 499 }).trigger("tweet:load"); 500 }); 501 }; 502}));;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.