generate and parse querystring

This commit is contained in:
Matt Walsh
2024-04-11 23:42:51 -05:00
parent 5d00cf4608
commit 941bcacfad
8 changed files with 78 additions and 50 deletions

View File

@@ -4,7 +4,7 @@ import {
message as navMessage, isPlaying, resize, resetStatuses, latLonReceived, stopAutoRefreshTimer, registerRefreshData, message as navMessage, isPlaying, resize, resetStatuses, latLonReceived, stopAutoRefreshTimer, registerRefreshData,
} from './modules/navigation.mjs'; } from './modules/navigation.mjs';
import { round2 } from './modules/utils/units.mjs'; import { round2 } from './modules/utils/units.mjs';
import { createLink, readLink } from './modules/share.mjs'; import { readLink } from './modules/share.mjs';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
init(); init();
@@ -82,10 +82,15 @@ const init = () => {
return false; return false;
}; };
// Auto load the previous query // attempt to parse the url parameters
const query = localStorage.getItem('latLonQuery'); const parsedParameters = readLink();
const latLon = localStorage.getItem('latLon');
const fromGPS = localStorage.getItem('latLonFromGPS'); const loadFromParsed = parsedParameters.latLonQuery && parsedParameters.latLon;
// Auto load the parsed parameters and fall back to the previous query
const query = parsedParameters.latLonQuery ?? localStorage.getItem('latLonQuery');
const latLon = parsedParameters.latLon ?? localStorage.getItem('latLon');
const fromGPS = localStorage.getItem('latLonFromGPS') && !loadFromParsed;
if (query && latLon && !fromGPS) { if (query && latLon && !fromGPS) {
const txtAddress = document.querySelector(TXT_ADDRESS_SELECTOR); const txtAddress = document.querySelector(TXT_ADDRESS_SELECTOR);
txtAddress.value = query; txtAddress.value = query;
@@ -239,14 +244,14 @@ const loadData = (_latLon, haveDataCallback) => {
const swipeCallBack = (direction) => { const swipeCallBack = (direction) => {
switch (direction) { switch (direction) {
case 'left': case 'left':
btnNavigateNextClick(); btnNavigateNextClick();
break; break;
case 'right': case 'right':
default: default:
btnNavigatePreviousClick(); btnNavigatePreviousClick();
break; break;
} }
}; };
@@ -298,41 +303,41 @@ const documentKeydown = (e) => {
if (document.fullscreenElement || document.activeElement === document.body) { if (document.fullscreenElement || document.activeElement === document.body) {
switch (key) { switch (key) {
case ' ': // Space case ' ': // Space
// don't scroll // don't scroll
e.preventDefault(); e.preventDefault();
btnNavigatePlayClick(); btnNavigatePlayClick();
return false; return false;
case 'ArrowRight': case 'ArrowRight':
case 'PageDown': case 'PageDown':
// don't scroll // don't scroll
e.preventDefault(); e.preventDefault();
btnNavigateNextClick(); btnNavigateNextClick();
return false; return false;
case 'ArrowLeft': case 'ArrowLeft':
case 'PageUp': case 'PageUp':
// don't scroll // don't scroll
e.preventDefault(); e.preventDefault();
btnNavigatePreviousClick(); btnNavigatePreviousClick();
return false; return false;
case 'ArrowUp': // Home case 'ArrowUp': // Home
e.preventDefault(); e.preventDefault();
btnNavigateMenuClick(); btnNavigateMenuClick();
return false; return false;
case '0': // "O" Restart case '0': // "O" Restart
btnNavigateRefreshClick(); btnNavigateRefreshClick();
return false; return false;
case 'F': case 'F':
case 'f': case 'f':
btnFullScreenClick(); btnFullScreenClick();
return false; return false;
default: default:
} }
} }
return false; return false;

View File

@@ -5,7 +5,7 @@ const init = () => {
document.querySelector('#share-link').addEventListener('click', createLink); document.querySelector('#share-link').addEventListener('click', createLink);
}; };
const createLink = (e) => { const createLink = async (e) => {
// cancel default event (click on hyperlink) // cancel default event (click on hyperlink)
e.preventDefault(); e.preventDefault();
// get all checkboxes on page // get all checkboxes on page
@@ -21,7 +21,8 @@ const createLink = (e) => {
}); });
// add the location string // add the location string
queryStringElements.txtAddress = document.querySelector('#txtAddress')?.value ?? ''; queryStringElements.latLonQuery = localStorage.getItem('latLonQuery');
queryStringElements.latLon = localStorage.getItem('latLon');
const queryString = (new URLSearchParams(queryStringElements)).toString(); const queryString = (new URLSearchParams(queryStringElements)).toString();
@@ -30,9 +31,22 @@ const createLink = (e) => {
console.log(queryStringElements); console.log(queryStringElements);
console.log(queryString); console.log(queryString);
console.log(url.toString()); console.log(url.toString());
try {
await navigator.clipboard.writeText(url.toString());
const confirmSpan = document.querySelector('#share-link-copied');
confirmSpan.style.display = 'inline';
setTimeout(() => {
confirmSpan.style.display = 'none';
}, 5000);
} catch (error) {
console.error(error);
}
}; };
const readLink = false; const readLink = () => {
const urlSearchParams = new URLSearchParams(window.location.search);
return Object.fromEntries(urlSearchParams.entries());
};
export { export {
createLink, createLink,

View File

@@ -1,8 +1,8 @@
// rewrite some urls for local server // rewrite some urls for local server
const rewriteUrl = (_url) => { const rewriteUrl = (_url) => {
let url = _url; let url = _url;
url = url.replace('https://api.weather.gov/', window.location.href); url = url.replace('https://api.weather.gov/', `${window.location.protocol}//${window.location.host}/`);
url = url.replace('https://www.cpc.ncep.noaa.gov/', window.location.href); url = url.replace('https://www.cpc.ncep.noaa.gov/', `${window.location.protocol}//${window.location.host}/`);
return url; return url;
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,5 @@
@use 'shared/_utils'as u; @use 'shared/_utils'as u;
@use 'shared/_colors'as c;
@font-face { @font-face {
font-family: "Star4000"; font-family: "Star4000";
@@ -698,3 +699,8 @@ body {
} }
} }
} }
#share-link-copied {
color: c.$title-color;
display: none;
}

View File

@@ -152,7 +152,7 @@
</div> </div>
<div class='info'> <div class='info'>
<a href='' id='share-link'>Share this configuration</a> <a href='' id='share-link'>Copy Configuration Link</a> <span id="share-link-copied">Link copied to clipboard!</span>
</div> </div>
<div id="divInfo"> <div id="divInfo">

View File

@@ -53,6 +53,9 @@
}, },
"files.exclude": {}, "files.exclude": {},
"files.eol": "\n", "files.eol": "\n",
"editor.formatOnSave": true, "editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}, },
} }