Grotti 3.6.0: Lauf-Identität nach Filament-Pause, robustere Queue, Projekte/Aufträge list-first und API-Polish.

This commit is contained in:
Dominic Gundel committed 2026-10-25 08:24:24 +01:00
1 parent d1eb87ba25
commit 2b1e36634a
53 files changed
+4254 -636

No files matched your search

+27 -4
View File
@@ -604,6 +604,20 @@ function folderLabel(folder) {
return "Wurzel";
}
function folderMatches(fileFolder, selected) {
if (!selected) return true;
if (selected === "root") return !fileFolder;
if (!fileFolder) return false;
return fileFolder === selected || fileFolder.startsWith(selected + "/");
}
function releaseRootForProject() {
const project = document.getElementById("file-filter-project").value;
const folder = document.getElementById("file-filter-folder");
if (!folder || !project || project === "none" || folder.value !== "root") return;
folder.value = "";
}
function saveLibMemory() {
try {
localStorage.setItem(LIB_KEY, JSON.stringify({
@@ -650,8 +664,7 @@ function filteredFiles() {
const types = ((file.filaments) || []).map((f) => f.type).filter(Boolean);
if (!types.includes(material)) return false;
}
if (folder === "root" && folderKey(file)) return false;
if (folder && folder !== "root" && folderKey(file) !== folder) return false;
if (!folderMatches(folderKey(file), folder)) return false;
if (!q) return true;
const hay = [
file.name || "",
@@ -809,10 +822,13 @@ function alwaysMeta(file, project) {
file.weight_g ? grams(file.weight_g) : "",
layerHeightText(file),
families[file.printer_family] || "",
project ? project.name : "",
];
if (!file.weight_g && !file.estimated_s) bits.push(sizeText(file.size_bytes));
return bits.filter(Boolean).map((t) => `<span>${escapeHtml(t)}</span>`).join("") + swatchesHtml(file);
const spans = bits.filter(Boolean).map((t) => `<span>${escapeHtml(t)}</span>`);
if (project) {
spans.push(`<a class="lib-proj" href="/projekte#${encodeURIComponent(project.id)}" onclick="event.stopPropagation()">${escapeHtml(project.name)}</a>`);
}
return spans.join("") + swatchesHtml(file);
}
function detailMeta(file) {
@@ -1154,6 +1170,12 @@ async function load() {
fillProjectFilter();
fillMaterialFilter();
fillFolderFilter();
const deepProject = new URLSearchParams(location.search).get("project");
if (deepProject) {
const pf = document.getElementById("file-filter-project");
if (pf && [...pf.options].some((o) => o.value === deepProject)) pf.value = deepProject;
}
releaseRootForProject();
renderLibrary();
renderTabs();
refreshFlow();
@@ -1689,6 +1711,7 @@ document.getElementById("lib-list").addEventListener("keydown", (event) => {
const node = document.getElementById(id);
if (!node) return;
const onChange = () => {
if (id === "file-filter-project") releaseRootForProject();
libPage = 1;
saveLibMemory();
renderLibrary();