butter-kanglam-ui/assets/js/maps.js
2025-02-18 15:14:36 -06:00

47 lines
No EOL
1.6 KiB
JavaScript

// Checks to see what map files exist at /usb-butter/osm-map-files/ and displays them
// using the template hidden in the page
const getMaps = async (folder_href) => {
async function populateSpan(response) {
if (!response.ok) {
console.error("Failed to fetch " + folder_href);
return;
}
const text = await response.text();
const doc = new DOMParser().parseFromString(text, 'text/html');
const { files, folders } = extractDirectoryListing(doc);
renderMaps(files);
}
const response = fetch(folder_href).then(populateSpan);
}
function getOsmObfDisplayName(name) {
const region = name.split('_')[0];
const words = region.split('-');
for (let i = 0; i < words.length; i++) {
words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
}
return words.join(" ");
}
function renderMaps(files) {
template = document.getElementById('filerow-template');
fileList = template.parentElement;
for (let file of files) {
let clone = template.cloneNode(true);
const links = clone.querySelectorAll('a');
for (let link of links) {
link.href = '/usb-butter/osm-map-files/' + file.href;
link.download = file.name
}
const upperText = clone.querySelector('.upper-text');
const lowerText = clone.querySelector('.lower-text');
upperText.textContent = getOsmObfDisplayName(file.name);
lowerText.textContent = file.name;
fileList.appendChild(clone);
clone.removeAttribute('id');
clone.classList.remove("template");
}
}
getMaps('/usb-butter/osm-map-files/');