Keine Beschreibung

django_better_admin_arrayfield.js 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // I am to lazy to add js transpiler and compressor to this. just use https://jscompress.com
  2. window.addEventListener('load', function () {
  3. let item_count = 1;
  4. function addRemoveEventListener(widgetElement) {
  5. widgetElement.querySelectorAll('.remove').forEach(element => {
  6. element.addEventListener('click', () => {
  7. element.parentNode.remove();
  8. });
  9. });
  10. }
  11. function initializeWidget(widgetElement) {
  12. const initialElement = widgetElement.querySelector('.array-item');
  13. const elementTemplate = initialElement.cloneNode(true);
  14. const parentElement = initialElement.parentElement;
  15. if (initialElement.getAttribute('data-isNone')) {
  16. initialElement.remove();
  17. elementTemplate.removeAttribute('data-isNone');
  18. elementTemplate.removeAttribute('style');
  19. }
  20. addRemoveEventListener(widgetElement);
  21. widgetElement.querySelector('.add-array-item').addEventListener('click', () => {
  22. item_count++;
  23. const newElement = elementTemplate.cloneNode(true);
  24. const id_parts = newElement.querySelector('input').getAttribute('id').split('_');
  25. const id = id_parts.slice(0, -1).join('_') + '_' + String(item_count - 1);
  26. newElement.querySelector('input').setAttribute('id', id);
  27. newElement.querySelector('input').value = '';
  28. addRemoveEventListener(newElement);
  29. parentElement.appendChild(newElement);
  30. });
  31. }
  32. django.jQuery(".dynamic-array-widget").not(".empty-form .dynamic-array-widget").each(
  33. (index, widgetElement) => initializeWidget(widgetElement)
  34. );
  35. django.jQuery(document).on('formset:added', function(event, $row, formsetName) {
  36. $row[0].querySelectorAll(".dynamic-array-widget").forEach(
  37. widgetElement => initializeWidget(widgetElement)
  38. );
  39. });
  40. });