summaryrefslogtreecommitdiff
path: root/static/init.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/init.js')
-rw-r--r--static/init.js126
1 files changed, 109 insertions, 17 deletions
diff --git a/static/init.js b/static/init.js
index 941d798..e75f173 100644
--- a/static/init.js
+++ b/static/init.js
@@ -67,7 +67,7 @@ function load_directory(dir_id, dir_item) {
track_list.selectable({
filter: 'tr',
stop: function(event, ui) {
- $('#directory-add').prop('disabled', $(track_list, ' .ui-selected').length == 0);
+ $('#directory-add').prop('disabled', track_list.find('.ui-selected').length == 0);
return true;
}
});
@@ -75,26 +75,119 @@ function load_directory(dir_id, dir_item) {
$('#directory-add').prop('disabled', true);
}
-function search_results(data) {
- var results = $('#search-results');
- results.empty();
- $.each(data, function(i, track) {
- var item = $(templates.directory_item(track));
- item.data('track', track);
- results.append(item);
+function set_tracks(container, select, click) {
+ return (function(tracks) {
+ container.empty();
+ $.each(tracks, function(i, track) {
+ var el = $(templates.directory_item(track));
+ el.data('track', track);
+ if(click !== undefined) {
+ el.find('a').click(function(event) {
+ click(event, track);
+ });
+ }
+ container.append(el);
+ });
+ if(select !== undefined) {
+ container.selectable({
+ filter: 'tr',
+ stop: function(event, ui) {
+ select.prop('disabled', $(container, ' .ui-selected').length == 0);
+ return true;
+ }
+ });
+ select.prop('disabled', true);
+ }
+ });
+}
+
+function show_album(album) {
+ var tabs = $('#tabs');
+ var tabid = '#album-tab-' + album.id;
+ var tab = $(tabid);
+ if(tab.length > 0) {
+ tabs.tabs('select', tab.index()-1);
+ return;
+ }
+ var tabli = $(templates.album_tabli({tabid: tabid, album: album}));
+ tabs.find('.ui-tabs-nav').append(tabli);
+ var tab = $(templates.album_tab(album));
+ tabs.append(tab).tabs('refresh');
+ var tracks = $(tabid + '-table tbody');
+ var addbutton = $(tab).find('input');
+ addbutton.click(function() {
+ var tracks = $(tabid + '-table tbody tr.ui-selected');
+ tracks.each(function(i, item) {
+ var track = $(item).data('track');
+ playlist.add(track);
+ });
});
- results.selectable({
- filter: 'tr',
- stop: function(event, ui) {
- $('#search-add').prop('disabled', results.children().length == 0);
- return true;
+ $.get('/json/album/' + album.id, set_tracks(tracks, addbutton), 'json');
+ tabs.tabs('select', tab.index()-1);
+}
+
+function add_albums(data) {
+ var div = $('#albums-list');
+ $.each(data, function(i, album) {
+ var el = $(templates.albums_item(album));
+ el.find('a').click(function() {
+ show_album(album);
+ return false;
+ });
+ div.append(el);
+ });
+}
+
+function setup_album_scrolling() {
+ $('#albums-list').scroll(function(event) {
+ if(albums_end)
+ return;
+ var scrolltop = event.target.scrollTop;
+ var scrollheight = event.target.scrollHeight;
+ var height = $(event.target).height();
+ var remaining = (scrollheight - height) - scrolltop;
+ if(remaining < 150 && !albums_loading) {
+ load_albums();
}
});
- $('#search-add').prop('disabled', true);
+}
+
+var albums_page = 0;
+var albums_loading = false;
+var albums_end = false;
+function load_albums(initiate_scrolling) {
+ var page = albums_page;
+ albums_page++;
+ albums_loading = true;
+ $.get('/json/albums/' + page, function(data) {
+ if(data.length > 0)
+ add_albums(data);
+ else
+ albums_end = true;
+ if(initiate_scrolling == true)
+ setup_album_scrolling();
+ albums_loading = false;
+ }, 'json');
}
$(document).ready(function() {
- $('#tabs').tabs();
+ var albums_initially_loaded = false;
+ $('#tabs').tabs({
+ activate: function(event, ui) {
+ if(ui.newPanel.selector == '#albums-tab') {
+ if(!albums_initially_loaded) {
+ load_albums(true);
+ albums_initially_loaded = true;
+ }
+ }
+ }
+ });
+ // Shamlessly stolen from the tabs manipulation example: http://jqueryui.com/tabs/#manipulation
+ $('#tabs span.ui-icon-close').live('click', function() {
+ var panelid = $(this).closest('li').remove().attr('aria-controls');
+ $('#' + panelid).remove();
+ $('#tabs').tabs('refresh');
+ });
preload_images();
load_directory(0);
$('#progress').slider();
@@ -115,12 +208,11 @@ $(document).ready(function() {
$('#search_box').keypress(function(event) {
if(event.keyCode == 13) {
var val = $(this).val();
- $.get('/json/search?q=' + encodeURIComponent(val), search_results, 'json');
+ $.get('/json/search?q=' + encodeURIComponent(val), set_tracks($('#search-results'), $('#search-add')), 'json');
}
});
$('#search-add').click(function(event) {
var tracks = $('#search-results tr.ui-selected');
- console.log(tracks);
tracks.each(function(i, item) {
var track = $(item).data('track');
playlist.add(track);