diff --git a/webclient/index.html b/webclient/index.html index ed45e37..a00351d 100755 --- a/webclient/index.html +++ b/webclient/index.html @@ -212,20 +212,50 @@
-

Artists

-
    +
    +
    +

    Artists

    +
    +
    +
      +
      +
      -

      Albums

      -
        +
        +
        +

        Albums

        +
        +
        +
          +
          +
          - -
          +--> +

          Tracks

            diff --git a/webclient/js/library.js b/webclient/js/library.js index 34f5a0d..29814d8 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']; @@ -44,71 +41,101 @@ 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 - //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 : ''; - var albums = (results.albums) ? results.albums : ''; - if ((tracks == '') && (artists == '') && (albums == '')) { - toast('No results', 1500, true); + customTracklists['trackresultscache'] = results.tracks; + + if (emptyResult) { + toast('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('
          • ', '
          • '); } - if (artists[i]) { - 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 = ''; -// console.log(albums.length); - for (var i = 0; i < albums.length; i++) { - child += '
          • '; - child += "

            " + albums[i].name + "

            "; - for (var j = 0; j < albums[i].artists.length; j++) { - if (albums[i].artists[j]) { - child += albums[i].artists[j].name + " "; - } - } - child += '

          • '; - } + + // 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 += theme(pattern, tokens); } - $(SEARCH_ALBUM_TABLE).html(child); -// $(SEARCH_ALBUM_TABLE).listview('refresh'); + + // Inject list items, refresh listview and hide superfluous items. + $(SEARCH_ALBUM_TABLE).html(child).listview('refresh').find('.overflow').hide(); $('#expandsearch').show(); -// console.log(results.tracks); + // Track results playlisttotable(results.tracks, SEARCH_TRACK_TABLE, 'trackresultscache'); + setSongInfo(); showLoading(false); } @@ -207,4 +234,3 @@ function showAlbum(uri) { setSongInfo(); return false; } -