{"version":3,"file":"parsley.min.js","sources":["../src/parsley/utils.js","../src/parsley/base.js","../src/parsley/defaults.js","../src/parsley/validator.js","../src/parsley/validator_registry.js","../src/parsley/ui.js","../src/parsley/form.js","../src/parsley/constraint.js","../src/parsley/field.js","../src/parsley/multiple.js","../src/parsley/factory.js","../src/parsley/main.js","../src/parsley/pubsub.js","../src/parsley/remote.js","../src/i18n/en.js","../src/vendor/inputevent.js","../src/parsley.js"],"sourcesContent":["import $ from 'jquery';\n\nvar globalID = 1;\nvar pastWarnings = {};\n\nvar Utils = {\n // Parsley DOM-API\n // returns object from dom attributes and values\n attr: function (element, namespace, obj) {\n var i;\n var attribute;\n var attributes;\n var regex = new RegExp('^' + namespace, 'i');\n\n if ('undefined' === typeof obj)\n obj = {};\n else {\n // Clear all own properties. This won't affect prototype's values\n for (i in obj) {\n if (obj.hasOwnProperty(i))\n delete obj[i];\n }\n }\n\n if (!element)\n return obj;\n\n attributes = element.attributes;\n for (i = attributes.length; i--; ) {\n attribute = attributes[i];\n\n if (attribute && attribute.specified && regex.test(attribute.name)) {\n obj[this.camelize(attribute.name.slice(namespace.length))] = this.deserializeValue(attribute.value);\n }\n }\n\n return obj;\n },\n\n checkAttr: function (element, namespace, checkAttr) {\n return element.hasAttribute(namespace + checkAttr);\n },\n\n setAttr: function (element, namespace, attr, value) {\n element.setAttribute(this.dasherize(namespace + attr), String(value));\n },\n\n getType: function(element) {\n return element.getAttribute('type') || 'text';\n },\n\n generateID: function () {\n return '' + globalID++;\n },\n\n /** Third party functions **/\n deserializeValue: function (value) {\n var num;\n\n try {\n return value ?\n value == \"true\" ||\n (value == \"false\" ? false :\n value == \"null\" ? null :\n !isNaN(num = Number(value)) ? num :\n /^[\\[\\{]/.test(value) ? JSON.parse(value) :\n value)\n : value;\n } catch (e) { return value; }\n },\n\n // Zepto camelize function\n camelize: function (str) {\n return str.replace(/-+(.)?/g, function (match, chr) {\n return chr ? chr.toUpperCase() : '';\n });\n },\n\n // Zepto dasherize function\n dasherize: function (str) {\n return str.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/_/g, '-')\n .toLowerCase();\n },\n\n warn: function () {\n if (window.console && 'function' === typeof window.console.warn)\n window.console.warn(...arguments);\n },\n\n warnOnce: function(msg) {\n if (!pastWarnings[msg]) {\n pastWarnings[msg] = true;\n this.warn(...arguments);\n }\n },\n\n _resetWarnings: function () {\n pastWarnings = {};\n },\n\n trimString: function(string) {\n return string.replace(/^\\s+|\\s+$/g, '');\n },\n\n parse: {\n date: function(string) {\n let parsed = string.match(/^(\\d{4,})-(\\d\\d)-(\\d\\d)$/);\n if (!parsed)\n return null;\n let [_, year, month, day] = parsed.map(x => parseInt(x, 10));\n let date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day)\n return null;\n return date;\n },\n string: function(string) {\n return string;\n },\n integer: function(string) {\n if (isNaN(string))\n return null;\n return parseInt(string, 10);\n },\n number: function(string) {\n if (isNaN(string))\n throw null;\n return parseFloat(string);\n },\n 'boolean': function _boolean(string) {\n return !(/^\\s*false\\s*$/i.test(string));\n },\n object: function(string) {\n return Utils.deserializeValue(string);\n },\n regexp: function(regexp) {\n var flags = '';\n\n // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern\n if (/^\\/.*\\/(?:[gimy]*)$/.test(regexp)) {\n // Replace the regexp literal string with the first match group: ([gimy]*)\n // If no flag is present, this will be a blank string\n flags = regexp.replace(/.*\\/([gimy]*)$/, '$1');\n // Again, replace the regexp literal string with the first match group:\n // everything excluding the opening and closing slashes and the flags\n regexp = regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');\n } else {\n // Anchor regexp:\n regexp = '^' + regexp + '$';\n }\n return new RegExp(regexp, flags);\n }\n },\n\n parseRequirement: function(requirementType, string) {\n var converter = this.parse[requirementType || 'string'];\n if (!converter)\n throw 'Unknown requirement specification: \"' + requirementType + '\"';\n let converted = converter(string);\n if (converted === null)\n throw `Requirement is not a ${requirementType}: \"${string}\"`;\n return converted;\n },\n\n namespaceEvents: function(events, namespace) {\n events = this.trimString(events || '').split(/\\s+/);\n if (!events[0])\n return '';\n return $.map(events, evt => `${evt}.${namespace}`).join(' ');\n },\n\n difference: function(array, remove) {\n // This is O(N^2), should be optimized\n let result = [];\n $.each(array, (_, elem) => {\n if (remove.indexOf(elem) == -1)\n result.push(elem);\n });\n return result;\n },\n\n // Alter-ego to native Promise.all, but for jQuery\n all: function(promises) {\n // jQuery treats $.when() and $.when(singlePromise) differently; let's avoid that and add spurious elements\n return $.when(...promises, 42, 42);\n },\n\n // Object.create polyfill, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill\n objectCreate: Object.create || (function () {\n var Object = function () {};\n return function (prototype) {\n if (arguments.length > 1) {\n throw Error('Second argument not supported');\n }\n if (typeof prototype != 'object') {\n throw TypeError('Argument must be an object');\n }\n Object.prototype = prototype;\n var result = new Object();\n Object.prototype = null;\n return result;\n };\n })(),\n\n _SubmitSelector: 'input[type=\"submit\"], button:submit'\n};\n\nexport default Utils;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar Base = function () {\n this.__id__ = Utils.generateID();\n};\n\nBase.prototype = {\n asyncSupport: true, // Deprecated\n\n _pipeAccordingToValidationResult: function () {\n var pipe = () => {\n var r = $.Deferred();\n if (true !== this.validationResult)\n r.reject();\n return r.resolve().promise();\n };\n return [pipe, pipe];\n },\n\n actualizeOptions: function () {\n Utils.attr(this.element, this.options.namespace, this.domOptions);\n if (this.parent && this.parent.actualizeOptions)\n this.parent.actualizeOptions();\n return this;\n },\n\n _resetOptions: function (initOptions) {\n this.domOptions = Utils.objectCreate(this.parent.options);\n this.options = Utils.objectCreate(this.domOptions);\n // Shallow copy of ownProperties of initOptions:\n for (var i in initOptions) {\n if (initOptions.hasOwnProperty(i))\n this.options[i] = initOptions[i];\n }\n this.actualizeOptions();\n },\n\n _listeners: null,\n\n // Register a callback for the given event name\n // Callback is called with context as the first argument and the `this`\n // The context is the current parsley instance, or window.Parsley if global\n // A return value of `false` will interrupt the calls\n on: function (name, fn) {\n this._listeners = this._listeners || {};\n var queue = this._listeners[name] = this._listeners[name] || [];\n queue.push(fn);\n\n return this;\n },\n\n // Deprecated. Use `on` instead\n subscribe: function(name, fn) {\n $.listenTo(this, name.toLowerCase(), fn);\n },\n\n // Unregister a callback (or all if none is given) for the given event name\n off: function (name, fn) {\n var queue = this._listeners && this._listeners[name];\n if (queue) {\n if (!fn) {\n delete this._listeners[name];\n } else {\n for (var i = queue.length; i--; )\n if (queue[i] === fn)\n queue.splice(i, 1);\n }\n }\n return this;\n },\n\n // Deprecated. Use `off`\n unsubscribe: function(name, fn) {\n $.unsubscribeTo(this, name.toLowerCase());\n },\n\n // Trigger an event of the given name\n // A return value of `false` interrupts the callback chain\n // Returns false if execution was interrupted\n trigger: function (name, target, extraArg) {\n target = target || this;\n var queue = this._listeners && this._listeners[name];\n var result;\n var parentResult;\n if (queue) {\n for (var i = queue.length; i--; ) {\n result = queue[i].call(target, target, extraArg);\n if (result === false) return result;\n }\n }\n if (this.parent) {\n return this.parent.trigger(name, target, extraArg);\n }\n return true;\n },\n\n asyncIsValid: function (group, force) {\n Utils.warnOnce(\"asyncIsValid is deprecated; please use whenValid instead\");\n return this.whenValid({group, force});\n },\n\n _findRelated: function () {\n return this.options.multiple ?\n $(this.parent.element.querySelectorAll(`[${this.options.namespace}multiple=\"${this.options.multiple}\"]`))\n : this.$element;\n }\n};\n\nexport default Base;\n","// All these options could be overriden and specified directly in DOM using\n// `data-parsley-` default DOM-API\n// eg: `inputs` can be set in DOM using `data-parsley-inputs=\"input, textarea\"`\n// eg: `data-parsley-stop-on-first-failing-constraint=\"false\"`\n\nvar Defaults = {\n // ### General\n\n // Default data-namespace for DOM API\n namespace: 'data-parsley-',\n\n // Supported inputs by default\n inputs: 'input, textarea, select',\n\n // Excluded inputs by default\n excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden]',\n\n // Stop validating field on highest priority failing constraint\n priorityEnabled: true,\n\n // ### Field only\n\n // identifier used to group together inputs (e.g. radio buttons...)\n multiple: null,\n\n // identifier (or array of identifiers) used to validate only a select group of inputs\n group: null,\n\n // ### UI\n // Enable\\Disable error messages\n uiEnabled: true,\n\n // Key events threshold before validation\n validationThreshold: 3,\n\n // Focused field on form validation error. 'first'|'last'|'none'\n focus: 'first',\n\n // event(s) that will trigger validation before first failure. eg: `input`...\n trigger: false,\n\n // event(s) that will trigger validation after first failure.\n triggerAfterFailure: 'input',\n\n // Class that would be added on every failing validation Parsley field\n errorClass: 'parsley-error',\n\n // Same for success validation\n successClass: 'parsley-success',\n\n // Return the `$element` that will receive these above success or error classes\n // Could also be (and given directly from DOM) a valid selector like `'#div'`\n classHandler: function (Field) {},\n\n // Return the `$element` where errors will be appended\n // Could also be (and given directly from DOM) a valid selector like `'#div'`\n errorsContainer: function (Field) {},\n\n // ul elem that would receive errors' list\n errorsWrapper: '',\n\n // li elem that would receive error message\n errorTemplate: '
  • '\n};\n\nexport default Defaults;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar convertArrayRequirement = function(string, length) {\n var m = string.match(/^\\s*\\[(.*)\\]\\s*$/);\n if (!m)\n throw 'Requirement is not an array: \"' + string + '\"';\n var values = m[1].split(',').map(Utils.trimString);\n if (values.length !== length)\n throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed';\n return values;\n};\n\nvar convertExtraOptionRequirement = function(requirementSpec, string, extraOptionReader) {\n var main = null;\n var extra = {};\n for (var key in requirementSpec) {\n if (key) {\n var value = extraOptionReader(key);\n if ('string' === typeof value)\n value = Utils.parseRequirement(requirementSpec[key], value);\n extra[key] = value;\n } else {\n main = Utils.parseRequirement(requirementSpec[key], string);\n }\n }\n return [main, extra];\n};\n\n// A Validator needs to implement the methods `validate` and `parseRequirements`\n\nvar Validator = function(spec) {\n $.extend(true, this, spec);\n};\n\nValidator.prototype = {\n // Returns `true` iff the given `value` is valid according the given requirements.\n validate: function(value, requirementFirstArg) {\n if (this.fn) { // Legacy style validator\n\n if (arguments.length > 3) // If more args then value, requirement, instance...\n requirementFirstArg = [].slice.call(arguments, 1, -1); // Skip first arg (value) and last (instance), combining the rest\n return this.fn(value, requirementFirstArg);\n }\n\n if (Array.isArray(value)) {\n if (!this.validateMultiple)\n throw 'Validator `' + this.name + '` does not handle multiple values';\n return this.validateMultiple(...arguments);\n } else {\n let instance = arguments[arguments.length - 1];\n if (this.validateDate && instance._isDateInput()) {\n arguments[0] = Utils.parse.date(arguments[0]);\n if (arguments[0] === null)\n return false;\n return this.validateDate(...arguments);\n }\n if (this.validateNumber) {\n if (!value) // Builtin validators all accept empty strings, except `required` of course\n return true;\n if (isNaN(value))\n return false;\n arguments[0] = parseFloat(arguments[0]);\n return this.validateNumber(...arguments);\n }\n if (this.validateString) {\n return this.validateString(...arguments);\n }\n throw 'Validator `' + this.name + '` only handles multiple values';\n }\n },\n\n // Parses `requirements` into an array of arguments,\n // according to `this.requirementType`\n parseRequirements: function(requirements, extraOptionReader) {\n if ('string' !== typeof requirements) {\n // Assume requirement already parsed\n // but make sure we return an array\n return Array.isArray(requirements) ? requirements : [requirements];\n }\n var type = this.requirementType;\n if (Array.isArray(type)) {\n var values = convertArrayRequirement(requirements, type.length);\n for (var i = 0; i < values.length; i++)\n values[i] = Utils.parseRequirement(type[i], values[i]);\n return values;\n } else if ($.isPlainObject(type)) {\n return convertExtraOptionRequirement(type, requirements, extraOptionReader);\n } else {\n return [Utils.parseRequirement(type, requirements)];\n }\n },\n // Defaults:\n requirementType: 'string',\n\n priority: 2\n\n};\n\nexport default Validator;\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Defaults from './defaults';\nimport Validator from './validator';\n\nvar ValidatorRegistry = function (validators, catalog) {\n this.__class__ = 'ValidatorRegistry';\n\n // Default Parsley locale is en\n this.locale = 'en';\n\n this.init(validators || {}, catalog || {});\n};\n\nvar typeTesters = {\n email: /^((([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))$/,\n\n // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers\n number: /^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i,\n\n integer: /^-?\\d+$/,\n\n digits: /^\\d+$/,\n\n alphanum: /^\\w+$/i,\n\n date: {\n test: value => Utils.parse.date(value) !== null\n },\n\n url: new RegExp(\n \"^\" +\n // protocol identifier\n \"(?:(?:https?|ftp)://)?\" + // ** mod: make scheme optional\n // user:pass authentication\n \"(?:\\\\S+(?::\\\\S*)?@)?\" +\n \"(?:\" +\n // IP address exclusion\n // private & local networks\n // \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" + // ** mod: allow local networks\n // \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" + // ** mod: allow local networks\n // \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\" + // ** mod: allow local networks\n // IP address dotted notation octets\n // excludes loopback network 0.0.0.0\n // excludes reserved space >= 224.0.0.0\n // excludes network & broacast addresses\n // (first & last IP address of each class)\n \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" +\n \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" +\n \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" +\n \"|\" +\n // host name\n \"(?:(?:[a-zA-Z\\\\u00a1-\\\\uffff0-9]-*)*[a-zA-Z\\\\u00a1-\\\\uffff0-9]+)\" +\n // domain name\n \"(?:\\\\.(?:[a-zA-Z\\\\u00a1-\\\\uffff0-9]-*)*[a-zA-Z\\\\u00a1-\\\\uffff0-9]+)*\" +\n // TLD identifier\n \"(?:\\\\.(?:[a-zA-Z\\\\u00a1-\\\\uffff]{2,}))\" +\n \")\" +\n // port number\n \"(?::\\\\d{2,5})?\" +\n // resource path\n \"(?:/\\\\S*)?\" +\n \"$\"\n )\n};\ntypeTesters.range = typeTesters.number;\n\n// See http://stackoverflow.com/a/10454560/8279\nvar decimalPlaces = num => {\n var match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n if (!match) { return 0; }\n return Math.max(\n 0,\n // Number of digits right of decimal point.\n (match[1] ? match[1].length : 0) -\n // Adjust for scientific notation.\n (match[2] ? +match[2] : 0));\n};\n\n// parseArguments('number', ['1', '2']) => [1, 2]\nlet parseArguments = (type, args) => args.map(Utils.parse[type]);\n// operatorToValidator returns a validating function for an operator function, applied to the given type\nlet operatorToValidator = (type, operator) => {\n return (value, ...requirementsAndInput) => {\n requirementsAndInput.pop(); // Get rid of `input` argument\n return operator(value, ...parseArguments(type, requirementsAndInput));\n };\n};\n\nlet comparisonOperator = operator => ({\n validateDate: operatorToValidator('date', operator),\n validateNumber: operatorToValidator('number', operator),\n requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s)\n priority: 30\n});\n\nValidatorRegistry.prototype = {\n init: function (validators, catalog) {\n this.catalog = catalog;\n // Copy prototype's validators:\n this.validators = Object.assign({}, this.validators);\n\n for (var name in validators)\n this.addValidator(name, validators[name].fn, validators[name].priority);\n\n window.Parsley.trigger('parsley:validator:init');\n },\n\n // Set new messages locale if we have dictionary loaded in ParsleyConfig.i18n\n setLocale: function (locale) {\n if ('undefined' === typeof this.catalog[locale])\n throw new Error(locale + ' is not available in the catalog');\n\n this.locale = locale;\n\n return this;\n },\n\n // Add a new messages catalog for a given locale. Set locale for this catalog if set === `true`\n addCatalog: function (locale, messages, set) {\n if ('object' === typeof messages)\n this.catalog[locale] = messages;\n\n if (true === set)\n return this.setLocale(locale);\n\n return this;\n },\n\n // Add a specific message for a given constraint in a given locale\n addMessage: function (locale, name, message) {\n if ('undefined' === typeof this.catalog[locale])\n this.catalog[locale] = {};\n\n this.catalog[locale][name] = message;\n\n return this;\n },\n\n // Add messages for a given locale\n addMessages: function (locale, nameMessageObject) {\n for (var name in nameMessageObject)\n this.addMessage(locale, name, nameMessageObject[name]);\n\n return this;\n },\n\n // Add a new validator\n //\n // addValidator('custom', {\n // requirementType: ['integer', 'integer'],\n // validateString: function(value, from, to) {},\n // priority: 22,\n // messages: {\n // en: \"Hey, that's no good\",\n // fr: \"Aye aye, pas bon du tout\",\n // }\n // })\n //\n // Old API was addValidator(name, function, priority)\n //\n addValidator: function (name, arg1, arg2) {\n if (this.validators[name])\n Utils.warn('Validator \"' + name + '\" is already defined.');\n else if (Defaults.hasOwnProperty(name)) {\n Utils.warn('\"' + name + '\" is a restricted keyword and is not a valid validator name.');\n return;\n }\n return this._setValidator(...arguments);\n },\n\n hasValidator: function (name) {\n return !!this.validators[name];\n },\n\n updateValidator: function (name, arg1, arg2) {\n if (!this.validators[name]) {\n Utils.warn('Validator \"' + name + '\" is not already defined.');\n return this.addValidator(...arguments);\n }\n return this._setValidator(...arguments);\n },\n\n removeValidator: function (name) {\n if (!this.validators[name])\n Utils.warn('Validator \"' + name + '\" is not defined.');\n\n delete this.validators[name];\n\n return this;\n },\n\n _setValidator: function (name, validator, priority) {\n if ('object' !== typeof validator) {\n // Old style validator, with `fn` and `priority`\n validator = {\n fn: validator,\n priority: priority\n };\n }\n if (!validator.validate) {\n validator = new Validator(validator);\n }\n this.validators[name] = validator;\n\n for (var locale in validator.messages || {})\n this.addMessage(locale, name, validator.messages[locale]);\n\n return this;\n },\n\n getErrorMessage: function (constraint) {\n var message;\n\n // Type constraints are a bit different, we have to match their requirements too to find right error message\n if ('type' === constraint.name) {\n var typeMessages = this.catalog[this.locale][constraint.name] || {};\n message = typeMessages[constraint.requirements];\n } else\n message = this.formatMessage(this.catalog[this.locale][constraint.name], constraint.requirements);\n\n return message || this.catalog[this.locale].defaultMessage || this.catalog.en.defaultMessage;\n },\n\n // Kind of light `sprintf()` implementation\n formatMessage: function (string, parameters) {\n if ('object' === typeof parameters) {\n for (var i in parameters)\n string = this.formatMessage(string, parameters[i]);\n\n return string;\n }\n\n return 'string' === typeof string ? string.replace(/%s/i, parameters) : '';\n },\n\n // Here is the Parsley default validators list.\n // A validator is an object with the following key values:\n // - priority: an integer\n // - requirement: 'string' (default), 'integer', 'number', 'regexp' or an Array of these\n // - validateString, validateMultiple, validateNumber: functions returning `true`, `false` or a promise\n // Alternatively, a validator can be a function that returns such an object\n //\n validators: {\n notblank: {\n validateString: function(value) {\n return /\\S/.test(value);\n },\n priority: 2\n },\n required: {\n validateMultiple: function(values) {\n return values.length > 0;\n },\n validateString: function(value) {\n return /\\S/.test(value);\n },\n priority: 512\n },\n type: {\n validateString: function(value, type, {step = 'any', base = 0} = {}) {\n var tester = typeTesters[type];\n if (!tester) {\n throw new Error('validator type `' + type + '` is not supported');\n }\n if (!value)\n return true; // Builtin validators all accept empty strings, except `required` of course\n if (!tester.test(value))\n return false;\n if ('number' === type) {\n if (!/^any$/i.test(step || '')) {\n var nb = Number(value);\n var decimals = Math.max(decimalPlaces(step), decimalPlaces(base));\n if (decimalPlaces(nb) > decimals) // Value can't have too many decimals\n return false;\n // Be careful of rounding errors by using integers.\n var toInt = f => Math.round(f * Math.pow(10, decimals));\n if ((toInt(nb) - toInt(base)) % toInt(step) != 0)\n return false;\n }\n }\n return true;\n },\n requirementType: {\n '': 'string',\n step: 'string',\n base: 'number'\n },\n priority: 256\n },\n pattern: {\n validateString: function(value, regexp) {\n if (!value)\n return true; // Builtin validators all accept empty strings, except `required` of course\n return regexp.test(value);\n },\n requirementType: 'regexp',\n priority: 64\n },\n minlength: {\n validateString: function (value, requirement) {\n if (!value)\n return true; // Builtin validators all accept empty strings, except `required` of course\n return value.length >= requirement;\n },\n requirementType: 'integer',\n priority: 30\n },\n maxlength: {\n validateString: function (value, requirement) {\n return value.length <= requirement;\n },\n requirementType: 'integer',\n priority: 30\n },\n length: {\n validateString: function (value, min, max) {\n if (!value)\n return true; // Builtin validators all accept empty strings, except `required` of course\n return value.length >= min && value.length <= max;\n },\n requirementType: ['integer', 'integer'],\n priority: 30\n },\n mincheck: {\n validateMultiple: function (values, requirement) {\n return values.length >= requirement;\n },\n requirementType: 'integer',\n priority: 30\n },\n maxcheck: {\n validateMultiple: function (values, requirement) {\n return values.length <= requirement;\n },\n requirementType: 'integer',\n priority: 30\n },\n check: {\n validateMultiple: function (values, min, max) {\n return values.length >= min && values.length <= max;\n },\n requirementType: ['integer', 'integer'],\n priority: 30\n },\n min: comparisonOperator((value, requirement) => value >= requirement),\n max: comparisonOperator((value, requirement) => value <= requirement),\n range: comparisonOperator((value, min, max) => value >= min && value <= max),\n equalto: {\n validateString: function (value, refOrValue) {\n if (!value)\n return true; // Builtin validators all accept empty strings, except `required` of course\n var $reference = $(refOrValue);\n if ($reference.length)\n return value === $reference.val();\n else\n return value === refOrValue;\n },\n priority: 256\n },\n euvatin: {\n validateString: function (value, refOrValue) {\n if (!value) {\n return true; // Builtin validators all accept empty strings, except `required` of course\n }\n\n var re = /^[A-Z][A-Z][A-Za-z0-9 -]{2,}$/;\n return re.test(value);\n },\n priority: 30,\n },\n }\n};\n\nexport default ValidatorRegistry;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar UI = {};\n\nvar diffResults = function (newResult, oldResult, deep) {\n var added = [];\n var kept = [];\n\n for (var i = 0; i < newResult.length; i++) {\n var found = false;\n\n for (var j = 0; j < oldResult.length; j++)\n if (newResult[i].assert.name === oldResult[j].assert.name) {\n found = true;\n break;\n }\n\n if (found)\n kept.push(newResult[i]);\n else\n added.push(newResult[i]);\n }\n\n return {\n kept: kept,\n added: added,\n removed: !deep ? diffResults(oldResult, newResult, true).added : []\n };\n};\n\nUI.Form = {\n\n _actualizeTriggers: function () {\n this.$element.on('submit.Parsley', evt => { this.onSubmitValidate(evt); });\n this.$element.on('click.Parsley', Utils._SubmitSelector, evt => { this.onSubmitButton(evt); });\n\n // UI could be disabled\n if (false === this.options.uiEnabled)\n return;\n\n this.element.setAttribute('novalidate', '');\n },\n\n focus: function () {\n this._focusedField = null;\n\n if (true === this.validationResult || 'none' === this.options.focus)\n return null;\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i];\n if (true !== field.validationResult && field.validationResult.length > 0 && 'undefined' === typeof field.options.noFocus) {\n this._focusedField = field.$element;\n if ('first' === this.options.focus)\n break;\n }\n }\n\n if (null === this._focusedField)\n return null;\n\n return this._focusedField.focus();\n },\n\n _destroyUI: function () {\n // Reset all event listeners\n this.$element.off('.Parsley');\n }\n\n};\n\nUI.Field = {\n\n _reflowUI: function () {\n this._buildUI();\n\n // If this field doesn't have an active UI don't bother doing something\n if (!this._ui)\n return;\n\n // Diff between two validation results\n var diff = diffResults(this.validationResult, this._ui.lastValidationResult);\n\n // Then store current validation result for next reflow\n this._ui.lastValidationResult = this.validationResult;\n\n // Handle valid / invalid / none field class\n this._manageStatusClass();\n\n // Add, remove, updated errors messages\n this._manageErrorsMessages(diff);\n\n // Triggers impl\n this._actualizeTriggers();\n\n // If field is not valid for the first time, bind keyup trigger to ease UX and quickly inform user\n if ((diff.kept.length || diff.added.length) && !this._failedOnce) {\n this._failedOnce = true;\n this._actualizeTriggers();\n }\n },\n\n // Returns an array of field's error message(s)\n getErrorsMessages: function () {\n // No error message, field is valid\n if (true === this.validationResult)\n return [];\n\n var messages = [];\n\n for (var i = 0; i < this.validationResult.length; i++)\n messages.push(this.validationResult[i].errorMessage ||\n this._getErrorMessage(this.validationResult[i].assert));\n\n return messages;\n },\n\n // It's a goal of Parsley that this method is no longer required [#1073]\n addError: function (name, {message, assert, updateClass = true} = {}) {\n this._buildUI();\n this._addError(name, {message, assert});\n\n if (updateClass)\n this._errorClass();\n },\n\n // It's a goal of Parsley that this method is no longer required [#1073]\n updateError: function (name, {message, assert, updateClass = true} = {}) {\n this._buildUI();\n this._updateError(name, {message, assert});\n\n if (updateClass)\n this._errorClass();\n },\n\n // It's a goal of Parsley that this method is no longer required [#1073]\n removeError: function (name, {updateClass = true} = {}) {\n this._buildUI();\n this._removeError(name);\n\n // edge case possible here: remove a standard Parsley error that is still failing in this.validationResult\n // but highly improbable cuz' manually removing a well Parsley handled error makes no sense.\n if (updateClass)\n this._manageStatusClass();\n },\n\n _manageStatusClass: function () {\n if (this.hasConstraints() && this.needsValidation() && true === this.validationResult)\n this._successClass();\n else if (this.validationResult.length > 0)\n this._errorClass();\n else\n this._resetClass();\n },\n\n _manageErrorsMessages: function (diff) {\n if ('undefined' !== typeof this.options.errorsMessagesDisabled)\n return;\n\n // Case where we have errorMessage option that configure an unique field error message, regardless failing validators\n if ('undefined' !== typeof this.options.errorMessage) {\n if ((diff.added.length || diff.kept.length)) {\n this._insertErrorWrapper();\n\n if (0 === this._ui.$errorsWrapper.find('.parsley-custom-error-message').length)\n this._ui.$errorsWrapper\n .append(\n $(this.options.errorTemplate)\n .addClass('parsley-custom-error-message')\n );\n\n this._ui.$errorClassHandler.attr('aria-describedby', this._ui.errorsWrapperId);\n\n return this._ui.$errorsWrapper\n .addClass('filled')\n .attr('aria-hidden', 'false')\n .find('.parsley-custom-error-message')\n .html(this.options.errorMessage);\n }\n\n this._ui.$errorClassHandler.removeAttr('aria-describedby');\n\n return this._ui.$errorsWrapper\n .removeClass('filled')\n .attr('aria-hidden', 'true')\n .find('.parsley-custom-error-message')\n .remove();\n }\n\n // Show, hide, update failing constraints messages\n for (var i = 0; i < diff.removed.length; i++)\n this._removeError(diff.removed[i].assert.name);\n\n for (i = 0; i < diff.added.length; i++)\n this._addError(diff.added[i].assert.name, {message: diff.added[i].errorMessage, assert: diff.added[i].assert});\n\n for (i = 0; i < diff.kept.length; i++)\n this._updateError(diff.kept[i].assert.name, {message: diff.kept[i].errorMessage, assert: diff.kept[i].assert});\n },\n\n\n _addError: function (name, {message, assert}) {\n this._insertErrorWrapper();\n this._ui.$errorClassHandler\n .attr('aria-describedby', this._ui.errorsWrapperId);\n this._ui.$errorsWrapper\n .addClass('filled')\n .attr('aria-hidden', 'false')\n .append(\n $(this.options.errorTemplate)\n .addClass('parsley-' + name)\n .html(message || this._getErrorMessage(assert))\n );\n },\n\n _updateError: function (name, {message, assert}) {\n this._ui.$errorsWrapper\n .addClass('filled')\n .find('.parsley-' + name)\n .html(message || this._getErrorMessage(assert));\n },\n\n _removeError: function (name) {\n this._ui.$errorClassHandler\n .removeAttr('aria-describedby');\n this._ui.$errorsWrapper\n .removeClass('filled')\n .attr('aria-hidden', 'true')\n .find('.parsley-' + name)\n .remove();\n },\n\n _getErrorMessage: function (constraint) {\n var customConstraintErrorMessage = constraint.name + 'Message';\n\n if ('undefined' !== typeof this.options[customConstraintErrorMessage])\n return window.Parsley.formatMessage(this.options[customConstraintErrorMessage], constraint.requirements);\n\n return window.Parsley.getErrorMessage(constraint);\n },\n\n _buildUI: function () {\n // UI could be already built or disabled\n if (this._ui || false === this.options.uiEnabled)\n return;\n\n var _ui = {};\n\n // Give field its Parsley id in DOM\n this.element.setAttribute(this.options.namespace + 'id', this.__id__);\n\n /** Generate important UI elements and store them in this **/\n // $errorClassHandler is the $element that woul have parsley-error and parsley-success classes\n _ui.$errorClassHandler = this._manageClassHandler();\n\n // $errorsWrapper is a div that would contain the various field errors, it will be appended into $errorsContainer\n _ui.errorsWrapperId = 'parsley-id-' + (this.options.multiple ? 'multiple-' + this.options.multiple : this.__id__);\n _ui.$errorsWrapper = $(this.options.errorsWrapper).attr('id', _ui.errorsWrapperId);\n\n // ValidationResult UI storage to detect what have changed bwt two validations, and update DOM accordingly\n _ui.lastValidationResult = [];\n _ui.validationInformationVisible = false;\n\n // Store it in this for later\n this._ui = _ui;\n },\n\n // Determine which element will have `parsley-error` and `parsley-success` classes\n _manageClassHandler: function () {\n // Class handled could also be determined by function given in Parsley options\n if ('string' === typeof this.options.classHandler && $(this.options.classHandler).length)\n return $(this.options.classHandler);\n\n // Class handled could also be determined by function given in Parsley options\n var $handlerFunction = this.options.classHandler;\n\n // It might also be the function name of a global function\n if ('string' === typeof this.options.classHandler && 'function' === typeof window[this.options.classHandler])\n $handlerFunction = window[this.options.classHandler];\n\n if ('function' === typeof $handlerFunction) {\n var $handler = $handlerFunction.call(this, this);\n\n // If this function returned a valid existing DOM element, go for it\n if ('undefined' !== typeof $handler && $handler.length)\n return $handler;\n } else if ('object' === typeof $handlerFunction && $handlerFunction instanceof jQuery && $handlerFunction.length) {\n return $handlerFunction;\n } else if ($handlerFunction) {\n Utils.warn('The class handler `' + $handlerFunction + '` does not exist in DOM nor as a global JS function');\n }\n\n return this._inputHolder();\n },\n\n _inputHolder: function() {\n // if simple element (input, texatrea, select...) it will perfectly host the classes and precede the error container\n if (!this.options.multiple || this.element.nodeName === 'SELECT')\n return this.$element;\n\n // But if multiple element (radio, checkbox), that would be their parent\n return this.$element.parent();\n },\n\n _insertErrorWrapper: function () {\n var $errorsContainer = this.options.errorsContainer;\n\n // Nothing to do if already inserted\n if (0 !== this._ui.$errorsWrapper.parent().length)\n return this._ui.$errorsWrapper.parent();\n\n if ('string' === typeof $errorsContainer) {\n if ($($errorsContainer).length)\n return $($errorsContainer).append(this._ui.$errorsWrapper);\n else if ('function' === typeof window[$errorsContainer])\n $errorsContainer = window[$errorsContainer];\n else\n Utils.warn('The errors container `' + $errorsContainer + '` does not exist in DOM nor as a global JS function');\n }\n\n if ('function' === typeof $errorsContainer)\n $errorsContainer = $errorsContainer.call(this, this);\n\n if ('object' === typeof $errorsContainer && $errorsContainer.length)\n return $errorsContainer.append(this._ui.$errorsWrapper);\n\n return this._inputHolder().after(this._ui.$errorsWrapper);\n },\n\n _actualizeTriggers: function () {\n var $toBind = this._findRelated();\n var trigger;\n\n // Remove Parsley events already bound on this field\n $toBind.off('.Parsley');\n if (this._failedOnce)\n $toBind.on(Utils.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), () => {\n this._validateIfNeeded();\n });\n else if (trigger = Utils.namespaceEvents(this.options.trigger, 'Parsley')) {\n $toBind.on(trigger, event => {\n this._validateIfNeeded(event);\n });\n }\n },\n\n _validateIfNeeded: function (event) {\n // For keyup, keypress, keydown, input... events that could be a little bit obstrusive\n // do not validate if val length < min threshold on first validation. Once field have been validated once and info\n // about success or failure have been displayed, always validate with this trigger to reflect every yalidation change.\n if (event && /key|input/.test(event.type))\n if (!(this._ui && this._ui.validationInformationVisible) && this.getValue().length <= this.options.validationThreshold)\n return;\n\n if (this.options.debounce) {\n window.clearTimeout(this._debounced);\n this._debounced = window.setTimeout(() => this.validate(), this.options.debounce);\n } else\n this.validate();\n },\n\n _resetUI: function () {\n // Reset all event listeners\n this._failedOnce = false;\n this._actualizeTriggers();\n\n // Nothing to do if UI never initialized for this field\n if ('undefined' === typeof this._ui)\n return;\n\n // Reset all errors' li\n this._ui.$errorsWrapper\n .removeClass('filled')\n .children()\n .remove();\n\n // Reset validation class\n this._resetClass();\n\n // Reset validation flags and last validation result\n this._ui.lastValidationResult = [];\n this._ui.validationInformationVisible = false;\n },\n\n _destroyUI: function () {\n this._resetUI();\n\n if ('undefined' !== typeof this._ui)\n this._ui.$errorsWrapper.remove();\n\n delete this._ui;\n },\n\n _successClass: function () {\n this._ui.validationInformationVisible = true;\n this._ui.$errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass);\n },\n _errorClass: function () {\n this._ui.validationInformationVisible = true;\n this._ui.$errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass);\n },\n _resetClass: function () {\n this._ui.$errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass);\n }\n};\n\nexport default UI;\n","import $ from 'jquery';\nimport Base from './base';\nimport Utils from './utils';\n\nvar Form = function (element, domOptions, options) {\n this.__class__ = 'Form';\n\n this.element = element;\n this.$element = $(element);\n this.domOptions = domOptions;\n this.options = options;\n this.parent = window.Parsley;\n\n this.fields = [];\n this.validationResult = null;\n};\n\nvar statusMapping = {pending: null, resolved: true, rejected: false};\n\nForm.prototype = {\n onSubmitValidate: function (event) {\n // This is a Parsley generated submit event, do not validate, do not prevent, simply exit and keep normal behavior\n if (true === event.parsley)\n return;\n\n // If we didn't come here through a submit button, use the first one in the form\n var submitSource = this._submitSource || this.$element.find(Utils._SubmitSelector)[0];\n this._submitSource = null;\n this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true);\n if (submitSource && null !== submitSource.getAttribute('formnovalidate'))\n return;\n\n window.Parsley._remoteCache = {};\n\n var promise = this.whenValidate({event});\n\n if ('resolved' === promise.state() && false !== this._trigger('submit')) {\n // All good, let event go through. We make this distinction because browsers\n // differ in their handling of `submit` being called from inside a submit event [#1047]\n } else {\n // Rejected or pending: cancel this submit\n event.stopImmediatePropagation();\n event.preventDefault();\n if ('pending' === promise.state())\n promise.done(() => { this._submit(submitSource); });\n }\n },\n\n onSubmitButton: function(event) {\n this._submitSource = event.currentTarget;\n },\n // internal\n // _submit submits the form, this time without going through the validations.\n // Care must be taken to \"fake\" the actual submit button being clicked.\n _submit: function (submitSource) {\n if (false === this._trigger('submit'))\n return;\n // Add submit button's data\n if (submitSource) {\n var $synthetic = this.$element.find('.parsley-synthetic-submit-button').prop('disabled', false);\n if (0 === $synthetic.length)\n $synthetic = $('').appendTo(this.$element);\n $synthetic.attr({\n name: submitSource.getAttribute('name'),\n value: submitSource.getAttribute('value')\n });\n }\n\n this.$element.trigger(Object.assign($.Event('submit'), {parsley: true}));\n },\n\n // Performs validation on fields while triggering events.\n // @returns `true` if all validations succeeds, `false`\n // if a failure is immediately detected, or `null`\n // if dependant on a promise.\n // Consider using `whenValidate` instead.\n validate: function (options) {\n if (arguments.length >= 1 && !$.isPlainObject(options)) {\n Utils.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');\n var [group, force, event] = arguments;\n options = {group, force, event};\n }\n return statusMapping[ this.whenValidate(options).state() ];\n },\n\n whenValidate: function ({group, force, event} = {}) {\n this.submitEvent = event;\n if (event) {\n this.submitEvent = Object.assign({}, event, {preventDefault: () => {\n Utils.warnOnce(\"Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`\");\n this.validationResult = false;\n }});\n }\n this.validationResult = true;\n\n // fire validate event to eventually modify things before every validation\n this._trigger('validate');\n\n // Refresh form DOM options and form's fields that could have changed\n this._refreshFields();\n\n var promises = this._withoutReactualizingFormOptions(() => {\n return $.map(this.fields, field => field.whenValidate({force, group}));\n });\n\n return Utils.all(promises)\n .done( () => { this._trigger('success'); })\n .fail( () => {\n this.validationResult = false;\n this.focus();\n this._trigger('error');\n })\n .always(() => { this._trigger('validated'); })\n .pipe(...this._pipeAccordingToValidationResult());\n },\n\n // Iterate over refreshed fields, and stop on first failure.\n // Returns `true` if all fields are valid, `false` if a failure is detected\n // or `null` if the result depends on an unresolved promise.\n // Prefer using `whenValid` instead.\n isValid: function (options) {\n if (arguments.length >= 1 && !$.isPlainObject(options)) {\n Utils.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');\n var [group, force] = arguments;\n options = {group, force};\n }\n return statusMapping[ this.whenValid(options).state() ];\n },\n\n // Iterate over refreshed fields and validate them.\n // Returns a promise.\n // A validation that immediately fails will interrupt the validations.\n whenValid: function ({group, force} = {}) {\n this._refreshFields();\n\n var promises = this._withoutReactualizingFormOptions(() => {\n return $.map(this.fields, field => field.whenValid({group, force}));\n });\n return Utils.all(promises);\n },\n\n refresh: function() {\n this._refreshFields();\n return this;\n },\n\n // Reset UI\n reset: function () {\n // Form case: emit a reset event for each field\n for (var i = 0; i < this.fields.length; i++)\n this.fields[i].reset();\n\n this._trigger('reset');\n },\n\n // Destroy Parsley instance (+ UI)\n destroy: function () {\n // Field case: emit destroy event to clean UI and then destroy stored instance\n this._destroyUI();\n\n // Form case: destroy all its fields and then destroy stored instance\n for (var i = 0; i < this.fields.length; i++)\n this.fields[i].destroy();\n\n this.$element.removeData('Parsley');\n this._trigger('destroy');\n },\n\n _refreshFields: function () {\n return this.actualizeOptions()._bindFields();\n },\n\n _bindFields: function () {\n var oldFields = this.fields;\n\n this.fields = [];\n this.fieldsMappedById = {};\n\n this._withoutReactualizingFormOptions(() => {\n this.$element\n .find(this.options.inputs)\n .not(this.options.excluded)\n .not(`[${this.options.namespace}excluded=true]`)\n .each((_, element) => {\n var fieldInstance = new window.Parsley.Factory(element, {}, this);\n\n // Only add valid and not excluded `Field` and `FieldMultiple` children\n if ('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) {\n let uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__;\n if ('undefined' === typeof this.fieldsMappedById[uniqueId]) {\n this.fieldsMappedById[uniqueId] = fieldInstance;\n this.fields.push(fieldInstance);\n }\n }\n });\n\n $.each(Utils.difference(oldFields, this.fields), (_, field) => {\n field.reset();\n });\n });\n return this;\n },\n\n // Internal only.\n // Looping on a form's fields to do validation or similar\n // will trigger reactualizing options on all of them, which\n // in turn will reactualize the form's options.\n // To avoid calling actualizeOptions so many times on the form\n // for nothing, _withoutReactualizingFormOptions temporarily disables\n // the method actualizeOptions on this form while `fn` is called.\n _withoutReactualizingFormOptions: function (fn) {\n var oldActualizeOptions = this.actualizeOptions;\n this.actualizeOptions = function () { return this; };\n var result = fn();\n this.actualizeOptions = oldActualizeOptions;\n return result;\n },\n\n // Internal only.\n // Shortcut to trigger an event\n // Returns true iff event is not interrupted and default not prevented.\n _trigger: function (eventName) {\n return this.trigger('form:' + eventName);\n }\n\n};\n\nexport default Form;\n","import Utils from './utils';\nimport Validator from './validator';\n\nconst Constraint = function(parsleyField, name, requirements, priority, isDomConstraint) {\n const validatorSpec = window.Parsley._validatorRegistry.validators[name];\n const validator = new Validator(validatorSpec);\n priority = priority || parsleyField.options[name + 'Priority'] || validator.priority;\n isDomConstraint = (true === isDomConstraint);\n\n Object.assign(this, {\n validator,\n name,\n requirements,\n priority,\n isDomConstraint\n });\n this._parseRequirements(parsleyField.options);\n};\n\nconst capitalize = function(str) {\n const cap = str[0].toUpperCase();\n return cap + str.slice(1);\n};\n\nConstraint.prototype = {\n validate: function(value, instance) {\n return this.validator.validate(value, ...this.requirementList, instance);\n },\n\n _parseRequirements: function(options) {\n this.requirementList = this.validator.parseRequirements(this.requirements,\n key => options[this.name + capitalize(key)]\n );\n }\n};\n\nexport default Constraint;\n","import $ from 'jquery';\nimport Constraint from './constraint';\nimport UI from './ui';\nimport Utils from './utils';\n\nvar Field = function (field, domOptions, options, parsleyFormInstance) {\n this.__class__ = 'Field';\n\n this.element = field;\n this.$element = $(field);\n\n // Set parent if we have one\n if ('undefined' !== typeof parsleyFormInstance) {\n this.parent = parsleyFormInstance;\n }\n\n this.options = options;\n this.domOptions = domOptions;\n\n // Initialize some properties\n this.constraints = [];\n this.constraintsByName = {};\n this.validationResult = true;\n\n // Bind constraints\n this._bindConstraints();\n};\n\nvar statusMapping = {pending: null, resolved: true, rejected: false};\n\nField.prototype = {\n // # Public API\n // Validate field and trigger some events for mainly `UI`\n // @returns `true`, an array of the validators that failed, or\n // `null` if validation is not finished. Prefer using whenValidate\n validate: function (options) {\n if (arguments.length >= 1 && !$.isPlainObject(options)) {\n Utils.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');\n options = {options};\n }\n var promise = this.whenValidate(options);\n if (!promise) // If excluded with `group` option\n return true;\n switch (promise.state()) {\n case 'pending': return null;\n case 'resolved': return true;\n case 'rejected': return this.validationResult;\n }\n },\n\n // Validate field and trigger some events for mainly `UI`\n // @returns a promise that succeeds only when all validations do\n // or `undefined` if field is not in the given `group`.\n whenValidate: function ({force, group} = {}) {\n // do not validate a field if not the same as given validation group\n this.refresh();\n if (group && !this._isInGroup(group))\n return;\n\n this.value = this.getValue();\n\n // Field Validate event. `this.value` could be altered for custom needs\n this._trigger('validate');\n\n return this.whenValid({force, value: this.value, _refreshed: true})\n .always(() => { this._reflowUI(); })\n .done(() => { this._trigger('success'); })\n .fail(() => { this._trigger('error'); })\n .always(() => { this._trigger('validated'); })\n .pipe(...this._pipeAccordingToValidationResult());\n },\n\n hasConstraints: function () {\n return 0 !== this.constraints.length;\n },\n\n // An empty optional field does not need validation\n needsValidation: function (value) {\n if ('undefined' === typeof value)\n value = this.getValue();\n\n // If a field is empty and not required, it is valid\n // Except if `data-parsley-validate-if-empty` explicitely added, useful for some custom validators\n if (!value.length && !this._isRequired() && 'undefined' === typeof this.options.validateIfEmpty)\n return false;\n\n return true;\n },\n\n _isInGroup: function (group) {\n if (Array.isArray(this.options.group))\n return -1 !== $.inArray(group, this.options.group);\n return this.options.group === group;\n },\n\n // Just validate field. Do not trigger any event.\n // Returns `true` iff all constraints pass, `false` if there are failures,\n // or `null` if the result can not be determined yet (depends on a promise)\n // See also `whenValid`.\n isValid: function (options) {\n if (arguments.length >= 1 && !$.isPlainObject(options)) {\n Utils.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');\n var [force, value] = arguments;\n options = {force, value};\n }\n var promise = this.whenValid(options);\n if (!promise) // Excluded via `group`\n return true;\n return statusMapping[promise.state()];\n },\n\n // Just validate field. Do not trigger any event.\n // @returns a promise that succeeds only when all validations do\n // or `undefined` if the field is not in the given `group`.\n // The argument `force` will force validation of empty fields.\n // If a `value` is given, it will be validated instead of the value of the input.\n whenValid: function ({force = false, value, group, _refreshed} = {}) {\n // Recompute options and rebind constraints to have latest changes\n if (!_refreshed)\n this.refresh();\n // do not validate a field if not the same as given validation group\n if (group && !this._isInGroup(group))\n return;\n\n this.validationResult = true;\n\n // A field without constraint is valid\n if (!this.hasConstraints())\n return $.when();\n\n // Value could be passed as argument, needed to add more power to 'field:validate'\n if ('undefined' === typeof value || null === value)\n value = this.getValue();\n\n if (!this.needsValidation(value) && true !== force)\n return $.when();\n\n var groupedConstraints = this._getGroupedConstraints();\n var promises = [];\n $.each(groupedConstraints, (_, constraints) => {\n // Process one group of constraints at a time, we validate the constraints\n // and combine the promises together.\n var promise = Utils.all(\n $.map(constraints, constraint => this._validateConstraint(value, constraint))\n );\n promises.push(promise);\n if (promise.state() === 'rejected')\n return false; // Interrupt processing if a group has already failed\n });\n return Utils.all(promises);\n },\n\n // @returns a promise\n _validateConstraint: function(value, constraint) {\n var result = constraint.validate(value, this);\n // Map false to a failed promise\n if (false === result)\n result = $.Deferred().reject();\n // Make sure we return a promise and that we record failures\n return Utils.all([result]).fail(errorMessage => {\n if (!(this.validationResult instanceof Array))\n this.validationResult = [];\n this.validationResult.push({\n assert: constraint,\n errorMessage: 'string' === typeof errorMessage && errorMessage\n });\n });\n },\n\n // @returns Parsley field computed value that could be overrided or configured in DOM\n getValue: function () {\n var value;\n\n // Value could be overriden in DOM or with explicit options\n if ('function' === typeof this.options.value)\n value = this.options.value(this);\n else if ('undefined' !== typeof this.options.value)\n value = this.options.value;\n else\n value = this.$element.val();\n\n // Handle wrong DOM or configurations\n if ('undefined' === typeof value || null === value)\n return '';\n\n return this._handleWhitespace(value);\n },\n\n // Reset UI\n reset: function () {\n this._resetUI();\n return this._trigger('reset');\n },\n\n // Destroy Parsley instance (+ UI)\n destroy: function () {\n // Field case: emit destroy event to clean UI and then destroy stored instance\n this._destroyUI();\n this.$element.removeData('Parsley');\n this.$element.removeData('FieldMultiple');\n this._trigger('destroy');\n },\n\n // Actualize options and rebind constraints\n refresh: function () {\n this._refreshConstraints();\n return this;\n },\n\n _refreshConstraints: function () {\n return this.actualizeOptions()._bindConstraints();\n },\n\n refreshConstraints: function() {\n Utils.warnOnce(\"Parsley's refreshConstraints is deprecated. Please use refresh\");\n return this.refresh();\n },\n\n /**\n * Add a new constraint to a field\n *\n * @param {String} name\n * @param {Mixed} requirements optional\n * @param {Number} priority optional\n * @param {Boolean} isDomConstraint optional\n */\n addConstraint: function (name, requirements, priority, isDomConstraint) {\n\n if (window.Parsley._validatorRegistry.validators[name]) {\n var constraint = new Constraint(this, name, requirements, priority, isDomConstraint);\n\n // if constraint already exist, delete it and push new version\n if ('undefined' !== this.constraintsByName[constraint.name])\n this.removeConstraint(constraint.name);\n\n this.constraints.push(constraint);\n this.constraintsByName[constraint.name] = constraint;\n }\n\n return this;\n },\n\n // Remove a constraint\n removeConstraint: function (name) {\n for (var i = 0; i < this.constraints.length; i++)\n if (name === this.constraints[i].name) {\n this.constraints.splice(i, 1);\n break;\n }\n delete this.constraintsByName[name];\n return this;\n },\n\n // Update a constraint (Remove + re-add)\n updateConstraint: function (name, parameters, priority) {\n return this.removeConstraint(name)\n .addConstraint(name, parameters, priority);\n },\n\n // # Internals\n\n // Internal only.\n // Bind constraints from config + options + DOM\n _bindConstraints: function () {\n var constraints = [];\n var constraintsByName = {};\n\n // clean all existing DOM constraints to only keep javascript user constraints\n for (var i = 0; i < this.constraints.length; i++)\n if (false === this.constraints[i].isDomConstraint) {\n constraints.push(this.constraints[i]);\n constraintsByName[this.constraints[i].name] = this.constraints[i];\n }\n\n this.constraints = constraints;\n this.constraintsByName = constraintsByName;\n\n // then re-add Parsley DOM-API constraints\n for (var name in this.options)\n this.addConstraint(name, this.options[name], undefined, true);\n\n // finally, bind special HTML5 constraints\n return this._bindHtml5Constraints();\n },\n\n // Internal only.\n // Bind specific HTML5 constraints to be HTML5 compliant\n _bindHtml5Constraints: function () {\n // html5 required\n if (null !== this.element.getAttribute('required'))\n this.addConstraint('required', true, undefined, true);\n\n // html5 pattern\n if (null !== this.element.getAttribute('pattern'))\n this.addConstraint('pattern', this.element.getAttribute('pattern'), undefined, true);\n\n // range\n let min = this.element.getAttribute('min');\n let max = this.element.getAttribute('max');\n if (null !== min && null !== max)\n this.addConstraint('range', [min, max], undefined, true);\n\n // HTML5 min\n else if (null !== min)\n this.addConstraint('min', min, undefined, true);\n\n // HTML5 max\n else if (null !== max)\n this.addConstraint('max', max, undefined, true);\n\n\n // length\n if (null !== this.element.getAttribute('minlength') && null !== this.element.getAttribute('maxlength'))\n this.addConstraint('length', [this.element.getAttribute('minlength'), this.element.getAttribute('maxlength')], undefined, true);\n\n // HTML5 minlength\n else if (null !== this.element.getAttribute('minlength'))\n this.addConstraint('minlength', this.element.getAttribute('minlength'), undefined, true);\n\n // HTML5 maxlength\n else if (null !== this.element.getAttribute('maxlength'))\n this.addConstraint('maxlength', this.element.getAttribute('maxlength'), undefined, true);\n\n\n // html5 types\n var type = Utils.getType(this.element);\n\n // Small special case here for HTML5 number: integer validator if step attribute is undefined or an integer value, number otherwise\n if ('number' === type) {\n return this.addConstraint('type', ['number', {\n step: this.element.getAttribute('step') || '1',\n base: min || this.element.getAttribute('value')\n }], undefined, true);\n // Regular other HTML5 supported types\n } else if (/^(email|url|range|date)$/i.test(type)) {\n return this.addConstraint('type', type, undefined, true);\n }\n return this;\n },\n\n // Internal only.\n // Field is required if have required constraint without `false` value\n _isRequired: function () {\n if ('undefined' === typeof this.constraintsByName.required)\n return false;\n\n return false !== this.constraintsByName.required.requirements;\n },\n\n // Internal only.\n // Shortcut to trigger an event\n _trigger: function (eventName) {\n return this.trigger('field:' + eventName);\n },\n\n // Internal only\n // Handles whitespace in a value\n // Use `data-parsley-whitespace=\"squish\"` to auto squish input value\n // Use `data-parsley-whitespace=\"trim\"` to auto trim input value\n _handleWhitespace: function (value) {\n if (true === this.options.trimValue)\n Utils.warnOnce('data-parsley-trim-value=\"true\" is deprecated, please use data-parsley-whitespace=\"trim\"');\n\n if ('squish' === this.options.whitespace)\n value = value.replace(/\\s{2,}/g, ' ');\n\n if (('trim' === this.options.whitespace) || ('squish' === this.options.whitespace) || (true === this.options.trimValue))\n value = Utils.trimString(value);\n\n return value;\n },\n\n _isDateInput: function() {\n var c = this.constraintsByName.type;\n return c && c.requirements === 'date';\n },\n\n // Internal only.\n // Returns the constraints, grouped by descending priority.\n // The result is thus an array of arrays of constraints.\n _getGroupedConstraints: function () {\n if (false === this.options.priorityEnabled)\n return [this.constraints];\n\n var groupedConstraints = [];\n var index = {};\n\n // Create array unique of priorities\n for (var i = 0; i < this.constraints.length; i++) {\n var p = this.constraints[i].priority;\n if (!index[p])\n groupedConstraints.push(index[p] = []);\n index[p].push(this.constraints[i]);\n }\n // Sort them by priority DESC\n groupedConstraints.sort(function (a, b) { return b[0].priority - a[0].priority; });\n\n return groupedConstraints;\n }\n\n};\n\nexport default Field;\n","import $ from 'jquery';\nimport Utils from './utils';\n\nvar Multiple = function () {\n this.__class__ = 'FieldMultiple';\n};\n\nMultiple.prototype = {\n // Add new `$element` sibling for multiple field\n addElement: function ($element) {\n this.$elements.push($element);\n\n return this;\n },\n\n // See `Field._refreshConstraints()`\n _refreshConstraints: function () {\n var fieldConstraints;\n\n this.constraints = [];\n\n // Select multiple special treatment\n if (this.element.nodeName === 'SELECT') {\n this.actualizeOptions()._bindConstraints();\n\n return this;\n }\n\n // Gather all constraints for each input in the multiple group\n for (var i = 0; i < this.$elements.length; i++) {\n\n // Check if element have not been dynamically removed since last binding\n if (!$('html').has(this.$elements[i]).length) {\n this.$elements.splice(i, 1);\n continue;\n }\n\n fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;\n\n for (var j = 0; j < fieldConstraints.length; j++)\n this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);\n }\n\n return this;\n },\n\n // See `Field.getValue()`\n getValue: function () {\n // Value could be overriden in DOM\n if ('function' === typeof this.options.value)\n return this.options.value(this);\n else if ('undefined' !== typeof this.options.value)\n return this.options.value;\n\n // Radio input case\n if (this.element.nodeName === 'INPUT') {\n var type = Utils.getType(this.element);\n if (type === 'radio')\n return this._findRelated().filter(':checked').val() || '';\n\n // checkbox input case\n if (type === 'checkbox') {\n var values = [];\n\n this._findRelated().filter(':checked').each(function () {\n values.push($(this).val());\n });\n\n return values;\n }\n }\n\n // Select multiple case\n if (this.element.nodeName === 'SELECT' && null === this.$element.val())\n return [];\n\n // Default case that should never happen\n return this.$element.val();\n },\n\n _init: function () {\n this.$elements = [this.$element];\n\n return this;\n }\n};\n\nexport default Multiple;\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Base from './base';\nimport Form from './form';\nimport Field from './field';\nimport Multiple from './multiple';\n\nvar Factory = function (element, options, parsleyFormInstance) {\n this.element = element;\n this.$element = $(element);\n\n // If the element has already been bound, returns its saved Parsley instance\n var savedparsleyFormInstance = this.$element.data('Parsley');\n if (savedparsleyFormInstance) {\n\n // If the saved instance has been bound without a Form parent and there is one given in this call, add it\n if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) {\n savedparsleyFormInstance.parent = parsleyFormInstance;\n savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options);\n }\n\n if ('object' === typeof options) {\n Object.assign(savedparsleyFormInstance.options, options);\n }\n\n return savedparsleyFormInstance;\n }\n\n // Parsley must be instantiated with a DOM element or jQuery $element\n if (!this.$element.length)\n throw new Error('You must bind Parsley on an existing element.');\n\n if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__)\n throw new Error('Parent instance must be a Form instance');\n\n this.parent = parsleyFormInstance || window.Parsley;\n return this.init(options);\n};\n\nFactory.prototype = {\n init: function (options) {\n this.__class__ = 'Parsley';\n this.__version__ = 'VERSION';\n this.__id__ = Utils.generateID();\n\n // Pre-compute options\n this._resetOptions(options);\n\n // A Form instance is obviously a `
    ` element but also every node that is not an input and has the `data-parsley-validate` attribute\n if (this.element.nodeName === 'FORM' || (Utils.checkAttr(this.element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)))\n return this.bind('parsleyForm');\n\n // Every other element is bound as a `Field` or `FieldMultiple`\n return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField');\n },\n\n isMultiple: function () {\n var type = Utils.getType(this.element);\n return ((type === 'radio' || type === 'checkbox') ||\n (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')));\n },\n\n // Multiples fields are a real nightmare :(\n // Maybe some refactoring would be appreciated here...\n handleMultiple: function () {\n var name;\n var multiple;\n var parsleyMultipleInstance;\n\n // Handle multiple name\n this.options.multiple = this.options.multiple ||\n (name = this.element.getAttribute('name')) ||\n this.element.getAttribute('id');\n\n // Special select multiple input\n if (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')) {\n this.options.multiple = this.options.multiple || this.__id__;\n return this.bind('parsleyFieldMultiple');\n\n // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it\n } else if (!this.options.multiple) {\n Utils.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element);\n return this;\n }\n\n // Remove special chars\n this.options.multiple = this.options.multiple.replace(/(:|\\.|\\[|\\]|\\{|\\}|\\$)/g, '');\n\n // Add proper `data-parsley-multiple` to siblings if we have a valid multiple name\n if (name) {\n $('input[name=\"' + name + '\"]').each((i, input) => {\n var type = Utils.getType(input);\n if ((type === 'radio' || type === 'checkbox'))\n input.setAttribute(this.options.namespace + 'multiple', this.options.multiple);\n });\n }\n\n // Check here if we don't already have a related multiple instance saved\n var $previouslyRelated = this._findRelated();\n for (var i = 0; i < $previouslyRelated.length; i++) {\n parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley');\n if ('undefined' !== typeof parsleyMultipleInstance) {\n\n if (!this.$element.data('FieldMultiple')) {\n parsleyMultipleInstance.addElement(this.$element);\n }\n\n break;\n }\n }\n\n // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')`\n // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance\n this.bind('parsleyField', true);\n\n return parsleyMultipleInstance || this.bind('parsleyFieldMultiple');\n },\n\n // Return proper `Form`, `Field` or `FieldMultiple`\n bind: function (type, doNotStore) {\n var parsleyInstance;\n\n switch (type) {\n case 'parsleyForm':\n parsleyInstance = $.extend(\n new Form(this.element, this.domOptions, this.options),\n new Base(),\n window.ParsleyExtend\n )._bindFields();\n break;\n case 'parsleyField':\n parsleyInstance = $.extend(\n new Field(this.element, this.domOptions, this.options, this.parent),\n new Base(),\n window.ParsleyExtend\n );\n break;\n case 'parsleyFieldMultiple':\n parsleyInstance = $.extend(\n new Field(this.element, this.domOptions, this.options, this.parent),\n new Multiple(),\n new Base(),\n window.ParsleyExtend\n )._init();\n break;\n default:\n throw new Error(type + 'is not a supported Parsley type');\n }\n\n if (this.options.multiple)\n Utils.setAttr(this.element, this.options.namespace, 'multiple', this.options.multiple);\n\n if ('undefined' !== typeof doNotStore) {\n this.$element.data('FieldMultiple', parsleyInstance);\n\n return parsleyInstance;\n }\n\n // Store the freshly bound instance in a DOM element for later access using jQuery `data()`\n this.$element.data('Parsley', parsleyInstance);\n\n // Tell the world we have a new Form or Field instance!\n parsleyInstance._actualizeTriggers();\n parsleyInstance._trigger('init');\n\n return parsleyInstance;\n }\n};\n\nexport default Factory;\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Defaults from './defaults';\nimport Base from './base';\nimport ValidatorRegistry from './validator_registry';\nimport UI from './ui';\nimport Form from './form';\nimport Field from './field';\nimport Multiple from './multiple';\nimport Factory from './factory';\n\nvar vernums = $.fn.jquery.split('.');\nif (parseInt(vernums[0]) <= 1 && parseInt(vernums[1]) < 8) {\n throw \"The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.\";\n}\nif (!vernums.forEach) {\n Utils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');\n}\n// Inherit `on`, `off` & `trigger` to Parsley:\nvar Parsley = Object.assign(new Base(), {\n element: document,\n $element: $(document),\n actualizeOptions: null,\n _resetOptions: null,\n Factory: Factory,\n version: 'VERSION'\n });\n\n// Supplement Field and Form with Base\n// This way, the constructors will have access to those methods\nObject.assign(Field.prototype, UI.Field, Base.prototype);\nObject.assign(Form.prototype, UI.Form, Base.prototype);\n// Inherit actualizeOptions and _resetOptions:\nObject.assign(Factory.prototype, Base.prototype);\n\n// ### jQuery API\n// `$('.elem').parsley(options)` or `$('.elem').psly(options)`\n$.fn.parsley = $.fn.psly = function (options) {\n if (this.length > 1) {\n var instances = [];\n\n this.each(function () {\n instances.push($(this).parsley(options));\n });\n\n return instances;\n }\n\n // Return undefined if applied to non existing DOM element\n if (this.length == 0) {\n return;\n }\n\n return new Factory(this[0], options);\n};\n\n// ### Field and Form extension\n// Ensure the extension is now defined if it wasn't previously\nif ('undefined' === typeof window.ParsleyExtend)\n window.ParsleyExtend = {};\n\n// ### Parsley config\n// Inherit from ParsleyDefault, and copy over any existing values\nParsley.options = Object.assign(Utils.objectCreate(Defaults), window.ParsleyConfig);\nwindow.ParsleyConfig = Parsley.options; // Old way of accessing global options\n\n// ### Globals\nwindow.Parsley = window.psly = Parsley;\nParsley.Utils = Utils;\nwindow.ParsleyUtils = {};\n$.each(Utils, (key, value) => {\n if ('function' === typeof value) {\n window.ParsleyUtils[key] = (...args) => {\n Utils.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.');\n return Utils[key](...args);\n };\n }\n});\n\n// ### Define methods that forward to the registry, and deprecate all access except through window.Parsley\nvar registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);\nwindow.ParsleyValidator = {};\n$.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator hasValidator'.split(' '), function (i, method) {\n window.Parsley[method] = (...args) => registry[method](...args);\n window.ParsleyValidator[method] = function () {\n Utils.warnOnce(`Accessing the method '${method}' through Validator is deprecated. Simply call 'window.Parsley.${method}(...)'`);\n return window.Parsley[method](...arguments);\n };\n});\n\n// ### UI\n// Deprecated global object\nwindow.Parsley.UI = UI;\nwindow.ParsleyUI = {\n removeError: function (instance, name, doNotUpdateClass) {\n var updateClass = true !== doNotUpdateClass;\n Utils.warnOnce(`Accessing UI is deprecated. Call 'removeError' on the instance directly. Please comment in issue 1073 as to your need to call this method.`);\n return instance.removeError(name, {updateClass});\n },\n getErrorsMessages: function (instance) {\n Utils.warnOnce(`Accessing UI is deprecated. Call 'getErrorsMessages' on the instance directly.`);\n return instance.getErrorsMessages();\n }\n};\n$.each('addError updateError'.split(' '), function (i, method) {\n window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {\n var updateClass = true !== doNotUpdateClass;\n Utils.warnOnce(`Accessing UI is deprecated. Call '${method}' on the instance directly. Please comment in issue 1073 as to your need to call this method.`);\n return instance[method](name, {message, assert, updateClass});\n };\n});\n\n// ### PARSLEY auto-binding\n// Prevent it by setting `ParsleyConfig.autoBind` to `false`\nif (false !== window.ParsleyConfig.autoBind) {\n $(function () {\n // Works only on `data-parsley-validate`.\n if ($('[data-parsley-validate]').length)\n $('[data-parsley-validate]').parsley();\n });\n}\n\nexport default Parsley;\n","import $ from 'jquery';\nimport Field from './field';\nimport Form from './form';\nimport Utils from './utils';\n\nvar o = $({});\nvar deprecated = function () {\n Utils.warnOnce(\"Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley\");\n};\n\n// Returns an event handler that calls `fn` with the arguments it expects\nfunction adapt(fn, context) {\n // Store to allow unbinding\n if (!fn.parsleyAdaptedCallback) {\n fn.parsleyAdaptedCallback = function () {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift(this);\n fn.apply(context || o, args);\n };\n }\n return fn.parsleyAdaptedCallback;\n}\n\nvar eventPrefix = 'parsley:';\n// Converts 'parsley:form:validate' into 'form:validate'\nfunction eventName(name) {\n if (name.lastIndexOf(eventPrefix, 0) === 0)\n return name.substr(eventPrefix.length);\n return name;\n}\n\n// $.listen is deprecated. Use Parsley.on instead.\n$.listen = function (name, callback) {\n var context;\n deprecated();\n if ('object' === typeof arguments[1] && 'function' === typeof arguments[2]) {\n context = arguments[1];\n callback = arguments[2];\n }\n\n if ('function' !== typeof callback)\n throw new Error('Wrong parameters');\n\n window.Parsley.on(eventName(name), adapt(callback, context));\n};\n\n$.listenTo = function (instance, name, fn) {\n deprecated();\n if (!(instance instanceof Field) && !(instance instanceof Form))\n throw new Error('Must give Parsley instance');\n\n if ('string' !== typeof name || 'function' !== typeof fn)\n throw new Error('Wrong parameters');\n\n instance.on(eventName(name), adapt(fn));\n};\n\n$.unsubscribe = function (name, fn) {\n deprecated();\n if ('string' !== typeof name || 'function' !== typeof fn)\n throw new Error('Wrong arguments');\n window.Parsley.off(eventName(name), fn.parsleyAdaptedCallback);\n};\n\n$.unsubscribeTo = function (instance, name) {\n deprecated();\n if (!(instance instanceof Field) && !(instance instanceof Form))\n throw new Error('Must give Parsley instance');\n instance.off(eventName(name));\n};\n\n$.unsubscribeAll = function (name) {\n deprecated();\n window.Parsley.off(eventName(name));\n $('form,input,textarea,select').each(function () {\n var instance = $(this).data('Parsley');\n if (instance) {\n instance.off(eventName(name));\n }\n });\n};\n\n// $.emit is deprecated. Use jQuery events instead.\n$.emit = function (name, instance) {\n deprecated();\n var instanceGiven = (instance instanceof Field) || (instance instanceof Form);\n var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1);\n args.unshift(eventName(name));\n if (!instanceGiven) {\n instance = window.Parsley;\n }\n instance.trigger(...args);\n};\n\nexport default {};\n","import $ from 'jquery';\nimport Utils from './utils';\nimport Base from './base';\n\nimport Parsley from './main';\n\n$.extend(true, Parsley, {\n asyncValidators: {\n 'default': {\n fn: function (xhr) {\n // By default, only status 2xx are deemed successful.\n // Note: we use status instead of state() because responses with status 200\n // but invalid messages (e.g. an empty body for content type set to JSON) will\n // result in state() === 'rejected'.\n return xhr.status >= 200 && xhr.status < 300;\n },\n url: false\n },\n reverse: {\n fn: function (xhr) {\n // If reverse option is set, a failing ajax request is considered successful\n return xhr.status < 200 || xhr.status >= 300;\n },\n url: false\n }\n },\n\n addAsyncValidator: function (name, fn, url, options) {\n Parsley.asyncValidators[name] = {\n fn: fn,\n url: url || false,\n options: options || {}\n };\n\n return this;\n }\n\n});\n\nParsley.addValidator('remote', {\n requirementType: {\n '': 'string',\n 'validator': 'string',\n 'reverse': 'boolean',\n 'options': 'object'\n },\n\n validateString: function (value, url, options, instance) {\n var data = {};\n var ajaxOptions;\n var csr;\n var validator = options.validator || (true === options.reverse ? 'reverse' : 'default');\n\n if ('undefined' === typeof Parsley.asyncValidators[validator])\n throw new Error('Calling an undefined async validator: `' + validator + '`');\n\n url = Parsley.asyncValidators[validator].url || url;\n\n // Fill current value\n if (url.indexOf('{value}') > -1) {\n url = url.replace('{value}', encodeURIComponent(value));\n } else {\n data[instance.element.getAttribute('name') || instance.element.getAttribute('id')] = value;\n }\n\n // Merge options passed in from the function with the ones in the attribute\n var remoteOptions = $.extend(true, options.options || {} , Parsley.asyncValidators[validator].options);\n\n // All `$.ajax(options)` could be overridden or extended directly from DOM in `data-parsley-remote-options`\n ajaxOptions = $.extend(true, {}, {\n url: url,\n data: data,\n type: 'GET'\n }, remoteOptions);\n\n // Generate store key based on ajax options\n instance.trigger('field:ajaxoptions', instance, ajaxOptions);\n\n csr = $.param(ajaxOptions);\n\n // Initialise querry cache\n if ('undefined' === typeof Parsley._remoteCache)\n Parsley._remoteCache = {};\n\n // Try to retrieve stored xhr\n var xhr = Parsley._remoteCache[csr] = Parsley._remoteCache[csr] || $.ajax(ajaxOptions);\n\n var handleXhr = function () {\n var result = Parsley.asyncValidators[validator].fn.call(instance, xhr, url, options);\n if (!result) // Map falsy results to rejected promise\n result = $.Deferred().reject();\n return $.when(result);\n };\n\n return xhr.then(handleXhr, handleXhr);\n },\n\n priority: -1\n});\n\nParsley.on('form:submit', function () {\n Parsley._remoteCache = {};\n});\n\nBase.prototype.addAsyncValidator = function () {\n Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');\n return Parsley.addAsyncValidator(...arguments);\n};\n","// This is included with the Parsley library itself,\n// thus there is no use in adding it to your project.\nimport Parsley from '../parsley/main';\n\nParsley.addMessages('en', {\n defaultMessage: \"This value seems to be invalid.\",\n type: {\n email: \"This value should be a valid email.\",\n url: \"This value should be a valid url.\",\n number: \"This value should be a valid number.\",\n integer: \"This value should be a valid integer.\",\n digits: \"This value should be digits.\",\n alphanum: \"This value should be alphanumeric.\"\n },\n notblank: \"This value should not be blank.\",\n required: \"This value is required.\",\n pattern: \"This value seems to be invalid.\",\n min: \"This value should be greater than or equal to %s.\",\n max: \"This value should be lower than or equal to %s.\",\n range: \"This value should be between %s and %s.\",\n minlength: \"This value is too short. It should have %s characters or more.\",\n maxlength: \"This value is too long. It should have %s characters or fewer.\",\n length: \"This value length is invalid. It should be between %s and %s characters long.\",\n mincheck: \"You must select at least %s choices.\",\n maxcheck: \"You must select %s choices or fewer.\",\n check: \"You must select between %s and %s choices.\",\n equalto: \"This value should be the same.\",\n euvatin: \"It's not a valid VAT Identification Number.\",\n});\n\nParsley.setLocale('en');\n","/**\n * inputevent - Alleviate browser bugs for input events\n * https://github.com/marcandre/inputevent\n * @version v0.0.3 - (built Thu, Apr 14th 2016, 5:58 pm)\n * @author Marc-Andre Lafortune \n * @license MIT\n */\n\nimport $ from 'jquery';\n\nfunction InputEvent() {\n let globals = window || global;\n\n // Slightly odd way construct our object. This way methods are force bound.\n // Used to test for duplicate library.\n Object.assign(this, {\n\n // For browsers that do not support isTrusted, assumes event is native.\n isNativeEvent: evt => {\n return evt.originalEvent && evt.originalEvent.isTrusted !== false;\n },\n\n fakeInputEvent: evt => {\n if (this.isNativeEvent(evt)) {\n $(evt.target).trigger('input');\n }\n },\n\n misbehaves: evt => {\n if (this.isNativeEvent(evt)) {\n this.behavesOk(evt);\n $(document)\n .on('change.inputevent', evt.data.selector, this.fakeInputEvent);\n this.fakeInputEvent(evt);\n }\n },\n\n behavesOk: evt => {\n if (this.isNativeEvent(evt)) {\n $(document) // Simply unbinds the testing handler\n .off('input.inputevent', evt.data.selector, this.behavesOk)\n .off('change.inputevent', evt.data.selector, this.misbehaves);\n }\n },\n\n // Bind the testing handlers\n install: () => {\n if (globals.inputEventPatched) {\n return;\n }\n globals.inputEventPatched = '0.0.3';\n for (let selector of ['select', 'input[type=\"checkbox\"]', 'input[type=\"radio\"]', 'input[type=\"file\"]']) {\n $(document)\n .on('input.inputevent', selector, {selector}, this.behavesOk)\n .on('change.inputevent', selector, {selector}, this.misbehaves);\n }\n },\n\n uninstall: () => {\n delete globals.inputEventPatched;\n $(document).off('.inputevent');\n }\n\n });\n};\n\nexport default new InputEvent();\n","import $ from 'jquery';\nimport Parsley from './parsley/main';\nimport './parsley/pubsub';\nimport './parsley/remote';\nimport './i18n/en';\nimport inputevent from './vendor/inputevent';\n\ninputevent.install();\n\nexport default Parsley;\n"],"names":["globalID","pastWarnings","Utils","attr","element","namespace","obj","i","attribute","attributes","regex","RegExp","hasOwnProperty","length","specified","test","name","this","camelize","slice","deserializeValue","value","checkAttr","hasAttribute","setAttr","setAttribute","dasherize","String","getType","getAttribute","generateID","num","isNaN","Number","JSON","parse","e","str","replace","match","chr","toUpperCase","toLowerCase","warn","window","console","arguments","warnOnce","msg","_resetWarnings","trimString","string","date","parsed","map","x","parseInt","year","month","day","Date","getFullYear","getMonth","getDate","integer","number","parseFloat","object","regexp","flags","parseRequirement","requirementType","converter","converted","namespaceEvents","events","split","$","evt","join","difference","array","remove","result","each","_","elem","indexOf","push","all","promises","when","objectCreate","Object","create","prototype","Error","_typeof","TypeError","_SubmitSelector","Base","__id__","Defaults","inputs","excluded","priorityEnabled","multiple","group","uiEnabled","validationThreshold","focus","trigger","triggerAfterFailure","errorClass","successClass","classHandler","errorsContainer","errorsWrapper","errorTemplate","asyncSupport","_pipeAccordingToValidationResult","pipe","r","Deferred","_this","validationResult","reject","resolve","promise","actualizeOptions","options","domOptions","parent","_resetOptions","initOptions","_listeners","on","fn","subscribe","listenTo","off","queue","splice","unsubscribe","unsubscribeTo","target","extraArg","call","asyncIsValid","force","whenValid","_findRelated","querySelectorAll","$element","Validator","spec","extend","validate","requirementFirstArg","Array","isArray","validateMultiple","instance","validateDate","_isDateInput","validateNumber","validateString","parseRequirements","requirements","extraOptionReader","type","values","m","convertArrayRequirement","isPlainObject","requirementSpec","main","extra","key","convertExtraOptionRequirement","priority","ValidatorRegistry","validators","catalog","__class__","locale","init","typeTesters","email","digits","alphanum","url","range","decimalPlaces","Math","max","operatorToValidator","operator","requirementsAndInput","pop","comparisonOperator","_extends","addValidator","Parsley","setLocale","addCatalog","messages","set","addMessage","message","addMessages","nameMessageObject","arg1","arg2","_setValidator","hasValidator","updateValidator","removeValidator","validator","getErrorMessage","constraint","formatMessage","defaultMessage","en","parameters","notblank","required","step","base","tester","nb","decimals","toInt","f","round","pow","pattern","minlength","requirement","maxlength","min","mincheck","maxcheck","check","equalto","refOrValue","$reference","val","euvatin","UI","Form","_actualizeTriggers","onSubmitValidate","onSubmitButton","_focusedField","fields","field","noFocus","_destroyUI","Field","_reflowUI","_buildUI","_ui","diff","diffResults","newResult","oldResult","deep","added","kept","found","j","assert","removed","lastValidationResult","_manageStatusClass","_manageErrorsMessages","_failedOnce","getErrorsMessages","errorMessage","_getErrorMessage","addError","updateClass","_addError","_errorClass","updateError","_updateError","removeError","_removeError","hasConstraints","needsValidation","_successClass","_resetClass","errorsMessagesDisabled","_insertErrorWrapper","$errorsWrapper","find","append","addClass","$errorClassHandler","errorsWrapperId","html","removeAttr","removeClass","customConstraintErrorMessage","_manageClassHandler","validationInformationVisible","$handlerFunction","$handler","jQuery","_inputHolder","nodeName","$errorsContainer","after","$toBind","_this2","_validateIfNeeded","event","getValue","debounce","clearTimeout","_debounced","setTimeout","_this3","_resetUI","children","statusMapping","pending","resolved","rejected","parsley","submitSource","_submitSource","prop","_remoteCache","whenValidate","state","_trigger","stopImmediatePropagation","preventDefault","done","_submit","currentTarget","$synthetic","appendTo","Event","submitEvent","_refreshFields","_withoutReactualizingFormOptions","fail","always","isValid","refresh","reset","destroy","removeData","_bindFields","oldFields","fieldsMappedById","_this4","not","fieldInstance","Factory","uniqueId","oldActualizeOptions","eventName","Constraint","parsleyField","isDomConstraint","validatorSpec","_validatorRegistry","_parseRequirements","parsleyFormInstance","constraints","constraintsByName","_bindConstraints","requirementList","_isInGroup","_refreshed","_isRequired","validateIfEmpty","inArray","groupedConstraints","_getGroupedConstraints","_validateConstraint","_handleWhitespace","_refreshConstraints","refreshConstraints","addConstraint","removeConstraint","updateConstraint","undefined","_bindHtml5Constraints","trimValue","whitespace","c","index","p","sort","a","b","Multiple","addElement","$elements","fieldConstraints","has","data","filter","_init","savedparsleyFormInstance","__version__","is","bind","isMultiple","handleMultiple","parsleyMultipleInstance","input","$previouslyRelated","get","doNotStore","parsleyInstance","ParsleyExtend","vernums","jquery","forEach","document","version","psly","instances","ParsleyConfig","ParsleyUtils","registry","i18n","ParsleyValidator","method","ParsleyUI","doNotUpdateClass","autoBind","deprecated","o","adapt","context","parsleyAdaptedCallback","args","unshift","apply","eventPrefix","lastIndexOf","substr","listen","callback","unsubscribeAll","emit","instanceGiven","asyncValidators","xhr","status","reverse","addAsyncValidator","ajaxOptions","csr","encodeURIComponent","remoteOptions","param","handleXhr","ajax","then","globals","global","isNativeEvent","originalEvent","isTrusted","fakeInputEvent","misbehaves","behavesOk","selector","install","inputEventPatched","uninstall"],"mappings":"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"}