{"version":3,"file":"jwsdw-raffle.js","sources":["../../../../../../../temp/ngAnnotate/assets/jwsdw-raffle.js"],"sourcesContent":["'use strict';\r\n\r\n(function (window, $) {\r\n const $window = $(window);\r\n const $rafflePageWrapper = $('.jwsdw-raffle-wrapper');\r\n const $continueButtons = $('.jwsdw-continue-button');\r\n const $raffleForm = $('.jwsdw-raffleForm');\r\n const mobileNavbarHeight = 64;\r\n\r\n /**\r\n * @description Method to scroll to the top of an element.\r\n * @param {jQuery} element jQuery element for which offset.top defines the scroll position\r\n * @param {number} offset - Optional offset parameter.\r\n * @returns {undefined}\r\n */\r\n function scrollTo(element, offset) {\r\n offset = offset || 0;\r\n $('html, body').animate({'scrollTop': element.offset().top + offset});\r\n }\r\n\r\n /**\r\n * @description Function used to append csrf token and competition ID to request payload.\r\n * @param {jQuery} $form - A form wrapped in a jQuery object.\r\n * @returns {string} serialized form data.\r\n */\r\n function contstructPayload($form) {\r\n return `${$form.serialize()}&${window.jwsdwSettings.csrfTokenName}=${window.jwsdwSettings.csrfTokenValue}&competitionId=${window.jwsdwCompetitionConfigs.competitionID}`;\r\n }\r\n\r\n /**\r\n * @description Function to dispatch raffle submission custom event.\r\n * @param {jQuery} $form - The raffle form that was submitted\r\n * @param {Object} data - Response data from the server.\r\n * @returns {undefined}\r\n */\r\n function afterFormSubmit($form, data) {\r\n $form.find('button[type=submit]').spinner().stop();\r\n\r\n $form[0].dispatchEvent(new CustomEvent('raffle:submitted', {\r\n 'detail': data && data.responseJSON\r\n }));\r\n }\r\n\r\n /**\r\n * @description Form submission handler.\r\n * @param {Event} e - A form submission event.\r\n * @returns {undefined}\r\n */\r\n function submitForm(e) {\r\n e.preventDefault();\r\n\r\n const $form = $(this);\r\n if (!$form.valid()) {\r\n return;\r\n }\r\n\r\n const action = $form.prop('action');\r\n const method = $form.prop('method');\r\n const payload = contstructPayload($form);\r\n\r\n $form.find('button[type=submit]').spinner().start();\r\n\r\n $.ajax({\r\n 'url': action,\r\n 'type': method,\r\n 'data': payload,\r\n 'dataType': 'json',\r\n 'success': (data) => {\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n window.dataLayer.push({\r\n 'event': 'ce.misc',\r\n 'eventCategory': 'misc',\r\n 'eventAction': 'raffle',\r\n 'eventLabel': data.competitionId + (data.isNewUser ? ' Non-Member' : ' Member'),\r\n 'eventValue': undefined,\r\n 'nonInteraction': false\r\n });\r\n\r\n if (data.isNewUser) {\r\n window.dataLayer.push({\r\n 'event': 'ce.misc',\r\n 'eventCategory': 'Misc',\r\n 'eventAction': 'Newsletter',\r\n 'eventLabel': 'signup',\r\n 'eventValue': undefined,\r\n 'nonInteraction': false\r\n });\r\n\r\n window.jwsdwApi.tracking.fireEvent('newsletter', {\r\n 'type': 'newsletterSubscriptionSuccessful'\r\n });\r\n }\r\n\r\n let viewport = window.jwsdwUtil.uiUtils.getViewport();\r\n if (viewport === '\\\"small\\\"' || viewport === '\\\"medium\\\"') {\r\n scrollTo($rafflePageWrapper, -mobileNavbarHeight);\r\n }\r\n $rafflePageWrapper.attr('data-state', 'registration-success');\r\n },\r\n 'complete': (data) => afterFormSubmit($form, data),\r\n 'error': (data) => {\r\n if (data.responseJSON && data.responseJSON.details && data.responseJSON.details.fieldErrors) {\r\n $form.validate().showErrors(data.responseJSON.details.fieldErrors);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description Function which handles browser's back button action in order to restore the initial state of the page.\r\n * @returns {undefined}\r\n */\r\n function handleBackButton() {\r\n $rafflePageWrapper.removeAttr('data-state');\r\n }\r\n\r\n /* Initialize birthday fields validation logic */\r\n $.validator.setDefaults({\r\n 'rules': {\r\n 'email': {\r\n 'invalidvalue': true,\r\n 'customemail': true\r\n },\r\n 'dateOfBirth': {\r\n 'checkDate': '#jwsdw-raffleForm-dateOfBirth'\r\n }\r\n }\r\n });\r\n\r\n /* Handling browser back button to allow for navigation through form states */\r\n $continueButtons.on('click', function () {\r\n let state = $(this).data('setState');\r\n if (state) {\r\n let viewport = window.jwsdwUtil.uiUtils.getViewport();\r\n let scrollTarget = $(this).data('scrollTarget');\r\n history.pushState({ 'state': state }, '');\r\n\r\n requestAnimationFrame(() => {\r\n $rafflePageWrapper.attr('data-state', state);\r\n requestAnimationFrame(() => {\r\n if (viewport === '\\\"small\\\"' || viewport === '\\\"medium\\\"') {\r\n scrollTo($(scrollTarget), -mobileNavbarHeight);\r\n }\r\n });\r\n });\r\n $window.one('popstate', handleBackButton);\r\n }\r\n });\r\n\r\n /* Initializing form validation. */\r\n $raffleForm.validate();\r\n\r\n /* Handling competition form submission for new users */\r\n $raffleForm.on('submit', submitForm);\r\n}(window, jQuery));\r\n"],"names":["window","$","$window","$rafflePageWrapper","$continueButtons","$raffleForm","scrollTo","element","offset","animate","scrollTop","top","handleBackButton","removeAttr","validator","setDefaults","rules","email","invalidvalue","customemail","dateOfBirth","checkDate","on","let","state","this","data","viewport","jwsdwUtil","uiUtils","getViewport","scrollTarget","history","pushState","requestAnimationFrame","attr","one","validate","e","preventDefault","$form","method","payload","valid","action","prop","serialize","jwsdwSettings","csrfTokenName","csrfTokenValue","jwsdwCompetitionConfigs","competitionID","find","spinner","start","ajax","url","type","dataType","success","dataLayer","push","event","eventCategory","eventAction","eventLabel","competitionId","isNewUser","eventValue","undefined","nonInteraction","jwsdwApi","tracking","fireEvent","complete","afterFormSubmit","stop","dispatchEvent","CustomEvent","detail","responseJSON","error","details","fieldErrors","showErrors","jQuery"],"mappings":"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"}