diff --git a/_layouts/basic.html b/_layouts/basic.html
index 57d08ef..33991ec 100644
--- a/_layouts/basic.html
+++ b/_layouts/basic.html
@@ -20,6 +20,11 @@
+ {% if page.custom_scripts %}
+ {% for script in page.custom_scripts %}
+
+ {% endfor %}
+ {% endif %}
{% if site.data.deployment.has_internet %}
diff --git a/_scss/pages/home.scss b/_scss/pages/home.scss
index 4b33b5b..39d98c6 100644
--- a/_scss/pages/home.scss
+++ b/_scss/pages/home.scss
@@ -367,6 +367,9 @@ h1.homepage-title {
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
+.filerow.template {
+ display: none;
+}
.logo-filerow {
display: flex;
diff --git a/assets/js/butter-dir-listing.js b/assets/js/butter-dir-listing.js
index 6bea0ae..cf984cf 100644
--- a/assets/js/butter-dir-listing.js
+++ b/assets/js/butter-dir-listing.js
@@ -120,8 +120,7 @@ function extractDirectoryListing(doc) {
return { files, folders };
}
-window.onload = function () {
- // Example usage
+function renderDirectory() {
const { files, folders } = extractDirectoryListing(window.document);
const listDiv = document.querySelector('div.list');
@@ -201,4 +200,10 @@ window.onload = function () {
// do the insertion
listDiv.parentNode.insertBefore(fileListing, listDiv);
+}
+
+window.onload = function () {
+ if (window.location.pathname.includes(usbRoot)) {
+ renderDirectory();
+ }
}
\ No newline at end of file
diff --git a/assets/js/main.js b/assets/js/main.js
index c915928..371ef59 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -36,11 +36,8 @@ if (btnModal) {
}
function renderPlaceholders() {
- const usbButter = document.querySelector('#usb-butter');
- const appstoreCard = document.querySelector('#appstore-card');
- const mapsCard = document.querySelector('#maps-card');
- const conditionalCards = [appstoreCard, usbButter, mapsCard];
- for (let card of conditionalCards) {
+ const discovered = document.querySelectorAll(".hidden-card");
+ for (let card of discovered) {
fetch(card.dataset.url)
.then(response => {
if (response.status === 200) {
@@ -57,5 +54,4 @@ function renderPlaceholders() {
}
}
-
renderPlaceholders();
\ No newline at end of file
diff --git a/assets/js/maps.js b/assets/js/maps.js
new file mode 100644
index 0000000..409269a
--- /dev/null
+++ b/assets/js/maps.js
@@ -0,0 +1,47 @@
+// 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/');
\ No newline at end of file
diff --git a/maps/index.html b/maps/index.html
index 6aefe68..1e697b1 100644
--- a/maps/index.html
+++ b/maps/index.html
@@ -1,6 +1,7 @@
---
layout: informational
breadcrumb: "Offline Maps"
+custom_scripts: ["maps.js", "butter-dir-listing.js"]
---

@@ -26,46 +27,7 @@ breadcrumb: "Offline Maps"
{% t maps.sections.section2.open_with_cta %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Angola_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Angola_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Angola" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Virgin-islands-british_centralamerica_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Virgin-islands-british_centralamerica_2.obf.zip" icon_filename="ext-pbf.svg" display_name="British Virgin Islands" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Colombia_southamerica_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Colombia_southamerica_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Colombia" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Swaziland_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Swaziland_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Eswatini (Swaziland)" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Malawi_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Malawi_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Malawi" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Mexico_mexico_northamerica_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Mexico_mexico_northamerica_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Mexico" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Mozambique_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Mozambique_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Mozambique" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Namibia_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Namibia_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Namibia" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Puerto-rico_centralamerica_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Puerto-rico_centralamerica_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Puerto Rico" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "South-africa_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="South-africa_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="South Africa" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Virgin-islands-us_centralamerica_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Virgin-islands-us_centralamerica_2.obf.zip" icon_filename="ext-pbf.svg" display_name="US Virgin Islands" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Venezuela_southamerica_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Venezuela_southamerica_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Venezuela" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Zambia_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Zambia_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Zambia" %}
-
- {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "Zimbabwe_africa_2.obf.zip" %}
- {% include filerow.html href=obf_url file_name="Zimbabwe_africa_2.obf.zip" icon_filename="ext-pbf.svg" display_name="Zimbabwe" %}
+
+ {% assign obf_url= site.basurl | append: "/fdroid/repo/" | append: "FILENAME" %}
+ {% include filerow.html id="filerow-template" href=obf_url file_name="FILENAME" icon_filename="ext-pbf.svg" display_name="FILESTEM" %}
\ No newline at end of file