angular.module('VTO').directive('apsisSubscribe', ['settings', '$http', 'reCaptcha', 'notifier', function (settings, $http, reCaptcha, notifier) { return { restrict: 'A', scope: { mailinglistId: '@', recaptchaKey: '@' }, link: function (scope, element, attrs) { reCaptcha.render("apsis", element.find(".reCaptcha")[0], scope.recaptchaKey, {}); var $expand = element.find(".subscribe-expansion"); var $input = element.find("input"); var $button = element.find("button"); $input .focus(function () { $expand.show().attr("aria-hidden", "false"); }); /*.blur(function () { //This causes a focus trap. When user presses tab and email is empty the captcha gains focus but is then hidden if ($input.val().length == 0) { $expand.hide().attr("aria-hidden", "true"); } });*/ $button.click(function () { $(this).addClass("loading"); scope.$apply(function () { var email = $input.val(); var rx = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (rx.test(email)) { reCaptcha.verify("apsis").then( function (token) { $http.post('/umbraco/surface/apsis/subscribe', { mailingListId: scope.mailinglistId, email: email, recaptchaToken: token }).then( function (response) { if (response.data.Code == 1) { $input.val(""); $expand.hide().attr("aria-hidden", "true"); reCaptcha.reset(); $button.removeClass("loading"); //Show message notifier.success(Translate.Newsletter.SubscribeOk); } }, function () { notifier.error(Translate.Newsletter.SubscribeError); } ); }, function () { notifier.warning(Translate.RecaptchaWarning); $button.removeClass("loading"); } ); } else { notifier.warning("Felaktig epostadress"); $button.removeClass("loading"); } }); }); } }; }]);