fix addresses, paths, and lake

This commit is contained in:
zyphlar
2026-04-03 22:27:44 -07:00
parent 3e114b05ac
commit 1bb092d6da
2 changed files with 140 additions and 29 deletions
+99 -20
View File
@@ -205,6 +205,23 @@
.cancel-button.active {
display: inline-block;
}
.upload-row {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.upload-row span.unavailable {
color: #999;
font-size: 13px;
font-style: italic;
}
.upload-row input[type="file"] {
font-size: 13px;
}
</style>
</head>
<body>
@@ -239,30 +256,56 @@
{# County-specific commands #}
<div class="button-grid">
{% if 'lake' in script_config %}
<div class="button-with-checkbox">
<button class="script-button lake" onclick="runScript('{{ script_name }}', 'lake')">
{{ script_name|replace('-', ' ')|title }} (Lake)
</button>
{% if script_name == 'diff-addresses' %}
<label>
<input type="checkbox" id="force-redownload-lake">
Force OSM Redownload
</label>
{% set lake_config = script_config['lake'] %}
{% if lake_config is mapping and lake_config.get('type') == 'upload' %}
<div class="upload-row">
<input type="file" id="upload-lake-{{ script_name }}" accept=".zip">
<button class="script-button lake" onclick="uploadFile('upload-lake-{{ script_name }}', '{{ lake_config['dest'] }}')">
{{ script_name|replace('-', ' ')|title }} (Lake)
</button>
</div>
{% else %}
<div class="button-with-checkbox">
<button class="script-button lake" onclick="runScript('{{ script_name }}', 'lake')">
{{ script_name|replace('-', ' ')|title }} (Lake)
</button>
{% if script_name == 'diff-addresses' %}
<label>
<input type="checkbox" id="force-redownload-lake">
Force OSM Redownload
</label>
{% endif %}
</div>
{% endif %}
</div>
{% endif %}
{% if 'sumter' in script_config %}
<div class="button-with-checkbox">
<button class="script-button sumter" onclick="runScript('{{ script_name }}', 'sumter')">
{{ script_name|replace('-', ' ')|title }} (Sumter)
</button>
{% if script_name == 'diff-addresses' %}
<label>
<input type="checkbox" id="force-redownload-sumter">
Force OSM Redownload
</label>
{% set sumter_config = script_config['sumter'] %}
{% if sumter_config is mapping and sumter_config.get('type') == 'upload' %}
<div class="upload-row">
<input type="file" id="upload-sumter-{{ script_name }}" accept=".zip">
<button class="script-button sumter" onclick="uploadFile('upload-sumter-{{ script_name }}', '{{ sumter_config['dest'] }}')">
{{ script_name|replace('-', ' ')|title }} (Sumter)
</button>
</div>
{% else %}
<div class="button-with-checkbox">
<button class="script-button sumter" onclick="runScript('{{ script_name }}', 'sumter')">
{{ script_name|replace('-', ' ')|title }} (Sumter)
</button>
{% if script_name == 'diff-addresses' %}
<label>
<input type="checkbox" id="force-redownload-sumter">
Force OSM Redownload
</label>
{% endif %}
</div>
{% endif %}
{% else %}
{% if script_name == 'download-county-paths' %}
<div class="upload-row">
<span class="unavailable">Download County Paths (Lake): not available</span>
</div>
{% endif %}
</div>
{% endif %}
</div>
{% endif %}
@@ -440,6 +483,42 @@
btn.disabled = false;
});
}
function uploadFile(inputId, dest) {
const input = document.getElementById(inputId);
if (!input || !input.files.length) {
showStatus('Please select a file first.', 'error');
return;
}
const file = input.files[0];
const formData = new FormData();
formData.append('file', file);
formData.append('dest', dest);
showStatus(`Uploading ${file.name}...`, 'info');
document.querySelectorAll('.script-button').forEach(btn => btn.disabled = true);
fetch('/api/upload-file', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.error) {
showStatus(`Error: ${data.error}`, 'error');
} else {
showStatus(`Uploaded to ${data.path}`, 'success');
input.value = '';
}
})
.catch(error => {
showStatus(`Error: ${error.message}`, 'error');
})
.finally(() => {
enableButtons();
});
}
</script>
</body>
</html>