{"version":3,"sources":["js/newsletter.js"],"names":["CFR","window","$","msgElement","container","find","val","addClass","showLoader","removeClass","hideLoader","executeNewsletterAjax","xhrUrl","form","formData","serialize","prop","nlRequest","ajax","url","type","data","dataType","done","textStatus","jqXHR","remove","showMessage","eventTrack","grecaptcha","reset","fail","errorThrown","always","removeMessage","message","document","createElement","text","prepend","on","e","preventDefault","stopPropagation","label","input","hasClass","siteKey","footerLabel","newsletterId","recaptchaId","render","sitekey","focus","undefined","console","log","response","getResponse","err","email","indexOf","jQuery"],"mappings":"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","file":"newsletter.js","sourcesContent":["/**\n * @file\n * Newsletter subscription js file.\n */\n\n(function(CFR, window, $) {\n 'use strict';\n\n let msgElement = null;\n let container = $('.main-footer__newsletter-email');\n if (container.find('input[name=\"email\"]').val() !== '') {\n container.find('label').addClass('active');\n }\n\n function showLoader() {\n $('.main-footer__loader-hidden').addClass('main-footer__loader').removeClass('main-footer__loader-hidden');\n }\n\n function hideLoader() {\n $('.main-footer__loader').addClass('main-footer__loader-hidden').removeClass('main-footer__loader');\n }\n\n function executeNewsletterAjax() {\n const xhrUrl = 'https://www.cfr.org/newsletters/st_subscribe_email';\n let form = $('[data-footerNewsletterForm]');\n let formData = form.serialize();\n $('[data-footerNewsletterForm] :input').prop(\"disabled\", true);\n showLoader();\n let nlRequest = $.ajax({\n url: xhrUrl,\n type: \"GET\",\n data: formData,\n dataType: \"json\"\n });\n\n // The ajax call executed ok. Recaptcha validation result is inside data object.\n nlRequest.done(function(data, textStatus, jqXHR) {\n if (textStatus === 'success') {\n // Recaptcha ok. Proceed with newsletter submit.\n // console.log('Newsletter OK submitted and registered.');\n // Add code to remove form and show success message.\n form.remove();\n showMessage('success', '');\n // Send GA custom event using Tag Manager DataLayer.\n CFR.eventTrack('tfr-nl-submit', 'Newsletters', '', 'tfr-nl-footer-submit');\n }\n else {\n // The newsletter could not be registered.\n // console.log('The newsletter could not be registered.');\n showMessage('error', 'Please enter a valid email address.');\n grecaptcha.reset();\n return false;\n }\n });\n\n // The ajax call failed to contact CFR submission service.\n nlRequest.fail(function(jqXHR, textStatus, errorThrown) {\n // console.log('Ajax call failed to contact CFR submission service. Please try again.', jqXHR);\n showMessage('error', 'Please enter a valid email address.');\n grecaptcha.reset();\n return false;\n });\n\n nlRequest.always(function() {\n hideLoader();\n $('[data-footerNewsletterForm] :input').prop(\"disabled\", false);\n });\n }\n\n function removeMessage(){\n if (msgElement != null) {\n msgElement.remove();\n }\n }\n\n function showMessage(type, message) {\n removeMessage();\n\n if (type === 'success') {\n $('.main-footer__newsletter-successmsg').addClass('form-success');\n }\n\n if (type === 'error') {\n msgElement = $(document.createElement('div'));\n msgElement.addClass(\"form-error\");\n msgElement.text(message || 'Error signing up to the newsletter.');\n container.prepend(msgElement);\n }\n }\n\n // Show recaptcha widget on click.\n container.on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let label = $(this).find('label');\n let input = $(this).find('input[name=\"email\"]');\n\n if (label.hasClass('active')) {\n return false;\n }\n\n removeMessage();\n\n // Show recaptcha widget if it was not opened yet.\n const siteKey = '6LdVm2YUAAAAALLTS2XVQD5O47VtNJIKQTsrqP9t';\n let footerLabel = $('.main-footer__newsletter-email label');\n if (!footerLabel.hasClass('with-recaptcha-widget') && !footerLabel.hasClass('with-recaptcha-message')) {\n let newsletterId = $('.main-footer input[name=\"newsletter_id\"]').val();\n let recaptchaId = window.grecaptcha.render(newsletterId, {sitekey: siteKey});\n // Position label correctly with recaptcha open.\n footerLabel.addClass('with-recaptcha-widget');\n // Set recaptcha id value into hidden field to make it accessible on submit.\n $('#' + newsletterId + '--recaptcha-id').val(recaptchaId);\n }\n\n label.addClass('active');\n input.focus();\n\n input.on('blur', function () {\n if (!input.val()) {\n label.removeClass('active');\n container.removeClass('invalid');\n }\n });\n });\n\n // Handle newsletter form submit.\n $('[data-footerNewsletterSubmit]').on(\"click\", function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n // Google library defines grecaptcha variable.\n if (grecaptcha === undefined) {\n console.log('Recaptcha not loaded.');\n return false;\n }\n\n let response;\n try {\n response = grecaptcha.getResponse();\n } catch (err) {\n // console.log('No reCAPTCHA clients exist. Please load the widget first clicking on Email Address.');\n showMessage('error', 'Email Address is required.');\n return false;\n }\n\n // If the recaptcha was solved the response should be able to get reached.\n if (!response) {\n // console.log('Could not get recaptcha response');\n showMessage('error', 'Please check reCAPTCHA.');\n grecaptcha.reset();\n return false;\n }\n\n // Check email input.\n let email = $('#edit-email-address');\n if(email.val() === '' || email.val().indexOf(\"@\") === -1) {\n showMessage('error', 'Valid email address is required.');\n grecaptcha.reset();\n return false;\n }\n\n // Proceed with newsletter submission.\n // console.log('Submitting newsletter now ...');\n executeNewsletterAjax(response);\n });\n}(window.CFR = window.CFR || {}, window, jQuery));\n"]}