Verbesserung Ablagedialog bei mehreren ausgewählten Dateien
This commit is contained in:
@@ -14,6 +14,12 @@ const $ = (id) => document.getElementById(id);
|
||||
let dokumentId = null;
|
||||
let alleTags = [];
|
||||
|
||||
// Bei mehreren abgelegten Dateien wird jede einzeln klassifiziert.
|
||||
// Andernfalls trüge nur die erste eine sinnvolle Zuordnung, und die
|
||||
// übrigen fielen später als unklassifiziert auf - wenn überhaupt.
|
||||
let liste = [];
|
||||
let stelle = 0;
|
||||
|
||||
// Gewählte Tags als Menge. Bewusst getrennt vom angezeigten Zustand der
|
||||
// Kontrollkästchen: Der Filter blendet Zeilen aus, die Auswahl darf davon
|
||||
// nicht berührt werden.
|
||||
@@ -24,38 +30,82 @@ 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());
|
||||
// "ids" für mehrere, "id" für den Einzelfall - letzteres bleibt für
|
||||
// Aufrufe aus anderen Stellen erhalten.
|
||||
const roh = p.get("ids") || p.get("id") || "";
|
||||
liste = roh.split(",").map((x) => Number(x)).filter(Boolean);
|
||||
stelle = 0;
|
||||
|
||||
$("ueberspringen").addEventListener("click", weiter);
|
||||
$("abbrechenAlle").addEventListener("click", () => window.close());
|
||||
$("speichern").addEventListener("click", speichern);
|
||||
|
||||
try {
|
||||
const [doc, stamm] = await Promise.all([
|
||||
ruf("dokument", { id: dokumentId }),
|
||||
ruf("stammdaten")
|
||||
]);
|
||||
alleTags = stamm.tags;
|
||||
if (!liste.length) {
|
||||
fehlerAnzeigen("Kein Dokument angegeben.");
|
||||
return;
|
||||
}
|
||||
|
||||
$("quelle").textContent =
|
||||
`#${dokumentId} · ${kurz(doc.title, 70)}`
|
||||
+ (weitere > 1
|
||||
? ` · ${browser.i18n.getMessage("classifyMoreStored",
|
||||
[String(weitere)]) || `${weitere} Dateien abgelegt`}`
|
||||
: "");
|
||||
try {
|
||||
const stamm = await ruf("stammdaten");
|
||||
alleTags = stamm.tags;
|
||||
fuelleListe("korrListe", stamm.korr);
|
||||
fuelleListe("typListe", stamm.typen);
|
||||
zustand.korr = stamm.korr;
|
||||
zustand.typen = stamm.typen;
|
||||
} catch (err) {
|
||||
fehlerAnzeigen(err.message);
|
||||
return;
|
||||
}
|
||||
|
||||
await anzeigen();
|
||||
}
|
||||
|
||||
const zustand = { korr: [], typen: [] };
|
||||
|
||||
/** Das Dokument an der aktuellen Stelle laden und darstellen. */
|
||||
async function anzeigen() {
|
||||
dokumentId = liste[stelle];
|
||||
$("speichern").disabled = false;
|
||||
$("ueberspringen").disabled = false;
|
||||
meldungAnzeigen("");
|
||||
|
||||
// Der Knopf zum Abbrechen aller weiteren ist nur sinnvoll, wenn noch
|
||||
// welche folgen.
|
||||
$("abbrechenAlle").hidden = liste.length < 2;
|
||||
|
||||
try {
|
||||
const doc = await ruf("dokument", { id: dokumentId });
|
||||
|
||||
const zaehler = liste.length > 1
|
||||
? ` · ${browser.i18n.getMessage("classifyProgress",
|
||||
[String(stelle + 1), String(liste.length)])
|
||||
|| `${stelle + 1} von ${liste.length}`}`
|
||||
: "";
|
||||
$("quelle").textContent = `#${dokumentId} · ${kurz(doc.title, 60)}`
|
||||
+ zaehler;
|
||||
|
||||
$("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);
|
||||
$("korr").value = nameVon(zustand.korr, doc.correspondent);
|
||||
$("typ").value = nameVon(zustand.typen, doc.document_type);
|
||||
zeigeTags(doc.tags || []);
|
||||
if ($("tagSuche")) $("tagSuche").value = "";
|
||||
} catch (err) {
|
||||
fehlerAnzeigen(err.message);
|
||||
}
|
||||
}
|
||||
|
||||
/** Zum nächsten Dokument, oder schliessen. */
|
||||
async function weiter() {
|
||||
stelle += 1;
|
||||
if (stelle >= liste.length) {
|
||||
window.close();
|
||||
return;
|
||||
}
|
||||
await anzeigen();
|
||||
}
|
||||
|
||||
function fuelleListe(id, eintraege) {
|
||||
const dl = $(id);
|
||||
dl.replaceChildren();
|
||||
@@ -204,7 +254,7 @@ async function speichern() {
|
||||
typName: $("typ").value.trim()
|
||||
});
|
||||
meldungAnzeigen(browser.i18n.getMessage("msgSaved") || "Gespeichert.");
|
||||
setTimeout(() => window.close(), 900);
|
||||
setTimeout(weiter, 600);
|
||||
} catch (err) {
|
||||
fehlerAnzeigen(err.message);
|
||||
$("speichern").disabled = false;
|
||||
|
||||
Reference in New Issue
Block a user