Report failures where the operator can still see them
The 55 alert() calls carried the same suppression as the confirms, and go wrong in the worse direction: a silenced confirm makes a button do nothing, while a silenced alert lets the action run and says nothing about it failing. vvAlert returns a promise nobody has to await, so these converted by rename with no caller becoming async. The icon is inferred from the message rather than asked of fifty call sites, and an explicit type still wins.
This commit is contained in:
@@ -369,7 +369,7 @@ function _doRestart(name) {
|
||||
function _doStartStop(name, start) {
|
||||
_actApi({action: start ? 'start' : 'stop', name}, data => {
|
||||
if (data.ok) setTimeout(_reload, 800);
|
||||
else alert((start ? 'Start' : 'Stop') + ' failed: ' + (data.output || data.error || '?'));
|
||||
else vvAlert((start ? 'Start' : 'Stop') + ' failed: ' + (data.output || data.error || '?'));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -378,7 +378,7 @@ function _doPullRebuild(name) {
|
||||
if (data.ok && data.job_id) {
|
||||
_startJob(name, data.job_id);
|
||||
} else {
|
||||
alert('Update failed: ' + (data.error || '?'));
|
||||
vvAlert('Update failed: ' + (data.error || '?'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -478,7 +478,7 @@ function _bindEvents() {
|
||||
el.disabled = true; el.style.opacity = '0.5';
|
||||
_api({action:'rename_folder',folder_id:fid,name}, r => {
|
||||
el.disabled = false; el.style.opacity = '';
|
||||
if (r.ok) _reload(); else { alert('Rename failed: '+(r.error||'?')); el.value = f?.name ?? name; }
|
||||
if (r.ok) _reload(); else { vvAlert('Rename failed: '+(r.error||'?')); el.value = f?.name ?? name; }
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -490,14 +490,14 @@ function _bindEvents() {
|
||||
const fid = el.dataset.deleteFolder;
|
||||
const f = (_data.folders||[]).find(x=>x.id===fid);
|
||||
if (!f || !await vvConfirm(`Delete "${f.name}"? Containers will be ungrouped.`)) return;
|
||||
_api({action:'delete_folder',folder_id:fid}, r => { if(r.ok) _reload(); else alert('Delete failed: '+(r.error||'?')); });
|
||||
_api({action:'delete_folder',folder_id:fid}, r => { if(r.ok) _reload(); else vvAlert('Delete failed: '+(r.error||'?')); });
|
||||
});
|
||||
});
|
||||
|
||||
// New folder
|
||||
document.getElementById('vv-dk-add-folder')?.addEventListener('click', async () => {
|
||||
const name = await vvPrompt('New folder name:');
|
||||
if (name?.trim()) _api({action:'create_folder',name:name.trim()}, r => { if(r.ok) _reload(); else alert(r.error); });
|
||||
if (name?.trim()) _api({action:'create_folder',name:name.trim()}, r => { if(r.ok) _reload(); else vvAlert(r.error); });
|
||||
});
|
||||
}
|
||||
|
||||
@@ -527,11 +527,11 @@ function _showPopover(x, y) {
|
||||
const name = await vvPrompt('New folder name:');
|
||||
if (!name?.trim()) return;
|
||||
_api({action:'create_folder',name:name.trim()}, r => {
|
||||
if (!r.ok) { alert(r.error); return; }
|
||||
if (!r.ok) { vvAlert(r.error); return; }
|
||||
_api({action:'move_container',container:_popTarget.container,folder_id:r.id}, r2 => { if(r2.ok) _reload(); });
|
||||
});
|
||||
} else {
|
||||
_api({action:'move_container',container:_popTarget.container,folder_id:fid}, r => { if(r.ok) _reload(); else alert(r.error); });
|
||||
_api({action:'move_container',container:_popTarget.container,folder_id:fid}, r => { if(r.ok) _reload(); else vvAlert(r.error); });
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -555,12 +555,12 @@ document.getElementById('vv-dk-edit-toggle').addEventListener('click', function(
|
||||
});
|
||||
|
||||
function _syncC2J() {
|
||||
_api({action:'sync_conf_to_json'}, r => { if(r.ok) _reload(); else alert(r.error); });
|
||||
_api({action:'sync_conf_to_json'}, r => { if(r.ok) _reload(); else vvAlert(r.error); });
|
||||
}
|
||||
document.getElementById('vv-dk-sync-c2j').addEventListener('click', _syncC2J);
|
||||
document.getElementById('vv-dk-sync-j2c').addEventListener('click', async () => {
|
||||
if (!await vvConfirm('Overwrite conf map with current JSON state?')) return;
|
||||
_api({action:'sync_json_to_conf'}, r => { if(r.ok) _reload(); else alert(r.error); });
|
||||
_api({action:'sync_json_to_conf'}, r => { if(r.ok) _reload(); else vvAlert(r.error); });
|
||||
});
|
||||
|
||||
// ── Load ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user