{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/helper.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/api.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/models/alertHandler.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/loader.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/models/sessionStorage.js","webpack:///../app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///../app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/models/buttons/payPalBase.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/models/buttons/payPalExpress.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/pdp/registered/initPaypalBAButton.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/models/buttons/payPalProduct.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/pdp/pdpHelper.js","webpack:///../link_paypal/cartridges/int_paypal/cartridge/client/default/js/pdp/pdp.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","defaultStyle","color","shape","layout","label","tagline","base","require","getPaypalButtonStyle","button","config","getAttribute","JSON","parse","style","error","processPayNowConfirmForm","redirectUrl","splitUrl","split","url","paramsString","searchParams","URLSearchParams","param","form","$","appendTo","document","body","attr","method","action","orderID","orderToken","createConfirmForm","submit","createHTMLElementWithText","tag","text","element","createElement","textContent","updateCheckoutView","data","$paymentSummary","querySelector","order","payment","billing","htmlToAppend","classList","contains","remove","add","selectedPaymentInstruments","length","html","forEach","selectedPaymentInstrument","paymentMethodName","paymentMethod","paymnetMethodId","fundingSource","isVenmoUsed","window","paypalConstants","PAYMENT_METHOD_ID_VENMO","getElementById","PP_DEBIT_CREDIT_PAYMENT_TYPE","push","index","charAt","slice","toLocaleLowerCase","join","PAYMENT_METHOD_ID_PAYPAL","maskedCreditCardNumber","accountHolderResource","paypalAccountHolder","type","priceTotal","amount","appendHtml","innerHTML","appendChild","handleValidationAddressResult","status","test","responseText","showError","showPaypalButton","paypalButton","hidePaypalButton","isProductZeroAmount","$element","getMiniCartQuantity","parseInt","initPaypalButtonBehaviorOnPvp","isProductReadyToOrderElement","isProductReadyToOrder","addToCartButton","disabled","on","initPayPalBtnBehaviorOnSet","miniCartQuantityElement","addToCartButtons","querySelectorAll","miniCartQuantity","btn","parentElement","prices","isWrongAmount","Array","from","some","price","parseFloat","event","target","getPaymentMethodName","getCsrfToken","getUrlWithCsrfToken","urlInstance","URL","location","origin","append","toString","addProductToCart","ppBtnSelector","getOptions","productContainer","stringify","map","elOption","selectedValue","selectedOption","concat","optionId","selectedValueId","ppBtn","bundleItems","setItems","ppBtnContainer","closest","isGlobalButton","className","pid","getPidValue","quantity","items","item","innerText","childProducts","qty","getQuantitySelected","options","pidsObj","ajax","val","async","responseJSON","removeAllProductsFromCart","paypalUrls","fetch","headers","finally","spinner","stop","loader","loaderInstance","alertHandler","updateOrderData","isAddressNeedChange","arguments","undefined","show","success","hide","href","placeOrderStage","err","errorMsg","transactionExpired","reload","getBillingAgreementToken","isCartFlow","isSkipShippingAddress","createBillingAgreementToken","then","createBillingAgreementCall","createBillingAgreement","contentType","createCartBillingFormData","fieldsData","$paypalButton","cartBillingFormData","FormData","cartBillingFields","entries","entry","_entry","_slicedToArray","field","_typeof","returnFromCart","processData","validateStaticImageAddress","paypalStaticImage","validateStaticImage","email","formFields","response","json","catch","finishPayNowFlow","$usedPaymentMethod","pmName","savePaypalDefaultAddress","addressObject","isAccountPage","finishPayNowPayment","usedPaymentMethod","helper","_ref","getPaypalOrderId","id","iterator","constructor","_defineProperties","e","configurable","writable","_toPropertyKey","toPrimitive","TypeError","String","Number","_toPrimitive","AlertHandlerModel","a","_classCallCheck","this","$flashMessagesContainer","$alertTemplate","alertMessage","alertType","$alertContainer","cloneNode","insertAdjacentHTML","errorMessage","createAlertMessage","FLASH_MESSAGE_DANGER","warningMessage","FLASH_MESSAGE_WARNING","infoMessage","FLASH_MESSAGE_INFO","containerElement","Constructor","containerEl","display","SessionStorageModel","sessionStorage","setItem","getItem","removeItem","clear","setActiveBillingPmTab","ACTIVE_TAB","getActiveBillingPmTab","focusHelper","$el","hasClass","find","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","attributeSelect","selectedValueUrl","$productContainer","parseHtml","$html","parseHTML","footer","children","chooseBonusProducts","bonusUrl","start","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","dataType","parsedHtml","renderedTemplate","empty","enterDialogMessage","closeButtonText","modal","$elOption","urlValue","toArray","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","siblings","focus","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","focusParams","containerSelector","firstElementSelector","lastElementSelector","setTabNextFocus","colorAttribute","preventDefault","selectAttribute","currentTarget","availability","addToCart","setPids","trigger","each","messageType","newBonusDiscountLineItem","keys","message","setTimeout","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","parents","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeClass","addClass","removeBonusProduct","$selected","count","enableBonusProductSelection","product","readyToOrder","available","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","productId","msgSuccess","keyCode","firstFocusableEl","lastFocusableEl","is","nextToLastElementSelector","linkElements","shiftKey","api","$loaderContainer","$usedPaymentMethodName","disableFunds","that","PayPalBaseModel","payPalBtnSelector","$payPalBtnContainer","isPayNowFlowEnabled","paypalPreferences","usedPaymentMethodName","isBtnEligible","processPayNowFlow","sessionStorageInstance","processGenericBtnFlow","$selectedAccount","selected","click","onClick","paypal","FUNDING","CARD","VENMO","PAYPAL","createOrder","onApprove","indexOf","onCancel","onError","FLASH_MESSAGE_ERROR_INTERNAL_SERVER","renderButtonMarks","Marks","render","renderPaymentFields","PaymentFields","showButtonTab","fs","createBtnGeneralOption","initBtnsForPayPalTab","btnProperty","_this","eligibleFundingSources","getFundingSources","filter","Buttons","isEligible","PAYPAL_FS","isTabShown","includes","CREDIT","el","assign","initBtnByFundingSource","btnInitResult","initPayPalBtn","PayPalExpressModel","cartPage","paypalInstance","selector","token","fail","close","payer","billingAgreementID","billingAgreementPayerEmail","payer_info","errorResponse","errorName","initPaypalBAButton","createBillingAgreementCallback","onClose","PayPalProductModel","hidePayPalButton","$paypalPDPButton","isZeroPdpProductPrice","$productPriceSelector","isAddToCartButtonDisabled","isBasketNotEmpty","$miniCartQuantitySelector","handlePayPalButtonOnUpdate","addToCartButtonDisabled","zeroProductPrice","basketNotEmpty","showPayPalButton","applyPaypalButtonBehavior","Boolean","initPaypalButtonBehaviorOnPdp","ready","paypalButtonContainers","isBAEnabled","paypalStaticImageContainers","isNeed","container","staticImage","addEventListener","loaderContainer","result","cart","Error","billingAgreementEnabled","ppButton","payPalProductInstance"],"mappings":"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","file":"int_paypal_pdp.min.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 = 28);\n","'use strict';\n\nconst defaultStyle = {\n color: 'gold',\n shape: 'rect',\n layout: 'vertical',\n label: 'paypal',\n tagline: false\n};\n\nconst HIDE_CLASS = 'none';\nconst PRODUCT_DETAIL_CLASS = '.product-detail';\nconst PDP_PRICE_VALUE_CLASS = '.price .sales .value';\nconst base = require('base/product/base');\n\n/**\n * Gets paypal button styles\n * @param {Element} button - button element\n * @returns {Object} with button styles or if error appears with default styles\n */\nfunction getPaypalButtonStyle(button) {\n try {\n const config = button.getAttribute('data-paypal-button-config');\n\n if (config) {\n const buttonConfigs = JSON.parse(config);\n\n return buttonConfigs.style;\n }\n\n return {\n style: defaultStyle\n };\n } catch (error) {\n return {\n style: defaultStyle\n };\n }\n}\n\n/**\n * Creates a redirecting form to Order-Confirm endpoint\n * @param {Object} param The helping object for creating a from\n * @returns {Object} form element\n */\nfunction createConfirmForm(param) {\n const form = $('
')\n .appendTo(document.body)\n .attr({\n method: 'POST',\n action: param.url\n });\n\n $('')\n .appendTo(form)\n .attr({\n name: 'orderID',\n value: param.orderID\n });\n\n $('')\n .appendTo(form)\n .attr({\n name: 'orderToken',\n value: param.orderToken\n });\n\n return form;\n}\n\n/**\n * Prepare and submits form in order to confirm order with Lpm\n * @param {string} redirectUrl Redirect Url\n */\nfunction processPayNowConfirmForm(redirectUrl) {\n const splitUrl = redirectUrl.split('?');\n const url = splitUrl[0];\n const paramsString = splitUrl[1];\n const searchParams = new URLSearchParams(paramsString);\n const formParam = {\n orderID: searchParams.get('orderID'),\n orderToken: searchParams.get('orderToken'),\n url: url\n };\n\n const form = createConfirmForm(formParam);\n\n form.submit();\n}\n\n/**\n * Return payment method name in lovercase\n * @param {string} paymentMethodName Payment method name\n * @returns {string} Paymnet method name\n */\nfunction getPaymentMethodToLowerCase(paymentMethodName) {\n const paymentMethod = paymentMethodName.split('_');\n\n if (paymentMethod.length === 1) {\n return paymentMethodName;\n }\n\n paymentMethod.forEach(function(element, index) {\n paymentMethod[index] = element.charAt(0) + element.slice(1).toLocaleLowerCase();\n });\n\n return paymentMethod[1] ? [paymentMethod[0], paymentMethod[1]].join(' ') : paymentMethod[0];\n}\n\n/**\n * Creates an HTML element with the specified tag and text.\n * @param {string} tag - The tag name for the new element.\n * @param {string} text - The text content for the new element.\n * @returns {HTMLElement} A new HTML element with the specified tag and text.\n */\nfunction createHTMLElementWithText(tag, text) {\n const element = document.createElement(tag);\n\n element.textContent = text;\n\n return element;\n}\n\n/**\n * Updates html div view\n * @param {Object} order Order object\n * @param {Array} html Array of HTML elements\n * @returns {Array} Updated array of HTML elements\n */\nfunction appendHtml(order, html) {\n const payment = order.billing.payment;\n\n payment.selectedPaymentInstruments.forEach(function(selectedPaymentInstrument) {\n const paymnetMethodId = selectedPaymentInstrument.paymentMethod;\n const fundingSource = selectedPaymentInstrument.fundingSource;\n const isVenmoUsed = fundingSource === window.paypalConstants.PAYMENT_METHOD_ID_VENMO\n && document.getElementById('venmo-content').classList.contains('active');\n\n if (fundingSource === window.paypalConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE) {\n html.push(createHTMLElementWithText('div', window.paypalConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE));\n } else if (isVenmoUsed) {\n html.push(createHTMLElementWithText('div', window.paypalConstants.PAYMENT_METHOD_ID_VENMO));\n } else {\n html.push(createHTMLElementWithText('div', getPaymentMethodToLowerCase(paymnetMethodId)));\n }\n\n if (paymnetMethodId !== window.paypalConstants.PAYMENT_METHOD_ID_PAYPAL\n && selectedPaymentInstrument.maskedCreditCardNumber) {\n html.push(createHTMLElementWithText('div', selectedPaymentInstrument.maskedCreditCardNumber));\n }\n\n if (paymnetMethodId === window.paypalConstants.PAYMENT_METHOD_ID_PAYPAL) {\n const text = [selectedPaymentInstrument.accountHolderResource, selectedPaymentInstrument.paypalAccountHolder].join('');\n\n html.push(createHTMLElementWithText('div', text));\n }\n\n if (selectedPaymentInstrument.type) {\n html.push(createHTMLElementWithText('div', selectedPaymentInstrument.type));\n }\n\n html.push(createHTMLElementWithText('div', [order.priceTotal.charAt(0), selectedPaymentInstrument.amount].join('')));\n });\n\n return html;\n}\n\n/**\n * Updates checkout view\n * @param {Object} data Data object\n */\nfunction updateCheckoutView(data) {\n const $paymentSummary = document.querySelector('.summary-details .payment-details')\n || document.querySelector('.summary-details .js-paypal-payment-details');\n\n const order = data.order;\n const payment = order.billing.payment;\n\n let htmlToAppend = [];\n\n if ($paymentSummary && $paymentSummary.classList.contains('payment-details')) {\n // Overwrites a basic class to show a correct payment PayPal related data for buyer\n $paymentSummary.classList.remove('payment-details');\n $paymentSummary.classList.add('js-paypal-payment-details');\n }\n\n if (payment && payment.selectedPaymentInstruments && payment.selectedPaymentInstruments.length > 0) {\n htmlToAppend = appendHtml(order, htmlToAppend);\n }\n\n if ($paymentSummary && htmlToAppend.length > 0) {\n $paymentSummary.innerHTML = '';\n\n htmlToAppend.forEach(element => {\n $paymentSummary.appendChild(element);\n });\n }\n}\n\n/**\n * @param {Object} error - an error object data\n * @returns {boolean} - if an error message is displayed then true otherwise false\n */\nfunction handleValidationAddressResult(error) {\n if (error.status === 422 && /(sh|b)i(p|l){2}ing/i.test(error.responseText)) {\n const AlertHandlerModel = require('./models/alertHandler');\n const alertHandler = new AlertHandlerModel();\n\n alertHandler.showError(error.responseText);\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Shows paypal button\n * @param {Object} paypalButton - paypal button element\n */\nfunction showPaypalButton(paypalButton) {\n paypalButton.classList.remove(HIDE_CLASS);\n}\n\n/**\n * Hides paypal button\n * @param {Object} paypalButton - paypal button element\n */\nfunction hidePaypalButton(paypalButton) {\n paypalButton.classList.add(HIDE_CLASS);\n}\n\n/**\n * Check if product price value is equal to zero (0.00)\n * @returns {boolean} - a true for zero value or false\n */\nfunction isProductZeroAmount() {\n const $element = document.querySelector(PDP_PRICE_VALUE_CLASS);\n\n return $element && $element.getAttribute('content') === '0.00';\n}\n\n/**\n * Get minicart qualtity\n * @returns {number} - a quantity\n */\nfunction getMiniCartQuantity() {\n const $element = document.querySelector('.minicart-quantity');\n\n return $element ? parseInt($element.textContent, 0) : 0;\n}\n\n/**\n * Handling PVP button behavior on Quick View\n * @param {Object} paypalButton - paypal button element\n * @returns {void}\n */\nfunction initPaypalButtonBehaviorOnPvp(paypalButton) {\n const isProductReadyToOrderElement = document.querySelector('.js-is-show-pp-button');\n const isProductReadyToOrder = isProductReadyToOrderElement && isProductReadyToOrderElement.value === 'true';\n\n const addToCartButton = document.querySelector('.add-to-cart, .add-to-cart-global');\n\n // Check minicart quantity and hide Paypal button if it is not empty\n if (getMiniCartQuantity() > 0 || isProductZeroAmount()) { // Check if product price is zero\n hidePaypalButton(paypalButton);\n }\n\n if (addToCartButton.disabled || !isProductReadyToOrder) {\n hidePaypalButton(paypalButton);\n }\n\n $('body').on('product:statusUpdate', function() {\n if (getMiniCartQuantity() === 0 && !isProductZeroAmount()) {\n if (addToCartButton.disabled) {\n hidePaypalButton(paypalButton);\n }\n\n if (!addToCartButton.disabled) {\n showPaypalButton(paypalButton);\n }\n } else {\n hidePaypalButton(paypalButton);\n }\n });\n}\n\n/**\n * Handling PVP/PDP button behavior on Product Set\n * @returns {void}\n */\nfunction initPayPalBtnBehaviorOnSet() {\n const miniCartQuantityElement = document.querySelector('.minicart-quantity');\n const addToCartButtons = document.querySelectorAll('.add-to-cart, .add-to-cart-global');\n\n const miniCartQuantity = parseInt(miniCartQuantityElement.textContent, 0);\n\n addToCartButtons.forEach((btn) => {\n const paypalButton = btn.parentElement\n .querySelector('.paypal-pvp-button, .paypal-pvp-button-global, .paypal-pdp-button, .paypal-pdp-button-global');\n\n const isProductReadyToOrderElement = btn.parentElement.querySelector('.js-is-show-pp-button');\n const isProductReadyToOrder = isProductReadyToOrderElement && isProductReadyToOrderElement.value === 'true';\n\n const prices = document.querySelectorAll(PDP_PRICE_VALUE_CLASS);\n\n const isWrongAmount = prices && Array.from(prices).some((price) => {\n return parseFloat(price.getAttribute('content')) <= 0;\n });\n\n if (miniCartQuantity === 0 && !isWrongAmount && isProductReadyToOrder) {\n if (btn.disabled) {\n hidePaypalButton(paypalButton);\n }\n\n if (!btn.disabled) {\n showPaypalButton(paypalButton);\n }\n } else {\n hidePaypalButton(paypalButton);\n }\n });\n\n $('body').on('product:statusUpdate', function(event) {\n const addToCartButton = event.target;\n\n const paypalButton = addToCartButton.parentElement\n .querySelector('.paypal-pvp-button, .paypal-pvp-button-global, .paypal-pdp-button, .paypal-pdp-button-global');\n\n const prices = document.querySelectorAll(PDP_PRICE_VALUE_CLASS);\n\n const isWrongAmount = prices && Array.from(prices).some((price) => {\n return parseFloat(price.getAttribute('content')) <= 0;\n });\n\n if (miniCartQuantity === 0 && !isWrongAmount) {\n if (addToCartButton.disabled) {\n hidePaypalButton(paypalButton);\n }\n\n if (!addToCartButton.disabled) {\n showPaypalButton(paypalButton);\n }\n } else {\n hidePaypalButton(paypalButton);\n }\n });\n}\n\n/**\n * Returns a payment method name by the Paypal funding source\n * @param {string} fundingSource PayPal funding source\n * @returns {string} A payment method name\n */\nfunction getPaymentMethodName(fundingSource) {\n if (fundingSource === 'venmo') {\n return window.paypalConstants.PAYMENT_METHOD_ID_VENMO;\n }\n\n if (fundingSource === 'card') {\n return window.paypalConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE;\n }\n\n return fundingSource;\n}\n\n/**\n * Get CSRF Token\n * @returns {string} - csrf token value\n */\nfunction getCsrfToken() {\n let $element = document.querySelector('[name=\"csrf_token\"]');\n\n if ($element && $element.value !== '') {\n return $element.value;\n }\n\n $element = document.querySelector('[data-tokenname=\"csrf_token\"]');\n\n if ($element && $element.getAttribute('data-token') !== '') {\n return $element.getAttribute('data-token');\n }\n\n return '';\n}\n\n/**\n * Add csrf token param to url\n * @param {string} url - source url\n * @returns {string} - url with csrf_token param\n */\nfunction getUrlWithCsrfToken(url) {\n const urlInstance = new URL(url, location.origin);\n\n urlInstance.searchParams.append('csrf_token', getCsrfToken());\n\n return urlInstance.toString();\n}\n\n/**\n * It takes a selector for a PayPal button, and returns an object with the product ID and quantity of\n * the product that the button is for.\n *\n * @param {string} ppBtnSelector - PayPal button container selector.\n * @returns {void}\n */\nfunction addProductToCart(ppBtnSelector) {\n /**\n * Gets options\n * @param {Object} productContainer - product container\n * @returns {string} options\n */\n function getOptions(productContainer) {\n return JSON.stringify(Array.from(productContainer.querySelectorAll('.product-option'))\n .map(elOption => {\n const selectedValue = elOption.querySelector('.options-select').value;\n const selectedOption = elOption.querySelector(`.options-select option[value=\"${selectedValue}\"]`);\n\n return {\n optionId: elOption.getAttribute('data-option-id'),\n selectedValueId: selectedOption.getAttribute('data-value-id')\n };\n }));\n }\n\n const ppBtn = document.querySelector(ppBtnSelector);\n const bundleItems = document.querySelectorAll('.bundle-item');\n const setItems = document.querySelectorAll('.set-item');\n\n const ppBtnContainer = ppBtn.closest('.paypal-pvp-button-global, .paypal-pdp-button-global')\n || ppBtn.closest('.paypal-pdp-button, .paypal-pvp-button');\n\n const isGlobalButton = ['paypal-pvp-button-global', 'paypal-pdp-button-global'].some(className => ppBtnContainer.classList.contains(className));\n\n const pid = base.getPidValue(ppBtnContainer);\n\n let productContainer;\n let form = {};\n\n if (isGlobalButton || !setItems.length) {\n productContainer = document.querySelector(ppBtnSelector).closest(PRODUCT_DETAIL_CLASS) || document.querySelector(PRODUCT_DETAIL_CLASS);\n } else {\n productContainer = document.querySelector(ppBtnSelector).closest('.set-item');\n }\n\n if (bundleItems.length) {\n const quantity = document.querySelector('.modal-footer').querySelector('.quantity-select').value;\n\n form = {\n pid: pid,\n quantity: quantity\n };\n\n const items = Array.from(bundleItems).map(function(item) {\n return {\n pid: item.querySelector('.product-id').innerText,\n quantity: parseInt(item.querySelector('.quantity').getAttribute('data-quantity'), 10)\n };\n });\n\n form.childProducts = JSON.stringify(items);\n } else if (setItems.length && isGlobalButton) {\n const items = Array.from(setItems).map(function(item) {\n return {\n pid: base.getPidValue(item),\n qty: parseInt(base.getQuantitySelected(item), 10),\n options: getOptions(item)\n };\n });\n\n form.pidsObj = JSON.stringify(items);\n } else {\n form = {\n pid: pid,\n quantity: base.getQuantitySelected(ppBtnContainer),\n options: getOptions(productContainer)\n };\n }\n\n return $.ajax({\n url: $('.add-to-cart-url').val(),\n method: 'POST',\n async: false,\n data: form\n }).responseJSON;\n}\n\n/**\n * Removes all products from the cart in case if an error occurred\n */\nfunction removeAllProductsFromCart() {\n const url = getUrlWithCsrfToken(window.paypalUrls.removeAllProductsFromCart);\n\n fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' }\n })\n .finally(() => {\n $.spinner().stop();\n });\n}\n\nexport {\n getPaypalButtonStyle,\n processPayNowConfirmForm,\n updateCheckoutView,\n handleValidationAddressResult,\n initPaypalButtonBehaviorOnPvp,\n initPayPalBtnBehaviorOnSet,\n getPaymentMethodName,\n getCsrfToken,\n getUrlWithCsrfToken,\n addProductToCart,\n removeAllProductsFromCart\n};\n","const loaderInstance = require('./loader');\nconst $loaderContainer = document.querySelector('.paypalLoader');\nconst loader = loaderInstance($loaderContainer);\nconst CONTENT_TYPE_JSON = 'application/json';\n\nconst AlertHandlerModel = require('./models/alertHandler');\nconst alertHandler = new AlertHandlerModel();\n\n/**\n * Updates information about an order\n * @param {boolean} isAddressNeedChange - if we need to change shipping address\n * @returns {Object} Call handling result\n */\nfunction updateOrderData(isAddressNeedChange = false) {\n loader.show();\n\n return $.ajax({\n url: [window.paypalUrls.updateOrderData, '?isCartFlow=true', '?isAddressNeedChange=', isAddressNeedChange].join(''),\n type: 'PATCH',\n success: () => {\n loader.hide();\n window.location.href = window.paypalUrls.placeOrderStage;\n },\n error: (err) => {\n const error = JSON.parse(err.responseText);\n\n loader.hide();\n alertHandler.showError(error.errorMsg);\n\n if (error.transactionExpired) {\n location.reload();\n }\n }\n });\n}\n\n/**\n * Gets Billing Agreement Token\n *\n * @param {boolean} isCartFlow - billing agreement flow from cart\n * @param {boolean} isSkipShippingAddress - whether skip or add possibility to edit the shipping address in PayPal window\n * @returns {string} billingToken - returns a JSON response that includes token, an approval URL\n */\nfunction getBillingAgreementToken(isCartFlow, isSkipShippingAddress = false) {\n return $.get(window.paypalUrls.createBillingAgreementToken\n + `?isCartFlow=${isCartFlow}&isSkipShippingAddress=${isSkipShippingAddress}`)\n .then((data) => data);\n}\n\n/**\n * Gets Billing Agreement\n * After buyer approval, you use a billing agreement token to create the agreement.\n * @returns {Object} JSON response body that includes the billing agreement ID,\n * the state of the agreement, which is ACTIVE, and information about the payer\n */\nfunction createBillingAgreementCall() {\n return $.ajax({\n url: window.paypalUrls.createBillingAgreement,\n type: 'POST',\n contentType: CONTENT_TYPE_JSON\n });\n}\n\n/**\n * Create billing formData from fields data\n *\n * @param {Object} fieldsData - fields data values\n * @param {Element} $paypalButton - paypal button selector\n * @returns {Object} cart billing form data\n */\nfunction createCartBillingFormData(fieldsData, $paypalButton) {\n const cartBillingFormData = new FormData();\n\n if (!$paypalButton) {\n $paypalButton = document.getElementById('paypal-static-image')\n || document.getElementById('paypal-image')\n || document.getElementById('venmo-image');\n }\n\n const cartBillingFields = $paypalButton && JSON.parse($paypalButton.getAttribute('data-paypal-billing-form-fields'));\n\n Object.entries(cartBillingFields)\n .forEach(entry => {\n const [key, field] = entry;\n\n if (typeof field === 'object') {\n cartBillingFormData.append(field.name, fieldsData && fieldsData[key] ? fieldsData[key] : field.value);\n }\n });\n\n return cartBillingFormData;\n}\n\n/**\n * Calls to returnFromCart endpoint, redirects to place order stage or shows error if it exists\n * @param {boolean} isAddressNeedChange - true if static image address same as BA\n * @returns {Object} Call handling result\n */\nfunction returnFromCart(isAddressNeedChange = false) {\n loader.show();\n const cartBillingFormData = createCartBillingFormData();\n\n return $.ajax({\n url: [window.paypalUrls.returnFromCart, '?isAddressNeedChange=', isAddressNeedChange].join(''),\n type: 'POST',\n contentType: false,\n data: cartBillingFormData,\n processData: false,\n success: () => {\n loader.hide();\n window.location.href = window.paypalUrls.placeOrderStage;\n },\n error: function(err) {\n loader.hide();\n alertHandler.showError(err.responseText);\n }\n });\n}\n\n/**\n * Calls to Paypal-ValidateStaticImage endpoint\n * @returns {Promise} promise from fetch with response from Paypal-ValidateStaticImage endpoint\n */\nfunction validateStaticImageAddress() {\n const paypalStaticImage = document.getElementById('paypal-static-image')\n || document.getElementById('paypal-image');\n\n return fetch(window.paypalUrls.validateStaticImage, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email: paypalStaticImage.getAttribute('data-paypal-default-ba-email'),\n formFields: paypalStaticImage.getAttribute('data-paypal-billing-form-fields')\n })\n })\n .then(response => response.json())\n .then(data => {\n return data.isAddressNeedChange;\n })\n .catch(() => {\n return false;\n });\n}\n\n/**\n * Call finishPayNow endpoint\n * @param {string} fundingSource The current paypal funding source\n * @returns {Promise} ajax call\n */\nfunction finishPayNowFlow(fundingSource) {\n const $usedPaymentMethod = document.querySelector('#usedPaymentMethod');\n const pmName = $usedPaymentMethod ? $usedPaymentMethod.value : fundingSource;\n\n return $.ajax({\n url: window.paypalUrls.finishPayNowFlow,\n type: 'POST',\n contentType: CONTENT_TYPE_JSON,\n data: JSON.stringify({\n pmName\n })\n });\n}\n\n/**\n * Makes call on saving a PayPal default address to the storefront customer.\n * @param {Object} addressObject PayPal address information.\n * @param {boolean} isAccountPage Identifies whether the source page is account.\n * @returns {Object} Whether a success or failed JSON response body.\n */\nfunction savePaypalDefaultAddress(addressObject, isAccountPage) {\n return $.ajax({\n url: window.paypalUrls.savePaypalDefaultAddress,\n type: 'POST',\n contentType: CONTENT_TYPE_JSON,\n data: JSON.stringify({ addressObject, isAccountPage })\n });\n}\n\n/**\n * Finish a PayPal payment by PayPal Pay Now flow\n * @param {string} usedPaymentMethod Current payment method name\n */\nfunction finishPayNowPayment(usedPaymentMethod) {\n const helper = require('./helper');\n\n finishPayNowFlow(usedPaymentMethod)\n .then(({ redirectUrl }) => {\n loader.hide();\n helper.processPayNowConfirmForm(redirectUrl);\n })\n .catch(function() {\n loader.hide();\n });\n}\n\n/**\n * @returns {string} paypal order id\n */\nfunction getPaypalOrderId() {\n const helper = require('./helper');\n\n return $.ajax({\n url: helper.getUrlWithCsrfToken(window.paypalUrls.getPaypalOrderId),\n type: 'GET',\n contentType: 'application/json',\n async: false\n }).responseJSON.id;\n}\n\nexport {\n updateOrderData,\n getBillingAgreementToken,\n createBillingAgreementCall,\n returnFromCart,\n finishPayNowFlow,\n createCartBillingFormData,\n savePaypalDefaultAddress,\n finishPayNowPayment,\n getPaypalOrderId,\n validateStaticImageAddress\n};\n","'use strict';\n\n/**\n * Alert Handling model\n */\nclass AlertHandlerModel {\n constructor() {\n this.$flashMessagesContainer = document.querySelector('.js-flash-messages-container');\n this.$alertTemplate = document.querySelector('.js-alert-template');\n }\n\n /**\n * Creates an alert message\n * @param {string} alertMessage alert message\n * @param {string} alertType alert type, i.e. danger, info, warning etc\n */\n createAlertMessage(alertMessage, alertType) {\n const $alertContainer = this.$alertTemplate.cloneNode(true);\n\n $alertContainer.classList.add(`alert-${alertType}`, 'show');\n $alertContainer.classList.remove('d-none');\n\n $alertContainer.insertAdjacentHTML('beforeEnd', alertMessage);\n this.$flashMessagesContainer.append($alertContainer);\n }\n\n /**\n * Shows an error message\n * @param {string} errorMessage error message\n */\n showError(errorMessage) {\n this.createAlertMessage(errorMessage, window.paypalConstants.FLASH_MESSAGE_DANGER);\n }\n\n /**\n * Shows a warning message\n * @param {string} warningMessage warning message\n */\n showWarning(warningMessage) {\n this.createAlertMessage(warningMessage, window.paypalConstants.FLASH_MESSAGE_WARNING);\n }\n\n /**\n * Shows an info message\n * @param {string} infoMessage info message\n */\n showInfo(infoMessage) {\n this.createAlertMessage(infoMessage, window.paypalConstants.FLASH_MESSAGE_INFO);\n }\n}\n\nmodule.exports = AlertHandlerModel;\n","/* eslint-disable require-jsdoc */\nmodule.exports = function(containerElement) {\n function Constructor() {\n this.containerEl = containerElement;\n }\n\n Constructor.prototype.show = function() {\n this.containerEl.style.display = 'block';\n };\n\n Constructor.prototype.hide = function() {\n this.containerEl.style.display = 'none';\n };\n\n return new Constructor();\n};\n","'use strict';\n\n/**\n * Constructor of SessionStorageModel\n */\nfunction SessionStorageModel() {\n this.sessionStorage = window.sessionStorage;\n}\n\n/**\n * Returns a current session storage\n * @returns {Storage} An object of type storage\n */\nSessionStorageModel.prototype.get = function() {\n return this.sessionStorage;\n};\n\n/**\n * Set a new item to the session storage\n * @param {string} name A name of the item to set\n * @param {stinrg} value A value of the item to set\n */\nSessionStorageModel.prototype.setItem = function(name, value) {\n this.sessionStorage.setItem(name, value);\n};\n\n/**\n * Returns a value of session storage item\n * @param {string} name A name of the item to get\n * @returns {string} A value of session storage item\n */\nSessionStorageModel.prototype.getItem = function(name) {\n return this.sessionStorage.getItem(name);\n};\n\n/**\n * Removes an item from the session storage\n * @param {string} name A name of item to remove\n */\nSessionStorageModel.prototype.removeItem = function(name) {\n this.sessionStorage.removeItem(name);\n};\n\n/**\n * Completely clears a session storage\n */\nSessionStorageModel.prototype.clear = function() {\n this.sessionStorage.clear();\n};\n\n/**\n * Sets an active payment method tab name to the session storage\n * @param {string} value A name of the tab\n */\nSessionStorageModel.prototype.setActiveBillingPmTab = function(value) {\n this.setItem(window.paypalConstants.ACTIVE_TAB, value);\n};\n\n/**\n * Returns a name of active payment method tab\n * @returns {string} A name of the payment tab\n */\nSessionStorageModel.prototype.getActiveBillingPmTab = function() {\n return this.getItem(window.paypalConstants.ACTIVE_TAB);\n};\n\nmodule.exports = SessionStorageModel;\n","'use strict';\nvar focusHelper = require('../components/focus');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n var quantitySelected;\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $('.quantity-select');\n }\n return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '
  • ' + response.resources.info_selectforstock + '
  • ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  • ' + message + '
  • ';\n });\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).empty().append('
      ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\n for (var i = 0; i < imgs.length; i++) {\n $('
      \"'
      ').appendTo($(carousel).find('.carousel-inner'));\n $('
    1. ').appendTo($(carousel).find('.carousel-indicators'));\n }\n $($(carousel).find('.carousel-item')).first().addClass('active');\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n if (imgs.length === 1) {\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n createCarousel(primaryImageUrls, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n /* EMEA Custom\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }*/\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('
      ').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = ''\n + '
      '\n + ''\n + '
      '\n + ''\n + '
      '\n + '
      '\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      ';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '
      '\n );\n }\n\n $('.add-to-cart-messages').append(\n '
      '\n + response.message\n + '
      '\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction 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/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '
      '\n + '
      '\n + $choiceOfBonusProduct.find('.product-name').html()\n + '
      '\n + '
      '\n + '
      '\n ;\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n },\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
      ');\n }\n $('.add-to-cart-messages').append(\n '
      '\n + data.errorMessage + '
      '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
      ');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
      '\n + data.msgSuccess + '
      '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","'use strict';\n\nconst api = require('../../api');\nconst helper = require('../../helper');\n\nconst loaderInstance = require('../../loader');\nconst $loaderContainer = document.querySelector('.paypalLoader');\nconst $usedPaymentMethodName = document.getElementById('usedPaymentMethod');\n\nconst disableFunds = [\n 'sepa',\n 'bancontact',\n 'eps',\n 'giropay',\n 'ideal',\n 'mybank',\n 'p24',\n 'sofort',\n 'venmo',\n 'blik'\n];\n\nlet that = null;\n\n/**\n * Returns value whether LPM was used or not\n * @param {string} usedPaymentMethod - The payment method name\n * @returns {boolean} value whether LPM was used\n */\nconst isLpmUsed = usedPaymentMethod => {\n return disableFunds.indexOf(usedPaymentMethod) !== -1;\n};\n\n/**\n * Initiates a PayPalButtonBase model\n * @param {string} payPalBtnSelector A container class where PayPal button will be initiated\n */\nfunction PayPalBaseModel(payPalBtnSelector) {\n const AlertHandlerModel = require('../alertHandler');\n\n this.payPalBtnSelector = payPalBtnSelector;\n this.$payPalBtnContainer = document.querySelector(payPalBtnSelector);\n this.isPayNowFlowEnabled = window.paypalPreferences.isPayNowFlowEnabled;\n this.usedPaymentMethodName = null;\n this.loader = loaderInstance($loaderContainer);\n this.alertHandler = new AlertHandlerModel();\n\n this.isBtnEligible = null;\n this.fundingSource = null;\n}\n\n/**\n * Process the Pay Now flow\n */\nPayPalBaseModel.prototype.processPayNowFlow = function() {\n const SessionStorageModel = require('../sessionStorage');\n const sessionStorageInstance = new SessionStorageModel();\n\n api.finishPayNowPayment(this.usedPaymentMethodName);\n\n sessionStorageInstance.clear();\n};\n\n/**\n * Process the generic (not Ba) Paypal button flow\n */\nPayPalBaseModel.prototype.processGenericBtnFlow = function() {\n const $selectedAccount = document.getElementById('sessionPaypalAccount');\n\n // TODO impelement an Account list for Venmo\n if (that.usedPaymentMethodName !== window.paypalConstants.PAYMENT_METHOD_ID_VENMO) {\n if ($selectedAccount.value !== '') {\n $selectedAccount.value = '';\n $selectedAccount.innerText = '';\n }\n\n $selectedAccount.selected = true;\n $selectedAccount.style.display = 'block';\n }\n\n document.querySelector('button.submit-payment').click();\n this.loader.hide();\n};\n\n/**\n * Saves a used payment method to hidden input\n * @param {Object} data - object with data\n */\nPayPalBaseModel.prototype.onClick = function(data) {\n if (data.fundingSource === window.paypal.FUNDING.CARD) {\n that.usedPaymentMethodName = 'PayPal Debit/Credit Card';\n } else if (data.fundingSource === window.paypal.FUNDING.VENMO) {\n that.usedPaymentMethodName = window.paypalConstants.PAYMENT_METHOD_ID_VENMO;\n } else if (data.fundingSource === window.paypal.FUNDING.PAYPAL) {\n that.usedPaymentMethodName = window.paypalConstants.PAYMENT_METHOD_ID_PAYPAL;\n } else {\n that.usedPaymentMethodName = data.fundingSource;\n }\n\n if ($usedPaymentMethodName) {\n $usedPaymentMethodName.value = that.usedPaymentMethodName;\n }\n};\n\n/**\n * Gets purchase units object, creates order and returns object with data\n * @returns {Object} With purchase units, payer and application context\n */\nPayPalBaseModel.prototype.createOrder = function() {\n return api.getPaypalOrderId();\n};\n\n/**\n * Clears session account if it exists and irrelevant errors,\n * and clicks submit payment button OR\n * Finish PayNow flow\n * Is used with adjacent instances (cart, pdp)\n */\nPayPalBaseModel.prototype.onApprove = function() {\n that.loader.show();\n\n // Pay Now flow. Using whether when an appropriate site preference is enabled or in case of LPM\n if (isLpmUsed(that.usedPaymentMethodName) || that.isPayNowFlowEnabled) {\n that.processPayNowFlow();\n } else {\n that.processGenericBtnFlow();\n }\n};\n\n/**\n * Hides loader on paypal widget closing without errors\n * Is used with adjacent instances (cart, pdp)\n */\nPayPalBaseModel.prototype.onCancel = function() {\n that.loader.hide();\n};\n\n/**\n * Shows errors if paypal widget was closed with errors\n * Is used with adjacent instances (cart, pdp)\n */\nPayPalBaseModel.prototype.onError = function() {\n that.loader.hide();\n that.alertHandler.showError(window.paypalConstants.FLASH_MESSAGE_ERROR_INTERNAL_SERVER);\n};\n\n/**\n * Renders a button mark(tab)\n */\nPayPalBaseModel.prototype.renderButtonMarks = function() {\n window.paypal.Marks({\n fundingSource: this.fundingSource\n }).render(`.js-${this.fundingSource}-mark`);\n};\n\n/**\n * Renders the payment fields for LPM\n */\nPayPalBaseModel.prototype.renderPaymentFields = function() {\n window.paypal.PaymentFields({\n fundingSource: this.fundingSource\n }).render(this.payPalBtnSelector);\n};\n\n/**\n * Shows a tab by funding source\n * @param {string} fs The funding source\n */\nPayPalBaseModel.prototype.showButtonTab = function(fs) {\n document.querySelector(`.js-nav-item-${fs}`).classList.remove('d-none');\n};\n\n/**\n * Returns a generic PayPal's button parameter object\n * @returns {Object} A generic button parameters object\n */\nPayPalBaseModel.prototype.createBtnGeneralOption = function() {\n that = this;\n\n return {\n onClick: this.onClick,\n createOrder: this.createOrder.bind(this, this.payPalBtnSelector),\n onApprove: this.onApprove,\n onCancel: this.onCancel,\n onError: this.onError,\n style: helper.getPaypalButtonStyle(this.$payPalBtnContainer)\n };\n};\n\n/**\n * Initiates buttons for the PayPal tab\n * @param {Object} btnProperty The button property\n */\nPayPalBaseModel.prototype.initBtnsForPayPalTab = function(btnProperty) {\n const eligibleFundingSources = window.paypal.getFundingSources().filter(fs => window.paypal.Buttons({\n fundingSource: fs\n }).isEligible());\n\n const PAYPAL_FS = window.paypal.FUNDING.PAYPAL;\n\n let isTabShown = false;\n\n if (eligibleFundingSources.length) {\n this.renderButtonMarks.call({\n fundingSource: PAYPAL_FS\n });\n\n eligibleFundingSources.forEach(fs => {\n if (!disableFunds.includes(fs)) {\n // Only white and black colors are available for both Debit/Credit Card and PayPal Credit btn\n if ((fs === window.paypal.FUNDING.CARD || fs === window.paypal.FUNDING.CREDIT) &&\n !['white', 'black'].some(el => el === btnProperty.style.color)) {\n // Sets the default color in case if color is not available for both Debit/Credit Card or PayPal Credit btn\n if (fs === window.paypal.FUNDING.CREDIT) {\n btnProperty.style.color = 'darkblue';\n } else {\n btnProperty.style.color = 'black';\n }\n }\n\n window.paypal.Buttons(Object.assign(btnProperty, {\n fundingSource: fs\n })).render(this.payPalBtnSelector);\n\n if (!isTabShown) {\n // Shows the PayPal tab\n this.showButtonTab(PAYPAL_FS);\n isTabShown = true;\n }\n }\n });\n }\n};\n\n/**\n * Initiates a button by the provided funding source\n * @param {string} fs The function source(venmo, mybank...)\n * @param {Object} btnProperty The button property\n */\nPayPalBaseModel.prototype.initBtnByFundingSource = function(fs, btnProperty) {\n const btnInitResult = window.paypal.Buttons(Object.assign(btnProperty, {\n fundingSource: fs\n }));\n\n this.isBtnEligible = btnInitResult.isEligible();\n\n if (this.isBtnEligible) {\n this.renderButtonMarks();\n\n btnInitResult.render(this.payPalBtnSelector);\n\n this.showButtonTab(fs);\n }\n};\n\n/**\n * Initiates a Paypal button on billing checkout page\n * Is used with adjacent instances (cart, pdp, pvp)\n * @param {string} fundingSource The funding source of payment method\n */\nPayPalBaseModel.prototype.initPayPalBtn = function(fundingSource) {\n this.loader.show();\n this.fundingSource = fundingSource || window.paypal.FUNDING.PAYPAL;\n\n const btnProperty = this.createBtnGeneralOption();\n\n if (fundingSource) {\n this.initBtnByFundingSource(fundingSource, btnProperty);\n } else {\n this.initBtnsForPayPalTab(btnProperty);\n }\n\n this.loader.hide();\n};\n\nmodule.exports = PayPalBaseModel;\n","'use strict';\n\nconst PayPalBaseModel = require('./payPalBase');\nconst helper = require('../../helper');\n\n/**\n * Initiates a PayPalButtonExpress model (pvp, pdp, cart, mini-cart)\n * @param {string} payPalBtnSelector A container class where PayPal button will be initiated\n */\nfunction PayPalExpressModel(payPalBtnSelector) {\n PayPalBaseModel.call(this, payPalBtnSelector);\n}\n\nPayPalExpressModel.prototype = Object.create(PayPalBaseModel.prototype);\n\n/**\n * Process the generic (not Ba) Paypal button flow (cart, pdp, mini-cart)\n */\nPayPalExpressModel.prototype.processGenericBtnFlow = function() {\n const api = require('../../api');\n\n const cartBillingFormData = api.createCartBillingFormData({\n usedPaymentMethod: this.usedPaymentMethodName\n }, this.$payPalBtnContainer);\n\n $.ajax({\n type: 'POST',\n url: window.paypalUrls.returnFromCart,\n contentType: false,\n data: cartBillingFormData,\n processData: false,\n success: () => {\n this.loader.hide();\n\n window.location.href = window.paypalUrls.placeOrderStage;\n },\n error: (error) => {\n this.loader.hide();\n\n if (this.payPalBtnSelector === '.js-paypal-button-on-cart-page') {\n this.onError(error);\n } else if (!helper.handleValidationAddressResult(error)) {\n window.location.href = window.paypalUrls.cartPage;\n } else if (this.payPalBtnSelector.includes('.paypal-pdp-button')) {\n helper.removeAllProductsFromCart();\n }\n }\n });\n};\n\n/**\n * Initiates a Paypal button on express checkout page (Cart, mini-cart, pdp)\n * Is used with adjacent instances (cart, pdp, pvp)\n */\nPayPalExpressModel.prototype.initPayPalBtn = function() {\n this.loader.show();\n\n const btnInitResult = window.paypal.Buttons(this.createBtnGeneralOption());\n\n if (btnInitResult.isEligible()) {\n btnInitResult.render(this.payPalBtnSelector);\n\n this.loader.hide();\n }\n};\n\nmodule.exports = PayPalExpressModel;\n","const api = require('../../api');\nconst helper = require('../../helper');\nconst loaderInstance = require('../../loader');\nconst $loaderContainer = document.querySelector('.paypalLoader');\nconst loader = loaderInstance($loaderContainer);\n\nconst AlertHandlerModel = require('../../models/alertHandler');\nconst alertHandler = new AlertHandlerModel();\n\nlet paypalInstance;\n\n/**\n * Creates Billing Agreement\n *\n * @param {string} selector PayPal button container selector\n * @returns {string} returns JSON response that includes a data token\n */\nfunction createBillingAgreement(selector) {\n helper.addProductToCart(selector);\n\n const isCartFlow = true;\n\n loader.show();\n\n return api.getBillingAgreementToken(isCartFlow)\n .then((data) => data.token)\n .fail(err => {\n paypalInstance.close();\n loader.hide();\n\n alertHandler.showError(err.responseText);\n });\n}\n\n/**\n * Makes post call to create a BA and calls thereturnFromCart endpoint, triggers checkout (stage = place order)\n * @returns {Object} JSON response that includes the billing agreement ID and information about the payer\n */\nfunction onApprove() {\n return api.createBillingAgreementCall()\n .then(({ id, payer }) => {\n const cartBillingFormData = api.createCartBillingFormData({\n billingAgreementID: id,\n billingAgreementPayerEmail: payer.payer_info.email\n }, document.querySelector('.js-paypal-button-on-product-page'));\n\n return $.ajax({\n type: 'POST',\n url: window.paypalUrls.returnFromCart,\n data: cartBillingFormData,\n contentType: false,\n processData: false,\n dataType: 'json'\n });\n })\n .then(() => {\n loader.hide();\n window.location.href = window.paypalUrls.placeOrderStage;\n })\n .fail((error) => {\n loader.hide();\n const errorResponse = error.responseJSON;\n\n if (helper.handleValidationAddressResult(error) || errorResponse.errorName === 'shipping.address.invalid') {\n helper.removeAllProductsFromCart();\n paypalInstance.close();\n\n if (errorResponse.message) {\n alertHandler.showError(errorResponse.message);\n }\n } else {\n window.location.href = window.paypalUrls.cartPage;\n }\n });\n}\n\n/**\n * Hides loader on paypal widget closing without errors\n * If PDP flow, removes product from basket on cancel\n */\nfunction onCancel() {\n $.ajax({\n url: helper.getUrlWithCsrfToken(window.paypalUrls.removeAllProductsFromCart),\n type: 'get',\n dataType: 'json',\n success: function() {\n $.spinner().stop();\n },\n error: function() {\n $.spinner().stop();\n }\n });\n loader.hide();\n}\n\n/**\n * Shows errors if paypal widget was closed with errors\n * If PDP flow, removes product from basket on error\n */\nfunction onError() {\n $.ajax({\n url: helper.getUrlWithCsrfToken(window.paypalUrls.removeAllProductsFromCart),\n type: 'get',\n dataType: 'json',\n success: function() {\n $.spinner().stop();\n },\n error: function() {\n $.spinner().stop();\n }\n });\n\n loader.hide();\n window.location.href = window.paypalUrls.cartPage;\n}\n\n/**\n * Inits paypal Billing Agreement button on billing checkout page\n * @param {string} selector PayPal button container selector\n */\nfunction initPaypalBAButton(selector = '.paypal-pdp-button') {\n loader.show();\n const createBillingAgreementCallback = createBillingAgreement.bind(this, selector);\n\n paypalInstance = window.paypal.Buttons({\n createBillingAgreement: createBillingAgreementCallback,\n onApprove,\n onCancel,\n onError,\n onClose: () => initPaypalBAButton(selector),\n style: helper.getPaypalButtonStyle(document.querySelector('.js-paypal-button-on-product-page'))\n });\n\n paypalInstance.render(selector)\n .then(() => {\n loader.hide();\n });\n}\n\nexport { initPaypalBAButton };\n","'use strict';\n\nconst PayPalExpressModel = require('./payPalExpress');\nconst helper = require('../../helper');\n\n/**\n * Initiates a PayPalButtonProduct model\n * @param {string} payPalBtnSelector A container class where PayPal button will be initiated\n */\nfunction PayPalProductModel(payPalBtnSelector) {\n PayPalExpressModel.call(this, payPalBtnSelector);\n}\n\nPayPalProductModel.prototype = Object.create(PayPalExpressModel.prototype);\n\n/**\n * Adds a product to the basket\n * Inherits functionality from base model\n *\n * @param {string} selector PayPal button container selector\n * @returns {Object} With purchase units, payer and application context\n */\nPayPalProductModel.prototype.createOrder = function(selector) {\n helper.addProductToCart(selector);\n\n return PayPalExpressModel.prototype.createOrder.call();\n};\n\n/**\n * Removes a product from the basket and relocates to the Cart page\n * Inherits functionality from base model\n */\nPayPalProductModel.prototype.onError = function() {\n helper.removeAllProductsFromCart();\n\n window.location.href = window.paypalUrls.cartPage;\n\n PayPalExpressModel.prototype.onError.call(this);\n};\n\n/**\n * Removes a product from the basket and relocates to the Cart page\n * Inherits functionality from base model\n */\nPayPalProductModel.prototype.onCancel = function() {\n helper.removeAllProductsFromCart();\n\n PayPalExpressModel.prototype.onCancel.call();\n};\n\nmodule.exports = PayPalProductModel;\n","/**\n * Shows paypal PDP button/static image\n * @param {Object} $paypalPDPButton - paypal button element\n */\nfunction showPayPalButton($paypalPDPButton) {\n $paypalPDPButton.style.display = '';\n}\n\n/**\n * Hides paypal PDP button/static image\n * @param {Object} $paypalPDPButton - paypal button element\n */\nfunction hidePayPalButton($paypalPDPButton) {\n $paypalPDPButton.style.display = 'none';\n}\n\n/**\n * Check if PDP product price is zero\n * @returns {boolean} \"true\" in case if PDP product price is zero\n */\nfunction isZeroPdpProductPrice() {\n const $productPriceSelector = document.querySelector('.price .sales .value');\n\n if ($productPriceSelector) {\n const price = parseInt($productPriceSelector.getAttribute('content'), 0);\n\n return price <= 0;\n }\n\n return true;\n}\n\n/**\n * Is add to cart button disabled\n * @returns {boolean} \"true\" in case if add to cart button disabled\n */\nfunction isAddToCartButtonDisabled() {\n const $addToCartButton = document.querySelector('.js-add-to-cart, .js-add-to-cart-global');\n\n return $addToCartButton.disabled;\n}\n\n/**\n * Return mini cart quantity\n * @param {Object} $miniCartQuantitySelector Mini cart quantity selector\n * @returns {Int} Quantity\n */\nfunction getMiniCartQuantity($miniCartQuantitySelector) {\n let quantity = null;\n\n if ($miniCartQuantitySelector) {\n quantity = parseInt($miniCartQuantitySelector.textContent, 0);\n }\n\n return quantity;\n}\n\n/**\n * Check if basket is empty\n * @returns {boolean} \"true\" in case if basket is not empty\n */\nfunction isBasketNotEmpty() {\n const miniCartQuantityElement = document.querySelector('.minicart-quantity');\n\n return getMiniCartQuantity(miniCartQuantityElement) !== 0;\n}\n\n/**\n * Handles PP button behavior on Product/Cart update\n * @returns {void}\n */\nfunction handlePayPalButtonOnUpdate() {\n const $paypalPDPButton = document.querySelector('.paypal-pdp-button');\n\n const addToCartButtonDisabled = isAddToCartButtonDisabled();\n const zeroProductPrice = isZeroPdpProductPrice();\n const basketNotEmpty = isBasketNotEmpty();\n\n if (addToCartButtonDisabled || zeroProductPrice || basketNotEmpty) {\n hidePayPalButton($paypalPDPButton);\n } else {\n showPayPalButton($paypalPDPButton);\n }\n}\n\n/**\n * Handling PDP button/static image behavior\n */\nfunction initPaypalButtonBehaviorOnPdp() {\n const $paypalPDPButton = document.querySelector('.paypal-pdp-button');\n\n if ($paypalPDPButton) {\n const addToCartButtonDisabled = isAddToCartButtonDisabled();\n const zeroProductPrice = isZeroPdpProductPrice();\n const basketNotEmpty = isBasketNotEmpty();\n\n if (addToCartButtonDisabled || zeroProductPrice || basketNotEmpty) {\n hidePayPalButton($paypalPDPButton);\n }\n\n $('body').on('product:afterAddToCart', function() {\n hidePayPalButton($paypalPDPButton);\n });\n\n $('body').on('cart:update', handlePayPalButtonOnUpdate);\n $('body').on('product:statusUpdate', handlePayPalButtonOnUpdate);\n }\n}\n\n/**\n * Appends params to a url\n * @param {string} url - Original url\n * @param {Object} param - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, param) {\n let newUrl = url;\n\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(param).map(function(key) {\n return [key, '=', encodeURIComponent(param[key])].join('');\n }).join('&');\n\n return newUrl;\n}\n\nexport {\n appendToUrl,\n initPaypalButtonBehaviorOnPdp\n};\n","import { initPaypalBAButton } from './registered/initPaypalBAButton';\nimport { returnFromCart, validateStaticImageAddress } from '../api';\nimport { initPaypalButtonBehaviorOnPdp } from './pdpHelper';\nimport { addProductToCart, initPayPalBtnBehaviorOnSet } from '../helper';\n\n/**\n * Applies PayPal button behavior\n */\nfunction applyPaypalButtonBehavior() {\n const paypalButton = document.querySelector('.paypal-pdp-button');\n const isProductSet = Boolean(document.querySelector('.set-items'));\n\n if (isProductSet) {\n initPayPalBtnBehaviorOnSet();\n } else if (paypalButton) {\n initPaypalButtonBehaviorOnPdp();\n }\n}\n\n/**\n * Inits PayPal static image functionality on PDP\n */\nfunction initStaticImageFunctionality() {\n const loaderInstance = require('../loader');\n const paypalStaticImageContainers = document.querySelectorAll('.paypal-static-image-container');\n\n let isAddressNeedChange;\n\n validateStaticImageAddress().then(isNeed => {\n isAddressNeedChange = isNeed;\n });\n\n paypalStaticImageContainers && paypalStaticImageContainers.forEach((container, index) => {\n const staticImage = container.querySelector('#paypal-static-image');\n const selector = `${container.className}${index}`;\n\n staticImage.classList.add(selector);\n\n staticImage.addEventListener('click', function() {\n const loaderContainer = this.closest('.pdp-paypal-button-container').querySelector('.paypalLoader');\n const loader = loaderInstance(loaderContainer);\n\n loader.show();\n\n const result = addProductToCart(`.${this.className}`);\n\n if (result.cart) {\n returnFromCart(isAddressNeedChange);\n } else {\n loader.hide();\n\n throw new Error(result.message || 'Error occurs while trying to add product to the cart');\n }\n });\n });\n\n applyPaypalButtonBehavior();\n}\n\n/**\n * Inits PayPal functionality on PDP\n */\nfunction initPaypalFunctionality() {\n const paypalButtonContainers = document.querySelectorAll('.paypal-pdp-button, .paypal-pdp-button-global');\n const PP_BTN_SELECTOR = '.js-paypal-button-on-product-page';\n const isBAEnabled = window.paypalPreferences.billingAgreementEnabled;\n const PayPalProductModel = require('../models/buttons/payPalProduct');\n\n paypalButtonContainers && paypalButtonContainers.forEach((container, index) => {\n const ppButton = container.querySelector(PP_BTN_SELECTOR);\n\n if (ppButton) {\n ppButton.classList.add(`${ppButton.classList[1]}-${index}-pdp`);\n\n const selector = `.${Array.from(ppButton.classList).join('.')}`;\n const payPalProductInstance = new PayPalProductModel(selector);\n\n isBAEnabled ? initPaypalBAButton(selector) : payPalProductInstance.initPayPalBtn();\n }\n });\n\n applyPaypalButtonBehavior();\n}\n\n$('body').ready(() => {\n const isPaypalStaticImage = Boolean(document.getElementById('paypal-static-image'));\n\n if (isPaypalStaticImage) {\n initStaticImageFunctionality();\n } else if (window.paypal) {\n initPaypalFunctionality();\n }\n});\n"],"sourceRoot":""}