ws4kp-linhanced/server/scripts/modules/share.mjs

58 lines
1.6 KiB
JavaScript
Raw Normal View History

2024-01-08 10:12:52 -06:00
document.addEventListener('DOMContentLoaded', () => init());
const init = () => {
// add action to existing link
document.querySelector('#share-link').addEventListener('click', createLink);
};
2024-04-11 23:42:51 -05:00
const createLink = async (e) => {
2024-01-08 10:12:52 -06:00
// 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
2024-04-11 23:42:51 -05:00
queryStringElements.latLonQuery = localStorage.getItem('latLonQuery');
queryStringElements.latLon = localStorage.getItem('latLon');
2024-01-08 10:12:52 -06:00
const queryString = (new URLSearchParams(queryStringElements)).toString();
const url = new URL(`?${queryString}`, document.location.href);
console.log(queryStringElements);
console.log(queryString);
console.log(url.toString());
2024-04-11 23:42:51 -05:00
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);
}
2024-01-08 10:12:52 -06:00
};
const parseQueryString = () => {
// return memoized result
if (parseQueryString.params) return parseQueryString.params;
2024-04-11 23:42:51 -05:00
const urlSearchParams = new URLSearchParams(window.location.search);
// memoize result
parseQueryString.params = Object.fromEntries(urlSearchParams.entries());
return parseQueryString.params;
2024-04-11 23:42:51 -05:00
};
2024-01-08 10:12:52 -06:00
export {
createLink,
parseQueryString,
2024-01-08 10:12:52 -06:00
};