UNPKG

@progress/kendo-ui

Version:

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

3 lines 14.1 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=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])`,_=`name`,v=`form`,y=`novalidate`,b=`validate`,x=`change`,S=`validateInput`,C=function(e,t){return typeof t==`string`&&(t=RegExp(`^(?:`+t+`)$`)),t.test(e)},w=function(e,t,n){var r=e.val();return e.filter(t).length&&r!==``?C(r,n):!0},T=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 E(t){var r=n.ui.validator.ruleResolvers||{},i={},a;for(a in r)e.extend(!0,i,r[a].resolve(t));return i}function D(e){return e.replace(/&amp/g,`&amp;`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`)}function O(e){return e=(e+``).split(`.`),e.length>1?e[1].length:0}function k(t){return e.parseHTML?e(e.parseHTML(t)):e(t)}function A(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 j(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 M=({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},N=r.extend({init:function(i,a){var o=this,s=E(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||M),o.element.is(v)&&o.element.attr(y,y);let l=o.element.attr(`id`);o._shouldSearchDocument=o.element.is(v)&&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(),r.fn.endInit.call(o)},events:[b,x,S],options:{name:`Validator`,errorTemplate:({message:e})=>`<span class="k-form-error">${e}</span>`,messageBoxThemeColor:`error`,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)}),!(T(e,`required`)&&!t)}return!(T(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()!==``?C(e.val(),e.attr(`pattern`)):!0},min:function(e){return e.filter(`[type=number],[type=range],[`+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(`[type=number],[type=range],[`+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(`[type=number],[type=range],[`+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=O(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 w(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(x)},_attachEvents:function(){let t=this,n=t._containerElement;t.element.is(v)&&t.element.on(`submit.kendoValidator`,t._submit.bind(t)),t.options.validateOnBlur&&(n.is(h)?(n.on(`blur.kendoValidator`,function(){t._checkElement(t.element)}),n.is(g)&&n.on(`click.kendoValidator`,function(){t._checkElement(t.element)})):(n.on(`blur.kendoValidator`,t._inputSelector,function(){t._checkElement(e(this))}),n.on(`click.kendoValidator`,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(b,{valid:r,errors:this.errors()}),o!==r&&this.trigger(x),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,a=r._checkValidity(t),o=a.valid,l=t.attr(_)||``,d=r._findMessageContainer(l).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`))===l})).addClass(`k-hidden`),p=o?``:r._extractMessage(t,a.key),m=o?``:k(i({message:D(p),field:l})),h=!t.attr(f),g=t.is(`.k-input-inner`),v=t.parent(`.k-input`),y;if(t.removeAttr(f),t.hasClass(`k-hidden`)&&(t.attr(`data-role`)==`otpinput`||t.attr(`data-role`)==`upload`)&&(y=n.widgetInstance(t)),t.hasClass(`k-hidden`)&&t.attr(`data-role`)==`signature`&&(y=n.widgetInstance(t.closest(`.k-signature`))),t.is(`[type=radio]`)&&(y=n.widgetInstance(t.closest(`.k-radio-list`))),t.is(`[type=checkbox]`)&&(y=n.widgetInstance(t.closest(`.k-checkbox-list`))),!o&&!t.data(`captcha_validating`)){r._errors[l]=p;let e=d.attr(`id`);if(r._decorateMessageContainer(m,l),e&&m.attr(`id`,e),d.length!==0)d.replaceWith(m);else{y||=n.widgetInstance(t);let e=t.parent().get(0),r=t.next().get(0),i=t.prev().get(0);!y&&t.is(`[type=radio]`)&&(y=n.widgetInstance(t.closest(`.k-radio-list`))),!y&&t.is(`[type=checkbox]`)&&(y=n.widgetInstance(t.closest(`.k-checkbox-list`))),y&&y.wrapper&&(y.element!==y.wrapper||[`Signature`,`RadioGroup`,`CheckBoxGroup`].indexOf(y.options.name)>-1)?m.insertAfter(y.wrapper):e&&e.nodeName===`LABEL`?m.insertAfter(e):r&&j(r,t[0])?m.insertAfter(r):i&&j(i,t[0])?m.insertAfter(t):g&&v.length?m.insertAfter(v):m.insertAfter(t)}m.removeClass(`k-hidden`),t.attr(f,!0)}else delete r._errors[l];if(h!==o&&this.trigger(S,{valid:o,input:t,error:p,field:l}),y=y&&y.options.name==`Signature`?y:n.widgetInstance(t),(!y||!(y._inputWrapper||y.wrapper)||t.is(`[type=checkbox]`)||t.is(`[type=radio]`))&&(t.toggleClass(s,!o),t.toggleClass(c,o)),y){let e=y.options.name,n=y._inputWrapper||y.wrapper,i=y._inputLabel;e==`OTPInput`?o?(y._removeInvalidState.bind(r),y._removeInvalidState(n,!0)):(y._addInvalidState.bind(r),y._addInvalidState(n,!0)):n&&!(t.is(`[type=checkbox]`)||t.is(`[type=radio]`))&&(n.toggleClass(s,!o),n.toggleClass(c,o)),i&&i.toggleClass(u,!o)}if(h!==o){let e=m?m.attr(`id`):d.attr(`id`);r._associateMessageContainer(t,e),this.options.validationSummary&&this.options.validateOnBlur&&this.showValidationSummary()}return o},hideMessages:function(){let e=this,t=`.k-invalid-msg`,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(`.k-invalid`),r=t.find(`.k-text-error`);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(A(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(_),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]);T(a,_)&&(r.indexOf(a.attr(_))===-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(_)),r.push(a.attr(_))):i.includes(a.attr(_))||r.push(a.attr(_)))}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(`.k-invalid`).addBack(),r,i,a=0;a<n.length;a+=1)r=e(n[a]),r.is(`input`)&&(i=t._findMessageContainer(r.attr(_)).add(r.next(`.k-invalid-msg`)).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(),i=n.container?e(n.container):r&&r.hasClass(l)?r:e(`<div />`).insertBefore(t.element);i.addClass([l,`k-messagebox`].join(` `));let a=t.options.messageBoxThemeColor;return a&&i.addClass(`k-messagebox-`+a),i.attr(`role`,`alert`),i.on(`click.kendoValidator`,t._summaryClick.bind(t)),i},_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=k(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(N)})(window.kendo.jQuery);var r=kendo;e.__meta__=n,e.default=r}); //# sourceMappingURL=kendo.validator.min.js.map