{"version":3,"file":"default/js/hostedcheckout.js","sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/checkout/summary.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/cleave.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.js","webpack:///./cartridges/org_marykay/cartridge/client/default/js/checkout/formErrors.js","webpack:///./cartridges/org_marykay/cartridge/client/default/js/components/cleave.js","webpack:///./cartridges/org_marykay/cartridge/client/default/js/components/pageReload.js","webpack:///./cartridges/org_marykay/cartridge/client/default/js/hostedcheckout.js","webpack:///./cartridges/org_marykay/cartridge/client/default/js/hostedcheckout/hostedcheckout.js","webpack:///./cartridges/org_marykay/cartridge/client/default/js/stripe.checkout.js","webpack:///./cartridges/site_marykay_mx/cartridge/client/default/js/components/checkoutUtil.js","webpack:///./node_modules/cleave.js/dist/cleave-esm.js","webpack:///(webpack)/buildin/global.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./cartridges/org_marykay/cartridge/client/default/js/hostedcheckout.js\");\n","'use strict';\n\n/**\n * updates the totals summary\n * @param {Array} totals - the totals data\n */\nfunction updateTotals(totals) {\n $('.shipping-total-cost').text(totals.totalShippingCost);\n $('.tax-total').text(totals.totalTax);\n $('.sub-total').text(totals.subTotal);\n $('.grand-total-sum').text(totals.grandTotal);\n\n if (totals.ibcDiscountAmount && totals.ibcDiscountAmount.formatted) {\n $('.ibcDiscountAmount').removeClass('d-none');\n var discountText = $('.ibcDiscountAmount').data('label');\n $('.order-discount').first().text(discountText.replace('{percentage}', totals.discountPercent));\n $('.order-discount-total').text(totals.ibcDiscountAmount.formatted);\n } else {\n $('.ibcDiscountAmount').addClass('d-none');\n }\n\n if (totals.shippingLevelDiscountTotal.value > 0) {\n $('.shipping-discount').removeClass('hide-shipping-discount');\n $('.shipping-discount-total').text('- '\n + totals.shippingLevelDiscountTotal.formatted);\n } else {\n $('.shipping-discount').addClass('hide-shipping-discount');\n }\n if (totals.discounts.length > 0) {\n $('.coupon-discounts').removeClass('d-none');\n $('.coupon-discounts').empty()\n .append(totals.couponDiscountsHtml);\n } else {\n $('.coupon-discounts').addClass('d-none');\n }\n $('.coupons-and-promos').empty().append(totals.discountsHtml);\n}\n\n/**\n * updates the order product shipping summary for an order model\n * @param {Object} order - the order model\n */\nfunction updateOrderProductSummaryInformation(order) {\n var $productSummary = $('
');\n order.shipping.forEach(function (shipping) {\n shipping.productLineItems.items.forEach(function (lineItem) {\n var pli = $('[data-product-line-item=' + lineItem.UUID + ']');\n $productSummary.append(pli);\n });\n\n var address = shipping.shippingAddress || {};\n var selectedMethod = shipping.selectedShippingMethod;\n\n var nameLine = address.firstName ? address.firstName + ' ' : '';\n if (address.lastName) nameLine += address.lastName;\n\n var address1Line = address.address1;\n var address2Line = address.address2;\n\n var phoneLine = address.phone;\n\n var shippingCost = selectedMethod ? selectedMethod.shippingCost : '';\n var methodNameLine = selectedMethod ? selectedMethod.displayName : '';\n var methodArrivalTime = selectedMethod && selectedMethod.estimatedArrivalTime\n ? '( ' + selectedMethod.estimatedArrivalTime + ' )'\n : '';\n\n var tmpl = $('#pli-shipping-summary-template').clone();\n\n if (shipping.productLineItems.items && shipping.productLineItems.items.length > 1) {\n $('h5 > span').text(' - ' + shipping.productLineItems.items.length + ' '\n + order.resources.items);\n } else {\n $('h5 > span').text('');\n }\n\n var stateRequiredAttr = $('#shippingState').attr('required');\n var isRequired = stateRequiredAttr !== undefined && stateRequiredAttr !== false;\n var stateExists = (shipping.shippingAddress && shipping.shippingAddress.stateCode)\n ? shipping.shippingAddress.stateCode\n : false;\n var stateBoolean = false;\n if ((isRequired && stateExists) || (!isRequired)) {\n stateBoolean = true;\n }\n\n var shippingForm = $('.multi-shipping input[name=\"shipmentUUID\"][value=\"' + shipping.UUID + '\"]').parent();\n\n if (shipping.shippingAddress\n && shipping.shippingAddress.firstName\n && shipping.shippingAddress.address1\n && shipping.shippingAddress.city\n && stateBoolean\n && shipping.shippingAddress.countryCode\n && (shipping.shippingAddress.phone || shipping.productLineItems.items[0].fromStoreId)) {\n $('.ship-to-name', tmpl).text(nameLine);\n $('.ship-to-address1', tmpl).text(address1Line);\n $('.ship-to-address2', tmpl).text(address2Line);\n $('.ship-to-city', tmpl).text(address.city);\n if (address.stateCode) {\n $('.ship-to-st', tmpl).text(address.stateCode);\n }\n $('.ship-to-zip', tmpl).text(address.postalCode);\n $('.ship-to-phone', tmpl).text(phoneLine);\n\n if (!address2Line) {\n $('.ship-to-address2', tmpl).hide();\n }\n\n if (!phoneLine) {\n $('.ship-to-phone', tmpl).hide();\n }\n\n shippingForm.find('.ship-to-message').text('');\n } else {\n shippingForm.find('.ship-to-message').text(order.resources.addressIncomplete);\n }\n\n if (shipping.isGift) {\n $('.gift-message-summary', tmpl).text(shipping.giftMessage);\n } else {\n $('.gift-summary', tmpl).addClass('d-none');\n }\n\n // checking h5 title shipping to or pickup\n var $shippingAddressLabel = $('.shipping-header-text', tmpl);\n $('body').trigger(\n 'shipping:updateAddressLabelText',\n { selectedShippingMethod: selectedMethod, resources: order.resources, shippingAddressLabel: $shippingAddressLabel }\n );\n\n if (shipping.selectedShippingMethod) {\n $('.display-name', tmpl).text(methodNameLine);\n $('.arrival-time', tmpl).text(methodArrivalTime);\n $('.price', tmpl).text(shippingCost);\n }\n\n var $shippingSummary = $('');\n $shippingSummary.html(tmpl.html());\n $productSummary.append($shippingSummary);\n });\n\n $('.product-summary-block').html($productSummary.html());\n\n // Also update the line item prices, as they might have been altered\n $('.grand-total-price').text(order.totals.subTotal);\n order.items.items.forEach(function (item) {\n if (item.priceTotal && item.priceTotal.renderedPrice) {\n $('.item-total-' + item.UUID).empty().append(item.priceTotal.renderedPrice);\n }\n });\n}\n\nmodule.exports = {\n updateTotals: updateTotals,\n updateOrderProductSummaryInformation: updateOrderProductSummaryInformation\n};\n","'use strict';\n\nvar Cleave = require('cleave.js').default;\n\nmodule.exports = {\n handleCreditCardNumber: function (cardFieldSelector, cardTypeSelector) {\n var cleave = new Cleave(cardFieldSelector, {\n creditCard: true,\n onCreditCardTypeChanged: function (type) {\n var creditCardTypes = {\n visa: 'Visa',\n mastercard: 'Master Card',\n amex: 'Amex',\n discover: 'Discover',\n unknown: 'Unknown'\n };\n\n var cardType = creditCardTypes[Object.keys(creditCardTypes).indexOf(type) > -1\n ? type\n : 'unknown'];\n $(cardTypeSelector).val(cardType);\n $('.card-number-wrapper').attr('data-type', type);\n if (type === 'visa' || type === 'mastercard' || type === 'discover') {\n $('#securityCode').attr('maxlength', 3);\n } else {\n $('#securityCode').attr('maxlength', 4);\n }\n }\n });\n\n $(cardFieldSelector).data('cleave', cleave);\n },\n\n serializeData: function (form) {\n var serializedArray = form.serializeArray();\n\n serializedArray.forEach(function (item) {\n if (item.name.indexOf('cardNumber') > -1) {\n item.value = $('#cardNumber').data('cleave').getRawValue(); // eslint-disable-line\n }\n });\n\n return $.param(serializedArray);\n }\n};\n","'use strict';\n\nmodule.exports = function (element) {\n var position = element && element.length ? element.offset().top : 0;\n $('html, body').animate({\n scrollTop: position\n }, 500);\n if (!element) {\n $('.logo-home').focus();\n }\n};\n","'use strict';\n\nvar scrollAnimate = require('base/components/scrollAnimate');\n\n/**\n * Display error messages and highlight form fields with errors.\n * @param {string} parentSelector - the form which contains the fields\n * @param {Object} fieldErrors - the fields with errors\n */\nfunction loadFormErrors(parentSelector, fieldErrors) { // eslint-disable-line\n // Display error messages and highlight form fields with errors.\n $.each(fieldErrors, function (attr) {\n $('*[name=' + attr + ']', parentSelector)\n .addClass('is-invalid')\n .siblings('.invalid-feedback')\n .html(fieldErrors[attr])\n .siblings('.form-control-label')\n .addClass('is-invalid-label');\n });\n // Animate to top of form that has errors\n scrollAnimate($(parentSelector));\n}\n\n/**\n * Clear the form errors.\n * @param {string} parentSelector - the parent form selector.\n */\nfunction clearPreviousErrors(parentSelector) {\n $(parentSelector).find('.form-control.is-invalid').removeClass('is-invalid');\n $(parentSelector).find('.is-invalid-label').removeClass('is-invalid-label');\n $('.error-message').hide();\n}\n\nmodule.exports = {\n loadFormErrors: loadFormErrors,\n clearPreviousErrors: clearPreviousErrors\n};\n","'use strict';\n\nvar Cleave = require('cleave.js').default;\nvar base = require('base/components/cleave');\n\nbase.handleCreditCardNumber = function (cardFieldSelector, cardTypeSelector) {\n var cleave = new Cleave(cardFieldSelector, {\n creditCard: true,\n onCreditCardTypeChanged: function (type) {\n window.ccType = type;\n var creditCardTypes = {\n visa: 'Visa',\n mastercard: 'Master Card',\n amex: 'Amex',\n discover: 'Discover',\n maestro: 'Maestro',\n jcb: 'JCB',\n diners: 'DinersClub',\n unknown: 'Unknown'\n };\n var cardType = creditCardTypes[Object.keys(creditCardTypes).indexOf(type) > -1\n ? type\n : 'unknown'];\n $(cardTypeSelector).val(cardType);\n $('.card-number-wrapper').attr('data-type', type);\n if (type === 'visa' || type === 'mastercard' || type === 'discover') {\n $('#securityCode').attr('maxlength', 3);\n } else {\n $('#securityCode').attr('maxlength', 4);\n }\n }\n });\n if ($('li[data-method-id=\"CREDIT_CARD\"]').attr('data-sa-type') !== 'SA_FLEX') {\n $(cardFieldSelector).data('cleave', cleave);\n }\n};\n\nbase.serializeData = function (form) {\n var serializedArray = form.serializeArray();\n\n serializedArray.forEach(function (item) {\n if (item.name.indexOf('cardNumber') > -1) {\n if ($('li[data-method-id=\"CREDIT_CARD\"]').attr('data-sa-type') !== 'SA_FLEX') {\n item.value = $('#cardNumber').data('cleave').getRawValue(); // eslint-disable-line\n }\n }\n });\n\n return $.param(serializedArray);\n};\n\nmodule.exports = base;\n","'use strict';\n\nvar reloadPageTime;\nvar reloadPageTimeoutId;\n\n/**\n * Boolean function to check if reload page enabled.\n * @returns {boolean} true or false\n*/\nfunction reloadPageEnabled() {\n var checkReloadPageEnable = false;\n if (window.isReloadPageEnable === 'true') {\n checkReloadPageEnable = true;\n }\n return checkReloadPageEnable;\n}\n\n/**\n * return checkout page timer if exist in millisecond format.\n * @returns {boolean} true or false\n*/\nfunction isReloadPageTimerExist() {\n reloadPageTime = window.pageReloadTime !== null ? parseInt(window.pageReloadTime, 10) : null;\n if (reloadPageTime) {\n reloadPageTime = reloadPageTime * 60000; // convert minutes into millisecond\n }\n return reloadPageTime;\n}\n\n/**\n * In case if page timer timeout redirect to errorpage\n*/\nfunction schedulePageReload() {\n var pageTimer = isReloadPageTimerExist() ? isReloadPageTimerExist() : null;\n // var cartURL = $('.cart').attr('href');\n // var errorStartURL = window.errorStartURL;\n if (pageTimer > 0 && pageTimer !== null) {\n clearTimeout(reloadPageTimeoutId);\n reloadPageTimeoutId = setTimeout(function () {\n window.location.href = window.errorStartURL;\n // window.location.reload();\n }, pageTimer);\n }\n}\n\n/**\n * reseting page timer\n*/\nfunction stopPageRedirect() {\n if (reloadPageTimeoutId) {\n clearTimeout(reloadPageTimeoutId);\n }\n}\n\nvar pageReload = {\n reloadPageEnabled: reloadPageEnabled,\n schedulePageReload: schedulePageReload,\n stopPageRedirect: stopPageRedirect\n};\n\nmodule.exports = pageReload;\n","'use strict';\n\n// var processInclude = require('base/util');\nvar $ = window.$;\n$(document).ready(function () {\n require('./hostedcheckout/hostedcheckout');\n});\n","/* eslint-disable no-undef */\n'use strict';\n\nvar formHelpers = require('../checkout/formErrors');\nvar cleave = require('../components/cleave');\nvar scrollAnimate = require('base/components/scrollAnimate');\nvar summaryHelpers = require('base/checkout/summary');\nvar stripeCheckout = require('../stripe.checkout.js');\nvar pageReload = require('org/components/pageReload');\n\nvar TRIGGER_DELAY = 2000;\nvar checkoutUtil = require('site/components/checkoutUtil');\n\n\n/**\n * shows the error message on the checkout page\n */\nfunction showErrorOnCheckout(errorMsg) {\n $('.error-alert-dialog').removeClass('d-none');\n $('.form-error-text').removeClass('d-none')\n $('.form-error-payment-text').addClass('d-none')\n if (errorMsg) {\n $('.form-error-para').empty().html(errorMsg);\n }\n}\n\n/**\n * hides the error message on the checkout page\n */\nfunction hideErrorOnCheckout() {\n $('.error-alert-dialog').addClass('d-none');\n}\n\n/**\n* Updates the billing address form values within payment forms without any payment instrument validation\n* @param {Object} order - the order model\n*/\nfunction updateBillingAddress(order) {\n var billing = order.billing;\n if (!billing.billingAddress || !billing.billingAddress.address) return;\n\n var form = $('form[name=dwfrm_billing]');\n if (!form) return;\n\n $('input[name$=_firstName]', form).val(billing.billingAddress.address.firstName);\n $('input[name$=_lastName]', form).val(billing.billingAddress.address.lastName);\n $('input[name$=_address1]', form).val(billing.billingAddress.address.address1);\n $('input[name$=_address2]', form).val(billing.billingAddress.address.address2);\n $('input[name$=_city]', form).val(billing.billingAddress.address.city);\n $('input[name$=_state]', form).val(billing.billingAddress.address.stateCode);\n $('input[name$=_postalCode]', form).val(billing.billingAddress.address.postalCode);\n $('input[name$=_state],input[name$=_state]', form)\n .val(billing.billingAddress.address.stateCode);\n $('input[name$=_country]', form).val(billing.billingAddress.address.countryCode.value);\n $('input[name$=_phone]', form).val(billing.billingAddress.address.phone);\n $('input[name$=_email]', form).val(order.orderEmail);\n}\n\n/**\n * Submit the payment form in submit order flow\n * @param {*} $form paymentform\n */\nfunction submitPayment($form) {\n var url = $('#submit-payment').attr('action');\n var formData = cleave.serializeData($form);\n $.ajax({\n url: url,\n method: 'POST',\n dataType: 'json',\n data: formData,\n success: function (data) {\n if (data.error) {\n if (data.cartError && data.redirectUrl) {\n window.location.href = data.redirectUrl;\n } else if (data.cartError) {\n if (data.errorMessage) {\n $('.error-message').first().show();\n $('.error-message-text').first().text(data.errorMessage);\n scrollAnimate($('.error-message').first());\n }\n }\n $.spinner().stop();\n if (data.serverErrors.length) {\n showErrorOnCheckout(data.serverErrors[0]);\n }\n } else {\n hideErrorOnCheckout();\n var redirect = $('