mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-10-05 23:05:10 +00:00
fix(web): seven web UI bugs, and remove dead plugins_manager.js helpers (#647)
- Operation History: the plugin filter lists the installed plugin ids
instead of one option, "plugins" (Object.keys of {plugins: [...]}).
- Ctrl/Cmd+S submits the active tab's first visible form with
requestSubmit() (validation and onsubmit guards run) instead of a bare
Event on the first form in the document; skipped inside a modal dialog
and on tabs without a form.
- Overview "Check Updates" confirms like "Update Code", takes its button
explicitly (no implicit global event) and shows the server's message.
Both, and the Tools tab git pull, raise the restart-pending banner on
restart_required.
- Tools: toolsAction and diagnostics show the server's error message;
only a non-JSON body falls back to HTTP <status>.
- Installed list after uninstall: PluginAPI writes clear the throttler's
GET cache, a forced loadInstalledPlugins clears it too, and the
post-uninstall reload goes through refreshInstalledPlugins().
- Plugin widgets load from /static/plugin-widgets/ only (the other two
paths have no route).
- Raw JSON editor escapes the parse error; slider escapes value/min/max/step.
- Removed the unreferenced array-of-objects and key-value helpers from
plugins_manager.js, the textarea auto-resize and Ctrl+R handlers in
app.js, and a redundant ?v= on the plugins_manager.js script tag.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -451,9 +451,11 @@
|
||||
})
|
||||
.then(r => {
|
||||
if (!r.ok) {
|
||||
// Only a non-JSON body falls back to the status code; the
|
||||
// rejection carrying the server's message must not be caught.
|
||||
return r.json()
|
||||
.then(d => Promise.reject(new Error(d.message || `HTTP ${r.status}`)))
|
||||
.catch(() => Promise.reject(new Error(`HTTP ${r.status}`)));
|
||||
.catch(() => null)
|
||||
.then(d => Promise.reject(new Error((d && d.message) || `HTTP ${r.status}`)));
|
||||
}
|
||||
return r.json();
|
||||
})
|
||||
@@ -465,6 +467,14 @@
|
||||
showOutput ? (data.output || '') : '',
|
||||
showPluginDetails ? (data.details || []) : null
|
||||
);
|
||||
// A pull replaces files on disk; the services keep running the
|
||||
// code they loaded at boot until restarted.
|
||||
if (ok && action === 'git_pull' && data.restart_required &&
|
||||
typeof window.showRestartPending === 'function') {
|
||||
window.showRestartPending(
|
||||
'Update installed \u2014 restart the display and web ' +
|
||||
'services to run the new code');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
showResult(resultId, false, 'Request failed: ' + err.message);
|
||||
@@ -717,8 +727,8 @@
|
||||
fetch('/api/v3/system/status')
|
||||
.then(r => {
|
||||
if (!r.ok) return r.json()
|
||||
.then(d => Promise.reject(d.message || `HTTP ${r.status}`))
|
||||
.catch(() => Promise.reject(`HTTP ${r.status}`));
|
||||
.catch(() => null)
|
||||
.then(d => Promise.reject((d && d.message) || `HTTP ${r.status}`));
|
||||
return r.json();
|
||||
})
|
||||
.then(res => {
|
||||
|
||||
Reference in New Issue
Block a user