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.desc + '\
-
\
-
');
- albums_info = $('
');
- $.each(data.albums, function(i, album) {
- var album_info;
- if (album.year != null) {
- album_info = $('\
-
\
-
' + album.name + ' (' + album.year + ')
\
-
\
-
 + ')
\
-
\
-
\
-
\
-
\
-
');
- $.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