From c6cc4ac446ec0fadfebd53e69a9ca303096f42bc Mon Sep 17 00:00:00 2001 From: Gangoke Date: Sun, 17 May 2026 18:08:09 -1000 Subject: [PATCH] feat: update AMS section UI and functionality for slot editing --- kobrax_moonraker_bridge.py | 80 +++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/kobrax_moonraker_bridge.py b/kobrax_moonraker_bridge.py index dd6eff5..f3c9ebc 100644 --- a/kobrax_moonraker_bridge.py +++ b/kobrax_moonraker_bridge.py @@ -2054,6 +2054,7 @@ nav.bottom-nav{display:none;position:fixed;bottom:0;left:0;right:0; oninput="highlightMatBtn(this.value)" style="margin-top:8px;width:100%;padding:6px 10px;background:var(--raised);border:1px solid var(--border);border-radius:6px;color:var(--txt);font-size:13px;box-sizing:border-box"> + @@ -2252,23 +2253,10 @@ nav.bottom-nav{display:none;position:fixed;bottom:0;left:0;right:0;
-
AMS / Filamentbox
+
Filament
Keine AMS-Daten empfangen
-
-
Slot auswählen
-
- - Slot 1 -
-
- - -
-
@@ -2393,7 +2381,7 @@ var LANG_DE={ label_set:'Setzen',label_off:'Aus', panel_temps_nozzle:'Nozzle',panel_temps_bed:'Heizbett',panel_temps_chart:'Verlauf (letzte 60 Messungen)',label_target_c:'Ziel:', panel_motion_xy:'XY-Achsen',panel_motion_z:'Z-Achse',label_step:'Schrittweite:',btn_home_z:'Home Z',btn_home_xy:'Home XY',btn_home_all:'Home All',btn_disable_motors:'Motoren aus', - panel_ams_title:'AMS / Filamentbox',ams_no_data:'Keine AMS-Daten empfangen',label_slot:'Slot',ams_empty:'Leer', + panel_ams_title:'Filament',card_ams:'Filament',ams_no_data:'Keine AMS-Daten empfangen',label_slot:'Slot',ams_empty:'Leer', panel_extras_light:'Licht',panel_extras_fan:'Lüfter',panel_extras_camera:'Kamera',btn_cam_start2:'▶ Start',btn_cam_stop2:'◼ Stop', panel_console_title:'Ereignis-Log', log_light_on:'Licht an',log_light_off:'Licht aus',log_fan:'Lüfter →',log_nozzle:'Nozzle →',log_bed:'Bett →',log_axis:'Achse',log_home:'Home',log_home_all:'Home All',log_cam_start:'Kamera gestartet:',log_cam_stop:'Kamera gestoppt',log_poll_error:'Poll-Fehler:',log_error:'Fehler:', @@ -2407,6 +2395,7 @@ var LANG_DE={ btn_connect:'⚡ Verbinden',btn_disconnect:'✕ Trennen', lbl_conn_error:'Verbindungsfehler:', slot_edit_title:'Slot bearbeiten',slot_edit_color:'Farbe',slot_edit_material:'Material', + slot_edit_load:'⬇ Einziehen',slot_edit_unload:'⬆ Ausziehen', slot_edit_save:'💾 Speichern',slot_edit_custom:'z.B. PLA, PETG, ABS…', slot_edit_ok:'AMS Slot', log_dir_all:'Alle', @@ -2454,7 +2443,7 @@ var LANG_EN={ label_set:'Set',label_off:'Off', panel_temps_nozzle:'Nozzle',panel_temps_bed:'Heated Bed',panel_temps_chart:'History (last 60 readings)',label_target_c:'Target:', panel_motion_xy:'XY Axes',panel_motion_z:'Z Axis',label_step:'Step size:',btn_home_z:'Home Z',btn_home_xy:'Home XY',btn_home_all:'Home All',btn_disable_motors:'Motors Off', - panel_ams_title:'AMS / Filament Box',ams_no_data:'No AMS data received',label_slot:'Slot',ams_empty:'Empty', + panel_ams_title:'Filament',card_ams:'Filament',ams_no_data:'No AMS data received',label_slot:'Slot',ams_empty:'Empty', panel_extras_light:'Light',panel_extras_fan:'Fan',panel_extras_camera:'Camera',btn_cam_start2:'▶ Start',btn_cam_stop2:'◼ Stop', panel_console_title:'Event Log', log_light_on:'Light on',log_light_off:'Light off',log_fan:'Fan →',log_nozzle:'Nozzle →',log_bed:'Bed →',log_axis:'Axis',log_home:'Home',log_home_all:'Home All',log_cam_start:'Camera started:',log_cam_stop:'Camera stopped',log_poll_error:'Poll error:',log_error:'Error:', @@ -2468,6 +2457,7 @@ var LANG_EN={ btn_connect:'⚡ Connect',btn_disconnect:'✕ Disconnect', lbl_conn_error:'Connection error:', slot_edit_title:'Edit Slot',slot_edit_color:'Color',slot_edit_material:'Material', + slot_edit_load:'⬇ Load',slot_edit_unload:'⬆ Unload', slot_edit_save:'💾 Save',slot_edit_custom:'e.g. PLA, PETG, ABS…', slot_edit_ok:'AMS Slot', log_dir_all:'All', @@ -2663,6 +2653,7 @@ function applyLang(){ setText('lbl-slot-color',T.slot_edit_color); setText('lbl-slot-material',T.slot_edit_material); setText('btn-slot-edit-save',T.slot_edit_save); + updateSlotEditFeedButton(); var mi=document.getElementById('slot-edit-mat');if(mi)mi.setAttribute('placeholder',T.slot_edit_custom); setText('logdir-all',T.log_dir_all); setText('file-ready-btn',T.file_ready_btn); @@ -2888,10 +2879,10 @@ function applyState(){ var amsTitle=document.getElementById('d-card-ams'); if(amsTitle){ - var baseTitle=T.card_ams||'AMS / Filamentbox'; + var baseTitle=T.card_ams||'Filament'; var modeMap={toolhead:'Toolhead',ace_direct:'ACE Direct',ace_hub:'ACE Hub'}; var modeTxt=modeMap[s.filament_mode]||''; - amsTitle.textContent=modeTxt?(baseTitle+' · '+modeTxt):baseTitle; + amsTitle.textContent=modeTxt?(baseTitle+' - '+modeTxt):baseTitle; } // AMS @@ -2946,17 +2937,6 @@ function applyState(){ html+=''; }); document.getElementById('ams-slots').innerHTML=html; - // Update feed/unload slot slider range - var sel=document.getElementById('ams-slot-sel'); - if(sel){ - var maxSlot=s.ams_slots.length-1; - sel.max=maxSlot; - if(parseInt(sel.value)>maxSlot){ - sel.value=0; - var lbl=document.getElementById('ams-slot-label'); - if(lbl)lbl.textContent='Slot 1'; - } - } } // camera overlay @@ -3060,11 +3040,23 @@ function closeSettings(){ // ── AMS Slot Edit ── var _slotEditIndex=-1; +var _slotEditLoaded=false; var _MAT_PRESETS=['PLA','PETG','ABS','ASA','TPU','PA','PC','HIPS']; +function updateSlotEditFeedButton(){ + var btn=document.getElementById('btn-slot-edit-feed'); + if(!btn)return; + if(_slotEditIndex<0){ + btn.style.display='none'; + return; + } + btn.style.display=''; + btn.textContent=_slotEditLoaded?(T.slot_edit_unload||'⬆ Unload'):(T.slot_edit_load||'⬇ Load'); +} function openSlotEdit(i){ var slot=(window._amsSlots||[])[i]||{}; var globalIdx=slot.global_index!=null?slot.global_index:(slot.index!=null?slot.index:i); _slotEditIndex=globalIdx; + _slotEditLoaded=(S.ams_loaded_slot!=null&&S.ams_loaded_slot===globalIdx); document.getElementById('slot-edit-title').textContent=T.slot_edit_title+' '+(globalIdx+1); var rgb=Array.isArray(slot.color)?slot.color:[128,128,128]; var hex='#'+rgb.map(function(v){return('0'+Math.min(255,v).toString(16)).slice(-2)}).join(''); @@ -3079,11 +3071,24 @@ function openSlotEdit(i){ +'style="padding:4px 10px;border-radius:6px;border:1px solid var(--border);cursor:pointer;font-size:12px;' +(m===mat?'background:var(--accent);color:#fff':'background:var(--raised);color:var(--txt2)')+'">'+m+''; }).join(''); + updateSlotEditFeedButton(); document.getElementById('slot-edit-modal').classList.add('open'); } function closeSlotEdit(){ + _slotEditIndex=-1; document.getElementById('slot-edit-modal').classList.remove('open'); } +function slotEditFeed(){ + if(_slotEditIndex<0)return; + var type=_slotEditLoaded?2:1; + amsFeed(type,_slotEditIndex) + .then(function(){ + _slotEditLoaded=!_slotEditLoaded; + updateSlotEditFeedButton(); + poll(); + }) + .catch(function(){}); +} function startReadyFile(){ var btn=document.getElementById('file-ready-btn'); if(btn){btn.disabled=true;btn.textContent='…';} @@ -3318,13 +3323,18 @@ function quickFan(v){ } // ── AMS ── -function amsFeed(type){ - var i=parseInt(document.getElementById('ams-slot-sel').value); - var slot=(window._amsSlots||[])[i]||{}; - var globalIdx=slot.global_index!=null?slot.global_index:i; - post('/api/ams/feed',{slot_index:globalIdx,type:type}) +function amsFeed(type,slotIndex){ + var globalIdx; + if(typeof slotIndex==='number'&&slotIndex>=0){ + globalIdx=slotIndex; + }else{ + var i=parseInt(document.getElementById('ams-slot-sel').value); + var slot=(window._amsSlots||[])[i]||{}; + globalIdx=slot.global_index!=null?slot.global_index:i; + } + return post('/api/ams/feed',{slot_index:globalIdx,type:type}) .then(function(){clog((type===1?T.lbl_feed:T.lbl_unload)+' Slot '+(globalIdx+1),'msg-ok')}) - .catch(function(e){clog('AMS-Fehler: '+e,'msg-err')}); + .catch(function(e){clog('AMS-Fehler: '+e,'msg-err');throw e;}); } // ── Camera ──