diff --git a/server/scripts/index.mjs b/server/scripts/index.mjs index a8e9393..8c92769 100644 --- a/server/scripts/index.mjs +++ b/server/scripts/index.mjs @@ -4,7 +4,7 @@ import { message as navMessage, isPlaying, resize, resetStatuses, latLonReceived, stopAutoRefreshTimer, registerRefreshData, } from './modules/navigation.mjs'; import { round2 } from './modules/utils/units.mjs'; -import { readLink } from './modules/share.mjs'; +import { parseQueryString } from './modules/share.mjs'; document.addEventListener('DOMContentLoaded', () => { init(); @@ -83,7 +83,7 @@ const init = () => { }; // attempt to parse the url parameters - const parsedParameters = readLink(); + const parsedParameters = parseQueryString(); const loadFromParsed = parsedParameters.latLonQuery && parsedParameters.latLon; diff --git a/server/scripts/modules/share.mjs b/server/scripts/modules/share.mjs index 793045a..a62e1e3 100644 --- a/server/scripts/modules/share.mjs +++ b/server/scripts/modules/share.mjs @@ -43,12 +43,16 @@ const createLink = async (e) => { } }; -const readLink = () => { +const parseQueryString = () => { + // return memoized result + if (parseQueryString.params) return parseQueryString.params; const urlSearchParams = new URLSearchParams(window.location.search); - return Object.fromEntries(urlSearchParams.entries()); + // memoize result + parseQueryString.params = Object.fromEntries(urlSearchParams.entries()); + return parseQueryString.params; }; export { createLink, - readLink, + parseQueryString, }; diff --git a/server/scripts/modules/weatherdisplay.mjs b/server/scripts/modules/weatherdisplay.mjs index 0c89bfa..247d5d0 100644 --- a/server/scripts/modules/weatherdisplay.mjs +++ b/server/scripts/modules/weatherdisplay.mjs @@ -5,6 +5,7 @@ import { DateTime } from '../vendor/auto/luxon.mjs'; import { msg, displayNavMessage, isPlaying, updateStatus, timeZone, } from './navigation.mjs'; +import { parseQueryString } from './share.mjs'; class WeatherDisplay { constructor(navId, elemId, name, defaultEnabled) { @@ -50,8 +51,15 @@ class WeatherDisplay { // no checkbox if progress if (this.elemId === 'progress') return false; - // get the saved status of the checkbox - let savedStatus = window.localStorage.getItem(`display-enabled: ${this.elemId}`); + // get url provided state + const urlValue = parseQueryString()?.[`${this.elemId}-checkbox`]; + let urlState; + if (urlValue !== undefined) { + urlState = urlValue === 'true'; + } + + // get the saved status of the checkbox, but defer to a value set in the url + let savedStatus = urlState ?? window.localStorage.getItem(`display-enabled: ${this.elemId}`); if (savedStatus === null) savedStatus = defaultEnabled; this.isEnabled = !!((savedStatus === 'true' || savedStatus === true));