{"version":3,"file":"jquery/jquery.validate.unobtrusive.js","sources":["jquery/jquery.validate.unobtrusive.js"],"sourcesContent":["// Unobtrusive validation support library for jQuery and jQuery Validate\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// @version v3.2.12\r\n\r\n/*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 */\r\n/*global document: false, jQuery: false */\r\n\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\r\n } else if (typeof module === 'object' && module.exports) {\r\n // CommonJS-like environments that support module.exports\r\n module.exports = factory(require('jquery-validation'));\r\n } else {\r\n // Browser global\r\n jQuery.validator.unobtrusive = factory(jQuery);\r\n }\r\n}(function ($) {\r\n var $jQval = $.validator,\r\n adapters,\r\n data_validation = \"unobtrusiveValidation\";\r\n\r\n function setValidationValues(options, ruleName, value) {\r\n options.rules[ruleName] = value;\r\n if (options.message) {\r\n options.messages[ruleName] = options.message;\r\n }\r\n }\r\n\r\n function splitAndTrim(value) {\r\n return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\r\n }\r\n\r\n function escapeAttributeValue(value) {\r\n // As mentioned on http://api.jquery.com/category/selectors/\r\n return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\r\n }\r\n\r\n function getModelPrefix(fieldName) {\r\n return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\r\n }\r\n\r\n function appendModelPrefix(value, prefix) {\r\n if (value.indexOf(\"*.\") === 0) {\r\n value = value.replace(\"*.\", prefix);\r\n }\r\n return value;\r\n }\r\n\r\n function onError(error, inputElement) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\r\n replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\r\n\r\n container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\r\n error.data(\"unobtrusiveContainer\", container);\r\n\r\n if (replace) {\r\n container.empty();\r\n error.removeClass(\"input-validation-error\").appendTo(container);\r\n }\r\n else {\r\n error.hide();\r\n }\r\n }\r\n\r\n function onErrors(event, validator) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-summary=true]\"),\r\n list = container.find(\"ul\");\r\n\r\n if (list && list.length && validator.errorList.length) {\r\n list.empty();\r\n container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\r\n\r\n $.each(validator.errorList, function () {\r\n $(\"
\").html(this.message).appendTo(list);\r\n });\r\n }\r\n }\r\n\r\n function onSuccess(error) { // 'this' is the form element\r\n var container = error.data(\"unobtrusiveContainer\");\r\n\r\n if (container) {\r\n var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\r\n\r\n container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\r\n error.removeData(\"unobtrusiveContainer\");\r\n\r\n if (replace) {\r\n container.empty();\r\n }\r\n }\r\n }\r\n\r\n function onReset(event) { // 'this' is the form element\r\n var $form = $(this),\r\n key = '__jquery_unobtrusive_validation_form_reset';\r\n if ($form.data(key)) {\r\n return;\r\n }\r\n // Set a flag that indicates we're currently resetting the form.\r\n $form.data(key, true);\r\n try {\r\n $form.data(\"validator\").resetForm();\r\n } finally {\r\n $form.removeData(key);\r\n }\r\n\r\n $form.find(\".validation-summary-errors\")\r\n .addClass(\"validation-summary-valid\")\r\n .removeClass(\"validation-summary-errors\");\r\n $form.find(\".field-validation-error\")\r\n .addClass(\"field-validation-valid\")\r\n .removeClass(\"field-validation-error\")\r\n .removeData(\"unobtrusiveContainer\")\r\n .find(\">*\") // If we were using valmsg-replace, get the underlying error\r\n .removeData(\"unobtrusiveContainer\");\r\n }\r\n\r\n function validationInfo(form) {\r\n var $form = $(form),\r\n result = $form.data(data_validation),\r\n onResetProxy = $.proxy(onReset, form),\r\n defaultOptions = $jQval.unobtrusive.options || {},\r\n execInContext = function (name, args) {\r\n var func = defaultOptions[name];\r\n func && $.isFunction(func) && func.apply(form, args);\r\n };\r\n\r\n if (!result) {\r\n result = {\r\n options: { // options structure passed to jQuery Validate's validate() method\r\n errorClass: defaultOptions.errorClass || \"input-validation-error\",\r\n errorElement: defaultOptions.errorElement || \"span\",\r\n errorPlacement: function () {\r\n onError.apply(form, arguments);\r\n execInContext(\"errorPlacement\", arguments);\r\n },\r\n invalidHandler: function () {\r\n onErrors.apply(form, arguments);\r\n execInContext(\"invalidHandler\", arguments);\r\n },\r\n messages: {},\r\n rules: {},\r\n success: function () {\r\n onSuccess.apply(form, arguments);\r\n execInContext(\"success\", arguments);\r\n }\r\n },\r\n attachValidation: function () {\r\n $form\r\n .off(\"reset.\" + data_validation, onResetProxy)\r\n .on(\"reset.\" + data_validation, onResetProxy)\r\n .validate(this.options);\r\n },\r\n validate: function () { // a validation function that is called by unobtrusive Ajax\r\n $form.validate();\r\n return $form.valid();\r\n }\r\n };\r\n $form.data(data_validation, result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n $jQval.unobtrusive = {\r\n adapters: [],\r\n\r\n parseElement: function (element, skipAttach) {\r\n ///