110 lines
3.2 KiB
JavaScript
110 lines
3.2 KiB
JavaScript
/**
|
|
* 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;
|
|
}
|
|
}
|