Verbesserung Ablagedialog bei mehreren ausgewählten Dateien
This commit is contained in:
126
ui/store.js
126
ui/store.js
@@ -8,14 +8,13 @@
|
||||
|
||||
import { groesse, kurz, titelAusBetreff } from "../lib/settings.js";
|
||||
import { umwandelbar } from "../lib/mailpdf.js";
|
||||
import { uebersetzeSeite, ruf, fehlerAnzeigen } from "./gemeinsam.js";
|
||||
import { uebersetzeSeite, ruf, fehlerAnzeigen, meldungAnzeigen }
|
||||
from "./gemeinsam.js";
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
|
||||
let auftrag = null;
|
||||
let einstellungen = null;
|
||||
let treffer = [];
|
||||
let gewaehlterTreffer = null;
|
||||
|
||||
document.addEventListener("DOMContentLoaded", start);
|
||||
|
||||
@@ -32,7 +31,6 @@ async function start() {
|
||||
|
||||
quelleAnzeigen();
|
||||
dateienAnzeigen();
|
||||
vorbelegen();
|
||||
verdrahten();
|
||||
}
|
||||
|
||||
@@ -175,112 +173,40 @@ function dateiZeile(o) {
|
||||
return zeile;
|
||||
}
|
||||
|
||||
function vorbelegen() {
|
||||
$("titel").value = titelAusBetreff(auftrag.betreff);
|
||||
if (auftrag.datum) $("erstellt").value = auftrag.datum;
|
||||
}
|
||||
|
||||
function verdrahten() {
|
||||
for (const r of document.querySelectorAll('input[name=ziel]')) {
|
||||
r.addEventListener("change", zielGewechselt);
|
||||
}
|
||||
$("suchen").addEventListener("click", suchen);
|
||||
$("suche").addEventListener("keydown", (e) => {
|
||||
if (e.key === "Enter") suchen();
|
||||
});
|
||||
$("abbrechen").addEventListener("click", () => window.close());
|
||||
$("ablegen").addEventListener("click", ablegen);
|
||||
zielGewechselt();
|
||||
}
|
||||
|
||||
function zielGewechselt() {
|
||||
const neu = $("zielNeu").checked;
|
||||
for (const id of ["titel", "erstellt"]) $(id).disabled = !neu;
|
||||
for (const id of ["suche", "suchen"]) $(id).disabled = neu;
|
||||
if (!neu && !treffer.length) suchen();
|
||||
knopfPruefen();
|
||||
}
|
||||
|
||||
async function suchen() {
|
||||
const liste = $("treffer");
|
||||
liste.replaceChildren();
|
||||
try {
|
||||
treffer = await ruf("suchen", { query: $("suche").value.trim() });
|
||||
} catch (err) {
|
||||
fehlerAnzeigen(err.message);
|
||||
return;
|
||||
}
|
||||
for (const [i, r] of treffer.entries()) {
|
||||
const tr = document.createElement("tr");
|
||||
const asn = document.createElement("td");
|
||||
asn.className = "zahl";
|
||||
asn.textContent = r.archive_serial_number ?? "—";
|
||||
const erstellt = document.createElement("td");
|
||||
erstellt.textContent = (r.created || "").slice(0, 10);
|
||||
const titel = document.createElement("td");
|
||||
titel.textContent = r.title || "";
|
||||
titel.title = r.title || "";
|
||||
tr.append(asn, erstellt, titel);
|
||||
tr.addEventListener("click", () => waehle(i));
|
||||
liste.append(tr);
|
||||
}
|
||||
if (treffer.length) waehle(0);
|
||||
else fehlerAnzeigen(browser.i18n.getMessage("msgNoHits") || "Keine Treffer.");
|
||||
}
|
||||
|
||||
function waehle(i) {
|
||||
gewaehlterTreffer = treffer[i] || null;
|
||||
for (const [j, tr] of [...$("treffer").children].entries()) {
|
||||
tr.classList.toggle("gewaehlt", j === i);
|
||||
}
|
||||
knopfPruefen();
|
||||
}
|
||||
|
||||
function knopfPruefen() {
|
||||
const etwasGewaehlt = auftrag.quelle === "nachricht"
|
||||
|| (auftrag.dateien || []).some((d) => d.ausgewaehlt);
|
||||
const zielOk = $("zielNeu").checked || Boolean(gewaehlterTreffer);
|
||||
$("ablegen").disabled = !(etwasGewaehlt && zielOk);
|
||||
}
|
||||
|
||||
async function ablegen() {
|
||||
/**
|
||||
* Weiter zum Schrittdialog.
|
||||
*
|
||||
* Die Auswahl wird über einen neuen Auftrag übergeben - das Fenster
|
||||
* schliesst sich, und der Schrittdialog geht die Dateien einzeln durch.
|
||||
*/
|
||||
async function weiter() {
|
||||
$("ablegen").disabled = true;
|
||||
$("meldung").className = "hinweis";
|
||||
$("meldung").textContent =
|
||||
browser.i18n.getMessage("msgUploading") || "Wird abgelegt …";
|
||||
|
||||
meldungAnzeigen(browser.i18n.getMessage("msgOpeningStep")
|
||||
|| "Wird vorbereitet …");
|
||||
try {
|
||||
const ergebnisse = await ruf("ablegen", {
|
||||
await ruf("schrittOeffnen", {
|
||||
auftrag: {
|
||||
...auftrag,
|
||||
// Bei einer ganzen Nachricht entscheidet die eine Auswahl, bei
|
||||
// Anhängen steht die Wahl je Datei im Eintrag selbst.
|
||||
titelVorschlag: titelAusBetreff(auftrag.betreff),
|
||||
alsPdf: auftrag.quelle === "nachricht"
|
||||
? $("art_ganz_pdf")?.checked ?? true
|
||||
: undefined
|
||||
},
|
||||
ziel: $("zielNeu").checked ? "neu" : "vorhanden",
|
||||
zielId: gewaehlterTreffer?.id,
|
||||
titel: $("titel").value.trim(),
|
||||
erstellt: $("erstellt").value.trim()
|
||||
}
|
||||
});
|
||||
|
||||
if ($("klassifizieren").checked && ergebnisse.length) {
|
||||
// Beim Anhängen an ein vorhandenes Dokument gilt dessen
|
||||
// Klassifizierung - dann ist die Wurzel gemeint, nicht die neue
|
||||
// Version.
|
||||
const erstes = ergebnisse[0];
|
||||
const id = erstes.art === "version" ? erstes.zielId : erstes.id;
|
||||
location.href = `classify.html?id=${id}&weiter=${ergebnisse.length}`;
|
||||
return;
|
||||
}
|
||||
|
||||
$("meldung").textContent =
|
||||
browser.i18n.getMessage("msgStored", [String(ergebnisse.length)])
|
||||
|| `${ergebnisse.length} abgelegt.`;
|
||||
setTimeout(() => window.close(), 1200);
|
||||
window.close();
|
||||
} catch (err) {
|
||||
fehlerAnzeigen(err.message);
|
||||
$("ablegen").disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function verdrahten() {
|
||||
$("abbrechen").addEventListener("click", () => window.close());
|
||||
$("ablegen").addEventListener("click", weiter);
|
||||
}
|
||||
|
||||
function knopfPruefen() {
|
||||
const etwasGewaehlt = auftrag.quelle === "nachricht"
|
||||
|| (auftrag.dateien || []).some((d) => d.ausgewaehlt);
|
||||
$("ablegen").disabled = !etwasGewaehlt;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user