Holy fuck. It works!
This commit is contained in:
parent
b9ac20f575
commit
18b2b910ae
|
@ -3,42 +3,46 @@ class Ajax
|
||||||
referer: false
|
referer: false
|
||||||
|
|
||||||
loadArtistData: (name) ->
|
loadArtistData: (name) ->
|
||||||
search.showSpinner()
|
_search.showSpinner()
|
||||||
name = name.split(' ').join('+')
|
name = name.split(' ').join('+')
|
||||||
$.get '/artist/' +name+ '/', (data) ->
|
$.get '/artist/' +name+ '/', (data) ->
|
||||||
if data.status?
|
if data.status?
|
||||||
if data.status is 'loading'
|
if data.status is 'loading'
|
||||||
search.showArtistPics data.pics
|
_search.showArtistPics data.pics
|
||||||
setTimeout () ->
|
setTimeout () ->
|
||||||
this.loadArtistData name
|
_ajax.loadArtistData name
|
||||||
, 3000
|
, 3000
|
||||||
else if data.status is 'corrected'
|
else if data.status is 'corrected'
|
||||||
ajax.loadArtistData data.page
|
_ajax.loadArtistData data.page
|
||||||
else if data.status is 'suggestions'
|
else if data.status is 'suggestions'
|
||||||
search.hideSpinner()
|
_search.hideSpinner()
|
||||||
search.showSuggestions data.values
|
_search.showSuggestions data.values
|
||||||
else if data.status == 'loading_failed'
|
else if data.status == 'loading_failed'
|
||||||
search.hideSpinner()
|
_search.hideSpinner()
|
||||||
search.showError()
|
_search.showError()
|
||||||
else
|
else
|
||||||
this.setArchor '/artist/' +name+ '/'
|
_ajax.setArchor '/artist/' +name+ '/'
|
||||||
pages.renderArtist data
|
_pages.renderArtist data
|
||||||
beathaven.redrawScrollbar()
|
_beathaven.redrawScrollbar()
|
||||||
|
false
|
||||||
|
|
||||||
loadSearchPage: ->
|
loadSearchPage: ->
|
||||||
$.get '/templates/search.html', (data) ->
|
$.get '/templates/search.html', (data) ->
|
||||||
this.setArchor '/search/'
|
_ajax.setArchor '/search/'
|
||||||
pages.renderSearch data
|
_pages.renderSearch data
|
||||||
|
false
|
||||||
|
|
||||||
loadSettingsPage: ->
|
loadSettingsPage: ->
|
||||||
$.get '/templates/settings.html', (data) ->
|
$.get '/templates/settings.html', (data) ->
|
||||||
this.setArchor '/settings/'
|
_ajax.setArchor '/settings/'
|
||||||
pages.renderSettings data
|
_pages.renderSettings data
|
||||||
|
false
|
||||||
|
|
||||||
load404Page: ->
|
load404Page: ->
|
||||||
$.get '/404.html', (data) ->
|
$.get '/404.html', (data) ->
|
||||||
$('.data-container .inner').html data
|
$('.data-container .inner').html data
|
||||||
beathaven.redrawScrollbar()
|
_beathaven.redrawScrollbar()
|
||||||
|
false
|
||||||
|
|
||||||
setArchor: (anchor) ->
|
setArchor: (anchor) ->
|
||||||
@referer = this.getAnchor()
|
@referer = this.getAnchor()
|
||||||
|
@ -50,21 +54,25 @@ class Ajax
|
||||||
setTitle: (title) ->
|
setTitle: (title) ->
|
||||||
document.title = title+ ' @ BeatHaven'
|
document.title = title+ ' @ BeatHaven'
|
||||||
|
|
||||||
|
go: (url) ->
|
||||||
|
this.setArchor url
|
||||||
|
false
|
||||||
|
|
||||||
detectPage: () ->
|
detectPage: () ->
|
||||||
if m = this.getAnchor().match /\/artist\/(.+)\//
|
if m = _ajax.getAnchor().match /\/artist\/(.+)\//
|
||||||
this.loadArtistData m[1]
|
_ajax.loadArtistData m[1]
|
||||||
else if this.getAnchor() == '' or Ajax.getAnchor().match /\/search\//
|
else if _ajax.getAnchor() == '' or _ajax.getAnchor().match /\/search\//
|
||||||
this.loadSearchPage();
|
_ajax.loadSearchPage();
|
||||||
else if this.getAnchor().match /\/settings\//
|
else if _ajax.getAnchor().match /\/settings\//
|
||||||
this.loadSearchPage()
|
_ajax.loadSettingsPage()
|
||||||
else
|
else
|
||||||
this.load404Page()
|
_ajax.loadSearchPage()
|
||||||
|
false
|
||||||
|
|
||||||
|
|
||||||
$ ->
|
|
||||||
window.ajax = new Ajax()
|
|
||||||
$('a.data.artist').live 'click', ->
|
$('a.data.artist').live 'click', ->
|
||||||
ajax.loadArtistData $(this).html()
|
_ajax.loadArtistData $(this).html()
|
||||||
false
|
false
|
||||||
$(window).bind 'hashchange', ->
|
$(window).bind 'hashchange', ->
|
||||||
ajax.detectPage()
|
_ajax.detectPage()
|
||||||
|
false
|
||||||
|
|
|
@ -1,18 +1,25 @@
|
||||||
|
# Registering global objects
|
||||||
|
_beathaven = null
|
||||||
|
_session = 1
|
||||||
|
_vkontakte = null
|
||||||
|
_ajax = null
|
||||||
|
_player = null
|
||||||
|
_search = null
|
||||||
|
_pages = null
|
||||||
|
_settings = null
|
||||||
|
|
||||||
$ ->
|
$ ->
|
||||||
l = document.location
|
l = document.location
|
||||||
if l.host not in ['beathaven.org', 'localhost']
|
if l.host not in ['beathaven.org', 'localhost']
|
||||||
l.href = 'http://beathaven.org/'+ l.hash
|
l.href = 'http://beathaven.org/'+ l.hash
|
||||||
|
|
||||||
window.beathaven = new BeatHaven()
|
_beathaven = new BeatHaven()
|
||||||
window.vkontakte = new Vkontakte(if l.host == 'beathaven.org' then 2335068 else 2383163)
|
_beathaven.init()
|
||||||
|
|
||||||
beathaven.init()
|
|
||||||
vkontakte.init()
|
|
||||||
|
|
||||||
$(window).resize ->
|
$(window).resize ->
|
||||||
beathaven.adjustSizes()
|
_beathaven.adjustSizes()
|
||||||
window.setTimeout ->
|
window.setTimeout ->
|
||||||
beathaven.checkRedrawScrollbar()
|
_beathaven.checkRedrawScrollbar()
|
||||||
, 500
|
, 500
|
||||||
|
|
||||||
class BeatHaven
|
class BeatHaven
|
||||||
|
@ -20,9 +27,24 @@ class BeatHaven
|
||||||
last_height: false
|
last_height: false
|
||||||
|
|
||||||
init: ->
|
init: ->
|
||||||
this.drawInterface()
|
|
||||||
this.adjustSizes()
|
this.adjustSizes()
|
||||||
ajax.detectPage()
|
this.checkRedrawScrollbar()
|
||||||
|
|
||||||
|
_vkontakte = new Vkontakte(if document.location.host == 'beathaven.org' then 2335068 else 2383163)
|
||||||
|
_vkontakte.init()
|
||||||
|
|
||||||
|
_ajax = new Ajax()
|
||||||
|
|
||||||
|
_player = new Player()
|
||||||
|
_player.initJplayer()
|
||||||
|
|
||||||
|
_search = new Search()
|
||||||
|
|
||||||
|
_pages = new Pages()
|
||||||
|
|
||||||
|
_settings = new Settings()
|
||||||
|
|
||||||
|
_ajax.detectPage()
|
||||||
|
|
||||||
adjustSizes: ->
|
adjustSizes: ->
|
||||||
$('.data-container').height $(window).height() - $('.header-container').height()
|
$('.data-container').height $(window).height() - $('.header-container').height()
|
||||||
|
@ -45,7 +67,7 @@ class BeatHaven
|
||||||
document.getElementById(focused_id).focus()
|
document.getElementById(focused_id).focus()
|
||||||
focused_id = false
|
focused_id = false
|
||||||
window.setTimeout ->
|
window.setTimeout ->
|
||||||
beathaven.checkRedrawScrollbar()
|
_beathaven.checkRedrawScrollbar()
|
||||||
, 500
|
, 500
|
||||||
|
|
||||||
redrawScrollbar: ->
|
redrawScrollbar: ->
|
||||||
|
|
|
@ -47,8 +47,9 @@ class Pages
|
||||||
$('.data-container').css backgroundImage: 'none'
|
$('.data-container').css backgroundImage: 'none'
|
||||||
$('.data-container .inner').html('').append(artist_info).append(albums_info)
|
$('.data-container .inner').html('').append(artist_info).append(albums_info)
|
||||||
|
|
||||||
yaCounter7596904.hit ajax.getAnchor(), data.artist.name, ajax.referer
|
yaCounter7596904.hit _ajax.getAnchor(), data.artist.name, _ajax.referer
|
||||||
ajax.setTitle data.artist.name
|
_ajax.setTitle data.artist.name
|
||||||
|
false
|
||||||
|
|
||||||
renderSearch: (data) ->
|
renderSearch: (data) ->
|
||||||
$('.data-container').css background: 'url(/images/concrete_wall_2.png) 0 -30px repeat'
|
$('.data-container').css background: 'url(/images/concrete_wall_2.png) 0 -30px repeat'
|
||||||
|
@ -69,20 +70,18 @@ class Pages
|
||||||
zIndex: 9999 # z-index списка
|
zIndex: 9999 # z-index списка
|
||||||
deferRequestBy: 500 # Задержка запроса (мсек)
|
deferRequestBy: 500 # Задержка запроса (мсек)
|
||||||
onSelect: ->
|
onSelect: ->
|
||||||
ajax.loadArtistData()
|
_ajax.loadArtistData $('#search_field').val()
|
||||||
$('#search_field').focus()
|
$('#search_field').focus()
|
||||||
, 501
|
, 501
|
||||||
|
|
||||||
yaCounter7596904.hit ajax.getAnchor(), 'Artist Search', ajax.referer
|
yaCounter7596904.hit _ajax.getAnchor(), 'Artist Search', _ajax.referer
|
||||||
ajax.setTitle 'Artist Search'
|
_ajax.setTitle 'Artist Search'
|
||||||
|
false
|
||||||
|
|
||||||
renderSettings: (data) ->
|
renderSettings: (data) ->
|
||||||
$('.data-container').css background: 'none'
|
$('.data-container').css background: 'none'
|
||||||
$('.data-container .inner').html data
|
$('.data-container .inner').html data
|
||||||
yaCounter7596904.hit ajax.getAnchor(), 'Settings', ajax.referer
|
yaCounter7596904.hit _ajax.getAnchor(), 'Settings', _ajax.referer
|
||||||
ajax.setTitle 'Settings'
|
_ajax.setTitle 'Settings'
|
||||||
$('.settings-container .tabs .tab').first().trigger 'click'
|
$('.settings-container .tabs .tab').first().trigger 'click'
|
||||||
|
|
||||||
$ ->
|
|
||||||
window.pages = new Pages()
|
|
||||||
false
|
false
|
|
@ -13,8 +13,8 @@ class Player
|
||||||
supplied: "mp3"
|
supplied: "mp3"
|
||||||
cssSelectorAncestor: ""
|
cssSelectorAncestor: ""
|
||||||
cssSelector:
|
cssSelector:
|
||||||
play: "#player .play"
|
play: ".player .play"
|
||||||
pause: "#player .pause"
|
pause: ".player .pause"
|
||||||
stop: ""
|
stop: ""
|
||||||
videoPlay: ""
|
videoPlay: ""
|
||||||
seekBar: ""
|
seekBar: ""
|
||||||
|
@ -28,19 +28,19 @@ class Player
|
||||||
|
|
||||||
@jp.bind $.jPlayer.event.timeupdate, (e) ->
|
@jp.bind $.jPlayer.event.timeupdate, (e) ->
|
||||||
data = e.jPlayer.status
|
data = e.jPlayer.status
|
||||||
if not Player.scrobbled and data.currentPercentAbsolute > 50
|
if not _player.scrobbled and data.currentPercentAbsolute > 50
|
||||||
$obj = $('.playlist-tracks li.now')
|
$obj = $('.playlist-tracks li.now')
|
||||||
self.scrobble $obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')
|
self.scrobble $obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')
|
||||||
Player.scrobbled = true
|
_player.scrobbled = true
|
||||||
$('#player .progress .loaded').width(data.seekPercent * self.bar_width / 100)
|
$('.player .progress .loaded').width(data.seekPercent * self.bar_width / 100)
|
||||||
$('#player .progress .played').width(data.currentPercentAbsolute * self.bar_width / 100)
|
$('.player .progress .played').width(data.currentPercentAbsolute * self.bar_width / 100)
|
||||||
|
|
||||||
@jp.bind $.jPlayer.event.ended, (e) ->
|
@jp.bind $.jPlayer.event.ended, (e) ->
|
||||||
next = self.nextTrack()
|
next = self.nextTrack()
|
||||||
if not next
|
if not next
|
||||||
$('#jplayer').jPlayer 'clearMedia'
|
$('#jplayer').jPlayer 'clearMedia'
|
||||||
$('#player .now-playing').html 'Nothing left to <strike>lose</strike> play'
|
$('.player .now-playing').html 'Nothing left to <strike>lose</strike> play'
|
||||||
$('#player .loaded, #player .played').width 0
|
$('.player .loaded, .player .played').width 0
|
||||||
$('.playlist-tracks li').removeClass 'now'
|
$('.playlist-tracks li').removeClass 'now'
|
||||||
else
|
else
|
||||||
self.setTrack next
|
self.setTrack next
|
||||||
|
@ -54,31 +54,31 @@ class Player
|
||||||
<li id="i' +Math.round(Math.random() * 999999)+ '" data-artist="' +artist.trim()+ '" data-album="' +album.trim()+ '" data-track="' +track.trim()+ '" data-length="' +length+ '">
|
<li id="i' +Math.round(Math.random() * 999999)+ '" data-artist="' +artist.trim()+ '" data-album="' +album.trim()+ '" data-track="' +track.trim()+ '" data-length="' +length+ '">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="fade"></div>
|
<div class="fade"></div>
|
||||||
<span class="title" title="' +artist.htmlsafe()+ ' &mdash ' +track.htmlsafe()+ '">' +artist+ ' &mdash ' +track+ '</span>
|
<span class="title" title="' +artist.htmlsafe()+ " — " +track.htmlsafe()+ '">' +artist+ ' — ' +track+ '</span>
|
||||||
<span class="duration">' +length+ '</span>
|
<span class="duration">' +length+ '</span>
|
||||||
<div class="remove">remove</div>
|
<div class="remove">remove</div>
|
||||||
</div>
|
</div>
|
||||||
</li>'
|
</li>'
|
||||||
|
|
||||||
$('#playlist').html($('.playlist-tracks')).scrollbar()
|
$('.playlist').html($('.playlist-tracks')).scrollbar()
|
||||||
$('.playlist-tracks').sortable()
|
$('.playlist-tracks').sortable()
|
||||||
|
|
||||||
if autoplay
|
if autoplay
|
||||||
Player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1])
|
_player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1])
|
||||||
else if initial_count == 0 and not Player.hasTrack()
|
else if initial_count == 0 and not _player.hasTrack()
|
||||||
Player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1])
|
_player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1])
|
||||||
|
|
||||||
setTrack: (id) ->
|
setTrack: (id) ->
|
||||||
$obj = $('#i' +id)
|
$obj = $('#i' +id)
|
||||||
query = $obj.attr('data-artist')+ ' &mdash ' +$obj.attr('data-track')
|
query = $obj.attr('data-artist')+ ' — ' +$obj.attr('data-track')
|
||||||
|
|
||||||
$('#player .now-playing').html query+ '<div class="fade"></div>'
|
$('.player .now-playing').html query+ '<div class="fade"></div>'
|
||||||
$('.playlist-tracks li').removeClass 'now'
|
$('.playlist-tracks li').removeClass 'now'
|
||||||
$obj.addClass 'now'
|
$obj.addClass 'now'
|
||||||
$('#player .loaded, #player .played').width 0
|
$('.player .loaded, .player .played').width 0
|
||||||
|
|
||||||
vkontakte.loadTracksData $obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), ->
|
_vkontakte.loadTracksData $obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), (url)->
|
||||||
player.playSource()
|
_player.playSource url
|
||||||
this.updateNowListening $obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')
|
this.updateNowListening $obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')
|
||||||
|
|
||||||
hasTrack: ->
|
hasTrack: ->
|
||||||
|
@ -99,7 +99,7 @@ class Player
|
||||||
cnt = $('.playlist-tracks li').length
|
cnt = $('.playlist-tracks li').length
|
||||||
if not this.onShuffle() # Shuffle off
|
if not this.onShuffle() # Shuffle off
|
||||||
if $('.playlist-tracks .now').next().length == 0 # Last track and repeat is on
|
if $('.playlist-tracks .now').next().length == 0 # Last track and repeat is on
|
||||||
if Player.onRepeat() or manual # Repeat or manual click
|
if _player.onRepeat() or manual # Repeat or manual click
|
||||||
return $('.playlist-tracks li').first().attr('id').split('i')[1]
|
return $('.playlist-tracks li').first().attr('id').split('i')[1]
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
|
@ -117,7 +117,7 @@ class Player
|
||||||
|
|
||||||
prevTrack: ->
|
prevTrack: ->
|
||||||
cnt = $('.playlist-tracks li').length
|
cnt = $('.playlist-tracks li').length
|
||||||
if not Player.onShuffle() # Shuffle off
|
if not _player.onShuffle() # Shuffle off
|
||||||
if $('.playlist-tracks .now').prev().length == 0 # First track in the playlist
|
if $('.playlist-tracks .now').prev().length == 0 # First track in the playlist
|
||||||
return $('.playlist-tracks li').last().attr('id').split('i')[1]
|
return $('.playlist-tracks li').last().attr('id').split('i')[1]
|
||||||
else
|
else
|
||||||
|
@ -139,37 +139,31 @@ class Player
|
||||||
return $('#repeat').hasClass 'active'
|
return $('#repeat').hasClass 'active'
|
||||||
|
|
||||||
updateNowListening: (artist, album, track) ->
|
updateNowListening: (artist, album, track) ->
|
||||||
if session.user.lastfm_username
|
if _session.getUser().lastfm_username
|
||||||
session.query '/lastfm/listening?r=' +Math.random(), artist: artist, album: album, track: track
|
_session.query '/lastfm/listening?r=' +Math.random(), artist: artist, album: album, track: track
|
||||||
|
|
||||||
scrobble: (artist, album, track) ->
|
scrobble: (artist, album, track) ->
|
||||||
if session.user.lastfm_username
|
if _session.getUser().lastfm_username
|
||||||
session.query '/lastfm/scrobble?r=' +Math.random(), artist: artist, album: album, track: track
|
_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
|
||||||
|
|
||||||
$('#player .controls .prev').live 'click', ->
|
$('.player .controls .prev').live 'click', ->
|
||||||
Player.setTrack Player.prevTrack()
|
_player.setTrack _player.prevTrack()
|
||||||
false
|
false
|
||||||
|
|
||||||
$('#player .controls .next').live 'click', ->
|
$('.player .controls .next').live 'click', ->
|
||||||
Player.setTrack Player.nextTrack(true)
|
_player.setTrack _player.nextTrack(true)
|
||||||
false
|
false
|
||||||
|
|
||||||
$('#player .play').live 'click', ->
|
$('.player .play').live 'click', ->
|
||||||
if $('.playlist-tracks li').length > 0 and not Player.hasTrack()
|
if $('.playlist-tracks li').length > 0 and not _player.hasTrack()
|
||||||
player.setTrack $('.playlist-tracks li').first().attr('id').split('i')[1]
|
_player.setTrack $('.playlist-tracks li').first().attr('id').split('i')[1]
|
||||||
false
|
false
|
||||||
|
|
||||||
$('#player .progress').live 'click', (e) ->
|
$('.player .progress').live 'click', (e) ->
|
||||||
$('#jplayer').jPlayer 'playHead', Math.round((e.offsetX / Player.bar_width) * 100)
|
$('#jplayer').jPlayer 'playHead', Math.round((e.offsetX / _player.bar_width) * 100)
|
||||||
false
|
false
|
||||||
|
|
||||||
# Player Additional Controls
|
# Player Additional Controls
|
||||||
|
@ -182,8 +176,8 @@ $('#empty-playlist').live 'click', ->
|
||||||
if confirm('Are you sure?')
|
if confirm('Are you sure?')
|
||||||
$('.playlist-tracks li').remove()
|
$('.playlist-tracks li').remove()
|
||||||
$('#jplayer').jPlayer 'clearMedia'
|
$('#jplayer').jPlayer 'clearMedia'
|
||||||
$('#player .now-playing').text 'Add some music to playlist'
|
$('.player .now-playing').text 'Add some music to playlist'
|
||||||
$('#player .loaded, #player .played').width 0
|
$('.player .loaded, .player .played').width 0
|
||||||
false
|
false
|
||||||
|
|
||||||
# Playlist Actions
|
# Playlist Actions
|
||||||
|
@ -201,13 +195,13 @@ $('.playlist-tracks li .remove').live 'click', ->
|
||||||
$li = $(this).parent().parent()
|
$li = $(this).parent().parent()
|
||||||
if $li.hasClass 'now'
|
if $li.hasClass 'now'
|
||||||
$('#jplayer').jPlayer 'clearMedia'
|
$('#jplayer').jPlayer 'clearMedia'
|
||||||
$('#player .now-playing').text '...'
|
$('.player .now-playing').text '...'
|
||||||
$('#player .loaded, #player .played').width 0
|
$('.player .loaded, .player .played').width 0
|
||||||
$li.remove()
|
$li.remove()
|
||||||
false
|
false
|
||||||
|
|
||||||
$('.playlist-tracks li').live 'dblclick', ->
|
$('.playlist-tracks li').live 'dblclick', ->
|
||||||
player.setTrack $(this).attr('id').split('i')[1]
|
_player.setTrack $(this).attr('id').split('i')[1]
|
||||||
false
|
false
|
||||||
|
|
||||||
# Adding To Playlist actions
|
# Adding To Playlist actions
|
||||||
|
@ -218,7 +212,7 @@ $('.add-album').live 'click', ->
|
||||||
for item in $(this).parent().parent().parent().find('.tracklist li')
|
for item in $(this).parent().parent().parent().find('.tracklist li')
|
||||||
track_name = $(item).find('.trackname').html()
|
track_name = $(item).find('.trackname').html()
|
||||||
length = $(item).find('.length').html()
|
length = $(item).find('.length').html()
|
||||||
Player.addTrack artist, album, track_name, length
|
_player.addTrack artist, album, track_name, length
|
||||||
false
|
false
|
||||||
|
|
||||||
$('.add-track').live 'click', ->
|
$('.add-track').live 'click', ->
|
||||||
|
@ -226,7 +220,7 @@ $('.add-track').live 'click', ->
|
||||||
album = $(this).parent().parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, ''
|
album = $(this).parent().parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, ''
|
||||||
track_name = $(this).parent().find('.trackname').html()
|
track_name = $(this).parent().find('.trackname').html()
|
||||||
length = $(this).parent().find('.length').html()
|
length = $(this).parent().find('.length').html()
|
||||||
Player.addTrack artist, album, track_name, length
|
_player.addTrack artist, album, track_name, length
|
||||||
false
|
false
|
||||||
|
|
||||||
$('.tracklist li').live 'mouseover mouseout', (e) ->
|
$('.tracklist li').live 'mouseover mouseout', (e) ->
|
||||||
|
@ -241,5 +235,5 @@ $('.tracklist li').live 'dblclick', (e) ->
|
||||||
album = $(this).parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, ''
|
album = $(this).parent().parent().parent().find('h2.name').text().replace /\s\([\d]{4}\)$/, ''
|
||||||
track_name = $(this).find('.trackname').html()
|
track_name = $(this).find('.trackname').html()
|
||||||
length = $(this).find('.length').html()
|
length = $(this).find('.length').html()
|
||||||
Player.addTrack artist, album, track_name, length, true
|
_player.addTrack artist, album, track_name, length, true
|
||||||
false
|
false
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Search
|
||||||
$('.suggestions ul').append '
|
$('.suggestions ul').append '
|
||||||
<li>
|
<li>
|
||||||
<a class="data artist">' +item.name+ '</a>
|
<a class="data artist">' +item.name+ '</a>
|
||||||
' +(if item.desc then '<br/><span>'+ item.desc +'</span>' else '')+ '
|
' +(if item.desc? then '<br/><span>'+item.desc+'</span>' else '')+ '
|
||||||
</li>'
|
</li>'
|
||||||
$('.suggestions').show()
|
$('.suggestions').show()
|
||||||
false
|
false
|
||||||
|
@ -48,16 +48,12 @@ class Search
|
||||||
@pics = []
|
@pics = []
|
||||||
|
|
||||||
|
|
||||||
$ ->
|
|
||||||
window.search = new Search()
|
|
||||||
false
|
|
||||||
|
|
||||||
$('.search').live 'click', ->
|
$('.search').live 'click', ->
|
||||||
ajax.loadSearchPage()
|
_ajax.go '/search/'
|
||||||
false
|
false
|
||||||
$('#search_form').live 'submit', ->
|
$('#search_form').live 'submit', ->
|
||||||
$('.autocomplete-container').remove()
|
$('.autocomplete-container').remove()
|
||||||
ajax.loadArtistData $('#search_field').val()
|
_ajax.loadArtistData $('#search_field').val()
|
||||||
false
|
false
|
||||||
$('.suggestions a').live 'click', ->
|
$('.suggestions a').live 'click', ->
|
||||||
$('#search_field').val $(this).text()
|
$('#search_field').val $(this).text()
|
||||||
|
|
|
@ -3,7 +3,21 @@ class Session
|
||||||
vk_params: null
|
vk_params: null
|
||||||
user: null
|
user: null
|
||||||
|
|
||||||
constructor: (@vk_params) ->
|
constructor: (params) ->
|
||||||
|
attrs = ['expire', 'mid', 'secret', 'sid', 'sig']
|
||||||
|
_params = {}
|
||||||
|
for key in attrs
|
||||||
|
if params[key]?
|
||||||
|
_params[key] = params[key]
|
||||||
|
@vk_params = _params
|
||||||
|
false
|
||||||
|
|
||||||
|
setUser: (user) ->
|
||||||
|
@user = user
|
||||||
|
false
|
||||||
|
|
||||||
|
getUser: ->
|
||||||
|
@user
|
||||||
|
|
||||||
query: (url, params, callback) ->
|
query: (url, params, callback) ->
|
||||||
q_params = @vk_params
|
q_params = @vk_params
|
||||||
|
@ -11,13 +25,3 @@ class Session
|
||||||
q_params[attr] = params[attr]
|
q_params[attr] = params[attr]
|
||||||
$.post url, q_params, callback
|
$.post url, q_params, callback
|
||||||
false
|
false
|
||||||
|
|
||||||
setVkParams: (params) ->
|
|
||||||
attrs = ['expire', 'mid', 'secret', 'sid', 'sig']
|
|
||||||
for key in attrs
|
|
||||||
@vk_params[key] = params[key]
|
|
||||||
false
|
|
||||||
|
|
||||||
$ ->
|
|
||||||
window.session = new Session()
|
|
||||||
false
|
|
|
@ -1,35 +1,32 @@
|
||||||
class Settings
|
class Settings
|
||||||
|
|
||||||
getAccountInfo: (callback) ->
|
getAccountInfo: (callback) ->
|
||||||
session.query '/user/update/', {}, callback
|
_session.query '/user/update/', {}, callback
|
||||||
|
|
||||||
saveAccountInfo: (params, callback) ->
|
saveAccountInfo: (params, callback) ->
|
||||||
session.query '/user/update', params, callback
|
_session.query '/user/update', params, callback
|
||||||
|
|
||||||
loadFormData: (form) ->
|
loadFormData: (form) ->
|
||||||
if form == 'account'
|
if form == 'account'
|
||||||
$('.settings-container .form input[name$="username"]').val session.user.name
|
$('.settings-container .form input[name$="username"]').val _session.getUser().name
|
||||||
$('.settings-container .form input[name$="email"]').val session.email
|
$('.settings-container .form input[name$="email"]').val _session.getUser().email
|
||||||
else if form == 'lastfm'
|
else if form == 'lastfm'
|
||||||
if @user.lastfm_username
|
if _session.getUser().lastfm_username
|
||||||
$('.form-container input[name$="username"]').first().val session.lastfm_username
|
$('.form-container input[name$="username"]').first().val _session.getUser().lastfm_username
|
||||||
|
|
||||||
$ ->
|
|
||||||
window.settings = new Settings()
|
|
||||||
false
|
|
||||||
|
|
||||||
$('.settings') .live 'click', ->
|
$('.settings') .live 'click', ->
|
||||||
ajax.loadSettingsPage();
|
_ajax.go('/settings/');
|
||||||
|
|
||||||
$('.settings-container .tabs .tab').live 'click', ->
|
$('.settings-container .tabs .tab').live 'click', ->
|
||||||
if $(this).hasClass 'active'
|
if not $(this).hasClass 'active'
|
||||||
$('.settings-container .tabs .tab').removeClass 'active'
|
$('.settings-container .tabs .tab').removeClass 'active'
|
||||||
$(this).addClass 'active'
|
$(this).addClass 'active'
|
||||||
$('.form-container').html $('.forms .'+ $(this).attr 'data-fieldset').html()
|
$('.form-container').html $('.forms .'+ $(this).attr 'data-fieldset').html()
|
||||||
settings.loadFormData $(this).attr 'data-fieldset'
|
_settings.loadFormData $(this).attr 'data-fieldset'
|
||||||
|
|
||||||
$('.lastfm-connect') .live 'click', ->
|
$('.lastfm-connect') .live 'click', ->
|
||||||
window.open session.user.lastfm_login_url
|
window.open _session.getUser().lastfm_login_url
|
||||||
|
|
||||||
$('.settings-container .form input').live 'blur', ->
|
$('.settings-container .form input').live 'blur', ->
|
||||||
active_tab = $('.settings-container .tabs .tab.active').attr 'data-fieldset'
|
active_tab = $('.settings-container .tabs .tab.active').attr 'data-fieldset'
|
||||||
|
@ -37,5 +34,5 @@ $('.settings-container .form input').live 'blur', ->
|
||||||
params =
|
params =
|
||||||
username: $('.settings-container .form input[name$="username"]').first().val()
|
username: $('.settings-container .form input[name$="username"]').first().val()
|
||||||
email: $('.settings-container .form input[name$="email"]').first().val()
|
email: $('.settings-container .form input[name$="email"]').first().val()
|
||||||
settings.saveAccountInfo params, ->
|
_settings.saveAccountInfo params, ->
|
||||||
$('#header-container .hello .greating').text 'Hi there, ' +(if params.username.length > 0 then params.username else '%username%')+ '!'
|
$('#header-container .hello .greating').text 'Hi there, ' +(if params.username.length > 0 then params.username else '%username%')+ '!'
|
|
@ -1,50 +1,53 @@
|
||||||
class Vkontakte
|
class Vkontakte
|
||||||
|
|
||||||
qr: []
|
qr: null
|
||||||
|
|
||||||
constructor: (@api_id) ->
|
constructor: (@api_id) ->
|
||||||
|
|
||||||
init: ->
|
init: ->
|
||||||
|
@qr = []
|
||||||
VK.init
|
VK.init
|
||||||
apiId: @api_id
|
apiId: @api_id
|
||||||
nameTransportPath: '/xd_receiver.html'
|
|
||||||
|
|
||||||
VK.Auth.getLoginStatus this.authInfo
|
VK.Auth.getLoginStatus this.authInfo
|
||||||
|
|
||||||
authInfo: (response) ->
|
authInfo: (response) ->
|
||||||
if typeof response isnt 'undefined' and response.session
|
if typeof response isnt 'undefined' and response.session
|
||||||
session.setVkParams response.session
|
_session = new Session(response.session)
|
||||||
|
|
||||||
$('#vk_login, .auth_notice').hide()
|
$('#vk_login, .auth_notice').hide()
|
||||||
$('#vk_logout').css display: 'block'
|
$('#vk_logout').css display: 'block'
|
||||||
|
|
||||||
$('#search_field').focus() if $('#search_field').length > 0
|
$('#search_field').focus() if $('#search_field').length > 0
|
||||||
|
|
||||||
session.query '/user/auth', {}, (ar) ->
|
_session.query '/user/auth', {}, (ar) ->
|
||||||
if ar.newbie
|
if ar.newbie
|
||||||
VK.Api.call 'getVariable', key: 1281, (r) ->
|
VK.Api.call 'getVariable', key: 1281, (r) ->
|
||||||
Session.query '/user/update', name: r.response, (ar2) ->
|
_session.query '/user/update', name: r.response, (ar2) ->
|
||||||
session.user = ar2.user
|
_session.setUser ar2.user
|
||||||
$('#header-container .hello .greating')
|
$('.header-container .hello .greating')
|
||||||
.text 'Hi there, ' +(if session.user.name then session.user.name else '%username%')+ '!'
|
.text 'Hi there, ' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '!'
|
||||||
else
|
else
|
||||||
session.user = ar.user
|
_session.setUser ar.user
|
||||||
|
|
||||||
$('#header-container .hello .greating')
|
$('.header-container .hello .greating')
|
||||||
.text 'Hi there, ' +( if session.user.name then session.user.name else '%username%')+ '!'
|
.text 'Hi there, ' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '!'
|
||||||
else
|
else
|
||||||
|
_session = new Session({})
|
||||||
$('#vk_login, .auth_notice').css display: 'block'
|
$('#vk_login, .auth_notice').css display: 'block'
|
||||||
$('#vk_logout').hide()
|
$('#vk_logout').hide()
|
||||||
|
window._session = _session
|
||||||
|
|
||||||
loadTracksData: (artist, track, duration, callback) ->
|
loadTracksData: (artist, track, duration, callback) ->
|
||||||
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
|
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
|
||||||
query = artist+' '+track_prepared;
|
query = artist+' '+track_prepared;
|
||||||
if @qr[query]?
|
if url = _vkontakte.getQR query
|
||||||
callback @qr[query]
|
callback url
|
||||||
else
|
else
|
||||||
VK.Api.call 'audio.search', q: query, (r) ->
|
VK.Api.call 'audio.search', q: query, (r) ->
|
||||||
url = this.matchPerfectResult r.response, artist, track, duration
|
r.response.splice 0, 1
|
||||||
@qr[query] = url;
|
url = _vkontakte.matchPerfectResult r.response, artist, track, duration
|
||||||
|
_vkontakte.addQR query, url
|
||||||
callback url
|
callback url
|
||||||
|
|
||||||
matchPerfectResult: (data, artist, track, duration) ->
|
matchPerfectResult: (data, artist, track, duration) ->
|
||||||
|
@ -85,8 +88,16 @@ class Vkontakte
|
||||||
|
|
||||||
return best_result.url
|
return best_result.url
|
||||||
|
|
||||||
|
addQR: (query, url) ->
|
||||||
|
@qr[query] = url;
|
||||||
|
|
||||||
|
getQR: (query) ->
|
||||||
|
if @qr[query]?
|
||||||
|
@qr[query]
|
||||||
|
false
|
||||||
|
|
||||||
$ ->
|
$ ->
|
||||||
$('#vk_login').click ->
|
$('#vk_login').click ->
|
||||||
VK.Auth.login vkontakte.authInfo, 8
|
VK.Auth.login _vkontakte.authInfo(), 8
|
||||||
$('#vk_logout').click ->
|
$('#vk_logout').click ->
|
||||||
VK.Auth.logout vkontakte.authInfo
|
VK.Auth.logout _vkontakte.authInfo()
|
||||||
|
|
|
@ -38,7 +38,7 @@ class ArtistController < ApplicationController
|
||||||
render :json => {status: 'corrected', page: results[0][:name]}
|
render :json => {status: 'corrected', page: results[0][:name]}
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
render :json => {status: 'suggestions', values: results}
|
render :json => {status: 'suggestions', values: results.take(5)}
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,10 @@
|
||||||
<%= javascript_include_tag "jquery/jquery.contentchange.js" %>
|
<%= javascript_include_tag "jquery/jquery.contentchange.js" %>
|
||||||
<%= javascript_include_tag "jquery/jquery.jplayer.js" %>
|
<%= javascript_include_tag "jquery/jquery.jplayer.js" %>
|
||||||
<%= javascript_include_tag "jquery/jquery.scroll.js" %>
|
<%= javascript_include_tag "jquery/jquery.scroll.js" %>
|
||||||
|
<%= javascript_include_tag "coffee/beathaven.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
|
<%= javascript_include_tag "coffee/vkontakte.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
|
<%= javascript_include_tag "coffee/session.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
|
<%= javascript_include_tag "coffee/ajax.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
<%= javascript_include_tag "coffee/player.js", :type => "text/javascript", :charset => "utf-8" %>
|
<%= javascript_include_tag "coffee/player.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
<%= javascript_include_tag "coffee/search.js", :type => "text/javascript", :charset => "utf-8" %>
|
<%= javascript_include_tag "coffee/search.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
<%= javascript_include_tag "coffee/pages.js", :type => "text/javascript", :charset => "utf-8" %>
|
<%= javascript_include_tag "coffee/pages.js", :type => "text/javascript", :charset => "utf-8" %>
|
||||||
|
@ -63,7 +66,6 @@
|
||||||
<li class="search">Search</li>
|
<li class="search">Search</li>
|
||||||
<li><a href="https://twitter.com/#!/beat_haven" target="_blank">News</a></li>
|
<li><a href="https://twitter.com/#!/beat_haven" target="_blank">News</a></li>
|
||||||
<li class="vk_auth" id="vk_login">Login</li>
|
<li class="vk_auth" id="vk_login">Login</li>
|
||||||
<li class="vk_auth" id="vk_logout">Logout</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="data-container" class="css-scrollbar">
|
<div class="data-container" class="css-scrollbar">
|
||||||
|
|
|
@ -15,7 +15,7 @@ Barista.configure do |c|
|
||||||
# c.register :tests, :root => Rails.root.join('test', 'coffeescript'), :output_prefix => 'test'
|
# c.register :tests, :root => Rails.root.join('test', 'coffeescript'), :output_prefix => 'test'
|
||||||
|
|
||||||
# Disable wrapping in a closure:
|
# Disable wrapping in a closure:
|
||||||
# c.bare = true
|
c.bare = true
|
||||||
# ... or ...
|
# ... or ...
|
||||||
# c.bare!
|
# c.bare!
|
||||||
|
|
||||||
|
|
|
@ -1,55 +1,54 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:43:40 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/ajax.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Ajax;
|
var Ajax;
|
||||||
Ajax = (function() {
|
Ajax = (function() {
|
||||||
function Ajax() {}
|
function Ajax() {}
|
||||||
Ajax.prototype.referer = false;
|
Ajax.prototype.referer = false;
|
||||||
Ajax.prototype.loadArtistData = function(name) {
|
Ajax.prototype.loadArtistData = function(name) {
|
||||||
search.showSpinner();
|
_search.showSpinner();
|
||||||
name = name.split(' ').join('+');
|
name = name.split(' ').join('+');
|
||||||
return $.get('/artist/' + name + '/', function(data) {
|
$.get('/artist/' + name + '/', function(data) {
|
||||||
if (data.status != null) {
|
if (data.status != null) {
|
||||||
if (data.status === 'loading') {
|
if (data.status === 'loading') {
|
||||||
search.showArtistPics(data.pics);
|
_search.showArtistPics(data.pics);
|
||||||
return setTimeout(function() {
|
return setTimeout(function() {
|
||||||
return this.loadArtistData(name);
|
return _ajax.loadArtistData(name);
|
||||||
}, 3000);
|
}, 3000);
|
||||||
} else if (data.status === 'corrected') {
|
} else if (data.status === 'corrected') {
|
||||||
return ajax.loadArtistData(data.page);
|
return _ajax.loadArtistData(data.page);
|
||||||
} else if (data.status === 'suggestions') {
|
} else if (data.status === 'suggestions') {
|
||||||
search.hideSpinner();
|
_search.hideSpinner();
|
||||||
return search.showSuggestions(data.values);
|
return _search.showSuggestions(data.values);
|
||||||
} else if (data.status === 'loading_failed') {
|
} else if (data.status === 'loading_failed') {
|
||||||
search.hideSpinner();
|
_search.hideSpinner();
|
||||||
return search.showError();
|
return _search.showError();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.setArchor('/artist/' + name + '/');
|
_ajax.setArchor('/artist/' + name + '/');
|
||||||
pages.renderArtist(data);
|
_pages.renderArtist(data);
|
||||||
return beathaven.redrawScrollbar();
|
return _beathaven.redrawScrollbar();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
Ajax.prototype.loadSearchPage = function() {
|
Ajax.prototype.loadSearchPage = function() {
|
||||||
return $.get('/templates/search.html', function(data) {
|
$.get('/templates/search.html', function(data) {
|
||||||
this.setArchor('/search/');
|
_ajax.setArchor('/search/');
|
||||||
return pages.renderSearch(data);
|
return _pages.renderSearch(data);
|
||||||
});
|
});
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
Ajax.prototype.loadSettingsPage = function() {
|
Ajax.prototype.loadSettingsPage = function() {
|
||||||
return $.get('/templates/settings.html', function(data) {
|
$.get('/templates/settings.html', function(data) {
|
||||||
this.setArchor('/settings/');
|
_ajax.setArchor('/settings/');
|
||||||
return pages.renderSettings(data);
|
return _pages.renderSettings(data);
|
||||||
});
|
});
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
Ajax.prototype.load404Page = function() {
|
Ajax.prototype.load404Page = function() {
|
||||||
return $.get('/404.html', function(data) {
|
$.get('/404.html', function(data) {
|
||||||
$('.data-container .inner').html(data);
|
$('.data-container .inner').html(data);
|
||||||
return beathaven.redrawScrollbar();
|
return _beathaven.redrawScrollbar();
|
||||||
});
|
});
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
Ajax.prototype.setArchor = function(anchor) {
|
Ajax.prototype.setArchor = function(anchor) {
|
||||||
this.referer = this.getAnchor();
|
this.referer = this.getAnchor();
|
||||||
|
@ -61,27 +60,30 @@
|
||||||
Ajax.prototype.setTitle = function(title) {
|
Ajax.prototype.setTitle = function(title) {
|
||||||
return document.title = title + ' @ BeatHaven';
|
return document.title = title + ' @ BeatHaven';
|
||||||
};
|
};
|
||||||
|
Ajax.prototype.go = function(url) {
|
||||||
|
this.setArchor(url);
|
||||||
|
return false;
|
||||||
|
};
|
||||||
Ajax.prototype.detectPage = function() {
|
Ajax.prototype.detectPage = function() {
|
||||||
var m;
|
var m;
|
||||||
if (m = this.getAnchor().match(/\/artist\/(.+)\//)) {
|
if (m = _ajax.getAnchor().match(/\/artist\/(.+)\//)) {
|
||||||
return this.loadArtistData(m[1]);
|
_ajax.loadArtistData(m[1]);
|
||||||
} else if (this.getAnchor() === '' || Ajax.getAnchor().match(/\/search\//)) {
|
} else if (_ajax.getAnchor() === '' || _ajax.getAnchor().match(/\/search\//)) {
|
||||||
return this.loadSearchPage();
|
_ajax.loadSearchPage();
|
||||||
} else if (this.getAnchor().match(/\/settings\//)) {
|
} else if (_ajax.getAnchor().match(/\/settings\//)) {
|
||||||
return this.loadSearchPage();
|
_ajax.loadSettingsPage();
|
||||||
} else {
|
} else {
|
||||||
return this.load404Page();
|
_ajax.loadSearchPage();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
return Ajax;
|
return Ajax;
|
||||||
})();
|
})();
|
||||||
$(function() {
|
|
||||||
$('a.data.artist').live('click', function() {
|
$('a.data.artist').live('click', function() {
|
||||||
ajax.loadArtistData($(this).html());
|
_ajax.loadArtistData($(this).html());
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
return $(window).bind('hashchange', function() {
|
$(window).bind('hashchange', function() {
|
||||||
return ajax.detectPage();
|
_ajax.detectPage();
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,39 +1,42 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:49:39 GMT from
|
var BeatHaven, _ajax, _beathaven, _pages, _player, _search, _session, _settings, _vkontakte;
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/beathaven.coffee
|
_beathaven = null;
|
||||||
*/
|
_session = 1;
|
||||||
|
_vkontakte = null;
|
||||||
(function() {
|
_ajax = null;
|
||||||
var BeatHaven;
|
_player = null;
|
||||||
|
_search = null;
|
||||||
|
_pages = null;
|
||||||
|
_settings = null;
|
||||||
$(function() {
|
$(function() {
|
||||||
var ajax, beathaven, l, pages, player, search, session, settings, vkontakte, _ref;
|
var l, _ref;
|
||||||
l = document.location;
|
l = document.location;
|
||||||
if ((_ref = l.host) !== 'beathaven.org' && _ref !== 'localhost') {
|
if ((_ref = l.host) !== 'beathaven.org' && _ref !== 'localhost') {
|
||||||
l.href = 'http://beathaven.org/' + l.hash;
|
l.href = 'http://beathaven.org/' + l.hash;
|
||||||
}
|
}
|
||||||
beathaven = new BeatHaven();
|
_beathaven = new BeatHaven();
|
||||||
vkontakte = new Vkontakte(l.host === 'beathaven.org' ? 2335068 : 2383163);
|
_beathaven.init();
|
||||||
session = new Session();
|
|
||||||
ajax = new Ajax();
|
|
||||||
player = new Player();
|
|
||||||
search = new Search();
|
|
||||||
pages = new Pages();
|
|
||||||
settings = new Settings();
|
|
||||||
beathaven.init();
|
|
||||||
vkontakte.init();
|
|
||||||
$(window).resize(function() {
|
$(window).resize(function() {
|
||||||
return beathaven.adjustSizes();
|
return _beathaven.adjustSizes();
|
||||||
});
|
});
|
||||||
return window.setTimeout(function() {
|
return window.setTimeout(function() {
|
||||||
return beathaven.checkRedrawScrollbar();
|
return _beathaven.checkRedrawScrollbar();
|
||||||
}, 500);
|
}, 500);
|
||||||
});
|
});
|
||||||
BeatHaven = (function() {
|
BeatHaven = (function() {
|
||||||
function BeatHaven() {}
|
function BeatHaven() {}
|
||||||
BeatHaven.prototype.last_height = false;
|
BeatHaven.prototype.last_height = false;
|
||||||
BeatHaven.prototype.init = function() {
|
BeatHaven.prototype.init = function() {
|
||||||
this.drawInterface();
|
|
||||||
this.adjustSizes();
|
this.adjustSizes();
|
||||||
return ajax.detectPage();
|
this.checkRedrawScrollbar();
|
||||||
|
_vkontakte = new Vkontakte(document.location.host === 'beathaven.org' ? 2335068 : 2383163);
|
||||||
|
_vkontakte.init();
|
||||||
|
_ajax = new Ajax();
|
||||||
|
_player = new Player();
|
||||||
|
_player.initJplayer();
|
||||||
|
_search = new Search();
|
||||||
|
_pages = new Pages();
|
||||||
|
_settings = new Settings();
|
||||||
|
return _ajax.detectPage();
|
||||||
};
|
};
|
||||||
BeatHaven.prototype.adjustSizes = function() {
|
BeatHaven.prototype.adjustSizes = function() {
|
||||||
$('.data-container').height($(window).height() - $('.header-container').height());
|
$('.data-container').height($(window).height() - $('.header-container').height());
|
||||||
|
@ -59,7 +62,7 @@
|
||||||
focused_id = false;
|
focused_id = false;
|
||||||
}
|
}
|
||||||
return window.setTimeout(function() {
|
return window.setTimeout(function() {
|
||||||
return beathaven.checkRedrawScrollbar();
|
return _beathaven.checkRedrawScrollbar();
|
||||||
}, 500);
|
}, 500);
|
||||||
};
|
};
|
||||||
BeatHaven.prototype.redrawScrollbar = function() {
|
BeatHaven.prototype.redrawScrollbar = function() {
|
||||||
|
@ -92,4 +95,3 @@
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
};
|
};
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:49:39 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/pages.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Pages;
|
var Pages;
|
||||||
Pages = (function() {
|
Pages = (function() {
|
||||||
function Pages() {}
|
function Pages() {}
|
||||||
|
@ -55,8 +50,9 @@
|
||||||
backgroundImage: 'none'
|
backgroundImage: 'none'
|
||||||
});
|
});
|
||||||
$('.data-container .inner').html('').append(artist_info).append(albums_info);
|
$('.data-container .inner').html('').append(artist_info).append(albums_info);
|
||||||
yaCounter7596904.hit(ajax.getAnchor(), data.artist.name, ajax.referer);
|
yaCounter7596904.hit(_ajax.getAnchor(), data.artist.name, _ajax.referer);
|
||||||
return ajax.setTitle(data.artist.name);
|
_ajax.setTitle(data.artist.name);
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
Pages.prototype.renderSearch = function(data) {
|
Pages.prototype.renderSearch = function(data) {
|
||||||
$('.data-container').css({
|
$('.data-container').css({
|
||||||
|
@ -74,23 +70,24 @@
|
||||||
zIndex: 9999,
|
zIndex: 9999,
|
||||||
deferRequestBy: 500,
|
deferRequestBy: 500,
|
||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
return ajax.loadArtistData();
|
return _ajax.loadArtistData($('#search_field').val());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return $('#search_field').focus();
|
return $('#search_field').focus();
|
||||||
}, 501);
|
}, 501);
|
||||||
yaCounter7596904.hit(ajax.getAnchor(), 'Artist Search', ajax.referer);
|
yaCounter7596904.hit(_ajax.getAnchor(), 'Artist Search', _ajax.referer);
|
||||||
return ajax.setTitle('Artist Search');
|
_ajax.setTitle('Artist Search');
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
Pages.prototype.renderSettings = function(data) {
|
Pages.prototype.renderSettings = function(data) {
|
||||||
$('.data-container').css({
|
$('.data-container').css({
|
||||||
background: 'none'
|
background: 'none'
|
||||||
});
|
});
|
||||||
$('.data-container .inner').html(data);
|
$('.data-container .inner').html(data);
|
||||||
yaCounter7596904.hit(ajax.getAnchor(), 'Settings', ajax.referer);
|
yaCounter7596904.hit(_ajax.getAnchor(), 'Settings', _ajax.referer);
|
||||||
ajax.setTitle('Settings');
|
_ajax.setTitle('Settings');
|
||||||
return $('.settings-container .tabs .tab').first().trigger('click');
|
$('.settings-container .tabs .tab').first().trigger('click');
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
return Pages;
|
return Pages;
|
||||||
})();
|
})();
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:49:39 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/player.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Player;
|
var Player;
|
||||||
Player = (function() {
|
Player = (function() {
|
||||||
function Player() {}
|
function Player() {}
|
||||||
|
@ -18,8 +13,8 @@
|
||||||
supplied: "mp3",
|
supplied: "mp3",
|
||||||
cssSelectorAncestor: "",
|
cssSelectorAncestor: "",
|
||||||
cssSelector: {
|
cssSelector: {
|
||||||
play: "#player .play",
|
play: ".player .play",
|
||||||
pause: "#player .pause",
|
pause: ".player .pause",
|
||||||
stop: "",
|
stop: "",
|
||||||
videoPlay: "",
|
videoPlay: "",
|
||||||
seekBar: "",
|
seekBar: "",
|
||||||
|
@ -35,21 +30,21 @@
|
||||||
this.jp.bind($.jPlayer.event.timeupdate, function(e) {
|
this.jp.bind($.jPlayer.event.timeupdate, function(e) {
|
||||||
var $obj, data;
|
var $obj, data;
|
||||||
data = e.jPlayer.status;
|
data = e.jPlayer.status;
|
||||||
if (!Player.scrobbled && data.currentPercentAbsolute > 50) {
|
if (!_player.scrobbled && data.currentPercentAbsolute > 50) {
|
||||||
$obj = $('.playlist-tracks li.now');
|
$obj = $('.playlist-tracks li.now');
|
||||||
self.scrobble($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track'));
|
self.scrobble($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track'));
|
||||||
Player.scrobbled = true;
|
_player.scrobbled = true;
|
||||||
}
|
}
|
||||||
$('#player .progress .loaded').width(data.seekPercent * self.bar_width / 100);
|
$('.player .progress .loaded').width(data.seekPercent * self.bar_width / 100);
|
||||||
return $('#player .progress .played').width(data.currentPercentAbsolute * self.bar_width / 100);
|
return $('.player .progress .played').width(data.currentPercentAbsolute * self.bar_width / 100);
|
||||||
});
|
});
|
||||||
this.jp.bind($.jPlayer.event.ended, function(e) {
|
this.jp.bind($.jPlayer.event.ended, function(e) {
|
||||||
var next;
|
var next;
|
||||||
next = self.nextTrack();
|
next = self.nextTrack();
|
||||||
if (!next) {
|
if (!next) {
|
||||||
$('#jplayer').jPlayer('clearMedia');
|
$('#jplayer').jPlayer('clearMedia');
|
||||||
$('#player .now-playing').html('Nothing left to <strike>lose</strike> play');
|
$('.player .now-playing').html('Nothing left to <strike>lose</strike> play');
|
||||||
$('#player .loaded, #player .played').width(0);
|
$('.player .loaded, .player .played').width(0);
|
||||||
return $('.playlist-tracks li').removeClass('now');
|
return $('.playlist-tracks li').removeClass('now');
|
||||||
} else {
|
} else {
|
||||||
return self.setTrack(next);
|
return self.setTrack(next);
|
||||||
|
@ -67,29 +62,29 @@
|
||||||
<li id="i' + Math.round(Math.random() * 999999) + '" data-artist="' + artist.trim() + '" data-album="' + album.trim() + '" data-track="' + track.trim() + '" data-length="' + length + '">\
|
<li id="i' + Math.round(Math.random() * 999999) + '" data-artist="' + artist.trim() + '" data-album="' + album.trim() + '" data-track="' + track.trim() + '" data-length="' + length + '">\
|
||||||
<div class="item">\
|
<div class="item">\
|
||||||
<div class="fade"></div>\
|
<div class="fade"></div>\
|
||||||
<span class="title" title="' + artist.htmlsafe() + ' &mdash ' + track.htmlsafe() + '">' + artist + ' &mdash ' + track + '</span>\
|
<span class="title" title="' + artist.htmlsafe() + " — " + track.htmlsafe() + '">' + artist + ' — ' + track + '</span>\
|
||||||
<span class="duration">' + length + '</span>\
|
<span class="duration">' + length + '</span>\
|
||||||
<div class="remove">remove</div>\
|
<div class="remove">remove</div>\
|
||||||
</div>\
|
</div>\
|
||||||
</li>');
|
</li>');
|
||||||
$('#playlist').html($('.playlist-tracks')).scrollbar();
|
$('.playlist').html($('.playlist-tracks')).scrollbar();
|
||||||
$('.playlist-tracks').sortable();
|
$('.playlist-tracks').sortable();
|
||||||
if (autoplay) {
|
if (autoplay) {
|
||||||
return Player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1]);
|
return _player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1]);
|
||||||
} else if (initial_count === 0 && !Player.hasTrack()) {
|
} else if (initial_count === 0 && !_player.hasTrack()) {
|
||||||
return Player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]);
|
return _player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Player.prototype.setTrack = function(id) {
|
Player.prototype.setTrack = function(id) {
|
||||||
var $obj, query;
|
var $obj, query;
|
||||||
$obj = $('#i' + id);
|
$obj = $('#i' + id);
|
||||||
query = $obj.attr('data-artist') + ' &mdash ' + $obj.attr('data-track');
|
query = $obj.attr('data-artist') + ' — ' + $obj.attr('data-track');
|
||||||
$('#player .now-playing').html(query + '<div class="fade"></div>');
|
$('.player .now-playing').html(query + '<div class="fade"></div>');
|
||||||
$('.playlist-tracks li').removeClass('now');
|
$('.playlist-tracks li').removeClass('now');
|
||||||
$obj.addClass('now');
|
$obj.addClass('now');
|
||||||
$('#player .loaded, #player .played').width(0);
|
$('.player .loaded, .player .played').width(0);
|
||||||
vkontakte.loadTracksData($obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), function() {
|
_vkontakte.loadTracksData($obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), function(url) {
|
||||||
return player.playSource();
|
return _player.playSource(url);
|
||||||
});
|
});
|
||||||
return this.updateNowListening($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track'));
|
return this.updateNowListening($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track'));
|
||||||
};
|
};
|
||||||
|
@ -115,7 +110,7 @@
|
||||||
cnt = $('.playlist-tracks li').length;
|
cnt = $('.playlist-tracks li').length;
|
||||||
if (!this.onShuffle()) {
|
if (!this.onShuffle()) {
|
||||||
if ($('.playlist-tracks .now').next().length === 0) {
|
if ($('.playlist-tracks .now').next().length === 0) {
|
||||||
if (Player.onRepeat() || manual) {
|
if (_player.onRepeat() || manual) {
|
||||||
return $('.playlist-tracks li').first().attr('id').split('i')[1];
|
return $('.playlist-tracks li').first().attr('id').split('i')[1];
|
||||||
} else {
|
} else {
|
||||||
false;
|
false;
|
||||||
|
@ -139,7 +134,7 @@
|
||||||
Player.prototype.prevTrack = function() {
|
Player.prototype.prevTrack = function() {
|
||||||
var $li, cnt, rnd;
|
var $li, cnt, rnd;
|
||||||
cnt = $('.playlist-tracks li').length;
|
cnt = $('.playlist-tracks li').length;
|
||||||
if (!Player.onShuffle()) {
|
if (!_player.onShuffle()) {
|
||||||
if ($('.playlist-tracks .now').prev().length === 0) {
|
if ($('.playlist-tracks .now').prev().length === 0) {
|
||||||
return $('.playlist-tracks li').last().attr('id').split('i')[1];
|
return $('.playlist-tracks li').last().attr('id').split('i')[1];
|
||||||
} else {
|
} else {
|
||||||
|
@ -165,8 +160,8 @@
|
||||||
return $('#repeat').hasClass('active');
|
return $('#repeat').hasClass('active');
|
||||||
};
|
};
|
||||||
Player.prototype.updateNowListening = function(artist, album, track) {
|
Player.prototype.updateNowListening = function(artist, album, track) {
|
||||||
if (session.user.lastfm_username) {
|
if (_session.getUser().lastfm_username) {
|
||||||
return session.query('/lastfm/listening?r=' + Math.random(), {
|
return _session.query('/lastfm/listening?r=' + Math.random(), {
|
||||||
artist: artist,
|
artist: artist,
|
||||||
album: album,
|
album: album,
|
||||||
track: track
|
track: track
|
||||||
|
@ -174,8 +169,8 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Player.prototype.scrobble = function(artist, album, track) {
|
Player.prototype.scrobble = function(artist, album, track) {
|
||||||
if (session.user.lastfm_username) {
|
if (_session.getUser().lastfm_username) {
|
||||||
return session.query('/lastfm/scrobble?r=' + Math.random(), {
|
return _session.query('/lastfm/scrobble?r=' + Math.random(), {
|
||||||
artist: artist,
|
artist: artist,
|
||||||
album: album,
|
album: album,
|
||||||
track: track
|
track: track
|
||||||
|
@ -184,25 +179,22 @@
|
||||||
};
|
};
|
||||||
return Player;
|
return Player;
|
||||||
})();
|
})();
|
||||||
$(function() {
|
$('.player .controls .prev').live('click', function() {
|
||||||
return player.initJplayer();
|
_player.setTrack(_player.prevTrack());
|
||||||
});
|
|
||||||
$('#player .controls .prev').live('click', function() {
|
|
||||||
Player.setTrack(Player.prevTrack());
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#player .controls .next').live('click', function() {
|
$('.player .controls .next').live('click', function() {
|
||||||
Player.setTrack(Player.nextTrack(true));
|
_player.setTrack(_player.nextTrack(true));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#player .play').live('click', function() {
|
$('.player .play').live('click', function() {
|
||||||
if ($('.playlist-tracks li').length > 0 && !Player.hasTrack()) {
|
if ($('.playlist-tracks li').length > 0 && !_player.hasTrack()) {
|
||||||
player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]);
|
_player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#player .progress').live('click', function(e) {
|
$('.player .progress').live('click', function(e) {
|
||||||
$('#jplayer').jPlayer('playHead', Math.round((e.offsetX / Player.bar_width) * 100));
|
$('#jplayer').jPlayer('playHead', Math.round((e.offsetX / _player.bar_width) * 100));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#repeat, #shuffle').live('click', function() {
|
$('#repeat, #shuffle').live('click', function() {
|
||||||
|
@ -213,8 +205,8 @@
|
||||||
if (confirm('Are you sure?')) {
|
if (confirm('Are you sure?')) {
|
||||||
$('.playlist-tracks li').remove();
|
$('.playlist-tracks li').remove();
|
||||||
$('#jplayer').jPlayer('clearMedia');
|
$('#jplayer').jPlayer('clearMedia');
|
||||||
$('#player .now-playing').text('Add some music to playlist');
|
$('.player .now-playing').text('Add some music to playlist');
|
||||||
$('#player .loaded, #player .played').width(0);
|
$('.player .loaded, .player .played').width(0);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
@ -233,14 +225,14 @@
|
||||||
$li = $(this).parent().parent();
|
$li = $(this).parent().parent();
|
||||||
if ($li.hasClass('now')) {
|
if ($li.hasClass('now')) {
|
||||||
$('#jplayer').jPlayer('clearMedia');
|
$('#jplayer').jPlayer('clearMedia');
|
||||||
$('#player .now-playing').text('...');
|
$('.player .now-playing').text('...');
|
||||||
$('#player .loaded, #player .played').width(0);
|
$('.player .loaded, .player .played').width(0);
|
||||||
}
|
}
|
||||||
$li.remove();
|
$li.remove();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('.playlist-tracks li').live('dblclick', function() {
|
$('.playlist-tracks li').live('dblclick', function() {
|
||||||
player.setTrack($(this).attr('id').split('i')[1]);
|
_player.setTrack($(this).attr('id').split('i')[1]);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('.add-album').live('click', function() {
|
$('.add-album').live('click', function() {
|
||||||
|
@ -252,7 +244,7 @@
|
||||||
item = _ref[_i];
|
item = _ref[_i];
|
||||||
track_name = $(item).find('.trackname').html();
|
track_name = $(item).find('.trackname').html();
|
||||||
length = $(item).find('.length').html();
|
length = $(item).find('.length').html();
|
||||||
Player.addTrack(artist, album, track_name, length);
|
_player.addTrack(artist, album, track_name, length);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
@ -262,7 +254,7 @@
|
||||||
album = $(this).parent().parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, '');
|
album = $(this).parent().parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, '');
|
||||||
track_name = $(this).parent().find('.trackname').html();
|
track_name = $(this).parent().find('.trackname').html();
|
||||||
length = $(this).parent().find('.length').html();
|
length = $(this).parent().find('.length').html();
|
||||||
Player.addTrack(artist, album, track_name, length);
|
_player.addTrack(artist, album, track_name, length);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('.tracklist li').live('mouseover mouseout', function(e) {
|
$('.tracklist li').live('mouseover mouseout', function(e) {
|
||||||
|
@ -279,7 +271,6 @@
|
||||||
album = $(this).parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, '');
|
album = $(this).parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, '');
|
||||||
track_name = $(this).find('.trackname').html();
|
track_name = $(this).find('.trackname').html();
|
||||||
length = $(this).find('.length').html();
|
length = $(this).find('.length').html();
|
||||||
Player.addTrack(artist, album, track_name, length, true);
|
_player.addTrack(artist, album, track_name, length, true);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:49:39 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/search.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Search;
|
var Search;
|
||||||
Search = (function() {
|
Search = (function() {
|
||||||
function Search() {}
|
function Search() {}
|
||||||
|
@ -30,7 +25,7 @@
|
||||||
$('.suggestions ul').append('\
|
$('.suggestions ul').append('\
|
||||||
<li>\
|
<li>\
|
||||||
<a class="data artist">' + item.name + '</a>\
|
<a class="data artist">' + item.name + '</a>\
|
||||||
' + (item.desc ? '<br/><span>' + item.desc(+'</span>') : '') + '\
|
' + (item.desc != null ? '<br/><span>' + item.desc + '</span>' : '') + '\
|
||||||
</li>');
|
</li>');
|
||||||
}
|
}
|
||||||
$('.suggestions').show();
|
$('.suggestions').show();
|
||||||
|
@ -63,19 +58,16 @@
|
||||||
};
|
};
|
||||||
return Search;
|
return Search;
|
||||||
})();
|
})();
|
||||||
$(function() {
|
|
||||||
$('.search').live('click', function() {
|
$('.search').live('click', function() {
|
||||||
ajax.loadSearchPage();
|
_ajax.go('/search/');
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#search_form').live('submit', function() {
|
$('#search_form').live('submit', function() {
|
||||||
$('.autocomplete-container').remove();
|
$('.autocomplete-container').remove();
|
||||||
ajax.loadArtistData($('#search_field').val());
|
_ajax.loadArtistData($('#search_field').val());
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
return $('.suggestions a').live('click', function() {
|
$('.suggestions a').live('click', function() {
|
||||||
$('#search_field').val($(this).text());
|
$('#search_field').val($(this).text());
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,15 +1,27 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:49:39 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/session.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Session;
|
var Session;
|
||||||
Session = (function() {
|
Session = (function() {
|
||||||
Session.prototype.vk_params = null;
|
Session.prototype.vk_params = null;
|
||||||
Session.prototype.user = null;
|
Session.prototype.user = null;
|
||||||
function Session(vk_params) {
|
function Session(params) {
|
||||||
this.vk_params = vk_params;
|
var attrs, key, _i, _len, _params;
|
||||||
|
attrs = ['expire', 'mid', 'secret', 'sid', 'sig'];
|
||||||
|
_params = {};
|
||||||
|
for (_i = 0, _len = attrs.length; _i < _len; _i++) {
|
||||||
|
key = attrs[_i];
|
||||||
|
if (params[key] != null) {
|
||||||
|
_params[key] = params[key];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
this.vk_params = _params;
|
||||||
|
false;
|
||||||
|
}
|
||||||
|
Session.prototype.setUser = function(user) {
|
||||||
|
this.user = user;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
Session.prototype.getUser = function() {
|
||||||
|
return this.user;
|
||||||
|
};
|
||||||
Session.prototype.query = function(url, params, callback) {
|
Session.prototype.query = function(url, params, callback) {
|
||||||
var attr, q_params, _i, _len;
|
var attr, q_params, _i, _len;
|
||||||
q_params = this.vk_params;
|
q_params = this.vk_params;
|
||||||
|
@ -20,15 +32,5 @@
|
||||||
$.post(url, q_params, callback);
|
$.post(url, q_params, callback);
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
Session.prototype.setVkParams = function(params) {
|
|
||||||
var attrs, key, _i, _len;
|
|
||||||
attrs = ['expire', 'mid', 'secret', 'sid', 'sig'];
|
|
||||||
for (_i = 0, _len = attrs.length; _i < _len; _i++) {
|
|
||||||
key = attrs[_i];
|
|
||||||
this.vk_params[key] = params[key];
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
return Session;
|
return Session;
|
||||||
})();
|
})();
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,42 +1,37 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 14:00:02 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/settings.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Settings;
|
var Settings;
|
||||||
Settings = (function() {
|
Settings = (function() {
|
||||||
function Settings() {}
|
function Settings() {}
|
||||||
Settings.prototype.getAccountInfo = function(callback) {
|
Settings.prototype.getAccountInfo = function(callback) {
|
||||||
return session.query('/user/update/', {}, callback);
|
return _session.query('/user/update/', {}, callback);
|
||||||
};
|
};
|
||||||
Settings.prototype.saveAccountInfo = function(params, callback) {
|
Settings.prototype.saveAccountInfo = function(params, callback) {
|
||||||
return session.query('/user/update', params, callback);
|
return _session.query('/user/update', params, callback);
|
||||||
};
|
};
|
||||||
Settings.prototype.loadFormData = function(form) {
|
Settings.prototype.loadFormData = function(form) {
|
||||||
if (form === 'account') {
|
if (form === 'account') {
|
||||||
$('.settings-container .form input[name$="username"]').val(session.user.name);
|
$('.settings-container .form input[name$="username"]').val(_session.getUser().name);
|
||||||
return $('.settings-container .form input[name$="email"]').val(session.email);
|
return $('.settings-container .form input[name$="email"]').val(_session.getUser().email);
|
||||||
} else if (form === 'lastfm') {
|
} else if (form === 'lastfm') {
|
||||||
if (this.user.lastfm_username) {
|
if (_session.getUser().lastfm_username) {
|
||||||
return $('.form-container input[name$="username"]').first().val(session.lastfm_username);
|
return $('.form-container input[name$="username"]').first().val(_session.getUser().lastfm_username);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return Settings;
|
return Settings;
|
||||||
})();
|
})();
|
||||||
$('.settings').live('click', function() {
|
$('.settings').live('click', function() {
|
||||||
return ajax.loadSettingsPage();
|
return _ajax.go('/settings/');
|
||||||
});
|
});
|
||||||
$('.settings-container .tabs .tab').live('click', function() {
|
$('.settings-container .tabs .tab').live('click', function() {
|
||||||
if ($(this).hasClass('active')) {
|
if (!$(this).hasClass('active')) {
|
||||||
$('.settings-container .tabs .tab').removeClass('active');
|
$('.settings-container .tabs .tab').removeClass('active');
|
||||||
$(this).addClass('active');
|
$(this).addClass('active');
|
||||||
$('.form-container').html($('.forms .' + $(this).attr('data-fieldset')).html());
|
$('.form-container').html($('.forms .' + $(this).attr('data-fieldset')).html());
|
||||||
return settings.loadFormData($(this).attr('data-fieldset'));
|
return _settings.loadFormData($(this).attr('data-fieldset'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('.lastfm-connect').live('click', function() {
|
$('.lastfm-connect').live('click', function() {
|
||||||
return window.open(session.user.lastfm_login_url);
|
return window.open(_session.getUser().lastfm_login_url);
|
||||||
});
|
});
|
||||||
$('.settings-container .form input').live('blur', function() {
|
$('.settings-container .form input').live('blur', function() {
|
||||||
var active_tab, params;
|
var active_tab, params;
|
||||||
|
@ -46,9 +41,8 @@
|
||||||
username: $('.settings-container .form input[name$="username"]').first().val(),
|
username: $('.settings-container .form input[name$="username"]').first().val(),
|
||||||
email: $('.settings-container .form input[name$="email"]').first().val()
|
email: $('.settings-container .form input[name$="email"]').first().val()
|
||||||
};
|
};
|
||||||
return settings.saveAccountInfo(params, function() {
|
return _settings.saveAccountInfo(params, function() {
|
||||||
return $('#header-container .hello .greating').text('Hi there, ' + (params.username.length > 0 ? params.username : '%username%') + '!');
|
return $('#header-container .hello .greating').text('Hi there, ' + (params.username.length > 0 ? params.username : '%username%') + '!');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}).call(this);
|
|
||||||
|
|
|
@ -1,24 +1,20 @@
|
||||||
/* DO NOT MODIFY. This file was compiled Mon, 27 Jun 2011 17:49:39 GMT from
|
|
||||||
* /Users/chez/Sites/beathaven/app/coffeescripts/vkontakte.coffee
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var Vkontakte;
|
var Vkontakte;
|
||||||
Vkontakte = (function() {
|
Vkontakte = (function() {
|
||||||
Vkontakte.prototype.qr = [];
|
Vkontakte.prototype.qr = null;
|
||||||
function Vkontakte(api_id) {
|
function Vkontakte(api_id) {
|
||||||
this.api_id = api_id;
|
this.api_id = api_id;
|
||||||
}
|
}
|
||||||
Vkontakte.prototype.init = function() {
|
Vkontakte.prototype.init = function() {
|
||||||
|
this.qr = [];
|
||||||
VK.init({
|
VK.init({
|
||||||
apiId: this.api_id,
|
apiId: this.api_id
|
||||||
nameTransportPath: '/xd_receiver.html'
|
|
||||||
});
|
});
|
||||||
return VK.Auth.getLoginStatus(this.authInfo);
|
return VK.Auth.getLoginStatus(this.authInfo);
|
||||||
};
|
};
|
||||||
Vkontakte.prototype.authInfo = function(response) {
|
Vkontakte.prototype.authInfo = function(response) {
|
||||||
|
var _session;
|
||||||
if (typeof response !== 'undefined' && response.session) {
|
if (typeof response !== 'undefined' && response.session) {
|
||||||
session.setVkParams(response.session);
|
_session = new Session(response.session);
|
||||||
$('#vk_login, .auth_notice').hide();
|
$('#vk_login, .auth_notice').hide();
|
||||||
$('#vk_logout').css({
|
$('#vk_logout').css({
|
||||||
display: 'block'
|
display: 'block'
|
||||||
|
@ -26,43 +22,45 @@
|
||||||
if ($('#search_field').length > 0) {
|
if ($('#search_field').length > 0) {
|
||||||
$('#search_field').focus();
|
$('#search_field').focus();
|
||||||
}
|
}
|
||||||
return session.query('/user/auth', {}, function(ar) {
|
_session.query('/user/auth', {}, function(ar) {
|
||||||
if (ar.newbie) {
|
if (ar.newbie) {
|
||||||
VK.Api.call('getVariable', {
|
VK.Api.call('getVariable', {
|
||||||
key: 1281
|
key: 1281
|
||||||
}, function(r) {
|
}, function(r) {
|
||||||
return Session.query('/user/update', {
|
return _session.query('/user/update', {
|
||||||
name: r.response
|
name: r.response
|
||||||
}, function(ar2) {
|
}, function(ar2) {
|
||||||
session.user = ar2.user;
|
_session.setUser(ar2.user);
|
||||||
return $('#header-container .hello .greating').text('Hi there, ' + (session.user.name ? session.user.name : '%username%') + '!');
|
return $('.header-container .hello .greating').text('Hi there, ' + (_session.getUser().name ? _session.getUser().name : '%username%') + '!');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
session.user = ar.user;
|
_session.setUser(ar.user);
|
||||||
}
|
}
|
||||||
return $('#header-container .hello .greating').text('Hi there, ' + (session.user.name ? session.user.name : '%username%') + '!');
|
return $('.header-container .hello .greating').text('Hi there, ' + (_session.getUser().name ? _session.getUser().name : '%username%') + '!');
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
_session = new Session({});
|
||||||
$('#vk_login, .auth_notice').css({
|
$('#vk_login, .auth_notice').css({
|
||||||
display: 'block'
|
display: 'block'
|
||||||
});
|
});
|
||||||
return $('#vk_logout').hide();
|
$('#vk_logout').hide();
|
||||||
}
|
}
|
||||||
|
return window._session = _session;
|
||||||
};
|
};
|
||||||
Vkontakte.prototype.loadTracksData = function(artist, track, duration, callback) {
|
Vkontakte.prototype.loadTracksData = function(artist, track, duration, callback) {
|
||||||
var query, track_prepared;
|
var query, track_prepared, url;
|
||||||
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
|
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
|
||||||
query = artist(+' ' + track_prepared);
|
query = artist + ' ' + track_prepared;
|
||||||
if (this.qr[query] != null) {
|
if (url = _vkontakte.getQR(query)) {
|
||||||
return callback(this.qr[query]);
|
return callback(url);
|
||||||
} else {
|
} else {
|
||||||
return VK.Api.call('audio.search', {
|
return VK.Api.call('audio.search', {
|
||||||
q: query
|
q: query
|
||||||
}, function(r) {
|
}, function(r) {
|
||||||
var url;
|
r.response.splice(0, 1);
|
||||||
url = this.matchPerfectResult(r.response, artist, track, duration);
|
url = _vkontakte.matchPerfectResult(r.response, artist, track, duration);
|
||||||
this.qr[query] = url;
|
_vkontakte.addQR(query, url);
|
||||||
return callback(url);
|
return callback(url);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -108,14 +106,22 @@
|
||||||
}
|
}
|
||||||
return best_result.url;
|
return best_result.url;
|
||||||
};
|
};
|
||||||
|
Vkontakte.prototype.addQR = function(query, url) {
|
||||||
|
return this.qr[query] = url;
|
||||||
|
};
|
||||||
|
Vkontakte.prototype.getQR = function(query) {
|
||||||
|
if (this.qr[query] != null) {
|
||||||
|
this.qr[query];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
return Vkontakte;
|
return Vkontakte;
|
||||||
})();
|
})();
|
||||||
$(function() {
|
$(function() {
|
||||||
$('#vk_login').click(function() {
|
$('#vk_login').click(function() {
|
||||||
return VK.Auth.login(vkontakte.authInfo, 8);
|
return VK.Auth.login(_vkontakte.authInfo(), 8);
|
||||||
});
|
});
|
||||||
return $('#vk_logout').click(function() {
|
return $('#vk_logout').click(function() {
|
||||||
return VK.Auth.logout(vkontakte.authInfo);
|
return VK.Auth.logout(_vkontakte.authInfo());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}).call(this);
|
|
||||||
|
|
Loading…
Reference in New Issue