1
0
Fork 0
mirror of synced 2024-06-28 11:10:46 +12:00
appwrite/public/scripts/views/forms/clone.js
2019-09-13 13:47:07 +03:00

96 lines
2.8 KiB
JavaScript

(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);