@dzeio/form-manager
Version:
A powerfull Form Manager
202 lines (201 loc) • 7.99 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var AttributesManager_1 = __importDefault(require("./AttributesManager"));
var DefaultInput_1 = __importDefault(require("./modules/DefaultInput"));
var AttributeListeners_1 = __importDefault(require("./attributes/AttributeListeners"));
var FormManager = (function () {
function FormManager(form) {
this.inputs = {};
this.FMInputs = [];
this.mode = FMMode.EditMode;
this.form = form;
this.attributeManager = new AttributesManager_1.default(this);
form.onsubmit = function (e) {
e.preventDefault();
};
this.assign(DefaultInput_1.default);
this.setupInputs();
}
FormManager.prototype.assign = function () {
var inter = [];
for (var _i = 0; _i < arguments.length; _i++) {
inter[_i] = arguments[_i];
}
for (var _a = 0, inter_1 = inter; _a < inter_1.length; _a++) {
var input = inter_1[_a];
this.FMInputs.unshift(input.identity);
}
};
FormManager.prototype.setupInputs = function () {
var _this = this;
this.inputs = {};
this.form.querySelectorAll("[name]:not([data-name])").forEach(function (element) {
var el = _this.getInit(element);
if (el)
_this.inputs[el.getName()] = el;
});
this.attributeManager.trigger(AttributeListeners_1.default.FORM_INIT);
};
FormManager.prototype.getInit = function (element) {
inputsLoop: for (var _i = 0, _a = this.FMInputs; _i < _a.length; _i++) {
var input = _a[_i];
if (input.classes != undefined) {
var tmpList = [];
if (typeof input.classes == "object")
tmpList = input.classes;
if (typeof input.classes === "string")
tmpList = [input.classes];
for (var _b = 0, tmpList_1 = tmpList; _b < tmpList_1.length; _b++) {
var classe = tmpList_1[_b];
if (!element.classList.contains(classe))
continue inputsLoop;
}
}
if (input.attributes != undefined) {
var tmpList = [];
if (typeof input.attributes == "object")
tmpList = input.attributes;
if (typeof input.attributes === "string")
tmpList = [input.attributes];
for (var _c = 0, tmpList_2 = tmpList; _c < tmpList_2.length; _c++) {
var classe = tmpList_2[_c];
if (!element.hasAttribute(classe))
continue inputsLoop;
}
}
if (input.type !== undefined) {
if (element.getAttribute("type") !== input.type)
continue;
}
if (input.tagName !== undefined) {
if (element.nodeName.toLowerCase() !== input.tagName.toLowerCase())
continue;
}
return new (input.input)(element, this);
}
};
FormManager.prototype.verify = function () {
for (var name_1 in this.inputs) {
if (this.inputs.hasOwnProperty(name_1)) {
var input = this.inputs[name_1];
var res = this.attributeManager.triggerElement(AttributeListeners_1.default.VERIFY, input);
if (!input.verify() || !res) {
console.log(input.verify(), res);
this.lastErroredInput = input;
return false;
}
}
}
this.lastErroredInput = undefined;
return true;
};
FormManager.prototype.submit = function (url, callback, verify) {
if (verify === void 0) { verify = true; }
if (verify && !this.verify())
return false;
var toSend = this.getJSON();
var event = this.attributeManager.trigger(AttributeListeners_1.default.FORM_SUBMIT, toSend);
if (typeof event !== "boolean" && event) {
toSend = event;
}
var ajax = new XMLHttpRequest;
ajax.open("POST", url, true);
ajax.setRequestHeader("Content-Type", "application/json");
if (callback != undefined)
ajax.addEventListener("loadend", callback);
ajax.send(JSON.stringify(toSend));
return true;
};
FormManager.prototype.getJSON = function () {
var jsonObject = {};
for (var name_2 in this.inputs) {
if (this.inputs.hasOwnProperty(name_2)) {
var input = this.inputs[name_2];
var val = input.getValue();
if (val != undefined)
jsonObject[name_2] = val;
}
}
return jsonObject;
};
FormManager.prototype.fillFromJSON = function (json) {
for (var key in json) {
if (json.hasOwnProperty(key)) {
var element = json[key];
if (this.inputs[key] !== undefined)
this.inputs[key].setValue(element);
else
console.warn(key + " is not a valid input name");
}
}
this.attributeManager.trigger(AttributeListeners_1.default.FORM_FILL);
};
FormManager.prototype.fillFromURI = function (uri, callback) {
var _this = this;
var ajax = new XMLHttpRequest;
ajax.open("GET", uri, true);
ajax.addEventListener("loadend", function () {
if (ajax.readyState === 4 && ajax.status === 200) {
var json = JSON.parse(ajax.responseText);
_this.fillFromJSON(json);
if (callback != undefined)
callback();
}
});
ajax.send();
};
FormManager.prototype.setMode = function (mode) {
this.mode = mode;
if (mode == FMMode.ViewMode) {
for (var name_3 in this.inputs) {
if (this.inputs.hasOwnProperty(name_3)) {
var input = this.inputs[name_3];
input.element.setAttribute("disabled", "");
}
}
}
if (mode == FMMode.EditMode) {
for (var name_4 in this.inputs) {
if (this.inputs.hasOwnProperty(name_4)) {
var input = this.inputs[name_4];
input.element.removeAttribute("disabled");
}
}
}
this.attributeManager.trigger(AttributeListeners_1.default.MODE_SWITCH, mode);
};
FormManager.prototype.setModeForInput = function (mode, inputName) {
if (mode == FMMode.ViewMode) {
if (this.inputs[inputName]) {
this.inputs[inputName].element.setAttribute("disabled", "");
}
return;
}
if (mode == FMMode.EditMode) {
if (this.inputs[inputName]) {
this.inputs[inputName].element.removeAttribute("disabled");
}
}
};
FormManager.prototype.clear = function () {
if (this.attributeManager.trigger(AttributeListeners_1.default.PRE_CLEAR) === false)
return;
for (var name_5 in this.inputs) {
if (this.inputs.hasOwnProperty(name_5)) {
var input = this.inputs[name_5];
input.setValue(undefined);
}
}
this.attributeManager.trigger(AttributeListeners_1.default.POST_CLEAR);
};
return FormManager;
}());
exports.default = FormManager;
var FMMode;
(function (FMMode) {
FMMode[FMMode["EditMode"] = 0] = "EditMode";
FMMode[FMMode["ViewMode"] = 1] = "ViewMode";
})(FMMode = exports.FMMode || (exports.FMMode = {}));