{"version":3,"file":"sxa-jquery-validation.f5fede8b3895cfded0ed.js","mappings":"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","sources":["webpack://sitecore-platform/./sxa-base-themes/jquery-validation-unobtrusive/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.11\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 /// \r\n /// Parses a single HTML element for unobtrusive validation attributes.\r\n /// \r\n /// The HTML element to be parsed.\r\n /// [Optional] true to skip attaching the\r\n /// validation to the form. If parsing just this single element, you should specify true.\r\n /// If parsing several elements, you should specify false, and manually attach the validation\r\n /// to the form when you are finished. The default is false.\r\n var $element = $(element),\r\n form = $element.parents(\"form\")[0],\r\n valInfo, rules, messages;\r\n\r\n if (!form) { // Cannot do client-side validation without a form\r\n return;\r\n }\r\n\r\n valInfo = validationInfo(form);\r\n valInfo.options.rules[element.name] = rules = {};\r\n valInfo.options.messages[element.name] = messages = {};\r\n\r\n $.each(this.adapters, function () {\r\n var prefix = \"data-val-\" + this.name,\r\n message = $element.attr(prefix),\r\n paramValues = {};\r\n\r\n if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)\r\n prefix += \"-\";\r\n\r\n $.each(this.params, function () {\r\n paramValues[this] = $element.attr(prefix + this);\r\n });\r\n\r\n this.adapt({\r\n element: element,\r\n form: form,\r\n message: message,\r\n params: paramValues,\r\n rules: rules,\r\n messages: messages\r\n });\r\n }\r\n });\r\n\r\n $.extend(rules, { \"__dummy__\": true });\r\n\r\n if (!skipAttach) {\r\n valInfo.attachValidation();\r\n }\r\n },\r\n\r\n parse: function (selector) {\r\n /// \r\n /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\r\n /// with the [data-val=true] attribute value and enables validation according to the data-val-*\r\n /// attribute values.\r\n /// \r\n /// Any valid jQuery selector.\r\n\r\n // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\r\n // element with data-val=true\r\n var $selector = $(selector),\r\n $forms = $selector.parents()\r\n .addBack()\r\n .filter(\"form\")\r\n .add($selector.find(\"form\"))\r\n .has(\"[data-val=true]\");\r\n\r\n $selector.find(\"[data-val=true]\").each(function () {\r\n $jQval.unobtrusive.parseElement(this, true);\r\n });\r\n\r\n $forms.each(function () {\r\n var info = validationInfo(this);\r\n if (info) {\r\n info.attachValidation();\r\n }\r\n });\r\n }\r\n };\r\n\r\n adapters = $jQval.unobtrusive.adapters;\r\n\r\n adapters.add = function (adapterName, params, fn) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] An array of parameter names (strings) that will\r\n /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\r\n /// mmmm is the parameter name).\r\n /// The function to call, which adapts the values from the HTML\r\n /// attributes into jQuery Validate rules and/or messages.\r\n /// \r\n if (!fn) { // Called with no params, just a function\r\n fn = params;\r\n params = [];\r\n }\r\n this.push({ name: adapterName, params: params, adapt: fn });\r\n return this;\r\n };\r\n\r\n adapters.addBool = function (adapterName, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has no parameter values.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, function (options) {\r\n setValidationValues(options, ruleName || adapterName, true);\r\n });\r\n };\r\n\r\n adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\r\n /// one for min-and-max). The HTML parameters are expected to be named -min and -max.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a minimum value.\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a maximum value.\r\n /// The name of the jQuery Validate rule to be used when you\r\n /// have both a minimum and maximum value.\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the minimum value. The default is \"min\".\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the maximum value. The default is \"max\".\r\n /// \r\n return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\r\n var min = options.params.min,\r\n max = options.params.max;\r\n\r\n if (min && max) {\r\n setValidationValues(options, minMaxRuleName, [min, max]);\r\n }\r\n else if (min) {\r\n setValidationValues(options, minRuleName, min);\r\n }\r\n else if (max) {\r\n setValidationValues(options, maxRuleName, max);\r\n }\r\n });\r\n };\r\n\r\n adapters.addSingleVal = function (adapterName, attribute, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has a single value.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).\r\n /// [Optional] The name of the HTML attribute that contains the value.\r\n /// The default is \"val\".\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, [attribute || \"val\"], function (options) {\r\n setValidationValues(options, ruleName || adapterName, options.params[attribute]);\r\n });\r\n };\r\n\r\n $jQval.addMethod(\"__dummy__\", function (value, element, params) {\r\n return true;\r\n });\r\n\r\n $jQval.addMethod(\"regex\", function (value, element, params) {\r\n var match;\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n\r\n match = new RegExp(params).exec(value);\r\n return (match && (match.index === 0) && (match[0].length === value.length));\r\n });\r\n\r\n $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\r\n var match;\r\n if (nonalphamin) {\r\n match = value.match(/\\W/g);\r\n match = match && match.length >= nonalphamin;\r\n }\r\n return match;\r\n });\r\n\r\n if ($jQval.methods.extension) {\r\n adapters.addSingleVal(\"accept\", \"mimtype\");\r\n adapters.addSingleVal(\"extension\", \"extension\");\r\n } else {\r\n // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\r\n // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\r\n // validating the extension, and ignore mime-type validations as they are not supported.\r\n adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\r\n }\r\n\r\n adapters.addSingleVal(\"regex\", \"pattern\");\r\n adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\r\n adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\r\n adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\r\n adapters.add(\"equalto\", [\"other\"], function (options) {\r\n var prefix = getModelPrefix(options.element.name),\r\n other = options.params.other,\r\n fullOtherName = appendModelPrefix(other, prefix),\r\n element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\r\n\r\n setValidationValues(options, \"equalTo\", element);\r\n });\r\n adapters.add(\"required\", function (options) {\r\n // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\r\n if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\r\n setValidationValues(options, \"required\", true);\r\n }\r\n });\r\n adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\r\n var value = {\r\n url: options.params.url,\r\n type: options.params.type || \"GET\",\r\n data: {}\r\n },\r\n prefix = getModelPrefix(options.element.name);\r\n\r\n $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\r\n var paramName = appendModelPrefix(fieldName, prefix);\r\n value.data[paramName] = function () {\r\n var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\r\n // For checkboxes and radio buttons, only pick up values from checked fields.\r\n if (field.is(\":checkbox\")) {\r\n return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\r\n }\r\n else if (field.is(\":radio\")) {\r\n return field.filter(\":checked\").val() || '';\r\n }\r\n return field.val();\r\n };\r\n });\r\n\r\n setValidationValues(options, \"remote\", value);\r\n });\r\n adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\r\n if (options.params.min) {\r\n setValidationValues(options, \"minlength\", options.params.min);\r\n }\r\n if (options.params.nonalphamin) {\r\n setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\r\n }\r\n if (options.params.regex) {\r\n setValidationValues(options, \"regex\", options.params.regex);\r\n }\r\n });\r\n adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\r\n setValidationValues(options, \"extension\", options.params.extensions);\r\n });\r\n\r\n $(function () {\r\n $jQval.unobtrusive.parse(document);\r\n });\r\n\r\n return $jQval.unobtrusive;\r\n}));\r\n"],"names":["define","$","adapters","$jQval","validator","data_validation","setValidationValues","options","ruleName","value","rules","message","messages","escapeAttributeValue","replace","getModelPrefix","fieldName","substr","lastIndexOf","appendModelPrefix","prefix","indexOf","onError","error","inputElement","container","this","find","name","replaceAttrValue","attr","parseJSON","removeClass","addClass","data","empty","appendTo","hide","onErrors","event","list","length","errorList","each","html","onSuccess","removeData","onReset","$form","key","resetForm","validationInfo","form","result","onResetProxy","proxy","defaultOptions","unobtrusive","execInContext","args","func","isFunction","apply","errorClass","errorElement","errorPlacement","arguments","invalidHandler","success","attachValidation","off","on","validate","valid","parseElement","element","skipAttach","valInfo","$element","parents","paramValues","undefined","params","adapt","extend","parse","selector","$selector","$forms","addBack","filter","add","has","info","adapterName","fn","push","addBool","addMinMax","minRuleName","maxRuleName","minMaxRuleName","minAttribute","maxAttribute","min","max","addSingleVal","attribute","addMethod","match","optional","RegExp","exec","index","nonalphamin","methods","extension","fullOtherName","other","tagName","toUpperCase","type","url","split","splitAndTrim","additionalfields","i","paramName","field","is","val","regex","extensions","document"],"sourceRoot":""}