/** * store.js - Dialog zum Ablegen von Anhängen und ganzen Nachrichten. * * Der Dialog spricht nicht selbst mit Paperless, sondern lässt die * Ereignisseite arbeiten. Dort hängt die zur Laufzeit erteilte * Berechtigung für die Zieladresse. */ import { groesse, kurz, titelAusBetreff } from "../lib/settings.js"; import { umwandelbar } from "../lib/mailpdf.js"; import { uebersetzeSeite, ruf, fehlerAnzeigen, meldungAnzeigen } from "./gemeinsam.js"; const $ = (id) => document.getElementById(id); let auftrag = null; let einstellungen = null; document.addEventListener("DOMContentLoaded", start); async function start() { uebersetzeSeite(); const nummer = Number(new URLSearchParams(location.search).get("auftrag")); einstellungen = await ruf("einstellungen"); auftrag = await ruf("auftrag", { nummer }); if (!auftrag) { fehlerAnzeigen("Der Auftrag ist nicht mehr vorhanden."); return; } quelleAnzeigen(); dateienAnzeigen(); verdrahten(); } function quelleAnzeigen() { const teile = []; if (auftrag.betreff) teile.push(kurz(auftrag.betreff, 80)); if (auftrag.absender) teile.push(kurz(auftrag.absender, 40)); if (auftrag.datum) teile.push(auftrag.datum); $("quelle").textContent = teile.join(" · "); } /** * Anhänge zur Auswahl anbieten. * * Vorab abgewählt werden kleine Bilder und Signaturen. Sie gehören zur * Darstellung der Nachricht, nicht zum Inhalt - wer sie alle mit * archiviert, hat nach einem Jahr hunderte Logos im Bestand. */ /** * Dateien zur Auswahl anbieten, je Zeile mit der Wahl der Ablageart. * * Vorbelegt wird unterschiedlich, weil die Absicht unterschiedlich ist: * * Eine NACHRICHT wird als PDF aufbereitet - eine .eml sieht sich im * Archiv niemand an. * * Ein ANHANG wird im Original abgelegt. Eine Rechnung als PDF ist * bereits das Dokument; sie durch eine Textfassung zu ersetzen wäre * Unfug. Nur bei Textdateien - etwa einem HTML-Anhang - ist die * Aufbereitung sinnvoll, und dort steht sie zur Wahl. */ function dateienAnzeigen() { const ziel = $("dateien"); ziel.replaceChildren(); if (auftrag.quelle === "nachricht") { const name = `${titelAusBetreff(auftrag.betreff)}.eml`; ziel.append(dateiZeile({ schluessel: "ganz", beschriftung: name, gewaehlt: true, festGewaehlt: true, pdfMoeglich: true, alsPdf: (einstellungen.mailFormat || "pdf") === "pdf", hinweisPdf: browser.i18n.getMessage("artMessagePdf") || "als PDF aufbereiten" })); if (auftrag.dateien?.length) { const h = document.createElement("div"); h.className = "hinweis"; h.textContent = browser.i18n.getMessage("storeAttachmentsInside", [String(auftrag.dateien.length)]) || `Die ${auftrag.dateien.length} Anhänge bleiben darin enthalten.`; ziel.append(h); } knopfPruefen(); return; } for (const [i, d] of (auftrag.dateien || []).entries()) { const uninteressant = einstellungen.ignorierteTypen.includes(d.contentType) || (d.size || 0) < einstellungen.ignorierteKleiner; if (d.ausgewaehlt === undefined) d.ausgewaehlt = !uninteressant; if (d.alsPdf === undefined) d.alsPdf = false; ziel.append(dateiZeile({ schluessel: `d${i}`, beschriftung: `${d.name} (${groesse(d.size)}, ${d.contentType})`, gewaehlt: d.ausgewaehlt, pdfMoeglich: umwandelbar(d.contentType, d.name), alsPdf: d.alsPdf, beiWahl: (an) => { d.ausgewaehlt = an; }, beiArt: (pdf) => { d.alsPdf = pdf; } })); } knopfPruefen(); } /** * Eine Zeile der Dateiliste: Häkchen, Name, und rechts die Wahl zwischen * Original und PDF. */ function dateiZeile(o) { const zeile = document.createElement("div"); zeile.className = "dateizeile"; const box = document.createElement("input"); box.type = "checkbox"; box.id = o.schluessel; box.checked = o.gewaehlt; if (o.festGewaehlt) box.disabled = true; box.addEventListener("change", () => { o.beiWahl?.(box.checked); knopfPruefen(); }); const name = document.createElement("label"); name.className = "name"; name.htmlFor = box.id; name.textContent = o.beschriftung; zeile.append(box, name); const art = document.createElement("div"); art.className = "art"; const gruppe = `art_${o.schluessel}`; const machen = (wert, text, aktiv) => { const r = document.createElement("input"); r.type = "radio"; r.name = gruppe; r.id = `${gruppe}_${wert}`; r.value = wert; r.checked = aktiv; if (!o.pdfMoeglich && wert === "pdf") r.disabled = true; r.addEventListener("change", () => { if (r.checked) o.beiArt?.(wert === "pdf"); }); const l = document.createElement("label"); l.htmlFor = r.id; l.textContent = text; if (r.disabled) l.className = "aus"; art.append(r, l); }; machen("original", browser.i18n.getMessage("artOriginal") || "Original ablegen", !o.alsPdf); machen("pdf", o.hinweisPdf || browser.i18n.getMessage("artPdf") || "PDF aufbereiten", Boolean(o.alsPdf) && o.pdfMoeglich); if (!o.pdfMoeglich) { art.title = browser.i18n.getMessage("artPdfUnavailable") || "Für dieses Format nicht möglich - nur Textdateien lassen sich " + "aufbereiten."; } zeile.append(art); return zeile; } /** * 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; meldungAnzeigen(browser.i18n.getMessage("msgOpeningStep") || "Wird vorbereitet …"); try { await ruf("schrittOeffnen", { auftrag: { ...auftrag, titelVorschlag: titelAusBetreff(auftrag.betreff), alsPdf: auftrag.quelle === "nachricht" ? $("art_ganz_pdf")?.checked ?? true : undefined } }); 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; }