28 lines
1.3 KiB
JavaScript
28 lines
1.3 KiB
JavaScript
// 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();
|
|
});
|