UNPKG

hyperform

Version:

Capture form validation back from the browser

3 lines (2 loc) 41.1 kB
// hyperform.js.org "use strict";var instances=new WeakMap;function Wrapper(e,t){var r=instances.get(e);if(r)return r.settings=t,r;this.form=e,this.settings=t,this.observer=null,instances.set(e,this)}function get_wrapper(e){var t;for(e.form&&(t=instances.get(e.form));!t&&e;)t=instances.get(e),e=e.parentNode;return t=t||instances.get(window)}function get_validated_elements(e){var t=get_wrapper(e);return Array.prototype.filter.call(e.elements,function(e){return!!(e.getAttribute("name")||t&&t.settings.validateNameless)})}Wrapper.prototype={destroy:function(){instances.delete(this.form),this._destruct&&this._destruct()}};var registry=Object.create(null);function call_hook(n){var e,a,t=Array.prototype.slice.call(arguments,1);return n in registry&&(e=registry[n].reduce((a=t,function(e,t){var r=t.apply({state:e,hook:n},a);return void 0!==r?r:e}),e)),e}function do_filter(n,e){var t=e,a=Array.prototype.slice.call(arguments,1);return n in registry&&(t=registry[n].reduce(function(e,t){a[0]=e;var r=t.apply({state:e,hook:n},a);return void 0!==r?r:e},t)),t}function remove_hook(e,t){if(e in registry)for(var r=0;r<registry[e].length;r++)if(registry[e][r]===t){registry[e].splice(r,1);break}}function add_hook(e,t,r){e in registry||(registry[e]=[]),void 0===r&&(r=registry[e].length),registry[e].splice(r,0,t)}function return_hook_or(t,r){return function(){var e=call_hook(t,Array.prototype.slice.call(arguments));return void 0!==e?e:r.apply(this,arguments)}}var workingDefaultPrevented=function(){var e=document.createEvent("Event");return e.initEvent("foo",!0,!0),e.preventDefault(),e.defaultPrevented}();if(!workingDefaultPrevented){var origPreventDefault=window.Event.prototype.preventDefault;window.Event.prototype.preventDefault=function(){this.cancelable&&(origPreventDefault.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}function create_event(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=t.bubbles,n=void 0===r||r,a=t.cancelable,i=void 0!==a&&a,o=document.createEvent("Event");return o.initEvent(e,n,i),o}function trigger_event(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},n=r.bubbles,a=void 0===n||n,i=r.cancelable,o=void 0!==i&&i,s=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};for(var l in t instanceof window.Event||(t=create_event(t,{bubbles:a,cancelable:o})),s)s.hasOwnProperty(l)&&(t[l]=s[l]);return e.dispatchEvent(t),t}var dates=["datetime","date","month","week","time"],plain_numbers=["number","range"],numbers=dates.concat(plain_numbers,"datetime-local"),type_checked=["email","url"],input_checked=["email","date","month","week","time","datetime","datetime-local","number","range","color"],text=["text","search","tel","password"].concat(type_checked),validation_candidates=["checkbox","color","file","image","radio","submit"].concat(numbers,text),inputs=["button","hidden","reset"].concat(validation_candidates),non_inputs=["select-one","select-multiple","textarea"];function get_type(e){if(e instanceof window.HTMLTextAreaElement)return"textarea";if(e instanceof window.HTMLSelectElement)return e.hasAttribute("multiple")?"select-multiple":"select-one";if(e instanceof window.HTMLButtonElement)return(e.getAttribute("type")||"submit").toLowerCase();if(e instanceof window.HTMLInputElement){var t=(e.getAttribute("type")||"").toLowerCase();return t&&-1<inputs.indexOf(t)?t:e.type||"text"}return""}function is_in_disallowed_parent(e){for(var t=e.parentNode;t&&1===t.nodeType;){if(t instanceof window.HTMLFieldSetElement&&t.hasAttribute("disabled"))return!0;if("DATALIST"===t.nodeName.toUpperCase())return!0;if(t===e.form)break;t=t.parentNode}return!1}function is_validation_candidate(e){var t=do_filter("is_validation_candidate",null,e);if(null!==t)return!!t;if(e instanceof window.HTMLSelectElement||e instanceof window.HTMLTextAreaElement||e instanceof window.HTMLButtonElement||e instanceof window.HTMLInputElement){var r=get_type(e);if((-1<non_inputs.indexOf(r)||-1<validation_candidates.indexOf(r))&&!e.hasAttribute("disabled")&&!e.hasAttribute("readonly")){var n=get_wrapper(e);if((n&&!n.settings.novalidateOnElements||!e.hasAttribute("novalidate")&&!e.noValidate)&&!is_in_disallowed_parent(e))return!0}}return!1}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _createForOfIteratorHelper(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw i}}}}function mark(e){return-1<["object","function"].indexOf(_typeof(e))&&(delete e.__hyperform,Object.defineProperty(e,"__hyperform",{configurable:!0,enumerable:!1,value:!0})),e}function format_date(e){switch(1<arguments.length&&void 0!==arguments[1]?arguments[1]:void 0){case"date":return(e.toLocaleDateString||e.toDateString).call(e);case"time":return(e.toLocaleTimeString||e.toTimeString).call(e);case"month":return"toLocaleDateString"in e?e.toLocaleDateString(void 0,{year:"numeric",month:"2-digit"}):e.toDateString();default:return(e.toLocaleString||e.toString).call(e)}}function sprintf(e){for(var t=arguments.length,i=new Array(1<t?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];var o=i.length,s=0;return e.replace(/%([0-9]+\$)?([sl])/g,function(e,t,r){var n=s;t&&(n=Number(t.replace(/\$$/,""))-1),s+=1;var a="";return n<o&&(a=i[n]),(a instanceof Date||"number"==typeof a||a instanceof Number)&&(a="l"===r?(a.toLocaleString||a.toString).call(a):a.toString()),a})}function get_week_of_year(e){(e=new Date(+e)).setUTCHours(0,0,0),e.setUTCDate(e.getUTCDate()+4-(e.getUTCDay()||7));var t=new Date(e.getUTCFullYear(),0,1),r=Math.ceil(((e-t)/864e5+1)/7);return[e.getUTCFullYear(),r]}function pad(e){for(var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:2,r=e+"";r.length<t;)r="0"+r;return r}function date_to_string(e,t){if(!(e instanceof Date))return null;switch(t){case"datetime":return date_to_string(e,"date")+"T"+date_to_string(e,"time");case"datetime-local":return sprintf("%s-%s-%sT%s:%s:%s.%s",e.getFullYear(),pad(e.getMonth()+1),pad(e.getDate()),pad(e.getHours()),pad(e.getMinutes()),pad(e.getSeconds()),pad(e.getMilliseconds(),3)).replace(/(:00)?\.000$/,"");case"date":return sprintf("%s-%s-%s",e.getUTCFullYear(),pad(e.getUTCMonth()+1),pad(e.getUTCDate()));case"month":return sprintf("%s-%s",e.getUTCFullYear(),pad(e.getUTCMonth()+1));case"week":var r=get_week_of_year(e);return sprintf.call(null,"%s-W%s",r[0],pad(r[1]));case"time":return sprintf("%s:%s:%s.%s",pad(e.getUTCHours()),pad(e.getUTCMinutes()),pad(e.getUTCSeconds()),pad(e.getUTCMilliseconds(),3)).replace(/(:00)?\.000$/,"")}return null}function get_date_from_week(e,t){var r=new Date(Date.UTC(t,0,1+7*(e-1)));return r.getUTCDay()<=4?r.setUTCDate(r.getUTCDate()-r.getUTCDay()+1):r.setUTCDate(r.getUTCDate()+8-r.getUTCDay()),r}function string_to_date(e,t){var r;switch(t){case"datetime":return/^([0-9]{4})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9])(?:\.([0-9]{1,3}))?)?$/.test(e)?(r=new Date(e+"z"),isNaN(r.valueOf())?null:r):null;case"date":return/^([0-9]{4})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/.test(e)?(r=new Date(e),isNaN(r.valueOf())?null:r):null;case"month":return/^([0-9]{4})-(0[1-9]|1[012])$/.test(e)?(r=new Date(e),isNaN(r.valueOf())?null:r):null;case"week":return/^([0-9]{4})-W(0[1-9]|[1234][0-9]|5[0-3])$/.test(e)?get_date_from_week(Number(RegExp.$2),Number(RegExp.$1)):null;case"time":return/^([01][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9])(?:\.([0-9]{1,3}))?)?$/.test(e)?r=new Date("1970-01-01T"+e+"z"):null}return null}function string_to_number(e,t){var r=string_to_date(e,t);return null!==r?+r:Number(e)}var catalog={en:{TextTooLong:"Please shorten this text to %l characters or less (you are currently using %l characters).",ValueMissing:"Please fill out this field.",CheckboxMissing:"Please check this box if you want to proceed.",RadioMissing:"Please select one of these options.",FileMissing:"Please select a file.",SelectMissing:"Please select an item in the list.",InvalidEmail:"Please enter an email address.",InvalidURL:"Please enter a URL.",PatternMismatch:"Please match the requested format.",PatternMismatchWithTitle:"Please match the requested format: %l.",NumberRangeOverflow:"Please select a value that is no more than %l.",DateRangeOverflow:"Please select a value that is no later than %l.",TimeRangeOverflow:"Please select a value that is no later than %l.",NumberRangeUnderflow:"Please select a value that is no less than %l.",DateRangeUnderflow:"Please select a value that is no earlier than %l.",TimeRangeUnderflow:"Please select a value that is no earlier than %l.",StepMismatch:"Please select a valid value. The two nearest valid values are %l and %l.",StepMismatchOneValue:"Please select a valid value. The nearest valid value is %l.",BadInputNumber:"Please enter a number."}},language="en",base_lang="en";function set_language(e){base_lang=(language=e).replace(/[-_].*/,"")}function add_translation(e,t){for(var r in e in catalog||(catalog[e]={}),t)t.hasOwnProperty(r)&&(catalog[e][r]=t[r])}function _(e){return language in catalog&&e in catalog[language]?catalog[language][e]:base_lang in catalog&&e in catalog[base_lang]?catalog[base_lang][e]:e in catalog.en?catalog.en[e]:e}var default_step={"datetime-local":60,datetime:60,time:60},step_scale_factor={"datetime-local":1e3,datetime:1e3,date:864e5,week:6048e5,time:1e3},default_step_base={week:-2592e5},default_min={range:0},default_max={range:100};function get_next_valid(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1,r=get_type(e),n=e.getAttribute("min"),a=default_min[r]||NaN;if(n){var i=string_to_number(n,r);isNaN(i)||(a=i)}var o=e.getAttribute("max"),s=default_max[r]||NaN;if(o){var l=string_to_number(o,r);isNaN(l)||(s=l)}var u=e.getAttribute("step"),c=default_step[r]||1;if(u&&"any"===u.toLowerCase())return[_("any value"),_("any value")];if(u){var d=string_to_number(u,r);isNaN(d)||(c=d)}var f=string_to_number(e.getAttribute("value"),r),g=string_to_number(e.value||e.getAttribute("value"),r);if(isNaN(g))return[_("any valid value"),_("any valid value")];var m=isNaN(a)?isNaN(f)?default_step_base[r]||0:f:a,p=step_scale_factor[r]||1,v=m+Math.floor((g-m)/(c*p))*(c*p)*t,h=m+(Math.floor((g-m)/(c*p))+1)*(c*p)*t;return v<a?v=null:s<v&&(v=s),s<h?h=null:h<a&&(h=a),-1<dates.indexOf(r)&&(v=date_to_string(new Date(v),r),h=date_to_string(new Date(h),r)),[v,h]}function unicode_string_length(e){return e.match(/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g).length}var store=new WeakMap,custom_messages={set:function(e,t,r){var n=store.get(e)||{};return n[t]=r,store.set(e,n),custom_messages},get:function(e,t,r){var n=2<arguments.length&&void 0!==r?r:void 0,a=store.get(e);if(void 0!==a&&t in a)return a[t];var i="data-"+t.replace(/[A-Z]/g,"-$&").toLowerCase();return e.hasAttribute(i)?e.getAttribute(i):n},delete:function(e,t){var r=1<arguments.length&&void 0!==t?t:null;if(!r)return store.delete(e);var n=store.get(e)||{};return r in n&&(delete n[r],store.set(e,n),!0)}};function get_radiogroup(t){return t.form?Array.prototype.filter.call(t.form.elements,function(e){return"radio"===e.type&&e.name===t.name}):[t]}var store$1=new WeakMap;function get_message_element(e){return"radio"===e.type?get_radiogroup(e)[0]:e}var message_store={set:function(e,t,r){var n=2<arguments.length&&void 0!==r&&r;if((e=get_message_element(e))instanceof window.HTMLFieldSetElement){var a=get_wrapper(e);if(a&&!a.settings.extendFieldset)return message_store}return"string"==typeof t&&(t=new String(t)),n&&(t.is_custom=!0),mark(t),store$1.set(e,t),"_original_setCustomValidity"in e&&e._original_setCustomValidity(t.toString()),message_store},get:function(e){e=get_message_element(e);var t=store$1.get(e);return void 0===t&&"_original_validationMessage"in e&&(t=new String(e._original_validationMessage)),t||new String("")},delete:function(e,t){var r=1<arguments.length&&void 0!==t&&t;"_original_setCustomValidity"in(e=get_message_element(e))&&e._original_setCustomValidity("");var n=store$1.get(e);return!(n&&r&&!n.is_custom)&&store$1.delete(e)}},internal_registry=new WeakMap,custom_validator_registry={set:function(e,t){var r=internal_registry.get(e)||[];return r.push(t),internal_registry.set(e,r),custom_validator_registry},get:function(e){return internal_registry.get(e)||[]},delete:function(e){return internal_registry.delete(e)}};function test_bad_input(e){var t=get_type(e);if(-1===input_checked.indexOf(t))return!0;if(!e.value)return!("_original_validity"in e&&!e._original_validity.__hyperform)||!e._original_validity.badInput;var r=!0;switch(t){case"color":r=/^#[a-f0-9]{6}$/.test(e.value);break;case"number":case"range":r=!isNaN(Number(e.value));break;case"datetime":case"date":case"month":case"week":case"time":r=null!==string_to_date(e.value,t);break;case"datetime-local":r=/^([0-9]{4,})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9])(?:\.([0-9]{1,3}))?)?$/.test(e.value)}return r}function test_max(e){var t,r,n=get_type(e);return!e.value||!e.hasAttribute("max")||(r=-1<dates.indexOf(n)?(t=null===(t=string_to_date(e.value,n))?NaN:+t,null===(r=string_to_date(e.getAttribute("max"),n))?NaN:+r):(t=Number(e.value),Number(e.getAttribute("max"))),isNaN(r)||isNaN(t)||t<=r)}function test_maxlength(e){if(!e.value||-1===text.indexOf(get_type(e))||!e.hasAttribute("maxlength")||!e.getAttribute("maxlength"))return!0;var t=parseInt(e.getAttribute("maxlength"),10);return!!(isNaN(t)||t<0)||unicode_string_length(e.value)<=t}function test_min(e){var t,r,n=get_type(e);return!e.value||!e.hasAttribute("min")||(r=-1<dates.indexOf(n)?(t=null===(t=string_to_date(e.value,n))?NaN:+t,null===(r=string_to_date(e.getAttribute("min"),n))?NaN:+r):(t=Number(e.value),Number(e.getAttribute("min"))),isNaN(r)||isNaN(t)||r<=t)}function test_minlength(e){if(!e.value||-1===text.indexOf(get_type(e))||!e.hasAttribute("minlength")||!e.getAttribute("minlength"))return!0;var t=parseInt(e.getAttribute("minlength"),10);return!!(isNaN(t)||t<0)||unicode_string_length(e.value)>=t}function test_pattern(e){return!e.value||!e.hasAttribute("pattern")||new RegExp("^(?:"+e.getAttribute("pattern")+")$").test(e.value)}function has_submittable_option(e){var t=!e.multiple&&e.size<=1&&0<e.options.length&&e.options[0].parentNode==e&&""===e.options[0].value;return-1<e.selectedIndex&&Array.prototype.some.call(e.options,function(e){return(!t||0!==e.index)&&!e.disabled&&e.selected})}function test_required(e){if("radio"!==e.type)return!e.hasAttribute("required")||(e instanceof window.HTMLSelectElement?has_submittable_option(e):"checkbox"===e.type?e.checked:!!e.value);if(e.hasAttribute("required")&&e.checked)return!0;var t=get_radiogroup(e);return!t.some(function(e){return e.hasAttribute("required")})||t.some(function(e){return e.checked})}function test_step(e){var t=get_type(e);if(!e.value||-1===numbers.indexOf(t)||"any"===(e.getAttribute("step")||"").toLowerCase())return!0;var r=e.getAttribute("step");if((r=r?string_to_number(r,t):default_step[t]||1)<=0||isNaN(r))return!0;var n=step_scale_factor[t]||1,a=string_to_number(e.value,t),i=string_to_number(e.getAttribute("min")||e.getAttribute("value")||"",t);if(isNaN(a))return!0;isNaN(i)&&(i=default_step_base[t]||0),"month"===t&&(i=12*new Date(i).getUTCFullYear()+new Date(i).getUTCMonth(),a=12*new Date(a).getUTCFullYear()+new Date(a).getUTCMonth());var o=Math.abs(i-a)%(r*n);return o<1e-8||r*n-1e-8<o}var url_canary,ws_on_start_or_end=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function trim(e){return e.replace(ws_on_start_or_end,"")}function comma_split(e){return e.split(",").map(function(e){return trim(e)}).filter(function(e){return e})}var email_pattern=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function test_type(e){var t=get_type(e);if("file"!==t&&!e.value||"file"!==t&&-1===type_checked.indexOf(t))return!0;var r=!0;switch(t){case"url":url_canary=url_canary||document.createElement("a");var n=trim(e.value);url_canary.href=n,r=url_canary.href===n||url_canary.href===n+"/";break;case"email":r=e.hasAttribute("multiple")?comma_split(e.value).every(function(e){return email_pattern.test(e)}):email_pattern.test(trim(e.value));break;case"file":if("files"in e&&e.files.length&&e.hasAttribute("accept")){var a=comma_split(e.getAttribute("accept")).map(function(e){return/^(audio|video|image)\/\*$/.test(e)&&(e=new RegExp("^"+RegExp.$1+"/.+$")),e});if(!a.length)break;e:for(var i=0;i<e.files.length;i++){var o=!1;t:for(var s=0;s<a.length;s++){var l=e.files[i],u=a[s],c=l.type;if("string"==typeof u&&"."===u.substr(0,1)){if(-1===l.name.search("."))continue t;c=l.name.substr(l.name.lastIndexOf("."))}if(0===c.search(u)){o=!0;break t}}if(!o){r=!1;break e}}}}return r}function check(r,n){return function(e){var t=!r(e);return t&&n(e),t}}function set_msg(e,t,r){message_store.set(e,custom_messages.get(e,t,r))}var badInput=check(test_bad_input,function(e){return set_msg(e,"badInput",_("Please match the requested type."))});function customError(e){if(e.__hf_custom_validation_running){var t=message_store.get(e);return t&&t.is_custom}var r=custom_validator_registry.get(e),n=r.length,a=!0;if(n){e.__hf_custom_validation_running=!0;for(var i=0;i<n;i++){var o=r[i](e);if(void 0!==o&&!o){a=!1;break}}delete e.__hf_custom_validation_running}if(a){var s=message_store.get(e);a=!(s.toString()&&"is_custom"in s)}return!a}var patternMismatch=check(test_pattern,function(e){set_msg(e,"patternMismatch",e.title?sprintf(_("PatternMismatchWithTitle"),e.title):_("PatternMismatch"))}),rangeOverflow=check(test_max,function(e){var t,r=get_type(e),n=get_wrapper(e),a=n&&n.settings.classes.outOfRange||"hf-out-of-range",i=n&&n.settings.classes.inRange||"hf-in-range";switch(r){case"date":case"datetime":case"datetime-local":t=sprintf(_("DateRangeOverflow"),format_date(string_to_date(e.getAttribute("max"),r),r));break;case"time":t=sprintf(_("TimeRangeOverflow"),format_date(string_to_date(e.getAttribute("max"),r),r));break;default:t=sprintf(_("NumberRangeOverflow"),string_to_number(e.getAttribute("max"),r))}set_msg(e,"rangeOverflow",t),e.classList.add(a),e.classList.remove(i)}),rangeUnderflow=check(test_min,function(e){var t,r=get_type(e),n=get_wrapper(e),a=n&&n.settings.classes.outOfRange||"hf-out-of-range",i=n&&n.settings.classes.inRange||"hf-in-range";switch(r){case"date":case"datetime":case"datetime-local":t=sprintf(_("DateRangeUnderflow"),format_date(string_to_date(e.getAttribute("min"),r),r));break;case"time":t=sprintf(_("TimeRangeUnderflow"),format_date(string_to_date(e.getAttribute("min"),r),r));break;default:t=sprintf(_("NumberRangeUnderflow"),string_to_number(e.getAttribute("min"),r))}set_msg(e,"rangeUnderflow",t),e.classList.add(a),e.classList.remove(i)}),stepMismatch=check(test_step,function(e){var t=get_next_valid(e),r=t[0],n=t[1],a=!1;null===r?a=n:null===n&&(a=r),set_msg(e,"stepMismatch",!1!==a?sprintf(_("StepMismatchOneValue"),a):sprintf(_("StepMismatch"),r,n))}),tooLong=check(test_maxlength,function(e){set_msg(e,"tooLong",sprintf(_("TextTooLong"),e.getAttribute("maxlength"),unicode_string_length(e.value)))}),tooShort=check(test_minlength,function(e){set_msg(e,"tooShort",sprintf(_("Please lengthen this text to %l characters or more (you are currently using %l characters)."),e.getAttribute("minlength"),unicode_string_length(e.value)))}),typeMismatch=check(test_type,function(e){var t=_("Please use the appropriate format."),r=get_type(e);"email"===r?t=e.hasAttribute("multiple")?_("Please enter a comma separated list of email addresses."):_("InvalidEmail"):"url"===r?t=_("InvalidURL"):"file"===r&&(t=_("Please select a file of the correct type.")),set_msg(e,"typeMismatch",t)}),valueMissing=check(test_required,function(e){var t=_("ValueMissing"),r=get_type(e);"checkbox"===r?t=_("CheckboxMissing"):"radio"===r?t=_("RadioMissing"):"file"===r?t=e.hasAttribute("multiple")?_("Please select one or more files."):_("FileMissing"):e instanceof window.HTMLSelectElement&&(t=_("SelectMissing")),set_msg(e,"valueMissing",t)}),valid=function(e){var t=get_wrapper(e),r=t&&t.settings.classes.valid||"hf-valid",n=t&&t.settings.classes.invalid||"hf-invalid",a=t&&t.settings.classes.userInvalid||"hf-user-invalid",i=t&&t.settings.classes.userValid||"hf-user-valid",o=t&&t.settings.classes.inRange||"hf-in-range",s=t&&t.settings.classes.outOfRange||"hf-out-of-range",l=t&&t.settings.classes.validated||"hf-validated";e.classList.add(l);for(var u=0,c=[badInput,customError,patternMismatch,rangeOverflow,rangeUnderflow,stepMismatch,tooLong,tooShort,typeMismatch,valueMissing];u<c.length;u++){if((0,c[u])(e))return e.classList.add(n),e.classList.remove(r),e.classList.remove(i),("checkbox"===e.type||"radio"===e.type)&&e.checked!==e.defaultChecked||e.value!==e.defaultValue?e.classList.add(a):e.classList.remove(a),e.setAttribute("aria-invalid","true"),!1}return message_store.delete(e),e.classList.remove(n),e.classList.remove(a),e.classList.remove(s),e.classList.add(r),e.classList.add(o),e.value!==e.defaultValue?e.classList.add(i):e.classList.remove(i),e.setAttribute("aria-invalid","false"),!0},validity_state_checkers={badInput:badInput,customError:customError,patternMismatch:patternMismatch,rangeOverflow:rangeOverflow,rangeUnderflow:rangeUnderflow,stepMismatch:stepMismatch,tooLong:tooLong,tooShort:tooShort,typeMismatch:typeMismatch,valueMissing:valueMissing,valid:valid},ValidityState=function e(t){if(!(t instanceof window.HTMLElement))throw new Error("cannot create a ValidityState for a non-element");var r=e.cache.get(t);return r||(this instanceof e?(this.element=t,void e.cache.set(t,this)):new e(t))},ValidityStatePrototype={};ValidityState.prototype=ValidityStatePrototype,ValidityState.cache=new WeakMap;var checker_getter=function(e,t){return function(){return is_validation_candidate(this.element)?t(this.element):"valid"===e}};for(var prop in validity_state_checkers)Object.defineProperty(ValidityStatePrototype,prop,{configurable:!0,enumerable:!0,get:checker_getter(prop,validity_state_checkers[prop]),set:void 0});mark(ValidityStatePrototype);var checkValidity=return_hook_or("checkValidity",function(e){if(e instanceof window.HTMLFormElement)return get_validated_elements(e).map(checkValidity).every(function(e){return e});var t=ValidityState(e).valid;if(t){var r=get_wrapper(e);r&&r.settings.validEvent&&trigger_event(e,"valid")}else trigger_event(e,"invalid",{cancelable:!0});return t}),uid=0;function generate_id(){return(0<arguments.length&&void 0!==arguments[0]?arguments[0]:"hf_")+uid+++Math.random().toString(36).substr(2)}var warningsCache=new WeakMap,DefaultRenderer={attachWarning:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},detachWarning:function(e){e.parentNode&&e.parentNode.removeChild(e)},showWarning:function(e,t){var r,n=1<arguments.length&&void 0!==t&&t,a=e,i=[e];if("radio"===e.type){var o=get_radiogroup(e);if(n&&o[0]!==e)return;a=o[0],i=o}r=warningsCache.get(a);var s=message_store.get(a).toString();if(s){if(!r){var l=get_wrapper(a);(r=document.createElement("div")).className=l&&l.settings.classes.warning||"hf-warning",r.id=generate_id(),r.setAttribute("aria-live","polite"),warningsCache.set(a,r)}i.forEach(function(e){e.setAttribute("aria-errormessage",r.id),e.hasAttribute("aria-describedby")||e.setAttribute("aria-describedby",r.id)}),Renderer.setMessage(r,s,a),Renderer.attachWarning(r,a)}else r&&r.parentNode&&(i.forEach(function(e){e.getAttribute("aria-describedby")===r.id&&e.removeAttribute("aria-describedby"),e.removeAttribute("aria-errormessage")}),Renderer.detachWarning(r,a))},setMessage:function(e,t){e.textContent=t}},Renderer={attachWarning:DefaultRenderer.attachWarning,detachWarning:DefaultRenderer.detachWarning,showWarning:DefaultRenderer.showWarning,setMessage:DefaultRenderer.setMessage,set:function(e,t){t=t||DefaultRenderer[e],Renderer[e]=t},getWarning:function(e){return warningsCache.get(e)}};function reportValidity(e){if(e instanceof window.HTMLFormElement){e.__hf_form_validation=!0;var t=get_validated_elements(e).map(reportValidity).every(function(e){return e});return delete e.__hf_form_validation,t}var r,n=ValidityState(e).valid;if(n){var a=get_wrapper(e);a&&a.settings.validEvent&&(r=trigger_event(e,"valid",{cancelable:!0}))}else r=trigger_event(e,"invalid",{cancelable:!0});return r&&r.defaultPrevented||Renderer.showWarning(e,e.form&&e.form.__hf_form_validation),n}function setCustomValidity(e,t){t?message_store.set(e,t,!0):message_store.delete(e,!0);var r=Renderer.getWarning(e);r&&Renderer.setMessage(r,t,e),validity_state_checkers.valid(e)}function valueAsDate(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:void 0,r=get_type(e);if(-1<dates.indexOf(r)){if(void 0!==t){if(null===t)e.value="";else{if(!(t instanceof Date))throw new window.DOMException("valueAsDate setter encountered invalid value","TypeError");isNaN(t.getTime())?e.value="":e.value=date_to_string(t,r)}return}var n=string_to_date(e.value,r);return n instanceof Date?n:null}if(void 0!==t)throw new window.DOMException("valueAsDate setter cannot set date on this element","InvalidStateError");return null}function valueAsNumber(t){var r=1<arguments.length&&void 0!==arguments[1]?arguments[1]:void 0,e=get_type(t);if(!(-1<numbers.indexOf(e))){if(void 0!==r)throw new window.DOMException("valueAsNumber setter cannot set number on this element","InvalidStateError");return NaN}if("range"===e&&t.hasAttribute("multiple"))return NaN;if(void 0===r)return string_to_number(t.value,e);if(isNaN(r))t.value="";else{if("number"!=typeof r||!window.isFinite(r))throw new window.DOMException("valueAsNumber setter encountered invalid value","TypeError");try{valueAsDate(t,new Date(r))}catch(e){if(!(e instanceof window.DOMException))throw e;t.value=r.toString()}}}function stepDown(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1;if(-1===numbers.indexOf(get_type(e)))throw new window.DOMException("stepDown encountered invalid type","InvalidStateError");if("any"===(e.getAttribute("step")||"").toLowerCase())throw new window.DOMException('stepDown encountered step "any"',"InvalidStateError");var r=get_next_valid(e,t)[0];null!==r&&valueAsNumber(e,r)}function stepUp(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1;if(-1===numbers.indexOf(get_type(e)))throw new window.DOMException("stepUp encountered invalid type","InvalidStateError");if("any"===(e.getAttribute("step")||"").toLowerCase())throw new window.DOMException('stepUp encountered step "any"',"InvalidStateError");var r=get_next_valid(e,t)[1];null!==r&&valueAsNumber(e,r)}function validationMessage(e){var t=message_store.get(e);return t?t.toString():""}function willValidate(e){return is_validation_candidate(e)}var ep=window.Element.prototype,native_matches=ep.matches||ep.matchesSelector||ep.msMatchesSelector||ep.webkitMatchesSelector;function matches(e,t){return native_matches.call(e,t)}function submit_form_via(e){var t,r=create_event("submit",{cancelable:!0});r.preventDefault(),Object.defineProperty(r,"defaultPrevented",{value:!1,writable:!0}),Object.defineProperty(r,"preventDefault",{value:function(){return r.defaultPrevented=t=!0},writable:!0}),trigger_event(e.form,r,{},{submittedVia:e}),t||(add_submit_field(e),window.HTMLFormElement.prototype.submit.call(e.form),window.setTimeout(function(){return remove_submit_field(e)}))}function add_submit_field(e){if(-1<["image","submit"].indexOf(e.type)&&e.name){var t=get_wrapper(e.form)||{},r=t.submit_helper;r?r.parentNode&&r.parentNode.removeChild(r):((r=document.createElement("input")).type="hidden",t.submit_helper=r),r.name=e.name,r.value=e.value,e.form.appendChild(r)}}function remove_submit_field(e){if(-1<["image","submit"].indexOf(e.type)&&e.name){var t=(get_wrapper(e.form)||{}).submit_helper;t&&t.parentNode&&t.parentNode.removeChild(t)}}function check$1(e){if(!trigger_event(e.form,"validate",{cancelable:!0}).defaultPrevented){var t,r=!0;e.form.__hf_form_validation=!0,get_validated_elements(e.form).map(function(e){reportValidity(e)||(r=!1,!t&&"focus"in e&&(t=e))}),delete e.form.__hf_form_validation,r?submit_form_via(e):t&&(t.focus(),trigger_event(e.form,"forminvalid"))}}function is_submit_button(e){return!("INPUT"!==e.nodeName&&"BUTTON"!==e.nodeName||"image"!==e.type&&"submit"!==e.type)}function is_submitting_click(e,t){return!e.defaultPrevented&&(!("button"in e)||e.button<2)&&is_submit_button(t)&&t.form&&!t.form.hasAttribute("novalidate")}function is_submitting_keypress(e){return!e.defaultPrevented&&(13===e.keyCode&&"INPUT"===e.target.nodeName&&-1<text.indexOf(e.target.type)||(13===e.keyCode||32===e.keyCode)&&is_submit_button(e.target))&&e.target.form&&!e.target.form.hasAttribute("novalidate")}function get_clicked_button(e){return is_submit_button(e)?e:matches(e,'button:not([type]) *, button[type="submit"] *')?get_clicked_button(e.parentNode):null}function get_click_handler(){var r=0<arguments.length&&void 0!==arguments[0]&&arguments[0];return function(e){var t=get_clicked_button(e.target);t&&is_submitting_click(e,t)&&(e.preventDefault(),(r||t.hasAttribute("formnovalidate")?submit_form_via:check$1)(t))}}var click_handler=get_click_handler(),ignored_click_handler=get_click_handler(!0);function get_keypress_handler(a){return function(e){if(is_submitting_keypress(e)){if(e.preventDefault(),(get_wrapper(e.target.form)||{settings:{}}).settings.preventImplicitSubmit)return;for(var t,r=e.target.form.elements.length,n=0;n<r;n++)if(-1<["image","submit"].indexOf(e.target.form.elements[n].type)){t=e.target.form.elements[n];break}if(trigger_event(e.target.form,"implicit_submit",{cancelable:!0},{trigger:e.target,submittedVia:t||e.target}).defaultPrevented)return;t?t.click():(a?submit_form_via:check$1)(e.target)}}}var keypress_handler=get_keypress_handler(),ignored_keypress_handler=get_keypress_handler(!0);function catch_submit(e){1<arguments.length&&void 0!==arguments[1]&&arguments[1]?(e.addEventListener("click",ignored_click_handler),e.addEventListener("keypress",ignored_keypress_handler)):(e.addEventListener("click",click_handler),e.addEventListener("keypress",keypress_handler))}function uncatch_submit(e){e.removeEventListener("click",ignored_click_handler),e.removeEventListener("keypress",ignored_keypress_handler),e.removeEventListener("click",click_handler),e.removeEventListener("keypress",keypress_handler)}function install_property(e,t,r){r.configurable=!0,r.enumerable=!0,"value"in r&&(r.writable=!0);var n=Object.getOwnPropertyDescriptor(e,t);if(void 0===n&&(n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)),n){if(!1===n.configurable){var a=get_wrapper(e);return a&&a.settings.debug&&console.log("[hyperform] cannot install custom property "+t),!1}if(n.get&&n.get.__hyperform||n.value&&n.value.__hyperform)return;Object.defineProperty(e,"_original_"+t,n)}return delete e[t],Object.defineProperty(e,t,r),!0}function is_field(e){return e instanceof window.HTMLButtonElement||e instanceof window.HTMLInputElement||e instanceof window.HTMLSelectElement||e instanceof window.HTMLTextAreaElement||e instanceof window.HTMLFieldSetElement||e===window.HTMLButtonElement.prototype||e===window.HTMLInputElement.prototype||e===window.HTMLSelectElement.prototype||e===window.HTMLTextAreaElement.prototype||e===window.HTMLFieldSetElement.prototype}function uninstall_property(t,r){try{delete t[r]}catch(e){var n=get_wrapper(t);return n&&n.settings.debug&&console.log("[hyperform] cannot uninstall custom property "+r),!1}var e=Object.getOwnPropertyDescriptor(t,"_original_"+r);e&&Object.defineProperty(t,r,e)}var gA=function(e){return function(){return do_filter("attr_get_"+e,this.getAttribute(e),this)}},sA=function(t){return function(e){this.setAttribute(t,do_filter("attr_set_"+t,e,this))}},gAb=function(e){return function(){return do_filter("attr_get_"+e,this.hasAttribute(e),this)}},sAb=function(t){return function(e){do_filter("attr_set_"+t,e,this)?this.setAttribute(t,t):this.removeAttribute(t)}},gAn=function(e){return function(){return do_filter("attr_get_"+e,Math.max(0,Number(this.getAttribute(e))),this)}},sAn=function(t){return function(e){e=do_filter("attr_set_"+t,e,this),/^[0-9]+$/.test(e)&&this.setAttribute(t,e)}};function install_properties(e){for(var t=0,r=["accept","max","min","pattern","placeholder","step"];t<r.length;t++){var n=r[t];install_property(e,n,{get:gA(n),set:sA(n)})}for(var a=0,i=["multiple","required","readOnly"];a<i.length;a++){var o=i[a];install_property(e,o,{get:gAb(o.toLowerCase()),set:sAb(o.toLowerCase())})}for(var s=0,l=["minLength","maxLength"];s<l.length;s++){var u=l[s];install_property(e,u,{get:gAn(u.toLowerCase()),set:sAn(u.toLowerCase())})}}function uninstall_properties(e){for(var t=0,r=["accept","max","min","pattern","placeholder","step","multiple","required","readOnly","minLength","maxLength"];t<r.length;t++){uninstall_property(e,r[t])}}var polyfills={checkValidity:{value:mark(function(){return checkValidity(this)})},reportValidity:{value:mark(function(){return reportValidity(this)})},setCustomValidity:{value:mark(function(e){return setCustomValidity(this,e)})},stepDown:{value:mark(function(){return stepDown(this,0<arguments.length&&void 0!==arguments[0]?arguments[0]:1)})},stepUp:{value:mark(function(){return stepUp(this,0<arguments.length&&void 0!==arguments[0]?arguments[0]:1)})},validationMessage:{get:mark(function(){return validationMessage(this)})},validity:{get:mark(function(){return ValidityState(this)})},valueAsDate:{get:mark(function(){return valueAsDate(this)}),set:mark(function(e){valueAsDate(this,e)})},valueAsNumber:{get:mark(function(){return valueAsNumber(this)}),set:mark(function(e){valueAsNumber(this,e)})},willValidate:{get:mark(function(){return willValidate(this)})}};function polyfill(e){if(is_field(e)){for(var t in polyfills)install_property(e,t,polyfills[t]);install_properties(e)}else(e instanceof window.HTMLFormElement||e===window.HTMLFormElement.prototype)&&(install_property(e,"checkValidity",polyfills.checkValidity),install_property(e,"reportValidity",polyfills.reportValidity))}function polyunfill(e){is_field(e)?(uninstall_property(e,"checkValidity"),uninstall_property(e,"reportValidity"),uninstall_property(e,"setCustomValidity"),uninstall_property(e,"stepDown"),uninstall_property(e,"stepUp"),uninstall_property(e,"validationMessage"),uninstall_property(e,"validity"),uninstall_property(e,"valueAsDate"),uninstall_property(e,"valueAsNumber"),uninstall_property(e,"willValidate"),uninstall_properties(e)):e instanceof window.HTMLFormElement&&(uninstall_property(e,"checkValidity"),uninstall_property(e,"reportValidity"))}var element_prototypes=[window.HTMLButtonElement.prototype,window.HTMLInputElement.prototype,window.HTMLSelectElement.prototype,window.HTMLTextAreaElement.prototype,window.HTMLFieldSetElement.prototype];function get_revalidator(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"hybrid";return function(e){if(e.target instanceof window.HTMLButtonElement||e.target instanceof window.HTMLTextAreaElement||e.target instanceof window.HTMLSelectElement||e.target instanceof window.HTMLInputElement){if(e.target.form&&e.target.form.hasAttribute("novalidate"))return;"hybrid"===t?("blur"===e.type&&e.target.value!==e.target.defaultValue||ValidityState(e.target).valid||("keyup"===e.type&&9!==e.keyCode||"change"===e.type)&&ValidityState(e.target).valid)&&reportValidity(e.target):"keyup"===e.type&&9===e.keyCode||reportValidity(e.target)}}}function execute_on_elements(e,t){t instanceof window.Element&&(t=[t]);for(var r=t.length,n=0;n<r;n++)e(t[n])}function get_destructor(n){var a=n.form;return function(){if(uncatch_submit(a),a.removeEventListener("keyup",n.revalidator),a.removeEventListener("change",n.revalidator),a.removeEventListener("blur",n.revalidator,!0),a===window||9===a.nodeType)n.uninstall(element_prototypes),polyunfill(window.HTMLFormElement);else if(a instanceof window.HTMLFormElement||a instanceof window.HTMLFieldSetElement)n.uninstall(a.elements),a instanceof window.HTMLFormElement&&polyunfill(a);else if(a instanceof window.HTMLElement){n.observer.disconnect();var e,t=_createForOfIteratorHelper(Array.prototype.slice.call(a.getElementsByTagName("form")));try{for(t.s();!(e=t.n()).done;){var r=e.value;n.uninstall(r.elements),polyunfill(r)}}catch(e){t.e(e)}finally{t.f()}}}}function add_behavior(c){var e=c.form,t=c.settings;if(c.revalidator=get_revalidator(t.revalidate),c.observer={disconnect:function(){}},c.install=function(e){return execute_on_elements(polyfill,e)},c.uninstall=function(e){return execute_on_elements(polyunfill,e)},c._destruct=get_destructor(c),catch_submit(e,"never"===t.revalidate),e===window||9===e.nodeType)c.install(element_prototypes),polyfill(window.HTMLFormElement);else if(e instanceof window.HTMLFormElement||e instanceof window.HTMLFieldSetElement)c.install(e.elements),e instanceof window.HTMLFormElement&&polyfill(e);else{if(!(e instanceof window.HTMLElement))throw new Error("Hyperform must be used with a node or window.");var r,n=_createForOfIteratorHelper(Array.prototype.slice.call(c.form.getElementsByTagName("form")));try{for(n.s();!(r=n.n()).done;){var a=r.value;c.install(a.elements),polyfill(a)}}catch(e){n.e(e)}finally{n.f()}c.observer=new window.MutationObserver(function(e){var t,r=_createForOfIteratorHelper(e);try{for(r.s();!(t=r.n()).done;){var n=t.value;if("childList"===n.type){var a,i=_createForOfIteratorHelper(Array.prototype.slice.call(n.addedNodes));try{for(i.s();!(a=i.n()).done;){var o=a.value;o instanceof window.HTMLFormElement&&(c.install(o.elements),polyfill(o))}}catch(e){i.e(e)}finally{i.f()}var s,l=_createForOfIteratorHelper(Array.prototype.slice.call(n.removedNodes));try{for(l.s();!(s=l.n()).done;){var u=s.value;u instanceof window.HTMLFormElement&&(c.uninstall(u.elements),polyunfill(u))}}catch(e){l.e(e)}finally{l.f()}}}}catch(e){r.e(e)}finally{r.f()}}),c.observer.observe(e,{subtree:!0,childList:!0})}"oninput"!==t.revalidate&&"hybrid"!==t.revalidate||(e.addEventListener("keyup",c.revalidator),e.addEventListener("change",c.revalidator)),"onblur"!==t.revalidate&&"hybrid"!==t.revalidate||e.addEventListener("blur",c.revalidator,!0)}var version="0.12.1";function hyperform(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=t.classes,n=t.debug,a=void 0!==n&&n,i=t.extendFieldset,o=t.novalidateOnElements,s=t.preventImplicitSubmit,l=void 0!==s&&s,u=t.revalidate,c=t.strict,d=void 0!==c&&c,f=t.validEvent,g=t.validateNameless;void 0===i&&(i=!d),void 0===o&&(o=!d),void 0===l&&(l=!1),void 0===u&&(u=d?"onsubmit":"hybrid"),void 0===f&&(f=!d);var m={debug:a,strict:d,preventImplicitSubmit:l,revalidate:u,validEvent:f,extendFieldset:i,classes:r=r||{},novalidateOnElements:o,validateNameless:void 0!==g&&g};if(e instanceof window.NodeList||e instanceof window.HTMLCollection||e instanceof Array)return Array.prototype.map.call(e,function(e){return hyperform(e,m)});var p=new Wrapper(e,m);return add_behavior(p),p}hyperform.version=version,hyperform.checkValidity=checkValidity,hyperform.reportValidity=reportValidity,hyperform.setCustomValidity=setCustomValidity,hyperform.stepDown=stepDown,hyperform.stepUp=stepUp,hyperform.validationMessage=validationMessage,hyperform.ValidityState=ValidityState,hyperform.valueAsDate=valueAsDate,hyperform.valueAsNumber=valueAsNumber,hyperform.willValidate=willValidate,hyperform.setLanguage=function(e){return set_language(e),hyperform},hyperform.addTranslation=function(e,t){return add_translation(e,t),hyperform},hyperform.setRenderer=function(e,t){return Renderer.set(e,t),hyperform},hyperform.addValidator=function(e,t){return custom_validator_registry.set(e,t),hyperform},hyperform.setMessage=function(e,t,r){return custom_messages.set(e,t,r),hyperform},hyperform.addHook=function(e,t,r){return add_hook(e,t,r),hyperform},hyperform.removeHook=function(e,t){return remove_hook(e,t),hyperform},document.currentScript&&document.currentScript.hasAttribute("data-hf-autoload")&&hyperform(window),module.exports=hyperform;