class Player bar_width: 330 jp: null scrobbled: false initJplayer: -> self = this @jp = $("#jplayer") @jp.jPlayer swfPath: "/js" supplied: "mp3" cssSelectorAncestor: "" cssSelector: play: "#player .play" pause: "#player .pause" stop: "" videoPlay: "" seekBar: "" playBar: "" mute: "" unmute: "" volumeBar: "" volumeBarValue: "" currentTime: "" duration: "" @jp.bind $.jPlayer.event.timeupdate, (e) -> data = e.jPlayer.status if not Player.scrobbled and data.currentPercentAbsolute > 50 $obj = $('.playlist-tracks li.now') self.scrobble $obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track') Player.scrobbled = true $('#player .progress .loaded').width(data.seekPercent * self.bar_width / 100) $('#player .progress .played').width(data.currentPercentAbsolute * self.bar_width / 100) @jp.bind $.jPlayer.event.ended, (e) -> next = self.nextTrack() if not next $('#jplayer').jPlayer 'clearMedia' $('#player .now-playing').html 'Nothing left to lose play' $('#player .loaded, #player .played').width 0 $('.playlist-tracks li').removeClass 'now' else self.setTrack next false addTrack: (artist, album, track, length, autoplay) -> if not autoplay? autoplay = false initial_count = $('.playlist-tracks li').length $('.playlist-tracks').append '
  • ' +artist+ ' &mdash ' +track+ ' ' +length+ '
    remove
  • ' $('#playlist').html($('.playlist-tracks')).scrollbar() $('.playlist-tracks').sortable() if autoplay Player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1]) else if initial_count == 0 and not Player.hasTrack() Player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]) setTrack: (id) -> $obj = $('#i' +id) query = $obj.attr('data-artist')+ ' &mdash ' +$obj.attr('data-track') $('#player .now-playing').html query+ '
    ' $('.playlist-tracks li').removeClass 'now' $obj.addClass 'now' $('#player .loaded, #player .played').width 0 vkontakte.loadTracksData $obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), -> player.playSource() this.updateNowListening $obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track') hasTrack: -> if $('#jplayer audio').length > 0 return $('#jplayer audio').attr('src')? else if $('#jplayer object').length > 0 $('#jplayer').jPlayer 'play' true false playSource: (url) -> $('#jplayer').jPlayer 'setMedia', mp3: url $('#jplayer').jPlayer 'play' @scrobbled = false nextTrack: (manual) -> manual = manual? cnt = $('.playlist-tracks li').length if not this.onShuffle() # Shuffle off if $('.playlist-tracks .now').next().length == 0 # Last track and repeat is on if Player.onRepeat() or manual # Repeat or manual click return $('.playlist-tracks li').first().attr('id').split('i')[1] else false else return $('.playlist-tracks .now').next().attr('id').split('i')[1] else if cnt == 1 # Single track in the playlist return $('.playlist-tracks li').first().attr('id').split('i')[1] else # Shuffle on while true rnd = Math.floor(Math.random() * (cnt + .999)) $li = $('.playlist-tracks li').eq rnd if $li.length > 0 and not $li.hasClass 'now' return $li.attr('id').split('i')[1] false prevTrack: -> cnt = $('.playlist-tracks li').length if not Player.onShuffle() # Shuffle off if $('.playlist-tracks .now').prev().length == 0 # First track in the playlist return $('.playlist-tracks li').last().attr('id').split('i')[1] else return $('.playlist-tracks .now').prev().attr('id').split('i')[1] else if cnt == 1 # Single track in the playlist return $('.playlist-tracks li').first().attr('id').split('i')[1] else # Shuffle on while true rnd = Math.floor(Math.random() * (cnt + .999)) $li = $('.playlist-tracks li').eq rnd if $li.length > 0 and not $li.hasClass 'now' return $li.attr('id').split('i')[1] false onShuffle: -> return $('#shuffle').hasClass 'active' onRepeat: -> return $('#repeat').hasClass 'active' updateNowListening: (artist, album, track) -> if session.user.lastfm_username session.query '/lastfm/listening?r=' +Math.random(), artist: artist, album: album, track: track scrobble: (artist, album, track) -> if session.user.lastfm_username session.query '/lastfm/scrobble?r=' +Math.random(), artist: artist, album: album, track: track $ -> window.player = new Player() window.player.initJplayer() false # Player Controls $('#player .controls .prev').live 'click', -> Player.setTrack Player.prevTrack() false $('#player .controls .next').live 'click', -> Player.setTrack Player.nextTrack(true) false $('#player .play').live 'click', -> if $('.playlist-tracks li').length > 0 and not Player.hasTrack() player.setTrack $('.playlist-tracks li').first().attr('id').split('i')[1] false $('#player .progress').live 'click', (e) -> $('#jplayer').jPlayer 'playHead', Math.round((e.offsetX / Player.bar_width) * 100) false # Player Additional Controls $('#repeat, #shuffle').live 'click', -> $(this).toggleClass 'active' false $('#empty-playlist').live 'click', -> if confirm('Are you sure?') $('.playlist-tracks li').remove() $('#jplayer').jPlayer 'clearMedia' $('#player .now-playing').text 'Add some music to playlist' $('#player .loaded, #player .played').width 0 false # Playlist Actions $('.playlist-tracks li .fade, .playlist-tracks li .duration, .playlist-tracks li .remove').live 'mouseover mouseout', (e) -> if e.type == 'mouseover' $(this).parent().find('.duration').hide() $(this).parent().find('.remove').show() else $(this).parent().find('.remove').hide() $(this).parent().find('.duration').show() false $('.playlist-tracks li .remove').live 'click', -> $li = $(this).parent().parent() if $li.hasClass 'now' $('#jplayer').jPlayer 'clearMedia' $('#player .now-playing').text '...' $('#player .loaded, #player .played').width 0 $li.remove() false $('.playlist-tracks li').live 'dblclick', -> player.setTrack $(this).attr('id').split('i')[1] false # Adding To Playlist actions $('.add-album').live 'click', -> artist = $('.artist-info .name').html() album = $(this).parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, '' for item in $(this).parent().parent().parent().find('.tracklist li') track_name = $(item).find('.trackname').html() length = $(item).find('.length').html() Player.addTrack artist, album, track_name, length false $('.add-track').live 'click', -> artist = $('.artist-info .name').html() album = $(this).parent().parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, '' track_name = $(this).parent().find('.trackname').html() length = $(this).parent().find('.length').html() Player.addTrack artist, album, track_name, length false $('.tracklist li').live 'mouseover mouseout', (e) -> if e.type == 'mouseover' $(this).find('.add-track').show() else $(this).find('.add-track').hide() false $('.tracklist li').live 'dblclick', (e) -> artist = $('.artist-info .name').html() album = $(this).parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, '' track_name = $(this).find('.trackname').html() length = $(this).find('.length').html() Player.addTrack artist, album, track_name, length, true false