UNPKG

tabulator-tables

Version:

Interactive table generation JavaScript library

286 lines (230 loc) 7 kB
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* Tabulator v4.9.3 (c) Oliver Folkerd */ var Validate = function Validate(table) { this.table = table; this.invalidCells = []; }; //validate Validate.prototype.initializeColumn = function (column) { var self = this, config = [], validator; if (column.definition.validator) { if (Array.isArray(column.definition.validator)) { column.definition.validator.forEach(function (item) { validator = self._extractValidator(item); if (validator) { config.push(validator); } }); } else { validator = this._extractValidator(column.definition.validator); if (validator) { config.push(validator); } } column.modules.validate = config.length ? config : false; } }; Validate.prototype._extractValidator = function (value) { var type, params, pos; switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { case "string": pos = value.indexOf(':'); if (pos > -1) { type = value.substring(0, pos); params = value.substring(pos + 1); } else { type = value; } return this._buildValidator(type, params); break; case "function": return this._buildValidator(value); break; case "object": return this._buildValidator(value.type, value.parameters); break; } }; Validate.prototype._buildValidator = function (type, params) { var func = typeof type == "function" ? type : this.validators[type]; if (!func) { console.warn("Validator Setup Error - No matching validator found:", type); return false; } else { return { type: typeof type == "function" ? "function" : type, func: func, params: params }; } }; Validate.prototype.validate = function (validators, cell, value) { var self = this, valid = [], invalidIndex = this.invalidCells.indexOf(cell); if (validators) { validators.forEach(function (item) { if (!item.func.call(self, cell.getComponent(), value, item.params)) { valid.push({ type: item.type, parameters: item.params }); } }); } valid = valid.length ? valid : true; if (!cell.modules.validate) { cell.modules.validate = {}; } if (valid === true) { cell.modules.validate.invalid = false; cell.getElement().classList.remove("tabulator-validation-fail"); if (invalidIndex > -1) { this.invalidCells.splice(invalidIndex, 1); } } else { cell.modules.validate.invalid = true; if (this.table.options.validationMode !== "manual") { cell.getElement().classList.add("tabulator-validation-fail"); } if (invalidIndex == -1) { this.invalidCells.push(cell); } } return valid; }; Validate.prototype.getInvalidCells = function () { var output = []; this.invalidCells.forEach(function (cell) { output.push(cell.getComponent()); }); return output; }; Validate.prototype.clearValidation = function (cell) { var invalidIndex; if (cell.modules.validate && cell.modules.validate.invalid) { cell.getElement().classList.remove("tabulator-validation-fail"); cell.modules.validate.invalid = false; invalidIndex = this.invalidCells.indexOf(cell); if (invalidIndex > -1) { this.invalidCells.splice(invalidIndex, 1); } } }; Validate.prototype.validators = { //is integer integer: function integer(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } value = Number(value); return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; }, //is float float: function float(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } value = Number(value); return typeof value === 'number' && isFinite(value) && value % 1 !== 0; }, //must be a number numeric: function numeric(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return !isNaN(value); }, //must be a string string: function string(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return isNaN(value); }, //maximum value max: function max(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return parseFloat(value) <= parameters; }, //minimum value min: function min(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return parseFloat(value) >= parameters; }, //starts with value starts: function starts(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return String(value).toLowerCase().startsWith(String(parameters).toLowerCase()); }, //ends with value ends: function ends(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return String(value).toLowerCase().endsWith(String(parameters).toLowerCase()); }, //minimum string length minLength: function minLength(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return String(value).length >= parameters; }, //maximum string length maxLength: function maxLength(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } return String(value).length <= parameters; }, //in provided value list in: function _in(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } if (typeof parameters == "string") { parameters = parameters.split("|"); } return value === "" || parameters.indexOf(value) > -1; }, //must match provided regex regex: function regex(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } var reg = new RegExp(parameters); return reg.test(value); }, //value must be unique in this column unique: function unique(cell, value, parameters) { if (value === "" || value === null || typeof value === "undefined") { return true; } var unique = true; var cellData = cell.getData(); var column = cell.getColumn()._getSelf(); this.table.rowManager.rows.forEach(function (row) { var data = row.getData(); if (data !== cellData) { if (value == column.getFieldValue(data)) { unique = false; } } }); return unique; }, //must have a value required: function required(cell, value, parameters) { return value !== "" && value !== null && typeof value !== "undefined"; } }; Tabulator.prototype.registerModule("validate", Validate);