diff --git a/modules.local/ppcp-button/assets/js/button.js b/modules.local/ppcp-button/assets/js/button.js index 43f76b5cc..5d6ac764d 100644 --- a/modules.local/ppcp-button/assets/js/button.js +++ b/modules.local/ppcp-button/assets/js/button.js @@ -1,2 +1,2 @@ -!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){"use strict";r.r(t);var n=class{constructor(){this.wrapper=document.querySelector(".woocommerce-notices-wrapper")}message(e){this.wrapper.classList.add("woocommerce-error"),this.wrapper.innerText=this.sanitize(e)}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)=>fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:t.orderID})}).then(e=>e.json()).then(t=>{if(!t.success)throw Error(t.data);location.href=e.config.redirect});const a=()=>{const e=PayPalCommerceGateway.payer;return e?{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},phone:{phone_type:"HOME",phone_number:{national_number:document.querySelector("#billing_phone")?document.querySelector("#billing_phone").value:e.phone.phone_number.national_number}}}:null};var i=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=a();return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,purchase_units:[],payer:r})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw Error(e.data);return e.data.id}))},onApprove:o(this),onError:e=>{this.errorHandler.message(e)}}}};var s=class{constructor(e,t){this.gateway=e,this.renderer=t}init(){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)}render(){if(!this.shouldRender())return;const e=new i(PayPalCommerceGateway,new n);this.renderer.render(this.gateway.button.mini_cart_wrapper,e.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 u=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 d=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 d(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:o(this),onError:e=>{this.errorHandler.message(e)}}}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();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})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw Error(e.data);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){this.gateway=e,this.renderer=t}init(){this.shouldRender()&&this.render()}shouldRender(){return null!==document.querySelector("form.cart")&&null!==document.querySelector(this.gateway.button.wrapper)}render(){const e=new l(this.gateway,new u(this.gateway.ajax.change_cart.endpoint,this.gateway.ajax.change_cart.nonce),()=>{this.renderer.showButtons(this.gateway.button.wrapper)},()=>{this.renderer.hideButtons(this.gateway.button.wrapper)},document.querySelector("form.cart"),new n);this.renderer.render(this.gateway.button.wrapper,e.configuration())}};var m=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)}render(){const e=new i(PayPalCommerceGateway,new n);this.renderer.render(this.gateway.button.wrapper,e.configuration())}};var y=e=>(t,r)=>fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:t.orderID})}).then(e=>e.json()).then(e=>{if(!e.success)throw Error(e.data);document.querySelector("#place_order").click()});var p=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=a();return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:r})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw Error(e.data);return e.data.id}))},onApprove:y(this),onError:e=>{this.errorHandler.message(e)}}}};var _=class{constructor(e,t){this.gateway=e,this.renderer=t}init(){this.shouldRender()&&(this.render(),jQuery(document.body).on("updated_checkout",()=>{this.render()}),jQuery(document.body).on("updated_checkout payment_method_selected",()=>{this.switchBetweenPayPalandOrderButton()}))}shouldRender(){return!document.querySelector(this.gateway.button.cancel_wrapper)&&null!==document.querySelector(this.gateway.button.wrapper)}render(){const e=new p(PayPalCommerceGateway,new n);this.renderer.render(this.gateway.button.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){"ppcp-gateway"!==jQuery('input[name="payment_method"]:checked').val()?(this.renderer.hideButtons(this.gateway.button.wrapper),jQuery("#place_order").show()):(this.renderer.showButtons(this.gateway.button.wrapper),jQuery("#place_order").hide())}};var f=class{constructor(e){this.defaultConfig=e}render(e,t){if(this.isAlreadyRendered(e))return;const r=this.defaultConfig.button.style;paypal.Buttons({style:r,...t}).render(e)}isAlreadyRendered(e){return document.querySelector(e).hasChildNodes()}hideButtons(e){document.querySelector(e).style.display="none"}showButtons(e){document.querySelector(e).style.display="block"}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.setAttribute("src",PayPalCommerceGateway.button.url),e.addEventListener("load",e=>{(()=>{const e=new f(PayPalCommerceGateway),t=PayPalCommerceGateway.context;if("mini-cart"===t||"product"===t){new s(PayPalCommerceGateway,e).init()}if("product"===t){new h(PayPalCommerceGateway,e).init()}if("cart"===t){new m(PayPalCommerceGateway,e).init()}if("checkout"===t){new _(PayPalCommerceGateway,e).init()}})()}),document.body.append(e)})}]); +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.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 a in e)r.d(n,a,function(t){return e[t]}.bind(null,a));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){"use strict";r.r(t);var n=class{constructor(){this.wrapper=document.querySelector(".woocommerce-notices-wrapper")}message(e){this.wrapper.classList.add("woocommerce-error"),this.wrapper.innerText=this.sanitize(e)}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 a=e=>(t,r)=>fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:t.orderID})}).then(e=>e.json()).then(t=>{if(!t.success)throw Error(t.data);location.href=e.config.redirect});const o=()=>{const e=PayPalCommerceGateway.payer;return e?{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},phone:{phone_type:"HOME",phone_number:{national_number:document.querySelector("#billing_phone")?document.querySelector("#billing_phone").value:e.phone.phone_number.national_number}}}:null};var i=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=o();return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,purchase_units:[],payer:r})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw Error(e.data);return e.data.id}))},onApprove:a(this),onError:e=>{this.errorHandler.message(e)}}}};var s=class{constructor(e,t){this.gateway=e,this.renderer=t}init(){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)}render(){if(!this.shouldRender())return;const e=new i(PayPalCommerceGateway,new n);this.renderer.render(this.gateway.button.mini_cart_wrapper,null,e.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 a=e(t.data);r(a)})})}};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,a,o){this.config=e,this.updateCart=t,this.showButtonCallback=r,this.hideButtonCallback=n,this.formElement=a,this.errorHandler=o}configuration(){if(this.hasVariations()){new u(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:a(this),onError:e=>{this.errorHandler.message(e)}}}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]),a=parseInt(t.value);e.push(new c(n,a,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=o();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})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw Error(e.data);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){this.gateway=e,this.renderer=t}init(){this.shouldRender()&&this.render()}shouldRender(){return null!==document.querySelector("form.cart")&&null!==document.querySelector(this.gateway.button.wrapper)}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.hideButtons(this.gateway.button.wrapper)},document.querySelector("form.cart"),new n);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)}render(){const e=new i(PayPalCommerceGateway,new n);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}};var m=e=>(t,r)=>fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:t.orderID})}).then(e=>e.json()).then(e=>{if(!e.success)throw Error(e.data);document.querySelector("#place_order").click()});var y=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=o();return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:r})}).then((function(e){return e.json()})).then((function(e){if(!e.success)throw Error(e.data);return e.data.id}))},onApprove:m(this),onError:e=>{this.errorHandler.message(e)}}}};var f=class{constructor(e,t){this.gateway=e,this.renderer=t}init(){this.shouldRender()&&(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)}render(){const e=new y(PayPalCommerceGateway,new n);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){"ppcp-gateway"!==jQuery('input[name="payment_method"]:checked').val()?(this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.hosted_fields.wrapper),jQuery("#place_order").show()):(this.renderer.showButtons(this.gateway.button.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper),jQuery("#place_order").hide())}};var _=class{constructor(e,t){this.defaultConfig=t,this.creditCardRenderer=e}render(e,t,r){if(this.isAlreadyRendered(e))return;const n=this.defaultConfig.button.style;paypal.Buttons({style:n,...r}).render(e),this.creditCardRenderer.render(t,r)}isAlreadyRendered(e){return document.querySelector(e).hasChildNodes()}hideButtons(e){document.querySelector(e).style.display="none"}showButtons(e){document.querySelector(e).style.display="block"}};var w=class{constructor(e){this.defaultConfig=e}render(e,t){null!==e&&void 0!==paypal.HostedFields&&paypal.HostedFields.isEligible()&&null!==document.querySelector(e)&&paypal.HostedFields.render({createOrder:t.createOrder,fields:{number:{selector:"#ppcp-credit-card",placeholder:this.defaultConfig.hosted_fields.labels.credit_card_number},cvv:{selector:"#ppcp-cvv",placeholder:this.defaultConfig.hosted_fields.labels.cvv},expirationDate:{selector:"#ppcp-expiration-date",placeholder:this.defaultConfig.hosted_fields.labels.mm_yyyy}}}).then(r=>{document.querySelector(e).addEventListener("submit",e=>{e.preventDefault(),r.submit().then(e=>(e.orderID=e.orderId,t.onApprove(e)))})})}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.setAttribute("src",PayPalCommerceGateway.button.url),Object.entries(PayPalCommerceGateway.script_attributes).forEach(t=>{e.setAttribute(t[0],t[1])}),e.addEventListener("load",e=>{(()=>{const e=new w(PayPalCommerceGateway),t=new _(e,PayPalCommerceGateway),r=PayPalCommerceGateway.context;if("mini-cart"===r||"product"===r){new s(PayPalCommerceGateway,t).init()}if("product"===r){new h(PayPalCommerceGateway,t).init()}if("cart"===r){new p(PayPalCommerceGateway,t).init()}if("checkout"===r){new f(PayPalCommerceGateway,t).init()}})()}),document.body.append(e)})}]); //# sourceMappingURL=button.js.map \ No newline at end of file diff --git a/modules.local/ppcp-button/assets/js/button.js.map b/modules.local/ppcp-button/assets/js/button.js.map index 35033b45b..3ca6cb255 100644 --- a/modules.local/ppcp-button/assets/js/button.js.map +++ b/modules.local/ppcp-button/assets/js/button.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/js/modules/ErrorHandler.js","webpack:///./resources/js/modules/onApproveForContinue.js","webpack:///./resources/js/modules/Payer.js","webpack:///./resources/js/modules/CartActionHandler.js","webpack:///./resources/js/modules/MiniCartBootstap.js","webpack:///./resources/js/modules/Product.js","webpack:///./resources/js/modules/UpdateCart.js","webpack:///./resources/js/modules/ButtonsToggleListener.js","webpack:///./resources/js/modules/SingleProductActionHandler.js","webpack:///./resources/js/modules/SingleProductBootstap.js","webpack:///./resources/js/modules/CartBootstap.js","webpack:///./resources/js/modules/onApproveForPayNow.js","webpack:///./resources/js/modules/CheckoutActionHandler.js","webpack:///./resources/js/modules/CheckoutBootstap.js","webpack:///./resources/js/modules/Renderer.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","this","wrapper","document","querySelector","message","text","classList","add","innerText","sanitize","textarea","createElement","innerHTML","replace","clear","contains","remove","onApprove","context","data","actions","fetch","config","ajax","approve_order","endpoint","method","body","JSON","stringify","nonce","order_id","orderID","then","res","json","success","Error","location","href","redirect","payerData","payer","PayPalCommerceGateway","email_address","surname","given_name","address","country_code","address_line_1","address_line_2","admin_area_1","admin_area_2","postal_code","phone","phone_type","phone_number","national_number","CartActionHandler","errorHandler","configuration","createOrder","create_order","purchase_units","id","onError","error","MiniCartBootstap","gateway","renderer","init","render","jQuery","on","shouldRender","button","mini_cart_wrapper","actionHandler","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","change_cart","showButtons","hideButtons","CartBootstrap","click","CheckoutActionHandler","CheckoutBootstap","switchBetweenPayPalandOrderButton","cancel_wrapper","val","show","hide","Renderer","defaultConfig","contextConfig","isAlreadyRendered","style","paypal","Buttons","hasChildNodes","display","addEventListener","script","setAttribute","url","event","bootstrap","append"],"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 = 0);\n","class ErrorHandler {\n\n constructor()\n {\n this.wrapper = document.querySelector('.woocommerce-notices-wrapper');\n }\n\n message(text)\n {\n this.wrapper.classList.add('woocommerce-error');\n this.wrapper.innerText = this.sanitize(text);\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) => {\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 throw Error(data.data);\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 return {\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 phone : {\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 }\n };\n}\n","import onApprove from './onApproveForContinue.js';\nimport {payerData} from \"./Payer\";\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 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 }),\n }).then(function(res) {\n return res.json();\n }).then(function(data) {\n if (!data.success) {\n throw Error(data.data);\n }\n return data.data.id;\n });\n };\n\n return {\n createOrder,\n onApprove: onApprove(this),\n onError: (error) => {\n this.errorHandler.message(error);\n }\n };\n }\n}\n\nexport default CartActionHandler;\n","import ErrorHandler from './ErrorHandler';\nimport CartActionHandler from './CartActionHandler';\n\nclass MiniCartBootstap {\n constructor(gateway, renderer) {\n this.gateway = gateway;\n this.renderer = renderer;\n }\n\n init() {\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;\n }\n\n render() {\n if (!this.shouldRender()) {\n return;\n }\n\n const actionHandler = new CartActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(),\n );\n\n this.renderer.render(\n this.gateway.button.mini_cart_wrapper,\n 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 \"./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 './ButtonsToggleListener';\nimport Product from './Product';\nimport onApprove from './onApproveForContinue';\nimport {payerData} from \"./Payer\";\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),\n onError: (error) => {\n this.errorHandler.message(error);\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 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 })\n }).then(function (res) {\n return res.json();\n }).then(function (data) {\n if (!data.success) {\n throw Error(data.data);\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 './UpdateCart';\nimport SingleProductActionHandler from './SingleProductActionHandler';\n\nclass SingleProductBootstap {\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\n shouldRender() {\n if (document.querySelector('form.cart') === null) {\n return false;\n }\n\n return document.querySelector(this.gateway.button.wrapper) !== null;\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 },\n () => {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n },\n document.querySelector('form.cart'),\n new ErrorHandler(),\n );\n\n this.renderer.render(\n this.gateway.button.wrapper,\n actionHandler.configuration(),\n );\n }\n}\n\nexport default SingleProductBootstap;","import CartActionHandler from './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) !== null;\n }\n\n render() {\n const actionHandler = new CartActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(),\n );\n\n this.renderer.render(\n this.gateway.button.wrapper,\n actionHandler.configuration(),\n );\n }\n}\n\nexport default CartBootstrap;","const onApprove = (context) => {\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 throw Error(data.data);\n }\n document.querySelector('#place_order').click()\n });\n\n }\n}\n\nexport default onApprove;\n","import onApprove from './onApproveForPayNow.js';\nimport {payerData} from \"./Payer\";\n\nclass CheckoutActionHandler {\n\n constructor(config, errorHandler) {\n this.config = config;\n this.errorHandler = errorHandler;\n }\n\n configuration() {\n\n const createOrder = (data, actions) => {\n const payer = payerData();\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 })\n }).then(function (res) {\n return res.json();\n }).then(function (data) {\n if (!data.success) {\n throw Error(data.data);\n }\n return data.data.id;\n });\n }\n return {\n createOrder,\n onApprove:onApprove(this),\n onError: (error) => {\n this.errorHandler.message(error);\n }\n }\n }\n}\n\nexport default CheckoutActionHandler;\n","import ErrorHandler from './ErrorHandler';\nimport CheckoutActionHandler from './CheckoutActionHandler';\n\nclass CheckoutBootstap {\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_checkout', () => {\n this.render();\n });\n\n jQuery(document.body).\n on('updated_checkout payment_method_selected', () => {\n this.switchBetweenPayPalandOrderButton();\n });\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;\n }\n\n render() {\n const actionHandler = new CheckoutActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(),\n );\n\n this.renderer.render(\n this.gateway.button.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') {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n jQuery('#place_order').show();\n }\n else {\n this.renderer.showButtons(this.gateway.button.wrapper);\n jQuery('#place_order').hide();\n }\n }\n}\n\nexport default CheckoutBootstap;","class Renderer {\n constructor(defaultConfig) {\n this.defaultConfig = defaultConfig;\n }\n\n render(wrapper, contextConfig) {\n if (this.isAlreadyRendered(wrapper)) {\n return;\n }\n\n const style = this.defaultConfig.button.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 document.querySelector(element).style.display = 'none';\n }\n\n showButtons(element) {\n document.querySelector(element).style.display = 'block';\n }\n}\n\nexport default Renderer;","import MiniCartBootstap from './modules/MiniCartBootstap';\nimport SingleProductBootstap from './modules/SingleProductBootstap';\nimport CartBootstrap from './modules/CartBootstap';\nimport CheckoutBootstap from './modules/CheckoutBootstap';\nimport Renderer from './modules/Renderer';\n\nconst bootstrap = () => {\n const renderer = new Renderer(PayPalCommerceGateway);\n const context = PayPalCommerceGateway.context;\n\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 );\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 );\n\n checkoutBootstap.init();\n }\n};\ndocument.addEventListener(\n 'DOMContentLoaded',\n () => {\n if (!typeof (PayPalCommerceGateway)) {\n console.error('PayPal button could not be configured.');\n return;\n }\n\n const script = document.createElement('script');\n\n script.setAttribute('src', PayPalCommerceGateway.button.url);\n script.addEventListener('load', (event) => {\n bootstrap();\n });\n\n document.body.append(script);\n },\n);"],"sourceRoot":""} \ No newline at end of file +{"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/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","this","wrapper","document","querySelector","message","text","classList","add","innerText","sanitize","textarea","createElement","innerHTML","replace","clear","contains","remove","onApprove","context","data","actions","fetch","config","ajax","approve_order","endpoint","method","body","JSON","stringify","nonce","order_id","orderID","then","res","json","success","Error","location","href","redirect","payerData","payer","PayPalCommerceGateway","email_address","surname","given_name","address","country_code","address_line_1","address_line_2","admin_area_1","admin_area_2","postal_code","phone","phone_type","phone_number","national_number","CartActionHandler","errorHandler","configuration","createOrder","create_order","purchase_units","id","onError","error","MiniCartBootstap","gateway","renderer","init","render","jQuery","on","shouldRender","button","mini_cart_wrapper","actionHandler","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","change_cart","showButtons","hideButtons","hosted_fields","CartBootstrap","click","CheckoutActionHandler","CheckoutBootstap","switchBetweenPayPalandOrderButton","cancel_wrapper","val","show","hide","Renderer","creditCardRenderer","defaultConfig","hostedFieldsWrapper","contextConfig","isAlreadyRendered","style","paypal","Buttons","hasChildNodes","display","CreditCardRenderer","HostedFields","isEligible","fields","number","selector","placeholder","labels","credit_card_number","cvv","expirationDate","mm_yyyy","hostedFields","addEventListener","event","preventDefault","submit","payload","orderId","script","setAttribute","url","entries","script_attributes","keyValue","bootstrap","append"],"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 = 0);\n","class ErrorHandler {\n\n constructor()\n {\n this.wrapper = document.querySelector('.woocommerce-notices-wrapper');\n }\n\n message(text)\n {\n this.wrapper.classList.add('woocommerce-error');\n this.wrapper.innerText = this.sanitize(text);\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) => {\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 throw Error(data.data);\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 return {\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 phone : {\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 }\n };\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 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 }),\n }).then(function(res) {\n return res.json();\n }).then(function(data) {\n if (!data.success) {\n throw Error(data.data);\n }\n return data.data.id;\n });\n };\n\n return {\n createOrder,\n onApprove: onApprove(this),\n onError: (error) => {\n this.errorHandler.message(error);\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 }\n\n init() {\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;\n }\n\n render() {\n if (!this.shouldRender()) {\n return;\n }\n\n const actionHandler = new CartActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(),\n );\n\n this.renderer.render(\n this.gateway.button.mini_cart_wrapper,\n null,\n 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),\n onError: (error) => {\n this.errorHandler.message(error);\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 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 })\n }).then(function (res) {\n return res.json();\n }).then(function (data) {\n if (!data.success) {\n throw Error(data.data);\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) {\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\n shouldRender() {\n if (document.querySelector('form.cart') === null) {\n return false;\n }\n\n return document.querySelector(this.gateway.button.wrapper) !== null;\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 },\n () => {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n },\n document.querySelector('form.cart'),\n new ErrorHandler(),\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) !== null;\n }\n\n render() {\n const actionHandler = new CartActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(),\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) => {\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 throw Error(data.data);\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\n const createOrder = (data, actions) => {\n const payer = payerData();\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 })\n }).then(function (res) {\n return res.json();\n }).then(function (data) {\n if (!data.success) {\n throw Error(data.data);\n }\n return data.data.id;\n });\n }\n return {\n createOrder,\n onApprove:onApprove(this),\n onError: (error) => {\n this.errorHandler.message(error);\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) {\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_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;\n }\n\n render() {\n const actionHandler = new CheckoutActionHandler(\n PayPalCommerceGateway,\n new ErrorHandler(),\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') {\n this.renderer.hideButtons(this.gateway.button.wrapper);\n this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);\n jQuery('#place_order').show();\n }\n else {\n this.renderer.showButtons(this.gateway.button.wrapper);\n this.renderer.showButtons(this.gateway.hosted_fields.wrapper);\n jQuery('#place_order').hide();\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 if (this.isAlreadyRendered(wrapper)) {\n return;\n }\n\n const style = this.defaultConfig.button.style;\n paypal.Buttons({\n style,\n ...contextConfig,\n }).render(wrapper);\n\n this.creditCardRenderer.render(hostedFieldsWrapper, contextConfig);\n}\n\n isAlreadyRendered(wrapper) {\n return document.querySelector(wrapper).hasChildNodes();\n }\n\n hideButtons(element) {\n document.querySelector(element).style.display = 'none';\n }\n\n showButtons(element) {\n document.querySelector(element).style.display = 'block';\n }\n}\n\nexport default Renderer;","class CreditCardRenderer {\n\n constructor(defaultConfig) {\n this.defaultConfig = defaultConfig;\n }\n\n render(wrapper, contextConfig) {\n\n if (\n wrapper === null\n || typeof paypal.HostedFields === 'undefined'\n || ! paypal.HostedFields.isEligible()\n || document.querySelector(wrapper) === null\n ) {\n return;\n }\n\n //ToDo: Styles\n paypal.HostedFields.render({\n createOrder: contextConfig.createOrder,\n fields: {\n number: {\n selector: '#ppcp-credit-card',\n placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number,\n },\n cvv: {\n selector: '#ppcp-cvv',\n placeholder: this.defaultConfig.hosted_fields.labels.cvv,\n },\n expirationDate: {\n selector: '#ppcp-expiration-date',\n placeholder: this.defaultConfig.hosted_fields.labels.mm_yyyy,\n }\n }\n }).then(hostedFields => {\n document.querySelector(wrapper).addEventListener(\n 'submit',\n event => {\n event.preventDefault();\n hostedFields.submit().then(payload => {\n payload.orderID = payload.orderId;\n return contextConfig.onApprove(payload);\n });\n }\n );\n });\n }\n}\nexport default CreditCardRenderer;","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 CreditCardRenderer from \"./modules/Renderer/CreditCardRenderer\";\n\nconst bootstrap = () => {\n const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway);\n const renderer = new Renderer(creditCardRenderer, PayPalCommerceGateway);\n const context = PayPalCommerceGateway.context;\n\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 );\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 );\n\n checkoutBootstap.init();\n }\n};\ndocument.addEventListener(\n 'DOMContentLoaded',\n () => {\n if (!typeof (PayPalCommerceGateway)) {\n console.error('PayPal button could not be configured.');\n return;\n }\n\n const script = document.createElement('script');\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 script.addEventListener('load', (event) => {\n bootstrap();\n });\n\n document.body.append(script);\n },\n);"],"sourceRoot":""} \ No newline at end of file diff --git a/modules.local/ppcp-button/resources/js/button.js b/modules.local/ppcp-button/resources/js/button.js index d663f82ba..c5b262801 100644 --- a/modules.local/ppcp-button/resources/js/button.js +++ b/modules.local/ppcp-button/resources/js/button.js @@ -1,11 +1,13 @@ -import MiniCartBootstap from './modules/MiniCartBootstap'; -import SingleProductBootstap from './modules/SingleProductBootstap'; -import CartBootstrap from './modules/CartBootstap'; -import CheckoutBootstap from './modules/CheckoutBootstap'; -import Renderer from './modules/Renderer'; +import MiniCartBootstap from './modules/ContextBootstrap/MiniCartBootstap'; +import SingleProductBootstap from './modules/ContextBootstrap/SingleProductBootstap'; +import CartBootstrap from './modules/ContextBootstrap/CartBootstap'; +import CheckoutBootstap from './modules/ContextBootstrap/CheckoutBootstap'; +import Renderer from './modules/Renderer/Renderer'; +import CreditCardRenderer from "./modules/Renderer/CreditCardRenderer"; const bootstrap = () => { - const renderer = new Renderer(PayPalCommerceGateway); + const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway); + const renderer = new Renderer(creditCardRenderer, PayPalCommerceGateway); const context = PayPalCommerceGateway.context; if (context === 'mini-cart' || context === 'product') { @@ -55,6 +57,11 @@ document.addEventListener( const script = document.createElement('script'); script.setAttribute('src', PayPalCommerceGateway.button.url); + Object.entries(PayPalCommerceGateway.script_attributes).forEach( + (keyValue) => { + script.setAttribute(keyValue[0], keyValue[1]); + } + ); script.addEventListener('load', (event) => { bootstrap(); }); diff --git a/modules.local/ppcp-button/resources/js/modules/CartActionHandler.js b/modules.local/ppcp-button/resources/js/modules/ActionHandler/CartActionHandler.js similarity index 90% rename from modules.local/ppcp-button/resources/js/modules/CartActionHandler.js rename to modules.local/ppcp-button/resources/js/modules/ActionHandler/CartActionHandler.js index 8040d53a3..1fa2bc2b8 100644 --- a/modules.local/ppcp-button/resources/js/modules/CartActionHandler.js +++ b/modules.local/ppcp-button/resources/js/modules/ActionHandler/CartActionHandler.js @@ -1,5 +1,5 @@ -import onApprove from './onApproveForContinue.js'; -import {payerData} from "./Payer"; +import onApprove from '../OnApproveHandler/onApproveForContinue.js'; +import {payerData} from "../Helper/PayerData"; class CartActionHandler { diff --git a/modules.local/ppcp-button/resources/js/modules/CheckoutActionHandler.js b/modules.local/ppcp-button/resources/js/modules/ActionHandler/CheckoutActionHandler.js similarity index 89% rename from modules.local/ppcp-button/resources/js/modules/CheckoutActionHandler.js rename to modules.local/ppcp-button/resources/js/modules/ActionHandler/CheckoutActionHandler.js index 34d16c47d..1d57ba509 100644 --- a/modules.local/ppcp-button/resources/js/modules/CheckoutActionHandler.js +++ b/modules.local/ppcp-button/resources/js/modules/ActionHandler/CheckoutActionHandler.js @@ -1,5 +1,5 @@ -import onApprove from './onApproveForPayNow.js'; -import {payerData} from "./Payer"; +import onApprove from '../OnApproveHandler/onApproveForPayNow.js'; +import {payerData} from "../Helper/PayerData"; class CheckoutActionHandler { diff --git a/modules.local/ppcp-button/resources/js/modules/SingleProductActionHandler.js b/modules.local/ppcp-button/resources/js/modules/ActionHandler/SingleProductActionHandler.js similarity index 94% rename from modules.local/ppcp-button/resources/js/modules/SingleProductActionHandler.js rename to modules.local/ppcp-button/resources/js/modules/ActionHandler/SingleProductActionHandler.js index f00c9e8fb..ae0af0289 100644 --- a/modules.local/ppcp-button/resources/js/modules/SingleProductActionHandler.js +++ b/modules.local/ppcp-button/resources/js/modules/ActionHandler/SingleProductActionHandler.js @@ -1,7 +1,7 @@ -import ButtonsToggleListener from './ButtonsToggleListener'; -import Product from './Product'; -import onApprove from './onApproveForContinue'; -import {payerData} from "./Payer"; +import ButtonsToggleListener from '../Helper/ButtonsToggleListener'; +import Product from '../Entity/Product'; +import onApprove from '../OnApproveHandler/onApproveForContinue'; +import {payerData} from "../Helper/PayerData"; class SingleProductActionHandler { diff --git a/modules.local/ppcp-button/resources/js/modules/CartBootstap.js b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/CartBootstap.js similarity index 82% rename from modules.local/ppcp-button/resources/js/modules/CartBootstap.js rename to modules.local/ppcp-button/resources/js/modules/ContextBootstrap/CartBootstap.js index 3f05147a3..b6df2be6a 100644 --- a/modules.local/ppcp-button/resources/js/modules/CartBootstap.js +++ b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/CartBootstap.js @@ -1,5 +1,5 @@ -import CartActionHandler from './CartActionHandler'; -import ErrorHandler from './ErrorHandler'; +import CartActionHandler from '../ActionHandler/CartActionHandler'; +import ErrorHandler from '../ErrorHandler'; class CartBootstrap { constructor(gateway, renderer) { @@ -31,6 +31,7 @@ class CartBootstrap { this.renderer.render( this.gateway.button.wrapper, + this.gateway.hosted_fields.wrapper, actionHandler.configuration(), ); } diff --git a/modules.local/ppcp-button/resources/js/modules/CheckoutBootstap.js b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js similarity index 80% rename from modules.local/ppcp-button/resources/js/modules/CheckoutBootstap.js rename to modules.local/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js index 4834eaa4c..0b0980542 100644 --- a/modules.local/ppcp-button/resources/js/modules/CheckoutBootstap.js +++ b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js @@ -1,5 +1,5 @@ -import ErrorHandler from './ErrorHandler'; -import CheckoutActionHandler from './CheckoutActionHandler'; +import ErrorHandler from '../ErrorHandler'; +import CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler'; class CheckoutBootstap { constructor(gateway, renderer) { @@ -22,6 +22,7 @@ class CheckoutBootstap { on('updated_checkout payment_method_selected', () => { this.switchBetweenPayPalandOrderButton(); }); + this.switchBetweenPayPalandOrderButton(); } shouldRender() { @@ -40,6 +41,7 @@ class CheckoutBootstap { this.renderer.render( this.gateway.button.wrapper, + this.gateway.hosted_fields.wrapper, actionHandler.configuration(), ); } @@ -50,10 +52,12 @@ class CheckoutBootstap { if (currentPaymentMethod !== 'ppcp-gateway') { this.renderer.hideButtons(this.gateway.button.wrapper); + this.renderer.hideButtons(this.gateway.hosted_fields.wrapper); jQuery('#place_order').show(); } else { this.renderer.showButtons(this.gateway.button.wrapper); + this.renderer.showButtons(this.gateway.hosted_fields.wrapper); jQuery('#place_order').hide(); } } diff --git a/modules.local/ppcp-button/resources/js/modules/MiniCartBootstap.js b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/MiniCartBootstap.js similarity index 86% rename from modules.local/ppcp-button/resources/js/modules/MiniCartBootstap.js rename to modules.local/ppcp-button/resources/js/modules/ContextBootstrap/MiniCartBootstap.js index 3ff4a264f..cecccd240 100644 --- a/modules.local/ppcp-button/resources/js/modules/MiniCartBootstap.js +++ b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/MiniCartBootstap.js @@ -1,5 +1,5 @@ -import ErrorHandler from './ErrorHandler'; -import CartActionHandler from './CartActionHandler'; +import ErrorHandler from '../ErrorHandler'; +import CartActionHandler from '../ActionHandler/CartActionHandler'; class MiniCartBootstap { constructor(gateway, renderer) { @@ -32,6 +32,7 @@ class MiniCartBootstap { this.renderer.render( this.gateway.button.mini_cart_wrapper, + null, actionHandler.configuration() ); } diff --git a/modules.local/ppcp-button/resources/js/modules/SingleProductBootstap.js b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/SingleProductBootstap.js similarity index 84% rename from modules.local/ppcp-button/resources/js/modules/SingleProductBootstap.js rename to modules.local/ppcp-button/resources/js/modules/ContextBootstrap/SingleProductBootstap.js index dbe073025..1bcb78bf8 100644 --- a/modules.local/ppcp-button/resources/js/modules/SingleProductBootstap.js +++ b/modules.local/ppcp-button/resources/js/modules/ContextBootstrap/SingleProductBootstap.js @@ -1,6 +1,6 @@ -import ErrorHandler from './ErrorHandler'; -import UpdateCart from './UpdateCart'; -import SingleProductActionHandler from './SingleProductActionHandler'; +import ErrorHandler from '../ErrorHandler'; +import UpdateCart from "../Helper/UpdateCart"; +import SingleProductActionHandler from "../ActionHandler/SingleProductActionHandler"; class SingleProductBootstap { constructor(gateway, renderer) { @@ -43,6 +43,7 @@ class SingleProductBootstap { this.renderer.render( this.gateway.button.wrapper, + this.gateway.hosted_fields.wrapper, actionHandler.configuration(), ); } diff --git a/modules.local/ppcp-button/resources/js/modules/Product.js b/modules.local/ppcp-button/resources/js/modules/Entity/Product.js similarity index 100% rename from modules.local/ppcp-button/resources/js/modules/Product.js rename to modules.local/ppcp-button/resources/js/modules/Entity/Product.js diff --git a/modules.local/ppcp-button/resources/js/modules/ButtonsToggleListener.js b/modules.local/ppcp-button/resources/js/modules/Helper/ButtonsToggleListener.js similarity index 100% rename from modules.local/ppcp-button/resources/js/modules/ButtonsToggleListener.js rename to modules.local/ppcp-button/resources/js/modules/Helper/ButtonsToggleListener.js diff --git a/modules.local/ppcp-button/resources/js/modules/Payer.js b/modules.local/ppcp-button/resources/js/modules/Helper/PayerData.js similarity index 100% rename from modules.local/ppcp-button/resources/js/modules/Payer.js rename to modules.local/ppcp-button/resources/js/modules/Helper/PayerData.js diff --git a/modules.local/ppcp-button/resources/js/modules/UpdateCart.js b/modules.local/ppcp-button/resources/js/modules/Helper/UpdateCart.js similarity index 96% rename from modules.local/ppcp-button/resources/js/modules/UpdateCart.js rename to modules.local/ppcp-button/resources/js/modules/Helper/UpdateCart.js index 08a324032..eda23532a 100644 --- a/modules.local/ppcp-button/resources/js/modules/UpdateCart.js +++ b/modules.local/ppcp-button/resources/js/modules/Helper/UpdateCart.js @@ -1,4 +1,4 @@ -import Product from "./Product"; +import Product from "../Entity/Product"; class UpdateCart { constructor(endpoint, nonce) diff --git a/modules.local/ppcp-button/resources/js/modules/onApproveForContinue.js b/modules.local/ppcp-button/resources/js/modules/OnApproveHandler/onApproveForContinue.js similarity index 100% rename from modules.local/ppcp-button/resources/js/modules/onApproveForContinue.js rename to modules.local/ppcp-button/resources/js/modules/OnApproveHandler/onApproveForContinue.js diff --git a/modules.local/ppcp-button/resources/js/modules/onApproveForPayNow.js b/modules.local/ppcp-button/resources/js/modules/OnApproveHandler/onApproveForPayNow.js similarity index 100% rename from modules.local/ppcp-button/resources/js/modules/onApproveForPayNow.js rename to modules.local/ppcp-button/resources/js/modules/OnApproveHandler/onApproveForPayNow.js diff --git a/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js new file mode 100644 index 000000000..4081aa9de --- /dev/null +++ b/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -0,0 +1,49 @@ +class CreditCardRenderer { + + constructor(defaultConfig) { + this.defaultConfig = defaultConfig; + } + + render(wrapper, contextConfig) { + + if ( + wrapper === null + || typeof paypal.HostedFields === 'undefined' + || ! paypal.HostedFields.isEligible() + || document.querySelector(wrapper) === null + ) { + return; + } + + //ToDo: Styles + paypal.HostedFields.render({ + createOrder: contextConfig.createOrder, + fields: { + number: { + selector: '#ppcp-credit-card', + placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number, + }, + cvv: { + selector: '#ppcp-cvv', + placeholder: this.defaultConfig.hosted_fields.labels.cvv, + }, + expirationDate: { + selector: '#ppcp-expiration-date', + placeholder: this.defaultConfig.hosted_fields.labels.mm_yyyy, + } + } + }).then(hostedFields => { + document.querySelector(wrapper).addEventListener( + 'submit', + event => { + event.preventDefault(); + hostedFields.submit().then(payload => { + payload.orderID = payload.orderId; + return contextConfig.onApprove(payload); + }); + } + ); + }); + } +} +export default CreditCardRenderer; \ No newline at end of file diff --git a/modules.local/ppcp-button/resources/js/modules/Renderer.js b/modules.local/ppcp-button/resources/js/modules/Renderer/Renderer.js similarity index 72% rename from modules.local/ppcp-button/resources/js/modules/Renderer.js rename to modules.local/ppcp-button/resources/js/modules/Renderer/Renderer.js index e39849529..58fd25628 100644 --- a/modules.local/ppcp-button/resources/js/modules/Renderer.js +++ b/modules.local/ppcp-button/resources/js/modules/Renderer/Renderer.js @@ -1,9 +1,10 @@ class Renderer { - constructor(defaultConfig) { + constructor(creditCardRenderer, defaultConfig) { this.defaultConfig = defaultConfig; + this.creditCardRenderer = creditCardRenderer; } - render(wrapper, contextConfig) { + render(wrapper, hostedFieldsWrapper, contextConfig) { if (this.isAlreadyRendered(wrapper)) { return; } @@ -13,7 +14,9 @@ class Renderer { style, ...contextConfig, }).render(wrapper); - } + + this.creditCardRenderer.render(hostedFieldsWrapper, contextConfig); +} isAlreadyRendered(wrapper) { return document.querySelector(wrapper).hasChildNodes(); diff --git a/modules.local/ppcp-button/services.php b/modules.local/ppcp-button/services.php index 2a903dc64..23e18055c 100644 --- a/modules.local/ppcp-button/services.php +++ b/modules.local/ppcp-button/services.php @@ -16,17 +16,21 @@ use Inpsyde\PayPalCommerce\Button\Exception\RuntimeException; return [ 'button.smart-button' => static function (ContainerInterface $container): SmartButtonInterface { + $settings = $container->get('wcgateway.settings'); - $payeeRepository = $container->get('api.repository.payee'); - if (wc_string_to_bool($settings->get('enabled'))) { - return new SmartButton( - $container->get('button.url'), - $container->get('session.handler'), - $settings, - $payeeRepository - ); + if (! wc_string_to_bool($settings->get('enabled'))) { + return new DisabledSmartButton(); } - return new DisabledSmartButton(); + $payeeRepository = $container->get('api.repository.payee'); + $identityToken = $container->get('api.endpoint.identity-token'); + return new SmartButton( + $container->get('button.url'), + $container->get('session.handler'), + $settings, + $payeeRepository, + $identityToken + ); + }, 'button.url' => static function (ContainerInterface $container): string { return plugins_url( diff --git a/modules.local/ppcp-button/src/Assets/SmartButton.php b/modules.local/ppcp-button/src/Assets/SmartButton.php index 1a3102cf0..abaf17771 100644 --- a/modules.local/ppcp-button/src/Assets/SmartButton.php +++ b/modules.local/ppcp-button/src/Assets/SmartButton.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Inpsyde\PayPalCommerce\Button\Assets; +use Inpsyde\PayPalCommerce\ApiClient\Endpoint\IdentityToken; +use Inpsyde\PayPalCommerce\ApiClient\Exception\RuntimeException; use Inpsyde\PayPalCommerce\ApiClient\Repository\PayeeRepository; use Inpsyde\PayPalCommerce\Button\Endpoint\ApproveOrderEndpoint; use Inpsyde\PayPalCommerce\Button\Endpoint\ChangeCartEndpoint; @@ -17,24 +19,39 @@ class SmartButton implements SmartButtonInterface private $sessionHandler; private $settings; private $payeeRepository; + private $identityToken; public function __construct( string $moduleUrl, SessionHandler $sessionHandler, Settings $settings, - PayeeRepository $payeeRepository + PayeeRepository $payeeRepository, + IdentityToken $identityToken ) { $this->moduleUrl = $moduleUrl; $this->sessionHandler = $sessionHandler; $this->settings = $settings; $this->payeeRepository = $payeeRepository; + $this->identityToken = $identityToken; } public function renderWrapper(): bool { - $renderer = static function () { + + $hostedFieldsEnabled = $this->dccIsEnabled(); + $renderer = static function () use ($hostedFieldsEnabled) { echo '
'; + if (! $hostedFieldsEnabled) { + return; + } + printf( + '
', + __('Card number', 'woocommerce-paypal-commerce-gateway'), + __('Expiration Date', 'woocommerce-paypal-commerce-gateway'), + __('CVV', 'woocommerce-paypal-commerce-gateway'), + __('Pay with Card', 'woocommerce-paypal-commerce-gateway') + ); }; if (is_cart() && wc_string_to_bool($this->settings->get('button_cart_enabled'))) { add_action( @@ -88,6 +105,7 @@ class SmartButton implements SmartButtonInterface private function localizeScript(): array { $localize = [ + 'script_attributes' => $this->attributes(), 'redirect' => wc_get_checkout_url(), 'context' => $this->context(), 'ajax' => [ @@ -117,6 +135,14 @@ class SmartButton implements SmartButtonInterface 'label' => 'paypal', ], ], + 'hosted_fields' => [ + 'wrapper' => '#ppc-hosted-fields', + 'labels' => [ + 'credit_card_number' => __('Credit Card Number', 'woocommerce-paypal-commerce-gateway'), + 'cvv' => __('CVV', 'woocommerce-paypal-commerce-gateway'), + 'mm_yyyy' => __('MM/YYYY', 'woocommerce-paypal-commerce-gateway'), + ], + ], ]; return $localize; } @@ -155,18 +181,21 @@ class SmartButton implements SmartButtonInterface { $params = [ //ToDo: Add the correct client id, toggle when settings is set to sandbox - 'client-id' => 'AcVzowpNCpTxFzLG7onQI4JD0sVcA0BkZv-D42qRZPv_gZ8cNfX9zGL_8bXmSu7cbJ5B2DH7sot8vDpw', + 'client-id' => 'AQB97CzMsd58-It1vxbcDAGvMuXNCXRD9le_XUaMlHB_U7XsU9IiItBwGQOtZv9sEeD6xs2vlIrL4NiD', 'currency' => get_woocommerce_currency(), 'locale' => get_user_locale(), //'debug' => (defined('WP_DEBUG') && WP_DEBUG) ? 'true' : 'false', //ToDo: Update date on releases. 'integration-date' => date('Y-m-d'), - 'components' => 'marks,buttons', + 'components' => implode(',', $this->components()), //ToDo: Probably only needed, when DCC - 'vault' => 'false', + 'vault' => $this->dccIsEnabled() ? 'false' : 'false', 'commit' => is_checkout() ? 'true' : 'false', 'intent' => $this->settings->get('intent'), ]; + if (defined('WP_DEBUG') && \WP_DEBUG && WC()->customer) { + $params['buyer-country'] = WC()->customer->get_billing_country(); + } $payee = $this->payeeRepository->payee(); if ($payee->merchantId()) { $params['merchant-id'] = $payee->merchantId(); @@ -179,6 +208,28 @@ class SmartButton implements SmartButtonInterface return $smartButtonUrl; } + private function attributes() : array { + $attributes = [ + //'data-partner-attribution-id' => '', + ]; + try { + $clientToken = $this->identityToken->generate(); + $attributes['data-client-token'] = $clientToken->token(); + return $attributes; + } catch (RuntimeException $exception) { + return $attributes; + } + } + + private function components() : array + { + $components = ['buttons']; + if ($this->dccIsEnabled()) { + $components[] = 'hosted-fields'; + } + return $components; + } + private function context(): string { $context = 'mini-cart'; @@ -193,4 +244,9 @@ class SmartButton implements SmartButtonInterface } return $context; } + + private function dccIsEnabled() : bool + { + return wc_string_to_bool($this->settings->get('enable_dcc')); + } } diff --git a/modules.local/ppcp-wc-gateway/src/Settings/SettingsFields.php b/modules.local/ppcp-wc-gateway/src/Settings/SettingsFields.php index 3be9319cc..7daee3559 100644 --- a/modules.local/ppcp-wc-gateway/src/Settings/SettingsFields.php +++ b/modules.local/ppcp-wc-gateway/src/Settings/SettingsFields.php @@ -14,10 +14,11 @@ class SettingsFields $this->gateway(), $this->account(), $this->buttons(), + $this->creditCards(), ); } - protected function gateway(): array + private function gateway(): array { return [ 'enabled' => [ @@ -91,7 +92,7 @@ class SettingsFields { return [ 'button_settings' => [ - 'title' => __('Button Settings', 'woocommerce-paypal-gateway'), + 'title' => __('SmartButton Settings', 'woocommerce-paypal-gateway'), 'type' => 'title', 'description' => __( 'Customize the appearance of PayPal Payments on your site.', @@ -174,4 +175,44 @@ class SettingsFields ], ]; } + + private function creditCards() : array { + return [ + + 'credit_card_settings' => [ + 'title' => __('Credit Card Settings', 'woocommerce-paypal-gateway'), + 'type' => 'title', + 'description' => __( + 'Customize the appearance of Credit Card Payments on your site.', + 'woocommerce-paypal-gateway' + ), + ], + 'enable_dcc' => [ + 'title' => __('Enable credit card payment', 'woocommerce-paypal-gateway'), + 'type' => 'checkbox', + 'label' => __('Enable credit card payments.', 'woocommerce-paypal-gateway'), + 'default' => 'yes', + ], + 'disable_cards' => [ + 'title' => __('Disable specific credid cards', 'woocommerce-paypal-gateway'), + 'type' => 'multiselect', + 'class' => 'wc-enhanced-select', + 'default' => [], + 'desc_tip' => true, + 'description' => __( + 'By default all possible credit cards will be shown. You can disable some cards, if you wish.', + 'woocommerce-paypal-gateway' + ), + 'options' => [ + 'visa' => _x('Visa', 'Name of credit card', 'woocommerce-paypal-gateway'), + 'mastercard' => _x('Mastercard', 'Name of credit card', 'woocommerce-paypal-gateway'), + 'amex' => _x('American Express', 'Name of credit card', 'woocommerce-paypal-gateway'), + 'discover' => _x('Discover', 'Name of credit card', 'woocommerce-paypal-gateway'), + 'jcb' => _x('JCB', 'Name of credit card', 'woocommerce-paypal-gateway'), + 'elo' => _x('Elo', 'Name of credit card', 'woocommerce-paypal-gateway'), + 'hiper' => _x('Hiper', 'Name of credit card', 'woocommerce-paypal-gateway'), + ], + ], + ]; + } }