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:
1 parent
d1eb87ba25
commit
2b1e36634a
53 files changed
+4254
-636
No files matched your search
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user