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 @@
-

Artists

-
    +
    +
    +

    Artists

    +
    +
    +
      +
      +
      -

      Albums

      -
        +
        +
        +

        Albums

        +
        +
        +
          +
          +
          -
          -

          Tracks

          - +
          +
          +

          Tracks

          +
          +
          + + + + + + + + + + + + +
          TrackArtistTimeAlbum
          +
          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); }