{"version":3,"sources":["core/validate.js","rules/core.js","rules/upload.js"],"names":["html5Types","email","url","date","time","week","month","number","color","range","html5Attributes","validity","node","rule","param","valid","dmx","rules","message","getAttribute","Array","isArray","replace","match","i","validate","setMessage","console","warn","bootstrapVersion","bootstrap4forms","bootstrap5forms","ready","window","bootstrap","Alert","parseInt","VERSION","tagName","elements","length","dmxExtraElements","classList","add","dirty","type","firstCheckbox","form","from","find","elm","name","getFirstFormElementByName","willValidate","setCustomValidity","hasAttribute","value","attr","attributes","startsWith","slice","toLowerCase","validateReset","remove","setBootstrapMessage","setErrorMessage","id","err","document","getElementById","createElement","className","group","closest","insertAdjacentElement","textContent","nodes","querySelectorAll","parentElement","appendChild","previousElementSibling","contains","filter","getFormElementsByName","forEach","getCount","element","nodeName","array","options","reduce","n","opt","selected","checked","Object","assign","required","querySelector","test","datetime","min","max","pattern","RegExp","minlength","maxlength","alphanumeric","lettersonly","letterswithbasicpunc","nowhitespace","digits","creditcard","cDigit","nCheck","nDigit","bEven","charAt","bic","iban","ibancheck","bbanpattern","p","toUpperCase","ibancheckdigits","leadingZeroes","cRest","AL","AD","AT","AZ","BE","BH","BA","BR","BG","CR","HR","CY","CZ","DK","DO","EE","FO","FI","FR","GE","DE","GI","GR","GL","GT","HU","IS","IE","IL","IT","KZ","KW","LV","LB","LI","LT","LU","MK","MT","MR","MU","MC","MD","ME","NL","NO","PK","PS","PL","PT","RO","SM","SA","RS","SK","SI","ES","SE","CH","TN","TR","AE","GB","VG","substring","indexOf","vat","integer","ipv4","ipv6","minitems","maxitems","equalto","target","notequalto","accept","allowed","split","files","file","ok","j","check","minsize","size","maxsize","mintotalsize","maxtotalsize","minfiles","maxfiles"],"mappings":"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","file":"dmxValidator.js","sourcesContent":["(function () {\r\n\r\n const html5Types = {\r\n email: 'email',\r\n url: 'url',\r\n date: 'date',\r\n time: 'time',\r\n week: 'week',\r\n month: 'month',\r\n number: 'number',\r\n color: 'color',\r\n range: 'number',\r\n };\r\n\r\n const html5Attributes = ['min', 'max', 'accept', 'pattern', 'minlength', 'maxlength'];\r\n\r\n const getFirstFormElementByName = function (node) {\r\n if (!node.form) return null;\r\n return Array.from(node.form.elements).find(function (elm) {\r\n return elm.name == node.name;\r\n });\r\n };\r\n\r\n const getFormElementsByName = function (node) {\r\n if (!node.form) return [];\r\n return Array.from(node.form.elements).filter(function (elm) {\r\n return elm.name == node.name;\r\n });\r\n };\r\n\r\n dmx.bootstrapVersion = 0;\r\n dmx.bootstrap4forms = false;\r\n dmx.bootstrap5forms = false;\r\n dmx.rules = {};\r\n\r\n dmx.ready(() => {\r\n dmx.bootstrapVersion = window.bootstrap && bootstrap.Alert ? parseInt(bootstrap.Alert.VERSION) : 0;\r\n dmx.bootstrap4forms = dmx.bootstrapVersion == 4;\r\n dmx.bootstrap5forms = dmx.bootstrapVersion == 5;\r\n });\r\n\r\n dmx.validate = function (node) {\r\n if (!node) {\r\n console.warn('dmx.validate() called without a node!');\r\n return true;\r\n }\r\n\r\n if (node.tagName == 'FORM') {\r\n let valid = true;\r\n\r\n for (var i = 0; i < node.elements.length; i++) {\r\n if (!dmx.validate(node.elements[i])) {\r\n valid = false;\r\n }\r\n }\r\n\r\n if (Array.isArray(node.dmxExtraElements)) {\r\n for (var i = 0; i < node.dmxExtraElements.length; i++) {\r\n if (!dmx.validate(node.dmxExtraElements[i])) {\r\n valid = false;\r\n }\r\n }\r\n }\r\n\r\n node.classList.add('was-validated');\r\n\r\n return valid;\r\n }\r\n\r\n node.dirty = true;\r\n\r\n if (node.type == 'checkbox' || node.type == 'radio') {\r\n // is this behavior correct?\r\n const firstCheckbox = getFirstFormElementByName(node);\r\n if (firstCheckbox && node != firstCheckbox) {\r\n return dmx.validate(firstCheckbox);\r\n }\r\n }\r\n\r\n if (!node.willValidate) {\r\n node.setCustomValidity('');\r\n return true;\r\n }\r\n\r\n // Google reCAPTCHA is always required\r\n if (node.getAttribute('name') == 'g-recaptcha-response' && !validity(node, 'required')) {\r\n return false;\r\n }\r\n\r\n // validate required\r\n if (node.hasAttribute('required') && !validity(node, 'required')) {\r\n return false;\r\n }\r\n\r\n if (node.value && node.value.length) {\r\n // validate html5 types and attributes\r\n for (let type in html5Types) {\r\n if (node.type == type && !validity(node, html5Types[type])) {\r\n return false;\r\n }\r\n }\r\n\r\n for (let attr of html5Attributes) {\r\n if (node.hasAttribute(attr) && !validity(node, attr, node.getAttribute(attr))) {\r\n return false;\r\n }\r\n }\r\n\r\n for (let attr of node.attributes) {\r\n if (attr.name.startsWith('data-rule-')) {\r\n const rule = attr.name.slice(10).toLowerCase();\r\n\r\n if (!validity(node, rule, attr.value)) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n node.setCustomValidity('');\r\n\r\n return true;\r\n };\r\n\r\n dmx.validateReset = function (node) {\r\n if (node.tagName == 'FORM') {\r\n for (let elm of node.elements) {\r\n dmx.validateReset(elm);\r\n }\r\n\r\n if (Array.isArray(node.dmxExtraElements)) {\r\n for (var i = 0; i < node.dmxExtraElements.length; i++) {\r\n dmx.validateReset(node.dmxExtraElements[i])\r\n }\r\n }\r\n\r\n node.classList.remove('was-validated');\r\n\r\n return;\r\n }\r\n\r\n node.dirty = false;\r\n node.setCustomValidity('');\r\n node.classList.remove('dmxValidator-valid', 'dmxValidator-invalid', 'is-valid', 'is-invalid');\r\n };\r\n\r\n function validity(node, rule, param) {\r\n var valid = true;\r\n\r\n if (dmx.rules[rule]) {\r\n valid = dmx.rules[rule].validity(node, param);\r\n if (!valid) setMessage(node, rule, param);\r\n } else {\r\n console.warn('Validation rule ' + rule + ' not found!');\r\n }\r\n\r\n if (valid) {\r\n dmx.validate.setMessage(node, '');\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n function setMessage(node, rule, param) {\r\n var message = node.getAttribute('data-msg-' + rule) || dmx.rules[rule].message;\r\n if (Array.isArray(param)) {\r\n message = message.replace(/\\{(\\d)\\}/g, function (match, i) {\r\n return param[i];\r\n });\r\n } else {\r\n message = message.replace(/\\{0\\}/g, param);\r\n }\r\n\r\n dmx.validate.setMessage(node, message);\r\n }\r\n\r\n dmx.validate.setMessage = function (node, message) {\r\n node.setCustomValidity(message);\r\n\r\n if (dmx.bootstrapVersion) {\r\n dmx.validate.setBootstrapMessage(node, message);\r\n } else {\r\n dmx.validate.setErrorMessage(node, message);\r\n }\r\n }\r\n\r\n dmx.validate.setErrorMessage = function (node, message) {\r\n if (node.hasAttribute('data-msg-custom') || !(node.getAttribute('name') || node.getAttribute('id'))) {\r\n return;\r\n }\r\n\r\n var type = node.type.toLowerCase();\r\n var id =\r\n 'dmxValidatorError' +\r\n (node.form ? node.form.getAttribute('id') : '') +\r\n (node.getAttribute('name') || node.getAttribute('id'));\r\n var err = document.getElementById(id);\r\n\r\n if (!err) {\r\n err = document.createElement('span');\r\n err.id = id;\r\n err.className = 'dmxValidator-error';\r\n\r\n if (type == 'checkbox' || type == 'radio') {\r\n var group = node.closest('.checkbox-group, .radio-group');\r\n\r\n if (group) {\r\n group.insertAdjacentElement('afterend', err);\r\n } else {\r\n node.insertAdjacentElement('afterend', err);\r\n }\r\n } else {\r\n node.insertAdjacentElement('afterend', err);\r\n }\r\n }\r\n\r\n err.textContent = message;\r\n\r\n if (message) {\r\n node.classList.remove('dmxValidator-valid');\r\n node.classList.add('dmxValidator-invalid');\r\n } else {\r\n node.classList.remove('dmxValidator-invalid');\r\n node.classList.add('dmxValidator-valid');\r\n }\r\n };\r\n\r\n dmx.validate.setBootstrapMessage = function (node, message) {\r\n if (node.hasAttribute('data-msg-custom') || !(node.getAttribute('name') || node.getAttribute('id'))) {\r\n return;\r\n }\r\n\r\n var type = node.type.toLowerCase();\r\n var name = node.getAttribute('name');\r\n var id = 'dmxValidatorError' + (node.form ? node.form.getAttribute('id') : '') + (name || node.getAttribute('id'));\r\n var err = document.getElementById(id);\r\n\r\n if (!err) {\r\n err = document.createElement('div');\r\n err.id = id;\r\n err.className = 'invalid-feedback';\r\n if ((type == 'checkbox' || type == 'radio') && name) {\r\n var nodes = node.form.querySelectorAll('input[name=\"' + name + '\"]');\r\n if (nodes.length) {\r\n node = nodes[nodes.length - 1];\r\n }\r\n }\r\n node.parentElement.appendChild(err);\r\n }\r\n\r\n if (node.hasAttribute('medium-editor-textarea-id')) {\r\n // special case for medium-editor\r\n node = document.getElementById(node.getAttribute('medium-editor-textarea-id'));\r\n }\r\n\r\n if (node.getAttribute('is') == 'dmx-tagify') {\r\n // special case for dmx-tagify\r\n if (node.previousElementSibling && node.previousElementSibling.classList.contains('tagify')) {\r\n node = node.previousElementSibling;\r\n }\r\n }\r\n\r\n if (type != 'hidden' && node.name != 'g-recaptcha-response') {\r\n if ((type == 'checkbox' || type == 'radio') && name) {\r\n var nodes = getFormElementsByName(node);\r\n nodes.forEach(function (node) {\r\n node.setCustomValidity(message);\r\n\r\n if (message) {\r\n node.classList.remove('is-valid');\r\n node.classList.add('is-invalid');\r\n } else {\r\n node.classList.remove('is-invalid');\r\n node.classList.add('is-valid');\r\n }\r\n });\r\n } else {\r\n if (message) {\r\n node.classList.remove('is-valid');\r\n node.classList.add('is-invalid');\r\n } else {\r\n node.classList.remove('is-invalid');\r\n node.classList.add('is-valid');\r\n }\r\n }\r\n }\r\n\r\n err.textContent = message;\r\n };\r\n})();\r\n","(function () {\r\n Object.assign(dmx.rules, {\r\n required: {\r\n message: 'This field is required.',\r\n validity: function (element) {\r\n if (element.type.toLowerCase() == 'checkbox' || element.type.toLowerCase() == 'radio') {\r\n //return element.checked;\r\n if (element.name) {\r\n return !!document.querySelector('[name=\"' + element.name + '\"]:checked');\r\n } else {\r\n return element.checked;\r\n }\r\n }\r\n\r\n if (element.hasAttribute('medium-editor-textarea-id')) {\r\n return !!(element.value && !/^\\s*
]*>\\s*
]*>\\s*<\\/p>\\s*$/.test(element.value));\r\n }\r\n\r\n return !!(element.value && element.value.length);\r\n },\r\n },\r\n\r\n email: {\r\n message: 'Please enter a valid email address.',\r\n validity: function (element) {\r\n return /^(?!\\.)((?!.*\\.{2})[a-zA-Z0-9\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F\\u0250-\\u02AF\\u0300-\\u036F\\u0370-\\u03FF\\u0400-\\u04FF\\u0500-\\u052F\\u0530-\\u058F\\u0590-\\u05FF\\u0600-\\u06FF\\u0700-\\u074F\\u0750-\\u077F\\u0780-\\u07BF\\u07C0-\\u07FF\\u0900-\\u097F\\u0980-\\u09FF\\u0A00-\\u0A7F\\u0A80-\\u0AFF\\u0B00-\\u0B7F\\u0B80-\\u0BFF\\u0C00-\\u0C7F\\u0C80-\\u0CFF\\u0D00-\\u0D7F\\u0D80-\\u0DFF\\u0E00-\\u0E7F\\u0E80-\\u0EFF\\u0F00-\\u0FFF\\u1000-\\u109F\\u10A0-\\u10FF\\u1100-\\u11FF\\u1200-\\u137F\\u1380-\\u139F\\u13A0-\\u13FF\\u1400-\\u167F\\u1680-\\u169F\\u16A0-\\u16FF\\u1700-\\u171F\\u1720-\\u173F\\u1740-\\u175F\\u1760-\\u177F\\u1780-\\u17FF\\u1800-\\u18AF\\u1900-\\u194F\\u1950-\\u197F\\u1980-\\u19DF\\u19E0-\\u19FF\\u1A00-\\u1A1F\\u1B00-\\u1B7F\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u1E00-\\u1EFF\\u1F00-\\u1FFFu20D0-\\u20FF\\u2100-\\u214F\\u2C00-\\u2C5F\\u2C60-\\u2C7F\\u2C80-\\u2CFF\\u2D00-\\u2D2F\\u2D30-\\u2D7F\\u2D80-\\u2DDF\\u2F00-\\u2FDF\\u2FF0-\\u2FFF\\u3040-\\u309F\\u30A0-\\u30FF\\u3100-\\u312F\\u3130-\\u318F\\u3190-\\u319F\\u31C0-\\u31EF\\u31F0-\\u31FF\\u3200-\\u32FF\\u3300-\\u33FF\\u3400-\\u4DBF\\u4DC0-\\u4DFF\\u4E00-\\u9FFF\\uA000-\\uA48F\\uA490-\\uA4CF\\uA700-\\uA71F\\uA800-\\uA82F\\uA840-\\uA87F\\uAC00-\\uD7AF\\uF900-\\uFAFF\\.!#$%&'*+-/=?^_`{|}~\\-\\d]+)@(?!\\.)([a-zA-Z0-9\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F\\u0250-\\u02AF\\u0300-\\u036F\\u0370-\\u03FF\\u0400-\\u04FF\\u0500-\\u052F\\u0530-\\u058F\\u0590-\\u05FF\\u0600-\\u06FF\\u0700-\\u074F\\u0750-\\u077F\\u0780-\\u07BF\\u07C0-\\u07FF\\u0900-\\u097F\\u0980-\\u09FF\\u0A00-\\u0A7F\\u0A80-\\u0AFF\\u0B00-\\u0B7F\\u0B80-\\u0BFF\\u0C00-\\u0C7F\\u0C80-\\u0CFF\\u0D00-\\u0D7F\\u0D80-\\u0DFF\\u0E00-\\u0E7F\\u0E80-\\u0EFF\\u0F00-\\u0FFF\\u1000-\\u109F\\u10A0-\\u10FF\\u1100-\\u11FF\\u1200-\\u137F\\u1380-\\u139F\\u13A0-\\u13FF\\u1400-\\u167F\\u1680-\\u169F\\u16A0-\\u16FF\\u1700-\\u171F\\u1720-\\u173F\\u1740-\\u175F\\u1760-\\u177F\\u1780-\\u17FF\\u1800-\\u18AF\\u1900-\\u194F\\u1950-\\u197F\\u1980-\\u19DF\\u19E0-\\u19FF\\u1A00-\\u1A1F\\u1B00-\\u1B7F\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u1E00-\\u1EFF\\u1F00-\\u1FFF\\u20D0-\\u20FF\\u2100-\\u214F\\u2C00-\\u2C5F\\u2C60-\\u2C7F\\u2C80-\\u2CFF\\u2D00-\\u2D2F\\u2D30-\\u2D7F\\u2D80-\\u2DDF\\u2F00-\\u2FDF\\u2FF0-\\u2FFF\\u3040-\\u309F\\u30A0-\\u30FF\\u3100-\\u312F\\u3130-\\u318F\\u3190-\\u319F\\u31C0-\\u31EF\\u31F0-\\u31FF\\u3200-\\u32FF\\u3300-\\u33FF\\u3400-\\u4DBF\\u4DC0-\\u4DFF\\u4E00-\\u9FFF\\uA000-\\uA48F\\uA490-\\uA4CF\\uA700-\\uA71F\\uA800-\\uA82F\\uA840-\\uA87F\\uAC00-\\uD7AF\\uF900-\\uFAFF\\-\\.\\d]+)((\\.([a-zA-Z\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F\\u0250-\\u02AF\\u0300-\\u036F\\u0370-\\u03FF\\u0400-\\u04FF\\u0500-\\u052F\\u0530-\\u058F\\u0590-\\u05FF\\u0600-\\u06FF\\u0700-\\u074F\\u0750-\\u077F\\u0780-\\u07BF\\u07C0-\\u07FF\\u0900-\\u097F\\u0980-\\u09FF\\u0A00-\\u0A7F\\u0A80-\\u0AFF\\u0B00-\\u0B7F\\u0B80-\\u0BFF\\u0C00-\\u0C7F\\u0C80-\\u0CFF\\u0D00-\\u0D7F\\u0D80-\\u0DFF\\u0E00-\\u0E7F\\u0E80-\\u0EFF\\u0F00-\\u0FFF\\u1000-\\u109F\\u10A0-\\u10FF\\u1100-\\u11FF\\u1200-\\u137F\\u1380-\\u139F\\u13A0-\\u13FF\\u1400-\\u167F\\u1680-\\u169F\\u16A0-\\u16FF\\u1700-\\u171F\\u1720-\\u173F\\u1740-\\u175F\\u1760-\\u177F\\u1780-\\u17FF\\u1800-\\u18AF\\u1900-\\u194F\\u1950-\\u197F\\u1980-\\u19DF\\u19E0-\\u19FF\\u1A00-\\u1A1F\\u1B00-\\u1B7F\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u1E00-\\u1EFF\\u1F00-\\u1FFF\\u20D0-\\u20FF\\u2100-\\u214F\\u2C00-\\u2C5F\\u2C60-\\u2C7F\\u2C80-\\u2CFF\\u2D00-\\u2D2F\\u2D30-\\u2D7F\\u2D80-\\u2DDF\\u2F00-\\u2FDF\\u2FF0-\\u2FFF\\u3040-\\u309F\\u30A0-\\u30FF\\u3100-\\u312F\\u3130-\\u318F\\u3190-\\u319F\\u31C0-\\u31EF\\u31F0-\\u31FF\\u3200-\\u32FF\\u3300-\\u33FF\\u3400-\\u4DBF\\u4DC0-\\u4DFF\\u4E00-\\u9FFF\\uA000-\\uA48F\\uA490-\\uA4CF\\uA700-\\uA71F\\uA800-\\uA82F\\uA840-\\uA87F\\uAC00-\\uD7AF\\uF900-\\uFAFF]){2,63})+)$/i.test(\r\n element.value\r\n );\r\n },\r\n },\r\n\r\n url: {\r\n message: 'Please enter a valid URL.',\r\n validity: function (element) {\r\n return /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(\r\n element.value\r\n );\r\n },\r\n },\r\n\r\n datetime: {\r\n message: 'Please enter a valid datetime.',\r\n validity: function (element) {\r\n return /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])[T ]([01][0-9]|2[0-4]):[0-5][0-9](:([0-5][0-9]|60))?Z?$/.test(\r\n element.value\r\n );\r\n },\r\n },\r\n\r\n date: {\r\n message: 'Please enter a valid date.',\r\n validity: function (element) {\r\n return /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test(element.value);\r\n },\r\n },\r\n\r\n time: {\r\n message: 'Please enter a valid time.',\r\n validity: function (element) {\r\n return /^([01][0-9]|2[0-4]):[0-5][0-9](:([0-5][0-9]|60))?$/.test(element.value);\r\n },\r\n },\r\n\r\n month: {\r\n message: 'Please enter a valid month.',\r\n validity: function (element) {\r\n return /^\\d{4}-(0[1-9]|1[012])$/.test(element.value);\r\n },\r\n },\r\n\r\n week: {\r\n message: 'Please enter a valid week.',\r\n validity: function (element) {\r\n return /^\\d{4}-W(0[1-9]|[1-4][0-9]|5[0-3])$/.test(element.value);\r\n },\r\n },\r\n\r\n color: {\r\n message: 'Please enter a color in the format #xxxxxx.',\r\n validity: function (element) {\r\n return /^#[a-fA-F0-9]{6}$/.test(element.value);\r\n },\r\n },\r\n\r\n number: {\r\n message: 'Please enter a valid number.',\r\n validity: function (element) {\r\n return /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(element.value);\r\n },\r\n },\r\n\r\n min: {\r\n message: 'Please enter a value greater than or equal to {0}.',\r\n validity: function (element, param) {\r\n if (element.type == 'number' || element.type == 'range') {\r\n return +element.value >= param;\r\n } else {\r\n return element.value >= param;\r\n }\r\n },\r\n },\r\n\r\n max: {\r\n message: 'Please enter a value less than or equal to {0}.',\r\n validity: function (element, param) {\r\n if (element.type == 'number' || element.type == 'range') {\r\n return +element.value <= param;\r\n } else {\r\n return element.value <= param;\r\n }\r\n },\r\n },\r\n\r\n pattern: {\r\n message: 'Invalid format.',\r\n validity: function (element, param) {\r\n if (!/^text|search|url|tel|email|password$/i.test(element.type)) {\r\n return true;\r\n }\r\n\r\n if (typeof param == 'string') {\r\n param = new RegExp('^(?:' + param + ')$');\r\n }\r\n\r\n return param.test(element.value);\r\n },\r\n },\r\n\r\n minlength: {\r\n message: 'Please enter at least {0} characters.',\r\n validity: function (element, param) {\r\n return element.value.length >= param;\r\n },\r\n },\r\n\r\n maxlength: {\r\n message: 'Please enter no more than {0} characters.',\r\n validity: function (element, param) {\r\n return element.value.length <= param;\r\n },\r\n },\r\n\r\n alphanumeric: {\r\n message: 'Letters, numbers, and underscores only please.',\r\n validity: function (element) {\r\n return /^\\w+$/i.test(element.value);\r\n },\r\n },\r\n\r\n lettersonly: {\r\n message: 'Letters only please.',\r\n validity: function (element) {\r\n return /^[a-z]+$/i.test(element.value);\r\n },\r\n },\r\n\r\n letterswithbasicpunc: {\r\n message: 'Letters or punctuation only please.',\r\n validity: function (element) {\r\n return /^[a-z\\-.,()'\"\\s]+$/i.test(element.value);\r\n },\r\n },\r\n\r\n nowhitespace: {\r\n message: 'No white space please.',\r\n validity: function (element) {\r\n return /^\\S+$/i.test(element.value);\r\n },\r\n },\r\n\r\n digits: {\r\n message: 'Please enter only digits.',\r\n validity: function (element) {\r\n return /^\\d+$/.test(element.value);\r\n },\r\n },\r\n\r\n creditcard: {\r\n message: 'Please enter a valid credit card number.',\r\n validity: function (element) {\r\n var value = element.value;\r\n\r\n // accept only spaces, digits and dashes\r\n if (/[^0-9 \\-]+/.test(value)) {\r\n return false;\r\n }\r\n\r\n var nCheck = 0,\r\n nDigit = 0,\r\n bEven = false,\r\n n,\r\n cDigit;\r\n\r\n value = value.replace(/\\D/g, '');\r\n\r\n // Basing min and max length on\r\n // http://developer.ean.com/general_info/Valid_Credit_Card_Types\r\n if (value.length < 13 || value.length > 19) {\r\n return false;\r\n }\r\n\r\n for (n = value.length - 1; n >= 0; n--) {\r\n cDigit = value.charAt(n);\r\n nDigit = parseInt(cDigit, 10);\r\n if (bEven) {\r\n if ((nDigit *= 2) > 9) {\r\n nDigit -= 9;\r\n }\r\n }\r\n nCheck += nDigit;\r\n bEven = !bEven;\r\n }\r\n\r\n return nCheck % 10 === 0;\r\n },\r\n },\r\n\r\n bic: {\r\n message: 'Please specify a valid BIC code.',\r\n validity: function (element) {\r\n return /^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(element.value);\r\n },\r\n },\r\n\r\n iban: {\r\n message: 'Please specify a valid IBAN.',\r\n validity: function (element) {\r\n // remove spaces and to upper case\r\n var iban = element.value.replace(/ /g, '').toUpperCase(),\r\n ibancheckdigits = '',\r\n leadingZeroes = true,\r\n cRest = '',\r\n cOperator = '',\r\n countrycode,\r\n ibancheck,\r\n charAt,\r\n cChar,\r\n bbanpattern,\r\n bbancountrypatterns,\r\n ibanregexp,\r\n i,\r\n p;\r\n\r\n // check the country code and find the country specific format\r\n countrycode = iban.substring(0, 2);\r\n bbancountrypatterns = {\r\n AL: '\\\\d{8}[\\\\dA-Z]{16}',\r\n AD: '\\\\d{8}[\\\\dA-Z]{12}',\r\n AT: '\\\\d{16}',\r\n AZ: '[\\\\dA-Z]{4}\\\\d{20}',\r\n BE: '\\\\d{12}',\r\n BH: '[A-Z]{4}[\\\\dA-Z]{14}',\r\n BA: '\\\\d{16}',\r\n BR: '\\\\d{23}[A-Z][\\\\dA-Z]',\r\n BG: '[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}',\r\n CR: '\\\\d{17}',\r\n HR: '\\\\d{17}',\r\n CY: '\\\\d{8}[\\\\dA-Z]{16}',\r\n CZ: '\\\\d{20}',\r\n DK: '\\\\d{14}',\r\n DO: '[A-Z]{4}\\\\d{20}',\r\n EE: '\\\\d{16}',\r\n FO: '\\\\d{14}',\r\n FI: '\\\\d{14}',\r\n FR: '\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}',\r\n GE: '[\\\\dA-Z]{2}\\\\d{16}',\r\n DE: '\\\\d{18}',\r\n GI: '[A-Z]{4}[\\\\dA-Z]{15}',\r\n GR: '\\\\d{7}[\\\\dA-Z]{16}',\r\n GL: '\\\\d{14}',\r\n GT: '[\\\\dA-Z]{4}[\\\\dA-Z]{20}',\r\n HU: '\\\\d{24}',\r\n IS: '\\\\d{22}',\r\n IE: '[\\\\dA-Z]{4}\\\\d{14}',\r\n IL: '\\\\d{19}',\r\n IT: '[A-Z]\\\\d{10}[\\\\dA-Z]{12}',\r\n KZ: '\\\\d{3}[\\\\dA-Z]{13}',\r\n KW: '[A-Z]{4}[\\\\dA-Z]{22}',\r\n LV: '[A-Z]{4}[\\\\dA-Z]{13}',\r\n LB: '\\\\d{4}[\\\\dA-Z]{20}',\r\n LI: '\\\\d{5}[\\\\dA-Z]{12}',\r\n LT: '\\\\d{16}',\r\n LU: '\\\\d{3}[\\\\dA-Z]{13}',\r\n MK: '\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}',\r\n MT: '[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}',\r\n MR: '\\\\d{23}',\r\n MU: '[A-Z]{4}\\\\d{19}[A-Z]{3}',\r\n MC: '\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}',\r\n MD: '[\\\\dA-Z]{2}\\\\d{18}',\r\n ME: '\\\\d{18}',\r\n NL: '[A-Z]{4}\\\\d{10}',\r\n NO: '\\\\d{11}',\r\n PK: '[\\\\dA-Z]{4}\\\\d{16}',\r\n PS: '[\\\\dA-Z]{4}\\\\d{21}',\r\n PL: '\\\\d{24}',\r\n PT: '\\\\d{21}',\r\n RO: '[A-Z]{4}[\\\\dA-Z]{16}',\r\n SM: '[A-Z]\\\\d{10}[\\\\dA-Z]{12}',\r\n SA: '\\\\d{2}[\\\\dA-Z]{18}',\r\n RS: '\\\\d{18}',\r\n SK: '\\\\d{20}',\r\n SI: '\\\\d{15}',\r\n ES: '\\\\d{20}',\r\n SE: '\\\\d{20}',\r\n CH: '\\\\d{5}[\\\\dA-Z]{12}',\r\n TN: '\\\\d{20}',\r\n TR: '\\\\d{5}[\\\\dA-Z]{17}',\r\n AE: '\\\\d{3}\\\\d{16}',\r\n GB: '[A-Z]{4}\\\\d{14}',\r\n VG: '[\\\\dA-Z]{4}\\\\d{16}',\r\n };\r\n\r\n bbanpattern = bbancountrypatterns[countrycode];\r\n // As new countries will start using IBAN in the\r\n // future, we only check if the countrycode is known.\r\n // This prevents false negatives, while almost all\r\n // false positives introduced by this, will be caught\r\n // by the checksum validation below anyway.\r\n // Strict checking should return FALSE for unknown\r\n // countries.\r\n if (typeof bbanpattern !== 'undefined') {\r\n ibanregexp = new RegExp('^[A-Z]{2}\\\\d{2}' + bbanpattern + '$', '');\r\n if (!ibanregexp.test(iban)) {\r\n return false; // invalid country specific format\r\n }\r\n }\r\n\r\n // now check the checksum, first convert to digits\r\n ibancheck = iban.substring(4, iban.length) + iban.substring(0, 4);\r\n for (i = 0; i < ibancheck.length; i++) {\r\n charAt = ibancheck.charAt(i);\r\n if (charAt !== '0') {\r\n leadingZeroes = false;\r\n }\r\n if (!leadingZeroes) {\r\n ibancheckdigits += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(charAt);\r\n }\r\n }\r\n\r\n // calculate the result of: ibancheckdigits % 97\r\n for (p = 0; p < ibancheckdigits.length; p++) {\r\n cChar = ibancheckdigits.charAt(p);\r\n cOperator = '' + cRest + '' + cChar;\r\n cRest = cOperator % 97;\r\n }\r\n return cRest === 1;\r\n },\r\n },\r\n\r\n vat: {\r\n message: 'Please specify a valid VAT Number.',\r\n validity: function (element) {\r\n return /^((AT)?U[0-9]{8}|(BE)?0[0-9]{9}|(BG)?[0-9]{9,10}|(CY)?[0-9]{8}L|(CZ)?[0-9]{8,10}|(DE)?[0-9]{9}|(DK)?[0-9]{8}|(EE)?[0-9]{9}|(EL|GR)?[0-9]{9}|(ES)?[0-9A-Z][0-9]{7}[0-9A-Z]|(FI)?[0-9]{8}|(FR)?[0-9A-Z]{2}[0-9]{9}|(GB)?([0-9]{9}([0-9]{3})?|[A-Z]{2}[0-9]{3})|(HU)?[0-9]{8}|(IE)?[0-9]S[0-9]{5}L|(IT)?[0-9]{11}|(LT)?([0-9]{9}|[0-9]{12})|(LU)?[0-9]{8}|(LV)?[0-9]{11}|(MT)?[0-9]{8}|(NL)?[0-9]{9}B[0-9]{2}|(PL)?[0-9]{10}|(PT)?[0-9]{9}|(RO)?[0-9]{2,10}|(SE)?[0-9]{12}|(SI)?[0-9]{8}|(SK)?[0-9]{10})$/.test(\r\n element.value\r\n );\r\n },\r\n },\r\n\r\n integer: {\r\n message: 'A positive or negative non-decimal number please.',\r\n validity: function (element) {\r\n return /^-?\\d+$/.test(element.value);\r\n },\r\n },\r\n\r\n ipv4: {\r\n message: 'Please enter a valid IP v4 address.',\r\n validity: function (element) {\r\n return /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(\r\n element.value\r\n );\r\n },\r\n },\r\n\r\n ipv6: {\r\n message: 'Please enter a valid IP v6 address.',\r\n validity: function (element) {\r\n return /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(\r\n element.value\r\n );\r\n },\r\n },\r\n\r\n minitems: {\r\n message: 'Please select at least {0} items.',\r\n validity: function (element, param) {\r\n return getCount(element) >= param;\r\n },\r\n },\r\n\r\n maxitems: {\r\n message: 'Please select no more tham {0} items.',\r\n validity: function (element, param) {\r\n return getCount(element) <= param;\r\n },\r\n },\r\n\r\n equalto: {\r\n message: 'Please enter the same value again.',\r\n validity: function (element, param) {\r\n if (param[0] != '#') param = '[name=\"' + param + '\"]';\r\n var target = element.form.querySelector(param);\r\n if (!target) {\r\n console.warn('Target element ' + param + ' for equalTo rule not found.');\r\n return true;\r\n }\r\n return element.value == target.value;\r\n },\r\n },\r\n\r\n notequalto: {\r\n message: 'Please enter a different value, values must not be the same.',\r\n validity: function (element, param) {\r\n if (param[0] != '#') param = '[name=\"' + param + '\"]';\r\n var target = element.form.querySelector(param);\r\n if (!target) {\r\n console.warn('Target element ' + param + ' for equalTo rule not found.');\r\n return true;\r\n }\r\n return element.value != target.value;\r\n },\r\n },\r\n });\r\n\r\n function getCount(element) {\r\n if (element.nodeName == 'SELECT') {\r\n return dmx.array(element.options).reduce(function (n, opt) {\r\n return n + opt.selected;\r\n }, 0);\r\n }\r\n\r\n if (element.type.toLowerCase() == 'checkbox') {\r\n return dmx.array(element.form.elements).reduce(function (n, elm) {\r\n return n + (elm.name == element.name && elm.checked);\r\n }, 0);\r\n }\r\n\r\n return 1;\r\n }\r\n})();\r\n","(function () {\r\n Object.assign(dmx.rules, {\r\n accept: {\r\n message: 'This file type is not allowed for upload.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n var allowed = param.replace(/\\s/g, '').split(',');\r\n\r\n if (element.files && element.files.length) {\r\n for (var i = 0; i < element.files.length; i++) {\r\n var file = element.files[i],\r\n ok = false;\r\n\r\n for (var j = 0; j < allowed.length; j++) {\r\n var check = allowed[j];\r\n\r\n if (check.charAt(0) == '.') {\r\n if (file.name.match(new RegExp('\\\\' + check + '$', 'i'))) {\r\n ok = true;\r\n break;\r\n }\r\n } else if (/(audio|video|image)\\/\\*/i.test(check)) {\r\n if (file.type.match(new RegExp('^' + check.replace(/\\*/g, '.*') + '$', 'i'))) {\r\n ok = true;\r\n break;\r\n }\r\n } else {\r\n if (file.type.toLowerCase() == check.toLowerCase()) {\r\n ok = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!ok) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n\r\n minsize: {\r\n message: 'Please select a file of at least {0} bytes.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n if (element.files && element.files.length) {\r\n for (var i = 0; i < element.files.length; i++) {\r\n if (element.files[i].size < param) return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n\r\n maxsize: {\r\n message: 'Please select a file of no more than {0} bytes.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n if (element.files && element.files.length) {\r\n for (var i = 0; i < element.files.length; i++) {\r\n if (element.files[i].size > param) return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n\r\n mintotalsize: {\r\n message: 'Total size of selected files should be at least {0} bytes.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n if (element.files && element.files.length) {\r\n var size = 0;\r\n for (var i = 0; i < element.files.length; i++) {\r\n size += element.files[i].size;\r\n }\r\n if (size < param) return false;\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n\r\n maxtotalsize: {\r\n message: 'Total size of selected files should be no more than {0} bytes.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n if (element.files && element.files.length) {\r\n var size = 0;\r\n for (var i = 0; i < element.files.length; i++) {\r\n size += element.files[i].size;\r\n }\r\n if (size > param) return false;\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n\r\n minfiles: {\r\n message: 'Please select at least {0} files.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n if (element.files && element.files.length) {\r\n if (element.files.length < param) return false;\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n\r\n maxfiles: {\r\n message: 'Please select no more than {0} files.',\r\n validity: function (element, param) {\r\n if (element.type.toLowerCase() != 'file') {\r\n return true;\r\n }\r\n\r\n if (element.files && element.files.length) {\r\n if (element.files.length > param) return false;\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n });\r\n})();\r\n"]}