diff --git a/webclient/index.html b/webclient/index.html
index 6ce348d..e67cef5 100755
--- a/webclient/index.html
+++ b/webclient/index.html
@@ -200,22 +200,47 @@
-
-
Tracks
-
+
+
+
Tracks
+
+
+
+
+
+ |
+ Track |
+ Artist |
+ Time |
+ Album |
+
+
+
+
+
+
diff --git a/webclient/js/library.js b/webclient/js/library.js
index ffd88cb..db3419e 100755
--- a/webclient/js/library.js
+++ b/webclient/js/library.js
@@ -22,9 +22,6 @@ function initSearch() {
document.activeElement.blur();
$("input").blur();
- $('#artistresulttable').empty();
- $('#albumresulttable').empty();
- $('#trackresulttable').empty();
delete customTracklists['allresultscache'];
delete customTracklists['artistresultscache'];
delete customTracklists['albumresultscache'];
@@ -41,71 +38,128 @@ function initSearch() {
* process results of a search
*********************************************************/
function processSearchResults(resultArr) {
- $(SEARCH_TRACK_TABLE).empty();
- $(SEARCH_ARTIST_TABLE).empty();
- $(SEARCH_ALBUM_TABLE).empty();
- //get the right result
- //depends on versioon of mopidy: 0 = 0.14+ 1 = 0.13-
- // var results = resultArr[0];
- //add complete array
- console.log(resultArr);
- //results = tracks from spotify
- var results = resultArr[0];
- //add tracks from local search
- if (resultArr[1].tracks) {
- results.tracks = resultArr[1].tracks.concat(results.tracks);
- }
- if (resultArr[1].artists) {
- results.artists = resultArr[1].artists.concat(results.artists);
- }
- if (resultArr[1].albums) {
- results.albums = resultArr[1].albums.concat(results.albums);
+ // Merge results from different backends.
+ var results = {'tracks': [], 'artists': [], 'albums': []};
+ var emptyResult = true;
+
+ console.log(resultArr, 'resultArr');
+
+ for (var i = 0; i < resultArr.length; ++i) {
+ for (var prop in results) {
+ if (resultArr[i][prop] && resultArr[i][prop].length) {
+ results[prop] = results[prop].concat(resultArr[i][prop]);
+ emptyResult = false;
+ }
+ }
}
- var tracks = (results.tracks) ? results.tracks : '';
- customTracklists['trackresultscache'] = tracks;
- var artists = (results.artists) ? results.artists : '';
- console.log(artists);
- var albums = (results.albums) ? results.albums : '';
- if ((tracks == '') && (artists == '') && (albums == '')) {
+ customTracklists['trackresultscache'] = results.tracks;
+
+ if (emptyResult) {
alert('No results');
showLoading(false);
return false;
}
+
$("#searchresults").show();
+
+ // Returns a string where {x} in template is replaced by tokens[x].
+ function theme(template, tokens) {
+ return template.replace(/{[^}]+}/g, function(match) {
+ return tokens[match.slice(1,-1)];
+ });
+ }
+
+ // 'Show more' pattern
+ var showMorePattern = 'Show {count} more';
+
+ // Artist results
var child = '';
- for (var i = 0; i < artists.length; i++) {
- child += ' 5) {
+ child += theme(showMorePattern, {'count': results.artists.length - i});
+ pattern = pattern.replace('', '');
}
- child += '">' + artists[i].name + "";
+
+ child += theme(pattern, tokens);
}
- $(SEARCH_ARTIST_TABLE).html(child);
-// $(SEARCH_ARTIST_TABLE).listview('refresh');
+
+ // Inject list items, refresh listview and hide superfluous items.
+ $(SEARCH_ARTIST_TABLE).html(child).listview('refresh').find('.overflow').hide();
+
+ // Album results
child = '';
+ pattern = '';
+ pattern += '{albumName}
';
+ pattern += '{artistName} ({albumYear})
';
+ pattern += '';
- for (var i = 0; i < albums.length; i++) {
- child += '';
- child += "" + albums[i].name + "
";
- for (var j = 0; j < albums[i].artists.length; j++) {
- child += albums[i].artists[j].name + " ";
+
+ // Add 'Show all' item after a certain number of hits.
+ if (i == 4 && results.albums.length > 5) {
+ child += theme(showMorePattern, {'count': results.albums.length - i});
+ pattern = pattern.replace('
', '');
}
- child += '';
+
+ child += theme(pattern, tokens);
}
- $(SEARCH_ALBUM_TABLE).html(child);
-// $(SEARCH_ALBUM_TABLE).listview('refresh');
- $('#expandsearch').show();
+ // Inject list items, refresh listview and hide superfluous items.
+ $(SEARCH_ALBUM_TABLE).html(child).listview('refresh').find('.overflow').hide();
+
+ // Track results
+ child = '';
+ pattern = '| ';
+ pattern += '';
+ pattern += ' | {track} | {artist} | {time} | {album} |
';
+
+ //playlisttotable(results.tracks, SEARCH_TRACK_TABLE, 'trackresultscache');
+ for (var i = 0; i < results.tracks.length; ++i) {
+ popupData[results.tracks[i].uri] = results.tracks[i];
+
+ tokens = {
+ 'track': results.tracks[i].name,
+ 'artist': '',
+ 'time': timeFromSeconds(results.tracks[i].length / 1000),
+ 'album': results.tracks[i].album.name,
+ 'listuri': undefined,
+ 'trackuri': results.tracks[i].uri,
+ 'domId': SEARCH_TRACK_TABLE.substr(1) + '-' + results.tracks[i].uri,
+ };
+
+ var as = [];
+ for (var j = 0; j < results.tracks[i].artists.length; ++j) {
+ as.push(results.tracks[i].artists[j].name);
+ }
+ tokens.artist = as.join(', ');
+
+ child += theme(pattern, tokens);
+ }
+
+ $(SEARCH_TRACK_TABLE).children('tbody').html(child);
+ $(SEARCH_TRACK_TABLE).find('tbody tr td a').button();
+ $(SEARCH_TRACK_TABLE).table('refresh');
-//console.log(results.tracks);
- playlisttotable(results.tracks, SEARCH_TRACK_TABLE, 'trackresultscache');
setSongInfo();
showLoading(false);
}