/* * For labels to update their state (css selectors based on the value attribute) */ export function updateInputs() { document.querySelectorAll('input, textarea').forEach(el => { if (!el.dataset.inputSetup) { el.dataset.inputSetup = 'true'; if (el.type !== 'checkbox') { el.setAttribute('value', el.value); el.addEventListener('change', () => { el.setAttribute('value', el.value); }); } } }); } document.addEventListener('DOMContentLoaded', () => { updateInputs(); }); export function applyFormMessages(formElement: HTMLFormElement, messages: { [p: string]: any }) { for (const fieldName of Object.keys(messages)) { const field = formElement.querySelector('#field-' + fieldName); if (!field) continue; let parent = field.parentElement; while (parent && !parent.classList.contains('form-field')) parent = parent.parentElement; if (field) { let err = field.querySelector('.error'); if (!err) { err = document.createElement('div'); err.classList.add('error'); parent?.insertBefore(err, parent.querySelector('.hint') || parent); } err.innerHTML = ` ${messages[fieldName].message}`; } } }