diff --git a/kobrax_moonraker_bridge.py b/kobrax_moonraker_bridge.py index addc61a..c4add92 100644 --- a/kobrax_moonraker_bridge.py +++ b/kobrax_moonraker_bridge.py @@ -3626,7 +3626,7 @@ class KobraXBridge: except OSError: raise web.HTTPNotFound() if name == "app.js": - raw = raw.replace("'__VERSION__'", f"'{self._read_version()}'") + raw = raw.replace("__VERSION__", self._read_version()) return web.Response( text=raw, content_type=ctype, @@ -3662,7 +3662,7 @@ class KobraXBridge: pass try: js = pathlib.Path(os.path.join(base, "app.js")).read_text(encoding="utf-8") - js = js.replace("'__VERSION__'", f"'{self._read_version()}'") + js = js.replace("__VERSION__", self._read_version()) page = page.replace( '', "") diff --git a/web/DOC/THEME-CSS-HOOKS.md b/web/DOC/THEME-CSS-HOOKS.md index f3e7e48..75e767d 100644 --- a/web/DOC/THEME-CSS-HOOKS.md +++ b/web/DOC/THEME-CSS-HOOKS.md @@ -2,135 +2,135 @@ Referenzliste für CSS-/Layout-Anpassungen. -| ID | Verwendung | -|---|---| +| ID | Verwendung | +| ----------------------------------- | --------------- | | `#ace-dry-dialog-custom-name-label` | Hook / Selektor | -| `#ace-dry-dialog-custom-name-row` | Hook / Selektor | -| `#ace-dry-dialog-temp-label` | Hook / Selektor | -| `#ace-dry-dialog-time-label` | Hook / Selektor | -| `#ace-dry-dialog-title` | Hook / Selektor | -| `#add-printer-btn-label` | Hook / Selektor | -| `#ams-no-data` | Hook / Selektor | -| `#apd-ip` | Hook / Selektor | -| `#apd-lbl-ip` | Hook / Selektor | -| `#apd-lbl-name` | Hook / Selektor | -| `#apd-name` | Hook / Selektor | -| `#apd-status` | Hook / Selektor | -| `#apd-title` | Hook / Selektor | -| `#btn-log-dl` | Hook / Selektor | -| `#cam-fname` | Hook / Selektor | -| `#cam-img` | Hook / Selektor | -| `#cam-overlay` | Hook / Selektor | -| `#cam-placeholder` | Hook / Selektor | -| `#cam-placeholder-txt` | Hook / Selektor | -| `#cam-spinner` | Hook / Selektor | -| `#cam-wrap` | Hook / Selektor | -| `#conn-error-banner` | Hook / Selektor | -| `#d-ace-dry-grid` | Hook / Selektor | -| `#d-ace-dry-wrap` | Hook / Selektor | -| `#d-ams-card` | Hook / Selektor | -| `#d-bt-t` | Hook / Selektor | -| `#d-btbar` | Hook / Selektor | -| `#d-btn-skip-label` | Hook / Selektor | -| `#d-card-ams` | Hook / Selektor | -| `#d-card-cam` | Hook / Selektor | -| `#d-card-lightfan` | Hook / Selektor | -| `#d-card-progress` | Hook / Selektor | -| `#d-card-speed` | Hook / Selektor | -| `#d-card-temps` | Hook / Selektor | -| `#d-chart-label` | Hook / Selektor | -| `#d-ctrl-btns` | Hook / Selektor | -| `#d-elapsed` | Hook / Selektor | -| `#d-fname` | Hook / Selektor | -| `#d-layers` | Hook / Selektor | -| `#d-lbl-bed` | Hook / Selektor | -| `#d-lbl-elapsed` | Hook / Selektor | -| `#d-lbl-layers` | Hook / Selektor | -| `#d-lbl-light` | Hook / Selektor | -| `#d-lbl-remain` | Hook / Selektor | -| `#d-nt` | Hook / Selektor | -| `#d-nt-t` | Hook / Selektor | -| `#d-ntbar` | Hook / Selektor | -| `#d-pbar` | Hook / Selektor | -| `#d-pct` | Hook / Selektor | -| `#d-remain` | Hook / Selektor | -| `#d-slicer-label` | Hook / Selektor | -| `#d-slicer-row` | Hook / Selektor | -| `#d-slicer-time` | Hook / Selektor | -| `#d-spd-bar` | Hook / Selektor | -| `#d-spd-lbl-1` | Hook / Selektor | -| `#d-spd-lbl-2` | Hook / Selektor | -| `#d-spd-lbl-3` | Hook / Selektor | -| `#d-thumbnail` | Hook / Selektor | -| `#fd-objects` | Hook / Selektor | -| `#fd-objects-hint` | Hook / Selektor | -| `#fd-objects-section` | Hook / Selektor | -| `#fd-objects-svg` | Hook / Selektor | -| `#fd-slots-hint` | Hook / Selektor | -| `#fd-title` | Hook / Selektor | -| `#file-ready-banner` | Hook / Selektor | -| `#file-ready-name` | Hook / Selektor | -| `#h-badge` | Hook / Selektor | -| `#h-pname` | Hook / Selektor | -| `#h-pname-single` | Hook / Selektor | -| `#h-state` | Hook / Selektor | -| `#h-version` | Hook / Selektor | -| `#lbl-auto-leveling` | Hook / Selektor | -| `#lbl-default-slot` | Hook / Selektor | -| `#lbl-device-id` | Hook / Selektor | -| `#lbl-ip-hint` | Hook / Selektor | -| `#lbl-mode-id` | Hook / Selektor | -| `#lbl-mqtt-port` | Hook / Selektor | -| `#lbl-password` | Hook / Selektor | -| `#lbl-printer-ip` | Hook / Selektor | -| `#lbl-printer-name` | Hook / Selektor | -| `#lbl-slot-color` | Hook / Selektor | -| `#lbl-slot-material` | Hook / Selektor | -| `#lbl-update-apply` | Hook / Selektor | -| `#lbl-update-check` | Hook / Selektor | -| `#lbl-username` | Hook / Selektor | -| `#log-badge` | Hook / Selektor | -| `#log-badge-bot` | Hook / Selektor | -| `#modal-sec-connection` | Hook / Selektor | -| `#modal-sec-poll` | Hook / Selektor | -| `#modal-sec-print` | Hook / Selektor | -| `#modal-sec-version` | Hook / Selektor | -| `#modal-title-settings` | Hook / Selektor | -| `#opt-slot-0` | Hook / Selektor | -| `#opt-slot-1` | Hook / Selektor | -| `#opt-slot-2` | Hook / Selektor | -| `#opt-slot-3` | Hook / Selektor | -| `#opt-slot-auto` | Hook / Selektor | -| `#printer-dropdown-menu` | Hook / Selektor | -| `#printer-dropdown-wrap` | Hook / Selektor | -| `#printers-panel-title` | Hook / Selektor | -| `#ptitle-console` | Hook / Selektor | -| `#ptitle-motion-xy` | Hook / Selektor | -| `#ptitle-motion-z` | Hook / Selektor | -| `#s-auto-leveling` | Hook / Selektor | -| `#s-default-slot` | Hook / Selektor | -| `#s-device-id` | Hook / Selektor | -| `#s-mode-id` | Hook / Selektor | -| `#s-mqtt-port` | Hook / Selektor | -| `#s-password` | Hook / Selektor | -| `#s-printer-name` | Hook / Selektor | -| `#s-username` | Hook / Selektor | -| `#s-version-label` | Hook / Selektor | -| `#sf-all` | Hook / Selektor | -| `#sf-err` | Hook / Selektor | -| `#sf-new` | Hook / Selektor | -| `#sf-ok` | Hook / Selektor | -| `#skip-hint` | Hook / Selektor | -| `#skip-list` | Hook / Selektor | -| `#skip-status` | Hook / Selektor | -| `#skip-svg` | Hook / Selektor | -| `#skip-title` | Hook / Selektor | -| `#slot-edit-title` | Hook / Selektor | -| `#ss-date` | Hook / Selektor | -| `#ss-dur` | Hook / Selektor | -| `#ss-name` | Hook / Selektor | -| `#step-display` | Hook / Selektor | -| `#store-empty` | Hook / Selektor | -| `#store-panel-title` | Hook / Selektor | -| `#update-changelog` | Hook / Selektor | -| `#update-status` | Hook / Selektor | +| `#ace-dry-dialog-custom-name-row` | Hook / Selektor | +| `#ace-dry-dialog-temp-label` | Hook / Selektor | +| `#ace-dry-dialog-time-label` | Hook / Selektor | +| `#ace-dry-dialog-title` | Hook / Selektor | +| `#add-printer-btn-label` | Hook / Selektor | +| `#ams-no-data` | Hook / Selektor | +| `#apd-ip` | Hook / Selektor | +| `#apd-lbl-ip` | Hook / Selektor | +| `#apd-lbl-name` | Hook / Selektor | +| `#apd-name` | Hook / Selektor | +| `#apd-status` | Hook / Selektor | +| `#apd-title` | Hook / Selektor | +| `#btn-log-dl` | Hook / Selektor | +| `#cam-fname` | Hook / Selektor | +| `#cam-img` | Hook / Selektor | +| `#cam-overlay` | Hook / Selektor | +| `#cam-placeholder` | Hook / Selektor | +| `#cam-placeholder-txt` | Hook / Selektor | +| `#cam-spinner` | Hook / Selektor | +| `#cam-wrap` | Hook / Selektor | +| `#conn-error-banner` | Hook / Selektor | +| `#d-ace-dry-grid` | Hook / Selektor | +| `#d-ace-dry-wrap` | Hook / Selektor | +| `#d-ams-card` | Hook / Selektor | +| `#d-bt-t` | Hook / Selektor | +| `#d-btbar` | Hook / Selektor | +| `#d-btn-skip-label` | Hook / Selektor | +| `#d-card-ams` | Hook / Selektor | +| `#d-card-cam` | Hook / Selektor | +| `#d-card-lightfan` | Hook / Selektor | +| `#d-card-progress` | Hook / Selektor | +| `#d-card-speed` | Hook / Selektor | +| `#d-card-temps` | Hook / Selektor | +| `#d-chart-label` | Hook / Selektor | +| `#d-ctrl-btns` | Hook / Selektor | +| `#d-elapsed` | Hook / Selektor | +| `#d-fname` | Hook / Selektor | +| `#d-layers` | Hook / Selektor | +| `#d-lbl-bed` | Hook / Selektor | +| `#d-lbl-elapsed` | Hook / Selektor | +| `#d-lbl-layers` | Hook / Selektor | +| `#d-lbl-light` | Hook / Selektor | +| `#d-lbl-remain` | Hook / Selektor | +| `#d-nt` | Hook / Selektor | +| `#d-nt-t` | Hook / Selektor | +| `#d-ntbar` | Hook / Selektor | +| `#d-pbar` | Hook / Selektor | +| `#d-pct` | Hook / Selektor | +| `#d-remain` | Hook / Selektor | +| `#d-slicer-label` | Hook / Selektor | +| `#d-slicer-row` | Hook / Selektor | +| `#d-slicer-time` | Hook / Selektor | +| `#d-spd-bar` | Hook / Selektor | +| `#d-spd-lbl-1` | Hook / Selektor | +| `#d-spd-lbl-2` | Hook / Selektor | +| `#d-spd-lbl-3` | Hook / Selektor | +| `#d-thumbnail` | Hook / Selektor | +| `#fd-objects` | Hook / Selektor | +| `#fd-objects-hint` | Hook / Selektor | +| `#fd-objects-section` | Hook / Selektor | +| `#fd-objects-svg` | Hook / Selektor | +| `#fd-slots-hint` | Hook / Selektor | +| `#fd-title` | Hook / Selektor | +| `#file-ready-banner` | Hook / Selektor | +| `#file-ready-name` | Hook / Selektor | +| `#h-badge` | Hook / Selektor | +| `#h-pname` | Hook / Selektor | +| `#h-pname-single` | Hook / Selektor | +| `#h-state` | Hook / Selektor | +| `#h-version` | Hook / Selektor | +| `#lbl-auto-leveling` | Hook / Selektor | +| `#lbl-default-slot` | Hook / Selektor | +| `#lbl-device-id` | Hook / Selektor | +| `#lbl-ip-hint` | Hook / Selektor | +| `#lbl-mode-id` | Hook / Selektor | +| `#lbl-mqtt-port` | Hook / Selektor | +| `#lbl-password` | Hook / Selektor | +| `#lbl-printer-ip` | Hook / Selektor | +| `#lbl-printer-name` | Hook / Selektor | +| `#lbl-slot-color` | Hook / Selektor | +| `#lbl-slot-material` | Hook / Selektor | +| `#lbl-update-apply` | Hook / Selektor | +| `#lbl-update-check` | Hook / Selektor | +| `#lbl-username` | Hook / Selektor | +| `#log-badge` | Hook / Selektor | +| `#log-badge-bot` | Hook / Selektor | +| `#modal-sec-connection` | Hook / Selektor | +| `#modal-sec-poll` | Hook / Selektor | +| `#modal-sec-print` | Hook / Selektor | +| `#modal-sec-version` | Hook / Selektor | +| `#modal-title-settings` | Hook / Selektor | +| `#opt-slot-0` | Hook / Selektor | +| `#opt-slot-1` | Hook / Selektor | +| `#opt-slot-2` | Hook / Selektor | +| `#opt-slot-3` | Hook / Selektor | +| `#opt-slot-auto` | Hook / Selektor | +| `#printer-dropdown-menu` | Hook / Selektor | +| `#printer-dropdown-wrap` | Hook / Selektor | +| `#printers-panel-title` | Hook / Selektor | +| `#ptitle-console` | Hook / Selektor | +| `#ptitle-motion-xy` | Hook / Selektor | +| `#ptitle-motion-z` | Hook / Selektor | +| `#s-auto-leveling` | Hook / Selektor | +| `#s-default-slot` | Hook / Selektor | +| `#s-device-id` | Hook / Selektor | +| `#s-mode-id` | Hook / Selektor | +| `#s-mqtt-port` | Hook / Selektor | +| `#s-password` | Hook / Selektor | +| `#s-printer-name` | Hook / Selektor | +| `#s-username` | Hook / Selektor | +| `#s-version-label` | Hook / Selektor | +| `#sf-all` | Hook / Selektor | +| `#sf-err` | Hook / Selektor | +| `#sf-new` | Hook / Selektor | +| `#sf-ok` | Hook / Selektor | +| `#skip-hint` | Hook / Selektor | +| `#skip-list` | Hook / Selektor | +| `#skip-status` | Hook / Selektor | +| `#skip-svg` | Hook / Selektor | +| `#skip-title` | Hook / Selektor | +| `#slot-edit-title` | Hook / Selektor | +| `#ss-date` | Hook / Selektor | +| `#ss-dur` | Hook / Selektor | +| `#ss-name` | Hook / Selektor | +| `#step-display` | Hook / Selektor | +| `#store-empty` | Hook / Selektor | +| `#store-panel-title` | Hook / Selektor | +| `#update-changelog` | Hook / Selektor | +| `#update-status` | Hook / Selektor | diff --git a/web/DOC/THEME-JS-ID-HOOKS.md b/web/DOC/THEME-JS-ID-HOOKS.md index 6c2ba02..c5e1dca 100644 --- a/web/DOC/THEME-JS-ID-HOOKS.md +++ b/web/DOC/THEME-JS-ID-HOOKS.md @@ -2,89 +2,89 @@ Referenzliste für JavaScript-/DOM-Hooks. -| ID | Verwendung | -|---|---| -| `#ace-dry-dialog` | Hook / Selektor | -| `#ace-dry-dialog-cancel` | Hook / Selektor | -| `#ace-dry-dialog-confirm` | Hook / Selektor | -| `#ace-dry-dialog-custom-name` | Hook / Selektor | -| `#ace-dry-dialog-h` | Hook / Selektor | -| `#ace-dry-dialog-m` | Hook / Selektor | -| `#ace-dry-dialog-reset-default` | Hook / Selektor | -| `#ace-dry-dialog-s` | Hook / Selektor | -| `#ace-dry-dialog-save-preset` | Hook / Selektor | -| `#ace-dry-dialog-temp` | Hook / Selektor | -| `#add-printer-dialog` | Hook / Selektor | -| `#ams-slots` | Hook / Selektor | -| `#apd-confirm` | Hook / Selektor | -| `#bnb-console` | Hook / Selektor | -| `#bnb-dashboard` | Hook / Selektor | -| `#bnb-printers` | Hook / Selektor | -| `#bnb-store` | Hook / Selektor | -| `#btn-autoscroll` | Hook / Selektor | -| `#btn-save-settings` | Hook / Selektor | -| `#btn-slot-edit-feed` | Hook / Selektor | -| `#btn-slot-edit-save` | Hook / Selektor | -| `#btn-update-apply` | Hook / Selektor | -| `#btn-update-check` | Hook / Selektor | -| `#cam-toggle-btn` | Hook / Selektor | -| `#conn-btn` | Hook / Selektor | -| `#console-log` | Hook / Selektor | -| `#d-bt` | Hook / Selektor | -| `#d-btn-cancel` | Hook / Selektor | -| `#d-btn-pause` | Hook / Selektor | -| `#d-btn-resume` | Hook / Selektor | -| `#d-btn-skip` | Hook / Selektor | -| `#d-chart` | Hook / Selektor | -| `#d-fan` | Hook / Selektor | -| `#d-fan-val` | Hook / Selektor | -| `#d-light-toggle` | Hook / Selektor | -| `#d-spd-1` | Hook / Selektor | -| `#d-spd-2` | Hook / Selektor | -| `#d-spd-3` | Hook / Selektor | -| `#fd-cancel` | Hook / Selektor | -| `#fd-print` | Hook / Selektor | -| `#fd-slots` | Hook / Selektor | -| `#filament-dialog` | Hook / Selektor | -| `#file-cancel-btn` | Hook / Selektor | -| `#file-ready-btn` | Hook / Selektor | -| `#file-slots-btn` | Hook / Selektor | -| `#lang-btn` | Hook / Selektor | -| `#log-filter` | Hook / Selektor | -| `#logdir-all` | Hook / Selektor | -| `#logdir-rx` | Hook / Selektor | -| `#logdir-tx` | Hook / Selektor | -| `#log-lbl-level` | i18n-Label "Level:" | -| `#loglvl-all` | onclick `setLogLevel('all')` | -| `#loglvl-err` | onclick `setLogLevel('err')` — nur Fehler | -| `#loglvl-warn` | onclick `setLogLevel('warn')` — Fehler + Warnungen | -| `#nb-console` | Hook / Selektor | -| `#nb-dashboard` | Hook / Selektor | -| `#nb-printers` | Hook / Selektor | -| `#nb-store` | Hook / Selektor | -| `#p-bed-inp` | Hook / Selektor | -| `#p-nozzle-inp` | Hook / Selektor | -| `#panel-console` | Hook / Selektor | -| `#panel-dashboard` | Hook / Selektor | -| `#panel-printers` | Hook / Selektor | -| `#panel-store` | Hook / Selektor | -| `#poll-1` | Hook / Selektor | -| `#poll-2` | Hook / Selektor | -| `#poll-5` | Hook / Selektor | -| `#printer-dropdown-btn` | Hook / Selektor | -| `#printers-grid` | Hook / Selektor | -| `#s-printer-ip` | Hook / Selektor | -| `#settings-btn` | Hook / Selektor | -| `#settings-modal` | Hook / Selektor | -| `#skip-confirm` | Hook / Selektor | -| `#skip-dialog` | Hook / Selektor | -| `#slot-edit-color` | Hook / Selektor | -| `#slot-edit-mat` | Hook / Selektor | -| `#slot-edit-modal` | Hook / Selektor | -| `#slot-edit-preview` | Hook / Selektor | -| `#slot-mat-btns` | Hook / Selektor | -| `#store-filter` | Hook / Selektor | -| `#store-grid` | Hook / Selektor | -| `#store-refresh-btn` | Hook / Selektor | -| `#store-search` | Hook / Selektor | -| `#store-sort` | Hook / Selektor | +| ID | Verwendung | +| ------------------------------- | -------------------------------------------------- | +| `#ace-dry-dialog` | Hook / Selektor | +| `#ace-dry-dialog-cancel` | Hook / Selektor | +| `#ace-dry-dialog-confirm` | Hook / Selektor | +| `#ace-dry-dialog-custom-name` | Hook / Selektor | +| `#ace-dry-dialog-h` | Hook / Selektor | +| `#ace-dry-dialog-m` | Hook / Selektor | +| `#ace-dry-dialog-reset-default` | Hook / Selektor | +| `#ace-dry-dialog-s` | Hook / Selektor | +| `#ace-dry-dialog-save-preset` | Hook / Selektor | +| `#ace-dry-dialog-temp` | Hook / Selektor | +| `#add-printer-dialog` | Hook / Selektor | +| `#ams-slots` | Hook / Selektor | +| `#apd-confirm` | Hook / Selektor | +| `#bnb-console` | Hook / Selektor | +| `#bnb-dashboard` | Hook / Selektor | +| `#bnb-printers` | Hook / Selektor | +| `#bnb-store` | Hook / Selektor | +| `#btn-autoscroll` | Hook / Selektor | +| `#btn-save-settings` | Hook / Selektor | +| `#btn-slot-edit-feed` | Hook / Selektor | +| `#btn-slot-edit-save` | Hook / Selektor | +| `#btn-update-apply` | Hook / Selektor | +| `#btn-update-check` | Hook / Selektor | +| `#cam-toggle-btn` | Hook / Selektor | +| `#conn-btn` | Hook / Selektor | +| `#console-log` | Hook / Selektor | +| `#d-bt` | Hook / Selektor | +| `#d-btn-cancel` | Hook / Selektor | +| `#d-btn-pause` | Hook / Selektor | +| `#d-btn-resume` | Hook / Selektor | +| `#d-btn-skip` | Hook / Selektor | +| `#d-chart` | Hook / Selektor | +| `#d-fan` | Hook / Selektor | +| `#d-fan-val` | Hook / Selektor | +| `#d-light-toggle` | Hook / Selektor | +| `#d-spd-1` | Hook / Selektor | +| `#d-spd-2` | Hook / Selektor | +| `#d-spd-3` | Hook / Selektor | +| `#fd-cancel` | Hook / Selektor | +| `#fd-print` | Hook / Selektor | +| `#fd-slots` | Hook / Selektor | +| `#filament-dialog` | Hook / Selektor | +| `#file-cancel-btn` | Hook / Selektor | +| `#file-ready-btn` | Hook / Selektor | +| `#file-slots-btn` | Hook / Selektor | +| `#lang-btn` | Hook / Selektor | +| `#log-filter` | Hook / Selektor | +| `#logdir-all` | Hook / Selektor | +| `#logdir-rx` | Hook / Selektor | +| `#logdir-tx` | Hook / Selektor | +| `#log-lbl-level` | i18n-Label "Level:" | +| `#loglvl-all` | onclick `setLogLevel('all')` | +| `#loglvl-err` | onclick `setLogLevel('err')` — nur Fehler | +| `#loglvl-warn` | onclick `setLogLevel('warn')` — Fehler + Warnungen | +| `#nb-console` | Hook / Selektor | +| `#nb-dashboard` | Hook / Selektor | +| `#nb-printers` | Hook / Selektor | +| `#nb-store` | Hook / Selektor | +| `#p-bed-inp` | Hook / Selektor | +| `#p-nozzle-inp` | Hook / Selektor | +| `#panel-console` | Hook / Selektor | +| `#panel-dashboard` | Hook / Selektor | +| `#panel-printers` | Hook / Selektor | +| `#panel-store` | Hook / Selektor | +| `#poll-1` | Hook / Selektor | +| `#poll-2` | Hook / Selektor | +| `#poll-5` | Hook / Selektor | +| `#printer-dropdown-btn` | Hook / Selektor | +| `#printers-grid` | Hook / Selektor | +| `#s-printer-ip` | Hook / Selektor | +| `#settings-btn` | Hook / Selektor | +| `#settings-modal` | Hook / Selektor | +| `#skip-confirm` | Hook / Selektor | +| `#skip-dialog` | Hook / Selektor | +| `#slot-edit-color` | Hook / Selektor | +| `#slot-edit-mat` | Hook / Selektor | +| `#slot-edit-modal` | Hook / Selektor | +| `#slot-edit-preview` | Hook / Selektor | +| `#slot-mat-btns` | Hook / Selektor | +| `#store-filter` | Hook / Selektor | +| `#store-grid` | Hook / Selektor | +| `#store-refresh-btn` | Hook / Selektor | +| `#store-search` | Hook / Selektor | +| `#store-sort` | Hook / Selektor | diff --git a/web/themes/default/app.js b/web/themes/default/app.js index dbce1c0..fcc978b 100644 --- a/web/themes/default/app.js +++ b/web/themes/default/app.js @@ -83,132 +83,127 @@ var ACE_DRY_PRESETS = { }; // Spoolman state -var _spoolmanStatus={configured:false,server:'',sync_rate:0,slot_spools:{}}; -var _spoolmanSpools=[]; -var _slotSpoolMap={}; // {String(global_index): spoolman_spool_id} — last committed assignment +var _spoolmanStatus = { configured: false, server: "", sync_rate: 0, slot_spools: {} }; +var _spoolmanSpools = []; +var _slotSpoolMap = {}; // {String(global_index): spoolman_spool_id} — last committed assignment -function _loadSpoolmanStatus(){ - fetch(_apiUrl('/kx/spoolman/status')).then(function(r){return r.json();}).then(function(d){ - _spoolmanStatus=d; - _slotSpoolMap=d.slot_spools||{}; - }).catch(function(){}); +function _loadSpoolmanStatus() { + fetch(_apiUrl("/kx/spoolman/status")) + .then(function (r) { + return r.json(); + }) + .then(function (d) { + _spoolmanStatus = d; + _slotSpoolMap = d.slot_spools || {}; + _updateSpoolmanStatusDot(); + }) + .catch(function () {}); } - -function _buildSpoolmanSection(){ - var sec=document.getElementById('fd-spoolman-section'); - var rows=document.getElementById('fd-spoolman-rows'); - var loading=document.getElementById('fd-spoolman-loading'); - if(!sec||!rows)return; - if(!_spoolmanStatus.configured){sec.style.display='none';return;} - sec.style.display=''; - rows.innerHTML=''; - if(loading)loading.style.display=''; - - var usedSlots={}; - document.querySelectorAll('#fd-slots select').forEach(function(sel){ - var idx=parseInt(sel.value); - if(idx>=0){ - var slot=(_amsSlots||[]).find(function(s){return s.slot_index===idx;}); - if(slot&&!usedSlots[idx])usedSlots[idx]=slot; - } - }); - - fetch(_apiUrl('/kx/spoolman/spools')).then(function(r){return r.json();}).then(function(d){ - if(loading)loading.style.display='none'; - _spoolmanSpools=d.spools||[]; - var slotKeys=Object.keys(usedSlots).map(Number).sort(function(a,b){return a-b;}); - if(!slotKeys.length){rows.innerHTML='–';return;} - rows.innerHTML=slotKeys.map(function(idx){ - var slot=usedSlots[idx]; - var col=(slot.color_hex||'#888'); - var currentSpool=_slotSpoolMap[String(idx)]||''; - var opts=''+_spoolmanSpools.map(function(sp){ - var rem=sp.remaining_weight!=null?' ('+sp.remaining_weight.toFixed(0)+'g)':''; - var vendor=sp.filament&&sp.filament.vendor?sp.filament.vendor+' ':''; - var name=sp.filament&&sp.filament.name?sp.filament.name:'Spool'; - return ''; - }).join(''); - return '
moonraker-obico-Container konfiguriert.')+''+cfgPath+'';
+ setText("setcat-lbl-integrations", T.settings_integrations || "Integrationen");
+ setText("modal-sec-spoolman", T.modal_sec_spoolman || "Spoolman");
+ setText("lbl-spoolman-url", T.lbl_spoolman_url || "Server-URL");
+ setText("lbl-spoolman-sync-rate", T.lbl_spoolman_sync_rate || "Sync-Rate (s, 0=aus)");
+ setText("modal-sec-obico", T.modal_sec_obico || "Obico");
+ var obicoBox = document.getElementById("obico-info-box");
+ if (obicoBox) {
+ var cfgEl = document.getElementById("obico-cfg-path");
+ var cfgPath = cfgEl ? cfgEl.textContent : "";
+ obicoBox.innerHTML =
+ (T.obico_info_configured_via ||
+ "Obico wird über den moonraker-obico-Container konfiguriert.") +
+ "' +
+ cfgPath +
+ "";
}
- setText(
- "setcat-lbl-notifications",
- T.settings_cat_notifications || "Benachrichtigungen",
- );
+ setText("setcat-lbl-notifications", T.settings_cat_notifications || "Benachrichtigungen");
setText("setcat-lbl-system", T.settings_cat_system || "System");
setText("lbl-set-lang", T.settings_cat_language || "Sprache");
setText("lbl-set-theme", T.settings_cat_theme || "Hell / Dunkel umschalten");
@@ -620,40 +568,30 @@ function applyLang() {
var pollHint = document.getElementById("lbl-poll-hint");
if (pollHint)
pollHint.textContent =
- T.settings_poll_interval_hint ||
- "Wie oft die Bridge den Drucker-Status abfragt";
+ T.settings_poll_interval_hint || "Wie oft die Bridge den Drucker-Status abfragt";
setText(
"lbl-filament-mapping",
- T.settings_filament_mapping || "Filament-Profil-Mapping (pro Slot)",
+ T.settings_filament_mapping || "Filament-Profil-Mapping (pro Slot)"
);
var fmHint = document.getElementById("filament-mapping-hint");
if (fmHint)
fmHint.textContent =
T.settings_filament_mapping_hint ||
'Festes Orca-Profil pro AMS-Slot. Beim Slicer-Sync sendet die Bridge dieses Profil statt „Generic".';
- setText(
- "lbl-filament-mapping-save",
- T.settings_filament_mapping_save || "Mapping speichern",
- );
+ setText("lbl-filament-mapping-save", T.settings_filament_mapping_save || "Mapping speichern");
setText(
"lbl-visible-vendors",
- T.settings_visible_vendors || "Sichtbare Hersteller (Profil-Dropdown)",
+ T.settings_visible_vendors || "Sichtbare Hersteller (Profil-Dropdown)"
);
var vfs = document.getElementById("vendor-filter-search");
if (vfs)
- vfs.setAttribute(
- "placeholder",
- T.settings_vendor_filter_placeholder || "Hersteller suchen…",
- );
+ vfs.setAttribute("placeholder", T.settings_vendor_filter_placeholder || "Hersteller suchen…");
setText(
"visible-vendors-hint",
T.settings_visible_vendors_hint ||
- 'Nur diese Hersteller erscheinen im Slot-Profil-Dropdown. Nichts ausgewählt = alle anzeigen. „Generic" und eigene Profile sind immer sichtbar.',
- );
- setText(
- "lbl-visible-vendors-save",
- T.settings_visible_vendors_save || "Auswahl speichern",
+ 'Nur diese Hersteller erscheinen im Slot-Profil-Dropdown. Nichts ausgewählt = alle anzeigen. „Generic" und eigene Profile sind immer sichtbar.'
);
+ setText("lbl-visible-vendors-save", T.settings_visible_vendors_save || "Auswahl speichern");
// Custom-Profile-Import (Issue #41)
setText("modal-sec-orca-profiles", T.orca_profile_section);
setText("orca-profiles-hint", T.orca_profile_hint);
@@ -664,8 +602,7 @@ function applyLang() {
setText("profile-import-list-label", T.orca_profile_list_label);
// Hilfe-Text mit Inline-HTML — innerHTML statt setText
var helpEl = document.getElementById("profile-import-help");
- if (helpEl && T.orca_profile_help_html)
- helpEl.innerHTML = T.orca_profile_help_html;
+ if (helpEl && T.orca_profile_help_html) helpEl.innerHTML = T.orca_profile_help_html;
setText("btn-save-settings", T.settings_save);
setText("lbl-printer-name", T.settings_printer_name);
setText("lbl-printer-ip", T.settings_printer_ip);
@@ -696,24 +633,14 @@ function applyLang() {
setText("d-spd-lbl-2", T.speed_normal.replace(/^\S+\s/, ""));
setText("d-spd-lbl-3", T.speed_sport.replace(/^\S+\s/, ""));
// AMS feed/unload
- document
- .querySelectorAll(".lbl-feed")
- .forEach((e) => (e.textContent = T.lbl_feed));
- document
- .querySelectorAll(".lbl-unload")
- .forEach((e) => (e.textContent = T.lbl_unload));
+ document.querySelectorAll(".lbl-feed").forEach((e) => (e.textContent = T.lbl_feed));
+ document.querySelectorAll(".lbl-unload").forEach((e) => (e.textContent = T.lbl_unload));
for (var i = 0; i < 4; i++) {
- setText(
- "d-card-ace-dry-" + i,
- "ACE " + (i + 1) + " - " + tr("ace_dry_dryer"),
- );
+ setText("d-card-ace-dry-" + i, "ACE " + (i + 1) + " - " + tr("ace_dry_dryer"));
setText("d-ace-auto-refill-label-" + i, tr("ace_dry_auto_refill"));
setText("d-ace-drying-enable-label-" + i, tr("ace_dry_enable"));
setText("d-ace-dry-humidity-label-" + i, tr("ace_dry_humidity") + ":");
- setText(
- "d-ace-dry-current-temp-label-" + i,
- tr("ace_dry_current_temp") + ":",
- );
+ setText("d-ace-dry-current-temp-label-" + i, tr("ace_dry_current_temp") + ":");
setText("d-ace-dry-target-label-" + i, tr("ace_dry_temp_line") + ":");
setText("d-ace-dry-time-label-" + i, tr("ace_dry_time_line") + ":");
setText("d-ace-dry-chart-label-" + i, tr("ace_dry_chart"));
@@ -753,15 +680,11 @@ function applyLang() {
// Elements not yet covered by setText above
var settingsBtn = document.getElementById("settings-btn");
if (settingsBtn)
- settingsBtn.title =
- T.settings_btn_tooltip || T.settings_title || "Einstellungen";
+ settingsBtn.title = T.settings_btn_tooltip || T.settings_title || "Einstellungen";
var snpEl = document.getElementById("s-printer-name");
- if (snpEl)
- snpEl.placeholder =
- T.settings_printer_name_placeholder || "z.B. Kobra X Links";
+ if (snpEl) snpEl.placeholder = T.settings_printer_name_placeholder || "z.B. Kobra X Links";
var sdidEl = document.getElementById("s-device-id");
- if (sdidEl)
- sdidEl.placeholder = T.settings_device_id_placeholder || "32 Hex-Zeichen";
+ if (sdidEl) sdidEl.placeholder = T.settings_device_id_placeholder || "32 Hex-Zeichen";
setText("d-fan-off", T.label_off || "Aus");
setText("skip-confirm", T.skip_confirm_btn || "Überspringen");
setText("ams-no-data", T.ams_no_data || "Keine AMS-Daten empfangen");
@@ -774,19 +697,13 @@ function applyLang() {
setText("fd-cancel", T.fd_cancel || "Abbrechen");
setText("fd-print", T.fd_print || "▶ Drucken");
// Dialog: Web Upload Verify
- setText(
- "store-web-verify-title",
- T.store_web_verify_title || "Datei verifizieren",
- );
+ setText("store-web-verify-title", T.store_web_verify_title || "Datei verifizieren");
setText(
"store-web-verify-msg",
T.store_web_verify_msg ||
- "Bitte bestätige, dass diese Datei für den Anycubic Kobra X erstellt wurde.",
- );
- setText(
- "store-web-verify-confirm",
- T.store_web_verify_confirm || "Bestätigen",
+ "Bitte bestätige, dass diese Datei für den Anycubic Kobra X erstellt wurde."
);
+ setText("store-web-verify-confirm", T.store_web_verify_confirm || "Bestätigen");
setText("store-web-verify-abort", T.store_web_verify_abort || "Abbrechen");
// GCode-Browser-Karten: Texte sind via innerHTML eingebacken,
// bei Sprachwechsel komplett neu rendern.
@@ -905,13 +822,9 @@ function ensureAceDryCards() {
// ── Panel nav ──
function showPanel(id) {
- document
- .querySelectorAll(".panel")
- .forEach((p) => p.classList.remove("active"));
+ document.querySelectorAll(".panel").forEach((p) => p.classList.remove("active"));
document.getElementById("panel-" + id).classList.add("active");
- document
- .querySelectorAll(".nav-btn,.bnav-btn")
- .forEach((b) => b.classList.remove("active"));
+ document.querySelectorAll(".nav-btn,.bnav-btn").forEach((b) => b.classList.remove("active"));
var nb = document.getElementById("nb-" + id);
if (nb) nb.classList.add("active");
var bnb = document.getElementById("bnb-" + id);
@@ -922,12 +835,8 @@ function showPanel(id) {
// Settings-Kategorie umschalten (Master-Detail)
function showSettingsCat(name) {
- document
- .querySelectorAll(".set-group")
- .forEach((g) => g.classList.remove("active"));
- document
- .querySelectorAll(".set-cat")
- .forEach((b) => b.classList.remove("active"));
+ document.querySelectorAll(".set-group").forEach((g) => g.classList.remove("active"));
+ document.querySelectorAll(".set-cat").forEach((b) => b.classList.remove("active"));
var g = document.getElementById("setgrp-" + name);
if (g) g.classList.add("active");
var c = document.getElementById("setcat-" + name);
@@ -1011,8 +920,7 @@ function showToast(msg) {
function setLogDir(dir) {
logDirFilter = dir;
document.querySelectorAll(".log-dir-btn").forEach(function (b) {
- b.style.background =
- b.id === "logdir-" + dir ? "var(--accent)" : "var(--raised)";
+ b.style.background = b.id === "logdir-" + dir ? "var(--accent)" : "var(--raised)";
b.style.color = b.id === "logdir-" + dir ? "#fff" : "var(--txt2)";
});
renderLog();
@@ -1020,8 +928,7 @@ function setLogDir(dir) {
function setLogLevel(lvl) {
logLevelFilter = lvl;
document.querySelectorAll(".log-lvl-btn").forEach(function (b) {
- b.style.background =
- b.id === "loglvl-" + lvl ? "var(--accent)" : "var(--raised)";
+ b.style.background = b.id === "loglvl-" + lvl ? "var(--accent)" : "var(--raised)";
b.style.color = b.id === "loglvl-" + lvl ? "#fff" : "var(--txt2)";
});
renderLog();
@@ -1047,22 +954,14 @@ function renderLog() {
if (logDirFilter === "rx" && !/ RX[ (]/.test(m)) return false;
if (logDirFilter === "tx" && !/ TX[ (]/.test(m)) return false;
if (logLevelFilter === "err" && l.cls !== "msg-err") return false;
- if (
- logLevelFilter === "warn" &&
- l.cls !== "msg-err" &&
- l.cls !== "msg-warn"
- )
- return false;
+ if (logLevelFilter === "warn" && l.cls !== "msg-err" && l.cls !== "msg-warn") return false;
if (fl && !m.toLowerCase().includes(fl)) return false;
return true;
});
var savedScroll = logAutoScroll ? null : el.scrollTop;
el.innerHTML = rows
.map(function (l) {
- var cnt =
- l.count && l.count > 1
- ? ' (×' + l.count + ")"
- : "";
+ var cnt = l.count && l.count > 1 ? ' (×' + l.count + ")" : "";
return (
'