diff --git a/server/scripts/modules/navigation.js b/server/scripts/modules/navigation.js index 4f93576..6b2500a 100644 --- a/server/scripts/modules/navigation.js +++ b/server/scripts/modules/navigation.js @@ -183,6 +183,14 @@ const navigation = (() => { // navigate to next or previous const navTo = (direction) => { + // test for a current display + const current = currentDisplay(); + if (!current) { + // special case for no active displays (typically on progress screen) + progress.hideCanvas(); + displays[0].navNext(msg.command.firstFrame); + return; + } if (direction === msg.command.nextFrame) currentDisplay().navNext(); if (direction === msg.command.previousFrame) currentDisplay().navPrev(); }; @@ -208,8 +216,6 @@ const navigation = (() => { // get the current display index or value const currentDisplayIndex = () => { let index = displays.findIndex(display=>display.isActive()); - // if there is no active display, default to the first one - if (index === -1) index = displays.length-1; return index; }; const currentDisplay = () => { @@ -235,6 +241,11 @@ const navigation = (() => { setPlaying(false); navTo(msg.command.previousFrame); break; + case 'menu': + setPlaying(false); + progress.showCanvas(); + hideAllCanvases(); + break; default: console.error(`Unknown navButton ${button}`); } diff --git a/server/scripts/modules/radar.js b/server/scripts/modules/radar.js index d2a5807..56938a2 100644 --- a/server/scripts/modules/radar.js +++ b/server/scripts/modules/radar.js @@ -49,15 +49,20 @@ class Radar extends WeatherDisplay { } // convert to an array of gif urls - const $list = $(radarHtml); - const gifs = $list.find('a[href]').map((i,elem) => elem.innerHTML).get(); + const parser = new DOMParser(); + const xmlDoc = parser.parseFromString(radarHtml, 'text/html'); + const anchors = xmlDoc.getElementsByTagName('a'); + const gifs = []; + for (let idx in anchors) { + gifs.push(anchors[idx].innerHTML); + } // filter for selected urls - let filter = /^Conus_\d/; + let filter = /Conus_\d/; if (weatherParameters.State === 'HI') filter = /hawaii_\d/; // get the last few images - const urlsFull = gifs.filter(gif => gif.match(filter)); + const urlsFull = gifs.filter(gif => gif && gif.match(filter)); const urls = urlsFull.slice(-this.dopplerRadarImageMax); // calculate offsets and sizes diff --git a/server/scripts/modules/weatherdisplay.js b/server/scripts/modules/weatherdisplay.js index 769a7ce..c5019bb 100644 --- a/server/scripts/modules/weatherdisplay.js +++ b/server/scripts/modules/weatherdisplay.js @@ -232,7 +232,7 @@ class WeatherDisplay { // if there was a command the canvas has already been drawn if (navCmd) return; - // refresh the canvas (incase the screen index changed) + // refresh the canvas (in case the screen index changed) if (navCmd) this.drawCanvas(); } hideCanvas() { @@ -304,6 +304,7 @@ class WeatherDisplay { } else { this.screenIndexChange(this.screenIndex); } + this.showCanvas(); } // navigate to previous screen @@ -329,6 +330,7 @@ class WeatherDisplay { } else { this.screenIndexChange(this.screenIndex); } + this.showCanvas(); } // calculate a baseCount from the screen index for the array timings