otsdaq_utilities  v2_05_02_indev
validate.js
1 var Validate = function(table){
2  this.table = table;
3 };
4 
5 //validate
6 Validate.prototype.initializeColumn = function(column){
7  var self = this,
8  config = [],
9  validator;
10 
11  if(column.definition.validator){
12 
13  if(Array.isArray(column.definition.validator)){
14  column.definition.validator.forEach(function(item){
15  validator = self._extractValidator(item);
16 
17  if(validator){
18  config.push(validator);
19  }
20  });
21 
22  }else{
23  validator = this._extractValidator(column.definition.validator);
24 
25  if(validator){
26  config.push(validator);
27  }
28  }
29 
30  column.modules.validate = config.length ? config : false;
31  }
32 };
33 
34 Validate.prototype._extractValidator = function(value){
35  var type, params, pos;
36 
37  switch(typeof value){
38  case "string":
39  pos = value.indexOf(':');
40 
41  if(pos > -1){
42  type = value.substring(0,pos);
43  params = value.substring(pos+1);
44  }else{
45  type = value;
46  }
47 
48  return this._buildValidator(type, params);
49  break;
50 
51  case "function":
52  return this._buildValidator(value);
53  break;
54 
55  case "object":
56  return this._buildValidator(value.type, value.parameters);
57  break;
58  }
59 };
60 
61 Validate.prototype._buildValidator = function(type, params){
62 
63  var func = typeof type == "function" ? type : this.validators[type];
64 
65  if(!func){
66  console.warn("Validator Setup Error - No matching validator found:", type);
67  return false;
68  }else{
69  return {
70  type:typeof type == "function" ? "function" : type,
71  func:func,
72  params:params,
73  };
74  }
75 };
76 
77 
78 Validate.prototype.validate = function(validators, cell, value){
79  var self = this,
80  valid = [];
81 
82  if(validators){
83  validators.forEach(function(item){
84  if(!item.func.call(self, cell, value, item.params)){
85  valid.push({
86  type:item.type,
87  parameters:item.params
88  });
89  }
90  });
91  }
92 
93  return valid.length ? valid : true;
94 };
95 
96 Validate.prototype.validators = {
97 
98  //is integer
99  integer: function(cell, value, parameters){
100  if(value === "" || value === null || typeof value === "undefined"){
101  return true;
102  }
103  value = Number(value);
104  return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
105  },
106 
107  //is float
108  float: function(cell, value, parameters){
109  if(value === "" || value === null || typeof value === "undefined"){
110  return true;
111  }
112  value = Number(value);
113  return typeof value === 'number' && isFinite(value) && value % 1 !== 0;
114  },
115 
116  //must be a number
117  numeric: function(cell, value, parameters){
118  if(value === "" || value === null || typeof value === "undefined"){
119  return true;
120  }
121  return !isNaN(value);
122  },
123 
124  //must be a string
125  string: function(cell, value, parameters){
126  if(value === "" || value === null || typeof value === "undefined"){
127  return true;
128  }
129  return isNaN(value);
130  },
131 
132  //maximum value
133  max: function(cell, value, parameters){
134  if(value === "" || value === null || typeof value === "undefined"){
135  return true;
136  }
137  return parseFloat(value) <= parameters;
138  },
139 
140  //minimum value
141  min: function(cell, value, parameters){
142  if(value === "" || value === null || typeof value === "undefined"){
143  return true;
144  }
145  return parseFloat(value) >= parameters;
146  },
147 
148  //minimum string length
149  minLength: function(cell, value, parameters){
150  if(value === "" || value === null || typeof value === "undefined"){
151  return true;
152  }
153  return String(value).length >= parameters;
154  },
155 
156  //maximum string length
157  maxLength: function(cell, value, parameters){
158  if(value === "" || value === null || typeof value === "undefined"){
159  return true;
160  }
161  return String(value).length <= parameters;
162  },
163 
164  //in provided value list
165  in: function(cell, value, parameters){
166  if(value === "" || value === null || typeof value === "undefined"){
167  return true;
168  }
169  if(typeof parameters == "string"){
170  parameters = parameters.split("|");
171  }
172 
173  return value === "" || parameters.indexOf(value) > -1;
174  },
175 
176  //must match provided regex
177  regex: function(cell, value, parameters){
178  if(value === "" || value === null || typeof value === "undefined"){
179  return true;
180  }
181  var reg = new RegExp(parameters);
182 
183  return reg.test(value);
184  },
185 
186  //value must be unique in this column
187  unique: function(cell, value, parameters){
188  if(value === "" || value === null || typeof value === "undefined"){
189  return true;
190  }
191  var unique = true;
192 
193  var cellData = cell.getData();
194  var column = cell.getColumn()._getSelf();
195 
196  this.table.rowManager.rows.forEach(function(row){
197  var data = row.getData();
198 
199  if(data !== cellData){
200  if(value == column.getFieldValue(data)){
201  unique = false;
202  }
203  }
204  });
205 
206  return unique;
207  },
208 
209  //must have a value
210  required:function(cell, value, parameters){
211  return value !== "" && value !== null && typeof value !== "undefined";
212  },
213 };
214 
215 
216 Tabulator.prototype.registerModule("validate", Validate);