diff --git a/admin-root/lib-js/rico.js b/admin-root/lib-js/rico.js
index 1031fdc5..c2708f3d 100644
--- a/admin-root/lib-js/rico.js
+++ b/admin-root/lib-js/rico.js
@@ -2162,14 +2162,21 @@ Rico.GridViewPort.prototype = {
},
populateRow: function(htmlRow, row) {
+ var songId = '';
if (typeof(row[0]) == 'object') {
htmlRow.cells[0].innerHTML = row[0].name;
htmlRow.setAttribute('songid',row[0].id);
+ songId = row[0].id;
} else {
// empty row
htmlRow.cells[0].innerHTML = '';
htmlRow.removeAttribute('songid');
}
+ if (SelectedRows.isSelected(songId)) {
+ htmlRow.style.backgroundColor = '#8CACBB';
+ } else {
+ htmlRow.style.backgroundColor = '';
+ }
for (var j=1; j < row.length; j++) {
htmlRow.cells[j].innerHTML = row[j]
}
diff --git a/admin-root/playlist.html b/admin-root/playlist.html
index ed191fa5..bcd9db3c 100644
--- a/admin-root/playlist.html
+++ b/admin-root/playlist.html
@@ -42,12 +42,21 @@
#songs_data td {
overflow: hidden;
white-space: nowrap;
-}
+}
+.row_selected {
+ background-color: #8CACBB;
+}
+#spinner {
+ float: right;
+ margin-right: 2em;
+ visibility: hidden;
+}
+
diff --git a/admin-root/playlist.js b/admin-root/playlist.js
index 9959b9a1..ec44286f 100644
--- a/admin-root/playlist.js
+++ b/admin-root/playlist.js
@@ -7,9 +7,10 @@ Event.observe(window,'load',initPlaylist);
var SEARCH_DELAY = 500; // # ms without typing before the search box searches
var BROWSE_TEXT_LEN = 30; // Length to truncate genre/artist/album select boxes
var g_myLiveGrid; // the live grid;
-Ajax.Responders.register({ onCreate: function () {$('busymsg').style.visibility='visible';},
- onComplete: function () {if (!Query.busy) {$('busymsg').style.visibility='hidden';}}});
function initPlaylist() {
+Ajax.Responders.register({ onCreate: Spinner.incRequestCount,
+ onComplete: Spinner.decRequestCount});
+
new Ajax.Request('/databases/1/containers?output=xml',{method: 'get',onComplete:rsSource});
Query.send('genres');
Event.observe('search','keypress',EventHandler.searchKeyPress);
@@ -23,10 +24,25 @@ function initPlaylist() {
Event.observe(document,'click',GlobalEvents.click);
Event.observe('edit_playlist_name','keypress',EventHandler.editPlaylistNameKeyPress);
+ Event.observe('songs_data','click',SelectedRows.click);
// Firefox remebers the search box value on page reload
Field.clear('search');
g_myLiveGrid = new Rico.LiveGrid('songs_data',20,1000,'',{prefetchBuffer: false});
}
+var Spinner = {
+ count: 0,
+ incRequestCount: function () {
+ Spinner.count++;
+ $('spinner').style.visibility = 'visible';
+ },
+ decRequestCount: function () {
+ Spinner.count--;
+ if (Spinner.count <= 0) {
+ Spinner.count = 0;
+ $('spinner').style.visibility = 'hidden';
+ }
+ }
+}
var GlobalEvents = {
_clickListeners: [],
click: function (e) {
@@ -466,30 +482,20 @@ function rsSource(request) {
sourceSelect.value = 1;
}
-function rsSongs(request) {
- var items = $A(request.responseXML.getElementsByTagName('dmap.listingitem'));
- var songsTable = $('songs_data');
- Element.removeChildren(songsTable);
- items.each(function (item) {
- var tr = document.createElement('tr');
- var time = parseInt(Element.textContent(item.getElementsByTagName('daap.songtime')[0]));
- time = Math.round(time / 1000);
- var seconds = time % 60;
-
- seconds = (seconds < 10) ? '0'+seconds : seconds;
- timeString = Math.floor(time/60)+ ':' + seconds;
-
- tr.appendChild(Builder.node('td',{style:'width: 140px;'},Element.textContent(item.getElementsByTagName('dmap.itemname')[0])));
- tr.appendChild(Builder.node('td',{style:'width: 50px;'},timeString));
- tr.appendChild(Builder.node('td',{style:'width: 120px;'},Element.textContent(item.getElementsByTagName('daap.songartist')[0])));
- tr.appendChild(Builder.node('td',{style:'width: 120px;'},Element.textContent(item.getElementsByTagName('daap.songalbum')[0])));
- tr.appendChild(Builder.node('td',{style:'width: 100px;'},Element.textContent(item.getElementsByTagName('daap.songgenre')[0])));
-
- songsTable.appendChild(tr);
- });
- Query.busy = false;
+SelectedRows = {
+ songId: [],
+ click: function(e) {
+ var tr = Event.findElement(e,'tr');
+ if (tr.hasAttribute('songid')) {
+ SelectedRows.songId[tr.getAttribute('songid')] = 1;
+ tr.style.backgroundColor = '#8CACBB';
+ }
+ Event.stop(e);
+ },
+ isSelected: function (songId) {
+ return SelectedRows.songId[songId];
+ }
}
-
Object.extend(Element, {
removeChildren: function(element) {
while(element.hasChildNodes()) {