UNPKG

@progress/kendo-ui

Version:

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

3 lines (2 loc) 10.4 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("kendo.core.js"),require("kendo.slider.js"),require("kendo.textbox.js"),require("kendo.skeletoncontainer.js"),require("kendo.icons.js")):"function"==typeof define&&define.amd?define(["exports","kendo.core.min","kendo.slider","kendo.textbox","kendo.skeletoncontainer","kendo.icons"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Captcha={}))}(this,(function(e){!function(e){var t=window.kendo,a=t.ui.Widget,o=e.extend,n=e.ajax,i=t.isFunction,r=".kendoCaptcha",s="click",d="change",l="requestStart",c="requestEnd",u="error",p=a.extend({init:function(e,o){var n=this;a.fn.init.call(n,e,o),n._captchaField=n.options.dataCaptchaField,n._valueField=n.element.attr("name")||"captcha",n._captchaIdField=n.options.dataCaptchaIdField,n._wrapper(),n._idInput(),n._captchaImage(),(n.options.audioButton||n.options.resetButton)&&n._buttons(),n.options.captcha&&n.options.captchaId||n._resetHandler(),n.options.validateOnBlur&&n.element.on("blur"+r,(function(){n._validationHandler()})),n.element.on(d+r,(function(e){delete n._isValid,n.trigger(d,{value:n.element.val(),originalEvent:e})})),t.notify(n)},events:[d,l,c,u],options:{name:"Captcha",dataCaptchaField:"captcha",dataCaptchaIdField:"captchaId",captchaId:"",captcha:null,handler:null,audioHandler:null,validationHandler:null,validateOnBlur:!1,resetButton:!0,audioButton:!0,volumeControl:!0,messages:{reset:"Reset captcha",audio:"Speak captcha",imageAlt:"Type the Captcha code from the image",success:"Verification successful"}},destroy:function(){var e=this;e.textbox.destroy(),e.resetButton&&e.resetButton.off(r),e.audioButton&&e.audioButton.off(r),e.element.off(r),e._audioEnded(),a.fn.destroy.call(e)},_wrapper:function(){var t=this,a=p.styles,o="<div class='"+a.wrapper+"'><div class='"+a.inputWrapper+"'></div></div>",n="<div class='"+a.imageWrapper+"'></div>",i=t.element[0].style.cssText;t.element.css("width","auto"),t.element.css("height","auto"),t.textbox=t.element.kendoTextBox({clearButton:!0}).data("kendoTextBox"),t._inputWrapper=t.textbox.wrapper,t.wrapper=t._inputWrapper.wrap(o).parent().parent(),t.wrapper[0].style.cssText=i,t.imageWrapper=e(n),t.wrapper.prepend(t.imageWrapper)},_captchaImage:function(){var t=this,a=t.options,o=a.messages,n=p.styles;t.captchaImage=e('<div class="'+n.captchaImage+'"><img alt="'+o.imageAlt+'" src= "'+(a.captcha||"")+'"/></div>').find("img"),t.imageWrapper.append(t.captchaImage.parent()),t._tabindex(t.captchaImage),t._attachImageErrorHandler()},_attachImageErrorHandler:function(){var e=this;e.captchaImage.off("error"),e.captchaImage.one("error",(function(t){e.trigger(u,{type:"image",originalEvent:t})}))},_idInput:function(){var a=this,o=a.options,n=a._captchaIdField;a.idInput=e('<input type="hidden" name="'+n+'" value="'+o.captchaId+'" data-'+t.ns+'stop="true" />'),a._inputWrapper.after(a.idInput)},_buttons:function(){var t=this,a=p.styles;t.buttonsWrapper=e('<div class="'+a.buttonsWrapper+'"></div>'),t.imageWrapper.append(t.buttonsWrapper),t.options.audioButton&&t._audioButton(),t.options.resetButton&&t._resetButton()},_resetButton:function(){var a=this,o=a.options.messages,n=p.styles;a.resetButton=e('<button type="button" title="'+o.reset+'" class="'+n.button+" "+n.iconButton+'">'+t.ui.icon({icon:n.resetIcon,iconClass:"k-button-icon"})+"</button>"),a.buttonsWrapper.append(a.resetButton),a.resetButton.on(s+r,a._resetHandler.bind(a,!0))},_audioButton:function(){var a=this,o=a.options.messages,n=p.styles;a.audioButton=e('<button type="button" title="'+o.audio+'" class="'+n.button+" "+n.iconButton+'">'+t.ui.icon({icon:n.audioIcon,iconClass:"k-button-icon"})+"</button>"),a.buttonsWrapper.append(a.audioButton),a.audioButton.on(s+r,a._audioHandler.bind(a))},_resetHandler:function(t){var a=this,o=a.options.handler,n=e.Deferred(),i=a._resetCaptcha.bind(a,n);return delete a._isValid,a._toggleSuccessMessage(!1),a._audioEnded(),a._progress(!0),o?(a._callHandler("reset",o,i).done((function(){t&&a.resetButton.trigger("focus")})).fail((function(e){a._progress(!1),n.reject(e)})),n.promise()):(window.console.error("Captcha's handler option is not defined!"),n.reject({msg:"Captcha's handler option is not defined!",error:"handler_not_defined"}),a._progress(!1),n.promise())},_audioHandler:function(){var t=this,a=t.options.audioHandler,o=e.Deferred(),n=t._playAudio.bind(t,o),i={};return i[t._captchaIdField]=t.idInput.val(),a?(t._callHandler("audio",a,n,i).fail(o.reject),o.promise()):(window.console.error("Captcha's audioHandler option is not defined!"),o.reject({msg:"Captcha's audioHandler option is not defined!",error:"handler_not_defined"}),o.promise())},_validationHandler:function(){var t=this,a=t.options.validationHandler,o=e.Deferred(),n=t._validate.bind(t,o),i={};return delete t._isValid,i[t._captchaIdField]=t.idInput.val(),i[t._valueField]=t.element.val(),a?(t._callHandler("validation",a,n,i).fail(o.reject),o.promise()):(window.console.error("Captcha's validationHandler option is not defined!"),o.reject({msg:"Captcha's validationHandler option is not defined!",error:"handler_not_defined"}),o.promise())},_callHandler:function(t,a,r,s){var d,c=this,u=c._error.bind(c,t),p=c._requestEnd.bind(c,t);return i(a)?(a({success:r,data:s}),e.Deferred().promise()):((d="string"==typeof a?{url:a,cache:!1}:o({},a)).success=r,d.data=o({},s,d.data),c.trigger(l,{type:t,data:s})?void 0:n(d).done(p).fail(u))},_requestEnd:function(e,t){this.trigger(c,{type:e,data:t})},_error:function(e,t,a,o){this.trigger(u,{type:e,jqXHR:t,textStatus:a,errorThrown:o})},_resetCaptcha:function(e,t){var a=this,o=t[a._captchaIdField],n=t[a._captchaField];a.idInput.val(o),a.captchaImage.attr("src",n||""),a.captchaImage.off("load"),a.captchaImage.one("load",(function(){a._progress(!1)})),a._attachImageErrorHandler(),e.resolve(t)},_playAudio:function(t,a){var o=this;if(o._canPlayWav()){if(o.audioElement)return;o.audioElement=new Audio(a),o.audioElement.volume=o._audioVolume||o.audioElement.volume,o.options.volumeControl&&e(o.audioElement).on("loadeddata"+r,(function(){o._showVolumeControl(o.audioElement.volume)})),e(o.audioElement).on("ended"+r+" error"+r,o._audioEnded.bind(o,t)),o.audioElement.play()}},_showVolumeControl:function(t){var a=this,o=p.styles,n=e('<div class="'+o.volumeControlWrapper+'"></div>');a.volumeControl||(a.volumeControlElm=e("<input />"),a.volumeControlWrapper=n.append(a.volumeControlElm),a.imageWrapper.append(n),a.volumeControlWrapper.css(a._isRtl()?"right":"left",a.wrapper.width()),a.volumeControl=a.volumeControlElm.kendoSlider({min:0,max:1,smallStep:.1,largeStep:.5,orientation:"vertical",showButtons:!1,tickPlacement:"none",value:t,tooltip:{enabled:!1},change:function(e){a._audioVolume=a.audioElement.volume=e.value}}).data("kendoSlider"))},_audioEnded:function(t){var a=this;e(document.activeElement).is("a.k-draghandle")&&a.audioButton.trigger("focus"),a.volumeControl&&(a.volumeControl.destroy(),a.volumeControl.wrapper.remove(),delete a.volumeControl,a.volumeControlElm.remove(),a.volumeControlWrapper.remove(),delete a.volumeControlElm,delete a.volumeControlWrapper),a.audioElement&&a.audioElement.pause(),e(a.audioElement).off(r),e(a.audioElement).remove(),delete a.audioElement,t&&t.resolve&&t.resolve()},_canPlayWav:function(){var e,t=this;return t._canPlayAudio||(e=new Audio,t._canPlayAudio=""!==e.canPlayType("audio/wav").replace(/no/gi,"")),t._canPlayAudio},_validate:function(e,t){var a=this;a._isValid=t,a._toggleSuccessMessage(a._isValid),e.resolve(t)},_toggleSuccessMessage:function(a){var o=this,n=(o.element.attr("id")||o.element.attr("name"))+"-success",i=o.options.messages;e(o.successMessage).remove(),o.element.removeAttr("aria-describedby"),a&&(o.successMessage=e('<span id="'+n+'" class="'+p.styles.success+'">'+t.htmlEncode(i.success)+"</span>"),o._inputWrapper.after(o.successMessage),o.element.attr("aria-describedby",n))},_toggleButtons:function(e){var t=this;t.resetButton&&t.resetButton.prop("disabled",!e),t.audioButton&&t.audioButton.prop("disabled",!e)},_progress:function(e){var t=this;t.wrapper.toggleClass(p.styles.loading,e),t._inputWrapper.toggleClass(p.styles.disabled,e),t._toggleButtons(!e),t._toggleSkeleton(e)},_toggleSkeleton:function(t){var a=this;a.skeleton&&a.skeleton.remove(),t&&(a.skeleton=e("<span class='k-skeleton k-skeleton-rect k-skeleton-pulse'></span>").css({width:"100%",height:"100%"}),a.captchaImage.before(a.skeleton))},_isRtl:function(){return t.support.isRtl(this.wrapper)},value:function(){return this.element.val()},getCaptchaId:function(){return this.idInput.val()},toJSON:function(){var e=this,t={};return t[e._valueField]=e.value(),t[e._captchaIdField]=e.getCaptchaId(),t},validate:function(){return this._validationHandler()},isValid:function(){return this._isValid},enable:function(e){var t=this;e=!1!==e,t._toggleButtons(e),t.textbox.enable(e),e?(t.captchaImage.removeAttr("tabIndex"),t._tabindex(t.captchaImage)):t.captchaImage.attr("tabIndex","-1"),t.captchaImage.toggleClass(p.styles.disabled,!e),t.wrapper.toggleClass(p.styles.disabled,!e)},readonly:function(e){var t=this;e=!1!==e,t.resetButton&&t.resetButton.prop("disabled",e),t.textbox.readonly(e)},speak:function(){return this._audioHandler()},reset:function(){return this._resetHandler()}});t.ui.plugin(p),o(!0,p,{styles:{wrapper:"k-captcha",textbox:"k-textbox",button:"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base",buttonIcon:"k-button-icon",iconButton:"k-icon-button",resetIcon:"arrow-rotate-cw",audioIcon:"volume-up",disabled:"k-disabled",inputWrapper:"k-captcha-input k-vstack",imageWrapper:"k-captcha-image-wrap k-hstack",captchaImage:"k-captcha-image",buttonsWrapper:"k-captcha-image-controls k-vstack",volumeControlWrapper:"k-captcha-volume-control k-vstack k-pos-absolute",hidden:"k-hidden",success:"k-captcha-validation-message k-text-success",loading:"k-captcha-loading"}})}(window.kendo.jQuery);var t=kendo;e.__meta__={id:"captcha",name:"Captcha",category:"web",description:"The Captcha widget displays captcha validation image and an input so that user case be validated against captcha value.",depends:["core","slider","textbox","skeletoncontainer","icons"]},e.default=t,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=kendo.captcha.min.js.map