tabulator-tables
Version:
Interactive table generation JavaScript library
212 lines (171 loc) • 4.89 kB
JavaScript
var Validate = function(table){
this.table = table;
};
//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 parts, type, params;
switch(typeof value){
case "string":
parts = value.split(":",2);
type = parts.shift();
params = parts[0];
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 = [];
if(validators){
validators.forEach(function(item){
if(!item.func.call(self, cell, value, item.params)){
valid.push({
type:item.type,
parameters:item.params
});
}
});
}
return valid.length ? valid : true;
};
Validate.prototype.validators = {
//is integer
integer: function(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(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(cell, value, parameters){
if(value === "" || value === null || typeof value === "undefined"){
return true;
}
return !isNaN(value);
},
//must be a string
string: function(cell, value, parameters){
if(value === "" || value === null || typeof value === "undefined"){
return true;
}
return isNaN(value);
},
//maximum value
max: function(cell, value, parameters){
if(value === "" || value === null || typeof value === "undefined"){
return true;
}
return parseFloat(value) <= parameters;
},
//minimum value
min: function(cell, value, parameters){
if(value === "" || value === null || typeof value === "undefined"){
return true;
}
return parseFloat(value) >= parameters;
},
//minimum string length
minLength: function(cell, value, parameters){
if(value === "" || value === null || typeof value === "undefined"){
return true;
}
return String(value).length >= parameters;
},
//maximum string length
maxLength: function(cell, value, parameters){
if(value === "" || value === null || typeof value === "undefined"){
return true;
}
return String(value).length <= parameters;
},
//in provided value list
in: function(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(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(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(cell, value, parameters){
return value !== "" && value !== null && typeof value !== "undefined";
},
};
Tabulator.prototype.registerModule("validate", Validate);