UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

3 lines 13.9 kB
/* @license */ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`kendo.core.min.js`)):typeof define==`function`&&define.amd?define([`exports`,`kendo.core.min`],t):(e=typeof globalThis<`u`?globalThis:e||self,t((e.kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Validator={}),e.kendo._globals.Core))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let n={id:`validator`,name:`Validator`,category:`web`,description:`The Validator offers an easy way to do a client-side form validation.`,depends:[`core`]};(function(e,t){let n=window.kendo,r=n.ui.Widget,i=`.kendoValidator`,a=`k-invalid-msg`,o=new RegExp(a,`i`),s=`k-invalid`,c=`k-valid`,l=`k-validation-summary`,u=`k-text-error`,d=`.k-upload-button-wrap`,f=`aria-invalid`,p=/^[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])?)*$/i,m=[`http:`,`https:`,`ftp:`,`ftps:`],h=`:input:not(:button,[type=submit],[type=reset],[disabled],[readonly])`,g=`:checkbox:not([disabled],[readonly])`,_=`[type=number],[type=range]`,v=`blur`,y=`name`,b=`form`,x=`novalidate`,S=`validate`,C=`change`,w=`validateInput`,T=function(e,t){return typeof t==`string`&&(t=RegExp(`^(?:`+t+`)$`)),t.test(e)},E=function(e,t,n){var r=e.val();return e.filter(t).length&&r!==``?T(r,n):!0},D=function(e,t){return e.length?e[0].attributes[t]!=null:!1};n.ui.validator||(n.ui.validator={rules:{},messages:{},allowSubmit:e.noop,validateOnInit:e.noop});function O(t){var r=n.ui.validator.ruleResolvers||{},i={},a;for(a in r)e.extend(!0,i,r[a].resolve(t));return i}function k(e){return e.replace(/&amp/g,`&amp;`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`)}function A(e){return e=(e+``).split(`.`),e.length>1?e[1].length:0}function j(t){return e.parseHTML?e(e.parseHTML(t)):e(t)}function M(t,r){for(var i=e(),a,s,c=0,l=t.length;c<l;c++)a=t[c],o.test(a.className)&&(s=a.getAttribute(n.attr(`for`)),s===r&&(i=i.add(a)));return i}function N(e,t){return!(!e||typeof e.nodeName!=`string`||e.nodeName!==`LABEL`||typeof e.getAttribute(`for`)!=`string`||typeof t.getAttribute(`id`)!=`string`||e.getAttribute(`for`)!==t.getAttribute(`id`))}var P=({errors:e})=>{let t=`<ul>`;for(var n=0;n<e.length;n+=1)t+=`<li><a data-field="${e[n].field}" href="#">${e[n].message}</a></li>`;return t+=`</ul>`,t},F=r.extend({init:function(i,a){var o=this,s=O(i),c=`[`+n.attr(`validate`)+`!=false]`;a||={},a.rules=e.extend({},n.ui.validator.rules,s.rules,a.rules),a.messages=e.extend({},n.ui.validator.messages,s.messages,a.messages),r.fn.init.call(o,i,a),o._errorTemplate=n.template(o.options.errorTemplate),o._summaryTemplate=n.template(o.options.validationSummary.template||P),o.element.is(b)&&o.element.attr(x,x);let l=o.element.attr(`id`);o._shouldSearchDocument=o.element.is(b)&&l!=t&&e(`:input[form='${l}']`).length>0,o._containerElement=o._shouldSearchDocument?e(document):o.element,o._inputSelector=o._buildSelector(h,c),o._checkboxSelector=o._buildSelector(g,c),o._errors={},o._attachEvents(),o._isValidated=!1,o._validateOnInit()&&o.validate()},events:[S,C,w],options:{name:`Validator`,errorTemplate:({message:e})=>`<span class="k-form-error">${e}</span>`,messages:{required:`{0} is required`,pattern:`{0} is not valid`,min:`{0} should be greater than or equal to {1}`,max:`{0} should be smaller than or equal to {1}`,step:`{0} is not valid`,email:`{0} is not valid email`,url:`{0} is not valid URL`,date:`{0} is not valid date`,dateCompare:`End date should be greater than or equal to the start date`,captcha:`The text you entered doesn't match the image.`},rules:{required:function(e){let t=this._containerElement,n=!e.attr(`name`)&&!e.is(`:checked`),r=e.attr(`name`),i=r&&r.indexOf(`'`)>-1?`"`:`'`,a=e.attr(`name`)&&!t.find(`input[name=`+i+e.attr(`name`)+i+`]:checked`).length,o=e.filter(`[type=checkbox]`).length&&(n||a),s=e.filter(`[type=file]`).parents(d).children(`input`).length,c=e.filter(`[type=radio]`).length&&!t.find(`input[name=`+i+e.attr(`name`)+i+`]:checked`).length,l=e.val();if(s){let t=!1;return e.filter(`[type=file]`).parents(d).children(`input`).each(function(n){e.val()&&(t=!0)}),!(D(e,`required`)&&!t)}return!(D(e,`required`)&&(!l||l===``||l.length===0||o||c))},pattern:function(e){return e.filter(`[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]`).filter(`[pattern]`).length&&e.val()!==``?T(e.val(),e.attr(`pattern`)):!0},min:function(e){return e.filter(_+`,[`+n.attr(`type`)+`=number]`).filter(`[min]`).length&&e.val()!==``?(parseFloat(e.attr(`min`))||0)<=n.parseFloat(e.val()):!0},max:function(e){return e.filter(_+`,[`+n.attr(`type`)+`=number]`).filter(`[max]`).length&&e.val()!==``?(parseFloat(e.attr(`max`))||0)>=n.parseFloat(e.val()):!0},step:function(e){if(e.filter(_+`,[`+n.attr(`type`)+`=number]`).filter(`[step]`).length&&e.val()!==``){var t=parseFloat(e.attr(`min`))||0,r=n.parseFloat(e.attr(`step`))||1,i=parseFloat(e.val()),a=A(r),o;return a?(o=10**a,Math.floor((i-t)*o)%(r*o)/100**a==0):(i-t)%r===0}return!0},email:function(e){return E(e,`[type=email],[`+n.attr(`type`)+`=email]`,p)},url:function(e){if(e.filter(`[type=url],[`+n.attr(`type`)+`=url]`).length&&e.val()!==``)try{let t=new URL(e.val());return m.includes(t.protocol)}catch{return!1}return!0},date:function(e){return e.filter(`[type^=date],[`+n.attr(`type`)+`=date]`).length&&e.val()!==``?n.parseDate(e.val(),e.attr(n.attr(`format`)))!==null:!0},captcha:function(e){if(e.filter(`[`+n.attr(`role`)+`=captcha]`).length){var t=this,r=n.widgetInstance(e),i=function(e){return e!=null};if(!e.data(`captcha_validating`)&&!i(r.isValid())&&r.getCaptchaId()&&(e.data(`captcha_validating`,!0),t._validating=!0,r.validate().done(function(){t._validating=!1,t._checkElement(e)}).fail(function(e){t._validating=!1,e.error&&e.error===`handler_not_defined`&&window.console.warn(`Captcha's validationHandler is not defined! You should either define a proper validation endpoint or declare a callback function to ensure the required behavior.`)})),i(r.isValid()))return e.removeData(`captcha_validating`),r.isValid()}return!0}},validateOnBlur:!0,validationSummary:!1},_buildSelector:function(e,t){if(!this._shouldSearchDocument)return e+t;let n=this.element.attr(`id`);return`#${n} `+e+t+`,[form="${n}"]`},_allowSubmit:function(){return n.ui.validator.allowSubmit(this.element,this.errors())},_validateOnInit:function(){return n.ui.validator.validateOnInit(this.element)},destroy:function(){r.fn.destroy.call(this),this.element.off(i),this.validationSummary&&=(this.validationSummary.off(i),null)},value:function(){return this._isValidated?this.errors().length===0:!1},_submit:function(e){return!this.validate()&&!this._allowSubmit()||this._validating?(e.stopPropagation(),e.stopImmediatePropagation(),e.preventDefault(),!1):!0},_checkElement:function(e){var t=this.value();this.validateInput(e),this.value()!==t&&this.trigger(C)},_attachEvents:function(){let t=this,n=t._containerElement;t.element.is(b)&&t.element.on(`submit`+i,t._submit.bind(t)),t.options.validateOnBlur&&(n.is(h)?(n.on(v+i,function(){t._checkElement(t.element)}),n.is(g)&&n.on(`click`+i,function(){t._checkElement(t.element)})):(n.on(v+i,t._inputSelector,function(){t._checkElement(e(this))}),n.on(`click`+i,t._checkboxSelector,function(){t._checkElement(e(this))})))},validate:function(){let t,n,r=!1,i,a=this._containerElement,o=this.value();if(this._errors={},this.element.is(h))r=this.validateInput(this.element);else{let o=!1;for(t=a.find(this._inputSelector),a.find(d).each(function(){let n=e(e(this).parents(`.k-upload`)[0]),r=e(this).find(`input:hidden[type='file']`).first();r.length&&n.length&&!n.hasClass(`k-disabled`)&&Array.prototype.push.call(t,r[0])}),n=0,i=t.length;n<i;n++)this.validateInput(t.eq(n))||(o=!0);r=!o}return this.options.validationSummary&&!o&&this.showValidationSummary(),this.trigger(S,{valid:r,errors:this.errors()}),o!==r&&this.trigger(C),r},validateInput:function(t){t=e(t),n.isEmpty(t.closest(`.k-otp`))||(t=t.closest(`.k-otp`).find(`input[data-role='otpinput']`)),this._isValidated=!0;let r=this,i=r._errorTemplate,o=r._checkValidity(t),l=o.valid;``+a;let d=t.attr(y)||``,p=r._findMessageContainer(d).add(t.next(`.k-invalid-msg`).filter(function(){let t=r._shouldSearchDocument?e(document):e(this);return t.filter(`[`+n.attr(`for`)+`]`).length?t.attr(n.attr(`for`))===d:!0})).addClass(`k-hidden`),m=l?``:r._extractMessage(t,o.key),h=l?``:j(i({message:k(m),field:d})),g=!t.attr(f),_=t.is(`.k-input-inner`),v=t.parent(`.k-input`),b;if(t.removeAttr(f),t.hasClass(`k-hidden`)&&(t.attr(`data-role`)==`otpinput`||t.attr(`data-role`)==`upload`)&&(b=n.widgetInstance(t)),t.hasClass(`k-hidden`)&&t.attr(`data-role`)==`signature`&&(b=n.widgetInstance(t.closest(`.k-signature`))),t.is(`[type=radio]`)&&(b=n.widgetInstance(t.closest(`.k-radio-list`))),t.is(`[type=checkbox]`)&&(b=n.widgetInstance(t.closest(`.k-checkbox-list`))),!l&&!t.data(`captcha_validating`)){r._errors[d]=m;let e=p.attr(`id`);if(r._decorateMessageContainer(h,d),e&&h.attr(`id`,e),p.length!==0)p.replaceWith(h);else{b||=n.widgetInstance(t);let e=t.parent().get(0),r=t.next().get(0),i=t.prev().get(0);!b&&t.is(`[type=radio]`)&&(b=n.widgetInstance(t.closest(`.k-radio-list`))),!b&&t.is(`[type=checkbox]`)&&(b=n.widgetInstance(t.closest(`.k-checkbox-list`))),b&&b.wrapper&&(b.element!==b.wrapper||[`Signature`,`RadioGroup`,`CheckBoxGroup`].indexOf(b.options.name)>-1)?h.insertAfter(b.wrapper):e&&e.nodeName===`LABEL`?h.insertAfter(e):r&&N(r,t[0])?h.insertAfter(r):i&&N(i,t[0])?h.insertAfter(t):_&&v.length?h.insertAfter(v):h.insertAfter(t)}h.removeClass(`k-hidden`),t.attr(f,!0)}else delete r._errors[d];if(g!==l&&this.trigger(w,{valid:l,input:t,error:m,field:d}),b=b&&b.options.name==`Signature`?b:n.widgetInstance(t),(!b||!(b._inputWrapper||b.wrapper)||t.is(`[type=checkbox]`)||t.is(`[type=radio]`))&&(t.toggleClass(s,!l),t.toggleClass(c,l)),b){let e=b.options.name,n=b._inputWrapper||b.wrapper,i=b._inputLabel;e==`OTPInput`?l?(b._removeInvalidState.bind(r),b._removeInvalidState(n,!0)):(b._addInvalidState.bind(r),b._addInvalidState(n,!0)):n&&!(t.is(`[type=checkbox]`)||t.is(`[type=radio]`))&&(n.toggleClass(s,!l),n.toggleClass(c,l)),i&&i.toggleClass(u,!l)}if(g!==l){let e=h?h.attr(`id`):p.attr(`id`);r._associateMessageContainer(t,e),this.options.validationSummary&&this.options.validateOnBlur&&this.showValidationSummary()}return l},hideMessages:function(){let e=this,t=`.`+a,n=e._containerElement;e._disassociateMessageContainers(),n.is(h)?n.next(t).addClass(`k-hidden`):n.find(t).addClass(`k-hidden`)},reset:function(){let e=this,t=e._containerElement,n=t.find(`.`+s),r=t.find(`.`+u);e._errors=[],e.hideMessages(),e.hideValidationSummary(),n.removeAttr(f),n.removeClass(s),r.removeClass(u)},_findMessageContainer:function(t){let r=n.ui.validator.messageLocators,i,a=e();for(let e=0,n=this.element.length;e<n;e++){let n=this._shouldSearchDocument?document:this.element[e];a=a.add(M(n.getElementsByTagName(`*`),t))}for(i in r)a=a.add(r[i].locate(this._containerElement,t));return a},_decorateMessageContainer:function(e,t){var r=n.ui.validator.messageLocators,i;for(i in e.addClass(a).attr(n.attr(`for`),t||``),e.attr(`id`)||e.attr(`id`,t+`-error`),r)r[i].decorate(e,t)},_extractMessage:function(e,t){var r=this.options.messages[t],i=e.attr(y),a;n.ui.Validator.prototype.options.messages[t]||(a=n.isFunction(r)?r(e):r),r=n.isFunction(r)?r(e):r;let o=e.parent().closest(`[name='`+i+`']`),s=o.length?o:e;return n.format(s.attr(n.attr(t+`-msg`))||s.attr(`validationMessage`)||a||r||s.attr(`title`)||``,i,s.attr(t)||e.attr(n.attr(t)))},_checkValidity:function(e){var t=this.options.rules,n;for(n in t)if(!t[n].call(this,e))return{valid:!1,key:n};return{valid:!0}},errors:function(){var e=[],t=this._errors,n;for(n in t)e.push(t[n]);return e},setOptions:function(e){e.validationSummary&&this.hideValidationSummary(),n.deepExtend(this.options,e),this.destroy(),this.init(this.element,this.options),this._setEvents(this.options)},_getInputNames:function(){let t=this,n=this._containerElement.find(t._inputSelector),r=[],i=[];for(let t=0,a=n.length;t<a;t++){let a=e(n[t]);D(a,y)&&(r.indexOf(a.attr(y))===-1||a.closest(`.k-checkbox-list`).length===0&&a.closest(`.k-radio-list`).length===0)&&(a.parents(`.k-checkbox-wrap`).length?(i.push(a.attr(y)),r.push(a.attr(y))):i.includes(a.attr(y))||r.push(a.attr(y)))}return r},_associateMessageContainer:function(e,t){var r=n.getWidgetFocusableElement(e);!r||!t||n.toggleAttribute(r,`aria-describedby`,t)},_disassociateMessageContainers:function(){for(var t=this,n=t.element.find(`.`+s).addBack(),r,i,o=0;o<n.length;o+=1)r=e(n[o]),r.is(`input`)&&(i=t._findMessageContainer(r.attr(y)).add(r.next(`.`+a)).attr(`id`),t._associateMessageContainer(r,i))},_errorsByName:function(){for(var e=this,t=e._getInputNames(),n=[],r=0;r<t.length;r+=1){var i=t[r];e._errors[i]&&n.push({field:i,message:e._errors[i]})}return n},_renderSummary:function(){var t=this,n=this.options.validationSummary,r=this.element.prev(),a=n.container?e(n.container):r&&r.hasClass(l)?r:e(`<div />`).insertBefore(t.element);return a.addClass([l,`k-messagebox k-messagebox-error`].join(` `)),a.attr(`role`,`alert`),a.on(`click`+i,t._summaryClick.bind(t)),a},_summaryClick:function(t){t.preventDefault();var r=this,i=e(t.target),a=r.element.find(`[name='`+i.data(`field`)+`']`),o;a.length&&(o=n.getWidgetFocusableElement(a),o&&o.trigger(`focus`))},showValidationSummary:function(){var e=this,t=e.validationSummary,n=e._errorsByName(),r;t||=e.validationSummary=e._renderSummary(),r=j(e._summaryTemplate({errors:n})),t.html(r),t.toggleClass(`k-hidden`,!n.length)},hideValidationSummary:function(){var e=this.validationSummary;e&&e.addClass(`k-hidden`)}});n.ui.plugin(F)})(window.kendo.jQuery);var r=kendo;e.__meta__=n,e.default=r}); //# sourceMappingURL=kendo.validator.min.js.map