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.8 kB
!function(e){"function"==typeof define&&define.amd?define(["kendo.core.min","kendo.slider.min","kendo.textbox.min","kendo.skeletoncontainer.min","kendo.icons.min"],e):e()}((function(){var e,t,a,n,o,i,r,s,l,d,u,c,p;e=window.kendo.jQuery,t=window.kendo,a=t.ui.Widget,n=e.extend,o=e.ajax,i=t.isFunction,r=".kendoCaptcha",s="click",l="change",d="requestStart",u="requestEnd",c="error",p=a.extend({init:function(e,n){var o=this;a.fn.init.call(o,e,n),o._captchaField=o.options.dataCaptchaField,o._valueField=o.element.attr("name")||"captcha",o._captchaIdField=o.options.dataCaptchaIdField,o._wrapper(),o._idInput(),o._captchaImage(),(o.options.audioButton||o.options.resetButton)&&o._buttons(),o.options.captcha&&o.options.captchaId||o._resetHandler(),o.options.validateOnBlur&&o.element.on("blur"+r,(function(){o._validationHandler()})),o.element.on(l+r,(function(e){delete o._isValid,o.trigger(l,{value:o.element.val(),originalEvent:e})})),t.notify(o)},events:[l,d,u,c],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,n="<div class='"+a.wrapper+"'><div class='"+a.inputWrapper+"'></div></div>",o="<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().data("kendoTextBox"),t._inputWrapper=t.textbox.wrapper,t.wrapper=t._inputWrapper.wrap(n).parent().parent(),t.wrapper[0].style.cssText=i,t.imageWrapper=e(o),t.wrapper.prepend(t.imageWrapper)},_captchaImage:function(){var t=this,a=t.options,n=a.messages,o=p.styles;t.captchaImage=e('<div class="'+o.captchaImage+'"><img alt="'+n.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(c,{type:"image",originalEvent:t})}))},_idInput:function(){var a=this,n=a.options,o=a._captchaIdField;a.idInput=e('<input type="hidden" name="'+o+'" value="'+n.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,n=a.options.messages,o=p.styles;a.resetButton=e('<button type="button" title="'+n.reset+'" class="'+o.button+" "+o.iconButton+'">'+t.ui.icon({icon:o.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,n=a.options.messages,o=p.styles;a.audioButton=e('<button type="button" title="'+n.audio+'" class="'+o.button+" "+o.iconButton+'">'+t.ui.icon({icon:o.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,n=a.options.handler,o=e.Deferred(),i=a._resetCaptcha.bind(a,o);return delete a._isValid,a._toggleSuccessMessage(!1),a._audioEnded(),a._progress(!0),n?(a._callHandler("reset",n,i).done((function(){t&&a.resetButton.trigger("focus")})).fail((function(e){a._progress(!1),o.reject(e)})),o.promise()):(window.console.error("Captcha's handler option is not defined!"),o.reject({msg:"Captcha's handler option is not defined!",error:"handler_not_defined"}),a._progress(!1),o.promise())},_audioHandler:function(){var t=this,a=t.options.audioHandler,n=e.Deferred(),o=t._playAudio.bind(t,n),i={};return i[t._captchaIdField]=t.idInput.val(),a?(t._callHandler("audio",a,o,i).fail(n.reject),n.promise()):(window.console.error("Captcha's audioHandler option is not defined!"),n.reject({msg:"Captcha's audioHandler option is not defined!",error:"handler_not_defined"}),n.promise())},_validationHandler:function(){var t=this,a=t.options.validationHandler,n=e.Deferred(),o=t._validate.bind(t,n),i={};return delete t._isValid,i[t._captchaIdField]=t.idInput.val(),i[t._valueField]=t.element.val(),a?(t._callHandler("validation",a,o,i).fail(n.reject),n.promise()):(window.console.error("Captcha's validationHandler option is not defined!"),n.reject({msg:"Captcha's validationHandler option is not defined!",error:"handler_not_defined"}),n.promise())},_callHandler:function(t,a,r,s){var l,u=this,c=u._error.bind(u,t),p=u._requestEnd.bind(u,t);return i(a)?(a({success:r,data:s}),e.Deferred().promise()):((l="string"==typeof a?{url:a,cache:!1}:n({},a)).success=r,l.data=n({},s,l.data),u.trigger(d,{type:t,data:s})?void 0:o(l).done(p).fail(c))},_requestEnd:function(e,t){this.trigger(u,{type:e,data:t})},_error:function(e,t,a,n){this.trigger(c,{type:e,jqXHR:t,textStatus:a,errorThrown:n})},_resetCaptcha:function(e,t){var a=this,n=t[a._captchaIdField],o=t[a._captchaField];a.idInput.val(n),a.captchaImage.attr("src",o||""),a.captchaImage.off("load"),a.captchaImage.one("load",(function(){a._progress(!1)})),a._attachImageErrorHandler(),e.resolve(t)},_playAudio:function(t,a){var n=this;if(n._canPlayWav()){if(n.audioElement)return;n.audioElement=new Audio(a),n.audioElement.volume=n._audioVolume||n.audioElement.volume,n.options.volumeControl&&e(n.audioElement).on("loadeddata"+r,(function(){n._showVolumeControl(n.audioElement.volume)})),e(n.audioElement).on("ended"+r+" error"+r,n._audioEnded.bind(n,t)),n.audioElement.play()}else if(n._canPlayWithPlugin()){if(n.audioElement)return void n.audioElement.play();n.audioElement=n._createEmbedElement(a),n.wrapper.append(n.audioElement)}},_createEmbedElement:function(e){var t=document.createElement("embed");return t.setAttribute("src",e),t.setAttribute("autostart","true"),t.setAttribute("pluginspage",this._audioPlugin),t.setAttribute("enablejavascript","true"),t.setAttribute("type","audio/wav"),t.setAttribute("tabIndex","-1"),t.style.width="0px",t.style.height="0px",t.style.position="absolute",t.style.top=0,t.style.left=0,t},_showVolumeControl:function(t){var a=this,n=p.styles,o=e('<div class="'+n.volumeControlWrapper+'"></div>');a.volumeControl||(a.volumeControlElm=e("<input />"),a.volumeControlWrapper=o.append(a.volumeControlElm),a.imageWrapper.append(o),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},_canPlayWithPlugin:function(){var e=this;return e._audioPlugin||(e._audioPlugin=e._getPlugin()),e._audioPlugin},_getPlugin:function(){var e=function(e){for(var t=navigator.plugins,a=0;a<t.length;a++)if(-1!==t[a].name.indexOf(e))return!0;return!1},t=function(e){try{return!!new window.ActiveXObject(e)}catch(e){return!1}};return t("QuickTime.QuickTime")||t("QuickTimeCheckObject.QuickTimeCheck")||e("QuickTime Plug-in")?"http://www.apple.com/quicktime/download/":t("WMPlayer.OCX")||e("Windows Media")?"http://www.microsoft.com/Windows/MediaPlayer":void 0},_validate:function(e,t){var a=this;a._isValid=t,a._toggleSuccessMessage(a._isValid),e.resolve(t)},_toggleSuccessMessage:function(t){var a=this,n=(a.element.attr("id")||a.element.attr("name"))+"-success",o=a.options.messages;e(a.successMessage).remove(),a.element.removeAttr("aria-describedby"),t&&(a.successMessage=e('<span id="'+n+'" class="'+p.styles.success+'">'+o.success+"</span>"),a._inputWrapper.after(a.successMessage),a.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' style=\"width: 100%; height: 100%;\"></span>"),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),n(!0,p,{styles:{wrapper:"k-widget 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"}})})); //# sourceMappingURL=kendo.captcha.min.js.map