v0.0.4: e-mailtemplates met velden ({voornaam}, {model}, {afzender}…), te kiezen bij nieuwe e-mail, antwoord en contact; inbox met nieuwe e-mail, doorsturen, CC en bijlagen, Verzonden, Archief, zoeken, als ongelezen markeren en alles gelezen; agenda per gebruiker met CalDAV (/dav/, app-wachtwoord in Mijn account); zoeken en Nieuw in de bovenbalk; e-mailinstellingen met voorinstellingen (OVHcloud, Gmail), beveiliging per server, kopie in Verzonden en verbindingstest; offerte in het klantportaal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Machiel
2026-10-16 17:29:47 +02:00
co-authored by Claude Opus 5.5
parent 81fc27fa86
commit 366a3f9d17
26 changed files with 2095 additions and 271 deletions
+27
View File
@@ -0,0 +1,27 @@
// E-mail opstellen (templates/_compose.html): een template zet zijn tekst boven het bericht (of vervangt de tekst die
// de vorige template daar zette) en vult een leeg onderwerp. Velden als {voornaam} worden ingevuld met data-vars; wat
// overblijft, vult de server bij het versturen in.
document.querySelectorAll('form.compose').forEach((form) => {
const pick = form.querySelector('select[name="template"]');
if (!pick) return;
const vars = JSON.parse(form.dataset.vars || '{}');
const fill = (text) => text.replace(/\{(\w+)\}/g, (m, k) => (k in vars ? vars[k] : m));
const subject = form.elements.subject, body = form.elements.body;
let added = '', addedSubject = '';
function apply() {
const o = pick.selectedOptions[0];
const on = o && o.value;
const rest = (added && body.value.startsWith(added) ? body.value.slice(added.length) : body.value).replace(/^\n+/, '');
const text = on ? fill(o.dataset.body || '') : '';
added = text && rest ? `${text}\n\n` : text;
body.value = added + rest;
if (!subject.value.trim() || subject.value === addedSubject) {
addedSubject = on ? fill(o.dataset.subject || '') : '';
subject.value = addedSubject;
}
body.focus();
body.setSelectionRange(text.length, text.length);
}
pick.addEventListener('change', apply);
if (pick.value) apply();
});