Player library, unified renderer for artists and playlists
This commit is contained in:
@@ -11,26 +11,6 @@ class window.Ajax
|
||||
$('#artist-load-spinner').hide()
|
||||
false
|
||||
|
||||
load404Page: ->
|
||||
$.get '/404.html', (data) ->
|
||||
$('.data-container .inner').html data
|
||||
false
|
||||
|
||||
loadIndexPage: ->
|
||||
$('#content').load '/greetings/'
|
||||
_ajax.setTitle ''
|
||||
false
|
||||
|
||||
loadAboutPage: ->
|
||||
$('#content').load '/about/'
|
||||
_ajax.setTitle 'About'
|
||||
false
|
||||
|
||||
loadStatPage: ->
|
||||
$('#content').load '/stat/'
|
||||
_ajax.setTitle 'Statistics'
|
||||
false
|
||||
|
||||
setArchor: (anchor) ->
|
||||
@referer = this.getAnchor()
|
||||
window.location.hash = '#' +anchor
|
||||
@@ -66,6 +46,10 @@ class window.Ajax
|
||||
_session.query path, {}, (response) ->
|
||||
_page.render response
|
||||
_ajax.hideSpinner()
|
||||
if _session.getUser().id?
|
||||
$('.button-container').show()
|
||||
else
|
||||
$('.button-container').hide()
|
||||
false
|
||||
false
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ class window.BeatHaven
|
||||
logs: []
|
||||
|
||||
init: ->
|
||||
log "Initiating BeatHaven ..."
|
||||
log "Initializing BeatHaven ..."
|
||||
|
||||
window._vkontakte = new Vkontakte(2335068)
|
||||
window._vkontakte.init()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
class window.Page
|
||||
|
||||
@data: {}
|
||||
@html: ""
|
||||
@status: ""
|
||||
data: {}
|
||||
html: ""
|
||||
status: ""
|
||||
|
||||
render: (params) ->
|
||||
@data = params.data
|
||||
@@ -10,9 +10,13 @@ class window.Page
|
||||
@title = params.title
|
||||
@status = params.status
|
||||
|
||||
log "Rendering page titled \"#{@title}\" of type \"#{params.renderer}\" ..."
|
||||
log "Rendering page titled \"#{@title}\" with #{params.renderer} renderer ..."
|
||||
$('#content').html(@html)
|
||||
|
||||
if params.callback?
|
||||
log "Executing page callback action #{params.callback.object}##{params.callback.action} ..."
|
||||
window["_"+params.callback.object][params.callback.action](@data)
|
||||
|
||||
# yaCounter7596904.hit _ajax.getAnchor(), @title, _ajax.referer
|
||||
_ajax.setTitle @title
|
||||
false
|
||||
@@ -46,15 +50,6 @@ class window.Page
|
||||
false
|
||||
|
||||
$ ->
|
||||
$('#logo').live 'click', ->
|
||||
_ajax.go '/'
|
||||
false
|
||||
$('.about').live 'click', ->
|
||||
_ajax.go '/about/'
|
||||
false
|
||||
$('.stat').live 'click', ->
|
||||
_ajax.go '/stat/'
|
||||
false
|
||||
$('body').live 'click', ->
|
||||
$('.dropdown-toggle, .menu').parent('li').removeClass('open')
|
||||
false
|
||||
@@ -64,6 +59,9 @@ $ ->
|
||||
$('.dropdown-menu li a').live 'click', ->
|
||||
$(this).parent().parent().parent().toggleClass('open')
|
||||
false
|
||||
$('.page-link').live 'click', (e) ->
|
||||
_ajax.go $(this).attr("href")
|
||||
false
|
||||
$('.foreign-link').live 'click', (e) ->
|
||||
# window.open($(this).attr('href'))
|
||||
e.preventDefault();
|
||||
|
||||
@@ -5,6 +5,7 @@ class window.Player
|
||||
scrobbled: false
|
||||
albums: []
|
||||
playlist: []
|
||||
library: {}
|
||||
|
||||
initJplayer: ->
|
||||
self = this
|
||||
@@ -48,24 +49,25 @@ class window.Player
|
||||
self.setTrack next
|
||||
false
|
||||
|
||||
addTracks: (tracks, autoplay) ->
|
||||
addTrack: (item, autoplay) ->
|
||||
if typeof item in ["number", "string"]
|
||||
item = @library[item]
|
||||
if not autoplay?
|
||||
autoplay = false
|
||||
initial_count = $('.playlist li').length
|
||||
for item in tracks
|
||||
len = parseInt(item.length, 10)
|
||||
m = Math.floor(len / 60)
|
||||
s = len - Math.floor(len / 60) * 60
|
||||
duration = m + ':' + (if s < 10 then '0' else '') + s
|
||||
item_class = (if item.available == false then 'unavailable' else '')
|
||||
$('.playlist').append "
|
||||
<li id='i#{Math.round(Math.random() * 999999)}' data-id='#{item.id}' class='#{item_class}'>
|
||||
<div class='song-duration'>#{duration}</div>
|
||||
<div class='label important remove'>remove</div>
|
||||
<div class='artist-name'><a class='data artist'>#{item.artist}</a></div>
|
||||
<div class='song-title'>#{item.name}</div>
|
||||
</li>"
|
||||
_player.playlist.push item
|
||||
len = parseInt(item.length, 10)
|
||||
m = Math.floor(len / 60)
|
||||
s = len - Math.floor(len / 60) * 60
|
||||
duration = m + ':' + (if s < 10 then '0' else '') + s
|
||||
item_class = (if item.available == false then 'unavailable' else '')
|
||||
$('.playlist').append "
|
||||
<li id='i#{Math.round(Math.random() * 999999)}' data-id='#{item.id}' class='#{item_class}'>
|
||||
<div class='song-duration'>#{duration}</div>
|
||||
<div class='label important remove'>remove</div>
|
||||
<div class='artist-name'><a class='data artist'>#{item.artist}</a></div>
|
||||
<div class='song-title'>#{item.name}</div>
|
||||
</li>"
|
||||
_player.playlist.push item
|
||||
$('.playlist').sortable axis: 'y', cursor: 'move'
|
||||
if initial_count == 0 and not _player.hasTrack()
|
||||
_player.setTrack($('.playlist li').first().attr('id').split('i')[1])
|
||||
@@ -197,14 +199,18 @@ class window.Player
|
||||
|
||||
setPlaylist: (data) ->
|
||||
this.emptyPlaylist()
|
||||
tracks = []
|
||||
for item in data.playlist_items
|
||||
tracks.push
|
||||
id: item.track.id
|
||||
name: item.track.name
|
||||
artist: item.track.artists[0].name
|
||||
length: item.track.length
|
||||
this.addTracks tracks
|
||||
for track in data.tracks
|
||||
this.addTrack track
|
||||
false
|
||||
|
||||
updateLibrary: (data) ->
|
||||
if data.albums?
|
||||
for album in data.albums
|
||||
for track in album.tracks
|
||||
@library[track.id] = track
|
||||
if data.tracks?
|
||||
for track in data.tracks
|
||||
@library[track.id] = track
|
||||
false
|
||||
|
||||
|
||||
@@ -257,36 +263,18 @@ $('.playlist li').live 'click', ->
|
||||
# Adding To Playlist actions
|
||||
|
||||
$('.add-album').live 'click', ->
|
||||
album = _player.getAlbumInfo($(this).attr('data-album-id'))
|
||||
for item in album.tracks
|
||||
item['artist'] = album.artist
|
||||
item['album'] = album.name
|
||||
_player.addTracks album.tracks
|
||||
for id in $(this).data('tracks').split(",")
|
||||
_player.addTrack id
|
||||
false
|
||||
|
||||
$('.s-add').live 'click', ->
|
||||
album = _player.getAlbumInfo($(this).attr('data-album-id'))
|
||||
item = album.tracks[$(this).attr('data-id')]
|
||||
for item in album.tracks
|
||||
if item.id == parseInt($(this).attr('data-id'), 10)
|
||||
item['artist'] = album.artist
|
||||
item['album'] = album.name
|
||||
_player.addTracks [item]
|
||||
return false
|
||||
_player.addTrack $(this).data('id')
|
||||
false
|
||||
|
||||
$('.set-playlist').live 'click', ->
|
||||
_search.showSpinner()
|
||||
$.get "/playlist/#{$(this).data('playlist-id')}", (playlist) ->
|
||||
_player.setPlaylist playlist
|
||||
_search.hideSpinner()
|
||||
false
|
||||
false
|
||||
|
||||
$('.dynamic-playlist') .live 'click', ->
|
||||
_search.showSpinner()
|
||||
$.get "/playlist/#{$(this).data('playlist')}", (playlist) ->
|
||||
_player.setPlaylist playlist
|
||||
$.get "/playlist/#{$(this).data('playlist')}", (response) ->
|
||||
_player.setPlaylist response.data
|
||||
_search.hideSpinner()
|
||||
false
|
||||
false
|
||||
|
||||
@@ -12,35 +12,29 @@ class window.Search
|
||||
false
|
||||
|
||||
loadArtistData: (name) ->
|
||||
log "Loading artist page ..."
|
||||
_search.showSpinner()
|
||||
name = name.split(' ').join('+')
|
||||
$.get '/artist/' +name+ '/', (data) ->
|
||||
if data.status in ['ok', 'loading']
|
||||
_ajax.setArchor '/artist/' +name+ '/'
|
||||
_page.print data.html
|
||||
if _session.getUser().id
|
||||
if data.artist.albums?
|
||||
for album in data.artist.albums
|
||||
album['artist'] = data.artist.name
|
||||
_player.albums.push(album)
|
||||
$('.button-container').show()
|
||||
_page.render data
|
||||
_search.hideSpinner()
|
||||
if _session.getUser().id?
|
||||
$('.button-container').show()
|
||||
else
|
||||
$('.button-container').hide()
|
||||
if data.status is 'loading'
|
||||
setTimeout () ->
|
||||
_search.loadArtistData name
|
||||
, 10000
|
||||
_ajax.setTitle $('#main h2').text()
|
||||
else if data.status is 'corrected'
|
||||
_search.loadArtistData data.correct_name
|
||||
else if data.status is 'suggestions'
|
||||
_search.hideSpinner()
|
||||
_page.print data.html
|
||||
else if data.status == 'fail'
|
||||
_search.hideSpinner()
|
||||
_page.print data.html
|
||||
else if data.status == 'not_found'
|
||||
_search.hideSpinner()
|
||||
alert "Not found"
|
||||
else
|
||||
_search.hideSpinner()
|
||||
_page.print data.html
|
||||
false
|
||||
|
||||
$('#search-form').live 'submit', ->
|
||||
@@ -48,5 +42,5 @@ $('#search-form').live 'submit', ->
|
||||
_search.loadArtistData $('#search').val()
|
||||
false
|
||||
$('.data.artist').live 'click', ->
|
||||
_search.loadArtistData $(this).html()
|
||||
_ajax.go "/artist/"+$(this).html().split(' ').join('+')
|
||||
false
|
||||
|
||||
@@ -6,7 +6,6 @@ class window.Settings
|
||||
false
|
||||
_session.secureLoad '/settings/', (data) ->
|
||||
false
|
||||
#yaCounter7596904.hit _ajax.getAnchor(), 'Settings', _ajax.referer
|
||||
_ajax.setTitle 'Settings'
|
||||
false
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ class window.Vkontakte
|
||||
@api_id
|
||||
|
||||
init: ->
|
||||
log "Initiating Vkontakte API ..."
|
||||
log "Initializing Vkontakte API ..."
|
||||
window.vkAsyncInit = ->
|
||||
VK.init apiId: _vkontakte.getApiId()
|
||||
_vkontakte.auth()
|
||||
|
||||
Reference in New Issue
Block a user