Ignore calls to locationHashChanged untill page has finished loading.

Fixes #230.
This commit is contained in:
jcass 2017-02-18 09:04:11 +02:00
parent bb2073b404
commit e3eddf2e28
5 changed files with 25 additions and 17 deletions

View File

@ -130,6 +130,7 @@ v2.4.0 (UNRELEASED)
- The last scroll position is now always saved when navigating between pages or browsing the library. - The last scroll position is now always saved when navigating between pages or browsing the library.
(Fixes: `#73 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/73>`_, `#93 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/93>`_). (Fixes: `#73 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/73>`_, `#93 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/93>`_).
- Playlists will now list tracks even if they are no longer available in the library. (Fixes: `#226 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/226>`_). - Playlists will now list tracks even if they are no longer available in the library. (Fixes: `#226 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/226>`_).
- Refreshing album or artist info pages no longer raises an exception. (Fixes: `#230 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/230>`_).
v2.3.0 (2016-05-15) v2.3.0 (2016-05-15)
------------------- -------------------

View File

@ -140,10 +140,10 @@
<a href="#" onclick="return controls.playTracks(ADD_ALL_BOTTOM, mopidy);">Add All to Bottom of Queue</a> <a href="#" onclick="return controls.playTracks(ADD_ALL_BOTTOM, mopidy);">Add All to Bottom of Queue</a>
</li> </li>
<li class="popupAlbumLi"> <li class="popupAlbumLi">
<a href="#" onclick="showAlbumPopup('#popupTracks')">Show Album <span class="popupAlbumName"></span></a> <a href="#" onclick="showAlbumPopup('#popupTracks', mopidy)">Show Album <span class="popupAlbumName"></span></a>
</li> </li>
<li class="popupArtistsLi"> <li class="popupArtistsLi">
<a href="#" onclick="showArtist()" class="popupArtistHref">Show Artist <span class="popupArtistName"></span> <a href="#" onclick="library.showArtist(null, mopidy)" class="popupArtistHref">Show Artist <span class="popupArtistName"></span>
</a> </a>
</li> </li>
<div data-role="collapsible" data-icon="false" data-inset="false" class="popupArtistsDiv"> <div data-role="collapsible" data-icon="false" data-inset="false" class="popupArtistsDiv">
@ -170,10 +170,10 @@
<a href="#" onclick="return controls.removeTrack('', mopidy);">Remove from Queue</a> <a href="#" onclick="return controls.removeTrack('', mopidy);">Remove from Queue</a>
</li> </li>
<li class="popupAlbumLi"> <li class="popupAlbumLi">
<a href="#" onclick="showAlbumPopup('#popupQueue')">Show Album <span class="popupAlbumName"></span></a> <a href="#" onclick="showAlbumPopup('#popupQueue', mopidy)">Show Album <span class="popupAlbumName"></span></a>
</li> </li>
<li class="popupArtistsLi"> <li class="popupArtistsLi">
<a href="#" onclick="showArtist()" class="popupArtistHref">Show Artist <span class="popupArtistName"></span> <a href="#" onclick="library.showArtist(null, mopidy)" class="popupArtistHref">Show Artist <span class="popupArtistName"></span>
</a> </a>
</li> </li>
<div data-role="collapsible" data-icon="false" data-inset="false" class="popupArtistsDiv"> <div data-role="collapsible" data-icon="false" data-inset="false" class="popupArtistsDiv">

View File

@ -305,7 +305,7 @@ function renderSongLiDivider (previousTrack, track, nextTrack, target) {
if (!hasSameAlbum(previousTrack, track) && hasSameAlbum(track, nextTrack)) { if (!hasSameAlbum(previousTrack, track) && hasSameAlbum(track, nextTrack)) {
// Large divider with album cover. // Large divider with album cover.
html += html +=
'<li class="albumdivider"><a href="#" onclick="return library.showAlbum(\'' + track.album.uri + '\');">' + '<li class="albumdivider"><a href="#" onclick="return library.showAlbum(\'' + track.album.uri + '\', mopidy);">' +
'<img id="' + getjQueryID(target + '-cover', track.uri) + '" class="artistcover" width="30" height="30"/>' + '<img id="' + getjQueryID(target + '-cover', track.uri) + '" class="artistcover" width="30" height="30"/>' +
'<h1>' + track.album.name + '</h1><p>' + '<h1>' + track.album.name + '</h1><p>' +
renderSongLiTrackArtists(track) + '</p></a></li>' renderSongLiTrackArtists(track) + '</p></a></li>'

View File

@ -78,7 +78,7 @@ function setSongInfo (data) {
if (data.track.artists) { if (data.track.artists) {
for (var j = 0; j < data.track.artists.length; j++) { for (var j = 0; j < data.track.artists.length; j++) {
artistshtml += '<a href="#" onclick="return library.showArtist(\'' + data.track.artists[j].uri + '\');">' + data.track.artists[j].name + '</a>' artistshtml += '<a href="#" onclick="return library.showArtist(\'' + data.track.artists[j].uri + '\', mopidy);">' + data.track.artists[j].name + '</a>'
artiststext += data.track.artists[j].name artiststext += data.track.artists[j].name
if (j !== data.track.artists.length - 1) { if (j !== data.track.artists.length - 1) {
artistshtml += ', ' artistshtml += ', '
@ -88,7 +88,7 @@ function setSongInfo (data) {
arttmp = artistshtml arttmp = artistshtml
} }
if (data.track.album && data.track.album.name) { if (data.track.album && data.track.album.name) {
$('#modalalbum').html('<a href="#" onclick="return library.showAlbum(\'' + data.track.album.uri + '\');">' + data.track.album.name + '</a>') $('#modalalbum').html('<a href="#" onclick="return library.showAlbum(\'' + data.track.album.uri + '\', mopidy);">' + data.track.album.name + '</a>')
} else { } else {
$('#modalalbum').html('') $('#modalalbum').html('')
} }
@ -132,9 +132,9 @@ function popupTracks (e, listuri, trackuri, tlid) {
$('.popupArtistsDiv').hide() $('.popupArtistsDiv').hide()
if (popupData[trackuri].artists) { if (popupData[trackuri].artists) {
if (popupData[trackuri].artists.length === 1 && popupData[trackuri].artists[0].uri) { if (popupData[trackuri].artists.length === 1 && popupData[trackuri].artists[0].uri) {
child = '<a href="#" onclick="library.showArtist(\'' + popupData[trackuri].artists[0].uri + '\');">Show Artist</a>' child = '<a href="#" onclick="library.showArtist(\'' + popupData[trackuri].artists[0].uri + '\', mopidy);">Show Artist</a>'
$('.popupArtistName').html(popupData[trackuri].artists[0].name) $('.popupArtistName').html(popupData[trackuri].artists[0].name)
$('.popupArtistHref').attr('onclick', 'library.showArtist("' + popupData[trackuri].artists[0].uri + '");') $('.popupArtistHref').attr('onclick', 'library.showArtist(\'' + popupData[trackuri].artists[0].uri + '\', mopidy);')
$('.popupArtistsDiv').hide() $('.popupArtistsDiv').hide()
$('.popupArtistsLi').show() $('.popupArtistsLi').show()
} else { } else {
@ -142,7 +142,7 @@ function popupTracks (e, listuri, trackuri, tlid) {
for (var j = 0; j < popupData[trackuri].artists.length; j++) { for (var j = 0; j < popupData[trackuri].artists.length; j++) {
if (popupData[trackuri].artists[j].uri) { if (popupData[trackuri].artists[j].uri) {
isValidArtistURI = true isValidArtistURI = true
child += '<li><a href="#" onclick="library.showArtist(\'' + popupData[trackuri].artists[j].uri + '\');"><span class="popupArtistName">' + popupData[trackuri].artists[j].name + '</span></a></li>' child += '<li><a href="#" onclick="library.showArtist(\'' + popupData[trackuri].artists[j].uri + '\', mopidy);"><span class="popupArtistName">' + popupData[trackuri].artists[j].name + '</span></a></li>'
} }
} }
if (isValidArtistURI) { if (isValidArtistURI) {
@ -186,7 +186,7 @@ function popupTracks (e, listuri, trackuri, tlid) {
function showAlbumPopup (popupId) { function showAlbumPopup (popupId) {
uri = $(popupId).data('track') uri = $(popupId).data('track')
library.showAlbum(popupData[uri].album.uri) library.showAlbum(popupData[uri].album.uri, mopidy)
} }
/** ******************** /** ********************
@ -364,6 +364,13 @@ function updateStatusOfAll () {
} }
function locationHashChanged () { function locationHashChanged () {
if (!mopidy) {
// Mopidy connection not yet established. User probably clicked 'Refresh' in their
// browser and the page is still loading. We can safely ignore this call as it will
// be invoked again later when the page has finished loading and $(document).ready()
// is triggered.
return false
}
var hash = document.location.hash.split('?') var hash = document.location.hash.split('?')
// remove # // remove #
var divid = hash[0].substr(1) var divid = hash[0].substr(1)
@ -399,12 +406,12 @@ function locationHashChanged () {
break break
case 'artists': case 'artists':
if (uri !== '') { if (uri !== '') {
library.showArtist(uri) library.showArtist(uri, mopidy)
} }
break break
case 'albums': case 'albums':
if (uri !== '') { if (uri !== '') {
library.showAlbum(uri) library.showAlbum(uri, mopidy)
} }
break break
default: // Default footer default: // Default footer

View File

@ -131,7 +131,7 @@
// Artist results // Artist results
var child = '' var child = ''
var template = '<li><a href="#" onclick="return library.showArtist(this.id)" id={id}><i class="{class}"></i> <strong>{name}</strong></a></li>' var template = '<li><a href="#" onclick="return library.showArtist(\'this.id\', mopidy)" id={id}><i class="{class}"></i> <strong>{name}</strong></a></li>'
var tokens var tokens
for (i = 0; i < results.artists.length; i++) { for (i = 0; i < results.artists.length; i++) {
@ -155,7 +155,7 @@
// Album results // Album results
child = '' child = ''
template = '<li><a href="#" onclick="return library.showAlbum(this.id)" id="{albumId}">' template = '<li><a href="#" onclick="return library.showAlbum(\'this.id\', mopidy)" id="{albumId}">'
template += '<h5 data-role="heading"><i class="{class}"></i> {albumName}</h5>' template += '<h5 data-role="heading"><i class="{class}"></i> {albumName}</h5>'
template += '<p data-role="desc">{artistName}</p>' template += '<p data-role="desc">{artistName}</p>'
template += '</a></li>' template += '</a></li>'
@ -269,7 +269,7 @@
return false return false
}, },
showArtist: function (nwuri) { showArtist: function (nwuri, mopidy) {
$('#popupQueue').popup('close') $('#popupQueue').popup('close')
$('#popupTracks').popup('close') $('#popupTracks').popup('close')
$('#controlsmodal').popup('close') $('#controlsmodal').popup('close')
@ -288,7 +288,7 @@
return false return false
}, },
showAlbum: function (uri) { showAlbum: function (uri, mopidy) {
$('#popupQueue').popup('close') $('#popupQueue').popup('close')
$('#popupTracks').popup('close') $('#popupTracks').popup('close')
$('#controlsmodal').popup('close') $('#controlsmodal').popup('close')