entity.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. ((dn, inputs, ldifOutput) => {
  2. let changes = [],
  3. multipleValues = {};
  4. function ComputeChanges() {
  5. let actualChanges = [];
  6. for (let i = 0; i < changes.length; ++i) {
  7. let ch = changes[i];
  8. if (!ch)
  9. continue;
  10. if (ch.initialValue.length && ch.newValue.length && (multipleValues[ch.attrName] || 0) === 1) {
  11. actualChanges.push(`replace: ${ch.attrName}\n${ch.attrName}: ${ch.newValue}`);
  12. } else {
  13. if (ch.initialValue.length) {
  14. if ((multipleValues[ch.attrName] || 0) === 1)
  15. actualChanges.push(`delete: ${ch.attrName}`);
  16. else
  17. actualChanges.push(`delete: ${ch.attrName}\nattribute: ${ch.initialValue}`);
  18. }
  19. if (ch.newValue.length)
  20. actualChanges.push(`add: ${ch.attrName}\n${ch.attrName}: ${ch.newValue}`);
  21. }
  22. }
  23. if (!actualChanges.length)
  24. return "";
  25. actualChanges.sort((a, b) => b.localeCompare(a));
  26. return `dn: ${dn}\nchangetype: modify\n` + actualChanges.join("\n-\n");
  27. }
  28. function UpdateLdif() {
  29. ldifOutput.textContent = ComputeChanges();
  30. ldifOutput.style.height = ldifOutput.scrollHeight + "px"
  31. }
  32. function onValueChanged(input) {
  33. let initialValue = input.dataset.initialValue || "",
  34. inputId = input.dataset.inputId,
  35. newValue = input.value || "",
  36. attrName = input.dataset.attributeName;
  37. if (initialValue === newValue)
  38. changes[inputId] = undefined;
  39. else
  40. changes[inputId] = { initialValue: initialValue, newValue: newValue, attrName: attrName };
  41. UpdateLdif();
  42. }
  43. inputs.forEach(i => {
  44. let attrName = i.dataset.attributeName;
  45. if ((i.dataset.initialValue || "").length)
  46. multipleValues[attrName] = (multipleValues[attrName] || 0) + 1;
  47. i.addEventListener("change", e => onValueChanged(e.currentTarget))
  48. });
  49. })(window['dn'], document.querySelectorAll(".LDAPAttribute > input"), document.getElementById("ldifOutput"));