templates/variation/form.html.twig line 1

Open in your IDE?
  1. {% extends 'layouts/constrained.html.twig' %}
  2. {% block page_content %}
  3.     {{ form_start(form) }}
  4.     <div class="form-group">
  5.         <button type="button" class="add_item_link btn btn-secondary" data-collection-holder-class="domainPool">
  6.             Add a variation
  7.         </button>
  8.     </div>
  9.     <div>
  10.         <ul
  11.             class="domainPool"
  12.             data-index="0"
  13.             data-prototype="
  14.             <div class=&quot;input-group&quot;>
  15.                 <input type=&quot;text&quot; id=&quot;domain_variation_domainPool___name__&quot; name=&quot;domain_variation[domainPool][__name__]&quot; required=&quot;required&quot; class=&quot;form-control&quot; />
  16.                 <div class=&quot;input-group-append remove_item_link&quot;>
  17.                     <div class=&quot;input-group-text&quot;>X</div>
  18.                 </div>
  19.             </div>
  20.             "
  21.         >
  22.             {% for domain in form.domainPool %}
  23.                 <li class="domain-item mt-2">
  24.                     <div class="input-group">
  25.                         {{ form_errors(domain) }}
  26.                         {{ form_widget(domain) }}
  27.                         <div class="input-group-append remove_item_link">
  28.                             <div class="input-group-text">X</div>
  29.                         </div>
  30.                     </div>
  31.                 </li>
  32.             {% endfor %}
  33.         </ul>
  34.     </div>
  35.     {{ form_end(form) }}
  36.     
  37.     <script>
  38.         function removeItem (event) {
  39.             $(event.currentTarget).closest('li.domain-item').remove();
  40.             refreshIndex();
  41.         }
  42.         function refreshIndex() {
  43.             // remapping index
  44.             const lstInput = $('li.domain-item input');
  45.             const nbOfInput = lstInput.length;
  46.             for (let i =0; i< nbOfInput; i += 1) {
  47.                 $(lstInput[i]).attr('name', 'domain_variation[domainPool][' + i + ']');
  48.                 $(lstInput[i]).attr('id', 'domain_variation_domainPool_' + i);
  49.             }
  50.             // rebinding click event
  51.             const removeItemButtons = $('div.remove_item_link');
  52.             removeItemButtons.unbind('click');
  53.             removeItemButtons.click(function (e) {
  54.                 removeItem(e);
  55.             });
  56.         }
  57.         $('button.add_item_link').click(function (e) {
  58.             const collectionHolder = document.querySelector('.' + $(e.target).data('collection-holder-class'));
  59.             const item = document.createElement('li');
  60.             $(item).attr('class', 'domain-item mt-2');
  61.             item.innerHTML = collectionHolder
  62.                 .dataset
  63.                 .prototype;
  64.             collectionHolder.appendChild(item);
  65.             refreshIndex();
  66.         });
  67.         $('div.remove_item_link').click(function (e) {
  68.             removeItem(e);
  69.         });
  70.     </script>
  71. {% endblock %}