{"version":3,"file":"int_braintree.min.js","sources":["webpack:///webpack/bootstrap","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/applepayHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeApplepay.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeCreditCard.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeGooglepay.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeLocal.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreePaypal.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeSrc.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeUtils.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeVenmo.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardFields.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlepayAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlepayHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlepayPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/helper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/loaderHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/local/localPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/minicartHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/paypalAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/paypalHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/paypalSavedAccountHandler.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/src/srcAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/src/srcHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/src/srcPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmoAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmoHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmoPayment.js","webpack:///./org_irobot/cartridge/client/default/js/braintree/braintreeMFRA.js","webpack:///./org_irobot/cartridge/client/default/js/braintree/paypal/paypalPayment.js","webpack:///./org_irobot/cartridge/client/default/js/int_braintree.js","webpack:///./storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.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 = \"./org_irobot/cartridge/client/default/js/int_braintree.js\");\n","'use strict';\nvar applePay = require('../braintreeApplepay');\nvar {\n isValidInputField,\n removeActiveSessionPayment,\n createPaymentFormData,\n showCartErrorMsg,\n updateBillingFormValues\n} = require('./../helper');\n\n\nvar $applePayButton = document.querySelector('.js_braintree_applepay_button');\nvar $applepayButtonsWrap = document.querySelector('.js_braintree_applepayButtonsWrap');\nvar $applepayDataMethod = document.querySelector('.payment-options[role=tablist] .nav-item[data-method-id=\"ApplePay\"]');\nvar $phoneField = document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_phone]');\n\nfunction makeApplePayButtonDisabled() {\n $applePayButton.classList.add('js_braintree_applepay_button_disabled');\n}\n\nfunction hideApplePayButton() {\n $applepayButtonsWrap.style.display = 'none'; // Remove the ApplePay select payment method radiobutton\n if ($applepayDataMethod) {\n $applepayDataMethod.style.display = 'none';\n }\n}\n\nfunction showApplePayButton() {\n $applepayButtonsWrap.style.display = 'block'; // Show the ApplePay select payment method radiobutton\n if ($applepayDataMethod) {\n $applepayDataMethod.style.display = 'block';\n }\n}\n\nfunction initApplepayButton() {\n document.querySelectorAll('.js_braintree_applepay_button').forEach(function (el) {\n var $btn = el;\n if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n return;\n }\n var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n if (typeof config !== 'object' || config === null) {\n // eslint-disable-next-line no-console\n console.error(el, 'not valid data-braintree-config');\n return;\n }\n\n $btn.addEventListener('braintree:deviceNotSupportApplePay', function () {\n hideApplePayButton();\n }, false);\n $btn.addEventListener('braintree:deviceSupportApplePay', function () {\n showApplePayButton();\n }, false);\n $btn.addEventListener('braintree:ApplePayCanNotMakePaymentWithActiveCard', function () {\n makeApplePayButtonDisabled();\n }, false);\n\n config.isRequiredBillingContactFields = true;\n config.isRequiredShippingContactFields = true;\n var applePayIns = applePay.init(config, $btn);\n\n $btn.addEventListener('click', function () {\n applePayIns.startPayment();\n });\n\n function updateCartApplepayAmount() {\n if (!applePayIns) {\n return;\n }\n applePayIns.loader.show();\n $.ajax({\n url: config.getOrderInfoUrl,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n applePayIns.loader.hide();\n applePayIns.updateAmount(data.amount);\n },\n error: function () {\n window.location.reload();\n }\n });\n return;\n }\n $('body').on('braintree:updateCartTotals', updateCartApplepayAmount);\n\n $btn.addEventListener('braintree:ApplePayPaymentAuthorized', function (e) {\n applePayIns.loader.show();\n var responseData = e.detail.data;\n var billingAddressData = responseData.billingAddress;\n\n var paymentMethodName = JSON.parse($applePayButton.getAttribute('data-braintree-config')).paymentMethodName;\n var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\n var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\n var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\n var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\n var applePayCheckoutFormData = createPaymentFormData(checkoutFormFields, {\n firstName: billingAddressData.firstName,\n lastName: billingAddressData.lastName,\n address1: billingAddressData.streetAddress,\n address2: billingAddressData.extendedAddress || '',\n city: billingAddressData.locality,\n postalCode: billingAddressData.postalCode,\n stateCode: billingAddressData.region,\n country: billingAddressData.countryCodeAlpha2,\n email: billingAddressData.email,\n phone: billingAddressData.phone,\n paymentMethod: paymentMethodName\n });\n\n var csrfToken = document.querySelector('.braintree-cart-buttons-wrap #csrf_token');\n applePayCheckoutFormData.append(csrfToken.name, csrfToken.value);\n applePayCheckoutFormData.append('braintreeApplePayNonce', responseData.nonce);\n applePayCheckoutFormData.append('braintreeApplePayDeviceDataInput', responseData.deviceData);\n applePayCheckoutFormData.append('braintreeApplePayShippingAddress',\n JSON.stringify(responseData.shippingAddress) || '{}'\n );\n\n $.ajax({\n type: 'POST',\n url: checkoutFromCartUrl,\n data: applePayCheckoutFormData,\n contentType: false,\n processData: false,\n success: function (data) {\n if (data.error) {\n var errorMessage = '';\n if (data.fieldErrors.length) {\n data.fieldErrors.forEach(function (error, index) {\n var keys = Object.keys(error);\n if (keys.length) {\n errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\n }\n });\n showCartErrorMsg(errorMessage);\n }\n\n if (data.serverErrors.length) {\n data.serverErrors.forEach(function (error) {\n errorMessage += `${error}. `;\n });\n showCartErrorMsg(errorMessage);\n }\n\n if (data.cartError) {\n window.location.href = data.redirectUrl;\n }\n return;\n }\n\n window.location.href = placeOrderUrl;\n },\n error: function (err) {\n if (err && err.redirectUrl) {\n window.location.href = err.redirectUrl;\n }\n }\n });\n }, false);\n\n $btn.setAttribute('data-is-inited', true);\n });\n}\n\nfunction applepayPayment(continueButton) {\n var config = JSON.parse($applePayButton.getAttribute('data-braintree-config'));\n if (typeof config !== 'object' || config === null) {\n // eslint-disable-next-line no-console\n console.error($applePayButton, 'not valid data-braintree-config');\n }\n var applepayButton = $('.js_braintree_applepay_button');\n applepayButton.on('braintree:deviceNotSupportApplePay', function () {\n hideApplePayButton();\n });\n applepayButton.on('braintree:deviceSupportApplePay', function () {\n showApplePayButton();\n });\n applepayButton.on('braintree:ApplePayCanNotMakePaymentWithActiveCard', function () {\n makeApplePayButtonDisabled();\n });\n\n config.isRequiredBillingContactFields = true;\n var applePayIns = applePay.init(config, $applePayButton);\n\n function authorizedApplePayPayment(e) {\n removeActiveSessionPayment();\n applePayIns.loader.show();\n document.querySelector(('#braintreeApplePayNonce')).value = e.detail.data.nonce;\n\n // Updating Storefront Billing Form data with ApplePay Billing\n var applePayBillingData = e.detail.data.billingAddress;\n var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\n storeFrontBillingData.dwfrm_billing_addressFields_firstName = applePayBillingData.firstName;\n storeFrontBillingData.dwfrm_billing_addressFields_lastName = applePayBillingData.lastName;\n storeFrontBillingData.dwfrm_billing_addressFields_address1 = applePayBillingData.streetAddress;\n storeFrontBillingData.dwfrm_billing_addressFields_address2 = applePayBillingData.extendedAddress || '';\n storeFrontBillingData.dwfrm_billing_addressFields_city = applePayBillingData.locality;\n storeFrontBillingData.dwfrm_billing_addressFields_postalCode = applePayBillingData.postalCode;\n storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = applePayBillingData.region;\n storeFrontBillingData.dwfrm_billing_addressFields_country = applePayBillingData.countryCodeAlpha2;\n storeFrontBillingData.dwfrm_billing_contactInfoFields_email = applePayBillingData.email;\n storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = applePayBillingData.phone;\n\n updateBillingFormValues(storeFrontBillingData);\n continueButton.click();\n }\n\n if (!applePayIns) return;\n $applePayButton.addEventListener('click', function () {\n if (isValidInputField($phoneField)) {\n return applePayIns.startPayment();\n }\n });\n\n applepayButton.on('braintree:ApplePayPaymentAuthorized', authorizedApplePayPayment);\n\n function appleUpdateAmountData() { // eslint-disable-line no-inner-declarations\n applePayIns.loader.show();\n $.ajax({\n url: config.getOrderInfoUrl,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n applePayIns.loader.hide();\n applePayIns.updateAmount(data.amount);\n },\n error: function () {\n window.location.reload();\n }\n });\n }\n $('body').on('checkout:updateCheckoutView', appleUpdateAmountData);\n appleUpdateAmountData();\n}\n\n/*\n Remove method was used and change appearance of applepay tab\n**/\nfunction removeSessionNonce() {\n document.querySelector('#braintreeApplePayNonce').value = '';\n document.querySelector('#braintreeApplePayDeviceData').value = '';\n}\n\nmodule.exports = {\n initApplepayButton,\n applepayPayment,\n removeSessionNonce\n};\n","'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\n/* global braintreeUtils braintree $ ApplePaySession */\n\nvar bu = braintreeUtils;\nvar loader;\n\nfunction Constructor(initParams, $btn) {\n this.$btn = $btn;\n var $errorContainer = document.createElement('div');\n $errorContainer.className = 'error';\n var $loaderContainter = document.querySelector('.braintreeApplePayLoader');\n loader = loaderInstance($loaderContainter);\n this.loader = loader;\n $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n this.params = initParams;\n this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.createApplePay = function () {\n var that = this;\n var params = that.params;\n this.$braintreeApplePayDeviceDataInput = document.querySelector('input[name=braintreeApplePayDeviceDataInput]');\n loader.show();\n\n braintree.client.create({\n authorization: bu.clientToken\n }, function (clientErr, clientInstance) {\n if (clientErr) {\n that.er.show(clientErr);\n return;\n }\n\n if (params.isFraudToolsEnabled) {\n braintree.dataCollector.create({\n client: clientInstance,\n paypal: true\n }, function (dataCollectorErr, dataCollectorInstance) {\n if (dataCollectorErr) {\n that.er.show(dataCollectorErr);\n return;\n }\n\n if (that.$braintreeApplePayDeviceDataInput) {\n that.$braintreeApplePayDeviceDataInput.value = dataCollectorInstance.deviceData;\n }\n that.loader.hide();\n });\n }\n\n braintree.applePay.create({\n client: clientInstance\n }, function (error, applePayInstance) {\n loader.hide();\n if (error) {\n that.er.show(error);\n return;\n }\n that.createApplePaySession = function () {\n var paymentRequest = applePayInstance.createPaymentRequest({\n total: {\n label: params.options.displayName,\n amount: params.options.amount\n }\n });\n if (params.isRequiredBillingContactFields) {\n paymentRequest.requiredBillingContactFields = ['postalAddress', 'name'];\n }\n if (params.isRequiredShippingContactFields) {\n paymentRequest.requiredShippingContactFields = ['postalAddress', 'name', 'phone', 'email'];\n }\n\n var session = new ApplePaySession(1, paymentRequest);\n\n session.onvalidatemerchant = function (event) {\n loader.show();\n applePayInstance.performValidation({\n validationURL: event.validationURL,\n displayName: params.options.displayName\n }, function (eventError, merchantSession) {\n loader.hide();\n if (eventError) {\n that.er.show(eventError);\n session.abort();\n return;\n }\n session.completeMerchantValidation(merchantSession);\n });\n };\n session.onpaymentauthorized = function (event) {\n loader.show();\n applePayInstance.tokenize({\n token: event.payment.token\n }, function (eventError, payload) {\n loader.hide();\n if (eventError) {\n that.er.show(eventError);\n session.completePayment(ApplePaySession.STATUS_FAILURE);\n return;\n }\n\n session.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n var data = {\n event: event,\n payload: payload,\n nonce: payload.nonce,\n deviceData: document.querySelector('input[name=braintreeApplePayDeviceDataInput]').value\n };\n var shippingContact = event.payment.shippingContact;\n if (shippingContact) {\n data.shippingAddress = {\n streetAddress: shippingContact.addressLines[0],\n extendedAddress: shippingContact.addressLines[1],\n locality: shippingContact.locality,\n region: shippingContact.administrativeArea.toUpperCase(),\n postalCode: shippingContact.postalCode,\n countryCodeAlpha2: shippingContact.countryCode.toUpperCase(),\n firstName: shippingContact.givenName,\n lastName: shippingContact.familyName,\n phone: shippingContact.phoneNumber,\n email: shippingContact.emailAddress\n };\n } else {\n shippingContact = {\n emailAddress: document.querySelector('.customer-summary-email').innerHTML,\n phoneNumber: document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_phone]').value\n };\n }\n\n var billingContact = event.payment.billingContact;\n if (billingContact) {\n data.billingAddress = {\n streetAddress: billingContact.addressLines[0],\n extendedAddress: billingContact.addressLines[1],\n locality: billingContact.locality,\n region: billingContact.administrativeArea.toUpperCase(),\n postalCode: billingContact.postalCode,\n countryCodeAlpha2: billingContact.countryCode.toUpperCase(),\n firstName: billingContact.givenName,\n lastName: billingContact.familyName,\n email: shippingContact.emailAddress,\n phone: shippingContact.phoneNumber\n };\n }\n\n that.$btn.dispatchEvent(new CustomEvent('braintree:ApplePayPaymentAuthorized', {\n detail: {\n data: data\n }\n }));\n });\n };\n session.begin();\n };\n var promise = ApplePaySession.canMakePaymentsWithActiveCard(applePayInstance.merchantIdentifier);\n promise.then(function (canMakePaymentsWithActiveCard) {\n if (!canMakePaymentsWithActiveCard) {\n that.$btn.dispatchEvent(new CustomEvent('braintree:ApplePayCanNotMakePaymentWithActiveCard'));\n that.createApplePaySession = null;\n return;\n }\n });\n });\n });\n};\n\nConstructor.prototype.startPayment = function () {\n this.er.hide();\n if (this.createApplePaySession) {\n this.createApplePaySession();\n }\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n this.params.options.amount = amount;\n};\n\nmodule.exports = {\n init: function (params, $btn) {\n if (!window.ApplePaySession) {\n $btn.dispatchEvent(new CustomEvent('braintree:deviceNotSupportApplePay'));\n return false;\n }\n $btn.dispatchEvent(new CustomEvent('braintree:deviceSupportApplePay'));\n var ins = new Constructor(params, $btn);\n bu.clientToken = params.clientToken;\n $.extend(bu.messages, params.messages);\n ins.createApplePay();\n return ins;\n }\n};\n\n","/* eslint-disable block-scoped-var */\n'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar creditcardHelper = require('./creditcard/creditcardHelper');\n\n/* global braintreeUtils braintree $ */\n\nvar bu = braintreeUtils;\nvar er = null;\nvar loader;\nvar params;\n\nfunction createHostedFields() {\n if (params.isFraudToolsEnabled) {\n loader.show();\n braintree.dataCollector.create({\n authorization: bu.clientToken,\n kount: true,\n paypal: false\n }, function (error, data) {\n loader.hide();\n if (error) {\n return;\n }\n document.querySelector('#braintreeDeviceData').value = data.deviceData;\n });\n }\n loader.show();\n\n braintree.hostedFields.create({\n authorization: bu.clientToken,\n styles: params.hostedFieldsStyles,\n fields: params.hostedFieldsConfig\n }, function (error, hostedFieldsInstance) {\n loader.hide();\n if (error) {\n er.show(error);\n return;\n }\n params.hostedFieldsInstance = hostedFieldsInstance;\n hostedFieldsInstance.on('validityChange', function () {\n if (params.continueButton && JSON.parse(params.continueButton.getAttribute('data-is-allow-submit-form'))) {\n params.continueButton.setAttribute('data-is-allow-submit-form', false);\n }\n });\n });\n}\n\nfunction isFormValid() {\n if (params.data && params.data.amount === 0) {\n er.show('Order total 0 is not allowed for Credit Card');\n return false;\n }\n var $cardOwnerEl = document.querySelector('#braintreeCardOwner');\n if ($cardOwnerEl.value.length === 0) {\n $cardOwnerEl.parentNode.classList.add('braintree-hosted-fields-invalid');\n er.show(params.messages.validation);\n return false;\n }\n $cardOwnerEl.parentNode.classList.remove('braintree-hosted-fields-invalid');\n er.hide();\n\n return true;\n}\n\nfunction clearHostedFields() {\n params.hostedFieldsInstance.clear('number');\n params.hostedFieldsInstance.clear('cvv');\n params.hostedFieldsInstance.clear('expirationDate');\n}\n\nfunction check3dSecureAndSubmit(response, startTokenizeCb) {\n if (!response.nonce || response.nonce === 'null') {\n document.querySelector('#braintreeCreditCardNonce').value = 'null';\n startTokenizeCb({\n error: true,\n errorCode: 'nonce_is_null'\n });\n return;\n }\n if (!params.is3dSecureEnabled) {\n document.querySelector('#braintreeCreditCardNonce').value = response.nonce;\n startTokenizeCb({\n error: false,\n errorCode: 'ok'\n });\n return;\n }\n\n loader.show();\n\n var billingData = require('./helper').getBillingAddressFormValues();\n\n braintree.threeDSecure.create({\n authorization: bu.clientToken,\n version: 2\n }, function (error, threeDSecure) {\n loader.hide();\n if (error) {\n er.show(error);\n startTokenizeCb({\n error: true,\n errorCode: 'bt_3dsecure_create_error',\n btError: error\n });\n return;\n }\n bu.threeDSecure = threeDSecure;\n loader.show();\n threeDSecure.verifyCard({\n amount: params.data.amount,\n nonce: response.nonce,\n bin: response.details ? response.details.bin : '',\n email: document.querySelector('#email').value,\n billingAddress: {\n givenName: billingData.firstName,\n surname: billingData.lastName,\n phoneNumber: billingData.phone,\n streetAddress: billingData.address1,\n extendedAddress: billingData.address2,\n locality: billingData.city,\n region: billingData.stateCode,\n postalCode: billingData.postalCode,\n countryCodeAlpha2: billingData.country\n },\n additionalInformation: params.data.shippingAdditionalInfo,\n onLookupComplete: function (data, next) {\n next();\n }\n }, function (err, data) {\n loader.hide();\n if (err) {\n er.show(err);\n startTokenizeCb({\n error: true,\n errorCode: 'bt_3dsecure_verify_error',\n btError: err\n });\n return;\n }\n if (data.liabilityShifted || params.isSkip3dSecureLiabilityResult) {\n document.querySelector('#braintreeIs3dSecureRequired').value = 'true';\n document.querySelector('#braintreeCreditCardNonce').value = data.nonce;\n startTokenizeCb({\n error: false,\n result: 'ok'\n });\n return;\n }\n er.show(params.messages.secure3DFailed);\n startTokenizeCb({\n error: true,\n result: 'secure3DFailed'\n });\n return;\n });\n });\n}\n/**\n * Creates tokenization options for 'tokenize' function.\n * @returns {Object} Object with tokenization options.\n */\nfunction createTokenizationOptions() {\n var billingData = require('./helper').getBillingAddressFormValues();\n return {\n billingAddress: {\n firstName: billingData.firstName,\n lastName: billingData.lastName,\n streetAddress: billingData.address1.split('%20').join(' '),\n extendedAddress: billingData.address2 ? billingData.address2.split('%20').join(' ') : billingData.address2,\n locality: billingData.city.includes('%20') ? billingData.city.split('%20').join(' ') : billingData.city,\n region: billingData.stateCode,\n postalCode: billingData.postalCode,\n countryCodeAlpha2: billingData.country.includes('$20') ? billingData.country.split('%20').join(' ') : billingData.country\n }\n };\n}\n\nfunction startTokenize(cb, response) {\n var tokenizationOptions;\n if (response && response.nonce) {\n check3dSecureAndSubmit(response, cb);\n return;\n }\n if (!isFormValid()) {\n cb({\n error: true,\n errorCode: 'fields_not_valid'\n });\n return;\n }\n loader.show();\n\n if ($('#dwfrm_billing').length > 0) {\n tokenizationOptions = createTokenizationOptions();\n } else {\n tokenizationOptions = {};\n }\n\n params.hostedFieldsInstance.tokenize(tokenizationOptions, function (error, data) {\n loader.hide();\n if (error) {\n er.show(error);\n cb({\n error: true,\n errorCode: 'bt_tokenize_error',\n btError: error\n });\n return;\n }\n if (data.type === 'CreditCard') {\n document.querySelector('#braintreeCardType').value = creditcardHelper.convertCardTypeToDwFormat(data.details.cardType);\n document.querySelector('#braintreeCardMaskNumber').value = '************' + data.details.lastFour;\n document.querySelector('#braintreeCardExpirationMonth').value = data.details.expirationMonth;\n document.querySelector('#braintreeCardExpirationYear').value = data.details.expirationYear.substr(2);\n var creditCardFieldsCardNumber = document.querySelector('input[name=dwfrm_billing_creditCardFields_cardNumber]');\n if (creditCardFieldsCardNumber) {\n creditCardFieldsCardNumber.value = '************' + data.details.lastFour;\n }\n\n if (document.querySelector('.form-group.braintree_used_creditcard_account')) {\n var $cardOwner = document.querySelector('#braintreeCardOwner').getAttribute('data-new-cart-value');\n document.querySelector('#braintreeCardOwnerPh').textContent = $cardOwner;\n document.querySelector('#braintreeCardNumberPh').textContent = '************' + data.details.lastFour;\n document.querySelector('#braintreeCvvPh').textContent = '***';\n document.querySelector('#braintreeExpirationPh').textContent = data.details.expirationMonth + '/' + data.details.expirationYear.substr(2);\n\n var selectedCard = document.querySelector('#braintreeSessionCreditAccount');\n selectedCard.classList.remove('used-creditcard-account-hide');\n selectedCard.setAttribute('data-number', '************' + data.details.lastFour);\n selectedCard.setAttribute('data-expiration', data.details.expirationMonth + '/' + data.details.expirationYear.substr(2));\n selectedCard.setAttribute('data-type', creditcardHelper.convertCardTypeToDwFormat(data.details.cardType));\n selectedCard.setAttribute('data-owner', $cardOwner);\n selectedCard.setAttribute('data-nonce', data.nonce);\n }\n }\n check3dSecureAndSubmit(data, cb);\n });\n}\n\nfunction init(initParams) {\n params = initParams;\n bu.clientToken = params.clientToken;\n}\n\nfunction initFields(initParams, $container) {\n params = initParams;\n params.$container = $container;\n\n er = bu.createErrorInstance(document.querySelector('#braintreeCreditCardErrorContainer'), creditcardHelper.creditcardErrorContainer);\n loader = loaderInstance(document.querySelector('#braintreeCreditCardLoader'));\n bu.clientToken = params.clientToken;\n $.extend(bu.messages, params.messages);\n\n creditcardHelper.cardOwnerEvents();\n\n function getHostedFieldsStyles() {\n return {\n input: {\n 'font-size': '12px',\n color: '#b7802a'\n },\n ':focus': {\n color: 'blue'\n },\n '.valid': {\n color: 'green'\n },\n '.invalid': {\n color: 'red'\n }\n };\n }\n\n function getHostedFieldsConfig() {\n return {\n number: {\n selector: '#braintreeCardNumber'\n },\n cvv: {\n selector: '#braintreeCvv'\n },\n expirationDate: {\n selector: '#braintreeExpirationDate'\n }\n };\n }\n\n if (!params.hostedFieldsStyles) {\n params.hostedFieldsStyles = getHostedFieldsStyles();\n }\n\n params.hostedFieldsConfig = getHostedFieldsConfig();\n\n $.extend(params.hostedFieldsConfig, params.hostedFieldsAdvancedOptions);\n\n createHostedFields();\n}\n\nmodule.exports = {\n init,\n initFields,\n startTokenize,\n isFormValid,\n getHostedFieldInstance: function () {\n return params ? params.hostedFieldsInstance : null;\n },\n updateData: function (data) {\n params.data = data;\n },\n clearHostedFields\n};\n","'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar paypalHelper = require('./paypal/paypalHelper');\nvar { showCartErrorMsg } = require('./helper');\n/* global braintreeUtils braintree $ Googlepay */\n\nvar bu = braintreeUtils;\nvar loader;\n\nvar $googlepayCartButton = document.querySelector('.braintree-cart-google-button');\nvar $googlepayBillingButton = document.querySelector('.braintree-billingpage-google-button');\n\nfunction Constructor(initParams, $btn) {\n this.$btn = $btn;\n var $errorContainer = document.createElement('div');\n $errorContainer.className = 'error';\n var $loaderContainter = document.querySelector('.braintreeGooglepayLoader');\n loader = loaderInstance($loaderContainter);\n this.loader = loader;\n $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n this.params = initParams;\n this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.createGooglepay = function () {\n var that = this;\n var params = that.params;\n this.$braintreeGooglePayDeviceDataInput = document.querySelector('input[name=braintreeGooglePayDeviceDataInput]');\n\n var paymentsClient = new google.payments.api.PaymentsClient({ // eslint-disable-line no-undef\n environment: 'TEST' // Or 'PRODUCTION'\n });\n\n braintree.client.create({\n authorization: params.clientToken\n }, function (clientErr, clientInstance) {\n if (clientErr) {\n that.er.show(clientErr);\n return;\n }\n if (params.isFraudToolsEnabled) {\n braintree.dataCollector.create({\n client: clientInstance,\n paypal: true\n }, function (dataCollectorErr, dataCollectorInstance) {\n if (dataCollectorErr) {\n that.er.show(dataCollectorErr);\n return;\n }\n\n if (that.$braintreeGooglePayDeviceDataInput) {\n that.$braintreeGooglePayDeviceDataInput.value = dataCollectorInstance.deviceData;\n }\n that.loader.hide();\n });\n }\n braintree.googlePayment.create({\n client: clientInstance,\n googlePayVersion: 2\n }, function (googlePaymentErr, googlePaymentInstance) {\n if (googlePaymentErr) {\n that.er.show(googlePaymentErr);\n return;\n }\n var allowedPaymentMethods = googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods;\n paymentsClient.isReadyToPay({\n // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: allowedPaymentMethods\n }).then(function (response) {\n if (response.result) {\n function onGooglePaymentButtonClicked() { // eslint-disable-line no-inner-declarations\n if (params.options.amount === 0 && !params.options.isAccount) {\n var zeroAmountErrorMsg = 'Order total 0 is not allowed for GooglePay';\n if ($googlepayCartButton) showCartErrorMsg(zeroAmountErrorMsg);\n if ($googlepayBillingButton) paypalHelper.showCheckoutErrorMsg(zeroAmountErrorMsg);\n return;\n }\n loader.show();\n var paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n transactionInfo: {\n currencyCode: params.options.currency,\n totalPriceStatus: 'FINAL',\n totalPrice: String(params.options.amount)\n },\n shippingAddressRequired: params.options.isShippingAddressRequired,\n shippingAddressParameters: {\n allowedCountryCodes: ['US'],\n phoneNumberRequired: true\n },\n emailRequired: true\n });\n var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods[0];\n cardPaymentMethod.parameters.billingAddressRequired = true;\n cardPaymentMethod.parameters.billingAddressParameters = {\n format: 'FULL',\n phoneNumberRequired: true\n };\n paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n googlePaymentInstance.parseResponse(paymentData, function (err, result) {\n if (err) {\n loader.hide();\n // Handle parsing error\n }\n params.onTokenizePayment(paymentData, result);\n });\n loader.hide();\n }).catch(function (err) {\n loader.hide();\n // eslint-disable-next-line no-console\n console.log(err);\n });\n }\n const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });\n that.$btn.appendChild(button);\n loader.hide();\n }\n }).catch(function (err) {\n loader.hide();\n // eslint-disable-next-line no-console\n console.log(err);\n });\n });\n // Set up other Braintree components\n });\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n this.params.options.amount = amount;\n};\n\nmodule.exports = {\n init: function (params, $btn) {\n bu.clientToken = params.clientToken;\n return new Constructor(params, $btn);\n }\n};\n","/* eslint-disable no-use-before-define */\n'use strict';\n\n/* global braintreeUtils braintree $ VenmoSession */\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar paypalHelper = require('./paypal/paypalHelper');\nvar { isValidInputField } = require('./helper');\nvar scrollAnimate = require('base/components/scrollAnimate');\nconst errorText = 'An error occurred. Please try again later or choose different payment method.';\n\nvar bu = braintreeUtils;\nvar loader;\n\nfunction Constructor(initParams, $btn) {\n this.$btn = $btn;\n var $errorContainer = document.createElement('div');\n $errorContainer.className = 'lpm-error';\n var $loaderContainter = document.querySelector('.lpmLoader');\n loader = loaderInstance($loaderContainter);\n this.loader = loader;\n $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n this.params = initParams;\n this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.createLocalPayment = function () {\n var that = this;\n var params = that.params;\n // Create a client.\n braintree.client.create({\n authorization: params.clientToken\n }).then(function (clientInstance) {\n // Create a local payment component.\n return braintree.localPayment.create({\n client: clientInstance\n });\n }).then(function (localPaymentInstance) {\n function createLocalPaymentClickListener(type) {\n var emailField = document.querySelector('#email');\n return function (event) {\n event.preventDefault();\n if (params.options.amount === 0) {\n paypalHelper.showCheckoutErrorMsg('Order total 0 is not allowed for ' + type);\n that.loader.hide();\n return;\n }\n\n if (emailField && emailField.value !== '' && !isValidInputField(emailField)) {\n that.loader.hide();\n return;\n }\n\n that.loader.show();\n document.querySelector('.processingMsg').style.display = 'block';\n $.getJSON(that.params.getOrderInfoUrl)\n .then(({ shippingAddress }) => {\n const reqData = Object.assign(createRequestData(\n shippingAddress, that.params, type),\n { onPaymentStart: (_, start) => start() });\n // Saving shippingAddress + email in a case if startPayment will return {} details object\n that.params.shippingAddress = shippingAddress;\n that.params.shippingAddress.email = emailField.value;\n\n localPaymentInstance.startPayment(reqData).then(({ nonce, details, correlationId }) => {\n var processingMsg = document.querySelector('.processingMsg');\n var finalProcessingMsg = document.querySelector('.finalProcessingMsg');\n processingMsg.style.display = 'none';\n finalProcessingMsg.style.display = 'block';\n return $.ajax({\n url: params.paymentConfirmUrl,\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify({\n nonce: nonce,\n lpmName: type,\n details: jQuery.isEmptyObject(details) ? that.params.shippingAddress : details,\n deviceData: JSON.stringify({ correlation_id: correlationId })\n })\n });\n }).then(({ redirectUrl }) => {\n that.loader.hide();\n window.location.href = redirectUrl;\n }).catch(function (err) {\n that.loader.hide();\n $('.error-message').show();\n $('.error-message-text').text(err.message);\n scrollAnimate($('.error-message'));\n });\n })\n .catch(function (err) {\n if (err.responseText !== '') { errorText = err.responseText; }\n that.loader.hide();\n $('.error-message').show();\n $('.error-message-text').text(errorText);\n scrollAnimate($('.error-message'));\n });\n };\n }\n var paymentMethod = that.$btn.dataset.localPaymentMethodName;\n that.$btn.addEventListener('click', createLocalPaymentClickListener(paymentMethod));\n });\n};\n\nfunction createRequestData(shippingData, params, type) {\n var email = document.querySelector('#email').value;\n var recipientName = shippingData.recipientName.split(' ');\n shippingData.firstName = recipientName[0];\n shippingData.lastName = recipientName[1];\n return {\n paymentType: type,\n amount: params.options.amount,\n fallback: {\n url: params.fallbackUrl + '?lpmName=' + type + '&email=' + email,\n buttonText: 'Complete Payment'\n },\n currencyCode: params.options.currency,\n shippingAddressRequired: false,\n email: email,\n phone: shippingData && shippingData.phone,\n givenName: shippingData && shippingData.firstName,\n surname: shippingData && shippingData.lastName,\n address: {\n countryCode: shippingData && shippingData.countryCode\n }\n };\n}\nConstructor.prototype.updateShippingData = function () {\n var localIns = this;\n localIns.loader.show();\n return $.getJSON(localIns.params.getOrderInfoUrl);\n};\n\n\nConstructor.prototype.updateShippingAddress = function (data) {\n if (data) {\n var recipientName = data.recipientName.split(' ');\n data.firstName = recipientName[0];\n data.lastName = recipientName[1];\n this.shippingData = data;\n }\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n this.params.options.amount = amount;\n};\n\nmodule.exports = {\n init: function (params, $btn) {\n bu.clientToken = params.clientToken;\n return new Constructor(params, $btn);\n }\n};\n","/* eslint-disable no-inner-declarations */\n/* eslint-disable new-cap */\n'use strict';\n\n/* global braintreeUtils braintree paypal $ */\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar paypalHelper = require('./paypal/paypalHelper');\nvar { showCartErrorMsg } = require('./helper');\n\nvar bu = braintreeUtils;\nvar console = bu.console;\n\nvar pid;\nvar uuid;\nvar removeFromCartUrl;\nvar loader;\nvar $price;\nvar sdkUrlConfiguration;\nvar isZeroAmount = false;\nvar $braintreePDPButton = document.querySelector('.braintree_pdp_button');\nvar $miniCartQuantity = document.querySelector('.minicart-quantity');\nvar $addToCartButton = document.querySelector('.add-to-cart') || document.querySelector('.add-to-cart-global');\nvar $paypalCartButton = document.querySelector('.js_braintree_paypal_cart_button');\nvar $paypalBillingButton = document.querySelector('.js_braintree_paypal_billing_button');\n\nfunction Constructor(initParams, $btn) {\n var params = initParams;\n this.params = initParams;\n params.options = params.options || {};\n\n this.$btn = $btn;\n var $errorContainer = document.createElement('div');\n $errorContainer.className = 'error';\n\n if (params.$errorContainer) {\n $errorContainer = params.$errorContainer;\n delete params.$errorContainer;\n }\n\n var $loaderContainter = document.querySelector('.braintreePayPalLoader');\n var $braintreePaypalRiskDataInput = document.querySelector('input[name=braintreePaypalRiskData]');\n\n if (params.$loaderContainer) {\n $loaderContainter = params.$loaderContainer;\n }\n\n $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n\n this.er = bu.createErrorInstance($errorContainer);\n loader = loaderInstance($loaderContainter);\n this.loader = loader;\n var that = this;\n\n if (params.isFraudToolsEnabled) {\n loader.show();\n braintree.dataCollector.create({\n authorization: bu.clientToken,\n paypal: true,\n kount: false\n }, function (error, data) {\n loader.hide();\n if (error) {\n console.log(error);\n return;\n }\n if ($braintreePaypalRiskDataInput) {\n $braintreePaypalRiskDataInput.value = data.deviceData;\n }\n params.riskData = data.deviceData;\n });\n }\n\n if ($braintreePDPButton) {\n $price = document.querySelector('.price .sales .value');\n // Check minicart quantity and hide PDPbutton if it is not empty\n if (($miniCartQuantity && parseInt($miniCartQuantity.textContent, 0) > 0)\n || ($price && $price.getAttribute('content') === '0.00')) { // Check if product price is zero\n paypalHelper.hidePDPButton($braintreePDPButton);\n }\n }\n\n loader.show();\n\n braintree.client.create({\n authorization: bu.clientToken\n }).then(function (clientInstance) {\n return braintree.paypalCheckout.create({\n client: clientInstance\n });\n }).then(function (paypalCheckoutInstance) {\n if ($braintreePDPButton) {\n if ($addToCartButton.disabled) {\n paypalHelper.hidePDPButton($braintreePDPButton);\n }\n $('body').on('cart:update', function () {\n $miniCartQuantity = parseInt(document.querySelector('.minicart-quantity').textContent, 0);\n if ($addToCartButton.disabled) {\n paypalHelper.hidePDPButton($braintreePDPButton);\n }\n if ($miniCartQuantity === 0 && !$addToCartButton.disabled) {\n paypalHelper.showPDPButton($braintreePDPButton);\n }\n });\n\n $('body').on('product:afterAddToCart', function () {\n paypalHelper.hidePDPButton($braintreePDPButton);\n });\n\n // Update addToCart button status\n $('body').on('product:statusUpdate', function () {\n $miniCartQuantity = parseInt(document.querySelector('.minicart-quantity').textContent, 0);\n $price = document.querySelector('.price .sales .value');\n isZeroAmount = false;\n if ($braintreePDPButton && $price) {\n isZeroAmount = $price.getAttribute('content') === '0.00';\n }\n\n if ($miniCartQuantity === 0) {\n if ($addToCartButton.disabled || isZeroAmount) {\n paypalHelper.hidePDPButton($braintreePDPButton);\n }\n if (!$addToCartButton.disabled && !isZeroAmount) {\n paypalHelper.showPDPButton($braintreePDPButton);\n }\n }\n });\n }\n\n var payment = function () {\n if ($braintreePDPButton && $braintreePDPButton.style.display === '') {\n that.er.hide();\n var res = braintreeUtils.pdpOnlickForAsignedPaypalPayment();\n if (res.cart) {\n uuid = res.pliUUID;\n removeFromCartUrl = res.cart.actionUrls.removeProductLineItemUrl;\n pid = res.pid;\n that.params.options.amount = parseFloat(res.cart.totals.grandTotal.replace(/\\$|,/g, ''));\n } else {\n throw new Error(res.message || 'Error occurs');\n }\n }\n return paypalCheckoutInstance.createPayment(that.params.options);\n };\n\n var paypalButtonConfig = {\n locale: params.options.locale,\n onApprove: function (data) {\n if (params.options.intent === 'order') {\n data.intent = 'order';\n }\n return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n params.onTokenizePayment(payload, that);\n });\n },\n onCancel: function (a, b) {\n if (typeof params.options.onCancel === 'function') {\n params.options.onCancel(a, b);\n }\n if ($braintreePDPButton && $braintreePDPButton.style.display === '') {\n var urlParams = {\n pid: pid,\n uuid: uuid\n };\n\n $.ajax({\n url: paypalHelper.appendToUrl(removeFromCartUrl, urlParams),\n type: 'get',\n dataType: 'json',\n success: function () {\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n },\n onError: function (err) {\n that.er.show(err.message.split(/\\r?\\n/g)[0]);\n\n if ($braintreePDPButton && $braintreePDPButton.style.display === '' && pid) {\n var productID = pid;\n var urlParams = {\n pid: productID,\n uuid: uuid\n };\n\n $.ajax({\n url: paypalHelper.appendToUrl(removeFromCartUrl, urlParams),\n type: 'get',\n dataType: 'json',\n success: function () {\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n }\n };\n\n isZeroAmount = that.params.options.amount === 0;\n if (isZeroAmount) {\n var zeroAmountErrorMsg = 'Order total 0 is not allowed for PayPal';\n paypalButtonConfig.onClick = function (_, actions) {\n if ($paypalCartButton) showCartErrorMsg(zeroAmountErrorMsg);\n if ($paypalBillingButton) paypalHelper.showCheckoutErrorMsg(zeroAmountErrorMsg);\n return actions.reject();\n };\n }\n\n if (params.options && params.options.flow === 'checkout') {\n paypalButtonConfig.createOrder = payment;\n sdkUrlConfiguration = {\n intent: params.options.intent,\n currency: params.options.currency,\n components: 'buttons,messages',\n commit: false,\n 'disable-funding': 'card,credit'\n };\n } else {\n paypalButtonConfig.createBillingAgreement = payment;\n sdkUrlConfiguration = {\n vault: true,\n components: 'buttons,messages',\n 'disable-funding': 'card,credit'\n };\n }\n\n paypalButtonConfig = $.extend(false, paypalButtonConfig, that.params.paypalConfig);\n loader.hide();\n\n if (!window.isPayPalSDKLoaded) {\n paypalCheckoutInstance.loadPayPalSDK(sdkUrlConfiguration).then(function () {\n window.isPayPalSDKLoaded = true;\n return paypal.Buttons(paypalButtonConfig).render(that.$btn);\n });\n } else {\n return paypal.Buttons(paypalButtonConfig).render(that.$btn);\n }\n }).catch(function (err) {\n console.error('Error!', err);\n loader.hide();\n });\n}\n\nConstructor.prototype.updateAmount = function (amount) {\n this.params.options.amount = amount;\n};\n\nConstructor.prototype.updateShippingAddress = function (data) {\n this.params.options.shippingAddressOverride = data;\n};\n\nmodule.exports = {\n init: function (params, $btn) {\n bu.clientToken = params.clientToken;\n $.extend(bu.messages, params.messages);\n return new Constructor(params, $btn);\n }\n};\n","/* eslint-disable no-undef */\n'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar bu = braintreeUtils;\nvar loader;\n\nfunction Constructor(initParams, $btn) {\n this.$btn = $btn;\n var $errorContainer = document.createElement('div');\n $errorContainer.className = 'error';\n var $loaderContainter = document.querySelector('.braintreeSrcLoader');\n loader = loaderInstance($loaderContainter);\n this.loader = loader;\n $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n this.params = initParams;\n this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.loadSrcButton = function () {\n var that = this;\n var params = that.params;\n this.$braintreeSrcDeviceDataInput = document.querySelector('input[name=braintreeSrcDeviceDataInput]');\n\n that.loader.show();\n braintree.client.create({\n authorization: params.clientToken\n }, function (clientErr, clientInstance) {\n if (clientErr) {\n that.er.show(clientErr);\n that.loader.hide();\n return;\n }\n if (params.isFraudToolsEnabled) {\n braintree.dataCollector.create({\n client: clientInstance,\n paypal: true\n }, function (dataCollectorErr, dataCollectorInstance) {\n if (dataCollectorErr) {\n that.er.show(dataCollectorErr);\n return;\n }\n\n if (that.$braintreeSrcDeviceDataInput) {\n that.$braintreeSrcDeviceDataInput.value = dataCollectorInstance.deviceData;\n }\n that.loader.hide();\n });\n }\n braintree.visaCheckout.create({\n client: clientInstance\n }, function (srcPaymentErr, visaCheckoutInstance) {\n if (srcPaymentErr) {\n that.er.show(srcPaymentErr);\n that.loader.hide();\n return;\n }\n var baseInitOptions = {\n paymentRequest: {\n currencyCode: 'USD',\n subtotal: params.options.amount\n },\n settings: {\n locale: params.settings.locale,\n payment: {\n cardBrands: params.settings.cardBrands,\n acceptCanadianVisaDebit: params.settings.acceptCanadianVisaDebit\n }\n }\n };\n\n var initOptions = visaCheckoutInstance.createInitOptions(baseInitOptions);\n initOptions.settings.shipping = {\n collectShipping: params.options.isShippingAddressRequired\n };\n V.init(initOptions);\n that.loader.hide();\n V.on('payment.success', function (payment) {\n visaCheckoutInstance.tokenize(payment, function (tokenizeErr, payload) {\n if (tokenizeErr) {\n // eslint-disable-next-line no-console\n console.error('Error during Visa Checkout tokenization', tokenizeErr);\n } else {\n var billingAddress = payload.billingAddress;\n payload.billingAddressString = JSON.stringify({\n recipientName: (billingAddress.firstName + ' ' + billingAddress.lastName),\n phone: billingAddress.phoneNumber,\n countryCodeAlpha2: billingAddress.countryCode,\n streetAddress: billingAddress.streetAddress,\n extendedAddress: billingAddress.streetAddress,\n locality: billingAddress.locality,\n region: billingAddress.region,\n postalCode: billingAddress.postalCode,\n email: payload.userData.userEmail\n });\n params.onTokenizePayment(payload);\n }\n });\n });\n });\n });\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n this.params.options.amount = amount;\n};\n\nmodule.exports = {\n init: function (params, $btn) {\n bu.clientToken = params.clientToken;\n return new Constructor(params, $btn);\n }\n};\n","'use strict';\n/* global braintree $ */\n/* eslint no-console: 'off' */\nvar { getDebugMode } = require('./helper');\n\nvar isDebugMode = getDebugMode();\n\nif (console && isDebugMode) {\n var consoleLog = console.log;\n var consoleError = console.error;\n console.log = function () {\n consoleLog.apply(console, arguments);\n };\n console.error = function () {\n consoleError.apply(console, arguments);\n };\n} else if (!console) {\n console = { // eslint-disable-line no-global-assign\n log: function () { },\n error: function () { },\n info: function () { }\n };\n}\n\nvar bu = {\n pdpOnlickForAsignedPaypalPayment: function () {\n var $bundleItem = $('.bundle-item');\n function getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n }\n\n var pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n var $btn = $('.braintree_pdp_button');\n var $productContainer = $btn.closest('.product-detail');\n\n var form = {\n pid: pid,\n quantity: $('.quantity-select').val()\n };\n\n if (!$bundleItem.length) {\n form.options = getOptions($productContainer);\n } else {\n var items = $bundleItem.map(function () {\n return {\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n };\n });\n form.childProducts = JSON.stringify(items.toArray());\n }\n var response = $.ajax({\n url: $('.add-to-cart-url').val(),\n method: 'POST',\n async: false,\n data: form\n }).responseJSON;\n response.pid = pid;\n return response;\n },\n\n getSelectedData: function (selectEl) {\n if (!selectEl) {\n return null;\n }\n var options = selectEl.getElementsByTagName('option');\n var option = null;\n for (var i = 0; i < options.length; i++) {\n option = options[i];\n if (option.selected) {\n break;\n }\n }\n return option.attributes;\n },\n\n postData: function (url, data) {\n var formData = new FormData();\n\n for (var key in data) {\n formData.append(key, data[key]);\n }\n $.ajax({\n url: url,\n data: formData,\n processData: false,\n contentType: false,\n type: 'POST',\n success: function (res) {\n window.location.href = res.redirectUrl;\n },\n error: function () {\n location.reload();\n }\n });\n },\n\n messages: {},\n\n errorInstances: [],\n createErrorInstance: function (containerElement, callback) {\n if (!containerElement) {\n console.error('Braintree: No container for showing erros');\n }\n function Constructor(cb) {\n bu.errorInstances.push(this);\n this.containerEl = containerElement;\n this.cb = typeof cb === 'function' ? cb : function () { };\n }\n Constructor.prototype.show = function (error) {\n var text = '';\n if (typeof error === 'string') {\n text = error;\n }\n if (typeof error === 'object') {\n var msg = bu.messages[error.code];\n text = msg || error.message;\n this.cb(this, error);\n if (error.code === 'PAYPAL_POPUP_CLOSED') {\n return;\n }\n }\n this.containerEl.style.display = '';\n this.containerEl.innerHTML = text;\n };\n Constructor.prototype.hide = function () {\n this.containerEl.innerHTML = '';\n };\n return new Constructor(callback);\n },\n clientToken: null\n};\n\nbu.console = console;\n\nmodule.exports = bu;\n\n","/* eslint-disable no-use-before-define */\n'use strict';\n\n/* global braintreeUtils braintree $ VenmoSession */\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\n\nvar bu = braintreeUtils;\n\nfunction Constructor(initParams, $btn) {\n var $errorContainer = document.createElement('div');\n $errorContainer.className = 'venmo-error';\n var $loaderContainter = document.createElement('div');\n $loaderContainter.className = 'braintree-loader';\n this.$braintreeVenmoRiskDataInput = document.querySelector('input[name=braintreeVenmoRiskData]');\n\n this.$btn = $btn;\n this.params = initParams;\n\n if (initParams.$errorContainer) {\n $errorContainer = initParams.$errorContainer;\n delete initParams.$errorContainer;\n }\n\n if (initParams.$loaderContainer) {\n $loaderContainter = initParams.$loaderContainer;\n }\n\n $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n\n this.er = bu.createErrorInstance($errorContainer);\n this.loader = loaderInstance($loaderContainter);\n}\n\nConstructor.prototype.createVenmo = function () {\n var that = this;\n var isBrowserSupported;\n that.loader.show();\n\n braintree.client.create({\n authorization: bu.clientToken\n }, function (clientErr, clientInstance) {\n // Stop if there was a problem creating the client.\n // This could happen if there is a network error or if the authorization\n // is invalid.\n if (clientErr) {\n that.er.show(clientErr);\n return;\n }\n\n braintree.dataCollector.create({\n client: clientInstance,\n paypal: true\n }, function (dataCollectorErr, dataCollectorInstance) {\n if (dataCollectorErr) {\n that.er.show(dataCollectorErr);\n return;\n }\n\n if (that.$braintreeVenmoRiskDataInput) {\n that.$braintreeVenmoRiskDataInput.value = dataCollectorInstance.deviceData;\n }\n that.loader.hide();\n });\n\n isBrowserSupported = braintree.venmo.isBrowserSupported({\n allowNewBrowserTab: false,\n allowDesktop: true\n });\n // Verify browser support before proceeding.\n if (isBrowserSupported) {\n braintree.venmo.create({\n client: clientInstance,\n allowNewBrowserTab: false,\n ignoreHistoryChanges: true,\n allowDesktop: true\n }, function (venmoErr, venmoInstance) {\n if (venmoErr) {\n that.er.show(venmoErr);\n return;\n }\n\n // Verify browser support before proceeding.\n if (!venmoInstance.isBrowserSupported()) {\n that.params.deviceNotSupportVenmo();\n that.loader.hide();\n return;\n }\n\n that.$btn.addEventListener('click', function () {\n if (!that.params.venmoAccountPage && !that.params.onClick()) {\n return;\n }\n venmoInstance.tokenize({ processResultsDelay: 10 }, function (tokenizeErr, payload) {\n that.loader.show();\n\n if (tokenizeErr) {\n handleVenmoError(tokenizeErr);\n } else {\n handleVenmoSuccess(payload);\n }\n });\n return;\n });\n });\n } else {\n that.params.deviceNotSupportVenmo();\n that.loader.hide();\n return;\n }\n });\n\n function handleVenmoError(err) {\n that.er.show(err);\n that.loader.hide();\n }\n function handleVenmoSuccess(payload) {\n that.er.hide();\n that.params.onTokenizePayment(payload);\n that.loader.hide();\n }\n};\n\nmodule.exports = {\n init: function (params, $btn) {\n var ins = new Constructor(params, $btn);\n bu.clientToken = params.clientToken;\n return ins.createVenmo();\n }\n};\n","'use strict';\nvar creditCard = require('../braintreeCreditCard');\nvar creditCardFields = require('./creditcardFields');\n\nfunction submitCreditCardForm() {\n $('.js_braintree_addCreditCardForm').submit(function (e) {\n var addCreditCardForm = $(this);\n creditCard.startTokenize(function (result) {\n if (result.error) {\n e.preventDefault();\n return;\n }\n addCreditCardForm.spinner().start();\n $.ajax({\n url: addCreditCardForm.attr('action'),\n type: 'post',\n dataType: 'json',\n data: addCreditCardForm.serialize(),\n success: function (data) {\n addCreditCardForm.spinner().stop();\n if (!data.success) {\n document.querySelector('#braintreeCreditCardErrorContainer').textContent = data.error;\n } else {\n location.href = data.redirectUrl;\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n }\n addCreditCardForm.spinner().stop();\n }\n });\n });\n return false;\n });\n}\n\nfunction initAccountAddCreditCard() {\n creditCardFields.initCreditCardFields();\n submitCreditCardForm();\n}\n\nmodule.exports = {\n initAccountAddCreditCard\n};\n","'use strict';\nvar creditCard = require('../braintreeCreditCard');\n\nvar $continueButton = document.querySelector('button.submit-payment');\n\n/**\n * Gets required Additional shipping info for 3ds\n *\n * @param {Object} orderAddress - User's shipping address\n * @returns {Object} an object with required fields\n */\n\nfunction getShippingAdditionalInfo(orderAddress) {\n return {\n workPhoneNumber: orderAddress.phone,\n shippingGivenName: orderAddress.recipientName.split(' ').slice(0, -1).join(' '),\n shippingSurname: orderAddress.recipientName.split(' ').slice(-1).join(' '),\n shippingPhone: orderAddress.phone,\n shippingAddress: {\n streetAddress: orderAddress.line1,\n extendedAddress: orderAddress.line2,\n locality: orderAddress.city,\n region: orderAddress.state,\n postalCode: orderAddress.postalCode,\n countryCodeAlpha2: orderAddress.countryCode\n }\n };\n}\n\nfunction updateData() {\n $.ajax({\n url: document.querySelector('.js_braintree_getOrderInfoUrl').value,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n data.shippingAdditionalInfo = data.shippingAddress ? getShippingAdditionalInfo(data.shippingAddress) : null;\n creditCard.updateData(data);\n },\n error: function () {\n window.location.reload();\n }\n });\n}\n\nfunction initCreditCardFields() {\n document.querySelectorAll('.js_braintree_creditCardFields').forEach(function (el) {\n var $container = el;\n if (JSON.parse($container.getAttribute('data-is-inited'))) {\n return;\n }\n var config = JSON.parse($container.getAttribute('data-braintree-config'));\n if (typeof config !== 'object' || config === null) {\n // eslint-disable-next-line no-console\n console.error(el, '.js_braintree_creditCardFields has not valid data-braintree-config');\n return;\n }\n config.continueButton = $continueButton;\n creditCard.initFields(config, $container);\n $container.setAttribute('data-is-inited', true);\n });\n}\n\nmodule.exports = {\n initCreditCardFields,\n getShippingAdditionalInfo,\n updateData\n};\n","'use strict';\nvar braintreeUtils = require('../braintreeUtils');\nvar bu = braintreeUtils;\nvar helper = require('../helper');\n\nvar $creditCardList = document.querySelector('#braintreeCreditCardList');\nvar $saveCreditCard = document.querySelector('#braintreeSaveCreditCard');\nvar $cardOwner = document.querySelector('#braintreeCardOwner');\n\nfunction creditcardErrorContainer(errorIns, errorData) {\n var error = errorData;\n if (error.details && error.details.invalidFieldKeys) {\n for (var i = 0; i < error.details.invalidFieldKeys.length; i++) {\n var key = error.details.invalidFieldKeys[i];\n if (key === 'number') {\n document.querySelector('#braintreeCardNumber').classList.add('braintree-hosted-fields-invalid');\n }\n if (key === 'cvv') {\n document.querySelector('#braintreeCvv').classList.add('braintree-hosted-fields-invalid');\n }\n if (key === 'expirationDate') {\n document.querySelector('#braintreeExpirationDate').classList.add('braintree-hosted-fields-invalid');\n }\n }\n }\n if (error.code === 'HOSTED_FIELDS_FIELDS_EMPTY') {\n document.querySelector('#braintreeCardNumber, #braintreeCvv, #braintreeExpirationDate').classList.add('braintree-hosted-fields-invalid');\n }\n}\n\nfunction convertCardTypeToDwFormat(braintreeType) {\n switch (braintreeType) {\n case 'American Express':\n return 'Amex';\n case 'MasterCard':\n return 'Master';\n default:\n return braintreeType;\n }\n}\n\nfunction cardOwnerUpdateClasses() {\n var value = $cardOwner.value;\n if (value.length <= parseInt($cardOwner.getAttribute('maxlength'), 10) && value.length !== 0) {\n $cardOwner.parentNode.classList.add('braintree-hosted-fields-valid');\n } else {\n $cardOwner.parentNode.classList.remove('braintree-hosted-fields-valid');\n $cardOwner.parentNode.classList.remove('braintree-hosted-fields-invalid');\n }\n}\n\nfunction setCardFields(selectedCard, cacheCardFields) {\n cacheCardFields.cardNumbeberPh.innerHTML = selectedCard['data-number'].value;\n cacheCardFields.cardCvvPh.innerHTML = '***';\n cacheCardFields.cardExpirationPh.innerHTML = selectedCard['data-expiration'].value;\n cacheCardFields.cardOwnerPh.innerHTML = selectedCard['data-owner'].value;\n $cardOwner.value = selectedCard['data-owner'].value;\n document.querySelector('#braintreeCardType').value = selectedCard['data-type'].value;\n document.querySelector('#braintreeCardMaskNumber').value = selectedCard['data-number'].value;\n}\n\nfunction showCardElements(cardFields) {\n cardFields.forEach(function (el) {\n el.style.display = '';\n });\n}\n\nfunction hideCardElements(cardFields) {\n cardFields.forEach(function (el) {\n el.style.display = 'none';\n });\n}\n\nfunction getCardFieldsPH() {\n return [\n document.querySelector('#braintreeCardOwnerPh'),\n document.querySelector('#braintreeCardNumberPh'),\n document.querySelector('#braintreeExpirationPh'),\n document.querySelector('#braintreeCvvPh')\n ];\n}\n\nfunction getCardFields() {\n return [\n document.querySelector('#braintreeCardOwner'),\n document.querySelector('#braintreeExpirationDate'),\n document.querySelector('#braintreeCardNumber'),\n document.querySelector('#braintreeCvv')\n ];\n}\n\nfunction cardListChange() {\n var $cardOwnerPh = document.querySelector('#braintreeCardOwnerPh');\n var $cardNumbeber = document.querySelector('#braintreeCardNumber');\n var $cardNumbeberPh = document.querySelector('#braintreeCardNumberPh');\n var $cardCvv = document.querySelector('#braintreeCvv');\n var $cardCvvPh = document.querySelector('#braintreeCvvPh');\n var $cardExpiration = document.querySelector('#braintreeExpirationDate');\n var $cardExpirationPh = document.querySelector('#braintreeExpirationPh');\n var $braintreeSaveCardContainer = document.querySelector('#braintreeSaveCardContainer');\n var $creditCardFieldsContainer = document.querySelector('#braintreeCreditCardFieldsContainer');\n var $braintree3DSecureContainer = document.querySelector('#braintree3DSecureContainer');\n var changeCardOwnerInput;\n var selectedCard;\n var isSaveCard;\n var cacheCardFields = {\n cardNumbeberPh: $cardNumbeberPh,\n cardCvvPh: $cardCvvPh,\n cardExpirationPh: $cardExpirationPh,\n cardOwnerPh: $cardOwnerPh\n };\n var nonce;\n if ($cardOwner) {\n if (typeof (Event) === 'function') {\n changeCardOwnerInput = new Event('changeCardOwnerInput');\n $cardOwner.addEventListener('changeCardOwnerInput', function () {\n 'change';\n }, false);\n } else {\n changeCardOwnerInput = document.createEvent('Event');\n changeCardOwnerInput.initEvent('changeCardOwnerInput', true, true);\n }\n }\n\n if ($creditCardFieldsContainer) {\n $creditCardFieldsContainer.style.display = '';\n }\n if ($braintree3DSecureContainer) {\n $braintree3DSecureContainer.style.display = 'none';\n }\n\n document.querySelector('#braintreeCreditCardErrorContainer').textContent = '';\n\n if ($creditCardList.value === 'newcard') {\n hideCardElements(getCardFieldsPH());\n $cardOwner.value = $cardOwner.getAttribute('data-new-cart-value');\n $cardOwner.dispatchEvent(changeCardOwnerInput);\n $cardOwner.parentNode.classList.remove('braintree-hosted-fields-invalid');\n $cardNumbeber.parentNode.classList.remove('braintree-hosted-fields-invalid');\n $cardCvv.parentNode.classList.remove('braintree-hosted-fields-invalid');\n $cardExpiration.parentNode.classList.remove('braintree-hosted-fields-invalid');\n $cardOwner.disabled = false;\n showCardElements(getCardFields());\n cardOwnerUpdateClasses();\n if ($braintreeSaveCardContainer) {\n $braintreeSaveCardContainer.style.display = 'block';\n $saveCreditCard.checked = true;\n }\n\n document.querySelector('#braintreeCreditCardNonce').value = '';\n document.querySelector('#braintreeCardPaymentMethod').value = $creditCardList[0].getAttribute('data-payment-method');\n } else if ($creditCardList.selectedOptions[0].id === 'braintreeSessionCreditAccount') {\n selectedCard = bu.getSelectedData($creditCardList);\n nonce = selectedCard['data-nonce'].value;\n if ($braintreeSaveCardContainer) {\n $braintreeSaveCardContainer.style.display = 'block';\n isSaveCard = JSON.parse(selectedCard['data-save-card'].value);\n $braintreeSaveCardContainer.checked = isSaveCard;\n $saveCreditCard.checked = isSaveCard;\n }\n\n if (nonce) {\n document.querySelector('#braintreeCreditCardNonce').value = nonce;\n }\n\n setCardFields(selectedCard, cacheCardFields);\n $cardOwner.dispatchEvent(changeCardOwnerInput);\n $cardOwner.style.display = 'none';\n showCardElements(getCardFieldsPH());\n document.querySelector('#braintreeCardPaymentMethod').value = selectedCard['data-payment-method'].value.toUpperCase();\n } else {\n // case for saved card\n selectedCard = bu.getSelectedData($creditCardList);\n setCardFields(selectedCard, cacheCardFields);\n $cardOwner.dispatchEvent(changeCardOwnerInput);\n showCardElements(getCardFieldsPH());\n hideCardElements(getCardFields());\n $cardOwner.disabled = true;\n if ($braintreeSaveCardContainer) {\n $braintreeSaveCardContainer.style.display = 'none';\n $saveCreditCard.checked = false;\n }\n\n document.querySelector('#braintreeCreditCardNonce').value = '';\n document.querySelector('#braintreeCardPaymentMethod').value = selectedCard['data-payment-method'].value.toUpperCase();\n }\n}\n\nfunction initCardListAndSaveFunctionality() {\n if ($creditCardList) {\n $creditCardList.addEventListener('change', function () {\n cardListChange();\n });\n }\n cardListChange();\n}\n\nfunction cardOwnerEvents() {\n $cardOwner.addEventListener('focus', function () {\n $cardOwner.parentNode.classList.add('braintree-hosted-fields-focused');\n });\n $cardOwner.addEventListener('blur', function () {\n $cardOwner.parentNode.classList.remove('braintree-hosted-fields-focused');\n });\n $cardOwner.addEventListener('keyup', function () {\n document.querySelector('#braintreeCardOwner').setAttribute('data-new-cart-value', $cardOwner.value);\n cardOwnerUpdateClasses();\n });\n $cardOwner.addEventListener('change', function () {\n cardOwnerUpdateClasses();\n });\n}\n\n/*\n Update Session account\n**/\nfunction updateSessionAccount() {\n var sessionOption = helper.getSessionAccountOption({\n querySelector: '#braintreeCreditCardList',\n id: 'braintreeSessionCreditAccount'\n });\n if (!sessionOption) { return; }\n\n sessionOption.selected = false;\n sessionOption.classList.add('used-creditcard-account-hide');\n sessionOption.classList.remove('used-creditcard-account');\n sessionOption.text = '';\n sessionOption.setAttribute('data-session-account', false);\n sessionOption.setAttribute('data-owner', false);\n sessionOption.setAttribute('data-expiration', false);\n sessionOption.setAttribute('data-number', false);\n sessionOption.setAttribute('data-nonce', false);\n sessionOption.setAttribute('data-type', false);\n sessionOption.setAttribute('data-save-card', false);\n}\n\n/*\n Check if creditcard method was used and change appearance of creditcard tab\n**/\nfunction removeSessionNonce() {\n updateSessionAccount();\n document.querySelector('#braintreeCreditCardNonce').value = '';\n document.querySelector('#cardNumber').value = '';\n document.querySelector('#braintreeCardMaskNumber').value = '';\n document.querySelector('#braintreeCardExpirationYear').value = '';\n document.querySelector('#braintreeCardExpirationMonth').value = '';\n\n var defaultOption = helper.getOptionByDataDefault('#braintreeCreditCardList');\n if (defaultOption) {\n defaultOption.selected = true;\n var selectedCard = bu.getSelectedData($creditCardList);\n var cardFieldsPH = {\n cardNumbeberPh: document.querySelector('#braintreeCardNumberPh'),\n cardCvvPh: document.querySelector('#braintreeCvvPh'),\n cardExpirationPh: document.querySelector('#braintreeExpirationPh'),\n cardOwnerPh: document.querySelector('#braintreeCardOwnerPh')\n };\n setCardFields(selectedCard, cardFieldsPH);\n $cardOwner.disabled = true;\n $saveCreditCard.checked = false;\n document.querySelector('#braintreeSaveCardContainer').style.display = 'none';\n } else {\n hideCardElements(getCardFieldsPH());\n showCardElements(getCardFields());\n var ccAccount = document.querySelector('.form-group.braintree_used_creditcard_account');\n ccAccount.classList.remove('used-creditcard-account');\n ccAccount.classList.add('used-creditcard-account-hide');\n }\n\n [].forEach.call(document.querySelector('#braintreeCreditCardList'), function (el) {\n if (el.style.display === 'none') el.style.display = 'block';\n });\n}\n\nmodule.exports = {\n creditcardErrorContainer,\n convertCardTypeToDwFormat,\n cardOwnerEvents,\n initCardListAndSaveFunctionality,\n removeSessionNonce,\n showCardElements,\n hideCardElements,\n setCardFields,\n getCardFieldsPH,\n getCardFields,\n updateSessionAccount\n};\n","'use strict';\n\nvar braintreeUtils = require('../braintreeUtils');\nvar creditCard = require('../braintreeCreditCard');\nvar helper = require('../helper');\nvar creditcardHelper = require('../creditcard/creditcardHelper');\n\nvar $continueButton = document.querySelector('button.submit-payment');\nvar $creditCardList = document.querySelector('#braintreeCreditCardList');\n\nfunction doNotAllowSubmitForm() {\n helper.continueButtonToggle(false);\n $continueButton.setAttribute('data-is-allow-submit-form', false);\n}\n\nfunction hide3DSecureContainer() {\n document.querySelector('#braintreeCreditCardFieldsContainer').style.display = '';\n document.querySelector('#braintreeSaveCardContainer').style.display = '';\n document.querySelector('#braintree3DSecureContainer').style.display = 'none';\n doNotAllowSubmitForm();\n}\n\nfunction updateAccountsList() {\n var sessionAccount = document.querySelector('#braintreeSessionCreditAccount');\n var defaultOption = helper.getOptionByDataDefault('#braintreeCreditCardList');\n if ($creditCardList && $creditCardList.value !== 'newcard') {\n if (!sessionAccount.selected) {\n creditcardHelper.updateSessionAccount();\n }\n return;\n }\n\n var creditCardAccount = document.querySelector('.form-group.braintree_used_creditcard_account');\n var newCCAccount = document.getElementById('newCardAccount');\n if (!creditCardAccount.classList.contains('used-creditcard-account')) {\n creditCardAccount.classList.remove('used-creditcard-account-hide');\n creditCardAccount.classList.add('used-creditcard-account');\n sessionAccount.classList.remove('used-creditcard-account-hide');\n sessionAccount.classList.add('used-creditcard-account');\n } else {\n sessionAccount.classList.remove('used-creditcard-account-hide');\n sessionAccount.classList.add('used-creditcard-account');\n }\n\n if (newCCAccount.selected) {\n var isSavedCard = document.querySelector('#braintreeSaveCreditCard') ? document.querySelector('#braintreeSaveCreditCard').checked : false;\n sessionAccount.setAttribute('data-session-account', true);\n sessionAccount.setAttribute('data-save-card', isSavedCard);\n sessionAccount.textContent = sessionAccount.getAttribute('data-type') + ' ' +\n sessionAccount.getAttribute('data-number') + ' ' +\n sessionAccount.getAttribute('data-expiration') + ' ' +\n document.querySelector('#braintreeCardOwner').getAttribute('data-new-cart-value');\n sessionAccount.setAttribute('data-nonce', document.querySelector('#braintreeCreditCardNonce').value);\n\n newCCAccount.removeAttribute('selected');\n sessionAccount.selected = true;\n }\n\n if (!defaultOption) {\n var selectedCard = braintreeUtils.getSelectedData($creditCardList);\n var cardFieldsPH = {\n cardOwnerPh: document.querySelector('#braintreeCardOwnerPh'),\n cardNumbeberPh: document.querySelector('#braintreeCardNumberPh'),\n cardCvvPh: document.querySelector('#braintreeCvvPh'),\n cardExpirationPh: document.querySelector('#braintreeExpirationPh')\n };\n creditcardHelper.setCardFields(selectedCard, cardFieldsPH);\n }\n\n creditCard.clearHostedFields();\n creditcardHelper.showCardElements(creditcardHelper.getCardFieldsPH());\n creditcardHelper.hideCardElements(creditcardHelper.getCardFields());\n helper.continueButtonToggle(false);\n}\n\nfunction allowSubmitForm(event) {\n $continueButton.setAttribute('data-is-allow-submit-form', true);\n updateAccountsList();\n event.target.click();\n}\n\nfunction isActiveCreditCardTab() {\n return document\n .querySelector('.payment-options[role=tablist] a[data-toggle=\"tab\"][href=\"#creditcard-content\"]')\n .classList\n .contains('active');\n}\n\nfunction makeCreditCardPayment(event) {\n if (!isActiveCreditCardTab()) {\n return;\n }\n\n if (JSON.parse($continueButton.getAttribute('data-is-allow-submit-form')) && creditCard.isFormValid()) {\n return;\n }\n\n if ($creditCardList) {\n var is3dSecureEnabled = JSON.parse(document.querySelector('.js_braintree_creditCardFields').getAttribute('data-braintree-config')).is3dSecureEnabled;\n if ($creditCardList && $creditCardList.value !== 'newcard') {\n if (!is3dSecureEnabled) {\n allowSubmitForm(event);\n return;\n }\n\n if ($creditCardList.value === 'sessioncard') {\n allowSubmitForm(event);\n return;\n }\n\n var selectedCard = braintreeUtils.getSelectedData($creditCardList);\n var getNonceUrl = $creditCardList.getAttribute('data-get-payment-nonce-url');\n var cardUUID = selectedCard['data-id'].value;\n $.get(`${getNonceUrl}?id=${cardUUID}`, function (response) {\n creditCard.startTokenize(function (result) {\n if (!result.error) {\n allowSubmitForm(event);\n }\n }, response);\n });\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n creditCard.startTokenize(function (result) {\n if (!result.error) allowSubmitForm(event);\n });\n event.preventDefault();\n event.stopPropagation();\n}\n\nmodule.exports = {\n doNotAllowSubmitForm,\n hide3DSecureContainer,\n makeCreditCardPayment\n};\n","'use strict';\n\nvar googlepay = require('../braintreeGooglepay');\nvar loaderInstance = require('../loaderHelper');\n\nfunction submitAddGooglePayAccountForm() {\n $('.js_braintree_addGooglePayAccountForm').submit(function () {\n var $form = $(this);\n var $btFormErrorContainer = document.querySelector('#braintreeFormErrorContainer');\n $form.spinner().start();\n\n $.post($form.attr('action'), $form.serialize())\n .done(function (data) {\n $form.spinner().stop();\n if (!data.success) {\n $btFormErrorContainer.style.display = 'block';\n $btFormErrorContainer.textContent = data.error;\n } else {\n location.href = data.redirectUrl;\n }\n })\n .fail(function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n }\n $form.spinner().stop();\n });\n return false;\n });\n}\n\nfunction initAddGooglePayAccount() {\n var $btn = document.querySelector('.js_braintree_accountgooglepay_button');\n var $googlepayNonce = document.querySelector('#braintreeGooglePayNonce');\n var $btGooglePayLoader = document.querySelector('.braintreeGooglepayLoader');\n var googlepayIns;\n var loader = loaderInstance($btGooglePayLoader);\n\n if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n return;\n }\n var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n\n if (typeof config !== 'object' || config === null) {\n // eslint-disable-next-line no-console\n console.error($btn, 'not valid data-braintree-config');\n return;\n }\n loader.show();\n\n config.onTokenizePayment = function (data, result) {\n var $btFormErrorContainer = document.querySelector('#braintreeFormErrorContainer');\n if ($btFormErrorContainer.style.display === 'block') {\n $btFormErrorContainer.style.display = 'none';\n $btFormErrorContainer.textContent = '';\n }\n if (result.type === 'PayPalAccount') {\n $btFormErrorContainer.style.display = 'block';\n $btFormErrorContainer.textContent = config.messages.saving_paypal_account_error;\n\n return;\n }\n\n $googlepayNonce.value = result.nonce;\n\n document.querySelector('.braintreeGooglePayBtn').click();\n };\n googlepayIns = googlepay.init(config, $btn);\n googlepayIns.createGooglepay();\n $btn.setAttribute('data-is-inited', true);\n submitAddGooglePayAccountForm();\n}\n\nmodule.exports = {\n initAddGooglePayAccount\n};\n/* eslint no-use-before-define: 2 */ // --> ON\n","'use strict';\nvar helper = require('../helper');\n\nvar $googlepayContent = document.querySelector('.js_braintree_googlepayContent');\nvar $btGooglepayAccountsList = document.querySelector('#braintreeGooglepayAccountsList');\nvar $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\nvar $saveGooglePayAccountCheckbox = document.querySelector('#braintreeSaveGooglepayAccount');\nvar $googlepayTab = document.querySelector('.googlepay-tab');\n\nfunction showGooglepayAccount() {\n var $sessionAccount = document.querySelector('#sessionGPAccount');\n $sessionAccount.classList.remove('used-googlepay-account-hide');\n $sessionAccount.classList.add('used-googlepay-account');\n\n var $gpAccount = document.querySelector('.form-group.braintree_used_googlepay_account');\n $gpAccount.classList.remove('used-googlepay-account-hide');\n $gpAccount.classList.add('used-googlepay-account');\n\n $googlepayButton.style.display = 'none';\n $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', false);\n helper.continueButtonToggle(false);\n}\n\nfunction hideShowButtons() {\n if ($btGooglepayAccountsList.value === 'newaccount') {\n $googlepayButton.style.display = 'block';\n if ($googlepayTab.classList.contains('active')) {\n helper.continueButtonToggle(true);\n }\n $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', true);\n if ($saveGooglePayAccountCheckbox) {\n $saveGooglePayAccountCheckbox.checked = true;\n }\n } else {\n $googlepayButton.style.display = 'none';\n helper.continueButtonToggle(false);\n $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', false);\n if ($saveGooglePayAccountCheckbox) {\n $saveGooglePayAccountCheckbox.checked = JSON.parse(document.querySelector('#sessionGPAccount').getAttribute('data-save'));\n }\n }\n}\n\nfunction createGooglepayBillingAddressData(data) {\n var billingData = data.paymentMethodData.info.billingAddress;\n var billingAddress = {};\n var recipientName = billingData.name.split(' ');\n\n billingAddress.firstName = recipientName[0];\n billingAddress.lastName = recipientName[1];\n billingAddress.phone = billingData.phoneNumber;\n billingAddress.countryCodeAlpha2 = billingData.countryCode;\n billingAddress.streetAddress = billingData.address1;\n billingAddress.extendedAddress = billingData.address2;\n billingAddress.locality = billingData.locality;\n billingAddress.stateCode = billingData.administrativeArea;\n billingAddress.postalCode = billingData.postalCode;\n billingAddress.email = data.email;\n\n return billingAddress;\n}\n\nfunction createGooglepayShippingAddressData(shippingData) {\n var shippingAddress = {};\n var recipientName = shippingData.name.split(' ');\n\n shippingAddress.firstName = recipientName[0];\n shippingAddress.lastName = recipientName[1];\n shippingAddress.phone = shippingData.phoneNumber;\n shippingAddress.countryCodeAlpha2 = shippingData.countryCode;\n shippingAddress.streetAddress = shippingData.address1;\n shippingAddress.extendedAddress = shippingData.address2;\n shippingAddress.locality = shippingData.locality;\n shippingAddress.region = shippingData.administrativeArea;\n shippingAddress.postalCode = shippingData.postalCode;\n\n return shippingAddress;\n}\n\n/*\n Remove method was used and change appearance of googlepay tab\n**/\nfunction removeSessionNonce() {\n var $gpAccount = document.querySelector('.form-group.braintree_used_googlepay_account');\n $gpAccount.classList.remove('used-googlepay-account');\n $gpAccount.classList.add('used-googlepay-account-hide');\n\n var $sessionAccount = document.querySelector('#sessionGPAccount');\n $sessionAccount.classList.add('used-googlepay-account-hide');\n $sessionAccount.classList.remove('used-googlepay-account');\n $sessionAccount.value = '';\n $sessionAccount.text = '';\n $sessionAccount.setAttribute('data-session-account', false);\n $sessionAccount.setAttribute('data-save', false);\n\n document.querySelector('#braintreeGooglePayNonce').value = '';\n document.querySelector('#braintreeGooglePayBillingAddress').value = '';\n document.querySelector('#braintreeGooglepayPaymentType').value = '';\n document.querySelector('#braintreeGooglePayDeviceData').value = '';\n\n document.querySelector('#newGPAccount').selected = true;\n hideShowButtons();\n}\n\nmodule.exports = {\n showGooglepayAccount,\n createGooglepayBillingAddressData,\n createGooglepayShippingAddressData,\n removeSessionNonce,\n hideShowButtons\n};\n","'use strict';\nvar googlepay = require('../braintreeGooglepay');\nvar { hideShowButtons, createGooglepayBillingAddressData, createGooglepayShippingAddressData, showGooglepayAccount } = require('./googlepayHelper');\nvar { removeActiveSessionPayment, createPaymentFormData, showCartErrorMsg, updateBillingFormValues } = require('../helper');\n\nvar $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\nvar $btGooglepayAccountsList = document.querySelector('#braintreeGooglepayAccountsList');\nvar $googlepayOnCart = document.querySelector('.braintree-cart-google-button');\nvar $googlepayNonce = document.querySelector('#braintreeGooglePayNonce');\nvar $googlepayCardDescription = document.querySelector('#braintreeGooglePayCardDescription');\nvar $braintreeGooglepayPaymentType = document.querySelector('#braintreeGooglepayPaymentType');\nvar $googlePayBillingAddress = document.querySelector('#braintreeGooglePayBillingAddress');\n\nfunction makeGooglepayPayment(continueButton) {\n var googlepayIns;\n var config = JSON.parse($googlepayButton.getAttribute('data-braintree-config'));\n if (typeof config !== 'object' || config === null) {\n // eslint-disable-next-line no-console\n console.error($googlepayButton, 'not valid data-braintree-config');\n }\n\n if ($btGooglepayAccountsList) {\n $btGooglepayAccountsList.addEventListener('change', function () {\n hideShowButtons();\n });\n hideShowButtons();\n\n if ($googlepayCardDescription.value === 'GooglePay') {\n $googlepayCardDescription.value = $btGooglepayAccountsList.selectedOptions[0].label;\n }\n }\n\n config.onTokenizePayment = function (data, result) {\n var deviceData = document.querySelector('input[name=braintreeGooglePayDeviceDataInput]').value;\n var googlepayNonce = result.nonce;\n var googlepayPaymentType = result.type;\n var googlepayCardDescription = result.details.cardType + ' ' + result.details.lastFour;\n\n removeActiveSessionPayment();\n\n if (data) {\n var billingAddressData = createGooglepayBillingAddressData(data);\n\n if ($googlepayOnCart) {\n var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\n var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\n var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\n var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\n var csrfToken = document.querySelector('.braintree-cart-buttons-wrap #csrf_token');\n var shippingAddressData = createGooglepayShippingAddressData(data.shippingAddress);\n var googlepayCheckoutFormData = createPaymentFormData(checkoutFormFields, {\n firstName: billingAddressData.firstName,\n lastName: billingAddressData.lastName,\n address1: billingAddressData.streetAddress,\n address2: billingAddressData.extendedAddress || '',\n city: billingAddressData.locality,\n postalCode: billingAddressData.postalCode,\n stateCode: billingAddressData.stateCode,\n country: billingAddressData.countryCodeAlpha2,\n email: billingAddressData.email,\n phone: billingAddressData.phone,\n paymentMethod: config.paymentMethodName\n });\n\n googlepayCheckoutFormData.append(csrfToken.name, csrfToken.value);\n googlepayCheckoutFormData.append('braintreeGooglePayNonce', googlepayNonce);\n googlepayCheckoutFormData.append('braintreeGooglePayDeviceData', deviceData);\n googlepayCheckoutFormData.append('braintreeGooglePayCardDescription', googlepayCardDescription);\n googlepayCheckoutFormData.append('braintreeGooglepayPaymentType', googlepayPaymentType);\n googlepayCheckoutFormData.append('braintreeSaveGooglepayAccount', true);\n googlepayCheckoutFormData.append('braintreeGooglePayShippingAddress', JSON.stringify(shippingAddressData) || '{}');\n\n $.ajax({\n type: 'POST',\n url: checkoutFromCartUrl,\n data: googlepayCheckoutFormData,\n contentType: false,\n processData: false,\n success: function (res) {\n if (res.error) {\n var errorMessage = '';\n if (res.fieldErrors.length) {\n res.fieldErrors.forEach(function (error, index) {\n var keys = Object.keys(error);\n if (keys.length) {\n errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${res.fieldErrors[index][keys[index]]}. `;\n }\n });\n showCartErrorMsg(errorMessage);\n }\n\n if (res.serverErrors.length) {\n res.serverErrors.forEach(function (error) {\n errorMessage += `${error}. `;\n });\n showCartErrorMsg(errorMessage);\n }\n\n if (res.cartError) {\n window.location.href = res.redirectUrl;\n }\n return;\n }\n\n sessionStorage.setItem('pageState', 'cart');\n googlepayIns.loader.hide();\n window.location.href = placeOrderUrl;\n },\n error: function (err) {\n if (err && err.redirectUrl) {\n window.location.href = err.redirectUrl;\n }\n }\n });\n\n return;\n }\n\n $googlepayNonce.value = googlepayNonce;\n $googlepayCardDescription.value = googlepayCardDescription;\n $braintreeGooglepayPaymentType.value = googlepayPaymentType;\n\n // Updating Storefront Billing Form data with GooglePay Billing\n var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\n storeFrontBillingData.dwfrm_billing_addressFields_firstName = billingAddressData.firstName;\n storeFrontBillingData.dwfrm_billing_addressFields_lastName = billingAddressData.lastName;\n storeFrontBillingData.dwfrm_billing_addressFields_address1 = billingAddressData.streetAddress;\n storeFrontBillingData.dwfrm_billing_addressFields_address2 = billingAddressData.extendedAddress || '';\n storeFrontBillingData.dwfrm_billing_addressFields_city = billingAddressData.locality;\n storeFrontBillingData.dwfrm_billing_addressFields_postalCode = billingAddressData.postalCode;\n storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = billingAddressData.stateCode;\n storeFrontBillingData.dwfrm_billing_addressFields_country = billingAddressData.countryCodeAlpha2;\n storeFrontBillingData.dwfrm_billing_contactInfoFields_email = billingAddressData.email;\n storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = billingAddressData.phone;\n\n $googlePayBillingAddress.value = JSON.stringify(billingAddressData);\n\n updateBillingFormValues(storeFrontBillingData);\n }\n\n // selector \"new GooglePay account\" in dropdown list\n var newGPAccount = document.getElementById('newGPAccount');\n var sessionGPAccount = document.querySelector('#sessionGPAccount');\n\n // Selecting Google Pay Session Account\n sessionGPAccount.text = $googlepayCardDescription.value;\n newGPAccount.removeAttribute('selected');\n sessionGPAccount.selected = true;\n sessionGPAccount.setAttribute('data-session-account', 'true');\n\n showGooglepayAccount();\n continueButton.click();\n };\n\n googlepayIns = googlepay.init(config, $googlepayButton);\n googlepayIns.createGooglepay();\n\n function googlepayUpdateAmount() { // eslint-disable-line require-jsdoc\n googlepayIns.loader.show();\n $.ajax({\n url: config.getOrderInfoUrl,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n googlepayIns.loader.hide();\n googlepayIns.updateAmount(data.amount);\n },\n error: function () {\n window.location.reload();\n }\n });\n }\n\n $('body').on('checkout:updateCheckoutView', googlepayUpdateAmount);\n $('body').on('braintree:updateCartTotals', googlepayUpdateAmount);\n googlepayUpdateAmount();\n}\n\nmodule.exports = {\n makeGooglepayPayment\n};\n","'use strict';\nvar $continueButton = $('button.submit-payment');\n\nfunction initWathcherCartUpdate() {\n var $grantTotal = document.querySelector('.grand-total');\n if ($grantTotal) {\n var currentGrantTotalValue = $grantTotal.textContent;\n $('body').on('cart:update', function () {\n var newGrantTotalValue = $grantTotal.textContent;\n if (newGrantTotalValue !== '' && newGrantTotalValue !== currentGrantTotalValue) {\n currentGrantTotalValue = newGrantTotalValue;\n var updateCartTotals = document.createEvent('Event');\n updateCartTotals.initEvent('updateCartTotals', true, true);\n document.querySelector('body').addEventListener('updateCartTotals', function () {\n 'braintree:updateCartTotals';\n }, false);\n document.querySelector('body').dispatchEvent(updateCartTotals);\n }\n });\n }\n}\n\nfunction continueButtonToggle(flag) {\n var stage = window.location.hash.substring(1);\n if (stage === 'placeOrder' || stage === 'shipping' || stage === null || stage === '') {\n return;\n }\n if (flag) {\n $continueButton.hide();\n } else {\n $continueButton.show();\n }\n}\n\n\nfunction paymentMethodChangeHandle(currentTab) {\n document.querySelectorAll('.payment-options[role=tablist] a[data-toggle=\"tab\"]').forEach(function (el) {\n var $tabContent = document.querySelector(el.getAttribute('href'));\n\n if (el === currentTab) {\n $tabContent.querySelectorAll('input, textarea, select').forEach(function (tab) {\n tab.removeAttribute('disabled', 'disabled');\n });\n $tabContent.querySelectorAll('select.no-disable').forEach(function (tab) {\n tab.setAttribute('disabled', 'disabled');\n });\n continueButtonToggle(JSON.parse($tabContent.getAttribute('data-is-hide-continue-button')));\n } else {\n $tabContent.querySelectorAll('input, textarea, select').forEach(function (tab) {\n tab.setAttribute('disabled', 'disabled');\n });\n }\n });\n}\n\nfunction getPaymentMethodToLowerCase(paymentMethodName) {\n var paymentMethod = paymentMethodName.split('_');\n if (paymentMethod.length === 1) {\n return paymentMethodName;\n }\n paymentMethod.forEach(function (element, index) {\n paymentMethod[index] = element.charAt(0) + element.slice(1).toLocaleLowerCase();\n });\n return paymentMethod[1] ?\n paymentMethod[0] + ' ' + paymentMethod[1] :\n paymentMethod[0];\n}\n\nfunction updateCheckoutView(e, data) {\n var $paymentSummary = document.querySelector('.summary-details .braintree-payment-details');\n var htmlToAppend = '';\n var order = data.order;\n\n if (order.billing.payment && order.billing.payment.selectedPaymentInstruments\n && order.billing.payment.selectedPaymentInstruments.length > 0) {\n htmlToAppend += '