Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 87eca76

Browse files
committed
[wip] add isValid function to all valType declarations
1 parent f69fc5f commit 87eca76

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

src/lib/coerce.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ exports.valObjects = {
3030
coerceFunction: function(v, propOut, dflt) {
3131
if(Array.isArray(v)) propOut.set(v);
3232
else if(dflt !== undefined) propOut.set(dflt);
33+
},
34+
isValidFunction: function(v) {
35+
return Array.isArray(v);
3336
}
3437
},
3538
enumerated: {
@@ -43,6 +46,10 @@ exports.valObjects = {
4346
if(opts.coerceNumber) v = +v;
4447
if(opts.values.indexOf(v) === -1) propOut.set(dflt);
4548
else propOut.set(v);
49+
},
50+
isValidFunction: function(v, opts) {
51+
if(opts.coerceNumber) v = +v;
52+
return (opts.values.indexOf(v) !== -1);
4653
}
4754
},
4855
'boolean': {
@@ -52,6 +59,9 @@ exports.valObjects = {
5259
coerceFunction: function(v, propOut, dflt) {
5360
if(v === true || v === false) propOut.set(v);
5461
else propOut.set(dflt);
62+
},
63+
isValidFunction: function(v) {
64+
return typeof v === 'boolean';
5565
}
5666
},
5767
number: {
@@ -70,6 +80,13 @@ exports.valObjects = {
7080
propOut.set(dflt);
7181
}
7282
else propOut.set(+v);
83+
},
84+
isValidFunction: function(v, opts) {
85+
return (
86+
isNumeric(v) &&
87+
(v > opts.min || -Infinity) &&
88+
(v < opts.max || Infinity)
89+
);
7390
}
7491
},
7592
integer: {
@@ -87,6 +104,14 @@ exports.valObjects = {
87104
propOut.set(dflt);
88105
}
89106
else propOut.set(+v);
107+
},
108+
isValidFunction: function(v, opts) {
109+
return (
110+
(v % 1 === 0) &&
111+
isNumeric(v) &&
112+
(v > opts.min || -Infinity) ||
113+
(v < opts.max || Infinity)
114+
);
90115
}
91116
},
92117
string: {
@@ -109,6 +134,11 @@ exports.valObjects = {
109134
propOut.set(dflt);
110135
}
111136
else propOut.set(s);
137+
},
138+
isValidFunction: function(v, opts) {
139+
if(opts.strict === true && typeof v !== 'string') return false;
140+
if(v === undefined || (opts.noBlank === true && !String(v))) return false;
141+
return true;
112142
}
113143
},
114144
color: {
@@ -127,6 +157,9 @@ exports.valObjects = {
127157
coerceFunction: function(v, propOut, dflt) {
128158
if(tinycolor(v).isValid()) propOut.set(v);
129159
else propOut.set(dflt);
160+
},
161+
isValidFunction: function(v) {
162+
return tinycolor(v).isValid();
130163
}
131164
},
132165
colorscale: {
@@ -142,6 +175,9 @@ exports.valObjects = {
142175
otherOpts: ['dflt'],
143176
coerceFunction: function(v, propOut, dflt) {
144177
propOut.set(getColorscale(v, dflt));
178+
},
179+
isValidFunction: function() {
180+
return true; // TODO be more strict
145181
}
146182
},
147183
angle: {
@@ -157,6 +193,9 @@ exports.valObjects = {
157193
if(Math.abs(v) > 180) v -= Math.round(v / 360) * 360;
158194
propOut.set(+v);
159195
}
196+
},
197+
isValidFunction: function() {
198+
return true;
160199
}
161200
},
162201
subplotid: {
@@ -175,6 +214,9 @@ exports.valObjects = {
175214
return;
176215
}
177216
propOut.set(dflt);
217+
},
218+
isValidFunction: function() {
219+
return true;
178220
}
179221
},
180222
flaglist: {
@@ -207,6 +249,9 @@ exports.valObjects = {
207249
}
208250
if(!vParts.length) propOut.set(dflt);
209251
else propOut.set(vParts.join('+'));
252+
},
253+
isValidFunction: function() {
254+
return true; // TODO
210255
}
211256
},
212257
any: {
@@ -216,6 +261,9 @@ exports.valObjects = {
216261
coerceFunction: function(v, propOut, dflt) {
217262
if(v === undefined) propOut.set(dflt);
218263
else propOut.set(v);
264+
},
265+
isValidFunction: function(v) {
266+
return (v !== undefined);
219267
}
220268
},
221269
info_array: {
@@ -239,6 +287,9 @@ exports.valObjects = {
239287
}
240288

241289
propOut.set(vOut);
290+
},
291+
isValidFunction: function() {
292+
return true; // TODO
242293
}
243294
}
244295
};
@@ -309,3 +360,15 @@ exports.coerceFont = function(coerce, attr, dfltObj) {
309360

310361
return out;
311362
};
363+
364+
exports.isValid = function(containerIn, attributes, attribute) {
365+
var opts = nestedProperty(attributes, attribute).get(),
366+
propIn = nestedProperty(containerIn, attribute),
367+
v = propIn.get();
368+
369+
if(opts.arrayOk && Array.isArray(v)) return true;
370+
371+
var out = exports.valObjects[opts.valType].isValidFunction(v, opts);
372+
373+
return out;
374+
};

src/lib/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ lib.valObjects = coerceModule.valObjects;
2121
lib.coerce = coerceModule.coerce;
2222
lib.coerce2 = coerceModule.coerce2;
2323
lib.coerceFont = coerceModule.coerceFont;
24+
lib.isValid = coerceModule.isValid;
2425

2526
var datesModule = require('./dates');
2627
lib.dateTime2ms = datesModule.dateTime2ms;

0 commit comments

Comments
 (0)