topical media & game development
mobile-application-03-MVCDerbyService-MVCDerbyService-Scripts-jquery.validate.unobtrusive.js / js
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
/*global document: false, jQuery: false */
(function (jQval = /g, "").split(/\s*,\s*/g);
}
function getModelPrefix(fieldName) {
return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
}
function appendModelPrefix(value, prefix) {
if (value.indexOf("*.") === 0) {
value = value.replace("*.", prefix);
}
return value;
}
function onError(error, inputElement) { // 'this' is the form element
var container = this.find("[data-valmsg-for='" + inputElement[0].name + "']"),
replace = .each(validator.errorList, function () {
$("<li />").html(this.message).appendTo(list);
});
}
}
function onSuccess(error) { // 'this' is the form element
var container = error.data("unobtrusiveContainer"),
replace = form = form,
result = .proxy(onError, form),
invalidHandler: .proxy(onSuccess, form)
},
attachValidation: function () {
form.validate();
return form.data(data_validation, result);
}
return result;
}
<summary>
Parses a single HTML element for unobtrusive validation attributes.
</summary>
<param name="element" domElement="true">The HTML element to be parsed.
</param>
<param name="skipAttach" type="Boolean">
[Optional] true to skip attaching the
validation to the form. If parsing just this single element, you should specify true.
If parsing several elements, you should specify false, and manually attach the validation
to the form when you are finished. The default is false.
</param>
var element = element,
form =
.each(this.adapters, function () {
var prefix = "data-val-" + this.name,
message =
.each(this.params, function () {
paramValues[this] =
jQval.unobtrusive.parseElement(this, true);
});
$("form").each(function () {
var info = validationInfo(this);
if (info) {
info.attachValidation();
}
});
}
};
adapters = <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.
</summary>
<param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
in the data-val-nnnn HTML attribute (where nnnn is the adapter name).
</param>
<param name="params" type="Array" optional="true">
[Optional] An array of parameter names (strings) that will
be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
mmmm is the parameter name).
</param>
<param name="fn" type="Function">The function to call, which adapts the values from the HTML
attributes into jQuery Validate rules and/or messages.
</param>
<returns type="jQuery.validator.unobtrusive.adapters" />
if (!fn) { // Called with no params, just a function
fn = params;
params = [];
}
this.push({ name: adapterName, params: params, adapt: fn });
return this;
};
adapters.addBool = function (adapterName, ruleName) {
<summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
the jQuery Validate validation rule has no parameter values.
</summary>
<param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
in the data-val-nnnn HTML attribute (where nnnn is the adapter name).
</param>
<param name="ruleName" type="String" optional="true">
[Optional] The name of the jQuery Validate rule. If not provided, the value
of adapterName will be used instead.
</param>
<returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, function (options) {
setValidationValues(options, ruleName || adapterName, true);
});
};
adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
<summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
one for min-and-max). The HTML parameters are expected to be named -min and -max.
</summary>
<param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
in the data-val-nnnn HTML attribute (where nnnn is the adapter name).
</param>
<param name="minRuleName" type="String">The name of the jQuery Validate rule to be used when you only
have a minimum value.
</param>
<param name="maxRuleName" type="String">The name of the jQuery Validate rule to be used when you only
have a maximum value.
</param>
<param name="minMaxRuleName" type="String">The name of the jQuery Validate rule to be used when you
have both a minimum and maximum value.
</param>
<param name="minAttribute" type="String" optional="true">
[Optional] The name of the HTML attribute that
contains the minimum value. The default is "min".
</param>
<param name="maxAttribute" type="String" optional="true">
[Optional] The name of the HTML attribute that
contains the maximum value. The default is "max".
</param>
<returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
var min = options.params.min,
max = options.params.max;
if (min && max) {
setValidationValues(options, minMaxRuleName, [min, max]);
}
else if (min) {
setValidationValues(options, minRuleName, min);
}
else if (max) {
setValidationValues(options, maxRuleName, max);
}
});
};
adapters.addSingleVal = function (adapterName, attribute, ruleName) {
<summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
the jQuery Validate validation rule has a single value.
</summary>
<param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
in the data-val-nnnn HTML attribute(where nnnn is the adapter name).
</param>
<param name="attribute" type="String">
[Optional] The name of the HTML attribute that contains the value.
The default is "val".
</param>
<param name="ruleName" type="String" optional="true">
[Optional] The name of the jQuery Validate rule. If not provided, the value
of adapterName will be used instead.
</param>
<returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, [attribute || "val"], function (options) {
setValidationValues(options, ruleName || adapterName, options.params[attribute]);
});
};
jQval.addMethod("__dummy__", function (value, element, params) {
return true;
});
.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
var paramName = appendModelPrefix(fieldName, prefix);
value.data[paramName] = function () {
return $(options.form).find(":input[name='" + paramName + "']").val();
};
});
setValidationValues(options, "remote", value);
});
$(function () {
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.