diff --git a/Gemfile.lock b/Gemfile.lock index 0cafa1b..177a08a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -120,6 +120,9 @@ GEM polyglot polyglot (>= 0.3.1) tzinfo (0.3.29) + uglifier (1.0.3) + execjs (>= 0.3.0) + multi_json (>= 1.0.2) xml-simple (1.1.0) PLATFORMS @@ -138,3 +141,4 @@ DEPENDENCIES sass sqlite3 therubyracer + uglifier diff --git a/public/javascripts/Jplayer.swf b/app/assets/javascripts/Jplayer.swf similarity index 100% rename from public/javascripts/Jplayer.swf rename to app/assets/javascripts/Jplayer.swf diff --git a/app/coffeescripts/ajax.coffee b/app/assets/javascripts/ajax.coffee similarity index 99% rename from app/coffeescripts/ajax.coffee rename to app/assets/javascripts/ajax.coffee index ebd9fad..5c3d52e 100644 --- a/app/coffeescripts/ajax.coffee +++ b/app/assets/javascripts/ajax.coffee @@ -1,4 +1,4 @@ -class Ajax +class window.Ajax referer: false diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 0000000..25f3d00 --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,14 @@ +//= require jquery/jquery.autocomplete +//= require jquery/jquery.jplayer +//= require jquery/jquery.scroll + +//= require locale +//= require vkontakte +//= require session +//= require ajax +//= require player +//= require search +//= require pages +//= require settings + +//= require beathaven \ No newline at end of file diff --git a/app/coffeescripts/beathaven.coffee b/app/assets/javascripts/beathaven.coffee similarity index 81% rename from app/coffeescripts/beathaven.coffee rename to app/assets/javascripts/beathaven.coffee index 7d7c47e..90b3fc0 100644 --- a/app/coffeescripts/beathaven.coffee +++ b/app/assets/javascripts/beathaven.coffee @@ -1,27 +1,27 @@ # Registering global objects -_beathaven = null -_session = 1 -_vkontakte = null -_ajax = null -_player = null -_search = null -_pages = null -_settings = null +window._beathaven = null +window._session = 1 +window._vkontakte = null +window._ajax = null +window._player = null +window._search = null +window._pages = null +window._settings = null $ -> l = document.location - if l.host not in ['beathaven.org', 'dev.beathaven.org'] + if l.hostname not in ['beathaven.org', 'dev.beathaven.org'] l.href = 'http://beathaven.org/'+ l.hash - _beathaven = new BeatHaven() - _beathaven.init() + window._beathaven = new BeatHaven() + window._beathaven.init() $(window).resize -> _beathaven.adjustSizes() _beathaven.redrawScrollbar() false window.setTimeout -> - _beathaven.checkRedrawScrollbar() + window._beathaven.checkRedrawScrollbar() false , 500 @@ -35,19 +35,19 @@ class BeatHaven this.checkRedrawScrollbar() # if document.location.host == 'beathaven.org' then 2335068 else 2383163 - _vkontakte = new Vkontakte(2335068) - _vkontakte.init() + window._vkontakte = new Vkontakte(2335068) + window._vkontakte.init() - _ajax = new Ajax() + window._ajax = new Ajax() - _player = new Player() - _player.initJplayer() + window._player = new Player() + window._player.initJplayer() - _search = new Search() + window._search = new Search() - _pages = new Pages() + window._pages = new Pages() - _settings = new Settings() + window._settings = new Settings() false diff --git a/public/javascripts/jquery/jquery.autocomplete.js b/app/assets/javascripts/jquery/jquery.autocomplete.js similarity index 100% rename from public/javascripts/jquery/jquery.autocomplete.js rename to app/assets/javascripts/jquery/jquery.autocomplete.js diff --git a/public/javascripts/jquery/jquery.jplayer.js b/app/assets/javascripts/jquery/jquery.jplayer.js similarity index 100% rename from public/javascripts/jquery/jquery.jplayer.js rename to app/assets/javascripts/jquery/jquery.jplayer.js diff --git a/public/javascripts/jquery/jquery.scroll.js b/app/assets/javascripts/jquery/jquery.scroll.js similarity index 100% rename from public/javascripts/jquery/jquery.scroll.js rename to app/assets/javascripts/jquery/jquery.scroll.js diff --git a/app/coffeescripts/locale.coffee b/app/assets/javascripts/locale.coffee similarity index 99% rename from app/coffeescripts/locale.coffee rename to app/assets/javascripts/locale.coffee index e78d376..d4c8ac1 100644 --- a/app/coffeescripts/locale.coffee +++ b/app/assets/javascripts/locale.coffee @@ -1,4 +1,4 @@ -_locale = +window._locale = # Global SEARCH: en: "Search" diff --git a/app/coffeescripts/pages.coffee b/app/assets/javascripts/pages.coffee similarity index 99% rename from app/coffeescripts/pages.coffee rename to app/assets/javascripts/pages.coffee index 94e109d..defba83 100644 --- a/app/coffeescripts/pages.coffee +++ b/app/assets/javascripts/pages.coffee @@ -1,4 +1,4 @@ -class Pages +class window.Pages renderArtist: (data) -> artist_info = $ ' diff --git a/app/coffeescripts/player.coffee b/app/assets/javascripts/player.coffee similarity index 99% rename from app/coffeescripts/player.coffee rename to app/assets/javascripts/player.coffee index 1b6d4af..8bcaa3d 100644 --- a/app/coffeescripts/player.coffee +++ b/app/assets/javascripts/player.coffee @@ -1,4 +1,4 @@ -class Player +class window.Player bar_width: 330 jp: null diff --git a/app/coffeescripts/search.coffee b/app/assets/javascripts/search.coffee similarity index 99% rename from app/coffeescripts/search.coffee rename to app/assets/javascripts/search.coffee index fcf9285..05092ad 100644 --- a/app/coffeescripts/search.coffee +++ b/app/assets/javascripts/search.coffee @@ -1,4 +1,4 @@ -class Search +class window.Search pics: [] diff --git a/app/coffeescripts/session.coffee b/app/assets/javascripts/session.coffee similarity index 96% rename from app/coffeescripts/session.coffee rename to app/assets/javascripts/session.coffee index 4af487b..22c8a53 100644 --- a/app/coffeescripts/session.coffee +++ b/app/assets/javascripts/session.coffee @@ -1,4 +1,4 @@ -class Session +class window.Session vk_params: null user: null diff --git a/app/coffeescripts/settings.coffee b/app/assets/javascripts/settings.coffee similarity index 99% rename from app/coffeescripts/settings.coffee rename to app/assets/javascripts/settings.coffee index d9844e2..89a89f7 100644 --- a/app/coffeescripts/settings.coffee +++ b/app/assets/javascripts/settings.coffee @@ -1,4 +1,4 @@ -class Settings +class window.Settings getAccountInfo: (callback) -> _session.query '/user/update/', {}, callback diff --git a/app/coffeescripts/vkontakte.coffee b/app/assets/javascripts/vkontakte.coffee similarity index 99% rename from app/coffeescripts/vkontakte.coffee rename to app/assets/javascripts/vkontakte.coffee index 5ffdae4..a684c0c 100644 --- a/app/coffeescripts/vkontakte.coffee +++ b/app/assets/javascripts/vkontakte.coffee @@ -1,4 +1,4 @@ -class Vkontakte +class window.Vkontakte qr: null api_id: null diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e595a7d..86f6b6c 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -7,18 +7,7 @@ <%= javascript_include_tag "http://code.jquery.com/jquery.min.js", :type => "text/javascript", :charset => "utf-8" %> <%= javascript_include_tag "http://code.jquery.com/ui/1.8.14/jquery-ui.min.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "jquery/jquery.autocomplete.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "jquery/jquery.jplayer.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "jquery/jquery.scroll.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "coffee/beathaven.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "coffee/locale.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/search.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "coffee/pages.js", :type => "text/javascript", :charset => "utf-8" %> - <%= javascript_include_tag "coffee/settings.js", :type => "text/javascript", :charset => "utf-8" %> + <%= javascript_include_tag "application", :type => "text/javascript", :charset => "utf-8" %>
diff --git a/config/initializers/barista_config.rb b/config/initializers/barista_config.rb index 65aebaa..7811a7a 100644 --- a/config/initializers/barista_config.rb +++ b/config/initializers/barista_config.rb @@ -2,10 +2,10 @@ Barista.configure do |c| # Change the root to use app/scripts - c.root = Rails.root.join("app", "coffeescripts") + # c.root = Rails.root.join("app", "coffeescripts") # Change the output root, causing Barista to compile into public/coffeescripts - c.output_root = Rails.root.join("public", "javascripts", "coffee") + # c.output_root = Rails.root.join("public", "assets", "coffee") # # Disable auto compile, use generated file directly: # c.auto_compile = false diff --git a/public/javascripts/application.js b/public/javascripts/application.js deleted file mode 100644 index e69de29..0000000 diff --git a/public/javascripts/coffee/ajax.js b/public/javascripts/coffee/ajax.js deleted file mode 100644 index 44c5925..0000000 --- a/public/javascripts/coffee/ajax.js +++ /dev/null @@ -1,95 +0,0 @@ -var Ajax; -Ajax = (function() { - function Ajax() {} - Ajax.prototype.referer = false; - Ajax.prototype.loadArtistData = function(name) { - _search.showSpinner(); - name = name.split(' ').join('+'); - $.get('/artist/' + name + '/', function(data) { - if (data.status != null) { - if (data.status === 'loading') { - _search.showArtistPics(data.pics); - setTimeout(function() { - return _ajax.loadArtistData(name); - }, 3000); - } else if (data.status === 'corrected') { - _ajax.loadArtistData(data.page); - } else if (data.status === 'suggestions') { - _search.hideSpinner(); - _search.showSuggestions(data.values); - } else if (data.status === 'loading_failed') { - _search.hideSpinner(); - _search.showError(); - } - _beathaven.redrawScrollbar(); - } else { - _ajax.setArchor('/artist/' + name + '/'); - _pages.renderArtist(data); - } - return _search.hideSpinner(); - }); - return false; - }; - Ajax.prototype.loadSearchPage = function() { - return false; - }; - Ajax.prototype.loadSettingsPage = function() { - $.get('/templates/settings.html', function(data) { - _ajax.setArchor('/settings/'); - return _pages.renderSettings(_beathaven.localizeHTML($(data))); - }); - return false; - }; - Ajax.prototype.load404Page = function() { - $.get('/404.html', function(data) { - $('.data-container .inner').html(data); - return _beathaven.redrawScrollbar(); - }); - return false; - }; - Ajax.prototype.loadAboutPage = function() { - $.get('/templates/about.html', function(data) { - _pages.renderTextpage(data); - return _ajax.setTitle('About'); - }); - return false; - }; - Ajax.prototype.setArchor = function(anchor) { - this.referer = this.getAnchor(); - return window.location.hash = '#' + anchor; - }; - Ajax.prototype.getAnchor = function() { - return window.location.hash.substring(1); - }; - Ajax.prototype.setTitle = function(title) { - return document.title = title + ' @ BeatHaven'; - }; - Ajax.prototype.go = function(url) { - this.setArchor(url); - return false; - }; - Ajax.prototype.detectPage = function() { - var m; - if (m = _ajax.getAnchor().match(/\/artist\/(.+)\//)) { - _ajax.loadArtistData(m[1]); - } else if (_ajax.getAnchor() === '' || _ajax.getAnchor().match(/\/search\//)) { - _ajax.loadSearchPage(); - } else if (_ajax.getAnchor().match(/\/settings\//)) { - _ajax.loadSettingsPage(); - } else if (_ajax.getAnchor().match(/\/about\//)) { - _ajax.loadAboutPage(); - } else { - _ajax.loadSearchPage(); - } - return false; - }; - return Ajax; -})(); -$('a.data.artist').live('click', function() { - _ajax.loadArtistData($(this).html()); - return false; -}); -$(window).bind('hashchange', function() { - _ajax.detectPage(); - return false; -}); \ No newline at end of file diff --git a/public/javascripts/coffee/beathaven.js b/public/javascripts/coffee/beathaven.js deleted file mode 100644 index 87c7f2c..0000000 --- a/public/javascripts/coffee/beathaven.js +++ /dev/null @@ -1,141 +0,0 @@ -var BeatHaven, _ajax, _beathaven, _pages, _player, _search, _session, _settings, _vkontakte; -_beathaven = null; -_session = 1; -_vkontakte = null; -_ajax = null; -_player = null; -_search = null; -_pages = null; -_settings = null; -$(function() { - var l, _ref; - l = document.location; - if ((_ref = l.host) !== 'beathaven.org' && _ref !== 'dev.beathaven.org') { - l.href = 'http://beathaven.org/' + l.hash; - } - _beathaven = new BeatHaven(); - _beathaven.init(); - $(window).resize(function() { - _beathaven.adjustSizes(); - _beathaven.redrawScrollbar(); - return false; - }); - return window.setTimeout(function() { - _beathaven.checkRedrawScrollbar(); - return false; - }, 500); -}); -BeatHaven = (function() { - function BeatHaven() {} - BeatHaven.prototype.last_height = false; - BeatHaven.prototype.lang = 'ru'; - BeatHaven.prototype.init = function() { - this.adjustSizes(); - this.checkRedrawScrollbar(); - _vkontakte = new Vkontakte(2335068); - _vkontakte.init(); - _ajax = new Ajax(); - _player = new Player(); - _player.initJplayer(); - _search = new Search(); - _pages = new Pages(); - _settings = new Settings(); - return false; - }; - BeatHaven.prototype.adjustSizes = function() { - $('.data-container').height($(window).height() - $('.header-container').height() - $('.pulldown').height()); - $('.data-container').width($(window).width() - $('.player').width()); - $('.player-container').height($(window).height()); - $('.playlist').height($(window).height() - $('.player').height() - $('.player-container .additional-controls').height()); - $('.data-container').scrollbar(); - $('.playlist').scrollbar(); - return false; - }; - BeatHaven.prototype.checkRedrawScrollbar = function() { - var focused_id, outer_height; - focused_id = false; - if (document.activeElement.id != null) { - focused_id = document.activeElement.id; - } - outer_height = $('.data-container > div').outerHeight(); - if (outer_height > 300 && outer_height !== _beathaven.last_height) { - _beathaven.last_height = outer_height; - _beathaven.redrawScrollbar(); - } - if (focused_id) { - document.getElementById(focused_id).focus(); - focused_id = false; - } - window.setTimeout(function() { - _beathaven.checkRedrawScrollbar(); - return false; - }, 500); - return false; - }; - BeatHaven.prototype.redrawScrollbar = function() { - $('.data-container').html($('.data-container').find('.inner').first()); - $('.data-container').scrollbar(); - return false; - }; - BeatHaven.prototype.localizeHTML = function(obj, lang) { - if (obj == null) { - obj = $('body'); - } - if (lang == null) { - lang = _beathaven.lang; - } - $(obj).find('[data-ls]').each(function() { - if ((_locale[$(this).attr('data-ls')] != null) && (_locale[$(this).attr('data-ls')][lang] != null)) { - if (this.nodeName === 'INPUT') { - return $(this).val(_locale[$(this).attr('data-ls')][lang]); - } else { - return $(this).text(_locale[$(this).attr('data-ls')][lang]); - } - } - }); - return obj; - }; - BeatHaven.prototype.ls = function(id, lang) { - if (lang == null) { - lang = _beathaven.lang; - } - if ((_locale[id] != null) && (_locale[id][lang] != null)) { - return _locale[id][lang]; - } else { - return id; - } - }; - BeatHaven.prototype.pdShowSpinner = function() { - $('.pulldown').html('
'); - return false; - }; - BeatHaven.prototype.pdHideSpinner = function() { - $('.pulldown').html(''); - return false; - }; - return BeatHaven; -})(); -String.prototype.htmlsafe = function() { - var item, replaces, str, _i, _len; - replaces = [["\\", "\\\\"], ["\"", """], ["<", "<"], [">", ">"]]; - str = this; - for (_i = 0, _len = replaces.length; _i < _len; _i++) { - item = replaces[_i]; - str = str.replace(item[0], item[1]); - } - return str; -}; -String.prototype.trim = function() { - var str; - str = this; - while (str.indexOf(' ') !== -1) { - str = str.replace(' ', ' '); - } - if (str.charAt(0) === ' ') { - str = str.substring(1); - } - if (str.charAt(str.length - 1) === ' ') { - str = str.substring(0, str.length - 1); - } - return str; -}; \ No newline at end of file diff --git a/public/javascripts/coffee/locale.js b/public/javascripts/coffee/locale.js deleted file mode 100644 index d5bb28e..0000000 --- a/public/javascripts/coffee/locale.js +++ /dev/null @@ -1,99 +0,0 @@ -var _locale; -_locale = { - SEARCH: { - en: "Search", - ru: "Поиск" - }, - NEWS: { - en: "News", - ru: "Новости" - }, - ABOUT: { - en: "About", - ru: "О проекте" - }, - LOGIN: { - en: "Log in", - ru: "Войти" - }, - LOGOUT: { - en: "Log out", - ru: "Выйти" - }, - ADD_SOME_MUSIC: { - en: "Add some music to playlist", - ru: "Добавьте музыку в плей-лист" - }, - LOGIN_PLEASE: { - en: "Don't forget to log in, please. It's simple.", - ru: "Авторизуйтесь, пожалуйста. Это действительно просто." - }, - REPEAT: { - en: "Repeat", - ru: "Повторять" - }, - SHUFFLE: { - en: "Shuffle", - ru: "Перемешать" - }, - EMPTY_PLAYLIST: { - en: "Empty playlist", - ru: "Очистить" - }, - HELLO: { - en: "Hi there", - ru: "Привет" - }, - ARTIST_LOADING_FAILED: { - en: "Something very bad happened while we tried out to load some info about this artist. How about some other one?", - ru: "Что-то ужасное произошло пока мы собирали информацию об этом исполнителе. Может пока поищем другого?" - }, - ARTIST_LOADING_IN_PROCESS: { - en: "Artist info is loading for the first time now. Usually it takes less than a minute, please wait a bit.", - ru: "Прямо сейчас мы собираем всю возможною информацию об этом исполнителе в первый раз. Обычно это занимает меньше минуты." - }, - MISSPELLED: { - en: "Misspelled?", - ru: "Опечатались?" - }, - SETTINGS_ACCOUNT: { - en: "Account", - ru: "Аккаунт" - }, - SETTINGS_LASTFM: { - en: "Last.fm", - ru: "Last.fm" - }, - USERNAME: { - en: "Username", - ru: "Имя" - }, - EMAIL: { - en: "Email", - ru: "Почта" - }, - LANG: { - en: "Language", - ru: "Язык" - }, - USELESS_BUTTON: { - en: "Hello, my name is Useless Button", - ru: "Привет, меня зовут Бесполезная Кнопка" - }, - NOT_CONNECTED: { - en: "Not connected", - ru: "Не подключен" - }, - CONNECT: { - en: "Connect", - ru: "Подключить" - }, - WINDOW_LANG_RELOAD: { - en: "To change application language it is needed to reload page. Your current playlist will be emptied and music will stop. Do you really wish to continue?", - ru: "Чтобы изменить язык приложения, необходимо перезагрузить страницу. Ваш текущий плей-лист будет очищен и музыка остановится. Вы действительно хотите продолжить?" - }, - ADD_TO_NOW_PLAYING: { - en: "Add to Now Playing", - ru: "Добавить в плей-лист" - } -}; \ No newline at end of file diff --git a/public/javascripts/coffee/pages.js b/public/javascripts/coffee/pages.js deleted file mode 100644 index f8c8460..0000000 --- a/public/javascripts/coffee/pages.js +++ /dev/null @@ -1,104 +0,0 @@ -var Pages; -Pages = (function() { - function Pages() {} - Pages.prototype.renderArtist = function(data) { - var albums_info, artist_info; - artist_info = $('\ -
\ -
\ - ' + data.artist.name + '\ -
\ -

' + data.artist.name + '

\ -
\ - ' + data.artist.desc + '\ -
\ -
'); - albums_info = $('
'); - $.each(data.albums, function(i, album) { - var album_info; - if (album.year != null) { - album_info = $('\ -
\ -

' + album.name + ' (' + album.year + ')

\ -
\ - ' + album.name + ' by ' + data.artist.name + '\ -
\ -
' + _beathaven.ls('ADD_TO_NOW_PLAYING') + '
\ -
\ -
\ -
    \ -
    \ -
    '); - $.each(album.tracks.album, function(i, track) { - var track_info; - track_info = $('\ -
  • \ -
    +
    \ -
    \ -
    \ - ' + (i + 1) + '\ -
    ' + track.name + '
    \ -
    ' + track.duration + '
    \ -
    \ -
  • '); - return $(album_info).find('.tracklist ul').append(track_info); - }); - return $(albums_info).append(album_info); - } - }); - $('.data-container').css({ - backgroundImage: 'none' - }); - $('.data-container .inner').html('').append(artist_info).append(albums_info); - yaCounter7596904.hit(_ajax.getAnchor(), data.artist.name, _ajax.referer); - _ajax.setTitle(data.artist.name); - _beathaven.redrawScrollbar(); - return false; - }; - Pages.prototype.renderSearch = function(data) { - $('.pulldown').html(data); - setTimeout(function() { - $('.search_field').first().bh_autocomplete({ - serviceUrl: '/artist/autocomplete', - minChars: 2, - delimiter: /(,|;)\s*/, - maxHeight: 400, - width: 415, - zIndex: 9999, - deferRequestBy: 500, - onSelect: function() { - return _ajax.loadArtistData($('.search_field').first().val()); - } - }); - return $('.search_field').first().focus(); - }, 1); - return false; - }; - Pages.prototype.renderSettings = function(data) { - if (_session.getUser().id == null) { - _ajax.go('/search/'); - return false; - } - $('.data-container').css({ - background: 'none' - }); - $('.data-container .inner').html(data); - yaCounter7596904.hit(_ajax.getAnchor(), 'Settings', _ajax.referer); - _ajax.setTitle('Settings'); - $('.settings-container .tabs .tab').first().trigger('click'); - return false; - }; - Pages.prototype.renderTextpage = function(data) { - $('.data-container').css({ - background: 'url(/images/concrete_wall_2.png) 0 -30px repeat' - }); - $('.data-container .inner').html(data); - _beathaven.redrawScrollbar(); - return false; - }; - return Pages; -})(); -$('.about').live('click', function() { - _ajax.go('/about/'); - return false; -}); \ No newline at end of file diff --git a/public/javascripts/coffee/player.js b/public/javascripts/coffee/player.js deleted file mode 100644 index 045e377..0000000 --- a/public/javascripts/coffee/player.js +++ /dev/null @@ -1,307 +0,0 @@ -var Player; -Player = (function() { - function Player() {} - Player.prototype.bar_width = 330; - Player.prototype.jp = null; - Player.prototype.scrobbled = false; - Player.prototype.initJplayer = function() { - var self; - self = this; - this.jp = $("#jplayer"); - this.jp.jPlayer({ - swfPath: "/js", - supplied: "mp3", - cssSelectorAncestor: "", - cssSelector: { - play: ".player .play", - pause: ".player .pause", - stop: "", - videoPlay: "", - seekBar: "", - playBar: "", - mute: "", - unmute: "", - volumeBar: "", - volumeBarValue: "", - currentTime: "", - duration: "" - } - }); - this.jp.bind($.jPlayer.event.timeupdate, function(e) { - var $obj, data; - data = e.jPlayer.status; - if (!_player.scrobbled && 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); - return $('.player .progress .played').width(data.currentPercentAbsolute * self.bar_width / 100); - }); - this.jp.bind($.jPlayer.event.ended, function(e) { - var next; - next = self.nextTrack(); - if (!next) { - $('#jplayer').jPlayer('clearMedia'); - $('.player .now-playing').html('Nothing left to lose play'); - $('.player .loaded, .player .played').width(0); - return $('.playlist-tracks li').removeClass('now'); - } else { - return self.setTrack(next); - } - }); - return false; - }; - Player.prototype.addTracks = function(tracks, autoplay) { - var initial_count, item, _i, _len; - if (!(autoplay != null)) { - autoplay = false; - } - initial_count = $('.playlist-tracks li').length; - for (_i = 0, _len = tracks.length; _i < _len; _i++) { - item = tracks[_i]; - $('.playlist-tracks').append('\ -
  • \ -
    \ -
    \ -
    \ - \ - ' + item.artist + '\ - —\ - ' + item.name + '\ - \ - ' + item.length + '\ -
    remove
    \ -
    \ -
  • '); - } - $('.playlist').html($('.playlist-tracks')).scrollbar(); - $('.playlist-tracks').sortable({ - axis: 'y', - handle: '.dragbox' - }); - if (autoplay) { - _player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1]); - } else if (initial_count === 0 && !_player.hasTrack()) { - _player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]); - } - return false; - }; - Player.prototype.getDataFromLi = function(obj) { - var id, length, track_name; - id = $(obj).attr('data-id'); - track_name = $(obj).find('.trackname').html(); - length = $(obj).find('.length').html(); - return { - id: id, - name: track_name, - length: length - }; - }; - Player.prototype.setTrack = function(id) { - var $obj, query; - $obj = $('#i' + id); - query = $obj.attr('data-artist') + ' — ' + $obj.attr('data-track'); - $('.player .loaded, .player .played').width(0); - $('.player .now-playing').html(query + '
    '); - $('.playlist-tracks li').removeClass('now'); - $obj.addClass('now'); - $('.tracklist li').removeClass('now'); - $('.tracklist li[data-id="' + $obj.attr('data-id') + '"]').addClass('now'); - _vkontakte.loadTracksData($obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), function(url) { - return _player.playSource(url); - }); - this.updateNowListening($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')); - return false; - }; - Player.prototype.hasTrack = function() { - if ($('#jplayer audio').length > 0) { - return ($('#jplayer audio').attr('src') != null) && $('#jplayer audio').attr('src') !== ''; - } else if ($('#jplayer object').length > 0) { - $('#jplayer').jPlayer('play'); - true; - } - return false; - }; - Player.prototype.playSource = function(url) { - this.scrobbled = false; - $('#jplayer').jPlayer('setMedia', { - mp3: url - }); - $('#jplayer').jPlayer('play'); - return false; - }; - Player.prototype.nextTrack = function(manual) { - var $li, cnt, rnd; - manual = manual != null; - cnt = $('.playlist-tracks li').length; - if (!this.onShuffle()) { - if ($('.playlist-tracks .now').next().length === 0) { - if (_player.onRepeat() || manual) { - 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) { - return $('.playlist-tracks li').first().attr('id').split('i')[1]; - } else { - while (true) { - rnd = Math.floor(Math.random() * (cnt + .999)); - $li = $('.playlist-tracks li').eq(rnd); - if ($li.length > 0 && !$li.hasClass('now')) { - return $li.attr('id').split('i')[1]; - } - } - } - return false; - }; - Player.prototype.prevTrack = function() { - var $li, cnt, rnd; - cnt = $('.playlist-tracks li').length; - if (!_player.onShuffle()) { - if ($('.playlist-tracks .now').prev().length === 0) { - 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) { - return $('.playlist-tracks li').first().attr('id').split('i')[1]; - } else { - while (true) { - rnd = Math.floor(Math.random() * (cnt + .999)); - $li = $('.playlist-tracks li').eq(rnd); - if ($li.length > 0 && !$li.hasClass('now')) { - return $li.attr('id').split('i')[1]; - } - } - } - return false; - }; - Player.prototype.onShuffle = function() { - return $('#shuffle').hasClass('active'); - }; - Player.prototype.onRepeat = function() { - return $('#repeat').hasClass('active'); - }; - Player.prototype.updateNowListening = function(artist, album, track) { - if (_session.getUser().lastfm_username) { - _session.query('/lastfm/listening?r=' + Math.random(), { - artist: artist, - album: album, - track: track - }); - } - return false; - }; - Player.prototype.scrobble = function(artist, album, track) { - if (_session.getUser().lastfm_username) { - _session.query('/lastfm/scrobble?r=' + Math.random(), { - artist: artist, - album: album, - track: track - }); - } - return false; - }; - return Player; -})(); -$('.player .controls .prev').live('click', function() { - _player.setTrack(_player.prevTrack()); - return false; -}); -$('.player .controls .next').live('click', function() { - _player.setTrack(_player.nextTrack(true)); - return false; -}); -$('.player .play').live('click', function() { - if ($('.playlist-tracks li').length > 0 && !_player.hasTrack()) { - _player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]); - } - return false; -}); -$('.player .progress').live('click', function(e) { - $('#jplayer').jPlayer('playHead', Math.round((e.offsetX / _player.bar_width) * 100)); - return false; -}); -$('#repeat, #shuffle').live('click', function() { - $(this).toggleClass('active'); - return false; -}); -$('#empty-playlist').live('click', function() { - 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); - } - return false; -}); -$('.playlist-tracks li .fade, .playlist-tracks li .duration, .playlist-tracks li .remove').live('mousemove mouseover mouseout', function(e) { - var _ref; - if (((_ref = e.type) === 'mouseover' || _ref === 'mousemove') && ($(window).width() - e.clientX) < 60) { - $(this).parent().find('.duration').hide(); - $(this).parent().find('.remove').show(); - } else { - $(this).parent().find('.remove').hide(); - $(this).parent().find('.duration').show(); - } - return false; -}); -$('.playlist-tracks li .remove').live('click', function() { - var $li; - $li = $(this).parent().parent(); - if ($li.hasClass('now')) { - $('#jplayer').jPlayer('clearMedia'); - $('.player .now-playing').text('...'); - $('.player .loaded, .player .played').width(0); - } - $li.remove(); - return false; -}); -$('.playlist-tracks li .title .playtrack').live('click', function() { - _player.setTrack($(this).parent().parent().parent().attr('id').split('i')[1]); - return false; -}); -$('.add-album').live('click', function() { - var album, artist, item, track, tracks, _i, _len, _ref; - artist = $('.artist-info .name').html(); - album = $(this).parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, ''); - tracks = []; - _ref = $(this).parent().parent().parent().find('.tracklist li'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - item = _ref[_i]; - track = _player.getDataFromLi(item); - track['artist'] = artist; - track['album'] = album; - tracks.push(track); - } - _player.addTracks(tracks); - return false; -}); -$('.add-track').live('click', function() { - var track; - track = _player.getDataFromLi($(this).parent()); - track['artist'] = $('.artist-info .name').html(); - track['album'] = $(this).parent().parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, ''); - _player.addTracks([track]); - return false; -}); -$('.tracklist li').live('mouseover mouseout', function(e) { - if (e.type === 'mouseover') { - $(this).find('.add-track').show(); - } else { - $(this).find('.add-track').hide(); - } - return false; -}); -$('.tracklist li').live('click', function(e) { - var track; - track = _player.getDataFromLi(this); - track['artist'] = $('.artist-info .name').html(); - track['album'] = $(this).parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, ''); - _player.addTracks([track], true); - return false; -}); \ No newline at end of file diff --git a/public/javascripts/coffee/search.js b/public/javascripts/coffee/search.js deleted file mode 100644 index 78a255a..0000000 --- a/public/javascripts/coffee/search.js +++ /dev/null @@ -1,93 +0,0 @@ -var Search; -Search = (function() { - function Search() {} - Search.prototype.pics = []; - Search.prototype.showSpinner = function() { - $('.search-container input').first().attr({ - disabled: 'disabled' - }).blur(); - $('.search-container img').first().show(); - $('.autocomplete-container').hide(); - $('.artist_loading.failed').first().hide(); - this.hideSuggestions(); - return false; - }; - Search.prototype.hideSpinner = function() { - $('.search-container input').first().removeAttr('disabled'); - $('.search_field').first().focus(); - $('.search-container img').first().hide(); - return false; - }; - Search.prototype.showSuggestions = function(values) { - var item, _i, _len; - for (_i = 0, _len = values.length; _i < _len; _i++) { - item = values[_i]; - $('.suggestions ul').append('\ -
  • \ - ' + item.name + '\ - ' + (item.desc != null ? '
    ' + item.desc + '' : '') + '\ -
  • '); - } - $('.suggestions').show(); - return false; - }; - Search.prototype.hideSuggestions = function() { - $('.suggestions ul li').remove(); - $('.suggestions').hide(); - return false; - }; - Search.prototype.showArtistPics = function(pics) { - var pic, _i, _len; - $('.artist_loading.ok, .artist_pics').show(); - for (_i = 0, _len = pics.length; _i < _len; _i++) { - pic = pics[_i]; - if (this.pics.indexOf(pic) === -1) { - this.pics.push(pic); - $('.artist_pics').append('\ -
    \ - \ -
    '); - } - } - return false; - }; - Search.prototype.showError = function() { - $('.artist_loading.ok, .artist_pics').hide(); - $('.artist_loading.failed').show(); - return this.pics = []; - }; - return Search; -})(); -$('.search').live('click', function() { - if ($('.pulldown').css('display') === 'none') { - $('.pulldown').width($('.data-container').width() - 50); - $('.pulldown').height(300); - $('.pulldown').slideDown('fast', function() { - var data; - data = '
    ' + $('.subpages .search-container').html() + '
    '; - _pages.renderSearch(_beathaven.localizeHTML($(data))); - _beathaven.adjustSizes(); - return _beathaven.redrawScrollbar(); - }); - } else { - $('.pulldown').slideUp('fast', function() { - $('.pulldown').height(0); - _beathaven.adjustSizes(); - return _beathaven.redrawScrollbar(); - }); - } - return false; -}); -$('.search_form').live('submit', function() { - $('.autocomplete-container').remove(); - _ajax.loadArtistData($('.search_field').first().val()); - return false; -}); -$('.suggestions a').live('click', function() { - $('.search_field').first().val($(this).text()); - return false; -}); -$('.data.artist').live('click', function() { - _ajax.go('/artist/' + $(this).text().replace(' ', '+') + '/'); - return false; -}); \ No newline at end of file diff --git a/public/javascripts/coffee/session.js b/public/javascripts/coffee/session.js deleted file mode 100644 index 44dfb6c..0000000 --- a/public/javascripts/coffee/session.js +++ /dev/null @@ -1,40 +0,0 @@ -var Session; -Session = (function() { - Session.prototype.vk_params = null; - Session.prototype.user = null; - function Session(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; - } - Session.prototype.setUser = function(user) { - this.user = user; - _beathaven.lang = this.user.lang || 'ru'; - _beathaven.localizeHTML(); - return false; - }; - Session.prototype.getUser = function() { - return this.user; - }; - Session.prototype.query = function(url, params, callback) { - var q_params; - q_params = $.extend({}, this.vk_params, params); - $.post(url, q_params, callback); - return false; - }; - Session.prototype.reloadSession = function() { - _session.query('/user/auth', {}, function(ar) { - _session.setUser(ar.user); - return false; - }); - return false; - }; - return Session; -})(); \ No newline at end of file diff --git a/public/javascripts/coffee/settings.js b/public/javascripts/coffee/settings.js deleted file mode 100644 index d971521..0000000 --- a/public/javascripts/coffee/settings.js +++ /dev/null @@ -1,79 +0,0 @@ -var Settings; -Settings = (function() { - function Settings() {} - Settings.prototype.getAccountInfo = function(callback) { - _session.query('/user/update/', {}, callback); - return false; - }; - Settings.prototype.saveAccountInfo = function(params, callback) { - _session.query('/user/update', params, callback); - return false; - }; - Settings.prototype.loadFormData = function(form) { - if (form === 'account') { - $('.settings-container .form input[name$="username"]').val(_session.getUser().name); - $('.settings-container .form input[name$="email"]').val(_session.getUser().email); - $('.settings-container .form select').val(_session.getUser().lang); - } else if (form === 'lastfm') { - if (_session.getUser().lastfm_username) { - $('.form-container input[name$="username"]').first().val(_session.getUser().lastfm_username); - } - } - return false; - }; - Settings.prototype.updateLastfmLogin = function() { - if (window.lastfm_popup.closed) { - _session.query('/user/auth', {}, function(ar) { - _session.setUser(ar.user); - return _settings.loadFormData('lastfm'); - }); - } else { - setTimeout(_settings.updateLastfmLogin, 100); - } - return false; - }; - return Settings; -})(); -$('.settings').live('click', function() { - _ajax.go('/settings/'); - return false; -}); -$('.settings-container .tabs .tab').live('click', function() { - if (!$(this).hasClass('active')) { - $('.settings-container .tabs .tab').removeClass('active'); - $(this).addClass('active'); - $('.form-container').html($('.forms .' + $(this).attr('data-fieldset')).html()); - _settings.loadFormData($(this).attr('data-fieldset')); - } - return false; -}); -$('.lastfm-connect').live('click', function() { - window.lastfm_popup = window.open(_session.getUser().lastfm_login_url); - setTimeout(_settings.updateLastfmLogin, 100); - return false; -}); -$('.settings-container .form input, .settings-container .form select').live('blur', function() { - var active_tab, lang_changed, params; - active_tab = $('.settings-container .tabs .tab.active').attr('data-fieldset'); - if (active_tab === 'account') { - params = { - username: $('.settings-container .form input[name$="username"]').first().val(), - email: $('.settings-container .form input[name$="email"]').first().val(), - lang: $('.settings-container .form select').first().val() - }; - lang_changed = params.lang !== _session.getUser().lang; - if (lang_changed) { - if (!confirm(_beathaven.ls('WINDOW_LANG_RELOAD', params.lang))) { - $('.settings-container .form select').val(_session.getUser().lang); - } - } - _settings.saveAccountInfo(params, function() { - if (lang_changed) { - window.location.reload(); - } - $('.header-container .hello .greating span').text((params.username.length > 0 ? params.username : '%username%')); - return false; - }); - } - return false; -}); \ No newline at end of file diff --git a/public/javascripts/coffee/vkontakte.js b/public/javascripts/coffee/vkontakte.js deleted file mode 100644 index 7418330..0000000 --- a/public/javascripts/coffee/vkontakte.js +++ /dev/null @@ -1,170 +0,0 @@ -var Vkontakte; -Vkontakte = (function() { - Vkontakte.prototype.qr = null; - Vkontakte.prototype.api_id = null; - function Vkontakte(api_id) { - this.api_id = api_id; - } - Vkontakte.prototype.getApiId = function() { - return this.api_id; - }; - Vkontakte.prototype.init = function() { - this.qr = []; - window.vkAsyncInit = function() { - VK.init({ - apiId: _vkontakte.getApiId() - }); - return VK.Auth.getLoginStatus(function(response) { - return _vkontakte.authInfo(response); - }); - }; - return setTimeout(function() { - return $('#vk_api_transport').append(''); - }, 0); - }; - Vkontakte.prototype.authInfo = function(response) { - var _session; - if (typeof response !== 'undefined' && response.session) { - _session = new Session(response.session); - $('#vk_login, .auth-notice').hide(); - $('#vk_logout').css({ - display: 'block' - }); - if ($('#search_field').length > 0) { - $('#search_field').focus(); - } - _session.query('/user/auth', {}, function(ar) { - if (ar.newbie) { - VK.Api.call('getVariable', { - key: 1281 - }, function(r) { - return _session.query('/user/update', { - name: r.response - }, function(ar2) { - _session.setUser(ar2.user); - $('.header-container .hello .greating').html(_beathaven.ls('HELLO') + ', ' + (_session.getUser().name ? _session.getUser().name : '%username%') + '!'); - window._session = _session; - _ajax.detectPage(); - return $('.fullscreen').hide(); - }); - }); - } else { - _session.setUser(ar.user); - } - $('.header-container .hello').show(); - $('.header-container .hello .greating').html(_beathaven.ls('HELLO') + ', ' + (_session.getUser().name ? _session.getUser().name : '%username%') + '!'); - window._session = _session; - _ajax.detectPage(); - return $('.fullscreen').hide(); - }); - if (response.session.expire != null) { - return setTimeout(function() { - _vkontakte.auth(); - return false; - }, response.session.expire * 1000 - new Date().getTime() + 1000); - } - } else { - _session = new Session({}); - _session.setUser({}); - $('#vk_login').css({ - display: 'block' - }); - $('.auth-notice').css('left', $('#vk_login').offset().left).show(); - $('.header-container .hello').hide(); - window._session = _session; - _ajax.detectPage(); - return $('.fullscreen').hide(); - } - }; - Vkontakte.prototype.auth = function() { - VK.Auth.getLoginStatus(function(response) { - _vkontakte.authInfo(response); - return false; - }, 8); - return false; - }; - Vkontakte.prototype.loadTracksData = function(artist, track, duration, callback) { - var query, track_prepared, url; - track_prepared = track.replace(/\(.*\)/i, '').split('/')[0]; - query = artist + ' ' + track_prepared; - if (url = _vkontakte.getQR(query)) { - return callback(url); - } else { - return VK.Api.call('audio.search', { - q: query - }, function(r) { - url = _vkontakte.matchPerfectResult(r.response, artist, track, duration); - _vkontakte.addQR(query, url); - return callback(url); - }); - } - }; - Vkontakte.prototype.matchPerfectResult = function(data, artist, track, duration) { - var best_result, best_score, delta, item, score, _i, _len; - duration = duration.split(':'); - duration = parseInt(duration[0], 10) * 60 + parseInt(duration[1], 10); - best_score = 0; - best_result = null; - for (_i = 0, _len = data.length; _i < _len; _i++) { - item = data[_i]; - if (typeof item === 'object') { - score = 0; - item.artist = item.artist.trim(); - item.title = item.title.trim(); - if (item.artist === artist) { - score += 10; - } else if (item.artist.split(artist).length === 2) { - score += 5; - } else if (item.title.split(artist).length === 2) { - score += 4; - } - if (item.title === track) { - score += 10; - } else if (item.title.split(track).length === 2) { - score += 5; - } - if (parseInt(item.duration, 10) === duration) { - score += 15; - } else { - delta = Math.abs(parseInt(item.duration, 10) - duration); - if (delta < 10) { - score += 10 - delta; - } - } - if (score > best_score) { - best_score = score; - best_result = item; - } - if (score === 35) { - 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; -})(); -$('#vk_login, .auth-notice').live('click', function() { - VK.Auth.login(function(response) { - _vkontakte.authInfo(response); - return false; - }, 8); - return false; -}); -$('#vk_logout').live('click', function() { - _ajax.go('/search/'); - VK.Auth.logout(function(response) { - _vkontakte.authInfo(response); - return false; - }); - return false; -}); \ No newline at end of file