diff --git a/modules/ppcp-button/assets/css/hosted-fields.css b/modules/ppcp-button/assets/css/hosted-fields.css deleted file mode 100644 index cd9d2bd46..000000000 --- a/modules/ppcp-button/assets/css/hosted-fields.css +++ /dev/null @@ -1 +0,0 @@ -.ppcp-card-icon{max-width:50px;margin-left:5px}#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper{width:100%;display:grid;grid-template-columns:55% 1fr 1fr;grid-template-rows:1fr 1fr auto;grid-column-gap:15px;margin-bottom:15px}#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper label,#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper span{height:30px;padding:0;margin:0;overflow:hidden;position:relative;vertical-align:bottom;font-size:10px}#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper label{grid-row:1/2}#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper span{grid-row:2/3;background:white;border:1px #666;padding:5px}#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper button{grid-row:3/4;grid-column:1/4}#ppcp-hosted-fields .ppcp-dcc-credit-card-wrapper label{line-height:30px} diff --git a/modules/ppcp-button/assets/js/button.js b/modules/ppcp-button/assets/js/button.js deleted file mode 100644 index 30d289eb3..000000000 --- a/modules/ppcp-button/assets/js/button.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([,function(e,t,r){"use strict";r.r(t);var n=class{constructor(e){this.genericErrorText=e,this.wrapper=document.querySelector(".woocommerce-notices-wrapper")}genericError(){this.wrapper.classList.contains("ppcp-persist")||(this.clear(),this.message(this.genericErrorText))}message(e,t=!1){this.wrapper.classList.add("woocommerce-error"),t?this.wrapper.classList.add("ppcp-persist"):this.wrapper.classList.remove("ppcp-persist"),this.wrapper.innerText=this.sanitize(e),jQuery.scroll_to_notices(jQuery(".woocommerce-notices-wrapper"))}sanitize(e){const t=document.createElement("textarea");return t.innerHTML=e,t.value.replace("Error: ","")}clear(){this.wrapper.classList.contains("woocommerce-error")&&(this.wrapper.classList.remove("woocommerce-error"),this.wrapper.innerText="")}};var o=(e,t)=>(r,n)=>fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:r.orderID})}).then(e=>e.json()).then(r=>{if(!r.success)return t.genericError(),n.restart().catch(e=>{t.genericError()});location.href=e.config.redirect});const a=()=>{const e=PayPalCommerceGateway.payer;if(!e)return null;const t=document.querySelector("#billing_phone")||void 0!==e.phone?{phone_type:"HOME",phone_number:{national_number:document.querySelector("#billing_phone")?document.querySelector("#billing_phone").value:e.phone.phone_number.national_number}}:null,r={email_address:document.querySelector("#billing_email")?document.querySelector("#billing_email").value:e.email_address,name:{surname:document.querySelector("#billing_last_name")?document.querySelector("#billing_last_name").value:e.name.surname,given_name:document.querySelector("#billing_first_name")?document.querySelector("#billing_first_name").value:e.name.given_name},address:{country_code:document.querySelector("#billing_country")?document.querySelector("#billing_country").value:e.address.country_code,address_line_1:document.querySelector("#billing_address_1")?document.querySelector("#billing_address_1").value:e.address.address_line_1,address_line_2:document.querySelector("#billing_address_2")?document.querySelector("#billing_address_2").value:e.address.address_line_2,admin_area_1:document.querySelector("#billing_city")?document.querySelector("#billing_city").value:e.address.admin_area_1,admin_area_2:document.querySelector("#billing_state")?document.querySelector("#billing_state").value:e.address.admin_area_2,postal_code:document.querySelector("#billing_postcode")?document.querySelector("#billing_postcode").value:e.address.postal_code}};return t&&(r.phone=t),r};var i=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=a(),n=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"";return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,purchase_units:[],bn_code:n,payer:r,context:this.config.context})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw console.error(e),Error(e.data.message);return e.data.id}))},onApprove:o(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}};var s=class{constructor(e,t){this.gateway=e,this.renderer=t,this.actionHandler=null}init(){this.actionHandler=new i(PayPalCommerceGateway,new n(this.gateway.labels.error.generic)),this.render(),jQuery(document.body).on("wc_fragments_loaded wc_fragments_refreshed",()=>{this.render()})}shouldRender(){return null!==document.querySelector(this.gateway.button.mini_cart_wrapper)||null!==document.querySelector(this.gateway.hosted_fields.mini_cart_wrapper)}render(){this.shouldRender()&&this.renderer.render(this.gateway.button.mini_cart_wrapper,this.gateway.hosted_fields.mini_cart_wrapper,this.actionHandler.configuration())}};var c=class{constructor(e,t,r){this.id=e,this.quantity=t,this.variations=r}data(){return{id:this.id,quantity:this.quantity,variations:this.variations}}};var d=class{constructor(e,t){this.endpoint=e,this.nonce=t}update(e,t){return new Promise((r,n)=>{fetch(this.endpoint,{method:"POST",body:JSON.stringify({nonce:this.nonce,products:t})}).then(e=>e.json()).then(t=>{if(!t.success)return void n(t.data);const o=e(t.data);r(o)})})}};var u=class{constructor(e,t,r){this.element=e,this.showCallback=t,this.hideCallback=r,this.observer=null}init(){const e=()=>{this.element.classList.contains("disabled")?this.hideCallback():this.showCallback()};this.observer=new MutationObserver(e),this.observer.observe(this.element,{attributes:!0}),e()}disconnect(){this.observer.disconnect()}};var l=class{constructor(e,t,r,n,o,a){this.config=e,this.updateCart=t,this.showButtonCallback=r,this.hideButtonCallback=n,this.formElement=o,this.errorHandler=a}configuration(){if(this.hasVariations()){new u(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:o(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}createOrder(){var e=null;e=this.isGroupedProduct()?()=>{const e=[];return this.formElement.querySelectorAll('input[type="number"]').forEach(t=>{if(!t.value)return;const r=t.getAttribute("name").match(/quantity\[([\d]*)\]/);if(2!==r.length)return;const n=parseInt(r[1]),o=parseInt(t.value);e.push(new c(n,o,null))}),e}:()=>{const e=document.querySelector('[name="add-to-cart"]').value,t=document.querySelector('[name="quantity"]').value,r=this.variations();return[new c(e,t,r)]};return(t,r)=>{this.errorHandler.clear();return this.updateCart.update(e=>{const t=a(),r=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"";return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,purchase_units:e,payer:t,bn_code:r,context:this.config.context})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw console.error(e),Error(e.data.message);return e.data.id}))},e())}}variations(){if(!this.hasVariations())return null;return[...this.formElement.querySelectorAll("[name^='attribute_']")].map(e=>({value:e.value,name:e.name}))}hasVariations(){return this.formElement.classList.contains("variations_form")}isGroupedProduct(){return this.formElement.classList.contains("grouped_form")}};var h=class{constructor(e,t,r){this.gateway=e,this.renderer=t,this.messages=r}init(){this.shouldRender()?this.render():this.renderer.hideButtons(this.gateway.hosted_fields.wrapper)}shouldRender(){return null!==document.querySelector("form.cart")}render(){const e=new l(this.gateway,new d(this.gateway.ajax.change_cart.endpoint,this.gateway.ajax.change_cart.nonce),()=>{this.renderer.showButtons(this.gateway.button.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper);let e="0";document.querySelector("form.cart ins .woocommerce-Price-amount")?e=document.querySelector("form.cart ins .woocommerce-Price-amount").innerText:document.querySelector("form.cart .woocommerce-Price-amount")&&(e=document.querySelector("form.cart .woocommerce-Price-amount").innerText);const t=parseInt(e.replace(/([^\d,\.\s]*)/g,""));this.messages.renderWithAmount(t)},()=>{this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.hosted_fields.wrapper)},document.querySelector("form.cart"),new n(this.gateway.labels.error.generic));this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}};var p=class{constructor(e,t){this.gateway=e,this.renderer=t}init(){this.shouldRender()&&(this.render(),jQuery(document.body).on("updated_cart_totals updated_checkout",()=>{this.render()}))}shouldRender(){return null!==document.querySelector(this.gateway.button.wrapper)||null!==document.querySelector(this.gateway.hosted_fields.wrapper)}render(){const e=new i(PayPalCommerceGateway,new n(this.gateway.labels.error.generic));this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}};var m=(e,t)=>(r,n)=>fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:r.orderID})}).then(e=>e.json()).then(e=>{if(!e.success){if(t.genericError(),console.error(e),console.log(n),void 0!==n.restart)return n.restart();throw new Error(e.data.message)}document.querySelector("#place_order").click()});var y=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=a(),n=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"",o=this.errorHandler,i=jQuery("form.checkout").serialize();return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:r,bn_code:n,context:this.config.context,form:i})}).then((function(e){return e.json()})).then((function(e){if(!e.success)return void o.message(e.data.message,!0);const t=document.createElement("input");return t.setAttribute("type","hidden"),t.setAttribute("name","ppcp-resume-order"),t.setAttribute("value",e.data.purchase_units[0].custom_id),document.querySelector("form.checkout").append(t),e.data.id}))},onApprove:m(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}};var f=class{constructor(e,t,r){this.gateway=e,this.renderer=t,this.messages=r}init(){this.render(),jQuery(document.body).on("updated_checkout",()=>{this.render()}),jQuery(document.body).on("updated_checkout payment_method_selected",()=>{this.switchBetweenPayPalandOrderButton()}),this.switchBetweenPayPalandOrderButton()}shouldRender(){return!document.querySelector(this.gateway.button.cancel_wrapper)&&(null!==document.querySelector(this.gateway.button.wrapper)||null!==document.querySelector(this.gateway.hosted_fields.wrapper))}render(){if(!this.shouldRender())return;document.querySelector(this.gateway.hosted_fields.wrapper+">div")&&document.querySelector(this.gateway.hosted_fields.wrapper+">div").setAttribute("style","");const e=new y(PayPalCommerceGateway,new n(this.gateway.labels.error.generic));this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){const e=jQuery('input[name="payment_method"]:checked').val();"ppcp-gateway"!==e&&"ppcp-credit-card-gateway"!==e?(this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.messages.wrapper),this.renderer.hideButtons(this.gateway.hosted_fields.wrapper),jQuery("#place_order").show()):(jQuery("#place_order").hide(),"ppcp-gateway"===e&&(this.renderer.showButtons(this.gateway.button.wrapper),this.renderer.showButtons(this.gateway.messages.wrapper),this.messages.render(),this.renderer.hideButtons(this.gateway.hosted_fields.wrapper)),"ppcp-credit-card-gateway"===e&&(this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.messages.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper)))}};var g=class{constructor(e,t){this.defaultConfig=t,this.creditCardRenderer=e}render(e,t,r){this.renderButtons(e,r),this.creditCardRenderer.render(t,r)}renderButtons(e,t){if(!document.querySelector(e)||this.isAlreadyRendered(e))return;const r=e===this.defaultConfig.button.wrapper?this.defaultConfig.button.style:this.defaultConfig.button.mini_cart_style;paypal.Buttons({style:r,...t}).render(e)}isAlreadyRendered(e){return document.querySelector(e).hasChildNodes()}hideButtons(e){const t=document.querySelector(e);return!!t&&(t.style.display="none",!0)}showButtons(e){const t=document.querySelector(e);return!!t&&(t.style.display="block",!0)}};var w=class{constructor(e,t){this.defaultConfig=e,this.errorHandler=t}render(e,t){if("checkout"===this.defaultConfig.context&&null!==e&&null!==document.querySelector(e))if(void 0!==paypal.HostedFields&&paypal.HostedFields.isEligible())this.defaultConfig.enforce_vault&&document.querySelector(e+" .ppcp-credit-card-vault")&&(document.querySelector(e+" .ppcp-credit-card-vault").checked=!0,document.querySelector(e+" .ppcp-credit-card-vault").setAttribute("disabled",!0)),paypal.HostedFields.render({createOrder:t.createOrder,fields:{number:{selector:e+" .ppcp-credit-card",placeholder:this.defaultConfig.hosted_fields.labels.credit_card_number},cvv:{selector:e+" .ppcp-cvv",placeholder:this.defaultConfig.hosted_fields.labels.cvv},expirationDate:{selector:e+" .ppcp-expiration-date",placeholder:this.defaultConfig.hosted_fields.labels.mm_yyyy}}}).then(r=>{const n=n=>{n&&n.preventDefault(),this.errorHandler.clear();const o=r.getState();if(Object.keys(o.fields).every((function(e){return o.fields[e].isValid}))){let n=!!document.querySelector(e+" .ppcp-credit-card-vault")&&document.querySelector(e+" .ppcp-credit-card-vault").checked;n=this.defaultConfig.enforce_vault||n,r.submit({contingencies:["3D_SECURE"],vault:n}).then(e=>(e.orderID=e.orderId,t.onApprove(e)))}else this.errorHandler.message(this.defaultConfig.hosted_fields.labels.fields_not_valid)};r.on("inputSubmitRequest",(function(){n(null)})),document.querySelector(e).addEventListener("submit",n)});else{const t=document.querySelector(e);t.parentNode.removeChild(t)}}};const _=(e,t)=>{if(!e)return!1;if(e.user!==t)return!1;return!((new Date).getTime()>=1e3*e.expiration)};var b=(e,t)=>{const r=(e=>{const t=JSON.parse(sessionStorage.getItem("ppcp-data-client-id"));return _(t,e)?t.token:null})(t.user);if(r)return e.setAttribute("data-client-token",r),void document.body.append(e);fetch(t.endpoint,{method:"POST",body:JSON.stringify({nonce:t.nonce})}).then(e=>e.json()).then(r=>{_(r,t.user)&&((e=>{sessionStorage.setItem("ppcp-data-client-id",JSON.stringify(e))})(r),e.setAttribute("data-client-token",r.token),document.body.append(e))})};var v=class{constructor(e){this.config=e}render(){this.shouldRender()&&paypal.Messages({amount:this.config.amount,placement:this.config.placement,style:this.config.style}).render(this.config.wrapper)}renderWithAmount(e){if(!this.shouldRender())return;const t=document.createElement("div");t.setAttribute("id",this.config.wrapper.replace("#",""));const r=document.querySelector(this.config.wrapper).nextSibling;document.querySelector(this.config.wrapper).parentElement.removeChild(document.querySelector(this.config.wrapper)),r.parentElement.insertBefore(t,r),paypal.Messages({amount:e,placement:this.config.placement,style:this.config.style}).render(this.config.wrapper)}shouldRender(){return void 0!==paypal.Messages&&void 0!==this.config.wrapper&&!!document.querySelector(this.config.wrapper)}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.addEventListener("load",e=>{(()=>{const e=new n(PayPalCommerceGateway.labels.error.generic),t=new w(PayPalCommerceGateway,e),r=new g(t,PayPalCommerceGateway),o=new v(PayPalCommerceGateway.messages),a=PayPalCommerceGateway.context;if("mini-cart"===a||"product"===a){new s(PayPalCommerceGateway,r).init()}if("product"===a){new h(PayPalCommerceGateway,r,o).init()}if("cart"===a){new p(PayPalCommerceGateway,r).init()}if("checkout"===a){new f(PayPalCommerceGateway,r,o).init()}"checkout"!==a&&o.render()})()}),e.setAttribute("src",PayPalCommerceGateway.button.url),Object.entries(PayPalCommerceGateway.script_attributes).forEach(t=>{e.setAttribute(t[0],t[1])}),PayPalCommerceGateway.data_client_id.set_attribute?b(e,PayPalCommerceGateway.data_client_id):document.body.append(e)})}]); -//# sourceMappingURL=button.js.map \ No newline at end of file diff --git a/modules/ppcp-button/assets/js/button.js.map b/modules/ppcp-button/assets/js/button.js.map deleted file mode 100644 index a57eddc48..000000000 --- a/modules/ppcp-button/assets/js/button.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/js/modules/ErrorHandler.js","webpack:///./resources/js/modules/OnApproveHandler/onApproveForContinue.js","webpack:///./resources/js/modules/Helper/PayerData.js","webpack:///./resources/js/modules/ActionHandler/CartActionHandler.js","webpack:///./resources/js/modules/ContextBootstrap/MiniCartBootstap.js","webpack:///./resources/js/modules/Entity/Product.js","webpack:///./resources/js/modules/Helper/UpdateCart.js","webpack:///./resources/js/modules/Helper/ButtonsToggleListener.js","webpack:///./resources/js/modules/ActionHandler/SingleProductActionHandler.js","webpack:///./resources/js/modules/ContextBootstrap/SingleProductBootstap.js","webpack:///./resources/js/modules/ContextBootstrap/CartBootstap.js","webpack:///./resources/js/modules/OnApproveHandler/onApproveForPayNow.js","webpack:///./resources/js/modules/ActionHandler/CheckoutActionHandler.js","webpack:///./resources/js/modules/ContextBootstrap/CheckoutBootstap.js","webpack:///./resources/js/modules/Renderer/Renderer.js","webpack:///./resources/js/modules/Renderer/CreditCardRenderer.js","webpack:///./resources/js/modules/DataClientIdAttributeHandler.js","webpack:///./resources/js/modules/Renderer/MessageRenderer.js","webpack:///./resources/js/button.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","ErrorHandler","constructor","genericErrorText","this","wrapper","document","querySelector","genericError","classList","contains","clear","message","text","persist","add","remove","innerText","sanitize","jQuery","scroll_to_notices","textarea","createElement","innerHTML","replace","onApprove","context","errorHandler","data","actions","fetch","config","ajax","approve_order","endpoint","method","body","JSON","stringify","nonce","order_id","orderID","then","res","json","success","restart","catch","err","location","href","redirect","payerData","payer","PayPalCommerceGateway","phone","phone_type","phone_number","national_number","email_address","surname","given_name","address","country_code","address_line_1","address_line_2","admin_area_1","admin_area_2","postal_code","CartActionHandler","configuration","createOrder","bnCode","bn_codes","create_order","purchase_units","bn_code","console","error","Error","id","onError","MiniCartBootstap","gateway","renderer","actionHandler","init","labels","generic","render","on","shouldRender","button","mini_cart_wrapper","hosted_fields","Product","quantity","variations","UpdateCart","update","onResolve","products","Promise","resolve","reject","result","resolved","ButtonsToggleListener","element","showCallback","hideCallback","observer","callback","MutationObserver","observe","attributes","disconnect","SingleProductActionHandler","updateCart","showButtonCallback","hideButtonCallback","formElement","hasVariations","getProducts","isGroupedProduct","querySelectorAll","forEach","elementName","getAttribute","match","length","parseInt","push","qty","map","SingleProductBootstap","messages","hideButtons","change_cart","showButtons","priceText","amount","renderWithAmount","CartBootstrap","log","click","CheckoutActionHandler","formValues","serialize","form","input","setAttribute","custom_id","append","CheckoutBootstap","switchBetweenPayPalandOrderButton","cancel_wrapper","currentPaymentMethod","val","show","hide","Renderer","creditCardRenderer","defaultConfig","hostedFieldsWrapper","contextConfig","renderButtons","isAlreadyRendered","style","mini_cart_style","paypal","Buttons","hasChildNodes","domElement","display","CreditCardRenderer","HostedFields","isEligible","enforce_vault","checked","fields","number","selector","placeholder","credit_card_number","cvv","expirationDate","mm_yyyy","hostedFields","submitEvent","event","preventDefault","state","getState","keys","every","isValid","vault","submit","contingencies","payload","orderId","fields_not_valid","addEventListener","wrapperElement","parentNode","removeChild","validateToken","token","user","Date","getTime","expiration","dataClientIdAttributeHandler","script","parse","sessionStorage","getItem","storedTokenForUser","setItem","storeToken","MessageRenderer","Messages","placement","newWrapper","sibling","nextSibling","parentElement","insertBefore","messageRenderer","bootstrap","url","entries","script_attributes","keyValue","data_client_id","set_attribute"],"mappings":"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","file":"js/button.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 = 1);\n","class ErrorHandler {\n\n constructor(genericErrorText)\n {\n this.genericErrorText = genericErrorText;\n this.wrapper = document.querySelector('.woocommerce-notices-wrapper');\n }\n\n genericError() {\n if (this.wrapper.classList.contains('ppcp-persist')) {\n return;\n }\n this.clear();\n this.message(this.genericErrorText)\n }\n\n message(text, persist = false)\n {\n this.wrapper.classList.add('woocommerce-error');\n if (persist) {\n this.wrapper.classList.add('ppcp-persist');\n } else {\n this.wrapper.classList.remove('ppcp-persist');\n }\n this.wrapper.innerText = this.sanitize(text);\n jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'))\n }\n\n sanitize(text)\n {\n const textarea = document.createElement('textarea');\n textarea.innerHTML = text;\n return textarea.value.replace('Error: ', '');\n }\n\n clear()\n {\n if (! this.wrapper.classList.contains('woocommerce-error')) {\n return;\n }\n this.wrapper.classList.remove('woocommerce-error');\n this.wrapper.innerText = '';\n }\n}\n\nexport default ErrorHandler;\n","const onApprove = (context, errorHandler) => {\n return (data, actions) => {\n return fetch(context.config.ajax.approve_order.endpoint, {\n method: 'POST',\n body: JSON.stringify({\n nonce: context.config.ajax.approve_order.nonce,\n order_id:data.orderID\n })\n }).then((res)=>{\n return res.json();\n }).then((data)=>{\n if (!data.success) {\n errorHandler.genericError();\n return actions.restart().catch(err => {\n errorHandler.genericError();\n });;\n }\n location.href = context.config.redirect;\n });\n\n }\n}\n\nexport default onApprove;\n","export const payerData = () => {\n const payer = PayPalCommerceGateway.payer;\n if (! payer) {\n return null;\n }\n\n const phone = (document.querySelector('#billing_phone') || typeof payer.phone !== 'undefined') ?\n {\n phone_type:\"HOME\",\n phone_number:{\n national_number : (document.querySelector('#billing_phone')) ? document.querySelector('#billing_phone').value : payer.phone.phone_number.national_number\n }\n } : null;\n const payerData = {\n email_address:(document.querySelector('#billing_email')) ? document.querySelector('#billing_email').value : payer.email_address,\n name : {\n surname: (document.querySelector('#billing_last_name')) ? document.querySelector('#billing_last_name').value : payer.name.surname,\n given_name: (document.querySelector('#billing_first_name')) ? document.querySelector('#billing_first_name').value : payer.name.given_name\n },\n address : {\n country_code : (document.querySelector('#billing_country')) ? document.querySelector('#billing_country').value : payer.address.country_code,\n address_line_1 : (document.querySelector('#billing_address_1')) ? document.querySelector('#billing_address_1').value : payer.address.address_line_1,\n address_line_2 : (document.querySelector('#billing_address_2')) ? document.querySelector('#billing_address_2').value : payer.address.address_line_2,\n admin_area_1 : (document.querySelector('#billing_city')) ? document.querySelector('#billing_city').value : payer.address.admin_area_1,\n admin_area_2 : (document.querySelector('#billing_state')) ? document.querySelector('#billing_state').value : payer.address.admin_area_2,\n postal_code : (document.querySelector('#billing_postcode')) ? document.querySelector('#billing_postcode').value : payer.address.postal_code\n }\n };\n\n if (phone) {\n payerData.phone = phone;\n }\n return payerData;\n}\n","import onApprove from '../OnApproveHandler/onApproveForContinue.js';\nimport {payerData} from \"../Helper/PayerData\";\n\nclass CartActionHandler {\n\n constructor(config, errorHandler) {\n this.config = config;\n this.errorHandler = errorHandler;\n }\n\n configuration() {\n const createOrder = (data, actions) => {\n const payer = payerData();\n const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ?\n this.config.bn_codes[this.config.context] : '';\n return fetch(this.config.ajax.create_order.endpoint, {\n method: 'POST',\n body: JSON.stringify({\n nonce: this.config.ajax.create_order.nonce,\n purchase_units: [],\n bn_code:bnCode,\n payer,\n context:this.config.context\n }),\n }).then(function(res) {\n return res.json();\n }).then(function(data) {\n if (!data.success) {\n console.error(data);\n throw Error(data.data.message);\n }\n return data.data.id;\n });\n };\n\n return {\n createOrder,\n onApprove: onApprove(this, this.errorHandler),\n onError: (error) => {\n this.errorHandler.genericError();\n }\n };\n }\n}\n\nexport default CartActionHandler;\n","import ErrorHandler from '../ErrorHandler';\nimport CartActionHandler from '../ActionHandler/CartActionHandler';\n\nclass MiniCartBootstap {\n constructor(gateway, renderer) {\n this.gateway = gateway;\n this.renderer = renderer;\n this.actionHandler = null;\n }\n\n init() {\n\n this.actionHandler = new CartActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(this.gateway.labels.error.generic),\n );\n this.render();\n\n jQuery(document.body).on('wc_fragments_loaded wc_fragments_refreshed', () => {\n this.render();\n });\n }\n\n shouldRender() {\n return document.querySelector(this.gateway.button.mini_cart_wrapper) !==\n null || document.querySelector(this.gateway.hosted_fields.mini_cart_wrapper) !==\n null;\n }\n\n render() {\n if (!this.shouldRender()) {\n return;\n }\n\n this.renderer.render(\n this.gateway.button.mini_cart_wrapper,\n this.gateway.hosted_fields.mini_cart_wrapper,\n this.actionHandler.configuration()\n );\n }\n}\n\nexport default MiniCartBootstap;","class Product {\n\n constructor(id, quantity, variations) {\n this.id = id;\n this.quantity = quantity;\n this.variations = variations;\n }\n\n data() {\n return {\n id:this.id,\n quantity:this.quantity,\n variations:this.variations\n }\n }\n}\n\nexport default Product;","import Product from \"../Entity/Product\";\nclass UpdateCart {\n\n constructor(endpoint, nonce)\n {\n this.endpoint = endpoint;\n this.nonce = nonce;\n }\n\n /**\n *\n * @param onResolve\n * @param {Product[]} products\n * @returns {Promise}\n */\n update(onResolve, products)\n {\n return new Promise((resolve, reject) => {\n fetch(\n this.endpoint,\n {\n method: 'POST',\n body: JSON.stringify({\n nonce: this.nonce,\n products,\n })\n }\n ).then(\n (result) => {\n return result.json();\n }\n ).then((result) => {\n if (! result.success) {\n reject(result.data);\n return;\n }\n\n const resolved = onResolve(result.data);\n resolve(resolved);\n })\n });\n }\n}\n\nexport default UpdateCart;","/**\n * When you can't add something to the cart, the PayPal buttons should not show.\n * Therefore we listen for changes on the add to cart button and show/hide the buttons accordingly.\n */\n\nclass ButtonsToggleListener {\n constructor(element, showCallback, hideCallback)\n {\n this.element = element;\n this.showCallback = showCallback;\n this.hideCallback = hideCallback;\n this.observer = null;\n }\n\n init()\n {\n const config = { attributes : true };\n const callback = () => {\n if (this.element.classList.contains('disabled')) {\n this.hideCallback();\n return;\n }\n this.showCallback();\n }\n this.observer = new MutationObserver(callback);\n this.observer.observe(this.element, config);\n callback();\n }\n\n disconnect()\n {\n this.observer.disconnect();\n }\n}\n\nexport default ButtonsToggleListener;","import ButtonsToggleListener from '../Helper/ButtonsToggleListener';\nimport Product from '../Entity/Product';\nimport onApprove from '../OnApproveHandler/onApproveForContinue';\nimport {payerData} from \"../Helper/PayerData\";\n\nclass SingleProductActionHandler {\n\n constructor(\n config,\n updateCart,\n showButtonCallback,\n hideButtonCallback,\n formElement,\n errorHandler\n ) {\n this.config = config;\n this.updateCart = updateCart;\n this.showButtonCallback = showButtonCallback;\n this.hideButtonCallback = hideButtonCallback;\n this.formElement = formElement;\n this.errorHandler = errorHandler;\n }\n\n configuration()\n {\n\n if ( this.hasVariations() ) {\n const observer = new ButtonsToggleListener(\n this.formElement.querySelector('.single_add_to_cart_button'),\n this.showButtonCallback,\n this.hideButtonCallback\n );\n observer.init();\n }\n\n return {\n createOrder: this.createOrder(),\n onApprove: onApprove(this, this.errorHandler),\n onError: (error) => {\n this.errorHandler.genericError();\n }\n }\n }\n\n createOrder()\n {\n var getProducts = null;\n if (! this.isGroupedProduct() ) {\n getProducts = () => {\n const id = document.querySelector('[name=\"add-to-cart\"]').value;\n const qty = document.querySelector('[name=\"quantity\"]').value;\n const variations = this.variations();\n return [new Product(id, qty, variations)];\n }\n } else {\n getProducts = () => {\n const products = [];\n this.formElement.querySelectorAll('input[type=\"number\"]').forEach((element) => {\n if (! element.value) {\n return;\n }\n const elementName = element.getAttribute('name').match(/quantity\\[([\\d]*)\\]/);\n if (elementName.length !== 2) {\n return;\n }\n const id = parseInt(elementName[1]);\n const quantity = parseInt(element.value);\n products.push(new Product(id, quantity, null));\n })\n return products;\n }\n }\n const createOrder = (data, actions) => {\n this.errorHandler.clear();\n\n const onResolve = (purchase_units) => {\n const payer = payerData();\n const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ?\n this.config.bn_codes[this.config.context] : '';\n return fetch(this.config.ajax.create_order.endpoint, {\n method: 'POST',\n body: JSON.stringify({\n nonce: this.config.ajax.create_order.nonce,\n purchase_units,\n payer,\n bn_code:bnCode,\n context:this.config.context\n })\n }).then(function (res) {\n return res.json();\n }).then(function (data) {\n if (!data.success) {\n console.error(data);\n throw Error(data.data.message);\n }\n return data.data.id;\n });\n };\n\n const promise = this.updateCart.update(onResolve, getProducts());\n return promise;\n };\n return createOrder;\n }\n\n variations()\n {\n\n if (! this.hasVariations()) {\n return null;\n }\n const attributes = [...this.formElement.querySelectorAll(\"[name^='attribute_']\")].map(\n (element) => {\n return {\n value:element.value,\n name:element.name\n }\n }\n );\n return attributes;\n }\n\n hasVariations()\n {\n return this.formElement.classList.contains('variations_form');\n }\n\n isGroupedProduct()\n {\n return this.formElement.classList.contains('grouped_form');\n }\n}\nexport default SingleProductActionHandler;\n","import ErrorHandler from '../ErrorHandler';\nimport UpdateCart from \"../Helper/UpdateCart\";\nimport SingleProductActionHandler from \"../ActionHandler/SingleProductActionHandler\";\n\nclass SingleProductBootstap {\n constructor(gateway, renderer, messages) {\n this.gateway = gateway;\n this.renderer = renderer;\n this.messages = messages;\n }\n\n init() {\n if (!this.shouldRender()) {\n this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);\n return;\n }\n\n this.render();\n }\n\n shouldRender() {\n if (document.querySelector('form.cart') === null) {\n return false;\n }\n\n return true;\n }\n\n render() {\n const actionHandler = new SingleProductActionHandler(\n this.gateway,\n new UpdateCart(\n this.gateway.ajax.change_cart.endpoint,\n this.gateway.ajax.change_cart.nonce,\n ),\n () => {\n this.renderer.showButtons(this.gateway.button.wrapper);\n this.renderer.showButtons(this.gateway.hosted_fields.wrapper);\n let priceText = \"0\";\n if (document.querySelector('form.cart ins .woocommerce-Price-amount')) {\n priceText = document.querySelector('form.cart ins .woocommerce-Price-amount').innerText;\n }\n else if (document.querySelector('form.cart .woocommerce-Price-amount')) {\n priceText = document.querySelector('form.cart .woocommerce-Price-amount').innerText;\n }\n const amount = parseInt(priceText.replace(/([^\\d,\\.\\s]*)/g, ''));\n this.messages.renderWithAmount(amount)\n },\n () => {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);\n },\n document.querySelector('form.cart'),\n new ErrorHandler(this.gateway.labels.error.generic),\n );\n\n this.renderer.render(\n this.gateway.button.wrapper,\n this.gateway.hosted_fields.wrapper,\n actionHandler.configuration(),\n );\n }\n}\n\nexport default SingleProductBootstap;","import CartActionHandler from '../ActionHandler/CartActionHandler';\nimport ErrorHandler from '../ErrorHandler';\n\nclass CartBootstrap {\n constructor(gateway, renderer) {\n this.gateway = gateway;\n this.renderer = renderer;\n }\n\n init() {\n if (!this.shouldRender()) {\n return;\n }\n\n this.render();\n\n jQuery(document.body).on('updated_cart_totals updated_checkout', () => {\n this.render();\n });\n }\n\n shouldRender() {\n return document.querySelector(this.gateway.button.wrapper) !==\n null || document.querySelector(this.gateway.hosted_fields.wrapper) !==\n null;\n }\n\n render() {\n const actionHandler = new CartActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(this.gateway.labels.error.generic),\n );\n\n this.renderer.render(\n this.gateway.button.wrapper,\n this.gateway.hosted_fields.wrapper,\n actionHandler.configuration(),\n );\n }\n}\n\nexport default CartBootstrap;","const onApprove = (context, errorHandler) => {\n return (data, actions) => {\n return fetch(context.config.ajax.approve_order.endpoint, {\n method: 'POST',\n body: JSON.stringify({\n nonce: context.config.ajax.approve_order.nonce,\n order_id:data.orderID\n })\n }).then((res)=>{\n return res.json();\n }).then((data)=>{\n if (!data.success) {\n errorHandler.genericError();\n console.error(data);\n console.log(actions);\n if (typeof actions.restart !== 'undefined') {\n return actions.restart();\n }\n throw new Error(data.data.message);\n }\n document.querySelector('#place_order').click()\n });\n\n }\n}\n\nexport default onApprove;\n","import onApprove from '../OnApproveHandler/onApproveForPayNow.js';\nimport {payerData} from \"../Helper/PayerData\";\n\nclass CheckoutActionHandler {\n\n constructor(config, errorHandler) {\n this.config = config;\n this.errorHandler = errorHandler;\n }\n\n configuration() {\n const createOrder = (data, actions) => {\n const payer = payerData();\n const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ?\n this.config.bn_codes[this.config.context] : '';\n\n\n const errorHandler = this.errorHandler;\n const formValues = jQuery('form.checkout').serialize();\n\n return fetch(this.config.ajax.create_order.endpoint, {\n method: 'POST',\n body: JSON.stringify({\n nonce: this.config.ajax.create_order.nonce,\n payer,\n bn_code:bnCode,\n context:this.config.context,\n form:formValues\n })\n }).then(function (res) {\n return res.json();\n }).then(function (data) {\n if (!data.success) {\n errorHandler.message(data.data.message, true);\n return;\n }\n const input = document.createElement('input');\n input.setAttribute('type', 'hidden');\n input.setAttribute('name', 'ppcp-resume-order');\n input.setAttribute('value', data.data.purchase_units[0].custom_id);\n document.querySelector('form.checkout').append(input);\n return data.data.id;\n });\n }\n return {\n createOrder,\n onApprove:onApprove(this, this.errorHandler),\n onError: (error) => {\n this.errorHandler.genericError();\n }\n }\n }\n}\n\nexport default CheckoutActionHandler;\n","import ErrorHandler from '../ErrorHandler';\nimport CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';\n\nclass CheckoutBootstap {\n constructor(gateway, renderer, messages) {\n this.gateway = gateway;\n this.renderer = renderer;\n this.messages = messages\n }\n\n init() {\n\n this.render();\n\n jQuery(document.body).on('updated_checkout', () => {\n this.render();\n });\n\n jQuery(document.body).\n on('updated_checkout payment_method_selected', () => {\n this.switchBetweenPayPalandOrderButton();\n });\n this.switchBetweenPayPalandOrderButton();\n }\n\n shouldRender() {\n if (document.querySelector(this.gateway.button.cancel_wrapper)) {\n return false;\n }\n\n return document.querySelector(this.gateway.button.wrapper) !== null || document.querySelector(this.gateway.hosted_fields.wrapper) !== null;\n }\n\n render() {\n if (!this.shouldRender()) {\n return;\n }\n if (document.querySelector(this.gateway.hosted_fields.wrapper + '>div')) {\n document.querySelector(this.gateway.hosted_fields.wrapper + '>div').setAttribute('style', '');\n }\n const actionHandler = new CheckoutActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(this.gateway.labels.error.generic),\n );\n\n this.renderer.render(\n this.gateway.button.wrapper,\n this.gateway.hosted_fields.wrapper,\n actionHandler.configuration(),\n );\n }\n\n switchBetweenPayPalandOrderButton() {\n const currentPaymentMethod = jQuery(\n 'input[name=\"payment_method\"]:checked').val();\n\n if (currentPaymentMethod !== 'ppcp-gateway' && currentPaymentMethod !== 'ppcp-credit-card-gateway') {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n this.renderer.hideButtons(this.gateway.messages.wrapper);\n this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);\n jQuery('#place_order').show();\n }\n else {\n jQuery('#place_order').hide();\n if (currentPaymentMethod === 'ppcp-gateway') {\n this.renderer.showButtons(this.gateway.button.wrapper);\n this.renderer.showButtons(this.gateway.messages.wrapper);\n this.messages.render();\n this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);\n }\n if (currentPaymentMethod === 'ppcp-credit-card-gateway') {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n this.renderer.hideButtons(this.gateway.messages.wrapper);\n this.renderer.showButtons(this.gateway.hosted_fields.wrapper);\n }\n }\n }\n}\n\nexport default CheckoutBootstap;","class Renderer {\n constructor(creditCardRenderer, defaultConfig) {\n this.defaultConfig = defaultConfig;\n this.creditCardRenderer = creditCardRenderer;\n }\n\n render(wrapper, hostedFieldsWrapper, contextConfig) {\n\n this.renderButtons(wrapper, contextConfig);\n this.creditCardRenderer.render(hostedFieldsWrapper, contextConfig);\n }\n\n renderButtons(wrapper, contextConfig) {\n if (! document.querySelector(wrapper) || this.isAlreadyRendered(wrapper)) {\n return;\n }\n\n const style = wrapper === this.defaultConfig.button.wrapper ? this.defaultConfig.button.style : this.defaultConfig.button.mini_cart_style;\n paypal.Buttons({\n style,\n ...contextConfig,\n }).render(wrapper);\n }\n\n isAlreadyRendered(wrapper) {\n return document.querySelector(wrapper).hasChildNodes();\n }\n\n hideButtons(element) {\n const domElement = document.querySelector(element);\n if (! domElement ) {\n return false;\n }\n domElement.style.display = 'none';\n return true;\n }\n\n showButtons(element) {\n const domElement = document.querySelector(element);\n if (! domElement ) {\n return false;\n }\n domElement.style.display = 'block';\n return true;\n }\n}\n\nexport default Renderer;","class CreditCardRenderer {\n\n constructor(defaultConfig, errorHandler) {\n this.defaultConfig = defaultConfig;\n this.errorHandler = errorHandler;\n }\n\n render(wrapper, contextConfig) {\n\n if (\n this.defaultConfig.context !== 'checkout'\n || wrapper === null\n || document.querySelector(wrapper) === null\n ) {\n return;\n }\n if (\n typeof paypal.HostedFields === 'undefined'\n || ! paypal.HostedFields.isEligible()\n ) {\n const wrapperElement = document.querySelector(wrapper);\n wrapperElement.parentNode.removeChild(wrapperElement);\n return;\n }\n if (\n this.defaultConfig.enforce_vault\n && document.querySelector(wrapper + ' .ppcp-credit-card-vault')\n ) {\n document.querySelector(wrapper + ' .ppcp-credit-card-vault').checked = true;\n document.querySelector(wrapper + ' .ppcp-credit-card-vault').setAttribute('disabled', true);\n }\n paypal.HostedFields.render({\n createOrder: contextConfig.createOrder,\n fields: {\n number: {\n selector: wrapper + ' .ppcp-credit-card',\n placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number,\n },\n cvv: {\n selector: wrapper + ' .ppcp-cvv',\n placeholder: this.defaultConfig.hosted_fields.labels.cvv,\n },\n expirationDate: {\n selector: wrapper + ' .ppcp-expiration-date',\n placeholder: this.defaultConfig.hosted_fields.labels.mm_yyyy,\n }\n }\n }).then(hostedFields => {\n const submitEvent = (event) => {\n if (event) {\n event.preventDefault();\n }\n this.errorHandler.clear();\n const state = hostedFields.getState();\n const formValid = Object.keys(state.fields).every(function (key) {\n return state.fields[key].isValid;\n });\n\n if (formValid) {\n\n let vault = document.querySelector(wrapper + ' .ppcp-credit-card-vault') ?\n document.querySelector(wrapper + ' .ppcp-credit-card-vault').checked : false;\n vault = this.defaultConfig.enforce_vault || vault;\n\n hostedFields.submit({\n contingencies: ['3D_SECURE'],\n vault\n }).then((payload) => {\n payload.orderID = payload.orderId;\n return contextConfig.onApprove(payload);\n });\n } else {\n this.errorHandler.message(this.defaultConfig.hosted_fields.labels.fields_not_valid);\n }\n }\n hostedFields.on('inputSubmitRequest', function () {\n submitEvent(null);\n });\n document.querySelector(wrapper).addEventListener(\n 'submit',\n submitEvent\n );\n });\n }\n}\nexport default CreditCardRenderer;","const storageKey = 'ppcp-data-client-id';\n\nconst validateToken = (token, user) => {\n if (! token) {\n return false;\n }\n if (token.user !== user) {\n return false;\n }\n const currentTime = new Date().getTime();\n const isExpired = currentTime >= token.expiration * 1000;\n return ! isExpired;\n}\n\nconst storedTokenForUser = (user) => {\n const token = JSON.parse(sessionStorage.getItem(storageKey));\n if (validateToken(token, user)) {\n return token.token;\n }\n return null;\n}\n\nconst storeToken = (token) => {\n sessionStorage.setItem(storageKey, JSON.stringify(token));\n}\n\nconst dataClientIdAttributeHandler = (script, config) => {\n const token = storedTokenForUser(config.user);\n if (token) {\n script.setAttribute('data-client-token', token);\n document.body.append(script);\n return;\n }\n fetch(config.endpoint, {\n method: 'POST',\n body: JSON.stringify({\n nonce: config.nonce\n })\n }).then((res)=>{\n return res.json();\n }).then((data)=>{\n const isValid = validateToken(data, config.user);\n if (!isValid) {\n return;\n }\n storeToken(data);\n script.setAttribute('data-client-token', data.token);\n document.body.append(script);\n });\n}\n\nexport default dataClientIdAttributeHandler;","class MessageRenderer {\n\n constructor(config) {\n this.config = config;\n }\n\n render() {\n if (! this.shouldRender()) {\n return;\n }\n\n paypal.Messages({\n amount: this.config.amount,\n placement: this.config.placement,\n style: this.config.style\n }).render(this.config.wrapper);\n }\n\n renderWithAmount(amount) {\n\n if (! this.shouldRender()) {\n return;\n }\n\n const newWrapper = document.createElement('div');\n newWrapper.setAttribute('id', this.config.wrapper.replace('#', ''));\n\n const sibling = document.querySelector(this.config.wrapper).nextSibling;\n document.querySelector(this.config.wrapper).parentElement.removeChild(document.querySelector(this.config.wrapper));\n sibling.parentElement.insertBefore(newWrapper, sibling);\n paypal.Messages({\n amount,\n placement: this.config.placement,\n style: this.config.style\n }).render(this.config.wrapper);\n }\n\n shouldRender() {\n\n if (typeof paypal.Messages === 'undefined' || typeof this.config.wrapper === 'undefined' ) {\n return false;\n }\n if (! document.querySelector(this.config.wrapper)) {\n return false;\n }\n return true;\n }\n}\nexport default MessageRenderer;","import MiniCartBootstap from './modules/ContextBootstrap/MiniCartBootstap';\nimport SingleProductBootstap from './modules/ContextBootstrap/SingleProductBootstap';\nimport CartBootstrap from './modules/ContextBootstrap/CartBootstap';\nimport CheckoutBootstap from './modules/ContextBootstrap/CheckoutBootstap';\nimport Renderer from './modules/Renderer/Renderer';\nimport ErrorHandler from './modules/ErrorHandler';\nimport CreditCardRenderer from \"./modules/Renderer/CreditCardRenderer\";\nimport dataClientIdAttributeHandler from \"./modules/DataClientIdAttributeHandler\";\nimport MessageRenderer from \"./modules/Renderer/MessageRenderer\";\n\nconst bootstrap = () => {\n const errorHandler = new ErrorHandler(PayPalCommerceGateway.labels.error.generic);\n const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler);\n const renderer = new Renderer(creditCardRenderer, PayPalCommerceGateway);\n const messageRenderer = new MessageRenderer(PayPalCommerceGateway.messages);\n const context = PayPalCommerceGateway.context;\n if (context === 'mini-cart' || context === 'product') {\n const miniCartBootstrap = new MiniCartBootstap(\n PayPalCommerceGateway,\n renderer\n );\n\n miniCartBootstrap.init();\n }\n\n if (context === 'product') {\n const singleProductBootstrap = new SingleProductBootstap(\n PayPalCommerceGateway,\n renderer,\n messageRenderer,\n );\n\n singleProductBootstrap.init();\n }\n\n if (context === 'cart') {\n const cartBootstrap = new CartBootstrap(\n PayPalCommerceGateway,\n renderer,\n );\n\n cartBootstrap.init();\n }\n\n if (context === 'checkout') {\n const checkoutBootstap = new CheckoutBootstap(\n PayPalCommerceGateway,\n renderer,\n messageRenderer\n );\n\n checkoutBootstap.init();\n }\n\n if (context !== 'checkout') {\n messageRenderer.render();\n }\n};\ndocument.addEventListener(\n 'DOMContentLoaded',\n () => {\n if (!typeof (PayPalCommerceGateway)) {\n console.error('PayPal button could not be configured.');\n return;\n }\n const script = document.createElement('script');\n\n script.addEventListener('load', (event) => {\n bootstrap();\n });\n script.setAttribute('src', PayPalCommerceGateway.button.url);\n Object.entries(PayPalCommerceGateway.script_attributes).forEach(\n (keyValue) => {\n script.setAttribute(keyValue[0], keyValue[1]);\n }\n );\n\n if (PayPalCommerceGateway.data_client_id.set_attribute) {\n dataClientIdAttributeHandler(script, PayPalCommerceGateway.data_client_id);\n return;\n }\n\n document.body.append(script);\n },\n);"],"sourceRoot":""} \ No newline at end of file diff --git a/modules/ppcp-button/assets/js/hostedfields.js b/modules/ppcp-button/assets/js/hostedfields.js deleted file mode 100644 index 368ecbf57..000000000 --- a/modules/ppcp-button/assets/js/hostedfields.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){e.exports=r.p+"css/hosted-fields.css"}]); -//# sourceMappingURL=hostedfields.js.map \ No newline at end of file diff --git a/modules/ppcp-button/assets/js/hostedfields.js.map b/modules/ppcp-button/assets/js/hostedfields.js.map deleted file mode 100644 index e35ac3ab9..000000000 --- a/modules/ppcp-button/assets/js/hostedfields.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/css/hosted-fields.scss"],"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"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,kBClFrDhC,EAAOD,QAAU,IAA0B","file":"js/hostedfields.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 = 0);\n","module.exports = __webpack_public_path__ + \"css/hosted-fields.css\";"],"sourceRoot":""} \ No newline at end of file