/** * classify.js - Klassifizierung eines gerade abgelegten Dokuments. * * Wird unmittelbar nach dem Ablegen aufgerufen. Ohne diesen Schritt trägt * ein neues Dokument nur den Titel, und nachträglich macht man es * erfahrungsgemäß nicht mehr. */ import { kurz } from "../lib/settings.js"; import { uebersetzeSeite, ruf, fehlerAnzeigen, meldungAnzeigen } from "./gemeinsam.js"; const $ = (id) => document.getElementById(id); let dokumentId = null; let alleTags = []; document.addEventListener("DOMContentLoaded", start); async function start() { uebersetzeSeite(); const p = new URLSearchParams(location.search); dokumentId = Number(p.get("id")); const weitere = Number(p.get("weiter") || 1); $("ueberspringen").addEventListener("click", () => window.close()); $("speichern").addEventListener("click", speichern); try { const [doc, stamm] = await Promise.all([ ruf("dokument", { id: dokumentId }), ruf("stammdaten") ]); alleTags = stamm.tags; $("quelle").textContent = `#${dokumentId} · ${kurz(doc.title, 70)}` + (weitere > 1 ? ` · ${browser.i18n.getMessage("classifyMoreStored", [String(weitere)]) || `${weitere} Dateien abgelegt`}` : ""); $("titel").value = doc.title || ""; $("erstellt").value = (doc.created || "").slice(0, 10); fuelleListe("korrListe", stamm.korr); fuelleListe("typListe", stamm.typen); $("korr").value = nameVon(stamm.korr, doc.correspondent); $("typ").value = nameVon(stamm.typen, doc.document_type); zeigeTags(doc.tags || []); } catch (err) { fehlerAnzeigen(err.message); } } function fuelleListe(id, eintraege) { const dl = $(id); dl.replaceChildren(); for (const e of eintraege) { const o = document.createElement("option"); o.value = e.name; dl.append(o); } } function nameVon(liste, id) { return liste.find((x) => x.id === id)?.name || ""; } function zeigeTags(gesetzt) { const ziel = $("tags"); ziel.replaceChildren(); for (const tag of alleTags) { const zeile = document.createElement("div"); zeile.className = "wahl"; const box = document.createElement("input"); box.type = "checkbox"; box.id = `t${tag.id}`; box.value = String(tag.id); box.checked = gesetzt.includes(tag.id); const bez = document.createElement("label"); bez.htmlFor = box.id; bez.textContent = tag.name; zeile.append(box, bez); ziel.append(zeile); } } async function speichern() { $("speichern").disabled = true; meldungAnzeigen(browser.i18n.getMessage("msgSaving") || "Wird gespeichert …"); try { const tags = [...$("tags").querySelectorAll("input:checked")] .map((b) => Number(b.value)); const payload = { title: $("titel").value.trim(), tags }; const erstellt = $("erstellt").value.trim(); if (erstellt) payload.created = erstellt; await ruf("klassifizieren", { id: dokumentId, payload, korrName: $("korr").value.trim(), typName: $("typ").value.trim() }); meldungAnzeigen(browser.i18n.getMessage("msgSaved") || "Gespeichert."); setTimeout(() => window.close(), 900); } catch (err) { fehlerAnzeigen(err.message); $("speichern").disabled = false; } }