diff --git a/app/static/js/app.js b/app/static/js/app.js
index e1e12ab..e345a85 100644
--- a/app/static/js/app.js
+++ b/app/static/js/app.js
@@ -2863,7 +2863,20 @@ function renderRegionsList() {
listEl.innerHTML = '
No regions defined. Add one below.
';
return;
}
- listEl.innerHTML = regions.map(r => {
+ const noDefault = !regions.some(r => r.is_default);
+ const noneRow = `
+
+
+
+
+
+ None — use firmware default
+
+
+ `;
+ const regionRows = regions.map(r => {
const isDefault = r.is_default ? 'checked' : '';
const keyShort = (r.key_hex || '').slice(0, 8) + '…';
return `
@@ -2871,8 +2884,7 @@ function renderRegionsList() {
+ onchange="setDefaultRegion(${r.id})">
${escapeHtml(r.name)}
@@ -2886,6 +2898,7 @@ function renderRegionsList() {
`;
}).join('');
+ listEl.innerHTML = noneRow + regionRows;
}
async function addRegion(name, inputEl) {
@@ -2928,17 +2941,6 @@ async function deleteRegion(id, name) {
}
}
-function handleRegionRadioClick(id, inputEl) {
- // Click on the already-selected default clears the default; otherwise sets it.
- const wasDefault = (window.regionRegistry || []).some(r => r.id === id && r.is_default);
- if (wasDefault) {
- inputEl.checked = false;
- clearDefaultRegion();
- } else {
- setDefaultRegion(id);
- }
-}
-
async function setDefaultRegion(id) {
try {
const resp = await fetch(`/api/regions/${id}/default`, { method: 'POST' });
diff --git a/app/templates/base.html b/app/templates/base.html
index a71a71e..c0a00c0 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -792,7 +792,7 @@
- Tip: pick the default region via the radio button. Click the selected radio again to clear it. The default is also pushed to the firmware so any untagged channel uses it.
+ Tip: pick the default region via the radio button, or select None to fall back to the firmware default. The chosen region is also pushed to the firmware so any untagged channel uses it.