diff --git a/server/scripts/index.mjs b/server/scripts/index.mjs index 5cb2c9d..6357725 100644 --- a/server/scripts/index.mjs +++ b/server/scripts/index.mjs @@ -4,6 +4,7 @@ import { message as navMessage, isPlaying, resize, resetStatuses, latLonReceived, stopAutoRefreshTimer, registerRefreshData, } from './modules/navigation.mjs'; import { round2 } from './modules/utils/units.mjs'; +import { createLink, readLink } from './modules/share.mjs'; document.addEventListener('DOMContentLoaded', () => { init(); @@ -176,7 +177,7 @@ const enterFullScreen = () => { // Supports most browsers and their versions. const requestMethod = element.requestFullScreen || element.webkitRequestFullScreen - || element.mozRequestFullScreen || element.msRequestFullscreen; + || element.mozRequestFullScreen || element.msRequestFullscreen; if (requestMethod) { // Native full screen. @@ -238,14 +239,14 @@ const loadData = (_latLon, haveDataCallback) => { const swipeCallBack = (direction) => { switch (direction) { - case 'left': - btnNavigateNextClick(); - break; + case 'left': + btnNavigateNextClick(); + break; - case 'right': - default: - btnNavigatePreviousClick(); - break; + case 'right': + default: + btnNavigatePreviousClick(); + break; } }; @@ -297,41 +298,41 @@ const documentKeydown = (e) => { if (document.fullscreenElement || document.activeElement === document.body) { switch (key) { - case ' ': // Space - // don't scroll - e.preventDefault(); - btnNavigatePlayClick(); - return false; + case ' ': // Space + // don't scroll + e.preventDefault(); + btnNavigatePlayClick(); + return false; - case 'ArrowRight': - case 'PageDown': - // don't scroll - e.preventDefault(); - btnNavigateNextClick(); - return false; + case 'ArrowRight': + case 'PageDown': + // don't scroll + e.preventDefault(); + btnNavigateNextClick(); + return false; - case 'ArrowLeft': - case 'PageUp': - // don't scroll - e.preventDefault(); - btnNavigatePreviousClick(); - return false; + case 'ArrowLeft': + case 'PageUp': + // don't scroll + e.preventDefault(); + btnNavigatePreviousClick(); + return false; - case 'ArrowUp': // Home - e.preventDefault(); - btnNavigateMenuClick(); - return false; + case 'ArrowUp': // Home + e.preventDefault(); + btnNavigateMenuClick(); + return false; - case '0': // "O" Restart - btnNavigateRefreshClick(); - return false; + case '0': // "O" Restart + btnNavigateRefreshClick(); + return false; - case 'F': - case 'f': - btnFullScreenClick(); - return false; + case 'F': + case 'f': + btnFullScreenClick(); + return false; - default: + default: } } return false; diff --git a/server/scripts/modules/share.mjs b/server/scripts/modules/share.mjs new file mode 100644 index 0000000..64d9893 --- /dev/null +++ b/server/scripts/modules/share.mjs @@ -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, +}; diff --git a/views/index.ejs b/views/index.ejs index 18d5fdb..c0ad806 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -151,6 +151,10 @@
+
+ Share this configuration +
+
Location:
Station Id: