Files
thunderbird-paperless-conne…/ui/gemeinsam.js

73 lines
2.3 KiB
JavaScript

/**
* gemeinsam.js - Hilfsmittel für alle Dialogseiten.
*/
/**
* Ruft die Ereignisseite und wirft bei Fehlern eine Ausnahme.
*
* Unterscheidet zwei Fälle, die sonst dieselbe nichtssagende Meldung
* ergeben ("An unexpected error occurred"):
*
* * Die Nachricht erreicht keinen Empfänger - das Hintergrundskript
* ist nicht geladen oder abgestürzt.
* * Der Empfänger meldet einen Fehler zurück.
*/
export async function ruf(befehl, daten = {}) {
let antwort;
try {
antwort = await browser.runtime.sendMessage({ befehl, ...daten });
} catch (err) {
console.error("[paperless] sendMessage", befehl, err);
throw new Error(
`Das Hintergrundskript antwortet nicht (${befehl}).\n`
+ `Ursprüngliche Meldung: ${err?.message || err}\n\n`
+ `Einzelheiten in der Konsole: Extras -> Entwicklerwerkzeuge -> `
+ `Debuggen von Add-ons -> Inspizieren.`);
}
if (antwort === undefined) {
throw new Error(
`Keine Antwort auf ${befehl}. Das Hintergrundskript ist `
+ `vermutlich nicht geladen.`);
}
if (!antwort?.ok) {
throw new Error(antwort?.fehler || `Aufruf ${befehl} fehlgeschlagen`);
}
return antwort.daten;
}
/**
* Beschriftungen aus _locales einsetzen.
*
* Elemente mit data-i18n bekommen ihren Text, solche mit
* data-i18n-placeholder ihren Platzhalter. Fehlt ein Eintrag, bleibt der
* im HTML hinterlegte deutsche Text stehen.
*/
export function uebersetzeSeite() {
for (const el of document.querySelectorAll("[data-i18n]")) {
const s = browser.i18n.getMessage(el.dataset.i18n);
if (s) el.textContent = s;
}
for (const el of document.querySelectorAll("[data-i18n-placeholder]")) {
const s = browser.i18n.getMessage(el.dataset.i18nPlaceholder);
if (s) el.placeholder = s;
}
for (const el of document.querySelectorAll("[data-i18n-title]")) {
const s = browser.i18n.getMessage(el.dataset.i18nTitle);
if (s) el.title = s;
}
}
export function fehlerAnzeigen(text) {
const ziel = document.getElementById("meldung");
if (!ziel) return;
ziel.className = "fehler";
ziel.textContent = String(text || "").slice(0, 300);
}
export function meldungAnzeigen(text) {
const ziel = document.getElementById("meldung");
if (!ziel) return;
ziel.className = "hinweis";
ziel.textContent = String(text || "");
}