UNPKG

@dzeio/form-manager

Version:

A powerfull Form Manager

202 lines (201 loc) 7.99 kB
"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 = {}));