An error has occurred

{{terminalError}}

const _newsletterName = $('#newsletterName').val(); const _emailRegEx = /(^$)|(^(([^<>()[\]\\.,;:\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,}))$)/; let _siteCode = ''; let _hostUrl = ''; let _domain = ''; let _listCode = ''; let customVariablesFromEvent = ''; // event handlers const handleFieldFocus = (e) => { $(e.currentTarget).parent().addClass('has-focus'); }; const handleFieldKeyPresss = (e) => { const field = $(e.currentTarget); const fieldParent = field.parent(); const keyCode = e.keyCode || e.which; const keyValue = [8,9,46].indexOf(keyCode) === -1 ? String.fromCharCode(keyCode) : ''; const newValue = `${field.val()}${keyValue}`.trim(); fieldParent.removeClass('has-error'); if (field.attr('id') === 'email' && newValue && _emailRegEx.test(newValue)) { $('form').addClass('form-valid'); $('#submitForm').removeAttr('disabled'); } else { $('form').removeClass('form-valid'); $('#submitForm').attr('disabled', 'disabled'); } }; const handleFieldKeyDown = (e) => { const field = $(e.currentTarget); const keyCode = e.keyCode || e.which; // Remove the error indicator when the user presses the backspace or delete keys if (field.val().length && (keyCode === 8 || keyCode === 46)) { $(e.currentTarget).parent().removeClass('has-error'); setTimeout(() => { handleFieldKeyPresss(e); }, 1); } }; const handleFieldBlur = (e) => { const field = $(e.currentTarget) const fieldParent = field.parent(); field.parent().removeClass('has-focus'); if (field.val().trim()) { fieldParent.addClass('has-value'); } else { fieldParent.removeClass('has-value'); } validateForm(); }; const handleFormSubmit = async (e) => { const form = $(e.currentTarget); const email = form.find('#email').val(); const submitForm = form.find('#submitForm'); const loadWrapper = $('.loader-wrapper'); const payload = { request: { email, newsletters: [ { listCode: _listCode, isSubscribed: true } ] } }; submitForm.css('opacity', 0.5); loadWrapper.fadeIn(); const url = `https://user.${_domain}/${_siteCode}-GUP-NWSLTRMNGMNT/user/newsletters/`; const response = await fetch(url, {method: 'POST', body: JSON.stringify(payload)}); const userNewsletterResponse = await response.json(); const { iframeId, displayMode} = window.TPParam.params; loadWrapper.fadeOut('fast'); $('form').hide(); if (userNewsletterResponse && userNewsletterResponse.meta && userNewsletterResponse.meta.status === 200) { $('#successWrapper').show(); $('#viewAllNewsletters').attr('href', `https://profile.${_domain}/newsletters/manage/?email=${email}`); $('#signedUpBottomMessage').show(); // Notify the parent that the user has signed up to the newsletter so it can flag the user as signed up. window.parent.postMessage(`{"sender":"${iframeId}","displayMode":"${displayMode}","recipient":"opener","event":"customEvent","params":{"eventName":"tracking","params":{"category":"newsletter","action":"signup","label":"success","type":"newsletter-signup","moduleName":"newsletter-modal","clientAction":"newsletterAnon|signup"}}}`, _hostUrl); } else { $('#submitErrorMessage').show(); window.parent.postMessage(`{"sender":"${iframeId}","displayMode":"${displayMode}","recipient":"opener","event":"customEvent","params":{"eventName":"tracking","params":{"category":"newsletter","action":"signup","label":"fail: ${userNewsletterResponse.meta.message}","type":"newsletter-signup","moduleName":"newsletter-modal","clientAction":"newsletterAnon|signup"}}}`, _hostUrl); } }; // validators const validateField = (fieldSelector, errorMessageSelector, errorMessge, regExValidator, regValidatorErrorMessage) => { const field = $(fieldSelector); if (field.val()) { if (regExValidator && !regExValidator.test(field.val())) { // field value failed regular expression validation field.parent().addClass('has-error'); $(errorMessageSelector + ' div').html(regValidatorErrorMessage || errorMessge); return false; } // field value is valid field.parent().removeClass('has-error'); return true; } // field is invalid field.parent().addClass('has-error'); $(errorMessageSelector + ' div').html(errorMessge); return false; } const validateForm = () => { const emailValid = validateField('#email', '#emailErrorMessage', 'Email required', _emailRegEx, 'Please enter a valid email address'); if (emailValid) { $('form').addClass('form-valid'); $('#submitForm').removeAttr('disabled'); } else { $('form').removeClass('form-valid'); $('#submitForm').attr('disabled', 'disabled'); } }; // fetch data const fetchNewsletters = async() => { let userNewsletters, userNewslettersError; try { if (_domain && _siteCode) { const url = `https://user.${_domain}/${_siteCode}-GUP-NWSLTRMNGMNT/user/newsletters/`; const response = await fetch(url); const userNewsletterResponse = await response.json(); if (userNewsletterResponse && userNewsletterResponse.meta && userNewsletterResponse.meta.status === 200) { userNewsletters = userNewsletterResponse.response.newsletters; } else { userNewslettersError = Error('The user was not found or not authorized in current context'); } } } catch (error) { console.error(`newsletter error: ${error}`); userNewslettersError = error; } return [userNewsletters, userNewslettersError]; }; const loadNewsletterInfo = async () => { const to = setTimeout(() => { $('.loader-wrapper').fadeIn(); }, 1000); const [newsletters, err] = await fetchNewsletters(); clearTimeout(to); $('.loader-wrapper').fadeOut('fast'); if (!err) { const newsletter = newsletters.find(nl => nl.newsletterName.toLowerCase().indexOf(_newsletterName.toLowerCase()) > -1); _listCode = newsletter && newsletter.listCode; return newsletter.isSubscribed; } return false; }; // initialize const initialize = async () => { const customVariables = window.TPParam.params.customVariables ? JSON.parse(window.TPParam.params.customVariables) : JSON.parse(customVariablesFromEvent); const { iframeId, displayMode } = window.TPParam.params; const hostUrl = new URL(customVariables.hostUrl); _domain = hostUrl.hostname.substring(hostUrl.hostname.lastIndexOf(".", hostUrl.hostname.lastIndexOf(".") - 1) + 1); _hostUrl = customVariables.hostUrl; _siteCode = customVariables.siteCode; if (_domain && _siteCode) { const isSubscribedToNewsletter = await loadNewsletterInfo(); //trigger the modal open custom event window.parent.postMessage(`{"sender":"${iframeId}","displayMode":"${displayMode}","recipient":"opener","event":"customEvent","params":{"eventName":"tracking","params":{"category":"newsletter","action":"impression","moduleName":"newsletter-modal","clientAction":"newsletterAnon|modalOpen"}}}`, _hostUrl); if (!_listCode) { // close the modal if the newsletter with _newsletterName was not found $('.modal-close').click(); return; } if (isSubscribedToNewsletter) { // show already signed up message $('#nowSignedUp').hide(); $('#alreadySignedUp').show(); $('#alreadySignedUpBottomMessage').fadeIn(); $('#createYourAccountLink').attr('href', `https://login.${_domain}/${_siteCode}-GUP/authenticate?success-url=currenturl`); } else { // Show the signup form $('#email').focus(handleFieldFocus).keydown(handleFieldKeyDown).keypress(handleFieldKeyPresss).blur(handleFieldBlur); $('form').submit(handleFormSubmit).fadeIn(); } } else { $('.modal-close').click(); } }; (() => { if (window.TPParam.params.customVariables) { initialize(); } else { // Before we can initialize we have to wait for the setupCustomVariables event to fire so that window.TPParam.params.customVariables is defined const handleWindowEvent = async (e) => { if (e.data && typeof(e.data) === 'string' && e.data.indexOf('{') === 0) { const data = JSON.parse(e.data); if (data.sender === window.TPParam.params.iframeId && data.event === 'setupCustomVariables') { window.removeEventListener('message', handleWindowEvent); customVariablesFromEvent = data.params; initialize(); } } }; window.addEventListener('message', handleWindowEvent); } })();