Initial commit
This commit is contained in:
109
ui/classify.js
Normal file
109
ui/classify.js
Normal file
@@ -0,0 +1,109 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user