(function (window) { "use strict"; window.ls.container.get('view').add( { selector: 'data-forms-clone', controller: function(element, document, view) { var template = element.innerHTML.toString(); var label = element.dataset['label'] || 'Add'; var icon = element.dataset['icon'] || null; var target = element.dataset['target'] || null; var first = parseInt(element.dataset['first'] || 1); var button = document.createElement('button'); button.type = 'button'; button.innerText = ' ' + label + ' '; button.classList.add('margin-end'); button.classList.add('margin-bottom-small'); button.classList.add('reverse'); if(icon) { var iconElement = document.createElement('i'); iconElement.className = icon; button.insertBefore(iconElement, button.firstChild); } if(target) { target = document.getElementById(target); } button.addEventListener('click', function () { var clone = document.createElement(element.tagName); if(element.name) { clone.name = element.name; } clone.innerHTML = template; clone.className = element.className; view.render(clone); if(target) { target.appendChild(clone); } else { button.parentNode.insertBefore(clone, button); } clone.querySelector('input').focus(); Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj) { obj.addEventListener('click', function () { clone.parentNode.removeChild(clone); obj.scrollIntoView({behavior: 'smooth'}); }); }); Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj) { obj.addEventListener('click', function () { if(clone.previousElementSibling) { clone.parentNode.insertBefore(clone, clone.previousElementSibling); obj.scrollIntoView({behavior: 'smooth'}); } }); }); Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj) { obj.addEventListener('click', function () { if(clone.nextElementSibling) { clone.parentNode.insertBefore(clone.nextElementSibling, clone); obj.scrollIntoView({behavior: 'smooth'}); } }); }); }); element.parentNode.insertBefore(button, element.nextSibling); element.parentNode.removeChild(element); if(first) { button.click(); } } } ); })(window);