window.ldap_test_edit_popup = new class { constructor() { this.overlay = null; this.dialogue = null; this.form = null; } init() { this.overlay = overlays_stack.getById('ldap_test_edit'); this.dialogue = this.overlay.$dialogue[0]; this.form = this.overlay.$dialogue.$body[0].querySelector('form'); } submit() { this.removePopupMessages(); this.overlay.setLoading(); const fields = this.trimFields(getFormFields(this.form)); const curl = new Curl(this.form.getAttribute('action')); fetch(curl.getUrl(), { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(fields) }) .then((response) => response.json()) .then((response) => { if ('provisioning' in response) { this.appendProvisioning(document.getElementById('provisioning_role'), response.provisioning.role); this.appendProvisioning(document.getElementById('provisioning_groups'), response.provisioning.groups); this.appendProvisioning(document.getElementById('provisioning_medias'), response.provisioning.medias); } if ('error' in response) { throw {error: response.error}; } else if ('success' in response) { const message_box = makeMessageBox('good', [], response.success.title, false, true)[0]; this.form.parentNode.insertBefore(message_box, this.form); } }) .catch((exception) => { let title; let messages = []; if (typeof exception === 'object' && 'error' in exception) { title = exception.error.title; messages = exception.error.messages; } else { title = ; } const message_box = makeMessageBox('bad', messages, title, true, true)[0]; this.form.parentNode.insertBefore(message_box, this.form); }) .finally(() => { this.overlay.unsetLoading(); }); } appendProvisioning(parent, names) { let span; parent.innerHTML = ''; if (names.length > 0) { for (const name of names) { span = document.createElement('span'); span.innerText = name; span.classList.add(); parent.appendChild(span); } } else { span = document.createElement('span'); span.innerText = ; span.classList.add(); parent.appendChild(span); } } removePopupMessages() { for (const el of this.form.parentNode.children) { if (el.matches('.msg-good, .msg-bad, .msg-warning')) { el.parentNode.removeChild(el); } } } trimFields(fields) { fields.test_username = fields.test_username.trim(); return fields; } };