Files
popcyclical-blog-archive/media/images/jQueryValidateandJeditable_E71E/xValRuleAdapter.js
T

95 lines
2.8 KiB
JavaScript

function convertXvalToValidateOptions(xRulesConfig) {
// this is adapted from xVal.jquery.validate.js so that it can generate
// the rule/message set rather than binding rules directly to DOM elements
var vRules = {};
var vMessages = {};
// returns true only if object is empty
function isEmpty(obj) {
for (var i in obj) {
return false;
}
return true;
}
for (var i = 0; i < xRulesConfig.Fields.length; i++) {
var xFieldName = xRulesConfig.Fields[i].FieldName;
var xFieldRules = xRulesConfig.Fields[i].FieldRules;
var vFieldRules = {};
var vFieldMessages = {};
for (var j = 0; j < xFieldRules.length; j++) {
var xRule = xFieldRules[j];
if (xRule != null) {
var ruleName = xRule.RuleName;
var ruleParams = xRule.RuleParameters;
var errorText = (typeof (xRule.Message) == 'undefined' ? null : xRule.Message);
switch (ruleName) {
case "Required":
vFieldRules.required = true;
if (errorText)
vFieldMessages.required = errorText;
break;
case "Range":
// NOTE: If DataAnnotations could be sending different types for string and DateTime,
// implement the checks here if needed
if (typeof (ruleParams.Min) == 'undefined') {
vFieldRules.max = ruleParams.Max;
if (errorText)
vFieldMessages.max = errorText;
}
else if (typeof (ruleParams.Max) == 'undefined') {
vFieldRules.min = ruleParams.Min;
if (errorText)
vFieldMessages.min = errorText;
}
else {
vFieldRules.range = [ruleParams.Min, ruleParams.Max];
if (errorText)
vFieldMessages.range = errorText;
}
break;
case "StringLength":
// NOTE: the StringLengthAttribute only takes a max length parameter
vFieldRules.maxlength = ruleParams.MaxLength;
if (errorText)
vFieldMessages.maxlength = errorText;
break;
case "DataType":
switch (ruleParams.Type) {
case "EmailAddress":
vFieldRules.email = true;
if (errorText)
vFieldMessages.email = errorText;
break;
case "Integer":
vFieldRules.digits = true;
if (errorText)
vFieldMessages.digits = errorText;
break;
case "Decimal":
vFieldRules.number = true;
if (errorText)
vFieldMessages.number = errorText;
break;
case "Date":
vFieldRules.date = true;
if (errorText)
vFieldMessages.date = errorText;
break;
}
break;
}
}
if (!isEmpty(vFieldRules))
vRules[xFieldName] = vFieldRules;
if (!isEmpty(vFieldMessages))
vMessages[xFieldName] = vFieldMessages;
}
}
removeNumberRuleForCurrency(vRules);
return { rules: vRules, messages: vMessages };
}