((dn, inputs, ldifOutput) => { let changes = [], multipleValues = {}; function ComputeChanges() { let actualChanges = []; for (let i = 0; i < changes.length; ++i) { let ch = changes[i]; if (!ch) continue; if (ch.initialValue.length && ch.newValue.length && (multipleValues[ch.attrName] || 0) === 1) { actualChanges.push(`replace: ${ch.attrName}\n${ch.attrName}: ${ch.newValue}`); } else { if (ch.initialValue.length) { if ((multipleValues[ch.attrName] || 0) === 1) actualChanges.push(`delete: ${ch.attrName}`); else actualChanges.push(`delete: ${ch.attrName}\nattribute: ${ch.initialValue}`); } if (ch.newValue.length) actualChanges.push(`add: ${ch.attrName}\n${ch.attrName}: ${ch.newValue}`); } } if (!actualChanges.length) return ""; actualChanges.sort((a, b) => b.localeCompare(a)); return `dn: ${dn}\nchangetype: modify\n` + actualChanges.join("\n-\n"); } function UpdateLdif() { ldifOutput.textContent = ComputeChanges(); ldifOutput.style.height = ldifOutput.scrollHeight + "px" } function onValueChanged(input) { let initialValue = input.dataset.initialValue || "", inputId = input.dataset.inputId, newValue = input.value || "", attrName = input.dataset.attributeName; if (initialValue === newValue) changes[inputId] = undefined; else changes[inputId] = { initialValue: initialValue, newValue: newValue, attrName: attrName }; UpdateLdif(); } inputs.forEach(i => { let attrName = i.dataset.attributeName; if ((i.dataset.initialValue || "").length) multipleValues[attrName] = (multipleValues[attrName] || 0) + 1; i.addEventListener("change", e => onValueChanged(e.currentTarget)) }); })(window['dn'], document.querySelectorAll(".LDAPAttribute > input"), document.getElementById("ldifOutput"));