add "share" link

This commit is contained in:
Matt Walsh
2024-01-08 10:12:52 -06:00
parent 81561f75a1
commit 53ad8eb317
3 changed files with 82 additions and 37 deletions

View File

@@ -4,6 +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';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
init(); init();
@@ -176,7 +177,7 @@ const enterFullScreen = () => {
// Supports most browsers and their versions. // Supports most browsers and their versions.
const requestMethod = element.requestFullScreen || element.webkitRequestFullScreen const requestMethod = element.requestFullScreen || element.webkitRequestFullScreen
|| element.mozRequestFullScreen || element.msRequestFullscreen; || element.mozRequestFullScreen || element.msRequestFullscreen;
if (requestMethod) { if (requestMethod) {
// Native full screen. // Native full screen.
@@ -238,14 +239,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;
} }
}; };
@@ -297,41 +298,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

@@ -0,0 +1,40 @@
document.addEventListener('DOMContentLoaded', () => init());
const init = () => {
// add action to existing link
document.querySelector('#share-link').addEventListener('click', createLink);
};
const createLink = (e) => {
// cancel default event (click on hyperlink)
e.preventDefault();
// get all checkboxes on page
const checkboxes = document.querySelectorAll('input[type=checkbox]');
// list to receive checkbox statuses
const queryStringElements = {};
[...checkboxes].forEach((elem) => {
if (elem?.id) {
queryStringElements[elem.id] = elem?.checked ?? false;
}
});
// add the location string
queryStringElements.txtAddress = document.querySelector('#txtAddress')?.value ?? '';
const queryString = (new URLSearchParams(queryStringElements)).toString();
const url = new URL(`?${queryString}`, document.location.href);
console.log(queryStringElements);
console.log(queryString);
console.log(url.toString());
};
const readLink = false;
export {
createLink,
readLink,
};

View File

@@ -151,6 +151,10 @@
<div id='settings'> <div id='settings'>
</div> </div>
<div class='info'>
<a href='' id='share-link'>Share this configuration</a>
</div>
<div id="divInfo"> <div id="divInfo">
Location: <span id="spanCity"></span> <span id="spanState"></span><br /> Location: <span id="spanCity"></span> <span id="spanState"></span><br />
Station Id: <span id="spanStationId"></span><br /> Station Id: <span id="spanStationId"></span><br />