UNPKG

angularjs-captcha

Version:

BotDetect CAPTCHA AngularJS Module (JavaScript: Angular 1.x)

2 lines 3.77 kB
!function(a){"use strict";function b(){var b={},c={captchaEndpoint:"",captchaEnabled:!0};return{setSettings:function(a){b=a},$get:function(){return a.extend(c,b),c.captchaEndpoint=c.captchaEndpoint.replace(/\/+$/g,""),c}}}function c(a,b,c){return{getScript:function(b){a({method:"GET",url:b}).then(function(a){new Function(a.data)()},function(a){throw new Error(a.data)})},getCaptchaEndpointHandler:function(){var a=c.captchaEndpoint.split("/");return a[a.length-1]},getBackendBaseUrl:function(a){var b=c.captchaEndpoint.lastIndexOf(a);return c.captchaEndpoint.substring(0,b)},changeRelativeToAbsoluteUrls:function(a){var b=this.getCaptchaEndpointHandler(),c=this.getBackendBaseUrl(b);a=a.replace(/<script.*<\/script>/g,"");for(var d,e,f,g=a.match(/(src|href)=\"([^"]+)\"/g),h=a,i=0;i<g.length;i++)d=g[i].slice(0,-1).replace(/src=\"|href=\"/,""),e=new RegExp(".*"+b),f=d.replace(e,c+b),h=h.replace(d,f);return h},loadScriptIncludes:function(a){var d=a.querySelector("#BDC_VCID_"+b.captchaStyleName).value,e=c.captchaEndpoint+"?get=script-include&c="+b.captchaStyleName+"&t="+d+"&cs=200";this.getScript(e)},useUserInputBlurValidation:function(a){return null!==a.getAttribute("correct-captcha")},validateUnsafe:function(b,c){var d=b.userInput;if(0!==d.length)a({method:"GET",url:b.validationUrl,params:{i:d.value}}).then(function(a){var b=a.data;c(b)},function(a){throw new Error(a.data)});else{c(!1)}},getHtml:function(b,d){a({method:"GET",url:c.captchaEndpoint,params:{get:"html",c:b}}).then(function(a){var b=a.data;d(b)},function(a){throw new Error(a.data)})}}}function d(a,b,c){return{restrict:"E",link:function(d,e,f){if(b.captchaEnabled){var g=function(){var a;if(a=f.captchastylename)return a;if(a=f.stylename)return a;throw new Error("The captchaStyleName attribute is not found or its value is not set.")}();a.captchaStyleName=g,c.getHtml(g,function(a){a=c.changeRelativeToAbsoluteUrls(a),e.html(a),c.loadScriptIncludes(e[0])})}}}}function e(a,b){return{restrict:"A",require:"ngModel",link:function(c,d,e,f){var g,h,i=f;i.$setValidity("incorrectCaptcha",!1),d.bind("blur",function(){h=d.val(),0!==h.length&&(g=new a,b.validateUnsafe(g,function(a){a?i.$setValidity("incorrectCaptcha",!0):(i.$setValidity("incorrectCaptcha",!1),g.reloadImage())}))})}}}function f(a,b,c){var d=function(){if(void 0===window.botdetect)throw new Error('Can not create Captcha instance, please put "new Captcha()" inside function that will be invoked after form is submitted.');var a=d.getInstance();this.captchaStyleName=b.captchaStyleName,this.captchaId=a.captchaId,this.userInput=a.userInput,this.validationUrl=a.validationUrl};return d.getInstance=function(){return b.captchaStyleName?window.botdetect.getInstanceByStyleName(b.captchaStyleName):null},d.prototype.getCaptchaId=function(){return this.captchaId},d.prototype.getUserEnteredCaptchaCode=function(){return this.userInput.value},d.prototype.validateUnsafe=function(a){var b=this;c.validateUnsafe(this,function(d){a(d),c.useUserInputBlurValidation(b.userInput)||d||b.reloadImage()})},d.prototype.reloadImage=function(){d.getInstance().reloadImage()},d.generateCaptchaMarkup=function(d){b.captchaStyleName=d,c.getHtml(d,function(b){var d=a[0].getElementsByTagName("botdetect-captcha");if(0===d.length)throw new Error("<botdetect-captcha> directive element could not be found.");d[0].innerHTML=b,c.loadScriptIncludes(d[0])})},d}a.module("BotDetectCaptcha",[]).provider("captchaSettings",b).factory("captchaHelper",["$http","$rootScope","captchaSettings",c]).factory("Captcha",["$document","$rootScope","captchaHelper",f]).directive("botdetectCaptcha",["$rootScope","captchaSettings","captchaHelper",d]).directive("correctCaptcha",["Captcha","captchaHelper",e])}(window.angular); //# sourceMappingURL=angularjs-captcha.min.js.map