Plugin Directory

Changeset 2585614


Ignore:
Timestamp:
08/19/2021 06:12:26 PM (5 years ago)
Author:
woothemes
Message:

Tagging version 1.5.1

Location:
woocommerce-paypal-payments
Files:
14 added
54 edited
1 copied

Legend:

Unmodified
Added
Removed
  • woocommerce-paypal-payments/tags/1.5.1/changelog.txt

    r2580477 r2585614  
    11*** Changelog ***
     2
     3= 1.5.1 - 2021-08-19 =
     4* Fix - Set 3DS contingencies to "SCA_WHEN_REQUIRED". #178
     5* Fix - Plugin conflict blocking line item details. #221
     6* Fix - WooCommerce orders left in "Pending Payment" after a decline. #222
     7* Fix - Do not send decimals when currency does not support them. #202
     8* Fix - Gateway can be activated without a connected PayPal account. #205
    29
    310= 1.5.0 - 2021-08-09 =
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-api-client/src/Authentication/class-paypalbearer.php

    r2573328 r2585614  
    1515use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
    1616use Psr\Log\LoggerInterface;
     17use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
    1718
    1819/**
     
    2425
    2526    const CACHE_KEY = 'ppcp-bearer';
     27
     28    /**
     29     * The settings.
     30     *
     31     * @var Settings
     32     */
     33    protected $settings;
    2634
    2735    /**
     
    6876     * @param string          $secret The secret.
    6977     * @param LoggerInterface $logger The logger.
     78     * @param Settings        $settings The settings.
    7079     */
    7180    public function __construct(
     
    7483        string $key,
    7584        string $secret,
    76         LoggerInterface $logger
     85        LoggerInterface $logger,
     86        Settings $settings
    7787    ) {
    7888
    79         $this->cache  = $cache;
    80         $this->host   = $host;
    81         $this->key    = $key;
    82         $this->secret = $secret;
    83         $this->logger = $logger;
     89        $this->cache    = $cache;
     90        $this->host     = $host;
     91        $this->key      = $key;
     92        $this->secret   = $secret;
     93        $this->logger   = $logger;
     94        $this->settings = $settings;
    8495    }
    8596
     
    106117     */
    107118    private function newBearer(): Token {
    108         $url      = trailingslashit( $this->host ) . 'v1/oauth2/token?grant_type=client_credentials';
     119        $key    = $this->settings->has( 'client_id' ) && $this->settings->get( 'client_id' ) ? $this->settings->get( 'client_id' ) : $this->key;
     120        $secret = $this->settings->has( 'client_secret' ) && $this->settings->get( 'client_secret' ) ? $this->settings->get( 'client_secret' ) : $this->secret;
     121        $url    = trailingslashit( $this->host ) . 'v1/oauth2/token?grant_type=client_credentials';
     122
    109123        $args     = array(
    110124            'method'  => 'POST',
    111125            'headers' => array(
    112126                // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
    113                 'Authorization' => 'Basic ' . base64_encode( $this->key . ':' . $this->secret ),
     127                'Authorization' => 'Basic ' . base64_encode( $key . ':' . $secret ),
    114128            ),
    115129        );
     
    121135        if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
    122136            $error = new RuntimeException(
    123                 sprintf(
    124                     // translators: %s is the error description.
    125                     __( 'Could not create token. %s', 'woocommerce-paypal-payments' ),
    126                     isset( json_decode( $response['body'] )->error_description ) ? json_decode( $response['body'] )->error_description : ''
    127                 )
     137                __( 'Could not create token.', 'woocommerce-paypal-payments' )
    128138            );
    129139            $this->logger->log(
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-api-client/src/Entity/class-amount.php

    r2415538 r2585614  
    2828     */
    2929    private $breakdown;
     30
     31    /**
     32     * Currencies that does not support decimals.
     33     *
     34     * @var array
     35     */
     36    private $currencies_without_decimals = array( 'HUF', 'JPY', 'TWD' );
    3037
    3138    /**
     
    7582        $amount = array(
    7683            'currency_code' => $this->currency_code(),
    77             'value'         => number_format( $this->value(), 2, '.', '' ),
     84            'value'         => in_array( $this->currency_code(), $this->currencies_without_decimals, true )
     85                ? round( $this->value(), 0 )
     86                : number_format( $this->value(), 2, '.', '' ),
    7887        );
    7988        if ( $this->breakdown() && count( $this->breakdown()->to_array() ) ) {
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-api-client/src/Entity/class-money.php

    r2415538 r2585614  
    2828     */
    2929    private $value;
     30
     31    /**
     32     * Currencies that does not support decimals.
     33     *
     34     * @var array
     35     */
     36    private $currencies_without_decimals = array( 'HUF', 'JPY', 'TWD' );
    3037
    3138    /**
     
    6673        return array(
    6774            'currency_code' => $this->currency_code(),
    68             'value'         => number_format( $this->value(), 2, '.', '' ),
     75            'value'         => in_array( $this->currency_code(), $this->currencies_without_decimals, true )
     76                ? round( $this->value(), 0 )
     77                : number_format( $this->value(), 2, '.', '' ),
    6978        );
    7079    }
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-api-client/src/Factory/class-amountfactory.php

    r2400438 r2585614  
    4646     */
    4747    public function from_wc_cart( \WC_Cart $cart ): Amount {
    48         $currency   = get_woocommerce_currency();
    49         $total      = new Money( (float) $cart->get_total( 'numeric' ), $currency );
    50         $item_total = $cart->get_cart_contents_total() + $cart->get_discount_total();
     48        $currency = get_woocommerce_currency();
     49        $total    = new Money( (float) $cart->get_total( 'numeric' ), $currency );
     50
     51        $total_fees_amount = 0;
     52        $fees              = WC()->session->get( 'ppcp_fees' );
     53        if ( $fees ) {
     54            foreach ( WC()->session->get( 'ppcp_fees' ) as $fee ) {
     55                $total_fees_amount += (float) $fee->amount;
     56            }
     57        }
     58
     59        $item_total = $cart->get_cart_contents_total() + $cart->get_discount_total() + $total_fees_amount;
    5160        $item_total = new Money( (float) $item_total, $currency );
    5261        $shipping   = new Money(
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-api-client/src/Factory/class-itemfactory.php

    r2544454 r2585614  
    5757            $cart->get_cart_contents()
    5858        );
    59         return $items;
     59
     60        $fees              = array();
     61        $fees_from_session = WC()->session->get( 'ppcp_fees' );
     62        if ( $fees_from_session ) {
     63            $fees = array_map(
     64                static function ( \stdClass $fee ) use ( $currency ): Item {
     65                    return new Item(
     66                        $fee->name,
     67                        new Money( (float) $fee->amount, $currency ),
     68                        1,
     69                        '',
     70                        new Money( (float) $fee->tax, $currency )
     71                    );
     72                },
     73                $fees_from_session
     74            );
     75        }
     76
     77        return array_merge( $items, $fees );
    6078    }
    6179
     
    6785     */
    6886    public function from_wc_order( \WC_Order $order ): array {
    69         return array_map(
     87        $items = array_map(
    7088            function ( \WC_Order_Item_Product $item ) use ( $order ): Item {
    7189                return $this->from_wc_order_line_item( $item, $order );
     
    7391            $order->get_items( 'line_item' )
    7492        );
     93
     94        $fees = array_map(
     95            function ( \WC_Order_Item_Fee $item ) use ( $order ): Item {
     96                return $this->from_wc_order_fee( $item, $order );
     97            },
     98            $order->get_fees()
     99        );
     100
     101        return array_merge( $items, $fees );
    75102    }
    76103
     
    111138
    112139    /**
     140     * Creates an Item based off a WooCommerce Fee Item.
     141     *
     142     * @param \WC_Order_Item_Fee $item The WooCommerce order item.
     143     * @param \WC_Order          $order The WooCommerce order.
     144     *
     145     * @return Item
     146     */
     147    private function from_wc_order_fee( \WC_Order_Item_Fee $item, \WC_Order $order ): Item {
     148        return new Item(
     149            $item->get_name(),
     150            new Money( (float) $item->get_amount(), $order->get_currency() ),
     151            $item->get_quantity(),
     152            '',
     153            new Money( (float) $item->get_total_tax(), $order->get_currency() )
     154        );
     155    }
     156
     157    /**
    113158     * Creates an Item based off a PayPal response.
    114159     *
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-api-client/src/class-apimodule.php

    r2573328 r2585614  
    1111
    1212use Dhii\Container\ServiceProvider;
    13 use Dhii\Modular\Module\Exception\ModuleExceptionInterface;
    1413use Dhii\Modular\Module\ModuleInterface;
    1514use Interop\Container\ServiceProviderInterface;
     
    3938     */
    4039    public function run( ContainerInterface $container ): void {
     40        add_action(
     41            'woocommerce_after_calculate_totals',
     42            function ( \WC_Cart $cart ) {
     43                $fees = $cart->fees_api()->get_fees();
     44                WC()->session->set( 'ppcp_fees', $fees );
     45            }
     46        );
    4147    }
    4248
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-button/assets/js/button.js

    r2573328 r2585614  
    1 !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=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"),this.messagesList=document.querySelector("ul.woocommerce-error")}genericError(){this.wrapper.classList.contains("ppcp-persist")||(this.clear(),this.message(this.genericErrorText))}appendPreparedErrorMessageElement(e){null===this.messagesList&&this.prepareMessagesList(),this.messagesList.replaceWith(e)}message(e,t=!1){if(0===e.length)throw new Error("A new message text must be a non-empty string.");null===this.messagesList&&this.prepareMessagesList(),t?this.wrapper.classList.add("ppcp-persist"):this.wrapper.classList.remove("ppcp-persist");let r=this.prepareMessagesListItem(e);this.messagesList.appendChild(r),jQuery.scroll_to_notices(jQuery(".woocommerce-notices-wrapper"))}prepareMessagesList(){null===this.messagesList&&(this.messagesList=document.createElement("ul"),this.messagesList.setAttribute("class","woocommerce-error"),this.messagesList.setAttribute("role","alert"),this.wrapper.appendChild(this.messagesList))}prepareMessagesListItem(e){const t=document.createElement("li");return t.innerHTML=e,t}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,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 s=()=>{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_state")?document.querySelector("#billing_state").value:e.address.admin_area_1,admin_area_2:document.querySelector("#billing_city")?document.querySelector("#billing_city").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 o=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=s(),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:a(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}};var i=class{constructor(e,t){this.gateway=e,this.renderer=t,this.actionHandler=null}init(){this.actionHandler=new o(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 a=e(t.data);r(a)})})}};var l=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 u=class{constructor(e,t,r,n,a,s){this.config=e,this.updateCart=t,this.showButtonCallback=r,this.hideButtonCallback=n,this.formElement=a,this.errorHandler=s}configuration(){if(this.hasVariations()){new l(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:a(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]),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=s(),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 u(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 o(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,a)=>(r.block(),fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:n.orderID})}).then(e=>e.json()).then(e=>{if(r.unblock(),!e.success){if(100===e.data.code?t.message(e.data.message):t.genericError(),void 0!==a&&void 0!==a.restart)return a.restart();throw new Error(e.data.message)}document.querySelector("#place_order").click()}));var y=class{constructor(e,t,r){this.config=e,this.errorHandler=t,this.spinner=r}configuration(){const e=this.spinner;return{createOrder:(t,r)=>{const n=s(),a=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"",o=this.errorHandler,i="checkout"===this.config.context?"form.checkout":"form#order_review",c=jQuery(i).serialize(),d=!!jQuery("#createaccount").is(":checked");return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:n,bn_code:a,context:this.config.context,order_id:this.config.order_id,form:c,createaccount:d})}).then((function(e){return e.json()})).then((function(t){if(!t.success){if(e.unblock(),void 0!==t.messages){const e=new DOMParser;o.appendPreparedErrorMessageElement(e.parseFromString(t.messages,"text/html").querySelector("ul"))}else o.message(t.data.message,!0);return}const r=document.createElement("input");return r.setAttribute("type","hidden"),r.setAttribute("name","ppcp-resume-order"),r.setAttribute("value",t.data.purchase_units[0].custom_id),document.querySelector(i).append(r),t.data.id}))},onApprove:m(this,this.errorHandler,this.spinner),onCancel:()=>{e.unblock()},onError:()=>{this.errorHandler.genericError(),e.unblock()}}}};var g=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}init(){this.render(),jQuery(document.body).on("updated_checkout",()=>{this.render()}),jQuery(document.body).on("updated_checkout payment_method_selected",()=>{this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}),jQuery("#saved-credit-card").on("change",()=>{this.displayPlaceOrderButtonForSavedCreditCards()}),this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){jQuery("#saved-credit-card").val(jQuery("#saved-credit-card option:first").val());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)))}displayPlaceOrderButtonForSavedCreditCards(){"ppcp-credit-card-gateway"===jQuery('input[name="payment_method"]:checked').val()&&(jQuery("#saved-credit-card").length&&""!==jQuery("#saved-credit-card").val()?(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(),this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.messages.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper)))}};var w=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){if(new URLSearchParams(window.location.search).has("change_payment_method"))return;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 f=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)||void 0===paypal.Buttons)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 _=e=>{const t=window.getComputedStyle(e),r=document.createElement("span");return r.setAttribute("id",e.id),Object.values(t).forEach(e=>{t[e]&&isNaN(e)&&r.style.setProperty(e,""+t[e])}),r};var b=class{constructor(e,t,r){this.defaultConfig=e,this.errorHandler=t,this.spinner=r,this.cardValid=!1,this.formValid=!1}render(e,t){if("checkout"!==this.defaultConfig.context&&"pay-now"!==this.defaultConfig.context||null===e||null===document.querySelector(e))return;if(void 0===paypal.HostedFields||!paypal.HostedFields.isEligible()){const t=document.querySelector(e);return void t.parentNode.removeChild(t)}const r=document.querySelector(".payment_box.payment_method_ppcp-credit-card-gateway"),n=r.style.display;r.style.display="block";const a=document.querySelector("#ppcp-hide-dcc");a&&a.parentNode.removeChild(a);const s=document.querySelector("#ppcp-credit-card-gateway-card-number"),o=window.getComputedStyle(s);let i={};Object.values(o).forEach(e=>{o[e]&&(i[e]=""+o[e])});const c=_(s);s.parentNode.replaceChild(c,s);const d=document.querySelector("#ppcp-credit-card-gateway-card-expiry"),l=_(d);d.parentNode.replaceChild(l,d);const u=document.querySelector("#ppcp-credit-card-gateway-card-cvc"),h=_(u);u.parentNode.replaceChild(h,u),r.style.display=n;const p=".payment_box payment_method_ppcp-credit-card-gateway";this.defaultConfig.enforce_vault&&document.querySelector(p+" .ppcp-credit-card-vault")&&(document.querySelector(p+" .ppcp-credit-card-vault").checked=!0,document.querySelector(p+" .ppcp-credit-card-vault").setAttribute("disabled",!0)),paypal.HostedFields.render({createOrder:t.createOrder,styles:{input:i},fields:{number:{selector:"#ppcp-credit-card-gateway-card-number",placeholder:this.defaultConfig.hosted_fields.labels.credit_card_number},cvv:{selector:"#ppcp-credit-card-gateway-card-cvc",placeholder:this.defaultConfig.hosted_fields.labels.cvv},expirationDate:{selector:"#ppcp-credit-card-gateway-card-expiry",placeholder:this.defaultConfig.hosted_fields.labels.mm_yy}}}).then(r=>{const n=e=>{if(this.spinner.block(),e&&e.preventDefault(),this.errorHandler.clear(),this.formValid&&this.cardValid){const e=!!this.defaultConfig.save_card,n=document.getElementById("ppcp-credit-card-vault")?document.getElementById("ppcp-credit-card-vault").checked:e;r.submit({contingencies:["3D_SECURE"],vault:n}).then(e=>(e.orderID=e.orderId,this.spinner.unblock(),t.onApprove(e))).catch(()=>{this.errorHandler.genericError(),this.spinner.unblock()})}else{this.spinner.unblock();const e=this.cardValid?this.defaultConfig.hosted_fields.labels.fields_not_valid:this.defaultConfig.hosted_fields.labels.card_not_supported;this.errorHandler.message(e)}};r.on("inputSubmitRequest",(function(){n(null)})),r.on("cardTypeChange",e=>{if(!e.cards.length)return void(this.cardValid=!1);const t=this.defaultConfig.hosted_fields.valid_cards;this.cardValid=-1!==t.indexOf(e.cards[0].type)}),r.on("validityChange",e=>{const t=Object.keys(e.fields).every((function(t){return e.fields[t].isValid}));this.formValid=t}),document.querySelector(e+" button").addEventListener("click",n)}),document.querySelector("#payment_method_ppcp-credit-card-gateway").addEventListener("click",()=>{document.querySelector("label[for=ppcp-credit-card-gateway-card-number]").click()})}};const v=(e,t)=>{if(!e)return!1;if(e.user!==t)return!1;return!((new Date).getTime()>=1e3*e.expiration)};var S=(e,t)=>{fetch(t.endpoint,{method:"POST",body:JSON.stringify({nonce:t.nonce})}).then(e=>e.json()).then(r=>{var n;v(r,t.user)&&(n=r,sessionStorage.setItem("ppcp-data-client-id",JSON.stringify(n)),e.setAttribute("data-client-token",r.token),document.body.append(e))})};var P=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)}};var q=class{constructor(){this.target="form.woocommerce-checkout"}setTarget(e){this.target=e}block(){jQuery(this.target).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock(){jQuery(this.target).unblock()}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.addEventListener("load",e=>{(()=>{const e=new n(PayPalCommerceGateway.labels.error.generic),t=new q,r=new b(PayPalCommerceGateway,e,t),a=new f(r,PayPalCommerceGateway),s=new P(PayPalCommerceGateway.messages),o=PayPalCommerceGateway.context;if(("mini-cart"===o||"product"===o)&&"1"===PayPalCommerceGateway.mini_cart_buttons_enabled){new i(PayPalCommerceGateway,a).init()}if("product"===o&&"1"===PayPalCommerceGateway.single_product_buttons_enabled){new h(PayPalCommerceGateway,a,s).init()}if("cart"===o){new p(PayPalCommerceGateway,a).init()}if("checkout"===o){new g(PayPalCommerceGateway,a,s,t).init()}if("pay-now"===o){new w(PayPalCommerceGateway,a,s,t).init()}"checkout"!==o&&s.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?S(e,PayPalCommerceGateway.data_client_id):document.body.append(e)})}]);
     1!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=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"),this.messagesList=document.querySelector("ul.woocommerce-error")}genericError(){this.wrapper.classList.contains("ppcp-persist")||(this.clear(),this.message(this.genericErrorText))}appendPreparedErrorMessageElement(e){null===this.messagesList&&this.prepareMessagesList(),this.messagesList.replaceWith(e)}message(e,t=!1){if(0===e.length)throw new Error("A new message text must be a non-empty string.");null===this.messagesList&&this.prepareMessagesList(),t?this.wrapper.classList.add("ppcp-persist"):this.wrapper.classList.remove("ppcp-persist");let r=this.prepareMessagesListItem(e);this.messagesList.appendChild(r),jQuery.scroll_to_notices(jQuery(".woocommerce-notices-wrapper"))}prepareMessagesList(){null===this.messagesList&&(this.messagesList=document.createElement("ul"),this.messagesList.setAttribute("class","woocommerce-error"),this.messagesList.setAttribute("role","alert"),this.wrapper.appendChild(this.messagesList))}prepareMessagesListItem(e){const t=document.createElement("li");return t.innerHTML=e,t}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,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 s=()=>{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_state")?document.querySelector("#billing_state").value:e.address.admin_area_1,admin_area_2:document.querySelector("#billing_city")?document.querySelector("#billing_city").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 o=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=s(),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:a(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}};var i=class{constructor(e,t){this.gateway=e,this.renderer=t,this.actionHandler=null}init(){this.actionHandler=new o(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 a=e(t.data);r(a)})})}};var l=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 u=class{constructor(e,t,r,n,a,s){this.config=e,this.updateCart=t,this.showButtonCallback=r,this.hideButtonCallback=n,this.formElement=a,this.errorHandler=s}configuration(){if(this.hasVariations()){new l(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:a(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]),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=s(),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 u(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 o(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,a)=>(r.block(),fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:n.orderID})}).then(e=>e.json()).then(e=>{if(r.unblock(),!e.success){if(100===e.data.code?t.message(e.data.message):t.genericError(),void 0!==a&&void 0!==a.restart)return a.restart();throw new Error(e.data.message)}document.querySelector("#place_order").click()}));var y=class{constructor(e,t,r){this.config=e,this.errorHandler=t,this.spinner=r}configuration(){const e=this.spinner;return{createOrder:(t,r)=>{const n=s(),a=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"",o=this.errorHandler,i="checkout"===this.config.context?"form.checkout":"form#order_review",c=jQuery(i).serialize(),d=!!jQuery("#createaccount").is(":checked");return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:n,bn_code:a,context:this.config.context,order_id:this.config.order_id,form:c,createaccount:d})}).then((function(e){return e.json()})).then((function(t){if(!t.success){if(e.unblock(),void 0!==t.messages){const e=new DOMParser;o.appendPreparedErrorMessageElement(e.parseFromString(t.messages,"text/html").querySelector("ul"))}else o.message(t.data.message,!0);return}const r=document.createElement("input");return r.setAttribute("type","hidden"),r.setAttribute("name","ppcp-resume-order"),r.setAttribute("value",t.data.purchase_units[0].custom_id),document.querySelector(i).append(r),t.data.id}))},onApprove:m(this,this.errorHandler,this.spinner),onCancel:()=>{e.unblock()},onError:()=>{this.errorHandler.genericError(),e.unblock()}}}};var g=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}init(){this.render(),jQuery(document.body).on("updated_checkout",()=>{this.render()}),jQuery(document.body).on("updated_checkout payment_method_selected",()=>{this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}),jQuery("#saved-credit-card").on("change",()=>{this.displayPlaceOrderButtonForSavedCreditCards()}),this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){jQuery("#saved-credit-card").val(jQuery("#saved-credit-card option:first").val());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)))}displayPlaceOrderButtonForSavedCreditCards(){"ppcp-credit-card-gateway"===jQuery('input[name="payment_method"]:checked').val()&&(jQuery("#saved-credit-card").length&&""!==jQuery("#saved-credit-card").val()?(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(),this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.messages.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper)))}};var w=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){if(new URLSearchParams(window.location.search).has("change_payment_method"))return;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 f=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)||void 0===paypal.Buttons)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 _=e=>{const t=window.getComputedStyle(e),r=document.createElement("span");return r.setAttribute("id",e.id),Object.values(t).forEach(e=>{t[e]&&isNaN(e)&&r.style.setProperty(e,""+t[e])}),r};var b=class{constructor(e,t,r){this.defaultConfig=e,this.errorHandler=t,this.spinner=r,this.cardValid=!1,this.formValid=!1}render(e,t){if("checkout"!==this.defaultConfig.context&&"pay-now"!==this.defaultConfig.context||null===e||null===document.querySelector(e))return;if(void 0===paypal.HostedFields||!paypal.HostedFields.isEligible()){const t=document.querySelector(e);return void t.parentNode.removeChild(t)}const r=document.querySelector(".payment_box.payment_method_ppcp-credit-card-gateway"),n=r.style.display;r.style.display="block";const a=document.querySelector("#ppcp-hide-dcc");a&&a.parentNode.removeChild(a);const s=document.querySelector("#ppcp-credit-card-gateway-card-number"),o=window.getComputedStyle(s);let i={};Object.values(o).forEach(e=>{o[e]&&(i[e]=""+o[e])});const c=_(s);s.parentNode.replaceChild(c,s);const d=document.querySelector("#ppcp-credit-card-gateway-card-expiry"),l=_(d);d.parentNode.replaceChild(l,d);const u=document.querySelector("#ppcp-credit-card-gateway-card-cvc"),h=_(u);u.parentNode.replaceChild(h,u),r.style.display=n;const p=".payment_box payment_method_ppcp-credit-card-gateway";this.defaultConfig.enforce_vault&&document.querySelector(p+" .ppcp-credit-card-vault")&&(document.querySelector(p+" .ppcp-credit-card-vault").checked=!0,document.querySelector(p+" .ppcp-credit-card-vault").setAttribute("disabled",!0)),paypal.HostedFields.render({createOrder:t.createOrder,styles:{input:i},fields:{number:{selector:"#ppcp-credit-card-gateway-card-number",placeholder:this.defaultConfig.hosted_fields.labels.credit_card_number},cvv:{selector:"#ppcp-credit-card-gateway-card-cvc",placeholder:this.defaultConfig.hosted_fields.labels.cvv},expirationDate:{selector:"#ppcp-credit-card-gateway-card-expiry",placeholder:this.defaultConfig.hosted_fields.labels.mm_yy}}}).then(r=>{const n=e=>{if(this.spinner.block(),e&&e.preventDefault(),this.errorHandler.clear(),this.formValid&&this.cardValid){const e=!!this.defaultConfig.save_card,n=document.getElementById("ppcp-credit-card-vault")?document.getElementById("ppcp-credit-card-vault").checked:e;r.submit({contingencies:["SCA_WHEN_REQUIRED"],vault:n}).then(e=>(e.orderID=e.orderId,this.spinner.unblock(),t.onApprove(e))).catch(()=>{this.errorHandler.genericError(),this.spinner.unblock()})}else{this.spinner.unblock();const e=this.cardValid?this.defaultConfig.hosted_fields.labels.fields_not_valid:this.defaultConfig.hosted_fields.labels.card_not_supported;this.errorHandler.message(e)}};r.on("inputSubmitRequest",(function(){n(null)})),r.on("cardTypeChange",e=>{if(!e.cards.length)return void(this.cardValid=!1);const t=this.defaultConfig.hosted_fields.valid_cards;this.cardValid=-1!==t.indexOf(e.cards[0].type)}),r.on("validityChange",e=>{const t=Object.keys(e.fields).every((function(t){return e.fields[t].isValid}));this.formValid=t}),document.querySelector(e+" button").addEventListener("click",n)}),document.querySelector("#payment_method_ppcp-credit-card-gateway").addEventListener("click",()=>{document.querySelector("label[for=ppcp-credit-card-gateway-card-number]").click()})}};const v=(e,t)=>{if(!e)return!1;if(e.user!==t)return!1;return!((new Date).getTime()>=1e3*e.expiration)};var S=(e,t)=>{fetch(t.endpoint,{method:"POST",body:JSON.stringify({nonce:t.nonce})}).then(e=>e.json()).then(r=>{var n;v(r,t.user)&&(n=r,sessionStorage.setItem("ppcp-data-client-id",JSON.stringify(n)),e.setAttribute("data-client-token",r.token),document.body.append(e))})};var P=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)}};var q=class{constructor(){this.target="form.woocommerce-checkout"}setTarget(e){this.target=e}block(){jQuery(this.target).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock(){jQuery(this.target).unblock()}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.addEventListener("load",e=>{(()=>{const e=new n(PayPalCommerceGateway.labels.error.generic),t=new q,r=new b(PayPalCommerceGateway,e,t),a=new f(r,PayPalCommerceGateway),s=new P(PayPalCommerceGateway.messages),o=PayPalCommerceGateway.context;if(("mini-cart"===o||"product"===o)&&"1"===PayPalCommerceGateway.mini_cart_buttons_enabled){new i(PayPalCommerceGateway,a).init()}if("product"===o&&"1"===PayPalCommerceGateway.single_product_buttons_enabled){new h(PayPalCommerceGateway,a,s).init()}if("cart"===o){new p(PayPalCommerceGateway,a).init()}if("checkout"===o){new g(PayPalCommerceGateway,a,s,t).init()}if("pay-now"===o){new w(PayPalCommerceGateway,a,s,t).init()}"checkout"!==o&&s.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?S(e,PayPalCommerceGateway.data_client_id):document.body.append(e)})}]);
    22//# sourceMappingURL=button.js.map
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-button/assets/js/button.js.map

    r2573328 r2585614  
    1 {"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/ContextBootstrap/PayNowBootstrap.js","webpack:///./resources/js/modules/Renderer/Renderer.js","webpack:///./resources/js/modules/Helper/DccInputFactory.js","webpack:///./resources/js/modules/Renderer/CreditCardRenderer.js","webpack:///./resources/js/modules/DataClientIdAttributeHandler.js","webpack:///./resources/js/modules/Renderer/MessageRenderer.js","webpack:///./resources/js/modules/Helper/Spinner.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","messagesList","genericError","classList","contains","clear","message","appendPreparedErrorMessageElement","errorMessageElement","prepareMessagesList","replaceWith","text","persist","length","Error","add","remove","messageNode","prepareMessagesListItem","appendChild","jQuery","scroll_to_notices","createElement","setAttribute","li","innerHTML","sanitize","textarea","replace","innerText","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","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","parseInt","push","qty","map","SingleProductBootstap","messages","hideButtons","change_cart","showButtons","priceText","amount","renderWithAmount","CartBootstrap","spinner","block","unblock","code","click","CheckoutActionHandler","formSelector","formValues","serialize","createaccount","is","form","domParser","DOMParser","parseFromString","input","custom_id","append","onCancel","CheckoutBootstap","switchBetweenPayPalandOrderButton","displayPlaceOrderButtonForSavedCreditCards","cancel_wrapper","val","currentPaymentMethod","show","hide","PayNowBootstrap","URLSearchParams","window","search","has","Renderer","creditCardRenderer","defaultConfig","hostedFieldsWrapper","contextConfig","renderButtons","isAlreadyRendered","paypal","Buttons","style","mini_cart_style","hasChildNodes","domElement","display","dccInputFactory","original","styles","getComputedStyle","newElement","values","prop","isNaN","setProperty","CreditCardRenderer","cardValid","formValid","HostedFields","isEligible","wrapperElement","parentNode","removeChild","gateWayBox","oldDisplayStyle","hideDccGateway","cardNumberField","stylesRaw","cardNumber","replaceChild","cardExpiryField","cardExpiry","cardCodeField","cardCode","formWrapper","enforce_vault","checked","fields","number","selector","placeholder","credit_card_number","cvv","expirationDate","mm_yy","hostedFields","submitEvent","event","preventDefault","save_card","vault","getElementById","submit","contingencies","payload","orderId","fields_not_valid","card_not_supported","cards","validCards","valid_cards","indexOf","type","keys","every","isValid","addEventListener","validateToken","token","user","Date","getTime","expiration","dataClientIdAttributeHandler","script","sessionStorage","setItem","MessageRenderer","Messages","placement","newWrapper","sibling","nextSibling","parentElement","insertBefore","Spinner","target","setTarget","overlayCSS","background","opacity","messageRenderer","mini_cart_buttons_enabled","single_product_buttons_enabled","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        this.messagesList = document.querySelector('ul.woocommerce-error');\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    appendPreparedErrorMessageElement(errorMessageElement)\n    {\n        if(this.messagesList === null) {\n            this.prepareMessagesList();\n        }\n\n        this.messagesList.replaceWith(errorMessageElement);\n    }\n\n    message(text, persist = false)\n    {\n        if(! typeof String || text.length === 0){\n            throw new Error('A new message text must be a non-empty string.');\n        }\n\n        if(this.messagesList === null){\n            this.prepareMessagesList();\n        }\n\n        if (persist) {\n            this.wrapper.classList.add('ppcp-persist');\n        } else {\n            this.wrapper.classList.remove('ppcp-persist');\n        }\n\n        let messageNode = this.prepareMessagesListItem(text);\n        this.messagesList.appendChild(messageNode);\n\n        jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'))\n    }\n\n    prepareMessagesList()\n    {\n        if(this.messagesList === null){\n            this.messagesList = document.createElement('ul');\n            this.messagesList.setAttribute('class', 'woocommerce-error');\n            this.messagesList.setAttribute('role', 'alert');\n            this.wrapper.appendChild(this.messagesList);\n        }\n    }\n\n    prepareMessagesListItem(message)\n    {\n        const li = document.createElement('li');\n        li.innerHTML = message;\n\n        return li;\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_state')) ? document.querySelector('#billing_state').value : payer.address.admin_area_1,\n            admin_area_2 : (document.querySelector('#billing_city')) ? document.querySelector('#billing_city').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<unknown>}\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;\n","const onApprove = (context, errorHandler, spinner) => {\n    return (data, actions) => {\n        spinner.block();\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            spinner.unblock();\n            if (!data.success) {\n                if (data.data.code === 100) {\n                    errorHandler.message(data.data.message);\n                } else {\n                    errorHandler.genericError();\n                }\n                if (typeof actions !== 'undefined' && 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, spinner) {\n        this.config = config;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n    }\n\n    configuration() {\n        const spinner = this.spinner;\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            const errorHandler = this.errorHandler;\n\n            const formSelector = this.config.context === 'checkout' ? 'form.checkout' : 'form#order_review';\n            const formValues = jQuery(formSelector).serialize();\n\n            const createaccount = jQuery('#createaccount').is(\":checked\") ? true : false;\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                    order_id:this.config.order_id,\n                    form:formValues,\n                    createaccount: createaccount\n                })\n            }).then(function (res) {\n                return res.json();\n            }).then(function (data) {\n                if (!data.success) {\n                    spinner.unblock();\n                    //handle both messages sent from Woocommerce (data.messages) and this plugin (data.data.message)\n                    if (typeof(data.messages) !== 'undefined' )\n                    {\n                        const domParser = new DOMParser();\n                        errorHandler.appendPreparedErrorMessageElement(\n                            domParser.parseFromString(data.messages, 'text/html')\n                                .querySelector('ul')\n                        );\n                    } else {\n                        errorHandler.message(data.data.message, true);\n                    }\n\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(formSelector).append(input);\n                return data.data.id;\n            });\n        }\n        return {\n            createOrder,\n            onApprove:onApprove(this, this.errorHandler, this.spinner),\n            onCancel: () => {\n                spinner.unblock();\n            },\n            onError: () => {\n                this.errorHandler.genericError();\n                spinner.unblock();\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, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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              this.displayPlaceOrderButtonForSavedCreditCards()\n\n          })\n\n        jQuery('#saved-credit-card').on('change', () => {\n            this.displayPlaceOrderButtonForSavedCreditCards()\n        })\n\n        this.switchBetweenPayPalandOrderButton()\n        this.displayPlaceOrderButtonForSavedCreditCards()\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            this.spinner\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        jQuery('#saved-credit-card').val(jQuery('#saved-credit-card option:first').val());\n\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    displayPlaceOrderButtonForSavedCreditCards() {\n        const currentPaymentMethod = jQuery(\n          'input[name=\"payment_method\"]:checked').val();\n        if (currentPaymentMethod !== 'ppcp-credit-card-gateway') {\n            return;\n        }\n\n        if (jQuery('#saved-credit-card').length && jQuery('#saved-credit-card').val() !== '') {\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        } else {\n            jQuery('#place_order').hide()\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\nexport default CheckoutBootstap\n","import ErrorHandler from '../ErrorHandler';\nimport CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';\n\nclass PayNowBootstrap {\n    constructor(gateway, renderer, messages, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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            this.spinner\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 urlParams = new URLSearchParams(window.location.search)\n        if (urlParams.has('change_payment_method')) {\n            return\n        }\n\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 PayNowBootstrap;\n","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) || 'undefined' === typeof paypal.Buttons ) {\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;","const dccInputFactory = (original) => {\n    const styles = window.getComputedStyle(original);\n    const newElement = document.createElement('span');\n    newElement.setAttribute('id', original.id);\n    Object.values(styles).forEach( (prop) => {\n        if (! styles[prop] || ! isNaN(prop) ) {\n            return;\n        }\n        newElement.style.setProperty(prop,'' + styles[prop]);\n    });\n    return newElement;\n}\n\nexport default dccInputFactory;","import dccInputFactory from \"../Helper/DccInputFactory\";\n\nclass CreditCardRenderer {\n\n    constructor(defaultConfig, errorHandler, spinner) {\n        this.defaultConfig = defaultConfig;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n        this.cardValid = false;\n        this.formValid = false;\n    }\n\n    render(wrapper, contextConfig) {\n\n        if (\n            (\n                this.defaultConfig.context !== 'checkout'\n                && this.defaultConfig.context !== 'pay-now'\n            )\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\n        const gateWayBox = document.querySelector('.payment_box.payment_method_ppcp-credit-card-gateway');\n        const oldDisplayStyle = gateWayBox.style.display;\n        gateWayBox.style.display = 'block';\n\n        const hideDccGateway = document.querySelector('#ppcp-hide-dcc');\n        if (hideDccGateway) {\n            hideDccGateway.parentNode.removeChild(hideDccGateway);\n        }\n\n        const cardNumberField = document.querySelector('#ppcp-credit-card-gateway-card-number');\n\n        const stylesRaw = window.getComputedStyle(cardNumberField);\n        let styles = {};\n        Object.values(stylesRaw).forEach( (prop) => {\n            if (! stylesRaw[prop]) {\n                return;\n            }\n            styles[prop] = '' + stylesRaw[prop];\n        });\n\n        const cardNumber = dccInputFactory(cardNumberField);\n        cardNumberField.parentNode.replaceChild(cardNumber, cardNumberField);\n\n        const cardExpiryField = document.querySelector('#ppcp-credit-card-gateway-card-expiry');\n        const cardExpiry = dccInputFactory(cardExpiryField);\n        cardExpiryField.parentNode.replaceChild(cardExpiry, cardExpiryField);\n\n        const cardCodeField = document.querySelector('#ppcp-credit-card-gateway-card-cvc');\n        const cardCode = dccInputFactory(cardCodeField);\n        cardCodeField.parentNode.replaceChild(cardCode, cardCodeField);\n\n        gateWayBox.style.display = oldDisplayStyle;\n\n        const formWrapper = '.payment_box payment_method_ppcp-credit-card-gateway';\n        if (\n            this.defaultConfig.enforce_vault\n            && document.querySelector(formWrapper + ' .ppcp-credit-card-vault')\n        ) {\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').checked = true;\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').setAttribute('disabled', true);\n        }\n        paypal.HostedFields.render({\n            createOrder: contextConfig.createOrder,\n            styles: {\n                'input': styles\n            },\n            fields: {\n                number: {\n                    selector: '#ppcp-credit-card-gateway-card-number',\n                    placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number,\n                },\n                cvv: {\n                    selector: '#ppcp-credit-card-gateway-card-cvc',\n                    placeholder: this.defaultConfig.hosted_fields.labels.cvv,\n                },\n                expirationDate: {\n                    selector: '#ppcp-credit-card-gateway-card-expiry',\n                    placeholder: this.defaultConfig.hosted_fields.labels.mm_yy,\n                }\n            }\n        }).then(hostedFields => {\n            const submitEvent = (event) => {\n                this.spinner.block();\n                if (event) {\n                    event.preventDefault();\n                }\n                this.errorHandler.clear();\n\n                if (this.formValid && this.cardValid) {\n                    const save_card = this.defaultConfig.save_card ? true : false;\n                    const vault = document.getElementById('ppcp-credit-card-vault') ?\n                      document.getElementById('ppcp-credit-card-vault').checked : save_card;\n                    hostedFields.submit({\n                        contingencies: ['3D_SECURE'],\n                        vault: vault\n                    }).then((payload) => {\n                        payload.orderID = payload.orderId;\n                        this.spinner.unblock();\n                        return contextConfig.onApprove(payload);\n                    }).catch(() => {\n                        this.errorHandler.genericError();\n                        this.spinner.unblock();\n                    });\n                } else {\n                    this.spinner.unblock();\n                    const message = ! this.cardValid ? this.defaultConfig.hosted_fields.labels.card_not_supported : this.defaultConfig.hosted_fields.labels.fields_not_valid;\n                    this.errorHandler.message(message);\n                }\n            }\n            hostedFields.on('inputSubmitRequest', function () {\n                submitEvent(null);\n            });\n            hostedFields.on('cardTypeChange', (event) => {\n                if ( ! event.cards.length ) {\n                    this.cardValid = false;\n                    return;\n                }\n                const validCards = this.defaultConfig.hosted_fields.valid_cards;\n                this.cardValid = validCards.indexOf(event.cards[0].type) !== -1;\n            })\n            hostedFields.on('validityChange', (event) => {\n                const formValid = Object.keys(event.fields).every(function (key) {\n                    return event.fields[key].isValid;\n                });\n               this.formValid = formValid;\n\n            })\n            document.querySelector(wrapper + ' button').addEventListener(\n                'click',\n                submitEvent\n            );\n        });\n\n        document.querySelector('#payment_method_ppcp-credit-card-gateway').addEventListener(\n            'click',\n            () => {\n                document.querySelector('label[for=ppcp-credit-card-gateway-card-number]').click();\n            }\n        )\n    }\n}\nexport default CreditCardRenderer;\n","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    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;\n","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;","class Spinner {\n\n    constructor() {\n        this.target = 'form.woocommerce-checkout';\n    }\n\n    setTarget(target) {\n        this.target = target;\n    }\n\n    block() {\n\n        jQuery( this.target ).block({\n            message: null,\n            overlayCSS: {\n                background: '#fff',\n                opacity: 0.6\n            }\n        });\n    }\n\n    unblock() {\n\n        jQuery( this.target ).unblock();\n    }\n}\n\nexport default Spinner;\n","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 PayNowBootstrap from \"./modules/ContextBootstrap/PayNowBootstrap\";\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\";\nimport Spinner from \"./modules/Helper/Spinner\";\n\nconst bootstrap = () => {\n    const errorHandler = new ErrorHandler(PayPalCommerceGateway.labels.error.generic);\n    const spinner = new Spinner();\n    const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler, spinner);\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        if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {\n            const miniCartBootstrap = new MiniCartBootstap(\n                PayPalCommerceGateway,\n                renderer\n            );\n\n            miniCartBootstrap.init();\n        }\n    }\n\n    if (context === 'product' && PayPalCommerceGateway.single_product_buttons_enabled === '1') {\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            spinner\n        );\n\n        checkoutBootstap.init();\n    }\n\n    if (context === 'pay-now' ) {\n        const payNowBootstrap = new PayNowBootstrap(\n            PayPalCommerceGateway,\n            renderer,\n            messageRenderer,\n            spinner\n        );\n        payNowBootstrap.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);\n"],"sourceRoot":""}
     1{"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/ContextBootstrap/PayNowBootstrap.js","webpack:///./resources/js/modules/Renderer/Renderer.js","webpack:///./resources/js/modules/Helper/DccInputFactory.js","webpack:///./resources/js/modules/Renderer/CreditCardRenderer.js","webpack:///./resources/js/modules/DataClientIdAttributeHandler.js","webpack:///./resources/js/modules/Renderer/MessageRenderer.js","webpack:///./resources/js/modules/Helper/Spinner.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","messagesList","genericError","classList","contains","clear","message","appendPreparedErrorMessageElement","errorMessageElement","prepareMessagesList","replaceWith","text","persist","length","Error","add","remove","messageNode","prepareMessagesListItem","appendChild","jQuery","scroll_to_notices","createElement","setAttribute","li","innerHTML","sanitize","textarea","replace","innerText","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","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","parseInt","push","qty","map","SingleProductBootstap","messages","hideButtons","change_cart","showButtons","priceText","amount","renderWithAmount","CartBootstrap","spinner","block","unblock","code","click","CheckoutActionHandler","formSelector","formValues","serialize","createaccount","is","form","domParser","DOMParser","parseFromString","input","custom_id","append","onCancel","CheckoutBootstap","switchBetweenPayPalandOrderButton","displayPlaceOrderButtonForSavedCreditCards","cancel_wrapper","val","currentPaymentMethod","show","hide","PayNowBootstrap","URLSearchParams","window","search","has","Renderer","creditCardRenderer","defaultConfig","hostedFieldsWrapper","contextConfig","renderButtons","isAlreadyRendered","paypal","Buttons","style","mini_cart_style","hasChildNodes","domElement","display","dccInputFactory","original","styles","getComputedStyle","newElement","values","prop","isNaN","setProperty","CreditCardRenderer","cardValid","formValid","HostedFields","isEligible","wrapperElement","parentNode","removeChild","gateWayBox","oldDisplayStyle","hideDccGateway","cardNumberField","stylesRaw","cardNumber","replaceChild","cardExpiryField","cardExpiry","cardCodeField","cardCode","formWrapper","enforce_vault","checked","fields","number","selector","placeholder","credit_card_number","cvv","expirationDate","mm_yy","hostedFields","submitEvent","event","preventDefault","save_card","vault","getElementById","submit","contingencies","payload","orderId","fields_not_valid","card_not_supported","cards","validCards","valid_cards","indexOf","type","keys","every","isValid","addEventListener","validateToken","token","user","Date","getTime","expiration","dataClientIdAttributeHandler","script","sessionStorage","setItem","MessageRenderer","Messages","placement","newWrapper","sibling","nextSibling","parentElement","insertBefore","Spinner","target","setTarget","overlayCSS","background","opacity","messageRenderer","mini_cart_buttons_enabled","single_product_buttons_enabled","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        this.messagesList = document.querySelector('ul.woocommerce-error');\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    appendPreparedErrorMessageElement(errorMessageElement)\n    {\n        if(this.messagesList === null) {\n            this.prepareMessagesList();\n        }\n\n        this.messagesList.replaceWith(errorMessageElement);\n    }\n\n    message(text, persist = false)\n    {\n        if(! typeof String || text.length === 0){\n            throw new Error('A new message text must be a non-empty string.');\n        }\n\n        if(this.messagesList === null){\n            this.prepareMessagesList();\n        }\n\n        if (persist) {\n            this.wrapper.classList.add('ppcp-persist');\n        } else {\n            this.wrapper.classList.remove('ppcp-persist');\n        }\n\n        let messageNode = this.prepareMessagesListItem(text);\n        this.messagesList.appendChild(messageNode);\n\n        jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'))\n    }\n\n    prepareMessagesList()\n    {\n        if(this.messagesList === null){\n            this.messagesList = document.createElement('ul');\n            this.messagesList.setAttribute('class', 'woocommerce-error');\n            this.messagesList.setAttribute('role', 'alert');\n            this.wrapper.appendChild(this.messagesList);\n        }\n    }\n\n    prepareMessagesListItem(message)\n    {\n        const li = document.createElement('li');\n        li.innerHTML = message;\n\n        return li;\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_state')) ? document.querySelector('#billing_state').value : payer.address.admin_area_1,\n            admin_area_2 : (document.querySelector('#billing_city')) ? document.querySelector('#billing_city').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<unknown>}\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;\n","const onApprove = (context, errorHandler, spinner) => {\n    return (data, actions) => {\n        spinner.block();\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            spinner.unblock();\n            if (!data.success) {\n                if (data.data.code === 100) {\n                    errorHandler.message(data.data.message);\n                } else {\n                    errorHandler.genericError();\n                }\n                if (typeof actions !== 'undefined' && 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, spinner) {\n        this.config = config;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n    }\n\n    configuration() {\n        const spinner = this.spinner;\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            const errorHandler = this.errorHandler;\n\n            const formSelector = this.config.context === 'checkout' ? 'form.checkout' : 'form#order_review';\n            const formValues = jQuery(formSelector).serialize();\n\n            const createaccount = jQuery('#createaccount').is(\":checked\") ? true : false;\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                    order_id:this.config.order_id,\n                    form:formValues,\n                    createaccount: createaccount\n                })\n            }).then(function (res) {\n                return res.json();\n            }).then(function (data) {\n                if (!data.success) {\n                    spinner.unblock();\n                    //handle both messages sent from Woocommerce (data.messages) and this plugin (data.data.message)\n                    if (typeof(data.messages) !== 'undefined' )\n                    {\n                        const domParser = new DOMParser();\n                        errorHandler.appendPreparedErrorMessageElement(\n                            domParser.parseFromString(data.messages, 'text/html')\n                                .querySelector('ul')\n                        );\n                    } else {\n                        errorHandler.message(data.data.message, true);\n                    }\n\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(formSelector).append(input);\n                return data.data.id;\n            });\n        }\n        return {\n            createOrder,\n            onApprove:onApprove(this, this.errorHandler, this.spinner),\n            onCancel: () => {\n                spinner.unblock();\n            },\n            onError: () => {\n                this.errorHandler.genericError();\n                spinner.unblock();\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, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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              this.displayPlaceOrderButtonForSavedCreditCards()\n\n          })\n\n        jQuery('#saved-credit-card').on('change', () => {\n            this.displayPlaceOrderButtonForSavedCreditCards()\n        })\n\n        this.switchBetweenPayPalandOrderButton()\n        this.displayPlaceOrderButtonForSavedCreditCards()\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            this.spinner\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        jQuery('#saved-credit-card').val(jQuery('#saved-credit-card option:first').val());\n\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    displayPlaceOrderButtonForSavedCreditCards() {\n        const currentPaymentMethod = jQuery(\n          'input[name=\"payment_method\"]:checked').val();\n        if (currentPaymentMethod !== 'ppcp-credit-card-gateway') {\n            return;\n        }\n\n        if (jQuery('#saved-credit-card').length && jQuery('#saved-credit-card').val() !== '') {\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        } else {\n            jQuery('#place_order').hide()\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\nexport default CheckoutBootstap\n","import ErrorHandler from '../ErrorHandler';\nimport CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';\n\nclass PayNowBootstrap {\n    constructor(gateway, renderer, messages, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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            this.spinner\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 urlParams = new URLSearchParams(window.location.search)\n        if (urlParams.has('change_payment_method')) {\n            return\n        }\n\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 PayNowBootstrap;\n","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) || 'undefined' === typeof paypal.Buttons ) {\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;","const dccInputFactory = (original) => {\n    const styles = window.getComputedStyle(original);\n    const newElement = document.createElement('span');\n    newElement.setAttribute('id', original.id);\n    Object.values(styles).forEach( (prop) => {\n        if (! styles[prop] || ! isNaN(prop) ) {\n            return;\n        }\n        newElement.style.setProperty(prop,'' + styles[prop]);\n    });\n    return newElement;\n}\n\nexport default dccInputFactory;","import dccInputFactory from \"../Helper/DccInputFactory\";\n\nclass CreditCardRenderer {\n\n    constructor(defaultConfig, errorHandler, spinner) {\n        this.defaultConfig = defaultConfig;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n        this.cardValid = false;\n        this.formValid = false;\n    }\n\n    render(wrapper, contextConfig) {\n\n        if (\n            (\n                this.defaultConfig.context !== 'checkout'\n                && this.defaultConfig.context !== 'pay-now'\n            )\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\n        const gateWayBox = document.querySelector('.payment_box.payment_method_ppcp-credit-card-gateway');\n        const oldDisplayStyle = gateWayBox.style.display;\n        gateWayBox.style.display = 'block';\n\n        const hideDccGateway = document.querySelector('#ppcp-hide-dcc');\n        if (hideDccGateway) {\n            hideDccGateway.parentNode.removeChild(hideDccGateway);\n        }\n\n        const cardNumberField = document.querySelector('#ppcp-credit-card-gateway-card-number');\n\n        const stylesRaw = window.getComputedStyle(cardNumberField);\n        let styles = {};\n        Object.values(stylesRaw).forEach( (prop) => {\n            if (! stylesRaw[prop]) {\n                return;\n            }\n            styles[prop] = '' + stylesRaw[prop];\n        });\n\n        const cardNumber = dccInputFactory(cardNumberField);\n        cardNumberField.parentNode.replaceChild(cardNumber, cardNumberField);\n\n        const cardExpiryField = document.querySelector('#ppcp-credit-card-gateway-card-expiry');\n        const cardExpiry = dccInputFactory(cardExpiryField);\n        cardExpiryField.parentNode.replaceChild(cardExpiry, cardExpiryField);\n\n        const cardCodeField = document.querySelector('#ppcp-credit-card-gateway-card-cvc');\n        const cardCode = dccInputFactory(cardCodeField);\n        cardCodeField.parentNode.replaceChild(cardCode, cardCodeField);\n\n        gateWayBox.style.display = oldDisplayStyle;\n\n        const formWrapper = '.payment_box payment_method_ppcp-credit-card-gateway';\n        if (\n            this.defaultConfig.enforce_vault\n            && document.querySelector(formWrapper + ' .ppcp-credit-card-vault')\n        ) {\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').checked = true;\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').setAttribute('disabled', true);\n        }\n        paypal.HostedFields.render({\n            createOrder: contextConfig.createOrder,\n            styles: {\n                'input': styles\n            },\n            fields: {\n                number: {\n                    selector: '#ppcp-credit-card-gateway-card-number',\n                    placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number,\n                },\n                cvv: {\n                    selector: '#ppcp-credit-card-gateway-card-cvc',\n                    placeholder: this.defaultConfig.hosted_fields.labels.cvv,\n                },\n                expirationDate: {\n                    selector: '#ppcp-credit-card-gateway-card-expiry',\n                    placeholder: this.defaultConfig.hosted_fields.labels.mm_yy,\n                }\n            }\n        }).then(hostedFields => {\n            const submitEvent = (event) => {\n                this.spinner.block();\n                if (event) {\n                    event.preventDefault();\n                }\n                this.errorHandler.clear();\n\n                if (this.formValid && this.cardValid) {\n                    const save_card = this.defaultConfig.save_card ? true : false;\n                    const vault = document.getElementById('ppcp-credit-card-vault') ?\n                      document.getElementById('ppcp-credit-card-vault').checked : save_card;\n                    hostedFields.submit({\n                        contingencies: ['SCA_WHEN_REQUIRED'],\n                        vault: vault\n                    }).then((payload) => {\n                        payload.orderID = payload.orderId;\n                        this.spinner.unblock();\n                        return contextConfig.onApprove(payload);\n                    }).catch(() => {\n                        this.errorHandler.genericError();\n                        this.spinner.unblock();\n                    });\n                } else {\n                    this.spinner.unblock();\n                    const message = ! this.cardValid ? this.defaultConfig.hosted_fields.labels.card_not_supported : this.defaultConfig.hosted_fields.labels.fields_not_valid;\n                    this.errorHandler.message(message);\n                }\n            }\n            hostedFields.on('inputSubmitRequest', function () {\n                submitEvent(null);\n            });\n            hostedFields.on('cardTypeChange', (event) => {\n                if ( ! event.cards.length ) {\n                    this.cardValid = false;\n                    return;\n                }\n                const validCards = this.defaultConfig.hosted_fields.valid_cards;\n                this.cardValid = validCards.indexOf(event.cards[0].type) !== -1;\n            })\n            hostedFields.on('validityChange', (event) => {\n                const formValid = Object.keys(event.fields).every(function (key) {\n                    return event.fields[key].isValid;\n                });\n               this.formValid = formValid;\n\n            })\n            document.querySelector(wrapper + ' button').addEventListener(\n                'click',\n                submitEvent\n            );\n        });\n\n        document.querySelector('#payment_method_ppcp-credit-card-gateway').addEventListener(\n            'click',\n            () => {\n                document.querySelector('label[for=ppcp-credit-card-gateway-card-number]').click();\n            }\n        )\n    }\n}\nexport default CreditCardRenderer;\n","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    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;\n","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;","class Spinner {\n\n    constructor() {\n        this.target = 'form.woocommerce-checkout';\n    }\n\n    setTarget(target) {\n        this.target = target;\n    }\n\n    block() {\n\n        jQuery( this.target ).block({\n            message: null,\n            overlayCSS: {\n                background: '#fff',\n                opacity: 0.6\n            }\n        });\n    }\n\n    unblock() {\n\n        jQuery( this.target ).unblock();\n    }\n}\n\nexport default Spinner;\n","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 PayNowBootstrap from \"./modules/ContextBootstrap/PayNowBootstrap\";\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\";\nimport Spinner from \"./modules/Helper/Spinner\";\n\nconst bootstrap = () => {\n    const errorHandler = new ErrorHandler(PayPalCommerceGateway.labels.error.generic);\n    const spinner = new Spinner();\n    const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler, spinner);\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        if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {\n            const miniCartBootstrap = new MiniCartBootstap(\n                PayPalCommerceGateway,\n                renderer\n            );\n\n            miniCartBootstrap.init();\n        }\n    }\n\n    if (context === 'product' && PayPalCommerceGateway.single_product_buttons_enabled === '1') {\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            spinner\n        );\n\n        checkoutBootstap.init();\n    }\n\n    if (context === 'pay-now' ) {\n        const payNowBootstrap = new PayNowBootstrap(\n            PayPalCommerceGateway,\n            renderer,\n            messageRenderer,\n            spinner\n        );\n        payNowBootstrap.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);\n"],"sourceRoot":""}
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js

    r2573328 r2585614  
    105105                      document.getElementById('ppcp-credit-card-vault').checked : save_card;
    106106                    hostedFields.submit({
    107                         contingencies: ['3D_SECURE'],
     107                        contingencies: ['SCA_WHEN_REQUIRED'],
    108108                        vault: vault
    109109                    }).then((payload) => {
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-button/services.php

    r2573328 r2585614  
    5252         * @var State $state
    5353         */
    54         if ( $state->current_state() < State::STATE_PROGRESSIVE ) {
     54        if ( $state->current_state() <= State::STATE_PROGRESSIVE ) {
    5555            return new DisabledSmartButton();
    5656        }
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-compat/src/PPEC/class-deactivatenote.php

    r2580477 r2585614  
    3535        }
    3636
    37         self::possibly_add_note();
     37        try {
     38            self::possibly_add_note();
     39        } catch ( \Exception $e ) {
     40            return;
     41        }
    3842    }
    3943
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-compat/src/class-compatmodule.php

    r2580477 r2585614  
    6969            'woocommerce_init',
    7070            function() {
    71                 if ( is_callable( array( WC(), 'is_wc_admin_active' ) ) && WC()->is_wc_admin_active() ) {
     71                if ( is_callable( array( WC(), 'is_wc_admin_active' ) ) && WC()->is_wc_admin_active() && class_exists( 'Automattic\WooCommerce\Admin\Notes\Notes' ) ) {
    7272                    PPEC\DeactivateNote::init();
    7373                }
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-onboarding/services.php

    r2489831 r2585614  
    104104        $key    = $container->get( 'api.key' );
    105105        $secret = $container->get( 'api.secret' );
    106 
    107106        $host   = $container->get( 'api.host' );
    108107        $logger = $container->get( 'woocommerce.logger.woocommerce' );
     108        $settings = $container->get( 'wcgateway.settings' );
    109109        return new PayPalBearer(
    110110            $cache,
     
    112112            $key,
    113113            $secret,
    114             $logger
     114            $logger,
     115            $settings
    115116        );
    116117    },
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-wc-gateway/assets/js/gateway-settings.js

    r2544454 r2585614  
    1 !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t){document.addEventListener("DOMContentLoaded",()=>{const e=document.querySelectorAll("#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled"),t=document.querySelectorAll("#ppcp-vault_enabled");function n(e){return Array.prototype.slice.call(e).filter(e=>!e.disabled&&e.checked).length>0}function r(e){e.forEach(e=>e.setAttribute("disabled","true"))}function o(e){e.forEach(e=>e.removeAttribute("disabled"))}function a(){n(e)?r(t):o(t),n(t)?r(e):o(e),"1"!==PayPalCommerceGatewaySettings.vaulting_features_available&&r(t)}a(),e.forEach(e=>e.addEventListener("change",a)),t.forEach(e=>e.addEventListener("change",a))})}]);
     1!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t){document.addEventListener("DOMContentLoaded",()=>{const e=document.querySelectorAll("#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled"),t=document.querySelectorAll("#ppcp-vault_enabled");function n(e){return Array.prototype.slice.call(e).filter(e=>!e.disabled&&e.checked).length>0}function r(e){e.forEach(e=>e.setAttribute("disabled","true"))}function o(e){e.forEach(e=>e.removeAttribute("disabled"))}function a(){n(e)?r(t):o(t),n(t)?r(e):o(e),"undefined"!=typeof PayPalCommerceGatewaySettings&&"1"===PayPalCommerceGatewaySettings.vaulting_features_available||r(t)}a(),e.forEach(e=>e.addEventListener("change",a)),t.forEach(e=>e.addEventListener("change",a))})}]);
    22//# sourceMappingURL=gateway-settings.js.map
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-wc-gateway/assets/js/gateway-settings.js.map

    r2544454 r2585614  
    1 {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/js/gateway-settings.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","document","addEventListener","payLaterMessagingCheckboxes","querySelectorAll","vaultingCheckboxes","atLeastOneChecked","checkboxesNodeList","Array","slice","filter","node","disabled","checked","length","disableAll","nodeList","forEach","setAttribute","enableAll","removeAttribute","updateCheckboxes","PayPalCommerceGatewaySettings","vaulting_features_available"],"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,gBClFpDC,SAASC,iBACN,mBACA,KACI,MAAMC,EAA8BF,SAASG,iBACzC,oFAGEC,EAAqBJ,SAASG,iBAChC,uBAGJ,SAASE,EAAkBC,GACvB,OAAOC,MAAMX,UAAUY,MAAMrC,KAAKmC,GAAoBG,OAAOC,IAASA,EAAKC,UAAYD,EAAKE,SAASC,OAAS,EAGlH,SAASC,EAAWC,GAChBA,EAASC,QAAQN,GAAQA,EAAKO,aAAa,WAAY,SAG3D,SAASC,EAAUH,GACfA,EAASC,QAAQN,GAAQA,EAAKS,gBAAgB,aAGlD,SAASC,IACLf,EAAkBH,GAA+BY,EAAWV,GAAsBc,EAAUd,GAC5FC,EAAkBD,GAAsBU,EAAWZ,GAA+BgB,EAAUhB,GAE3B,MAA9DmB,8BAA8BC,6BAC7BR,EAAWV,GAInBgB,IAEAlB,EAA4Bc,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB,IAC5EhB,EAAmBY,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB","file":"js/gateway-settings.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",";document.addEventListener(\n    'DOMContentLoaded',\n    () => {\n        const payLaterMessagingCheckboxes = document.querySelectorAll(\n            \"#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled\"\n        )\n\n        const vaultingCheckboxes = document.querySelectorAll(\n            \"#ppcp-vault_enabled\"\n        )\n\n        function atLeastOneChecked(checkboxesNodeList) {\n            return Array.prototype.slice.call(checkboxesNodeList).filter(node => !node.disabled && node.checked).length > 0\n        }\n\n        function disableAll(nodeList){\n            nodeList.forEach(node => node.setAttribute('disabled', 'true'))\n        }\n\n        function enableAll(nodeList){\n            nodeList.forEach(node => node.removeAttribute('disabled'))\n        }\n\n        function updateCheckboxes() {\n            atLeastOneChecked(payLaterMessagingCheckboxes) ? disableAll(vaultingCheckboxes) : enableAll(vaultingCheckboxes)\n            atLeastOneChecked(vaultingCheckboxes) ? disableAll(payLaterMessagingCheckboxes) : enableAll(payLaterMessagingCheckboxes)\n\n            if(PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {\n                disableAll(vaultingCheckboxes)\n            }\n        }\n\n        updateCheckboxes()\n\n        payLaterMessagingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes))\n        vaultingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes));\n    }\n);\n"],"sourceRoot":""}
     1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/js/gateway-settings.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","document","addEventListener","payLaterMessagingCheckboxes","querySelectorAll","vaultingCheckboxes","atLeastOneChecked","checkboxesNodeList","Array","slice","filter","node","disabled","checked","length","disableAll","nodeList","forEach","setAttribute","enableAll","removeAttribute","updateCheckboxes","PayPalCommerceGatewaySettings","vaulting_features_available"],"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,gBClFpDC,SAASC,iBACN,mBACA,KACI,MAAMC,EAA8BF,SAASG,iBACzC,oFAGEC,EAAqBJ,SAASG,iBAChC,uBAGJ,SAASE,EAAkBC,GACvB,OAAOC,MAAMX,UAAUY,MAAMrC,KAAKmC,GAAoBG,OAAOC,IAASA,EAAKC,UAAYD,EAAKE,SAASC,OAAS,EAGlH,SAASC,EAAWC,GAChBA,EAASC,QAAQN,GAAQA,EAAKO,aAAa,WAAY,SAG3D,SAASC,EAAUH,GACfA,EAASC,QAAQN,GAAQA,EAAKS,gBAAgB,aAGlD,SAASC,IACLf,EAAkBH,GAA+BY,EAAWV,GAAsBc,EAAUd,GAC5FC,EAAkBD,GAAsBU,EAAWZ,GAA+BgB,EAAUhB,GAEhD,oBAAlCmB,+BAA+G,MAA9DA,8BAA8BC,6BACrFR,EAAWV,GAInBgB,IAEAlB,EAA4Bc,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB,IAC5EhB,EAAmBY,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB","file":"js/gateway-settings.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",";document.addEventListener(\n    'DOMContentLoaded',\n    () => {\n        const payLaterMessagingCheckboxes = document.querySelectorAll(\n            \"#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled\"\n        )\n\n        const vaultingCheckboxes = document.querySelectorAll(\n            \"#ppcp-vault_enabled\"\n        )\n\n        function atLeastOneChecked(checkboxesNodeList) {\n            return Array.prototype.slice.call(checkboxesNodeList).filter(node => !node.disabled && node.checked).length > 0\n        }\n\n        function disableAll(nodeList){\n            nodeList.forEach(node => node.setAttribute('disabled', 'true'))\n        }\n\n        function enableAll(nodeList){\n            nodeList.forEach(node => node.removeAttribute('disabled'))\n        }\n\n        function updateCheckboxes() {\n            atLeastOneChecked(payLaterMessagingCheckboxes) ? disableAll(vaultingCheckboxes) : enableAll(vaultingCheckboxes)\n            atLeastOneChecked(vaultingCheckboxes) ? disableAll(payLaterMessagingCheckboxes) : enableAll(payLaterMessagingCheckboxes)\n\n            if(typeof PayPalCommerceGatewaySettings === 'undefined' || PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {\n                disableAll(vaultingCheckboxes)\n            }\n        }\n\n        updateCheckboxes()\n\n        payLaterMessagingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes))\n        vaultingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes));\n    }\n);\n"],"sourceRoot":""}
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-wc-gateway/resources/js/gateway-settings.js

    r2544454 r2585614  
    2626            atLeastOneChecked(vaultingCheckboxes) ? disableAll(payLaterMessagingCheckboxes) : enableAll(payLaterMessagingCheckboxes)
    2727
    28             if(PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {
     28            if(typeof PayPalCommerceGatewaySettings === 'undefined' || PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {
    2929                disableAll(vaultingCheckboxes)
    3030            }
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-wc-gateway/src/Gateway/class-processpaymenttrait.php

    r2544454 r2585614  
    142142        } catch ( PayPalApiException $error ) {
    143143            if ( $error->has_detail( 'INSTRUMENT_DECLINED' ) ) {
     144                $wc_order->update_status(
     145                    'failed',
     146                    __( 'Instrument declined.', 'woocommerce-paypal-payments' )
     147                );
     148
    144149                $this->session_handler->increment_insufficient_funding_tries();
    145150                $host = $this->config->has( 'sandbox_on' ) && $this->config->get( 'sandbox_on' ) ?
     
    162167            $this->session_handler->destroy_session_data();
    163168        } catch ( RuntimeException $error ) {
     169            $wc_order->update_status(
     170                'failed',
     171                __( 'Could not process order.', 'woocommerce-paypal-payments' )
     172            );
    164173            $this->session_handler->destroy_session_data();
    165174            wc_add_notice( $error->getMessage(), 'error' );
     
    170179            $this->order_processor->last_error(),
    171180            'error'
     181        );
     182        $wc_order->update_status(
     183            'failed',
     184            __( 'Could not process order.', 'woocommerce-paypal-payments' )
    172185        );
    173186
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-wc-gateway/src/Settings/class-settingslistener.php

    r2573328 r2585614  
    157157            }
    158158        } catch ( RuntimeException $exception ) {
     159            $this->settings->set( 'vault_enabled', false );
     160            $this->settings->persist();
     161
    159162            add_action(
    160163                'admin_notices',
    161164                function () use ( $exception ) {
    162165                    printf(
    163                         '<div class="notice notice-error"><p>%s</p></div>',
    164                         esc_attr( $exception->getMessage() )
     166                        '<div class="notice notice-error"><p>%1$s</p><p>%2$s</p></div>',
     167                        esc_html__( 'Authentication with PayPal failed: ', 'woocommerce-paypal-payments' ) . esc_attr( $exception->getMessage() ),
     168                        wp_kses_post( __( 'Please verify your API Credentials and try again to connect your PayPal business account. Visit the <a href="https://docs.woocommerce.com/document/woocommerce-paypal-payments/" target="_blank">plugin documentation</a> for more information about the setup.', 'woocommerce-paypal-payments' ) )
    165169                    );
    166170                }
  • woocommerce-paypal-payments/tags/1.5.1/modules/ppcp-wc-gateway/src/Settings/class-settingsrenderer.php

    r2573328 r2585614  
    552552    }
    553553}
     554
  • woocommerce-paypal-payments/tags/1.5.1/readme.txt

    r2580477 r2585614  
    55Tested up to: 5.8
    66Requires PHP: 7.1
    7 Stable tag: 1.5.0
     7Stable tag: 1.5.1
    88License: GPLv2
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    8181
    8282== Changelog ==
     83
     84= 1.5.1 =
     85* Fix - Set 3DS contingencies to "SCA_WHEN_REQUIRED". #178
     86* Fix - Plugin conflict blocking line item details. #221
     87* Fix - WooCommerce orders left in "Pending Payment" after a decline. #222
     88* Fix - Do not send decimals when currency does not support them. #202
     89* Fix - Gateway can be activated without a connected PayPal account. #205
    8390
    8491= 1.5.0 =
  • woocommerce-paypal-payments/tags/1.5.1/vendor/autoload.php

    r2580477 r2585614  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c::getLoader();
     7return ComposerAutoloaderInitfd327382102db5a22440815e53142caa::getLoader();
  • woocommerce-paypal-payments/tags/1.5.1/vendor/composer/autoload_classmap.php

    r2580477 r2585614  
    121121    'WooCommerce\\PayPalCommerce\\Session\\SessionHandler' => $baseDir . '/modules/ppcp-session/src/class-sessionhandler.php',
    122122    'WooCommerce\\PayPalCommerce\\Session\\SessionModule' => $baseDir . '/modules/ppcp-session/src/class-sessionmodule.php',
     123    'WooCommerce\\PayPalCommerce\\StatusReport\\Renderer' => $baseDir . '/modules/ppcp-status-report/src/class-renderer.php',
     124    'WooCommerce\\PayPalCommerce\\StatusReport\\StatusReportModule' => $baseDir . '/modules/ppcp-status-report/src/class-statusreportmodule.php',
    123125    'WooCommerce\\PayPalCommerce\\Subscription\\Helper\\SubscriptionHelper' => $baseDir . '/modules/ppcp-subscription/src/Helper/class-subscriptionhelper.php',
    124126    'WooCommerce\\PayPalCommerce\\Subscription\\RenewalHandler' => $baseDir . '/modules/ppcp-subscription/src/class-renewalhandler.php',
  • woocommerce-paypal-payments/tags/1.5.1/vendor/composer/autoload_real.php

    r2580477 r2585614  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c
     5class ComposerAutoloaderInitfd327382102db5a22440815e53142caa
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInitfd327382102db5a22440815e53142caa', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInitfd327382102db5a22440815e53142caa', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInitfd327382102db5a22440815e53142caa::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInitfd327382102db5a22440815e53142caa::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequire66bca0ec46d311fe385c37586d44ac5c($fileIdentifier, $file);
     61            composerRequirefd327382102db5a22440815e53142caa($fileIdentifier, $file);
    6262        }
    6363
     
    6666}
    6767
    68 function composerRequire66bca0ec46d311fe385c37586d44ac5c($fileIdentifier, $file)
     68function composerRequirefd327382102db5a22440815e53142caa($fileIdentifier, $file)
    6969{
    7070    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • woocommerce-paypal-payments/tags/1.5.1/vendor/composer/autoload_static.php

    r2580477 r2585614  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c
     7class ComposerStaticInitfd327382102db5a22440815e53142caa
    88{
    99    public static $files = array (
     
    196196        'WooCommerce\\PayPalCommerce\\Session\\SessionHandler' => __DIR__ . '/../..' . '/modules/ppcp-session/src/class-sessionhandler.php',
    197197        'WooCommerce\\PayPalCommerce\\Session\\SessionModule' => __DIR__ . '/../..' . '/modules/ppcp-session/src/class-sessionmodule.php',
     198        'WooCommerce\\PayPalCommerce\\StatusReport\\Renderer' => __DIR__ . '/../..' . '/modules/ppcp-status-report/src/class-renderer.php',
     199        'WooCommerce\\PayPalCommerce\\StatusReport\\StatusReportModule' => __DIR__ . '/../..' . '/modules/ppcp-status-report/src/class-statusreportmodule.php',
    198200        'WooCommerce\\PayPalCommerce\\Subscription\\Helper\\SubscriptionHelper' => __DIR__ . '/../..' . '/modules/ppcp-subscription/src/Helper/class-subscriptionhelper.php',
    199201        'WooCommerce\\PayPalCommerce\\Subscription\\RenewalHandler' => __DIR__ . '/../..' . '/modules/ppcp-subscription/src/class-renewalhandler.php',
     
    243245    {
    244246        return \Closure::bind(function () use ($loader) {
    245             $loader->prefixLengthsPsr4 = ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$prefixLengthsPsr4;
    246             $loader->prefixDirsPsr4 = ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$prefixDirsPsr4;
    247             $loader->classMap = ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$classMap;
     247            $loader->prefixLengthsPsr4 = ComposerStaticInitfd327382102db5a22440815e53142caa::$prefixLengthsPsr4;
     248            $loader->prefixDirsPsr4 = ComposerStaticInitfd327382102db5a22440815e53142caa::$prefixDirsPsr4;
     249            $loader->classMap = ComposerStaticInitfd327382102db5a22440815e53142caa::$classMap;
    248250
    249251        }, null, ClassLoader::class);
  • woocommerce-paypal-payments/tags/1.5.1/vendor/composer/installed.php

    r2580477 r2585614  
    66        'install_path' => __DIR__ . '/../../',
    77        'aliases' => array(),
    8         'reference' => '095acaee4e556f5342c4508b320a28ef9dee8cc2',
     8        'reference' => '3370ea0985f09bf6bbbf1cf9d0d6115e996e3799',
    99        'name' => 'woocommerce/woocommerce-paypal-payments',
    1010        'dev' => false,
     
    125125            'install_path' => __DIR__ . '/../../',
    126126            'aliases' => array(),
    127             'reference' => '095acaee4e556f5342c4508b320a28ef9dee8cc2',
     127            'reference' => '3370ea0985f09bf6bbbf1cf9d0d6115e996e3799',
    128128            'dev_requirement' => false,
    129129        ),
  • woocommerce-paypal-payments/tags/1.5.1/woocommerce-paypal-payments.php

    r2580477 r2585614  
    44 * Plugin URI:  https://woocommerce.com/products/woocommerce-paypal-payments/
    55 * Description: PayPal's latest complete payments processing solution. Accept PayPal, Pay Later, credit/debit cards, alternative digital wallets local payment types and bank accounts. Turn on only PayPal options or process a full suite of payment methods. Enable global transaction with extensive currency and country coverage.
    6  * Version:     1.5.0
     6 * Version:     1.5.1
    77 * Author:      WooCommerce
    88 * Author URI:  https://woocommerce.com/
     
    1010 * Requires PHP: 7.1
    1111 * WC requires at least: 3.9
    12  * WC tested up to: 5.5
     12 * WC tested up to: 5.6
    1313 * Text Domain: woocommerce-paypal-payments
    1414 *
     
    9696            }
    9797            $initialized = true;
    98 
     98            do_action( 'woocommerce_paypal_payments_built_container', $proxy );
    9999        }
    100100    }
  • woocommerce-paypal-payments/trunk/changelog.txt

    r2580477 r2585614  
    11*** Changelog ***
     2
     3= 1.5.1 - 2021-08-19 =
     4* Fix - Set 3DS contingencies to "SCA_WHEN_REQUIRED". #178
     5* Fix - Plugin conflict blocking line item details. #221
     6* Fix - WooCommerce orders left in "Pending Payment" after a decline. #222
     7* Fix - Do not send decimals when currency does not support them. #202
     8* Fix - Gateway can be activated without a connected PayPal account. #205
    29
    310= 1.5.0 - 2021-08-09 =
  • woocommerce-paypal-payments/trunk/modules/ppcp-api-client/src/Authentication/class-paypalbearer.php

    r2573328 r2585614  
    1515use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
    1616use Psr\Log\LoggerInterface;
     17use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
    1718
    1819/**
     
    2425
    2526    const CACHE_KEY = 'ppcp-bearer';
     27
     28    /**
     29     * The settings.
     30     *
     31     * @var Settings
     32     */
     33    protected $settings;
    2634
    2735    /**
     
    6876     * @param string          $secret The secret.
    6977     * @param LoggerInterface $logger The logger.
     78     * @param Settings        $settings The settings.
    7079     */
    7180    public function __construct(
     
    7483        string $key,
    7584        string $secret,
    76         LoggerInterface $logger
     85        LoggerInterface $logger,
     86        Settings $settings
    7787    ) {
    7888
    79         $this->cache  = $cache;
    80         $this->host   = $host;
    81         $this->key    = $key;
    82         $this->secret = $secret;
    83         $this->logger = $logger;
     89        $this->cache    = $cache;
     90        $this->host     = $host;
     91        $this->key      = $key;
     92        $this->secret   = $secret;
     93        $this->logger   = $logger;
     94        $this->settings = $settings;
    8495    }
    8596
     
    106117     */
    107118    private function newBearer(): Token {
    108         $url      = trailingslashit( $this->host ) . 'v1/oauth2/token?grant_type=client_credentials';
     119        $key    = $this->settings->has( 'client_id' ) && $this->settings->get( 'client_id' ) ? $this->settings->get( 'client_id' ) : $this->key;
     120        $secret = $this->settings->has( 'client_secret' ) && $this->settings->get( 'client_secret' ) ? $this->settings->get( 'client_secret' ) : $this->secret;
     121        $url    = trailingslashit( $this->host ) . 'v1/oauth2/token?grant_type=client_credentials';
     122
    109123        $args     = array(
    110124            'method'  => 'POST',
    111125            'headers' => array(
    112126                // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
    113                 'Authorization' => 'Basic ' . base64_encode( $this->key . ':' . $this->secret ),
     127                'Authorization' => 'Basic ' . base64_encode( $key . ':' . $secret ),
    114128            ),
    115129        );
     
    121135        if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
    122136            $error = new RuntimeException(
    123                 sprintf(
    124                     // translators: %s is the error description.
    125                     __( 'Could not create token. %s', 'woocommerce-paypal-payments' ),
    126                     isset( json_decode( $response['body'] )->error_description ) ? json_decode( $response['body'] )->error_description : ''
    127                 )
     137                __( 'Could not create token.', 'woocommerce-paypal-payments' )
    128138            );
    129139            $this->logger->log(
  • woocommerce-paypal-payments/trunk/modules/ppcp-api-client/src/Entity/class-amount.php

    r2415538 r2585614  
    2828     */
    2929    private $breakdown;
     30
     31    /**
     32     * Currencies that does not support decimals.
     33     *
     34     * @var array
     35     */
     36    private $currencies_without_decimals = array( 'HUF', 'JPY', 'TWD' );
    3037
    3138    /**
     
    7582        $amount = array(
    7683            'currency_code' => $this->currency_code(),
    77             'value'         => number_format( $this->value(), 2, '.', '' ),
     84            'value'         => in_array( $this->currency_code(), $this->currencies_without_decimals, true )
     85                ? round( $this->value(), 0 )
     86                : number_format( $this->value(), 2, '.', '' ),
    7887        );
    7988        if ( $this->breakdown() && count( $this->breakdown()->to_array() ) ) {
  • woocommerce-paypal-payments/trunk/modules/ppcp-api-client/src/Entity/class-money.php

    r2415538 r2585614  
    2828     */
    2929    private $value;
     30
     31    /**
     32     * Currencies that does not support decimals.
     33     *
     34     * @var array
     35     */
     36    private $currencies_without_decimals = array( 'HUF', 'JPY', 'TWD' );
    3037
    3138    /**
     
    6673        return array(
    6774            'currency_code' => $this->currency_code(),
    68             'value'         => number_format( $this->value(), 2, '.', '' ),
     75            'value'         => in_array( $this->currency_code(), $this->currencies_without_decimals, true )
     76                ? round( $this->value(), 0 )
     77                : number_format( $this->value(), 2, '.', '' ),
    6978        );
    7079    }
  • woocommerce-paypal-payments/trunk/modules/ppcp-api-client/src/Factory/class-amountfactory.php

    r2400438 r2585614  
    4646     */
    4747    public function from_wc_cart( \WC_Cart $cart ): Amount {
    48         $currency   = get_woocommerce_currency();
    49         $total      = new Money( (float) $cart->get_total( 'numeric' ), $currency );
    50         $item_total = $cart->get_cart_contents_total() + $cart->get_discount_total();
     48        $currency = get_woocommerce_currency();
     49        $total    = new Money( (float) $cart->get_total( 'numeric' ), $currency );
     50
     51        $total_fees_amount = 0;
     52        $fees              = WC()->session->get( 'ppcp_fees' );
     53        if ( $fees ) {
     54            foreach ( WC()->session->get( 'ppcp_fees' ) as $fee ) {
     55                $total_fees_amount += (float) $fee->amount;
     56            }
     57        }
     58
     59        $item_total = $cart->get_cart_contents_total() + $cart->get_discount_total() + $total_fees_amount;
    5160        $item_total = new Money( (float) $item_total, $currency );
    5261        $shipping   = new Money(
  • woocommerce-paypal-payments/trunk/modules/ppcp-api-client/src/Factory/class-itemfactory.php

    r2544454 r2585614  
    5757            $cart->get_cart_contents()
    5858        );
    59         return $items;
     59
     60        $fees              = array();
     61        $fees_from_session = WC()->session->get( 'ppcp_fees' );
     62        if ( $fees_from_session ) {
     63            $fees = array_map(
     64                static function ( \stdClass $fee ) use ( $currency ): Item {
     65                    return new Item(
     66                        $fee->name,
     67                        new Money( (float) $fee->amount, $currency ),
     68                        1,
     69                        '',
     70                        new Money( (float) $fee->tax, $currency )
     71                    );
     72                },
     73                $fees_from_session
     74            );
     75        }
     76
     77        return array_merge( $items, $fees );
    6078    }
    6179
     
    6785     */
    6886    public function from_wc_order( \WC_Order $order ): array {
    69         return array_map(
     87        $items = array_map(
    7088            function ( \WC_Order_Item_Product $item ) use ( $order ): Item {
    7189                return $this->from_wc_order_line_item( $item, $order );
     
    7391            $order->get_items( 'line_item' )
    7492        );
     93
     94        $fees = array_map(
     95            function ( \WC_Order_Item_Fee $item ) use ( $order ): Item {
     96                return $this->from_wc_order_fee( $item, $order );
     97            },
     98            $order->get_fees()
     99        );
     100
     101        return array_merge( $items, $fees );
    75102    }
    76103
     
    111138
    112139    /**
     140     * Creates an Item based off a WooCommerce Fee Item.
     141     *
     142     * @param \WC_Order_Item_Fee $item The WooCommerce order item.
     143     * @param \WC_Order          $order The WooCommerce order.
     144     *
     145     * @return Item
     146     */
     147    private function from_wc_order_fee( \WC_Order_Item_Fee $item, \WC_Order $order ): Item {
     148        return new Item(
     149            $item->get_name(),
     150            new Money( (float) $item->get_amount(), $order->get_currency() ),
     151            $item->get_quantity(),
     152            '',
     153            new Money( (float) $item->get_total_tax(), $order->get_currency() )
     154        );
     155    }
     156
     157    /**
    113158     * Creates an Item based off a PayPal response.
    114159     *
  • woocommerce-paypal-payments/trunk/modules/ppcp-api-client/src/class-apimodule.php

    r2573328 r2585614  
    1111
    1212use Dhii\Container\ServiceProvider;
    13 use Dhii\Modular\Module\Exception\ModuleExceptionInterface;
    1413use Dhii\Modular\Module\ModuleInterface;
    1514use Interop\Container\ServiceProviderInterface;
     
    3938     */
    4039    public function run( ContainerInterface $container ): void {
     40        add_action(
     41            'woocommerce_after_calculate_totals',
     42            function ( \WC_Cart $cart ) {
     43                $fees = $cart->fees_api()->get_fees();
     44                WC()->session->set( 'ppcp_fees', $fees );
     45            }
     46        );
    4147    }
    4248
  • woocommerce-paypal-payments/trunk/modules/ppcp-button/assets/js/button.js

    r2573328 r2585614  
    1 !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=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"),this.messagesList=document.querySelector("ul.woocommerce-error")}genericError(){this.wrapper.classList.contains("ppcp-persist")||(this.clear(),this.message(this.genericErrorText))}appendPreparedErrorMessageElement(e){null===this.messagesList&&this.prepareMessagesList(),this.messagesList.replaceWith(e)}message(e,t=!1){if(0===e.length)throw new Error("A new message text must be a non-empty string.");null===this.messagesList&&this.prepareMessagesList(),t?this.wrapper.classList.add("ppcp-persist"):this.wrapper.classList.remove("ppcp-persist");let r=this.prepareMessagesListItem(e);this.messagesList.appendChild(r),jQuery.scroll_to_notices(jQuery(".woocommerce-notices-wrapper"))}prepareMessagesList(){null===this.messagesList&&(this.messagesList=document.createElement("ul"),this.messagesList.setAttribute("class","woocommerce-error"),this.messagesList.setAttribute("role","alert"),this.wrapper.appendChild(this.messagesList))}prepareMessagesListItem(e){const t=document.createElement("li");return t.innerHTML=e,t}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,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 s=()=>{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_state")?document.querySelector("#billing_state").value:e.address.admin_area_1,admin_area_2:document.querySelector("#billing_city")?document.querySelector("#billing_city").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 o=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=s(),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:a(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}};var i=class{constructor(e,t){this.gateway=e,this.renderer=t,this.actionHandler=null}init(){this.actionHandler=new o(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 a=e(t.data);r(a)})})}};var l=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 u=class{constructor(e,t,r,n,a,s){this.config=e,this.updateCart=t,this.showButtonCallback=r,this.hideButtonCallback=n,this.formElement=a,this.errorHandler=s}configuration(){if(this.hasVariations()){new l(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:a(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]),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=s(),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 u(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 o(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,a)=>(r.block(),fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:n.orderID})}).then(e=>e.json()).then(e=>{if(r.unblock(),!e.success){if(100===e.data.code?t.message(e.data.message):t.genericError(),void 0!==a&&void 0!==a.restart)return a.restart();throw new Error(e.data.message)}document.querySelector("#place_order").click()}));var y=class{constructor(e,t,r){this.config=e,this.errorHandler=t,this.spinner=r}configuration(){const e=this.spinner;return{createOrder:(t,r)=>{const n=s(),a=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"",o=this.errorHandler,i="checkout"===this.config.context?"form.checkout":"form#order_review",c=jQuery(i).serialize(),d=!!jQuery("#createaccount").is(":checked");return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:n,bn_code:a,context:this.config.context,order_id:this.config.order_id,form:c,createaccount:d})}).then((function(e){return e.json()})).then((function(t){if(!t.success){if(e.unblock(),void 0!==t.messages){const e=new DOMParser;o.appendPreparedErrorMessageElement(e.parseFromString(t.messages,"text/html").querySelector("ul"))}else o.message(t.data.message,!0);return}const r=document.createElement("input");return r.setAttribute("type","hidden"),r.setAttribute("name","ppcp-resume-order"),r.setAttribute("value",t.data.purchase_units[0].custom_id),document.querySelector(i).append(r),t.data.id}))},onApprove:m(this,this.errorHandler,this.spinner),onCancel:()=>{e.unblock()},onError:()=>{this.errorHandler.genericError(),e.unblock()}}}};var g=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}init(){this.render(),jQuery(document.body).on("updated_checkout",()=>{this.render()}),jQuery(document.body).on("updated_checkout payment_method_selected",()=>{this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}),jQuery("#saved-credit-card").on("change",()=>{this.displayPlaceOrderButtonForSavedCreditCards()}),this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){jQuery("#saved-credit-card").val(jQuery("#saved-credit-card option:first").val());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)))}displayPlaceOrderButtonForSavedCreditCards(){"ppcp-credit-card-gateway"===jQuery('input[name="payment_method"]:checked').val()&&(jQuery("#saved-credit-card").length&&""!==jQuery("#saved-credit-card").val()?(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(),this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.messages.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper)))}};var w=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){if(new URLSearchParams(window.location.search).has("change_payment_method"))return;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 f=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)||void 0===paypal.Buttons)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 _=e=>{const t=window.getComputedStyle(e),r=document.createElement("span");return r.setAttribute("id",e.id),Object.values(t).forEach(e=>{t[e]&&isNaN(e)&&r.style.setProperty(e,""+t[e])}),r};var b=class{constructor(e,t,r){this.defaultConfig=e,this.errorHandler=t,this.spinner=r,this.cardValid=!1,this.formValid=!1}render(e,t){if("checkout"!==this.defaultConfig.context&&"pay-now"!==this.defaultConfig.context||null===e||null===document.querySelector(e))return;if(void 0===paypal.HostedFields||!paypal.HostedFields.isEligible()){const t=document.querySelector(e);return void t.parentNode.removeChild(t)}const r=document.querySelector(".payment_box.payment_method_ppcp-credit-card-gateway"),n=r.style.display;r.style.display="block";const a=document.querySelector("#ppcp-hide-dcc");a&&a.parentNode.removeChild(a);const s=document.querySelector("#ppcp-credit-card-gateway-card-number"),o=window.getComputedStyle(s);let i={};Object.values(o).forEach(e=>{o[e]&&(i[e]=""+o[e])});const c=_(s);s.parentNode.replaceChild(c,s);const d=document.querySelector("#ppcp-credit-card-gateway-card-expiry"),l=_(d);d.parentNode.replaceChild(l,d);const u=document.querySelector("#ppcp-credit-card-gateway-card-cvc"),h=_(u);u.parentNode.replaceChild(h,u),r.style.display=n;const p=".payment_box payment_method_ppcp-credit-card-gateway";this.defaultConfig.enforce_vault&&document.querySelector(p+" .ppcp-credit-card-vault")&&(document.querySelector(p+" .ppcp-credit-card-vault").checked=!0,document.querySelector(p+" .ppcp-credit-card-vault").setAttribute("disabled",!0)),paypal.HostedFields.render({createOrder:t.createOrder,styles:{input:i},fields:{number:{selector:"#ppcp-credit-card-gateway-card-number",placeholder:this.defaultConfig.hosted_fields.labels.credit_card_number},cvv:{selector:"#ppcp-credit-card-gateway-card-cvc",placeholder:this.defaultConfig.hosted_fields.labels.cvv},expirationDate:{selector:"#ppcp-credit-card-gateway-card-expiry",placeholder:this.defaultConfig.hosted_fields.labels.mm_yy}}}).then(r=>{const n=e=>{if(this.spinner.block(),e&&e.preventDefault(),this.errorHandler.clear(),this.formValid&&this.cardValid){const e=!!this.defaultConfig.save_card,n=document.getElementById("ppcp-credit-card-vault")?document.getElementById("ppcp-credit-card-vault").checked:e;r.submit({contingencies:["3D_SECURE"],vault:n}).then(e=>(e.orderID=e.orderId,this.spinner.unblock(),t.onApprove(e))).catch(()=>{this.errorHandler.genericError(),this.spinner.unblock()})}else{this.spinner.unblock();const e=this.cardValid?this.defaultConfig.hosted_fields.labels.fields_not_valid:this.defaultConfig.hosted_fields.labels.card_not_supported;this.errorHandler.message(e)}};r.on("inputSubmitRequest",(function(){n(null)})),r.on("cardTypeChange",e=>{if(!e.cards.length)return void(this.cardValid=!1);const t=this.defaultConfig.hosted_fields.valid_cards;this.cardValid=-1!==t.indexOf(e.cards[0].type)}),r.on("validityChange",e=>{const t=Object.keys(e.fields).every((function(t){return e.fields[t].isValid}));this.formValid=t}),document.querySelector(e+" button").addEventListener("click",n)}),document.querySelector("#payment_method_ppcp-credit-card-gateway").addEventListener("click",()=>{document.querySelector("label[for=ppcp-credit-card-gateway-card-number]").click()})}};const v=(e,t)=>{if(!e)return!1;if(e.user!==t)return!1;return!((new Date).getTime()>=1e3*e.expiration)};var S=(e,t)=>{fetch(t.endpoint,{method:"POST",body:JSON.stringify({nonce:t.nonce})}).then(e=>e.json()).then(r=>{var n;v(r,t.user)&&(n=r,sessionStorage.setItem("ppcp-data-client-id",JSON.stringify(n)),e.setAttribute("data-client-token",r.token),document.body.append(e))})};var P=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)}};var q=class{constructor(){this.target="form.woocommerce-checkout"}setTarget(e){this.target=e}block(){jQuery(this.target).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock(){jQuery(this.target).unblock()}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.addEventListener("load",e=>{(()=>{const e=new n(PayPalCommerceGateway.labels.error.generic),t=new q,r=new b(PayPalCommerceGateway,e,t),a=new f(r,PayPalCommerceGateway),s=new P(PayPalCommerceGateway.messages),o=PayPalCommerceGateway.context;if(("mini-cart"===o||"product"===o)&&"1"===PayPalCommerceGateway.mini_cart_buttons_enabled){new i(PayPalCommerceGateway,a).init()}if("product"===o&&"1"===PayPalCommerceGateway.single_product_buttons_enabled){new h(PayPalCommerceGateway,a,s).init()}if("cart"===o){new p(PayPalCommerceGateway,a).init()}if("checkout"===o){new g(PayPalCommerceGateway,a,s,t).init()}if("pay-now"===o){new w(PayPalCommerceGateway,a,s,t).init()}"checkout"!==o&&s.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?S(e,PayPalCommerceGateway.data_client_id):document.body.append(e)})}]);
     1!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=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"),this.messagesList=document.querySelector("ul.woocommerce-error")}genericError(){this.wrapper.classList.contains("ppcp-persist")||(this.clear(),this.message(this.genericErrorText))}appendPreparedErrorMessageElement(e){null===this.messagesList&&this.prepareMessagesList(),this.messagesList.replaceWith(e)}message(e,t=!1){if(0===e.length)throw new Error("A new message text must be a non-empty string.");null===this.messagesList&&this.prepareMessagesList(),t?this.wrapper.classList.add("ppcp-persist"):this.wrapper.classList.remove("ppcp-persist");let r=this.prepareMessagesListItem(e);this.messagesList.appendChild(r),jQuery.scroll_to_notices(jQuery(".woocommerce-notices-wrapper"))}prepareMessagesList(){null===this.messagesList&&(this.messagesList=document.createElement("ul"),this.messagesList.setAttribute("class","woocommerce-error"),this.messagesList.setAttribute("role","alert"),this.wrapper.appendChild(this.messagesList))}prepareMessagesListItem(e){const t=document.createElement("li");return t.innerHTML=e,t}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,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 s=()=>{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_state")?document.querySelector("#billing_state").value:e.address.admin_area_1,admin_area_2:document.querySelector("#billing_city")?document.querySelector("#billing_city").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 o=class{constructor(e,t){this.config=e,this.errorHandler=t}configuration(){return{createOrder:(e,t)=>{const r=s(),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:a(this,this.errorHandler),onError:e=>{this.errorHandler.genericError()}}}};var i=class{constructor(e,t){this.gateway=e,this.renderer=t,this.actionHandler=null}init(){this.actionHandler=new o(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 a=e(t.data);r(a)})})}};var l=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 u=class{constructor(e,t,r,n,a,s){this.config=e,this.updateCart=t,this.showButtonCallback=r,this.hideButtonCallback=n,this.formElement=a,this.errorHandler=s}configuration(){if(this.hasVariations()){new l(this.formElement.querySelector(".single_add_to_cart_button"),this.showButtonCallback,this.hideButtonCallback).init()}return{createOrder:this.createOrder(),onApprove:a(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]),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=s(),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 u(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 o(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,a)=>(r.block(),fetch(e.config.ajax.approve_order.endpoint,{method:"POST",body:JSON.stringify({nonce:e.config.ajax.approve_order.nonce,order_id:n.orderID})}).then(e=>e.json()).then(e=>{if(r.unblock(),!e.success){if(100===e.data.code?t.message(e.data.message):t.genericError(),void 0!==a&&void 0!==a.restart)return a.restart();throw new Error(e.data.message)}document.querySelector("#place_order").click()}));var y=class{constructor(e,t,r){this.config=e,this.errorHandler=t,this.spinner=r}configuration(){const e=this.spinner;return{createOrder:(t,r)=>{const n=s(),a=void 0!==this.config.bn_codes[this.config.context]?this.config.bn_codes[this.config.context]:"",o=this.errorHandler,i="checkout"===this.config.context?"form.checkout":"form#order_review",c=jQuery(i).serialize(),d=!!jQuery("#createaccount").is(":checked");return fetch(this.config.ajax.create_order.endpoint,{method:"POST",body:JSON.stringify({nonce:this.config.ajax.create_order.nonce,payer:n,bn_code:a,context:this.config.context,order_id:this.config.order_id,form:c,createaccount:d})}).then((function(e){return e.json()})).then((function(t){if(!t.success){if(e.unblock(),void 0!==t.messages){const e=new DOMParser;o.appendPreparedErrorMessageElement(e.parseFromString(t.messages,"text/html").querySelector("ul"))}else o.message(t.data.message,!0);return}const r=document.createElement("input");return r.setAttribute("type","hidden"),r.setAttribute("name","ppcp-resume-order"),r.setAttribute("value",t.data.purchase_units[0].custom_id),document.querySelector(i).append(r),t.data.id}))},onApprove:m(this,this.errorHandler,this.spinner),onCancel:()=>{e.unblock()},onError:()=>{this.errorHandler.genericError(),e.unblock()}}}};var g=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}init(){this.render(),jQuery(document.body).on("updated_checkout",()=>{this.render()}),jQuery(document.body).on("updated_checkout payment_method_selected",()=>{this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}),jQuery("#saved-credit-card").on("change",()=>{this.displayPlaceOrderButtonForSavedCreditCards()}),this.switchBetweenPayPalandOrderButton(),this.displayPlaceOrderButtonForSavedCreditCards()}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){jQuery("#saved-credit-card").val(jQuery("#saved-credit-card option:first").val());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)))}displayPlaceOrderButtonForSavedCreditCards(){"ppcp-credit-card-gateway"===jQuery('input[name="payment_method"]:checked').val()&&(jQuery("#saved-credit-card").length&&""!==jQuery("#saved-credit-card").val()?(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(),this.renderer.hideButtons(this.gateway.button.wrapper),this.renderer.hideButtons(this.gateway.messages.wrapper),this.renderer.showButtons(this.gateway.hosted_fields.wrapper)))}};var w=class{constructor(e,t,r,n){this.gateway=e,this.renderer=t,this.messages=r,this.spinner=n}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.spinner);this.renderer.render(this.gateway.button.wrapper,this.gateway.hosted_fields.wrapper,e.configuration())}switchBetweenPayPalandOrderButton(){if(new URLSearchParams(window.location.search).has("change_payment_method"))return;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 f=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)||void 0===paypal.Buttons)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 _=e=>{const t=window.getComputedStyle(e),r=document.createElement("span");return r.setAttribute("id",e.id),Object.values(t).forEach(e=>{t[e]&&isNaN(e)&&r.style.setProperty(e,""+t[e])}),r};var b=class{constructor(e,t,r){this.defaultConfig=e,this.errorHandler=t,this.spinner=r,this.cardValid=!1,this.formValid=!1}render(e,t){if("checkout"!==this.defaultConfig.context&&"pay-now"!==this.defaultConfig.context||null===e||null===document.querySelector(e))return;if(void 0===paypal.HostedFields||!paypal.HostedFields.isEligible()){const t=document.querySelector(e);return void t.parentNode.removeChild(t)}const r=document.querySelector(".payment_box.payment_method_ppcp-credit-card-gateway"),n=r.style.display;r.style.display="block";const a=document.querySelector("#ppcp-hide-dcc");a&&a.parentNode.removeChild(a);const s=document.querySelector("#ppcp-credit-card-gateway-card-number"),o=window.getComputedStyle(s);let i={};Object.values(o).forEach(e=>{o[e]&&(i[e]=""+o[e])});const c=_(s);s.parentNode.replaceChild(c,s);const d=document.querySelector("#ppcp-credit-card-gateway-card-expiry"),l=_(d);d.parentNode.replaceChild(l,d);const u=document.querySelector("#ppcp-credit-card-gateway-card-cvc"),h=_(u);u.parentNode.replaceChild(h,u),r.style.display=n;const p=".payment_box payment_method_ppcp-credit-card-gateway";this.defaultConfig.enforce_vault&&document.querySelector(p+" .ppcp-credit-card-vault")&&(document.querySelector(p+" .ppcp-credit-card-vault").checked=!0,document.querySelector(p+" .ppcp-credit-card-vault").setAttribute("disabled",!0)),paypal.HostedFields.render({createOrder:t.createOrder,styles:{input:i},fields:{number:{selector:"#ppcp-credit-card-gateway-card-number",placeholder:this.defaultConfig.hosted_fields.labels.credit_card_number},cvv:{selector:"#ppcp-credit-card-gateway-card-cvc",placeholder:this.defaultConfig.hosted_fields.labels.cvv},expirationDate:{selector:"#ppcp-credit-card-gateway-card-expiry",placeholder:this.defaultConfig.hosted_fields.labels.mm_yy}}}).then(r=>{const n=e=>{if(this.spinner.block(),e&&e.preventDefault(),this.errorHandler.clear(),this.formValid&&this.cardValid){const e=!!this.defaultConfig.save_card,n=document.getElementById("ppcp-credit-card-vault")?document.getElementById("ppcp-credit-card-vault").checked:e;r.submit({contingencies:["SCA_WHEN_REQUIRED"],vault:n}).then(e=>(e.orderID=e.orderId,this.spinner.unblock(),t.onApprove(e))).catch(()=>{this.errorHandler.genericError(),this.spinner.unblock()})}else{this.spinner.unblock();const e=this.cardValid?this.defaultConfig.hosted_fields.labels.fields_not_valid:this.defaultConfig.hosted_fields.labels.card_not_supported;this.errorHandler.message(e)}};r.on("inputSubmitRequest",(function(){n(null)})),r.on("cardTypeChange",e=>{if(!e.cards.length)return void(this.cardValid=!1);const t=this.defaultConfig.hosted_fields.valid_cards;this.cardValid=-1!==t.indexOf(e.cards[0].type)}),r.on("validityChange",e=>{const t=Object.keys(e.fields).every((function(t){return e.fields[t].isValid}));this.formValid=t}),document.querySelector(e+" button").addEventListener("click",n)}),document.querySelector("#payment_method_ppcp-credit-card-gateway").addEventListener("click",()=>{document.querySelector("label[for=ppcp-credit-card-gateway-card-number]").click()})}};const v=(e,t)=>{if(!e)return!1;if(e.user!==t)return!1;return!((new Date).getTime()>=1e3*e.expiration)};var S=(e,t)=>{fetch(t.endpoint,{method:"POST",body:JSON.stringify({nonce:t.nonce})}).then(e=>e.json()).then(r=>{var n;v(r,t.user)&&(n=r,sessionStorage.setItem("ppcp-data-client-id",JSON.stringify(n)),e.setAttribute("data-client-token",r.token),document.body.append(e))})};var P=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)}};var q=class{constructor(){this.target="form.woocommerce-checkout"}setTarget(e){this.target=e}block(){jQuery(this.target).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock(){jQuery(this.target).unblock()}};document.addEventListener("DOMContentLoaded",()=>{const e=document.createElement("script");e.addEventListener("load",e=>{(()=>{const e=new n(PayPalCommerceGateway.labels.error.generic),t=new q,r=new b(PayPalCommerceGateway,e,t),a=new f(r,PayPalCommerceGateway),s=new P(PayPalCommerceGateway.messages),o=PayPalCommerceGateway.context;if(("mini-cart"===o||"product"===o)&&"1"===PayPalCommerceGateway.mini_cart_buttons_enabled){new i(PayPalCommerceGateway,a).init()}if("product"===o&&"1"===PayPalCommerceGateway.single_product_buttons_enabled){new h(PayPalCommerceGateway,a,s).init()}if("cart"===o){new p(PayPalCommerceGateway,a).init()}if("checkout"===o){new g(PayPalCommerceGateway,a,s,t).init()}if("pay-now"===o){new w(PayPalCommerceGateway,a,s,t).init()}"checkout"!==o&&s.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?S(e,PayPalCommerceGateway.data_client_id):document.body.append(e)})}]);
    22//# sourceMappingURL=button.js.map
  • woocommerce-paypal-payments/trunk/modules/ppcp-button/assets/js/button.js.map

    r2573328 r2585614  
    1 {"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/ContextBootstrap/PayNowBootstrap.js","webpack:///./resources/js/modules/Renderer/Renderer.js","webpack:///./resources/js/modules/Helper/DccInputFactory.js","webpack:///./resources/js/modules/Renderer/CreditCardRenderer.js","webpack:///./resources/js/modules/DataClientIdAttributeHandler.js","webpack:///./resources/js/modules/Renderer/MessageRenderer.js","webpack:///./resources/js/modules/Helper/Spinner.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","messagesList","genericError","classList","contains","clear","message","appendPreparedErrorMessageElement","errorMessageElement","prepareMessagesList","replaceWith","text","persist","length","Error","add","remove","messageNode","prepareMessagesListItem","appendChild","jQuery","scroll_to_notices","createElement","setAttribute","li","innerHTML","sanitize","textarea","replace","innerText","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","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","parseInt","push","qty","map","SingleProductBootstap","messages","hideButtons","change_cart","showButtons","priceText","amount","renderWithAmount","CartBootstrap","spinner","block","unblock","code","click","CheckoutActionHandler","formSelector","formValues","serialize","createaccount","is","form","domParser","DOMParser","parseFromString","input","custom_id","append","onCancel","CheckoutBootstap","switchBetweenPayPalandOrderButton","displayPlaceOrderButtonForSavedCreditCards","cancel_wrapper","val","currentPaymentMethod","show","hide","PayNowBootstrap","URLSearchParams","window","search","has","Renderer","creditCardRenderer","defaultConfig","hostedFieldsWrapper","contextConfig","renderButtons","isAlreadyRendered","paypal","Buttons","style","mini_cart_style","hasChildNodes","domElement","display","dccInputFactory","original","styles","getComputedStyle","newElement","values","prop","isNaN","setProperty","CreditCardRenderer","cardValid","formValid","HostedFields","isEligible","wrapperElement","parentNode","removeChild","gateWayBox","oldDisplayStyle","hideDccGateway","cardNumberField","stylesRaw","cardNumber","replaceChild","cardExpiryField","cardExpiry","cardCodeField","cardCode","formWrapper","enforce_vault","checked","fields","number","selector","placeholder","credit_card_number","cvv","expirationDate","mm_yy","hostedFields","submitEvent","event","preventDefault","save_card","vault","getElementById","submit","contingencies","payload","orderId","fields_not_valid","card_not_supported","cards","validCards","valid_cards","indexOf","type","keys","every","isValid","addEventListener","validateToken","token","user","Date","getTime","expiration","dataClientIdAttributeHandler","script","sessionStorage","setItem","MessageRenderer","Messages","placement","newWrapper","sibling","nextSibling","parentElement","insertBefore","Spinner","target","setTarget","overlayCSS","background","opacity","messageRenderer","mini_cart_buttons_enabled","single_product_buttons_enabled","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        this.messagesList = document.querySelector('ul.woocommerce-error');\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    appendPreparedErrorMessageElement(errorMessageElement)\n    {\n        if(this.messagesList === null) {\n            this.prepareMessagesList();\n        }\n\n        this.messagesList.replaceWith(errorMessageElement);\n    }\n\n    message(text, persist = false)\n    {\n        if(! typeof String || text.length === 0){\n            throw new Error('A new message text must be a non-empty string.');\n        }\n\n        if(this.messagesList === null){\n            this.prepareMessagesList();\n        }\n\n        if (persist) {\n            this.wrapper.classList.add('ppcp-persist');\n        } else {\n            this.wrapper.classList.remove('ppcp-persist');\n        }\n\n        let messageNode = this.prepareMessagesListItem(text);\n        this.messagesList.appendChild(messageNode);\n\n        jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'))\n    }\n\n    prepareMessagesList()\n    {\n        if(this.messagesList === null){\n            this.messagesList = document.createElement('ul');\n            this.messagesList.setAttribute('class', 'woocommerce-error');\n            this.messagesList.setAttribute('role', 'alert');\n            this.wrapper.appendChild(this.messagesList);\n        }\n    }\n\n    prepareMessagesListItem(message)\n    {\n        const li = document.createElement('li');\n        li.innerHTML = message;\n\n        return li;\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_state')) ? document.querySelector('#billing_state').value : payer.address.admin_area_1,\n            admin_area_2 : (document.querySelector('#billing_city')) ? document.querySelector('#billing_city').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<unknown>}\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;\n","const onApprove = (context, errorHandler, spinner) => {\n    return (data, actions) => {\n        spinner.block();\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            spinner.unblock();\n            if (!data.success) {\n                if (data.data.code === 100) {\n                    errorHandler.message(data.data.message);\n                } else {\n                    errorHandler.genericError();\n                }\n                if (typeof actions !== 'undefined' && 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, spinner) {\n        this.config = config;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n    }\n\n    configuration() {\n        const spinner = this.spinner;\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            const errorHandler = this.errorHandler;\n\n            const formSelector = this.config.context === 'checkout' ? 'form.checkout' : 'form#order_review';\n            const formValues = jQuery(formSelector).serialize();\n\n            const createaccount = jQuery('#createaccount').is(\":checked\") ? true : false;\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                    order_id:this.config.order_id,\n                    form:formValues,\n                    createaccount: createaccount\n                })\n            }).then(function (res) {\n                return res.json();\n            }).then(function (data) {\n                if (!data.success) {\n                    spinner.unblock();\n                    //handle both messages sent from Woocommerce (data.messages) and this plugin (data.data.message)\n                    if (typeof(data.messages) !== 'undefined' )\n                    {\n                        const domParser = new DOMParser();\n                        errorHandler.appendPreparedErrorMessageElement(\n                            domParser.parseFromString(data.messages, 'text/html')\n                                .querySelector('ul')\n                        );\n                    } else {\n                        errorHandler.message(data.data.message, true);\n                    }\n\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(formSelector).append(input);\n                return data.data.id;\n            });\n        }\n        return {\n            createOrder,\n            onApprove:onApprove(this, this.errorHandler, this.spinner),\n            onCancel: () => {\n                spinner.unblock();\n            },\n            onError: () => {\n                this.errorHandler.genericError();\n                spinner.unblock();\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, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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              this.displayPlaceOrderButtonForSavedCreditCards()\n\n          })\n\n        jQuery('#saved-credit-card').on('change', () => {\n            this.displayPlaceOrderButtonForSavedCreditCards()\n        })\n\n        this.switchBetweenPayPalandOrderButton()\n        this.displayPlaceOrderButtonForSavedCreditCards()\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            this.spinner\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        jQuery('#saved-credit-card').val(jQuery('#saved-credit-card option:first').val());\n\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    displayPlaceOrderButtonForSavedCreditCards() {\n        const currentPaymentMethod = jQuery(\n          'input[name=\"payment_method\"]:checked').val();\n        if (currentPaymentMethod !== 'ppcp-credit-card-gateway') {\n            return;\n        }\n\n        if (jQuery('#saved-credit-card').length && jQuery('#saved-credit-card').val() !== '') {\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        } else {\n            jQuery('#place_order').hide()\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\nexport default CheckoutBootstap\n","import ErrorHandler from '../ErrorHandler';\nimport CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';\n\nclass PayNowBootstrap {\n    constructor(gateway, renderer, messages, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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            this.spinner\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 urlParams = new URLSearchParams(window.location.search)\n        if (urlParams.has('change_payment_method')) {\n            return\n        }\n\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 PayNowBootstrap;\n","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) || 'undefined' === typeof paypal.Buttons ) {\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;","const dccInputFactory = (original) => {\n    const styles = window.getComputedStyle(original);\n    const newElement = document.createElement('span');\n    newElement.setAttribute('id', original.id);\n    Object.values(styles).forEach( (prop) => {\n        if (! styles[prop] || ! isNaN(prop) ) {\n            return;\n        }\n        newElement.style.setProperty(prop,'' + styles[prop]);\n    });\n    return newElement;\n}\n\nexport default dccInputFactory;","import dccInputFactory from \"../Helper/DccInputFactory\";\n\nclass CreditCardRenderer {\n\n    constructor(defaultConfig, errorHandler, spinner) {\n        this.defaultConfig = defaultConfig;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n        this.cardValid = false;\n        this.formValid = false;\n    }\n\n    render(wrapper, contextConfig) {\n\n        if (\n            (\n                this.defaultConfig.context !== 'checkout'\n                && this.defaultConfig.context !== 'pay-now'\n            )\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\n        const gateWayBox = document.querySelector('.payment_box.payment_method_ppcp-credit-card-gateway');\n        const oldDisplayStyle = gateWayBox.style.display;\n        gateWayBox.style.display = 'block';\n\n        const hideDccGateway = document.querySelector('#ppcp-hide-dcc');\n        if (hideDccGateway) {\n            hideDccGateway.parentNode.removeChild(hideDccGateway);\n        }\n\n        const cardNumberField = document.querySelector('#ppcp-credit-card-gateway-card-number');\n\n        const stylesRaw = window.getComputedStyle(cardNumberField);\n        let styles = {};\n        Object.values(stylesRaw).forEach( (prop) => {\n            if (! stylesRaw[prop]) {\n                return;\n            }\n            styles[prop] = '' + stylesRaw[prop];\n        });\n\n        const cardNumber = dccInputFactory(cardNumberField);\n        cardNumberField.parentNode.replaceChild(cardNumber, cardNumberField);\n\n        const cardExpiryField = document.querySelector('#ppcp-credit-card-gateway-card-expiry');\n        const cardExpiry = dccInputFactory(cardExpiryField);\n        cardExpiryField.parentNode.replaceChild(cardExpiry, cardExpiryField);\n\n        const cardCodeField = document.querySelector('#ppcp-credit-card-gateway-card-cvc');\n        const cardCode = dccInputFactory(cardCodeField);\n        cardCodeField.parentNode.replaceChild(cardCode, cardCodeField);\n\n        gateWayBox.style.display = oldDisplayStyle;\n\n        const formWrapper = '.payment_box payment_method_ppcp-credit-card-gateway';\n        if (\n            this.defaultConfig.enforce_vault\n            && document.querySelector(formWrapper + ' .ppcp-credit-card-vault')\n        ) {\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').checked = true;\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').setAttribute('disabled', true);\n        }\n        paypal.HostedFields.render({\n            createOrder: contextConfig.createOrder,\n            styles: {\n                'input': styles\n            },\n            fields: {\n                number: {\n                    selector: '#ppcp-credit-card-gateway-card-number',\n                    placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number,\n                },\n                cvv: {\n                    selector: '#ppcp-credit-card-gateway-card-cvc',\n                    placeholder: this.defaultConfig.hosted_fields.labels.cvv,\n                },\n                expirationDate: {\n                    selector: '#ppcp-credit-card-gateway-card-expiry',\n                    placeholder: this.defaultConfig.hosted_fields.labels.mm_yy,\n                }\n            }\n        }).then(hostedFields => {\n            const submitEvent = (event) => {\n                this.spinner.block();\n                if (event) {\n                    event.preventDefault();\n                }\n                this.errorHandler.clear();\n\n                if (this.formValid && this.cardValid) {\n                    const save_card = this.defaultConfig.save_card ? true : false;\n                    const vault = document.getElementById('ppcp-credit-card-vault') ?\n                      document.getElementById('ppcp-credit-card-vault').checked : save_card;\n                    hostedFields.submit({\n                        contingencies: ['3D_SECURE'],\n                        vault: vault\n                    }).then((payload) => {\n                        payload.orderID = payload.orderId;\n                        this.spinner.unblock();\n                        return contextConfig.onApprove(payload);\n                    }).catch(() => {\n                        this.errorHandler.genericError();\n                        this.spinner.unblock();\n                    });\n                } else {\n                    this.spinner.unblock();\n                    const message = ! this.cardValid ? this.defaultConfig.hosted_fields.labels.card_not_supported : this.defaultConfig.hosted_fields.labels.fields_not_valid;\n                    this.errorHandler.message(message);\n                }\n            }\n            hostedFields.on('inputSubmitRequest', function () {\n                submitEvent(null);\n            });\n            hostedFields.on('cardTypeChange', (event) => {\n                if ( ! event.cards.length ) {\n                    this.cardValid = false;\n                    return;\n                }\n                const validCards = this.defaultConfig.hosted_fields.valid_cards;\n                this.cardValid = validCards.indexOf(event.cards[0].type) !== -1;\n            })\n            hostedFields.on('validityChange', (event) => {\n                const formValid = Object.keys(event.fields).every(function (key) {\n                    return event.fields[key].isValid;\n                });\n               this.formValid = formValid;\n\n            })\n            document.querySelector(wrapper + ' button').addEventListener(\n                'click',\n                submitEvent\n            );\n        });\n\n        document.querySelector('#payment_method_ppcp-credit-card-gateway').addEventListener(\n            'click',\n            () => {\n                document.querySelector('label[for=ppcp-credit-card-gateway-card-number]').click();\n            }\n        )\n    }\n}\nexport default CreditCardRenderer;\n","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    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;\n","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;","class Spinner {\n\n    constructor() {\n        this.target = 'form.woocommerce-checkout';\n    }\n\n    setTarget(target) {\n        this.target = target;\n    }\n\n    block() {\n\n        jQuery( this.target ).block({\n            message: null,\n            overlayCSS: {\n                background: '#fff',\n                opacity: 0.6\n            }\n        });\n    }\n\n    unblock() {\n\n        jQuery( this.target ).unblock();\n    }\n}\n\nexport default Spinner;\n","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 PayNowBootstrap from \"./modules/ContextBootstrap/PayNowBootstrap\";\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\";\nimport Spinner from \"./modules/Helper/Spinner\";\n\nconst bootstrap = () => {\n    const errorHandler = new ErrorHandler(PayPalCommerceGateway.labels.error.generic);\n    const spinner = new Spinner();\n    const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler, spinner);\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        if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {\n            const miniCartBootstrap = new MiniCartBootstap(\n                PayPalCommerceGateway,\n                renderer\n            );\n\n            miniCartBootstrap.init();\n        }\n    }\n\n    if (context === 'product' && PayPalCommerceGateway.single_product_buttons_enabled === '1') {\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            spinner\n        );\n\n        checkoutBootstap.init();\n    }\n\n    if (context === 'pay-now' ) {\n        const payNowBootstrap = new PayNowBootstrap(\n            PayPalCommerceGateway,\n            renderer,\n            messageRenderer,\n            spinner\n        );\n        payNowBootstrap.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);\n"],"sourceRoot":""}
     1{"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/ContextBootstrap/PayNowBootstrap.js","webpack:///./resources/js/modules/Renderer/Renderer.js","webpack:///./resources/js/modules/Helper/DccInputFactory.js","webpack:///./resources/js/modules/Renderer/CreditCardRenderer.js","webpack:///./resources/js/modules/DataClientIdAttributeHandler.js","webpack:///./resources/js/modules/Renderer/MessageRenderer.js","webpack:///./resources/js/modules/Helper/Spinner.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","messagesList","genericError","classList","contains","clear","message","appendPreparedErrorMessageElement","errorMessageElement","prepareMessagesList","replaceWith","text","persist","length","Error","add","remove","messageNode","prepareMessagesListItem","appendChild","jQuery","scroll_to_notices","createElement","setAttribute","li","innerHTML","sanitize","textarea","replace","innerText","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","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","parseInt","push","qty","map","SingleProductBootstap","messages","hideButtons","change_cart","showButtons","priceText","amount","renderWithAmount","CartBootstrap","spinner","block","unblock","code","click","CheckoutActionHandler","formSelector","formValues","serialize","createaccount","is","form","domParser","DOMParser","parseFromString","input","custom_id","append","onCancel","CheckoutBootstap","switchBetweenPayPalandOrderButton","displayPlaceOrderButtonForSavedCreditCards","cancel_wrapper","val","currentPaymentMethod","show","hide","PayNowBootstrap","URLSearchParams","window","search","has","Renderer","creditCardRenderer","defaultConfig","hostedFieldsWrapper","contextConfig","renderButtons","isAlreadyRendered","paypal","Buttons","style","mini_cart_style","hasChildNodes","domElement","display","dccInputFactory","original","styles","getComputedStyle","newElement","values","prop","isNaN","setProperty","CreditCardRenderer","cardValid","formValid","HostedFields","isEligible","wrapperElement","parentNode","removeChild","gateWayBox","oldDisplayStyle","hideDccGateway","cardNumberField","stylesRaw","cardNumber","replaceChild","cardExpiryField","cardExpiry","cardCodeField","cardCode","formWrapper","enforce_vault","checked","fields","number","selector","placeholder","credit_card_number","cvv","expirationDate","mm_yy","hostedFields","submitEvent","event","preventDefault","save_card","vault","getElementById","submit","contingencies","payload","orderId","fields_not_valid","card_not_supported","cards","validCards","valid_cards","indexOf","type","keys","every","isValid","addEventListener","validateToken","token","user","Date","getTime","expiration","dataClientIdAttributeHandler","script","sessionStorage","setItem","MessageRenderer","Messages","placement","newWrapper","sibling","nextSibling","parentElement","insertBefore","Spinner","target","setTarget","overlayCSS","background","opacity","messageRenderer","mini_cart_buttons_enabled","single_product_buttons_enabled","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        this.messagesList = document.querySelector('ul.woocommerce-error');\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    appendPreparedErrorMessageElement(errorMessageElement)\n    {\n        if(this.messagesList === null) {\n            this.prepareMessagesList();\n        }\n\n        this.messagesList.replaceWith(errorMessageElement);\n    }\n\n    message(text, persist = false)\n    {\n        if(! typeof String || text.length === 0){\n            throw new Error('A new message text must be a non-empty string.');\n        }\n\n        if(this.messagesList === null){\n            this.prepareMessagesList();\n        }\n\n        if (persist) {\n            this.wrapper.classList.add('ppcp-persist');\n        } else {\n            this.wrapper.classList.remove('ppcp-persist');\n        }\n\n        let messageNode = this.prepareMessagesListItem(text);\n        this.messagesList.appendChild(messageNode);\n\n        jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'))\n    }\n\n    prepareMessagesList()\n    {\n        if(this.messagesList === null){\n            this.messagesList = document.createElement('ul');\n            this.messagesList.setAttribute('class', 'woocommerce-error');\n            this.messagesList.setAttribute('role', 'alert');\n            this.wrapper.appendChild(this.messagesList);\n        }\n    }\n\n    prepareMessagesListItem(message)\n    {\n        const li = document.createElement('li');\n        li.innerHTML = message;\n\n        return li;\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_state')) ? document.querySelector('#billing_state').value : payer.address.admin_area_1,\n            admin_area_2 : (document.querySelector('#billing_city')) ? document.querySelector('#billing_city').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<unknown>}\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;\n","const onApprove = (context, errorHandler, spinner) => {\n    return (data, actions) => {\n        spinner.block();\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            spinner.unblock();\n            if (!data.success) {\n                if (data.data.code === 100) {\n                    errorHandler.message(data.data.message);\n                } else {\n                    errorHandler.genericError();\n                }\n                if (typeof actions !== 'undefined' && 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, spinner) {\n        this.config = config;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n    }\n\n    configuration() {\n        const spinner = this.spinner;\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            const errorHandler = this.errorHandler;\n\n            const formSelector = this.config.context === 'checkout' ? 'form.checkout' : 'form#order_review';\n            const formValues = jQuery(formSelector).serialize();\n\n            const createaccount = jQuery('#createaccount').is(\":checked\") ? true : false;\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                    order_id:this.config.order_id,\n                    form:formValues,\n                    createaccount: createaccount\n                })\n            }).then(function (res) {\n                return res.json();\n            }).then(function (data) {\n                if (!data.success) {\n                    spinner.unblock();\n                    //handle both messages sent from Woocommerce (data.messages) and this plugin (data.data.message)\n                    if (typeof(data.messages) !== 'undefined' )\n                    {\n                        const domParser = new DOMParser();\n                        errorHandler.appendPreparedErrorMessageElement(\n                            domParser.parseFromString(data.messages, 'text/html')\n                                .querySelector('ul')\n                        );\n                    } else {\n                        errorHandler.message(data.data.message, true);\n                    }\n\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(formSelector).append(input);\n                return data.data.id;\n            });\n        }\n        return {\n            createOrder,\n            onApprove:onApprove(this, this.errorHandler, this.spinner),\n            onCancel: () => {\n                spinner.unblock();\n            },\n            onError: () => {\n                this.errorHandler.genericError();\n                spinner.unblock();\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, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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              this.displayPlaceOrderButtonForSavedCreditCards()\n\n          })\n\n        jQuery('#saved-credit-card').on('change', () => {\n            this.displayPlaceOrderButtonForSavedCreditCards()\n        })\n\n        this.switchBetweenPayPalandOrderButton()\n        this.displayPlaceOrderButtonForSavedCreditCards()\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            this.spinner\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        jQuery('#saved-credit-card').val(jQuery('#saved-credit-card option:first').val());\n\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    displayPlaceOrderButtonForSavedCreditCards() {\n        const currentPaymentMethod = jQuery(\n          'input[name=\"payment_method\"]:checked').val();\n        if (currentPaymentMethod !== 'ppcp-credit-card-gateway') {\n            return;\n        }\n\n        if (jQuery('#saved-credit-card').length && jQuery('#saved-credit-card').val() !== '') {\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        } else {\n            jQuery('#place_order').hide()\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\nexport default CheckoutBootstap\n","import ErrorHandler from '../ErrorHandler';\nimport CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';\n\nclass PayNowBootstrap {\n    constructor(gateway, renderer, messages, spinner) {\n        this.gateway = gateway;\n        this.renderer = renderer;\n        this.messages = messages;\n        this.spinner = spinner;\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            this.spinner\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 urlParams = new URLSearchParams(window.location.search)\n        if (urlParams.has('change_payment_method')) {\n            return\n        }\n\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 PayNowBootstrap;\n","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) || 'undefined' === typeof paypal.Buttons ) {\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;","const dccInputFactory = (original) => {\n    const styles = window.getComputedStyle(original);\n    const newElement = document.createElement('span');\n    newElement.setAttribute('id', original.id);\n    Object.values(styles).forEach( (prop) => {\n        if (! styles[prop] || ! isNaN(prop) ) {\n            return;\n        }\n        newElement.style.setProperty(prop,'' + styles[prop]);\n    });\n    return newElement;\n}\n\nexport default dccInputFactory;","import dccInputFactory from \"../Helper/DccInputFactory\";\n\nclass CreditCardRenderer {\n\n    constructor(defaultConfig, errorHandler, spinner) {\n        this.defaultConfig = defaultConfig;\n        this.errorHandler = errorHandler;\n        this.spinner = spinner;\n        this.cardValid = false;\n        this.formValid = false;\n    }\n\n    render(wrapper, contextConfig) {\n\n        if (\n            (\n                this.defaultConfig.context !== 'checkout'\n                && this.defaultConfig.context !== 'pay-now'\n            )\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\n        const gateWayBox = document.querySelector('.payment_box.payment_method_ppcp-credit-card-gateway');\n        const oldDisplayStyle = gateWayBox.style.display;\n        gateWayBox.style.display = 'block';\n\n        const hideDccGateway = document.querySelector('#ppcp-hide-dcc');\n        if (hideDccGateway) {\n            hideDccGateway.parentNode.removeChild(hideDccGateway);\n        }\n\n        const cardNumberField = document.querySelector('#ppcp-credit-card-gateway-card-number');\n\n        const stylesRaw = window.getComputedStyle(cardNumberField);\n        let styles = {};\n        Object.values(stylesRaw).forEach( (prop) => {\n            if (! stylesRaw[prop]) {\n                return;\n            }\n            styles[prop] = '' + stylesRaw[prop];\n        });\n\n        const cardNumber = dccInputFactory(cardNumberField);\n        cardNumberField.parentNode.replaceChild(cardNumber, cardNumberField);\n\n        const cardExpiryField = document.querySelector('#ppcp-credit-card-gateway-card-expiry');\n        const cardExpiry = dccInputFactory(cardExpiryField);\n        cardExpiryField.parentNode.replaceChild(cardExpiry, cardExpiryField);\n\n        const cardCodeField = document.querySelector('#ppcp-credit-card-gateway-card-cvc');\n        const cardCode = dccInputFactory(cardCodeField);\n        cardCodeField.parentNode.replaceChild(cardCode, cardCodeField);\n\n        gateWayBox.style.display = oldDisplayStyle;\n\n        const formWrapper = '.payment_box payment_method_ppcp-credit-card-gateway';\n        if (\n            this.defaultConfig.enforce_vault\n            && document.querySelector(formWrapper + ' .ppcp-credit-card-vault')\n        ) {\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').checked = true;\n            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').setAttribute('disabled', true);\n        }\n        paypal.HostedFields.render({\n            createOrder: contextConfig.createOrder,\n            styles: {\n                'input': styles\n            },\n            fields: {\n                number: {\n                    selector: '#ppcp-credit-card-gateway-card-number',\n                    placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number,\n                },\n                cvv: {\n                    selector: '#ppcp-credit-card-gateway-card-cvc',\n                    placeholder: this.defaultConfig.hosted_fields.labels.cvv,\n                },\n                expirationDate: {\n                    selector: '#ppcp-credit-card-gateway-card-expiry',\n                    placeholder: this.defaultConfig.hosted_fields.labels.mm_yy,\n                }\n            }\n        }).then(hostedFields => {\n            const submitEvent = (event) => {\n                this.spinner.block();\n                if (event) {\n                    event.preventDefault();\n                }\n                this.errorHandler.clear();\n\n                if (this.formValid && this.cardValid) {\n                    const save_card = this.defaultConfig.save_card ? true : false;\n                    const vault = document.getElementById('ppcp-credit-card-vault') ?\n                      document.getElementById('ppcp-credit-card-vault').checked : save_card;\n                    hostedFields.submit({\n                        contingencies: ['SCA_WHEN_REQUIRED'],\n                        vault: vault\n                    }).then((payload) => {\n                        payload.orderID = payload.orderId;\n                        this.spinner.unblock();\n                        return contextConfig.onApprove(payload);\n                    }).catch(() => {\n                        this.errorHandler.genericError();\n                        this.spinner.unblock();\n                    });\n                } else {\n                    this.spinner.unblock();\n                    const message = ! this.cardValid ? this.defaultConfig.hosted_fields.labels.card_not_supported : this.defaultConfig.hosted_fields.labels.fields_not_valid;\n                    this.errorHandler.message(message);\n                }\n            }\n            hostedFields.on('inputSubmitRequest', function () {\n                submitEvent(null);\n            });\n            hostedFields.on('cardTypeChange', (event) => {\n                if ( ! event.cards.length ) {\n                    this.cardValid = false;\n                    return;\n                }\n                const validCards = this.defaultConfig.hosted_fields.valid_cards;\n                this.cardValid = validCards.indexOf(event.cards[0].type) !== -1;\n            })\n            hostedFields.on('validityChange', (event) => {\n                const formValid = Object.keys(event.fields).every(function (key) {\n                    return event.fields[key].isValid;\n                });\n               this.formValid = formValid;\n\n            })\n            document.querySelector(wrapper + ' button').addEventListener(\n                'click',\n                submitEvent\n            );\n        });\n\n        document.querySelector('#payment_method_ppcp-credit-card-gateway').addEventListener(\n            'click',\n            () => {\n                document.querySelector('label[for=ppcp-credit-card-gateway-card-number]').click();\n            }\n        )\n    }\n}\nexport default CreditCardRenderer;\n","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    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;\n","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;","class Spinner {\n\n    constructor() {\n        this.target = 'form.woocommerce-checkout';\n    }\n\n    setTarget(target) {\n        this.target = target;\n    }\n\n    block() {\n\n        jQuery( this.target ).block({\n            message: null,\n            overlayCSS: {\n                background: '#fff',\n                opacity: 0.6\n            }\n        });\n    }\n\n    unblock() {\n\n        jQuery( this.target ).unblock();\n    }\n}\n\nexport default Spinner;\n","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 PayNowBootstrap from \"./modules/ContextBootstrap/PayNowBootstrap\";\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\";\nimport Spinner from \"./modules/Helper/Spinner\";\n\nconst bootstrap = () => {\n    const errorHandler = new ErrorHandler(PayPalCommerceGateway.labels.error.generic);\n    const spinner = new Spinner();\n    const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler, spinner);\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        if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {\n            const miniCartBootstrap = new MiniCartBootstap(\n                PayPalCommerceGateway,\n                renderer\n            );\n\n            miniCartBootstrap.init();\n        }\n    }\n\n    if (context === 'product' && PayPalCommerceGateway.single_product_buttons_enabled === '1') {\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            spinner\n        );\n\n        checkoutBootstap.init();\n    }\n\n    if (context === 'pay-now' ) {\n        const payNowBootstrap = new PayNowBootstrap(\n            PayPalCommerceGateway,\n            renderer,\n            messageRenderer,\n            spinner\n        );\n        payNowBootstrap.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);\n"],"sourceRoot":""}
  • woocommerce-paypal-payments/trunk/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js

    r2573328 r2585614  
    105105                      document.getElementById('ppcp-credit-card-vault').checked : save_card;
    106106                    hostedFields.submit({
    107                         contingencies: ['3D_SECURE'],
     107                        contingencies: ['SCA_WHEN_REQUIRED'],
    108108                        vault: vault
    109109                    }).then((payload) => {
  • woocommerce-paypal-payments/trunk/modules/ppcp-button/services.php

    r2573328 r2585614  
    5252         * @var State $state
    5353         */
    54         if ( $state->current_state() < State::STATE_PROGRESSIVE ) {
     54        if ( $state->current_state() <= State::STATE_PROGRESSIVE ) {
    5555            return new DisabledSmartButton();
    5656        }
  • woocommerce-paypal-payments/trunk/modules/ppcp-compat/src/PPEC/class-deactivatenote.php

    r2580477 r2585614  
    3535        }
    3636
    37         self::possibly_add_note();
     37        try {
     38            self::possibly_add_note();
     39        } catch ( \Exception $e ) {
     40            return;
     41        }
    3842    }
    3943
  • woocommerce-paypal-payments/trunk/modules/ppcp-compat/src/class-compatmodule.php

    r2580477 r2585614  
    6969            'woocommerce_init',
    7070            function() {
    71                 if ( is_callable( array( WC(), 'is_wc_admin_active' ) ) && WC()->is_wc_admin_active() ) {
     71                if ( is_callable( array( WC(), 'is_wc_admin_active' ) ) && WC()->is_wc_admin_active() && class_exists( 'Automattic\WooCommerce\Admin\Notes\Notes' ) ) {
    7272                    PPEC\DeactivateNote::init();
    7373                }
  • woocommerce-paypal-payments/trunk/modules/ppcp-onboarding/services.php

    r2489831 r2585614  
    104104        $key    = $container->get( 'api.key' );
    105105        $secret = $container->get( 'api.secret' );
    106 
    107106        $host   = $container->get( 'api.host' );
    108107        $logger = $container->get( 'woocommerce.logger.woocommerce' );
     108        $settings = $container->get( 'wcgateway.settings' );
    109109        return new PayPalBearer(
    110110            $cache,
     
    112112            $key,
    113113            $secret,
    114             $logger
     114            $logger,
     115            $settings
    115116        );
    116117    },
  • woocommerce-paypal-payments/trunk/modules/ppcp-wc-gateway/assets/js/gateway-settings.js

    r2544454 r2585614  
    1 !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t){document.addEventListener("DOMContentLoaded",()=>{const e=document.querySelectorAll("#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled"),t=document.querySelectorAll("#ppcp-vault_enabled");function n(e){return Array.prototype.slice.call(e).filter(e=>!e.disabled&&e.checked).length>0}function r(e){e.forEach(e=>e.setAttribute("disabled","true"))}function o(e){e.forEach(e=>e.removeAttribute("disabled"))}function a(){n(e)?r(t):o(t),n(t)?r(e):o(e),"1"!==PayPalCommerceGatewaySettings.vaulting_features_available&&r(t)}a(),e.forEach(e=>e.addEventListener("change",a)),t.forEach(e=>e.addEventListener("change",a))})}]);
     1!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t){document.addEventListener("DOMContentLoaded",()=>{const e=document.querySelectorAll("#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled"),t=document.querySelectorAll("#ppcp-vault_enabled");function n(e){return Array.prototype.slice.call(e).filter(e=>!e.disabled&&e.checked).length>0}function r(e){e.forEach(e=>e.setAttribute("disabled","true"))}function o(e){e.forEach(e=>e.removeAttribute("disabled"))}function a(){n(e)?r(t):o(t),n(t)?r(e):o(e),"undefined"!=typeof PayPalCommerceGatewaySettings&&"1"===PayPalCommerceGatewaySettings.vaulting_features_available||r(t)}a(),e.forEach(e=>e.addEventListener("change",a)),t.forEach(e=>e.addEventListener("change",a))})}]);
    22//# sourceMappingURL=gateway-settings.js.map
  • woocommerce-paypal-payments/trunk/modules/ppcp-wc-gateway/assets/js/gateway-settings.js.map

    r2544454 r2585614  
    1 {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/js/gateway-settings.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","document","addEventListener","payLaterMessagingCheckboxes","querySelectorAll","vaultingCheckboxes","atLeastOneChecked","checkboxesNodeList","Array","slice","filter","node","disabled","checked","length","disableAll","nodeList","forEach","setAttribute","enableAll","removeAttribute","updateCheckboxes","PayPalCommerceGatewaySettings","vaulting_features_available"],"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,gBClFpDC,SAASC,iBACN,mBACA,KACI,MAAMC,EAA8BF,SAASG,iBACzC,oFAGEC,EAAqBJ,SAASG,iBAChC,uBAGJ,SAASE,EAAkBC,GACvB,OAAOC,MAAMX,UAAUY,MAAMrC,KAAKmC,GAAoBG,OAAOC,IAASA,EAAKC,UAAYD,EAAKE,SAASC,OAAS,EAGlH,SAASC,EAAWC,GAChBA,EAASC,QAAQN,GAAQA,EAAKO,aAAa,WAAY,SAG3D,SAASC,EAAUH,GACfA,EAASC,QAAQN,GAAQA,EAAKS,gBAAgB,aAGlD,SAASC,IACLf,EAAkBH,GAA+BY,EAAWV,GAAsBc,EAAUd,GAC5FC,EAAkBD,GAAsBU,EAAWZ,GAA+BgB,EAAUhB,GAE3B,MAA9DmB,8BAA8BC,6BAC7BR,EAAWV,GAInBgB,IAEAlB,EAA4Bc,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB,IAC5EhB,EAAmBY,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB","file":"js/gateway-settings.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",";document.addEventListener(\n    'DOMContentLoaded',\n    () => {\n        const payLaterMessagingCheckboxes = document.querySelectorAll(\n            \"#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled\"\n        )\n\n        const vaultingCheckboxes = document.querySelectorAll(\n            \"#ppcp-vault_enabled\"\n        )\n\n        function atLeastOneChecked(checkboxesNodeList) {\n            return Array.prototype.slice.call(checkboxesNodeList).filter(node => !node.disabled && node.checked).length > 0\n        }\n\n        function disableAll(nodeList){\n            nodeList.forEach(node => node.setAttribute('disabled', 'true'))\n        }\n\n        function enableAll(nodeList){\n            nodeList.forEach(node => node.removeAttribute('disabled'))\n        }\n\n        function updateCheckboxes() {\n            atLeastOneChecked(payLaterMessagingCheckboxes) ? disableAll(vaultingCheckboxes) : enableAll(vaultingCheckboxes)\n            atLeastOneChecked(vaultingCheckboxes) ? disableAll(payLaterMessagingCheckboxes) : enableAll(payLaterMessagingCheckboxes)\n\n            if(PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {\n                disableAll(vaultingCheckboxes)\n            }\n        }\n\n        updateCheckboxes()\n\n        payLaterMessagingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes))\n        vaultingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes));\n    }\n);\n"],"sourceRoot":""}
     1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./resources/js/gateway-settings.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","document","addEventListener","payLaterMessagingCheckboxes","querySelectorAll","vaultingCheckboxes","atLeastOneChecked","checkboxesNodeList","Array","slice","filter","node","disabled","checked","length","disableAll","nodeList","forEach","setAttribute","enableAll","removeAttribute","updateCheckboxes","PayPalCommerceGatewaySettings","vaulting_features_available"],"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,gBClFpDC,SAASC,iBACN,mBACA,KACI,MAAMC,EAA8BF,SAASG,iBACzC,oFAGEC,EAAqBJ,SAASG,iBAChC,uBAGJ,SAASE,EAAkBC,GACvB,OAAOC,MAAMX,UAAUY,MAAMrC,KAAKmC,GAAoBG,OAAOC,IAASA,EAAKC,UAAYD,EAAKE,SAASC,OAAS,EAGlH,SAASC,EAAWC,GAChBA,EAASC,QAAQN,GAAQA,EAAKO,aAAa,WAAY,SAG3D,SAASC,EAAUH,GACfA,EAASC,QAAQN,GAAQA,EAAKS,gBAAgB,aAGlD,SAASC,IACLf,EAAkBH,GAA+BY,EAAWV,GAAsBc,EAAUd,GAC5FC,EAAkBD,GAAsBU,EAAWZ,GAA+BgB,EAAUhB,GAEhD,oBAAlCmB,+BAA+G,MAA9DA,8BAA8BC,6BACrFR,EAAWV,GAInBgB,IAEAlB,EAA4Bc,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB,IAC5EhB,EAAmBY,QAAQN,GAAQA,EAAKT,iBAAiB,SAAUmB","file":"js/gateway-settings.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",";document.addEventListener(\n    'DOMContentLoaded',\n    () => {\n        const payLaterMessagingCheckboxes = document.querySelectorAll(\n            \"#ppcp-message_enabled, #ppcp-message_cart_enabled, #ppcp-message_product_enabled\"\n        )\n\n        const vaultingCheckboxes = document.querySelectorAll(\n            \"#ppcp-vault_enabled\"\n        )\n\n        function atLeastOneChecked(checkboxesNodeList) {\n            return Array.prototype.slice.call(checkboxesNodeList).filter(node => !node.disabled && node.checked).length > 0\n        }\n\n        function disableAll(nodeList){\n            nodeList.forEach(node => node.setAttribute('disabled', 'true'))\n        }\n\n        function enableAll(nodeList){\n            nodeList.forEach(node => node.removeAttribute('disabled'))\n        }\n\n        function updateCheckboxes() {\n            atLeastOneChecked(payLaterMessagingCheckboxes) ? disableAll(vaultingCheckboxes) : enableAll(vaultingCheckboxes)\n            atLeastOneChecked(vaultingCheckboxes) ? disableAll(payLaterMessagingCheckboxes) : enableAll(payLaterMessagingCheckboxes)\n\n            if(typeof PayPalCommerceGatewaySettings === 'undefined' || PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {\n                disableAll(vaultingCheckboxes)\n            }\n        }\n\n        updateCheckboxes()\n\n        payLaterMessagingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes))\n        vaultingCheckboxes.forEach(node => node.addEventListener('change', updateCheckboxes));\n    }\n);\n"],"sourceRoot":""}
  • woocommerce-paypal-payments/trunk/modules/ppcp-wc-gateway/resources/js/gateway-settings.js

    r2544454 r2585614  
    2626            atLeastOneChecked(vaultingCheckboxes) ? disableAll(payLaterMessagingCheckboxes) : enableAll(payLaterMessagingCheckboxes)
    2727
    28             if(PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {
     28            if(typeof PayPalCommerceGatewaySettings === 'undefined' || PayPalCommerceGatewaySettings.vaulting_features_available !== '1' ) {
    2929                disableAll(vaultingCheckboxes)
    3030            }
  • woocommerce-paypal-payments/trunk/modules/ppcp-wc-gateway/src/Gateway/class-processpaymenttrait.php

    r2544454 r2585614  
    142142        } catch ( PayPalApiException $error ) {
    143143            if ( $error->has_detail( 'INSTRUMENT_DECLINED' ) ) {
     144                $wc_order->update_status(
     145                    'failed',
     146                    __( 'Instrument declined.', 'woocommerce-paypal-payments' )
     147                );
     148
    144149                $this->session_handler->increment_insufficient_funding_tries();
    145150                $host = $this->config->has( 'sandbox_on' ) && $this->config->get( 'sandbox_on' ) ?
     
    162167            $this->session_handler->destroy_session_data();
    163168        } catch ( RuntimeException $error ) {
     169            $wc_order->update_status(
     170                'failed',
     171                __( 'Could not process order.', 'woocommerce-paypal-payments' )
     172            );
    164173            $this->session_handler->destroy_session_data();
    165174            wc_add_notice( $error->getMessage(), 'error' );
     
    170179            $this->order_processor->last_error(),
    171180            'error'
     181        );
     182        $wc_order->update_status(
     183            'failed',
     184            __( 'Could not process order.', 'woocommerce-paypal-payments' )
    172185        );
    173186
  • woocommerce-paypal-payments/trunk/modules/ppcp-wc-gateway/src/Settings/class-settingslistener.php

    r2573328 r2585614  
    157157            }
    158158        } catch ( RuntimeException $exception ) {
     159            $this->settings->set( 'vault_enabled', false );
     160            $this->settings->persist();
     161
    159162            add_action(
    160163                'admin_notices',
    161164                function () use ( $exception ) {
    162165                    printf(
    163                         '<div class="notice notice-error"><p>%s</p></div>',
    164                         esc_attr( $exception->getMessage() )
     166                        '<div class="notice notice-error"><p>%1$s</p><p>%2$s</p></div>',
     167                        esc_html__( 'Authentication with PayPal failed: ', 'woocommerce-paypal-payments' ) . esc_attr( $exception->getMessage() ),
     168                        wp_kses_post( __( 'Please verify your API Credentials and try again to connect your PayPal business account. Visit the <a href="https://docs.woocommerce.com/document/woocommerce-paypal-payments/" target="_blank">plugin documentation</a> for more information about the setup.', 'woocommerce-paypal-payments' ) )
    165169                    );
    166170                }
  • woocommerce-paypal-payments/trunk/modules/ppcp-wc-gateway/src/Settings/class-settingsrenderer.php

    r2573328 r2585614  
    552552    }
    553553}
     554
  • woocommerce-paypal-payments/trunk/readme.txt

    r2580477 r2585614  
    55Tested up to: 5.8
    66Requires PHP: 7.1
    7 Stable tag: 1.5.0
     7Stable tag: 1.5.1
    88License: GPLv2
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    8181
    8282== Changelog ==
     83
     84= 1.5.1 =
     85* Fix - Set 3DS contingencies to "SCA_WHEN_REQUIRED". #178
     86* Fix - Plugin conflict blocking line item details. #221
     87* Fix - WooCommerce orders left in "Pending Payment" after a decline. #222
     88* Fix - Do not send decimals when currency does not support them. #202
     89* Fix - Gateway can be activated without a connected PayPal account. #205
    8390
    8491= 1.5.0 =
  • woocommerce-paypal-payments/trunk/vendor/autoload.php

    r2580477 r2585614  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c::getLoader();
     7return ComposerAutoloaderInitfd327382102db5a22440815e53142caa::getLoader();
  • woocommerce-paypal-payments/trunk/vendor/composer/autoload_classmap.php

    r2580477 r2585614  
    121121    'WooCommerce\\PayPalCommerce\\Session\\SessionHandler' => $baseDir . '/modules/ppcp-session/src/class-sessionhandler.php',
    122122    'WooCommerce\\PayPalCommerce\\Session\\SessionModule' => $baseDir . '/modules/ppcp-session/src/class-sessionmodule.php',
     123    'WooCommerce\\PayPalCommerce\\StatusReport\\Renderer' => $baseDir . '/modules/ppcp-status-report/src/class-renderer.php',
     124    'WooCommerce\\PayPalCommerce\\StatusReport\\StatusReportModule' => $baseDir . '/modules/ppcp-status-report/src/class-statusreportmodule.php',
    123125    'WooCommerce\\PayPalCommerce\\Subscription\\Helper\\SubscriptionHelper' => $baseDir . '/modules/ppcp-subscription/src/Helper/class-subscriptionhelper.php',
    124126    'WooCommerce\\PayPalCommerce\\Subscription\\RenewalHandler' => $baseDir . '/modules/ppcp-subscription/src/class-renewalhandler.php',
  • woocommerce-paypal-payments/trunk/vendor/composer/autoload_real.php

    r2580477 r2585614  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c
     5class ComposerAutoloaderInitfd327382102db5a22440815e53142caa
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInitfd327382102db5a22440815e53142caa', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit66bca0ec46d311fe385c37586d44ac5c', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInitfd327382102db5a22440815e53142caa', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInitfd327382102db5a22440815e53142caa::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInitfd327382102db5a22440815e53142caa::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequire66bca0ec46d311fe385c37586d44ac5c($fileIdentifier, $file);
     61            composerRequirefd327382102db5a22440815e53142caa($fileIdentifier, $file);
    6262        }
    6363
     
    6666}
    6767
    68 function composerRequire66bca0ec46d311fe385c37586d44ac5c($fileIdentifier, $file)
     68function composerRequirefd327382102db5a22440815e53142caa($fileIdentifier, $file)
    6969{
    7070    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • woocommerce-paypal-payments/trunk/vendor/composer/autoload_static.php

    r2580477 r2585614  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c
     7class ComposerStaticInitfd327382102db5a22440815e53142caa
    88{
    99    public static $files = array (
     
    196196        'WooCommerce\\PayPalCommerce\\Session\\SessionHandler' => __DIR__ . '/../..' . '/modules/ppcp-session/src/class-sessionhandler.php',
    197197        'WooCommerce\\PayPalCommerce\\Session\\SessionModule' => __DIR__ . '/../..' . '/modules/ppcp-session/src/class-sessionmodule.php',
     198        'WooCommerce\\PayPalCommerce\\StatusReport\\Renderer' => __DIR__ . '/../..' . '/modules/ppcp-status-report/src/class-renderer.php',
     199        'WooCommerce\\PayPalCommerce\\StatusReport\\StatusReportModule' => __DIR__ . '/../..' . '/modules/ppcp-status-report/src/class-statusreportmodule.php',
    198200        'WooCommerce\\PayPalCommerce\\Subscription\\Helper\\SubscriptionHelper' => __DIR__ . '/../..' . '/modules/ppcp-subscription/src/Helper/class-subscriptionhelper.php',
    199201        'WooCommerce\\PayPalCommerce\\Subscription\\RenewalHandler' => __DIR__ . '/../..' . '/modules/ppcp-subscription/src/class-renewalhandler.php',
     
    243245    {
    244246        return \Closure::bind(function () use ($loader) {
    245             $loader->prefixLengthsPsr4 = ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$prefixLengthsPsr4;
    246             $loader->prefixDirsPsr4 = ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$prefixDirsPsr4;
    247             $loader->classMap = ComposerStaticInit66bca0ec46d311fe385c37586d44ac5c::$classMap;
     247            $loader->prefixLengthsPsr4 = ComposerStaticInitfd327382102db5a22440815e53142caa::$prefixLengthsPsr4;
     248            $loader->prefixDirsPsr4 = ComposerStaticInitfd327382102db5a22440815e53142caa::$prefixDirsPsr4;
     249            $loader->classMap = ComposerStaticInitfd327382102db5a22440815e53142caa::$classMap;
    248250
    249251        }, null, ClassLoader::class);
  • woocommerce-paypal-payments/trunk/vendor/composer/installed.php

    r2580477 r2585614  
    66        'install_path' => __DIR__ . '/../../',
    77        'aliases' => array(),
    8         'reference' => '095acaee4e556f5342c4508b320a28ef9dee8cc2',
     8        'reference' => '3370ea0985f09bf6bbbf1cf9d0d6115e996e3799',
    99        'name' => 'woocommerce/woocommerce-paypal-payments',
    1010        'dev' => false,
     
    125125            'install_path' => __DIR__ . '/../../',
    126126            'aliases' => array(),
    127             'reference' => '095acaee4e556f5342c4508b320a28ef9dee8cc2',
     127            'reference' => '3370ea0985f09bf6bbbf1cf9d0d6115e996e3799',
    128128            'dev_requirement' => false,
    129129        ),
  • woocommerce-paypal-payments/trunk/woocommerce-paypal-payments.php

    r2580477 r2585614  
    44 * Plugin URI:  https://woocommerce.com/products/woocommerce-paypal-payments/
    55 * Description: PayPal's latest complete payments processing solution. Accept PayPal, Pay Later, credit/debit cards, alternative digital wallets local payment types and bank accounts. Turn on only PayPal options or process a full suite of payment methods. Enable global transaction with extensive currency and country coverage.
    6  * Version:     1.5.0
     6 * Version:     1.5.1
    77 * Author:      WooCommerce
    88 * Author URI:  https://woocommerce.com/
     
    1010 * Requires PHP: 7.1
    1111 * WC requires at least: 3.9
    12  * WC tested up to: 5.5
     12 * WC tested up to: 5.6
    1313 * Text Domain: woocommerce-paypal-payments
    1414 *
     
    9696            }
    9797            $initialized = true;
    98 
     98            do_action( 'woocommerce_paypal_payments_built_container', $proxy );
    9999        }
    100100    }
Note: See TracChangeset for help on using the changeset viewer.