diff --git a/CHANGELOG.de.md b/CHANGELOG.de.md index f61fe1a..103fd85 100644 --- a/CHANGELOG.de.md +++ b/CHANGELOG.de.md @@ -1,5 +1,18 @@ # Changelog +## [0.9.24] – 2026-06-16 + +### Neu +- **Objekte überspringen in jedem Druck-Flow (Issue #57).** Der „Objekte + überspringen"-Bereich im Slot-Mapper erschien bisher nur beim Druck aus dem + Browser-Tab. Er ist jetzt in allen Flows verfügbar (inkl. Upload / Print-Leiste), + standardmäßig eingeklappt hinter einem `✂ Objekte überspringen (N)`-Header, damit + der Dialog kompakt bleibt — Klick klappt Vorschau + Checkliste auf. +- **Slot-Mapper zeigt konkreten Profilnamen (Issue #57).** Jeder Slot zeigt nun das + zugeordnete Filament-Profil (z.B. „PolyTerra PLA — Polymaker") in den Dropdown- + Optionen und als Hover-Tooltip am Slot-Marker, statt nur des generischen Typs. + Fällt auf den generischen Typ zurück, wenn kein Profil gemappt ist. + ## [0.9.23] – 2026-06-16 ### Neu diff --git a/CHANGELOG.md b/CHANGELOG.md index f8b1b95..4cc2a1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.9.24] – 2026-06-16 + +### New +- **Skip Objects available in every print flow (issue #57).** The "Skip objects" + panel in the Slot Mapper used to appear only when printing from the Browser tab. + It now shows in all flows (upload / print bar included), collapsed by default + behind a `✂ Skip objects (N)` header to keep the dialog compact, expanding on + click with the object preview and checklist. +- **Slot Mapper shows the specific profile name (issue #57).** Each slot now + displays its mapped filament profile (e.g. "PolyTerra PLA — Polymaker") in the + dropdown options and as a hover tooltip on the slot marker, instead of just the + generic type. Falls back to the generic type when no profile is mapped. + ## [0.9.23] – 2026-06-16 ### New diff --git a/VERSION b/VERSION index 68a5945..37d8b0b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.23 +0.9.24 diff --git a/web/themes/default/app.js b/web/themes/default/app.js index 5b2e773..20a381b 100644 --- a/web/themes/default/app.js +++ b/web/themes/default/app.js @@ -259,7 +259,7 @@ function applyLang(){ setText('skip-title',T.skip_title); setText('skip-hint',T.skip_hint); setText('d-btn-skip-label',T.skip_btn_label); - setText('fd-objects-hint',T.fd_objects_hint); + setText('fd-objects-toggle-lbl',T.fd_objects_toggle); setText('apd-lbl-ip',T.apd_lbl_ip); setText('apd-lbl-name',T.apd_lbl_name); var apn=document.getElementById('apd-name');if(apn)apn.setAttribute('placeholder',T.apd_placeholder_name); @@ -2329,6 +2329,18 @@ function _normalizeMaterialKey(material){ function _materialsCompatible(a,b){ return _normalizeMaterialKey(a)===_normalizeMaterialKey(b); } +// Issue #57 Punkt 4: konkreter Profilname (User-Override) statt generischem Typ. +// Fällt auf den Material-Typ zurück wenn kein Profil gemappt ist. +function _slotProfileLabel(slot){ + if(!slot)return ''; + if(slot.filament_name){ + return slot.filament_name+(slot.filament_vendor?' — '+slot.filament_vendor:''); + } + return slot.material||''; +} +function _escAttr(s){ + return String(s||'').replace(/&/g,'&').replace(/"/g,'"').replace(//g,'>'); +} function _updateSlotMarker(sel){ var opt=sel.options[sel.selectedIndex]; var color=opt&&opt.dataset.color?opt.dataset.color:'#888'; @@ -2339,6 +2351,7 @@ function _updateSlotMarker(sel){ marker.style.background=color; marker.style.color=_contrastText(color); marker.textContent=(slotIdx+1); + marker.title=(opt&&opt.dataset.profile)?opt.dataset.profile:''; } } @@ -2353,12 +2366,19 @@ function openFilamentDialog(slots){ // Auto-Leveling-Checkbox mit globalem Default vorbelegen var fdAl=document.getElementById('fd-auto-leveling'); if(fdAl) fdAl.checked=(S.auto_leveling===undefined?true:!!S.auto_leveling); - // Objekt-Liste laden (nur Store-Modus: per File-ID; Banner-Modus hat keine ID) + // Objekt-Liste laden — sobald eine File-ID auflösbar ist (Issue #57 Punkt 3: + // Skip-Parität auch im Banner-/Upload-Modus, nicht nur im Store-Modus). + // startReadyFileWithSlots() setzt _storeFileId auch im Banner-Modus per + // filename→fileObj-Lookup, daher reicht hier die _storeFileId-Prüfung. _printObjects=[]; _printObjectsSvg=''; var objSection=document.getElementById('fd-objects-section'); + var objBody=document.getElementById('fd-objects-body'); + var objArrow=document.getElementById('fd-objects-arrow'); if(objSection)objSection.style.display='none'; - if(_filamentDialogMode==='store'&&_storeFileId){ + if(objBody)objBody.style.display='none'; // immer eingeklappt starten + if(objArrow)objArrow.style.transform=''; + if(_storeFileId){ fetch(_apiUrl('/kx/files/'+encodeURIComponent(_storeFileId)+'/objects')) .then(function(r){return r.json()}) .then(function(d){ @@ -2367,6 +2387,8 @@ function openFilamentDialog(slots){ if(names.length>=2){ _printObjects=names.map(function(n){return {name:n,skip:false};}); renderObjectChecklist(); renderObjectSvg(); + var cnt=document.getElementById('fd-objects-count'); + if(cnt)cnt.textContent='('+names.length+')'; if(objSection)objSection.style.display='block'; } }).catch(function(){}); @@ -2430,8 +2452,8 @@ function openFilamentDialog(slots){ var defaultSlot=compatible.find(function(s){return s.slot_index===defaultSlotIndex;})||null; var opts=compatible.map(function(s){ var sel=(defaultSlot&&s.slot_index===defaultSlot.slot_index)?'selected':''; - return ''; + return ''; }).join(''); if(!compatible.length){ opts=''; @@ -2448,7 +2470,7 @@ function openFilamentDialog(slots){ ''+gc.material+''+ usedBadge+ '→'+ - ''+(defaultSlot?defaultSlot.slot_index+1:'?')+''+ + ''+(defaultSlot?defaultSlot.slot_index+1:'?')+''+ ''+ ''; @@ -2549,6 +2571,15 @@ function _toggleObjectSkip(idx,val){ if(_printObjects[idx])_printObjects[idx].skip=!!val; renderObjectSvg(); } +// Issue #57 Punkt 3: Skip-Objekte-Bereich ein-/ausklappen +function toggleFdObjects(){ + var body=document.getElementById('fd-objects-body'); + var arrow=document.getElementById('fd-objects-arrow'); + if(!body)return; + var open=body.style.display!=='none'; + body.style.display=open?'none':'block'; + if(arrow)arrow.style.transform=open?'':'rotate(90deg)'; +} function renderObjectSvg(){ var box=document.getElementById('fd-objects-svg'); if(!box)return; diff --git a/web/themes/default/index.html b/web/themes/default/index.html index 424ea10..a783654 100644 --- a/web/themes/default/index.html +++ b/web/themes/default/index.html @@ -626,9 +626,16 @@
GCode-Kanal → AMS-Slot zuweisen: