1
0
Fork 0
mirror of synced 2024-07-04 06:00:53 +12:00
appwrite/public/scripts/views/forms/clone.js
2019-05-09 11:01:51 +03:00

91 lines
3.4 KiB
JavaScript

(function (window) {
"use strict";
window.ls.container.get('view').add(
{
selector: 'data-forms-clone',
repeat: false,
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);