From dcd69809b31ba3e96a7d602d55ad356ce99369ac Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:53:44 +0000 Subject: [PATCH 1/4] Version 6.1.0 --- composer.json | 6 +- package-lock.json | 7 +- package.json | 2 +- tests/TestCase.php | 2 +- .../gateway-test-plugin/includes/API.php | 2 +- .../gateway-test-plugin/includes/Gateway.php | 2 +- .../gateway-test-plugin/includes/Plugin.php | 2 +- .../plugins/test-plugin/includes/API.php | 2 +- .../plugins/test-plugin/includes/Gateway.php | 2 +- .../plugins/test-plugin/includes/Plugin.php | 2 +- .../integration/API/CacheableAPIBaseTest.php | 10 +-- tests/integration/DependenciesTest.php | 6 +- tests/integration/HelperTest.php | 4 +- tests/integration/PluginTest.php | 6 +- .../REST_API/Controllers/SettingsTest.php | 10 +-- tests/integration/REST_API/RESTAPITest.php | 8 +-- .../SV_WC_Payment_Gateway_Helper_Test.php | 4 +- .../Settings_API/AbstractSettingsTest.php | 12 ++-- .../integration/Settings_API/SettingTest.php | 4 +- .../payment-gateway/GatewayPluginTest.php | 2 +- .../payment-gateway/MyPaymentMethodsTest.php | 8 +-- .../payment-gateway/PaymentFormTest.php | 6 +- ..._WC_Payment_Gateway_Payment_Token_Test.php | 4 +- ...nt_Gateway_Payment_Tokens_Handler_Test.php | 4 +- .../apple-pay/ApplePayFrontendTest.php | 10 +-- tests/unit/API/CacheableRequestTraitTest.php | 20 +++--- tests/unit/AutoloadingTest.php | 68 +++++++++---------- tests/unit/HelperTest.php | 18 ++--- tests/unit/Helpers/ArrayHelperTest.php | 8 +-- tests/unit/Helpers/CountryHelperTest.php | 8 +-- tests/unit/Helpers/NumberHelperTest.php | 8 +-- tests/unit/Helpers/PageHelperTest.php | 8 +-- .../Google_Pay/AdminTest.php | 8 +-- .../Google_Pay/FrontendTest.php | 14 ++-- .../Google_Pay/GooglePayTest.php | 8 +-- .../PaymentFormContextCheckerTest.php | 20 +++--- tests/unit/PluginTest.php | 16 ++--- tests/unit/Settings_API/ControlTest.php | 28 ++++---- tests/unit/Settings_API/SettingTest.php | 26 +++---- .../Traits/CanConvertToArrayTraitTest.php | 16 ++--- .../Traits/CanGetNewInstanceTraitTest.php | 10 +-- tests/unit/Traits/IsSingletonTraitTest.php | 12 ++-- ...ommerce-framework-plugin-loader-sample.php | 2 +- woocommerce/Addresses/Address.php | 4 +- woocommerce/Addresses/Customer_Address.php | 4 +- woocommerce/Blocks/Block_Integration.php | 10 +-- woocommerce/Blocks/Blocks_Handler.php | 10 +-- .../Blocks/Traits/Block_Integration_Trait.php | 16 ++--- .../Traits/HasEmailPreviewValuesTrait.php | 2 +- woocommerce/Enums/PaymentFormContext.php | 4 +- woocommerce/Enums/Traits/EnumTrait.php | 2 +- woocommerce/Handlers/Country_Helper.php | 4 +- woocommerce/Handlers/Script_Handler.php | 12 ++-- woocommerce/Helpers/ArrayHelper.php | 2 +- woocommerce/Helpers/NumberHelper.php | 2 +- woocommerce/Helpers/OrderHelper.php | 4 +- woocommerce/Helpers/PageHelper.php | 2 +- woocommerce/Helpers/ScriptHelper.php | 2 +- woocommerce/Plugin/Lifecycle.php | 10 +-- .../Settings_API/Abstract_Settings.php | 6 +- woocommerce/Settings_API/Control.php | 6 +- woocommerce/Settings_API/Setting.php | 6 +- woocommerce/Traits/CanConvertToArrayTrait.php | 4 +- woocommerce/Traits/CanGetNewInstanceTrait.php | 4 +- woocommerce/Traits/IsSingletonTrait.php | 4 +- woocommerce/admin/Notes_Helper.php | 4 +- ...stract-sv-wc-plugin-admin-setup-wizard.php | 6 +- .../api/Abstract_Cacheable_API_Base.php | 8 +-- .../api/Traits/Cacheable_Request_Trait.php | 4 +- .../api/abstract-sv-wc-api-json-request.php | 4 +- .../api/abstract-sv-wc-api-json-response.php | 4 +- .../api/abstract-sv-wc-api-xml-request.php | 4 +- .../api/abstract-sv-wc-api-xml-response.php | 4 +- woocommerce/api/class-sv-wc-api-base.php | 4 +- woocommerce/api/class-sv-wc-api-exception.php | 4 +- .../api/interface-sv-wc-api-request.php | 4 +- .../api/interface-sv-wc-api-response.php | 4 +- woocommerce/changelog.txt | 2 + .../class-sv-wc-admin-notice-handler.php | 6 +- woocommerce/class-sv-wc-helper.php | 8 +-- woocommerce/class-sv-wc-hook-deprecator.php | 4 +- .../class-sv-wc-plugin-compatibility.php | 4 +- .../class-sv-wc-plugin-dependencies.php | 4 +- woocommerce/class-sv-wc-plugin-exception.php | 4 +- woocommerce/class-sv-wc-plugin.php | 14 ++-- .../class-sv-wp-admin-message-handler.php | 4 +- .../abstract-sv-wc-data-compatibility.php | 4 +- .../class-sv-wc-order-compatibility.php | 4 +- ...class-sv-wc-subscription-compatibility.php | 4 +- .../woocommerce-plugin-framework.pot | 8 +-- .../Blocks/Gateway_Blocks_Handler.php | 8 +-- .../Gateway_Checkout_Block_Integration.php | 16 ++--- woocommerce/payment-gateway/Dynamic_Props.php | 2 +- .../External_Checkout/Admin.php | 4 +- .../External_Checkout/External_Checkout.php | 6 +- .../External_Checkout/Frontend.php | 18 ++--- .../External_Checkout/Google_Pay/AJAX.php | 8 +-- .../External_Checkout/Google_Pay/Admin.php | 8 +-- .../External_Checkout/Google_Pay/Frontend.php | 12 ++-- .../Google_Pay/Google_Pay.php | 16 ++--- .../External_Checkout/Orders.php | 4 +- ...-payment-gateway-apple-pay-api-request.php | 4 +- ...payment-gateway-apple-pay-api-response.php | 4 +- ...ss-sv-wc-payment-gateway-apple-pay-api.php | 6 +- ...ent-gateway-apple-pay-payment-response.php | 4 +- ...-sv-wc-payment-gateway-apple-pay-admin.php | 6 +- ...s-sv-wc-payment-gateway-apple-pay-ajax.php | 4 +- ...-wc-payment-gateway-apple-pay-frontend.php | 10 +-- .../class-sv-wc-payment-gateway-apple-pay.php | 8 +-- .../Abstract_Hosted_Payment_Handler.php | 8 +-- .../Handlers/Abstract_Payment_Handler.php | 6 +- .../payment-gateway/Handlers/Capture.php | 8 +-- .../PaymentFormContextChecker.php | 6 +- ...ment-gateway-plugin-admin-setup-wizard.php | 6 +- ...lass-sv-wc-payment-gateway-admin-order.php | 4 +- ...ent-gateway-admin-payment-token-editor.php | 4 +- ...-wc-payment-gateway-admin-user-handler.php | 4 +- ...nt-gateway-api-response-message-helper.php | 4 +- ...ent-gateway-api-authorization-response.php | 4 +- ...eway-api-create-payment-token-response.php | 4 +- ...-payment-gateway-api-customer-response.php | 4 +- ...get-tokenized-payment-methods-response.php | 4 +- ...ment-notification-credit-card-response.php | 4 +- ...i-payment-notification-echeck-response.php | 4 +- ...eway-api-payment-notification-response.php | 4 +- ...ent-notification-tokenization-response.php | 4 +- ...face-sv-wc-payment-gateway-api-request.php | 4 +- ...ace-sv-wc-payment-gateway-api-response.php | 4 +- .../interface-sv-wc-payment-gateway-api.php | 4 +- .../sv-wc-payment-gateway-apple-pay.js | 2 +- .../sv-wc-payment-gateway-apple-pay.js.map | 2 +- .../sv-wc-payment-gateway-google-pay.js | 2 +- .../sv-wc-payment-gateway-google-pay.js.map | 2 +- ...v-wc-payment-gateway-my-payment-methods.js | 2 +- ...-payment-gateway-my-payment-methods.js.map | 2 +- .../sv-wc-payment-gateway-payment-form.js | 2 +- .../sv-wc-payment-gateway-payment-form.js.map | 2 +- .../sv-wc-payment-gateway-apple-pay.coffee | 4 +- .../sv-wc-payment-gateway-google-pay.js | 6 +- ...-payment-gateway-my-payment-methods.coffee | 4 +- .../sv-wc-payment-gateway-payment-form.coffee | 6 +- .../class-sv-wc-payment-gateway-direct.php | 10 +-- .../class-sv-wc-payment-gateway-helper.php | 4 +- .../class-sv-wc-payment-gateway-hosted.php | 8 +-- ...-wc-payment-gateway-my-payment-methods.php | 8 +-- ...ass-sv-wc-payment-gateway-payment-form.php | 12 ++-- .../class-sv-wc-payment-gateway-plugin.php | 8 +-- .../class-sv-wc-payment-gateway-privacy.php | 4 +- .../class-sv-wc-payment-gateway.php | 16 ++--- .../class-sv-wc-payment-gateway-exception.php | 4 +- ...ract-sv-wc-payment-gateway-integration.php | 4 +- ...payment-gateway-integration-pre-orders.php | 8 +-- ...ment-gateway-integration-subscriptions.php | 8 +-- ...ss-sv-wc-payment-gateway-payment-token.php | 4 +- ...payment-gateway-payment-tokens-handler.php | 6 +- ...-sv-wc-payment-gateway-plugin-rest-api.php | 10 +-- woocommerce/rest-api/Controllers/Settings.php | 8 +-- .../rest-api/class-sv-wc-plugin-rest-api.php | 4 +- .../utilities/class-sv-wp-async-request.php | 4 +- .../class-sv-wp-background-job-handler.php | 4 +- .../class-sv-wp-job-batch-handler.php | 6 +- 161 files changed, 543 insertions(+), 544 deletions(-) diff --git a/composer.json b/composer.json index 28ff674dc..6f8f25fd1 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "skyverge/wc-plugin-framework", "description": "The official SkyVerge WooCommerce plugin framework", - "version": "6.0.1", + "version": "6.1.0", "license": "GPL-3.0", "minimum-stability": "dev", "prefer-stable": true, @@ -35,12 +35,12 @@ "woocommerce/class-sv-wp-admin-message-handler.php" ], "psr-4": { - "SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\": "woocommerce/" + "SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\": "woocommerce/" } }, "autoload-dev": { "psr-4": { - "SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Tests\\": "tests/" + "SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Tests\\": "tests/" } }, "config": { diff --git a/package-lock.json b/package-lock.json index e6f423a06..da02389c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wc-plugin-framework", - "version": "6.0.1", + "version": "6.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wc-plugin-framework", - "version": "6.0.1", + "version": "6.1.0", "license": "GPL-3.0", "devDependencies": { "@parcel/transformer-coffeescript": "^2.13.3", @@ -511,7 +511,6 @@ "integrity": "sha512-SRZFtqGiaKHlZ2YAvf+NHvBFWS3GnkBvJMfOJM7kxJRK3M1bhbwJa/GgSdzqro5UVf9Bfj6E+pkdrRQIOZ7jMQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", "@parcel/cache": "2.13.3", @@ -2672,7 +2671,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -3466,7 +3464,6 @@ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, - "peer": true, "dependencies": { "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", diff --git a/package.json b/package.json index 04799f729..2fe091b93 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wc-plugin-framework", - "version": "6.0.1", + "version": "6.1.0", "title": "WooCommerce Plugin Framework", "author": "SkyVerge Team", "homepage": "https://github.com/skyverge/wc-plugin-framework#readme", diff --git a/tests/TestCase.php b/tests/TestCase.php index 9c899148d..658cb7676 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -1,6 +1,6 @@ assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Plugin_Dependencies', $this->get_plugin()->get_dependency_handler() ); + $this->assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Plugin_Dependencies', $this->get_plugin()->get_dependency_handler() ); } @@ -161,7 +161,7 @@ public function test_get_dependency_handler() { */ public function test_get_lifecycle_handler() { - $this->assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v6_0_1\Plugin\Lifecycle', $this->get_plugin()->get_lifecycle_handler() ); + $this->assertInstanceOf( '\SkyVerge\WooCommerce\PluginFramework\v6_1_0\Plugin\Lifecycle', $this->get_plugin()->get_lifecycle_handler() ); } diff --git a/tests/integration/REST_API/Controllers/SettingsTest.php b/tests/integration/REST_API/Controllers/SettingsTest.php index 2fad6230c..b5c824d23 100644 --- a/tests/integration/REST_API/Controllers/SettingsTest.php +++ b/tests/integration/REST_API/Controllers/SettingsTest.php @@ -1,14 +1,14 @@ render_js(); $this->assertStringContainsString( 'function load_gateway_test_plugin_payment_methods_handler', $wc_queued_js ); - $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_payment_methods_handler_v6_0_1_loaded\', load_gateway_test_plugin_payment_methods_handler );', $wc_queued_js ); + $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_payment_methods_handler_v6_1_0_loaded\', load_gateway_test_plugin_payment_methods_handler );', $wc_queued_js ); } diff --git a/tests/integration/payment-gateway/PaymentFormTest.php b/tests/integration/payment-gateway/PaymentFormTest.php index bbf4df79a..a11afdd6f 100644 --- a/tests/integration/payment-gateway/PaymentFormTest.php +++ b/tests/integration/payment-gateway/PaymentFormTest.php @@ -1,11 +1,11 @@ get_plugin()->get_gateway()->get_payment_form_instance()->render_js(); $this->assertStringContainsString( 'function load_test_gateway_payment_form_handler', $wc_queued_js ); - $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_payment_form_handler_v6_0_1_loaded\', load_test_gateway_payment_form_handler );', $wc_queued_js ); + $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_payment_form_handler_v6_1_0_loaded\', load_test_gateway_payment_form_handler );', $wc_queued_js ); } diff --git a/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Token_Test.php b/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Token_Test.php index bf9d4e0bb..c244d4a72 100644 --- a/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Token_Test.php +++ b/tests/integration/payment-gateway/SV_WC_Payment_Gateway_Payment_Token_Test.php @@ -1,11 +1,11 @@ invokeArgs( $frontend_instance, [[]] ); $this->assertStringContainsString( 'function load_test_gateway_apple_pay_handler', $wc_queued_js ); - $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_apple_pay_handler_v6_0_1_loaded\', load_test_gateway_apple_pay_handler );', $wc_queued_js ); + $this->assertStringContainsString( 'window.jQuery( document.body ).on( \'sv_wc_apple_pay_handler_v6_1_0_loaded\', load_test_gateway_apple_pay_handler );', $wc_queued_js ); } diff --git a/tests/unit/API/CacheableRequestTraitTest.php b/tests/unit/API/CacheableRequestTraitTest.php index f099b541d..6879dc9a1 100644 --- a/tests/unit/API/CacheableRequestTraitTest.php +++ b/tests/unit/API/CacheableRequestTraitTest.php @@ -1,9 +1,9 @@ \SkyVerge\WooCommerce\PluginFramework\v6_0_1\Country_Helper::class, - PaymentFormContextChecker::class => \SkyVerge\WooCommerce\PluginFramework\v6_0_1\PaymentFormContextChecker::class, + Country_Helper::class => \SkyVerge\WooCommerce\PluginFramework\v6_1_0\Country_Helper::class, + PaymentFormContextChecker::class => \SkyVerge\WooCommerce\PluginFramework\v6_1_0\PaymentFormContextChecker::class, ]; foreach ($aliases as $alias) { diff --git a/tests/unit/HelperTest.php b/tests/unit/HelperTest.php index 74bd0ec65..961986bfc 100644 --- a/tests/unit/HelperTest.php +++ b/tests/unit/HelperTest.php @@ -1,20 +1,20 @@ js_handler_base_class_name ); + return sprintf( '%s_v6_1_0', $this->js_handler_base_class_name ); } diff --git a/woocommerce/Helpers/ArrayHelper.php b/woocommerce/Helpers/ArrayHelper.php index 2c5520edd..0c1fdb92e 100644 --- a/woocommerce/Helpers/ArrayHelper.php +++ b/woocommerce/Helpers/ArrayHelper.php @@ -22,7 +22,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers; use ArrayAccess; diff --git a/woocommerce/Helpers/NumberHelper.php b/woocommerce/Helpers/NumberHelper.php index 593a913cc..fe54d90f7 100644 --- a/woocommerce/Helpers/NumberHelper.php +++ b/woocommerce/Helpers/NumberHelper.php @@ -22,7 +22,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers; class NumberHelper { diff --git a/woocommerce/Helpers/OrderHelper.php b/woocommerce/Helpers/OrderHelper.php index bf9a2fb62..45b7081e5 100644 --- a/woocommerce/Helpers/OrderHelper.php +++ b/woocommerce/Helpers/OrderHelper.php @@ -10,9 +10,9 @@ * @since x.x.x */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Dynamic_Props; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Dynamic_Props; /** * OrderHelper class diff --git a/woocommerce/Helpers/PageHelper.php b/woocommerce/Helpers/PageHelper.php index fc8536b0c..a472960ca 100644 --- a/woocommerce/Helpers/PageHelper.php +++ b/woocommerce/Helpers/PageHelper.php @@ -22,7 +22,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers; class PageHelper { diff --git a/woocommerce/Helpers/ScriptHelper.php b/woocommerce/Helpers/ScriptHelper.php index a1ed95bd6..0f1abe7c3 100644 --- a/woocommerce/Helpers/ScriptHelper.php +++ b/woocommerce/Helpers/ScriptHelper.php @@ -22,7 +22,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers; class ScriptHelper { diff --git a/woocommerce/Plugin/Lifecycle.php b/woocommerce/Plugin/Lifecycle.php index d7b40efdf..ed695d90d 100644 --- a/woocommerce/Plugin/Lifecycle.php +++ b/woocommerce/Plugin/Lifecycle.php @@ -22,12 +22,12 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Plugin; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Plugin; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Admin\Notes_Helper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Plugin; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Plugin; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Plugin_Compatibility; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Admin\Notes_Helper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Plugin; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Plugin; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Plugin_Compatibility; defined( 'ABSPATH' ) or exit; diff --git a/woocommerce/Settings_API/Abstract_Settings.php b/woocommerce/Settings_API/Abstract_Settings.php index 4ddb56517..f90055c87 100644 --- a/woocommerce/Settings_API/Abstract_Settings.php +++ b/woocommerce/Settings_API/Abstract_Settings.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Settings_API; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Settings_API; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as Framework; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as Framework; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Settings_API\\Abstract_Settings' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Settings_API\\Abstract_Settings' ) ) : /** diff --git a/woocommerce/Settings_API/Control.php b/woocommerce/Settings_API/Control.php index 5c9620019..ce0a93ca3 100644 --- a/woocommerce/Settings_API/Control.php +++ b/woocommerce/Settings_API/Control.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Settings_API; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Settings_API; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as Framework; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as Framework; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Settings_API\\Control' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Settings_API\\Control' ) ) : /** diff --git a/woocommerce/Settings_API/Setting.php b/woocommerce/Settings_API/Setting.php index 3f9e1e7da..50c0945bd 100644 --- a/woocommerce/Settings_API/Setting.php +++ b/woocommerce/Settings_API/Setting.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Settings_API; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Settings_API; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as Framework; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as Framework; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Settings_API\\Setting' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Settings_API\\Setting' ) ) : /** diff --git a/woocommerce/Traits/CanConvertToArrayTrait.php b/woocommerce/Traits/CanConvertToArrayTrait.php index 116411527..e3284b504 100644 --- a/woocommerce/Traits/CanConvertToArrayTrait.php +++ b/woocommerce/Traits/CanConvertToArrayTrait.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Traits; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Traits; use ReflectionClass; use ReflectionProperty; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\ArrayHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\ArrayHelper; /** * A trait that allows a given class/object to convert its state to an array. diff --git a/woocommerce/Traits/CanGetNewInstanceTrait.php b/woocommerce/Traits/CanGetNewInstanceTrait.php index 7a73ec592..a7de0ed79 100644 --- a/woocommerce/Traits/CanGetNewInstanceTrait.php +++ b/woocommerce/Traits/CanGetNewInstanceTrait.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Traits; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Traits; defined('ABSPATH') or exit; -if (trait_exists('\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Traits\\CanGetNewInstanceTrait')) { +if (trait_exists('\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Traits\\CanGetNewInstanceTrait')) { return; } diff --git a/woocommerce/Traits/IsSingletonTrait.php b/woocommerce/Traits/IsSingletonTrait.php index 508150551..44233f45f 100644 --- a/woocommerce/Traits/IsSingletonTrait.php +++ b/woocommerce/Traits/IsSingletonTrait.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Traits; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Traits; defined('ABSPATH') or exit; -if (trait_exists('\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Traits\\IsSingletonTrait')) { +if (trait_exists('\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Traits\\IsSingletonTrait')) { return; } diff --git a/woocommerce/admin/Notes_Helper.php b/woocommerce/admin/Notes_Helper.php index 8f071ce7d..f42ed4ac2 100644 --- a/woocommerce/admin/Notes_Helper.php +++ b/woocommerce/admin/Notes_Helper.php @@ -21,13 +21,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Admin; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Admin; use Automattic\WooCommerce\Admin\Notes as WooCommerce_Admin_Notes; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Admin\\Notes_Helper' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Admin\\Notes_Helper' ) ) : /** diff --git a/woocommerce/admin/abstract-sv-wc-plugin-admin-setup-wizard.php b/woocommerce/admin/abstract-sv-wc-plugin-admin-setup-wizard.php index 479c357d5..ecc2e816b 100644 --- a/woocommerce/admin/abstract-sv-wc-plugin-admin-setup-wizard.php +++ b/woocommerce/admin/abstract-sv-wc-plugin-admin-setup-wizard.php @@ -21,13 +21,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Admin; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Admin; defined( 'ABSPATH' ) or exit; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as Framework; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as Framework; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Admin\\Setup_Wizard' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Admin\\Setup_Wizard' ) ) : /** diff --git a/woocommerce/api/Abstract_Cacheable_API_Base.php b/woocommerce/api/Abstract_Cacheable_API_Base.php index a1ee78ab1..46c44303a 100644 --- a/woocommerce/api/Abstract_Cacheable_API_Base.php +++ b/woocommerce/api/Abstract_Cacheable_API_Base.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\API; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\API; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_API_Base; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\API\Traits\Cacheable_Request_Trait; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_API_Base; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\API\Traits\Cacheable_Request_Trait; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\API\\Abstract_Cacheable_API_Base' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\API\\Abstract_Cacheable_API_Base' ) ) : /** diff --git a/woocommerce/api/Traits/Cacheable_Request_Trait.php b/woocommerce/api/Traits/Cacheable_Request_Trait.php index 696802487..f8197dea0 100644 --- a/woocommerce/api/Traits/Cacheable_Request_Trait.php +++ b/woocommerce/api/Traits/Cacheable_Request_Trait.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\API\Traits; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\API\Traits; defined( 'ABSPATH' ) or exit; -if ( ! trait_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\API\\Traits\\Cacheable_Request_Trait' ) ) : +if ( ! trait_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\API\\Traits\\Cacheable_Request_Trait' ) ) : /** diff --git a/woocommerce/api/abstract-sv-wc-api-json-request.php b/woocommerce/api/abstract-sv-wc-api-json-request.php index 7faee9554..91ae0296d 100644 --- a/woocommerce/api/abstract-sv-wc-api-json-request.php +++ b/woocommerce/api/abstract-sv-wc-api-json-request.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_JSON_Request' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_JSON_Request' ) ) : /** diff --git a/woocommerce/api/abstract-sv-wc-api-json-response.php b/woocommerce/api/abstract-sv-wc-api-json-response.php index 9b43d19fb..1c14ae99f 100644 --- a/woocommerce/api/abstract-sv-wc-api-json-response.php +++ b/woocommerce/api/abstract-sv-wc-api-json-response.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_JSON_Response' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_JSON_Response' ) ) : /** diff --git a/woocommerce/api/abstract-sv-wc-api-xml-request.php b/woocommerce/api/abstract-sv-wc-api-xml-request.php index e6bb66881..dba168ac3 100644 --- a/woocommerce/api/abstract-sv-wc-api-xml-request.php +++ b/woocommerce/api/abstract-sv-wc-api-xml-request.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_XML_Request' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_XML_Request' ) ) : /** diff --git a/woocommerce/api/abstract-sv-wc-api-xml-response.php b/woocommerce/api/abstract-sv-wc-api-xml-response.php index e1b4bd438..d33cae916 100644 --- a/woocommerce/api/abstract-sv-wc-api-xml-response.php +++ b/woocommerce/api/abstract-sv-wc-api-xml-response.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_XML_Response' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_XML_Response' ) ) : /** diff --git a/woocommerce/api/class-sv-wc-api-base.php b/woocommerce/api/class-sv-wc-api-base.php index 5b85a3d5b..52202c748 100644 --- a/woocommerce/api/class-sv-wc-api-base.php +++ b/woocommerce/api/class-sv-wc-api-base.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_Base' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_Base' ) ) : /** diff --git a/woocommerce/api/class-sv-wc-api-exception.php b/woocommerce/api/class-sv-wc-api-exception.php index ffa9fc39f..4a0935651 100644 --- a/woocommerce/api/class-sv-wc-api-exception.php +++ b/woocommerce/api/class-sv-wc-api-exception.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_Exception' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_Exception' ) ) : /** diff --git a/woocommerce/api/interface-sv-wc-api-request.php b/woocommerce/api/interface-sv-wc-api-request.php index 24c342c04..cebe82338 100644 --- a/woocommerce/api/interface-sv-wc-api-request.php +++ b/woocommerce/api/interface-sv-wc-api-request.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! interface_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_Request' ) ) : +if ( ! interface_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_Request' ) ) : /** diff --git a/woocommerce/api/interface-sv-wc-api-response.php b/woocommerce/api/interface-sv-wc-api-response.php index a6f553e35..75c4b2b54 100644 --- a/woocommerce/api/interface-sv-wc-api-response.php +++ b/woocommerce/api/interface-sv-wc-api-response.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! interface_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_API_Response' ) ) : +if ( ! interface_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_API_Response' ) ) : /** diff --git a/woocommerce/changelog.txt b/woocommerce/changelog.txt index 1ea05f69a..e85ceb912 100644 --- a/woocommerce/changelog.txt +++ b/woocommerce/changelog.txt @@ -1,5 +1,7 @@ *** SkyVerge WooCommerce Plugin Framework Changelog *** +2026.nn.nn - version 6.1.0 + 2025.nn.nn - version 6.0.1 * New: Introduced a new ScriptHelper class with addInlineScript() method * Tweak: Update usage of deprecated wc_enqueue_js() in favour of wp_add_inline_script() diff --git a/woocommerce/class-sv-wc-admin-notice-handler.php b/woocommerce/class-sv-wc-admin-notice-handler.php index 7332cb7df..5c532c598 100644 --- a/woocommerce/class-sv-wc-admin-notice-handler.php +++ b/woocommerce/class-sv-wc-admin-notice-handler.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\ScriptHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\ScriptHelper; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Admin_Notice_Handler' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Admin_Notice_Handler' ) ) : /** diff --git a/woocommerce/class-sv-wc-helper.php b/woocommerce/class-sv-wc-helper.php index 73ad5f774..d23fa1104 100644 --- a/woocommerce/class-sv-wc-helper.php +++ b/woocommerce/class-sv-wc-helper.php @@ -22,16 +22,16 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\NumberHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\ScriptHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\NumberHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\ScriptHelper; use WC_Data; use WP_Post; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Helper' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Helper' ) ) : /** diff --git a/woocommerce/class-sv-wc-hook-deprecator.php b/woocommerce/class-sv-wc-hook-deprecator.php index fb523e208..1d7c9cd20 100644 --- a/woocommerce/class-sv-wc-hook-deprecator.php +++ b/woocommerce/class-sv-wc-hook-deprecator.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Hook_Deprecator' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Hook_Deprecator' ) ) : /** diff --git a/woocommerce/class-sv-wc-plugin-compatibility.php b/woocommerce/class-sv-wc-plugin-compatibility.php index 9bff6d778..8839aee12 100644 --- a/woocommerce/class-sv-wc-plugin-compatibility.php +++ b/woocommerce/class-sv-wc-plugin-compatibility.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; use Automattic\WooCommerce\Utilities\OrderUtil; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Plugin_Compatibility' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Plugin_Compatibility' ) ) : /** diff --git a/woocommerce/class-sv-wc-plugin-dependencies.php b/woocommerce/class-sv-wc-plugin-dependencies.php index d0c648b07..5e1f2bb52 100644 --- a/woocommerce/class-sv-wc-plugin-dependencies.php +++ b/woocommerce/class-sv-wc-plugin-dependencies.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Plugin_Dependencies' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Plugin_Dependencies' ) ) : /** diff --git a/woocommerce/class-sv-wc-plugin-exception.php b/woocommerce/class-sv-wc-plugin-exception.php index a748f64db..c8ace70c7 100644 --- a/woocommerce/class-sv-wc-plugin-exception.php +++ b/woocommerce/class-sv-wc-plugin-exception.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Plugin_Exception' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Plugin_Exception' ) ) : /** diff --git a/woocommerce/class-sv-wc-plugin.php b/woocommerce/class-sv-wc-plugin.php index 0b0400ded..74247ef31 100644 --- a/woocommerce/class-sv-wc-plugin.php +++ b/woocommerce/class-sv-wc-plugin.php @@ -22,18 +22,18 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; use Automattic\WooCommerce\Utilities\FeaturesUtil; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Handlers\Country_Helper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\PaymentFormContextChecker; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Handlers\Country_Helper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\PaymentFormContextChecker; use stdClass; use Throwable; use WC_Logger_Interface; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Plugin' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Plugin' ) ) : /** @@ -51,7 +51,7 @@ abstract class SV_WC_Plugin { /** Plugin Framework Version */ - public const VERSION = '6.0.1'; + public const VERSION = '6.1.0'; /** @var object single instance of plugin */ protected static $instance; @@ -487,7 +487,7 @@ private function includes() { */ protected function setupClassAliases() : void { - $countryHelperAlias = '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Country_Helper'; + $countryHelperAlias = '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Country_Helper'; if (! class_exists($countryHelperAlias)) { class_alias( Country_Helper::class, @@ -495,7 +495,7 @@ class_alias( ); } - $paymentFormContextCheckerAlias = '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\PaymentFormContextChecker'; + $paymentFormContextCheckerAlias = '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\PaymentFormContextChecker'; if (! class_exists($paymentFormContextCheckerAlias)) { class_alias( PaymentFormContextChecker::class, diff --git a/woocommerce/class-sv-wp-admin-message-handler.php b/woocommerce/class-sv-wp-admin-message-handler.php index 9aaf061bd..c564c1cdd 100644 --- a/woocommerce/class-sv-wp-admin-message-handler.php +++ b/woocommerce/class-sv-wp-admin-message-handler.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WP_Admin_Message_Handler' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WP_Admin_Message_Handler' ) ) : /** diff --git a/woocommerce/compatibility/abstract-sv-wc-data-compatibility.php b/woocommerce/compatibility/abstract-sv-wc-data-compatibility.php index 2b9662706..c9855f76e 100644 --- a/woocommerce/compatibility/abstract-sv-wc-data-compatibility.php +++ b/woocommerce/compatibility/abstract-sv-wc-data-compatibility.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Data_Compatibility' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Data_Compatibility' ) ) : /** diff --git a/woocommerce/compatibility/class-sv-wc-order-compatibility.php b/woocommerce/compatibility/class-sv-wc-order-compatibility.php index 59a84544f..82c9acd9b 100644 --- a/woocommerce/compatibility/class-sv-wc-order-compatibility.php +++ b/woocommerce/compatibility/class-sv-wc-order-compatibility.php @@ -22,7 +22,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; use Automattic\WooCommerce\Admin\Overrides\Order; use Automattic\WooCommerce\Internal\Admin\Orders\PageController; @@ -32,7 +32,7 @@ defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Order_Compatibility' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Order_Compatibility' ) ) : /** diff --git a/woocommerce/compatibility/class-sv-wc-subscription-compatibility.php b/woocommerce/compatibility/class-sv-wc-subscription-compatibility.php index 576918c7b..ca1dbbf38 100644 --- a/woocommerce/compatibility/class-sv-wc-subscription-compatibility.php +++ b/woocommerce/compatibility/class-sv-wc-subscription-compatibility.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Subscription_Compatibility' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Subscription_Compatibility' ) ) : /** * WooCommerce subscription compatibility class. diff --git a/woocommerce/i18n/languages/woocommerce-plugin-framework.pot b/woocommerce/i18n/languages/woocommerce-plugin-framework.pot index acb0ccb31..8081434a2 100644 --- a/woocommerce/i18n/languages/woocommerce-plugin-framework.pot +++ b/woocommerce/i18n/languages/woocommerce-plugin-framework.pot @@ -1,14 +1,14 @@ # Copyright (c) GoDaddy Operating Company, LLC. All Rights Reserved. msgid "" msgstr "" -"Project-Id-Version: SkyVerge WooCommerce Plugin Framework 1.0.0 TODO: plugin version\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-plugin-framework\n" +"Project-Id-Version: SkyVerge WooCommerce Plugin Framework\n" +"Report-Msgid-Bugs-To: https://github.com/godaddy-wordpress/wc-plugin-framework/issues\n" "Last-Translator: plugins@godaddy.com\n" -"Language-Team: LANGUAGE \n" +"Language-Team: plugins@godaddy.com\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-02-17T14:16:42+00:00\n" +"POT-Creation-Date: 2026-03-09T12:53:43+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: woocommerce-plugin-framework\n" diff --git a/woocommerce/payment-gateway/Blocks/Gateway_Blocks_Handler.php b/woocommerce/payment-gateway/Blocks/Gateway_Blocks_Handler.php index 97a71b53f..da18a224b 100644 --- a/woocommerce/payment-gateway/Blocks/Gateway_Blocks_Handler.php +++ b/woocommerce/payment-gateway/Blocks/Gateway_Blocks_Handler.php @@ -1,13 +1,13 @@ get_handler()->get_plugin()->get_payment_gateway_framework_assets_url() . '/css/frontend/sv-wc-payment-gateway-external-checkout.css', array(), $this->get_handler()->get_plugin()->get_version() ); // TODO: min + wp_enqueue_style( 'sv-wc-external-checkout-v6_1_0', $this->get_handler()->get_plugin()->get_payment_gateway_framework_assets_url() . '/css/frontend/sv-wc-payment-gateway-external-checkout.css', array(), $this->get_handler()->get_plugin()->get_version() ); // TODO: min } diff --git a/woocommerce/payment-gateway/External_Checkout/Google_Pay/AJAX.php b/woocommerce/payment-gateway/External_Checkout/Google_Pay/AJAX.php index a3362e153..258d4fcbc 100644 --- a/woocommerce/payment-gateway/External_Checkout/Google_Pay/AJAX.php +++ b/woocommerce/payment-gateway/External_Checkout/Google_Pay/AJAX.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Google_Pay; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Google_Pay; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Helper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Exception; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Helper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Exception; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\External_Checkout\\Google_Pay\\AJAX' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\External_Checkout\\Google_Pay\\AJAX' ) ) : /** diff --git a/woocommerce/payment-gateway/External_Checkout/Google_Pay/Admin.php b/woocommerce/payment-gateway/External_Checkout/Google_Pay/Admin.php index 731a65f84..070e37c3d 100755 --- a/woocommerce/payment-gateway/External_Checkout/Google_Pay/Admin.php +++ b/woocommerce/payment-gateway/External_Checkout/Google_Pay/Admin.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Google_Pay; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Google_Pay; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Helper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Helper; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\External_Checkout\\Google_Pay\\Admin' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\External_Checkout\\Google_Pay\\Admin' ) ) : /** @@ -37,7 +37,7 @@ * @since 5.10.0 */ #[\AllowDynamicProperties] -class Admin extends \SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Admin { +class Admin extends \SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Admin { /** @var Google_Pay the Google Pay handler instance */ diff --git a/woocommerce/payment-gateway/External_Checkout/Google_Pay/Frontend.php b/woocommerce/payment-gateway/External_Checkout/Google_Pay/Frontend.php index 1fc8d6ed3..542b23f14 100644 --- a/woocommerce/payment-gateway/External_Checkout/Google_Pay/Frontend.php +++ b/woocommerce/payment-gateway/External_Checkout/Google_Pay/Frontend.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Google_Pay; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Google_Pay; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Exception; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Plugin; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Exception; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Plugin; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\External_Checkout\\Google_Pay\\Frontend' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\External_Checkout\\Google_Pay\\Frontend' ) ) : /** @@ -38,7 +38,7 @@ * @since 5.10.0 */ #[\AllowDynamicProperties] -class Frontend extends \SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Frontend { +class Frontend extends \SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Frontend { /** @var string JS handler base class name, without the FW version */ @@ -102,7 +102,7 @@ public function enqueue_scripts() { $version = $gateway->get_plugin()->get_assets_version( $gateway->get_id() ); wp_enqueue_script( 'google-pay-js-library', 'https://pay.google.com/gp/p/js/pay.js', [], $version, true ); - wp_enqueue_script( 'sv-wc-google-pay-v6_0_1', $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/sv-wc-payment-gateway-google-pay.js', [ 'google-pay-js-library', 'jquery' ], $version, true ); + wp_enqueue_script( 'sv-wc-google-pay-v6_1_0', $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/sv-wc-payment-gateway-google-pay.js', [ 'google-pay-js-library', 'jquery' ], $version, true ); } diff --git a/woocommerce/payment-gateway/External_Checkout/Google_Pay/Google_Pay.php b/woocommerce/payment-gateway/External_Checkout/Google_Pay/Google_Pay.php index 7be165c27..e0bbd7053 100755 --- a/woocommerce/payment-gateway/External_Checkout/Google_Pay/Google_Pay.php +++ b/woocommerce/payment-gateway/External_Checkout/Google_Pay/Google_Pay.php @@ -22,17 +22,17 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Google_Pay; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Google_Pay; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\External_Checkout; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Orders; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Exception; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Helper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Plugin; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\External_Checkout; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Orders; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Exception; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Helper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Plugin; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\External_Checkout\\Google_Pay\\Google_Pay' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\External_Checkout\\Google_Pay\\Google_Pay' ) ) : /** @@ -680,7 +680,7 @@ public function get_supported_networks() { $accepted_card_types = ( $this->get_processing_gateway() ) ? $this->get_processing_gateway()->get_card_types() : []; - $accepted_card_types = array_map( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Helper::normalize_card_type', $accepted_card_types ); + $accepted_card_types = array_map( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Helper::normalize_card_type', $accepted_card_types ); $valid_networks = [ SV_WC_Payment_Gateway_Helper::CARD_TYPE_AMEX => 'AMEX', diff --git a/woocommerce/payment-gateway/External_Checkout/Orders.php b/woocommerce/payment-gateway/External_Checkout/Orders.php index 20c61b38e..798b72b41 100644 --- a/woocommerce/payment-gateway/External_Checkout/Orders.php +++ b/woocommerce/payment-gateway/External_Checkout/Orders.php @@ -22,9 +22,9 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as Framework; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as Framework; defined( 'ABSPATH' ) or exit; diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-request.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-request.php index cbfa76504..5b5ac9806 100644 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-request.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-request.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_API_Request' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_API_Request' ) ) : /** diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-response.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-response.php index 6b9b2d4ac..19a34aeb5 100644 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-response.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api-response.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_API_Response' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_API_Response' ) ) : /** diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api.php index c656aac63..a9c616249 100644 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-api.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_API' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_API' ) ) : /** @@ -58,7 +58,7 @@ public function __construct( SV_WC_Payment_Gateway $gateway ) { $this->set_request_content_type_header( 'application/json' ); $this->set_request_accept_header( 'application/json' ); - $this->set_response_handler( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_API_Response' ); + $this->set_response_handler( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_API_Response' ); } diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-payment-response.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-payment-response.php index ea20a26c5..1c6dc6e88 100644 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-payment-response.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/api/class-sv-wc-payment-gateway-apple-pay-payment-response.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_Payment_Response' ) ) : /** diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-admin.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-admin.php index 1dc372938..af9a0cac4 100755 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-admin.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-admin.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Admin; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Admin; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_Admin' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_Admin' ) ) : /** diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-ajax.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-ajax.php index 6ef03c3c1..585204f52 100644 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-ajax.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-ajax.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_AJAX' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_AJAX' ) ) : /** diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-frontend.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-frontend.php index 2cb2dce0a..389a86aa1 100644 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-frontend.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay-frontend.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay_Frontend' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay_Frontend' ) ) : /** @@ -35,7 +35,7 @@ * @since 4.7.0 */ #[\AllowDynamicProperties] -class SV_WC_Payment_Gateway_Apple_Pay_Frontend extends \SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Frontend { +class SV_WC_Payment_Gateway_Apple_Pay_Frontend extends \SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Frontend { /** @var string JS handler base class name, without the FW version */ @@ -116,9 +116,9 @@ public function enqueue_scripts() { $gateway = $this->get_gateway(); $version = $gateway->get_plugin()->get_assets_version( $gateway->get_id() ); - wp_enqueue_style( 'sv-wc-apple-pay-v6_0_1', $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/css/frontend/sv-wc-payment-gateway-apple-pay.css', [], $version ); // TODO: min + wp_enqueue_style( 'sv-wc-apple-pay-v6_1_0', $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/css/frontend/sv-wc-payment-gateway-apple-pay.css', [], $version ); // TODO: min - wp_enqueue_script( 'sv-wc-apple-pay-v6_0_1', $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/sv-wc-payment-gateway-apple-pay.js', [ 'jquery' ], $version, true ); + wp_enqueue_script( 'sv-wc-apple-pay-v6_1_0', $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/sv-wc-payment-gateway-apple-pay.js', [ 'jquery' ], $version, true ); } diff --git a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay.php b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay.php index ac9e8da21..4b5a75e1c 100755 --- a/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay.php +++ b/woocommerce/payment-gateway/External_Checkout/apple-pay/class-sv-wc-payment-gateway-apple-pay.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Orders; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Orders; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Apple_Pay' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Apple_Pay' ) ) : /** @@ -940,7 +940,7 @@ public function get_supported_networks() { $accepted_card_types = ( $this->get_processing_gateway() ) ? $this->get_processing_gateway()->get_card_types() : array(); - $accepted_card_types = array_map( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Helper::normalize_card_type', $accepted_card_types ); + $accepted_card_types = array_map( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Helper::normalize_card_type', $accepted_card_types ); $valid_networks = array( SV_WC_Payment_Gateway_Helper::CARD_TYPE_AMEX => 'amex', diff --git a/woocommerce/payment-gateway/Handlers/Abstract_Hosted_Payment_Handler.php b/woocommerce/payment-gateway/Handlers/Abstract_Hosted_Payment_Handler.php index 09e9c25a1..24d7b517e 100644 --- a/woocommerce/payment-gateway/Handlers/Abstract_Hosted_Payment_Handler.php +++ b/woocommerce/payment-gateway/Handlers/Abstract_Hosted_Payment_Handler.php @@ -22,12 +22,12 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Handlers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Handlers; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as FrameworkBase; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as FrameworkBase; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\Handlers\\Abstract_Hosted_Payment_Handler' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\Handlers\\Abstract_Hosted_Payment_Handler' ) ) : /** diff --git a/woocommerce/payment-gateway/Handlers/Abstract_Payment_Handler.php b/woocommerce/payment-gateway/Handlers/Abstract_Payment_Handler.php index a694e9a41..976a827e8 100644 --- a/woocommerce/payment-gateway/Handlers/Abstract_Payment_Handler.php +++ b/woocommerce/payment-gateway/Handlers/Abstract_Payment_Handler.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Handlers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Handlers; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as FrameworkBase; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as FrameworkBase; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\Handlers\\Abstract_Payment_Handler' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\Handlers\\Abstract_Payment_Handler' ) ) : /** diff --git a/woocommerce/payment-gateway/Handlers/Capture.php b/woocommerce/payment-gateway/Handlers/Capture.php index 9aa87b023..44081b674 100644 --- a/woocommerce/payment-gateway/Handlers/Capture.php +++ b/woocommerce/payment-gateway/Handlers/Capture.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Handlers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Handlers; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1 as Framework; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Dynamic_Props; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0 as Framework; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Dynamic_Props; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\Handlers\\Capture' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\Handlers\\Capture' ) ) : /** diff --git a/woocommerce/payment-gateway/PaymentFormContextChecker.php b/woocommerce/payment-gateway/PaymentFormContextChecker.php index 368ad647d..3d0e3ca13 100644 --- a/woocommerce/payment-gateway/PaymentFormContextChecker.php +++ b/woocommerce/payment-gateway/PaymentFormContextChecker.php @@ -1,9 +1,9 @@ e)}init(){if(1===e(this.container).children().length&&e(this.wrapper).hide(),this.is_available()&&(e("form.cart").length?this.init_product_page():e("form.woocommerce-cart-form").length?this.init_cart_page():e("form.woocommerce-checkout").length&&this.init_checkout_page(),this.ui_element))return this.payment_request&&(e(this.button).show(),e(this.wrapper).show()),e(document.body).on("click",".sv-wc-apple-pay-button",e=>{e.preventDefault(),this.block_ui();try{return this.session=this.get_new_session(this.payment_request),this.session.onvalidatemerchant=e=>this.on_validate_merchant(e),this.session.onpaymentmethodselected=e=>this.on_payment_method_selected(e),this.session.onshippingcontactselected=e=>this.on_shipping_contact_selected(e),this.session.onshippingmethodselected=e=>this.on_shipping_method_selected(e),this.session.onpaymentauthorized=e=>this.on_payment_authorized(e),this.session.oncancel=e=>this.on_cancel_payment(e),this.session.begin()}catch(e){return this.fail_payment(e)}})}init_product_page(){return this.ui_element=e("form.cart")}init_cart_page(){return this.ui_element=e("form.woocommerce-cart-form").parents("div.woocommerce"),e(document.body).on("updated_cart_totals",()=>this.reset_payment_request())}init_checkout_page(){return this.ui_element=e("form.woocommerce-checkout"),e(document.body).on("updated_checkout",()=>this.reset_payment_request())}get_new_session(e){return new ApplePaySession(this.get_sdk_version(),e)}get_sdk_version(){return 2}on_validate_merchant(e){return this.validate_merchant(e.validationURL).then(e=>(e=JSON.parse(e),this.session.completeMerchantValidation(e)),e=>(this.session.abort(),this.fail_payment("Merchant could no be validated. "+e.message)))}validate_merchant(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_validate_merchant`,nonce:this.validate_nonce,merchant_id:this.merchant_id,url:t},e.post(this.ajax_url,n,e=>e.success?s(e.data):i(e.data))})}on_payment_method_selected(t){return new Promise((t,s)=>{var i;return i={action:`wc_${this.gateway_id}_apple_pay_recalculate_totals`,nonce:this.recalculate_totals_nonce},e.post(this.ajax_url,i,e=>e.success?(i=e.data,t(this.session.completePaymentMethodSelection(i.total,i.line_items))):(console.error("[Apple Pay] Error selecting a shipping contact. "+e.data.message),s(this.session.completePaymentMethodSelection(this.payment_request.total,this.payment_request.lineItems))))})}on_shipping_contact_selected(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_recalculate_totals`,nonce:this.recalculate_totals_nonce,contact:t.shippingContact},e.post(this.ajax_url,n,e=>e.success?(n=e.data,s(this.session.completeShippingContactSelection(ApplePaySession.STATUS_SUCCESS,n.shipping_methods,n.total,n.line_items))):(console.error("[Apple Pay] Error selecting a shipping contact. "+e.data.message),i(this.session.completeShippingContactSelection(ApplePaySession.STATUS_FAILURE,[],this.payment_request.total,this.payment_request.lineItems))))})}on_shipping_method_selected(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_recalculate_totals`,nonce:this.recalculate_totals_nonce,method:t.shippingMethod.identifier},e.post(this.ajax_url,n,e=>e.success?(n=e.data,s(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_SUCCESS,n.total,n.line_items))):(console.error("[Apple Pay] Error selecting a shipping method. "+e.data.message),i(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_FAILURE,this.payment_request.total,this.payment_request.lineItems))))})}on_payment_authorized(e){return this.process_authorization(e.payment).then(e=>(this.set_payment_status(!0),this.complete_purchase(e)),e=>(this.set_payment_status(!1),this.fail_payment("Payment could no be processed. "+e.message)))}process_authorization(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_process_payment`,nonce:this.process_nonce,payment:JSON.stringify(t)},e.post(this.ajax_url,n,e=>e.success?s(e.data):i(e.data))})}on_cancel_payment(e){return this.unblock_ui()}complete_purchase(e){return window.location=e.redirect}fail_payment(e){return console.error("[Apple Pay] "+e),this.unblock_ui(),this.render_errors([this.generic_error])}set_payment_status(e){var t;return t=e?ApplePaySession.STATUS_SUCCESS:ApplePaySession.STATUS_FAILURE,this.session.completePayment(t)}reset_payment_request(t={}){return this.block_ui(),this.get_payment_request(t).then(t=>(e(this.button).show(),e(this.wrapper).show(),this.payment_request=JSON.parse(t),this.unblock_ui()),t=>(console.error("[Apple Pay] Could not build payment request. "+t.message),e(this.button).hide(),1===e(this.container).children().length&&e(this.wrapper).hide(),this.unblock_ui()))}get_payment_request(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_get_payment_request`},e.extend(t,n),e.post(this.ajax_url,t,e=>e.success?s(e.data):i(e.data))})}render_errors(t){return e(".woocommerce-error, .woocommerce-message").remove(),this.ui_element.prepend('"),this.ui_element.removeClass("processing").unblock(),e("html, body").animate({scrollTop:this.ui_element.offset().top-100},1e3)}block_ui(){return this.ui_element.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock_ui(){return this.ui_element.unblock()}},e(document.body).trigger("sv_wc_apple_pay_handler_v6_0_1_loaded")})}).call({}); +(function(){jQuery(function(e){return window.SV_WC_Apple_Pay_Handler_v6_1_0=class{constructor(e){this.init_product_page=this.init_product_page.bind(this),this.init_cart_page=this.init_cart_page.bind(this),this.init_checkout_page=this.init_checkout_page.bind(this),this.on_validate_merchant=this.on_validate_merchant.bind(this),this.validate_merchant=this.validate_merchant.bind(this),this.on_payment_method_selected=this.on_payment_method_selected.bind(this),this.on_shipping_contact_selected=this.on_shipping_contact_selected.bind(this),this.on_shipping_method_selected=this.on_shipping_method_selected.bind(this),this.on_payment_authorized=this.on_payment_authorized.bind(this),this.process_authorization=this.process_authorization.bind(this),this.on_cancel_payment=this.on_cancel_payment.bind(this),this.reset_payment_request=this.reset_payment_request.bind(this),this.get_payment_request=this.get_payment_request.bind(this),this.gateway_id=e.gateway_id,this.gateway_slug=e.gateway_slug,this.merchant_id=e.merchant_id,this.ajax_url=e.ajax_url,this.validate_nonce=e.validate_nonce,this.recalculate_totals_nonce=e.recalculate_totals_nonce,this.process_nonce=e.process_nonce,this.payment_request=e.payment_request,this.generic_error=e.generic_error,this.wrapper=".sv-wc-external-checkout",this.container=".buttons-container",this.button=".sv-wc-apple-pay-button"}is_available(){return!!window.ApplePaySession&&ApplePaySession.canMakePaymentsWithActiveCard(this.merchant_id).then(e=>e)}init(){if(1===e(this.container).children().length&&e(this.wrapper).hide(),this.is_available()&&(e("form.cart").length?this.init_product_page():e("form.woocommerce-cart-form").length?this.init_cart_page():e("form.woocommerce-checkout").length&&this.init_checkout_page(),this.ui_element))return this.payment_request&&(e(this.button).show(),e(this.wrapper).show()),e(document.body).on("click",".sv-wc-apple-pay-button",e=>{e.preventDefault(),this.block_ui();try{return this.session=this.get_new_session(this.payment_request),this.session.onvalidatemerchant=e=>this.on_validate_merchant(e),this.session.onpaymentmethodselected=e=>this.on_payment_method_selected(e),this.session.onshippingcontactselected=e=>this.on_shipping_contact_selected(e),this.session.onshippingmethodselected=e=>this.on_shipping_method_selected(e),this.session.onpaymentauthorized=e=>this.on_payment_authorized(e),this.session.oncancel=e=>this.on_cancel_payment(e),this.session.begin()}catch(e){return this.fail_payment(e)}})}init_product_page(){return this.ui_element=e("form.cart")}init_cart_page(){return this.ui_element=e("form.woocommerce-cart-form").parents("div.woocommerce"),e(document.body).on("updated_cart_totals",()=>this.reset_payment_request())}init_checkout_page(){return this.ui_element=e("form.woocommerce-checkout"),e(document.body).on("updated_checkout",()=>this.reset_payment_request())}get_new_session(e){return new ApplePaySession(this.get_sdk_version(),e)}get_sdk_version(){return 2}on_validate_merchant(e){return this.validate_merchant(e.validationURL).then(e=>(e=JSON.parse(e),this.session.completeMerchantValidation(e)),e=>(this.session.abort(),this.fail_payment("Merchant could no be validated. "+e.message)))}validate_merchant(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_validate_merchant`,nonce:this.validate_nonce,merchant_id:this.merchant_id,url:t},e.post(this.ajax_url,n,e=>e.success?s(e.data):i(e.data))})}on_payment_method_selected(t){return new Promise((t,s)=>{var i;return i={action:`wc_${this.gateway_id}_apple_pay_recalculate_totals`,nonce:this.recalculate_totals_nonce},e.post(this.ajax_url,i,e=>e.success?(i=e.data,t(this.session.completePaymentMethodSelection(i.total,i.line_items))):(console.error("[Apple Pay] Error selecting a shipping contact. "+e.data.message),s(this.session.completePaymentMethodSelection(this.payment_request.total,this.payment_request.lineItems))))})}on_shipping_contact_selected(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_recalculate_totals`,nonce:this.recalculate_totals_nonce,contact:t.shippingContact},e.post(this.ajax_url,n,e=>e.success?(n=e.data,s(this.session.completeShippingContactSelection(ApplePaySession.STATUS_SUCCESS,n.shipping_methods,n.total,n.line_items))):(console.error("[Apple Pay] Error selecting a shipping contact. "+e.data.message),i(this.session.completeShippingContactSelection(ApplePaySession.STATUS_FAILURE,[],this.payment_request.total,this.payment_request.lineItems))))})}on_shipping_method_selected(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_recalculate_totals`,nonce:this.recalculate_totals_nonce,method:t.shippingMethod.identifier},e.post(this.ajax_url,n,e=>e.success?(n=e.data,s(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_SUCCESS,n.total,n.line_items))):(console.error("[Apple Pay] Error selecting a shipping method. "+e.data.message),i(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_FAILURE,this.payment_request.total,this.payment_request.lineItems))))})}on_payment_authorized(e){return this.process_authorization(e.payment).then(e=>(this.set_payment_status(!0),this.complete_purchase(e)),e=>(this.set_payment_status(!1),this.fail_payment("Payment could no be processed. "+e.message)))}process_authorization(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_process_payment`,nonce:this.process_nonce,payment:JSON.stringify(t)},e.post(this.ajax_url,n,e=>e.success?s(e.data):i(e.data))})}on_cancel_payment(e){return this.unblock_ui()}complete_purchase(e){return window.location=e.redirect}fail_payment(e){return console.error("[Apple Pay] "+e),this.unblock_ui(),this.render_errors([this.generic_error])}set_payment_status(e){var t;return t=e?ApplePaySession.STATUS_SUCCESS:ApplePaySession.STATUS_FAILURE,this.session.completePayment(t)}reset_payment_request(t={}){return this.block_ui(),this.get_payment_request(t).then(t=>(e(this.button).show(),e(this.wrapper).show(),this.payment_request=JSON.parse(t),this.unblock_ui()),t=>(console.error("[Apple Pay] Could not build payment request. "+t.message),e(this.button).hide(),1===e(this.container).children().length&&e(this.wrapper).hide(),this.unblock_ui()))}get_payment_request(t){return new Promise((s,i)=>{var n;return n={action:`wc_${this.gateway_id}_apple_pay_get_payment_request`},e.extend(t,n),e.post(this.ajax_url,t,e=>e.success?s(e.data):i(e.data))})}render_errors(t){return e(".woocommerce-error, .woocommerce-message").remove(),this.ui_element.prepend('"),this.ui_element.removeClass("processing").unblock(),e("html, body").animate({scrollTop:this.ui_element.offset().top-100},1e3)}block_ui(){return this.ui_element.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock_ui(){return this.ui_element.unblock()}},e(document.body).trigger("sv_wc_apple_pay_handler_v6_1_0_loaded")})}).call({}); //# sourceMappingURL=sv-wc-payment-gateway-apple-pay.js.map diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-apple-pay.js.map b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-apple-pay.js.map index fda324e68..a7bad1a4a 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-apple-pay.js.map +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-apple-pay.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-apple-pay.coffee"],"sourcesContent":["(() => {\nvar $83dab3ad15da905a$exports = {};\n(function() {\n /*\n WooCommerce Apple Pay Handler\n Version 4.7.0\n\n Copyright (c) 2016, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n */ jQuery(function($) {\n \"use strict\";\n // The WooCommerce Apple Pay handler base class.\n // @since 4.7.0\n window.SV_WC_Apple_Pay_Handler_v6_0_1 = class SV_WC_Apple_Pay_Handler_v6_0_1 {\n // Constructs the handler.\n // @since 4.7.0\n constructor(args){\n // Initializes the product page.\n // @since 5.6.0\n this.init_product_page = this.init_product_page.bind(this);\n // Initializes the cart page.\n // @since 5.6.0\n this.init_cart_page = this.init_cart_page.bind(this);\n // Initializes the checkout page.\n // @since 5.6.0\n this.init_checkout_page = this.init_checkout_page.bind(this);\n // The callback for after the merchant data is validated.\n // @since 4.7.0\n this.on_validate_merchant = this.on_validate_merchant.bind(this);\n // Validates the merchant data.\n // @since 4.7.0\n // @return object\n this.validate_merchant = this.validate_merchant.bind(this);\n // Fires after a payment method has been selected.\n // @since 4.7.0\n this.on_payment_method_selected = this.on_payment_method_selected.bind(this);\n // Fires after a shipping contact has been selected.\n // @since 4.7.0\n this.on_shipping_contact_selected = this.on_shipping_contact_selected.bind(this);\n // Fires after a shipping method has been selected.\n // @since 4.7.0\n this.on_shipping_method_selected = this.on_shipping_method_selected.bind(this);\n // The callback for after the payment data is authorized.\n // @since 4.7.0\n this.on_payment_authorized = this.on_payment_authorized.bind(this);\n // Processes the transaction data.\n // @since 4.7.0\n this.process_authorization = this.process_authorization.bind(this);\n // The callback for when the payment card is cancelled/dismissed.\n // @since 4.7.0\n this.on_cancel_payment = this.on_cancel_payment.bind(this);\n // Resets the payment request via AJAX.\n // Extending handlers can call this on change events to refresh the data.\n // @since 4.7.0\n this.reset_payment_request = this.reset_payment_request.bind(this);\n // Gets the payment request via AJAX.\n // @since 4.7.0\n this.get_payment_request = this.get_payment_request.bind(this);\n this.gateway_id = args.gateway_id;\n this.gateway_slug = args.gateway_slug;\n this.merchant_id = args.merchant_id;\n this.ajax_url = args.ajax_url;\n this.validate_nonce = args.validate_nonce;\n this.recalculate_totals_nonce = args.recalculate_totals_nonce;\n this.process_nonce = args.process_nonce;\n this.payment_request = args.payment_request;\n this.generic_error = args.generic_error;\n this.wrapper = '.sv-wc-external-checkout';\n this.container = '.buttons-container';\n this.button = '.sv-wc-apple-pay-button';\n }\n // Determines if Apple Pay is available.\n // @since 4.7.0\n // @return bool\n is_available() {\n if (!window.ApplePaySession) return false;\n return ApplePaySession.canMakePaymentsWithActiveCard(this.merchant_id).then((canMakePayments)=>{\n return canMakePayments;\n });\n }\n // Initializes the handler.\n // @since 4.7.0\n init() {\n // hide the wrapper if Apple Pay is the only button\n if ($(this.container).children().length === 1) $(this.wrapper).hide();\n if (!this.is_available()) return;\n // initialize for the various pages\n if ($('form.cart').length) this.init_product_page();\n else if ($('form.woocommerce-cart-form').length) this.init_cart_page();\n else if ($('form.woocommerce-checkout').length) this.init_checkout_page();\n // bail if no UI was initialized\n if (!this.ui_element) return;\n if (this.payment_request) {\n $(this.button).show();\n $(this.wrapper).show();\n }\n return $(document.body).on('click', '.sv-wc-apple-pay-button', (e)=>{\n var error;\n e.preventDefault();\n this.block_ui();\n try {\n this.session = this.get_new_session(this.payment_request);\n // set the payment card events\n this.session.onvalidatemerchant = (event)=>{\n return this.on_validate_merchant(event);\n };\n this.session.onpaymentmethodselected = (event)=>{\n return this.on_payment_method_selected(event);\n };\n this.session.onshippingcontactselected = (event)=>{\n return this.on_shipping_contact_selected(event);\n };\n this.session.onshippingmethodselected = (event)=>{\n return this.on_shipping_method_selected(event);\n };\n this.session.onpaymentauthorized = (event)=>{\n return this.on_payment_authorized(event);\n };\n this.session.oncancel = (event)=>{\n return this.on_cancel_payment(event);\n };\n return this.session.begin();\n } catch (error1) {\n error = error1;\n return this.fail_payment(error);\n }\n });\n }\n init_product_page() {\n return this.ui_element = $('form.cart');\n }\n init_cart_page() {\n this.ui_element = $('form.woocommerce-cart-form').parents('div.woocommerce');\n // re-init if the cart totals are updated\n return $(document.body).on('updated_cart_totals', ()=>{\n return this.reset_payment_request();\n });\n }\n init_checkout_page() {\n this.ui_element = $('form.woocommerce-checkout');\n return $(document.body).on('updated_checkout', ()=>{\n // re-init if the checkout is updated\n return this.reset_payment_request();\n });\n }\n // Gets a new Apple Pay session.\n // @since 5.6.0\n // @param [Object] payment_request payment request object\n // @return ApplePaySession\n get_new_session(payment_request) {\n return new ApplePaySession(this.get_sdk_version(), payment_request);\n }\n // Gets the Apple SDK version to use.\n // @since 5.6.0\n // @return int\n get_sdk_version() {\n return 2;\n }\n on_validate_merchant(event) {\n return this.validate_merchant(event.validationURL).then((merchant_session)=>{\n merchant_session = JSON.parse(merchant_session);\n return this.session.completeMerchantValidation(merchant_session);\n }, (response)=>{\n this.session.abort();\n return this.fail_payment('Merchant could no be validated. ' + response.message);\n });\n }\n validate_merchant(url) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_validate_merchant`,\n 'nonce': this.validate_nonce,\n 'merchant_id': this.merchant_id,\n 'url': url\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) return resolve(response.data);\n else return reject(response.data);\n });\n });\n }\n on_payment_method_selected(event) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_recalculate_totals`,\n 'nonce': this.recalculate_totals_nonce\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) {\n data = response.data;\n return resolve(this.session.completePaymentMethodSelection(data.total, data.line_items));\n } else {\n console.error('[Apple Pay] Error selecting a shipping contact. ' + response.data.message);\n return reject(this.session.completePaymentMethodSelection(this.payment_request.total, this.payment_request.lineItems));\n }\n });\n });\n }\n on_shipping_contact_selected(event) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_recalculate_totals`,\n 'nonce': this.recalculate_totals_nonce,\n 'contact': event.shippingContact\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) {\n data = response.data;\n return resolve(this.session.completeShippingContactSelection(ApplePaySession.STATUS_SUCCESS, data.shipping_methods, data.total, data.line_items));\n } else {\n console.error('[Apple Pay] Error selecting a shipping contact. ' + response.data.message);\n return reject(this.session.completeShippingContactSelection(ApplePaySession.STATUS_FAILURE, [], this.payment_request.total, this.payment_request.lineItems));\n }\n });\n });\n }\n on_shipping_method_selected(event) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_recalculate_totals`,\n 'nonce': this.recalculate_totals_nonce,\n 'method': event.shippingMethod.identifier\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) {\n data = response.data;\n return resolve(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_SUCCESS, data.total, data.line_items));\n } else {\n console.error('[Apple Pay] Error selecting a shipping method. ' + response.data.message);\n return reject(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_FAILURE, this.payment_request.total, this.payment_request.lineItems));\n }\n });\n });\n }\n on_payment_authorized(event) {\n return this.process_authorization(event.payment).then((response)=>{\n this.set_payment_status(true);\n return this.complete_purchase(response);\n }, (response)=>{\n this.set_payment_status(false);\n return this.fail_payment('Payment could no be processed. ' + response.message);\n });\n }\n process_authorization(payment) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n action: `wc_${this.gateway_id}_apple_pay_process_payment`,\n nonce: this.process_nonce,\n payment: JSON.stringify(payment)\n };\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) return resolve(response.data);\n else return reject(response.data);\n });\n });\n }\n on_cancel_payment(event) {\n return this.unblock_ui();\n }\n // Completes the purchase based on the gateway result.\n // @since 4.7.0\n complete_purchase(response) {\n return window.location = response.redirect;\n }\n // Fails the purchase based on the gateway result.\n // @since 4.7.0\n fail_payment(error) {\n console.error('[Apple Pay] ' + error);\n this.unblock_ui();\n return this.render_errors([\n this.generic_error\n ]);\n }\n // Sets the Apple Pay payment status depending on the gateway result.\n // @since 4.7.0\n set_payment_status(success) {\n var status;\n if (success) status = ApplePaySession.STATUS_SUCCESS;\n else status = ApplePaySession.STATUS_FAILURE;\n return this.session.completePayment(status);\n }\n reset_payment_request(data = {}) {\n this.block_ui();\n return this.get_payment_request(data).then((response)=>{\n $(this.button).show();\n $(this.wrapper).show();\n this.payment_request = JSON.parse(response);\n return this.unblock_ui();\n }, (response)=>{\n console.error('[Apple Pay] Could not build payment request. ' + response.message);\n $(this.button).hide();\n // hide the wrapper if Apple Pay is the only button\n if ($(this.container).children().length === 1) $(this.wrapper).hide();\n return this.unblock_ui();\n });\n }\n get_payment_request(data) {\n return new Promise((resolve, reject)=>{\n var base_data;\n base_data = {\n 'action': `wc_${this.gateway_id}_apple_pay_get_payment_request`\n };\n $.extend(data, base_data);\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) return resolve(response.data);\n else return reject(response.data);\n });\n });\n }\n // Renders any new errors and bring them into the viewport.\n // @since 4.7.0\n render_errors(errors) {\n // hide and remove any previous errors\n $('.woocommerce-error, .woocommerce-message').remove();\n // add errors\n this.ui_element.prepend('');\n // unblock UI\n this.ui_element.removeClass('processing').unblock();\n // scroll to top\n return $('html, body').animate({\n scrollTop: this.ui_element.offset().top - 100\n }, 1000);\n }\n // Blocks the payment form UI.\n // @since 4.7.0\n block_ui() {\n return this.ui_element.block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n // Unblocks the payment form UI.\n // @since 4.7.0\n unblock_ui() {\n return this.ui_element.unblock();\n }\n };\n // dispatch loaded event\n return $(document.body).trigger('sv_wc_apple_pay_handler_v6_0_1_loaded');\n });\n}).call($83dab3ad15da905a$exports);\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-apple-pay.js.map\n","###\n WooCommerce Apple Pay Handler\n Version 4.7.0\n\n Copyright (c) 2016, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n###\n\njQuery ( $ ) ->\n\n\t\"use strict\"\n\n\t# The WooCommerce Apple Pay handler base class.\n\t#\n\t# @since 4.7.0\n\tclass window.SV_WC_Apple_Pay_Handler_v6_0_1\n\n\n\t\t# Constructs the handler.\n\t\t#\n\t\t# @since 4.7.0\n\t\tconstructor: (args) ->\n\n\t\t\t@gateway_id = args.gateway_id\n\t\t\t@gateway_slug = args.gateway_slug\n\t\t\t@merchant_id = args.merchant_id\n\t\t\t@ajax_url = args.ajax_url\n\t\t\t@validate_nonce = args.validate_nonce\n\t\t\t@recalculate_totals_nonce = args.recalculate_totals_nonce\n\t\t\t@process_nonce = args.process_nonce\n\t\t\t@payment_request = args.payment_request\n\t\t\t@generic_error = args.generic_error\n\n\t\t\t@wrapper = '.sv-wc-external-checkout'\n\t\t\t@container = '.buttons-container'\n\t\t\t@button = '.sv-wc-apple-pay-button'\n\n\n\t\t# Determines if Apple Pay is available.\n\t\t#\n\t\t# @since 4.7.0\n\t\t# @return bool\n\t\tis_available: ->\n\n\t\t\treturn false unless window.ApplePaySession\n\n\t\t\tApplePaySession.canMakePaymentsWithActiveCard( @merchant_id ).then ( canMakePayments ) =>\n\n\t\t\t\treturn canMakePayments\n\n\n\t\t# Initializes the handler.\n\t\t#\n\t\t# @since 4.7.0\n\t\tinit: ->\n\n\t\t\t# hide the wrapper if Apple Pay is the only button\n\t\t\tif $( @container ).children().length is 1\n\t\t\t\t$( @wrapper ).hide()\n\n\t\t\treturn unless this.is_available()\n\n\t\t\t# initialize for the various pages\n\t\t\tif $( 'form.cart' ).length\n\t\t\t\tthis.init_product_page()\n\t\t\telse if $( 'form.woocommerce-cart-form' ).length\n\t\t\t\tthis.init_cart_page()\n\t\t\telse if $( 'form.woocommerce-checkout' ).length\n\t\t\t\tthis.init_checkout_page()\n\n\t\t\t# bail if no UI was initialized\n\t\t\treturn unless @ui_element\n\n\t\t\tif @payment_request\n\t\t\t\t$( @button ).show()\n\t\t\t\t$( @wrapper ).show()\n\n\t\t\t$( document.body ).on 'click', '.sv-wc-apple-pay-button', ( e ) =>\n\n\t\t\t\te.preventDefault()\n\n\t\t\t\tthis.block_ui()\n\n\t\t\t\ttry\n\n\t\t\t\t\t@session = this.get_new_session( @payment_request )\n\n\t\t\t\t\t# set the payment card events\n\t\t\t\t\t@session.onvalidatemerchant = ( event ) => this.on_validate_merchant( event )\n\t\t\t\t\t@session.onpaymentmethodselected = ( event ) => this.on_payment_method_selected( event )\n\t\t\t\t\t@session.onshippingcontactselected = ( event ) => this.on_shipping_contact_selected( event )\n\t\t\t\t\t@session.onshippingmethodselected = ( event ) => this.on_shipping_method_selected( event )\n\t\t\t\t\t@session.onpaymentauthorized = ( event ) => this.on_payment_authorized( event )\n\t\t\t\t\t@session.oncancel = ( event ) => this.on_cancel_payment( event )\n\n\t\t\t\t\t@session.begin()\n\n\t\t\t\tcatch error\n\n\t\t\t\t\tthis.fail_payment( error )\n\n\n\t\t# Initializes the product page.\n\t\t#\n\t\t# @since 5.6.0\n\t\tinit_product_page: =>\n\n\t\t\t@ui_element = $( 'form.cart' )\n\n\n\t\t# Initializes the cart page.\n\t\t#\n\t\t# @since 5.6.0\n\t\tinit_cart_page: =>\n\n\t\t\t@ui_element = $( 'form.woocommerce-cart-form' ).parents( 'div.woocommerce' )\n\n\t\t\t# re-init if the cart totals are updated\n\t\t\t$( document.body ).on 'updated_cart_totals', =>\n\n\t\t\t\tthis.reset_payment_request()\n\n\n\t\t# Initializes the checkout page.\n\t\t#\n\t\t# @since 5.6.0\n\t\tinit_checkout_page: =>\n\n\t\t\t@ui_element = $( 'form.woocommerce-checkout' )\n\n\t\t\t$( document.body ).on 'updated_checkout', =>\n\n\t\t\t\t# re-init if the checkout is updated\n\t\t\t\tthis.reset_payment_request()\n\n\n\t\t# Gets a new Apple Pay session.\n\t\t#\n\t\t# @since 5.6.0\n\t\t#\n\t\t# @param [Object] payment_request payment request object\n\t\t# @return ApplePaySession\n\t\tget_new_session: ( payment_request ) ->\n\n\t\t\treturn new ApplePaySession( this.get_sdk_version(), payment_request )\n\n\n\t\t# Gets the Apple SDK version to use.\n\t\t#\n\t\t# @since 5.6.0\n\t\t# @return int\n\t\tget_sdk_version: ->\n\n\t\t\treturn 2\n\n\n\t\t# The callback for after the merchant data is validated.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_validate_merchant: ( event ) =>\n\n\t\t\tthis.validate_merchant( event.validationURL ).then ( merchant_session ) =>\n\n\t\t\t\tmerchant_session = JSON.parse( merchant_session )\n\n\t\t\t\t@session.completeMerchantValidation( merchant_session )\n\n\t\t\t, ( response ) =>\n\n\t\t\t\t@session.abort()\n\n\t\t\t\tthis.fail_payment 'Merchant could no be validated. ' + response.message\n\n\n\t\t# Validates the merchant data.\n\t\t#\n\t\t# @since 4.7.0\n\t\t# @return object\n\t\tvalidate_merchant: ( url ) => new Promise ( resolve, reject ) =>\n\n\t\t\tdata = {\n\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_validate_merchant\",\n\t\t\t\t'nonce': @validate_nonce,\n\t\t\t\t'merchant_id': @merchant_id,\n\t\t\t\t'url': url\n\t\t\t}\n\n\t\t\t# retrieve a payment request object\n\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\tif response.success\n\t\t\t\t\tresolve response.data\n\t\t\t\telse\n\t\t\t\t\treject response.data\n\n\n\t\t# Fires after a payment method has been selected.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_payment_method_selected: ( event ) =>\n\n\t\t\tnew Promise ( resolve, reject ) =>\n\n\t\t\t\tdata = {\n\t\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_recalculate_totals\",\n\t\t\t\t\t'nonce': @recalculate_totals_nonce,\n\t\t\t\t}\n\n\t\t\t\t# retrieve a payment request object\n\t\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\t\tif response.success\n\n\t\t\t\t\t\tdata = response.data\n\n\t\t\t\t\t\tresolve @session.completePaymentMethodSelection( data.total, data.line_items )\n\n\t\t\t\t\telse\n\n\t\t\t\t\t\tconsole.error '[Apple Pay] Error selecting a shipping contact. ' + response.data.message\n\n\t\t\t\t\t\treject @session.completePaymentMethodSelection( @payment_request.total, @payment_request.lineItems )\n\n\n\t\t# Fires after a shipping contact has been selected.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_shipping_contact_selected: ( event ) =>\n\n\t\t\tnew Promise ( resolve, reject ) =>\n\n\t\t\t\tdata = {\n\t\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_recalculate_totals\",\n\t\t\t\t\t'nonce': @recalculate_totals_nonce,\n\t\t\t\t\t'contact': event.shippingContact\n\t\t\t\t}\n\n\t\t\t\t# retrieve a payment request object\n\t\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\t\tif response.success\n\n\t\t\t\t\t\tdata = response.data\n\n\t\t\t\t\t\tresolve @session.completeShippingContactSelection( ApplePaySession.STATUS_SUCCESS, data.shipping_methods, data.total, data.line_items )\n\n\t\t\t\t\telse\n\n\t\t\t\t\t\tconsole.error '[Apple Pay] Error selecting a shipping contact. ' + response.data.message\n\n\t\t\t\t\t\treject @session.completeShippingContactSelection( ApplePaySession.STATUS_FAILURE, [], @payment_request.total, @payment_request.lineItems )\n\n\n\t\t# Fires after a shipping method has been selected.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_shipping_method_selected: ( event ) =>\n\n\t\t\tnew Promise ( resolve, reject ) =>\n\n\t\t\t\tdata = {\n\t\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_recalculate_totals\",\n\t\t\t\t\t'nonce': @recalculate_totals_nonce,\n\t\t\t\t\t'method': event.shippingMethod.identifier\n\t\t\t\t}\n\n\t\t\t\t# retrieve a payment request object\n\t\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\t\tif response.success\n\n\t\t\t\t\t\tdata = response.data\n\n\t\t\t\t\t\tresolve @session.completeShippingMethodSelection( ApplePaySession.STATUS_SUCCESS, data.total, data.line_items )\n\n\t\t\t\t\telse\n\n\t\t\t\t\t\tconsole.error '[Apple Pay] Error selecting a shipping method. ' + response.data.message\n\n\t\t\t\t\t\treject @session.completeShippingMethodSelection( ApplePaySession.STATUS_FAILURE, @payment_request.total, @payment_request.lineItems )\n\n\n\t\t# The callback for after the payment data is authorized.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_payment_authorized: ( event ) =>\n\n\t\t\tthis.process_authorization( event.payment ).then ( response ) =>\n\n\t\t\t\tthis.set_payment_status( true )\n\n\t\t\t\tthis.complete_purchase( response )\n\n\t\t\t, ( response ) =>\n\n\t\t\t\tthis.set_payment_status( false )\n\n\t\t\t\tthis.fail_payment 'Payment could no be processed. ' + response.message\n\n\n\t\t# Processes the transaction data.\n\t\t#\n\t\t# @since 4.7.0\n\t\tprocess_authorization: ( payment ) => new Promise ( resolve, reject ) =>\n\n\t\t\tdata = {\n\t\t\t\taction: \"wc_#{ @gateway_id }_apple_pay_process_payment\",\n\t\t\t\tnonce: @process_nonce,\n\t\t\t\tpayment: JSON.stringify( payment )\n\t\t\t}\n\n\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\tif response.success\n\t\t\t\t\tresolve response.data\n\t\t\t\telse\n\t\t\t\t\treject response.data\n\n\n\t\t# The callback for when the payment card is cancelled/dismissed.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_cancel_payment: ( event ) =>\n\n\t\t\tthis.unblock_ui()\n\n\n\t\t# Completes the purchase based on the gateway result.\n\t\t#\n\t\t# @since 4.7.0\n\t\tcomplete_purchase: ( response ) ->\n\n\t\t\twindow.location = response.redirect\n\n\n\t\t# Fails the purchase based on the gateway result.\n\t\t#\n\t\t# @since 4.7.0\n\t\tfail_payment: ( error ) ->\n\n\t\t\tconsole.error '[Apple Pay] ' + error\n\n\t\t\tthis.unblock_ui()\n\n\t\t\tthis.render_errors( [ @generic_error ] )\n\n\n\t\t# Sets the Apple Pay payment status depending on the gateway result.\n\t\t#\n\t\t# @since 4.7.0\n\t\tset_payment_status: ( success ) ->\n\n\t\t\tif success\n\t\t\t\tstatus = ApplePaySession.STATUS_SUCCESS\n\t\t\telse\n\t\t\t\tstatus = ApplePaySession.STATUS_FAILURE\n\n\t\t\t@session.completePayment( status )\n\n\n\t\t# Resets the payment request via AJAX.\n\t\t#\n\t\t# Extending handlers can call this on change events to refresh the data.\n\t\t#\n\t\t# @since 4.7.0\n\t\treset_payment_request: ( data = {} ) =>\n\n\t\t\tthis.block_ui()\n\n\t\t\tthis.get_payment_request( data ).then ( response ) =>\n\n\t\t\t\t$( @button ).show()\n\t\t\t\t$( @wrapper ).show()\n\n\t\t\t\t@payment_request = JSON.parse( response )\n\n\t\t\t\tthis.unblock_ui()\n\n\t\t\t, ( response ) =>\n\n\t\t\t\tconsole.error '[Apple Pay] Could not build payment request. ' + response.message\n\n\t\t\t\t$( @button ).hide()\n\t\t\t\t# hide the wrapper if Apple Pay is the only button\n\t\t\t\tif $( @container ).children().length is 1\n\t\t\t\t\t$( @wrapper ).hide()\n\n\t\t\t\tthis.unblock_ui()\n\n\n\t\t# Gets the payment request via AJAX.\n\t\t#\n\t\t# @since 4.7.0\n\t\tget_payment_request: ( data ) => new Promise ( resolve, reject ) =>\n\n\t\t\tbase_data = {\n\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_get_payment_request\"\n\t\t\t}\n\n\t\t\t$.extend data, base_data\n\n\t\t\t# retrieve a payment request object\n\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\tif response.success\n\t\t\t\t\tresolve response.data\n\t\t\t\telse\n\t\t\t\t\treject response.data\n\n\n\t\t# Renders any new errors and bring them into the viewport.\n\t\t#\n\t\t# @since 4.7.0\n\t\trender_errors: ( errors ) ->\n\n\t\t\t# hide and remove any previous errors\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove()\n\n\t\t\t# add errors\n\t\t\t@ui_element.prepend ''\n\n\t\t\t# unblock UI\n\t\t\t@ui_element.removeClass( 'processing' ).unblock()\n\n\t\t\t# scroll to top\n\t\t\t$( 'html, body' ).animate( { scrollTop: @ui_element.offset().top - 100 }, 1000 )\n\n\n\t\t# Blocks the payment form UI.\n\t\t#\n\t\t# @since 4.7.0\n\t\tblock_ui: -> @ui_element.block( message: null, overlayCSS: background: '#fff', opacity: 0.6 )\n\n\n\t\t# Unblocks the payment form UI.\n\t\t#\n\t\t# @since 4.7.0\n\t\tunblock_ui: -> @ui_element.unblock()\n\n\n\t# dispatch loaded event\n\t$( document.body ).trigger( 'sv_wc_apple_pay_handler_v6_0_1_loaded' )\n"],"names":["jQuery","$","window","SV_WC_Apple_Pay_Handler_v6_0_1","constructor","args","init_product_page","bind","init_cart_page","init_checkout_page","on_validate_merchant","validate_merchant","on_payment_method_selected","on_shipping_contact_selected","on_shipping_method_selected","on_payment_authorized","process_authorization","on_cancel_payment","reset_payment_request","get_payment_request","gateway_id","gateway_slug","merchant_id","ajax_url","validate_nonce","recalculate_totals_nonce","process_nonce","payment_request","generic_error","wrapper","container","button","is_available","ApplePaySession","canMakePaymentsWithActiveCard","then","canMakePayments","init","children","length","hide","ui_element","show","document","body","on","e","preventDefault","block_ui","session","get_new_session","onvalidatemerchant","event","onpaymentmethodselected","onshippingcontactselected","onshippingmethodselected","onpaymentauthorized","oncancel","begin","error1","fail_payment","parents","get_sdk_version","validationURL","merchant_session","JSON","parse","completeMerchantValidation","response","abort","message","url","Promise","resolve","reject","data","post","success","completePaymentMethodSelection","total","line_items","console","error","lineItems","shippingContact","completeShippingContactSelection","STATUS_SUCCESS","shipping_methods","STATUS_FAILURE","shippingMethod","identifier","completeShippingMethodSelection","payment","set_payment_status","complete_purchase","action","nonce","stringify","unblock_ui","location","redirect","render_errors","status","completePayment","base_data","extend","errors","remove","prepend","join","removeClass","unblock","animate","scrollTop","offset","top","block","overlayCSS","background","opacity","trigger","call"],"version":3,"file":"sv-wc-payment-gateway-apple-pay.js.map"} \ No newline at end of file +{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-apple-pay.coffee"],"sourcesContent":["(() => {\nvar $83dab3ad15da905a$exports = {};\n(function() {\n /*\n WooCommerce Apple Pay Handler\n Version 4.7.0\n\n Copyright (c) 2016, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n */ jQuery(function($) {\n \"use strict\";\n // The WooCommerce Apple Pay handler base class.\n // @since 4.7.0\n window.SV_WC_Apple_Pay_Handler_v6_1_0 = class SV_WC_Apple_Pay_Handler_v6_1_0 {\n // Constructs the handler.\n // @since 4.7.0\n constructor(args){\n // Initializes the product page.\n // @since 5.6.0\n this.init_product_page = this.init_product_page.bind(this);\n // Initializes the cart page.\n // @since 5.6.0\n this.init_cart_page = this.init_cart_page.bind(this);\n // Initializes the checkout page.\n // @since 5.6.0\n this.init_checkout_page = this.init_checkout_page.bind(this);\n // The callback for after the merchant data is validated.\n // @since 4.7.0\n this.on_validate_merchant = this.on_validate_merchant.bind(this);\n // Validates the merchant data.\n // @since 4.7.0\n // @return object\n this.validate_merchant = this.validate_merchant.bind(this);\n // Fires after a payment method has been selected.\n // @since 4.7.0\n this.on_payment_method_selected = this.on_payment_method_selected.bind(this);\n // Fires after a shipping contact has been selected.\n // @since 4.7.0\n this.on_shipping_contact_selected = this.on_shipping_contact_selected.bind(this);\n // Fires after a shipping method has been selected.\n // @since 4.7.0\n this.on_shipping_method_selected = this.on_shipping_method_selected.bind(this);\n // The callback for after the payment data is authorized.\n // @since 4.7.0\n this.on_payment_authorized = this.on_payment_authorized.bind(this);\n // Processes the transaction data.\n // @since 4.7.0\n this.process_authorization = this.process_authorization.bind(this);\n // The callback for when the payment card is cancelled/dismissed.\n // @since 4.7.0\n this.on_cancel_payment = this.on_cancel_payment.bind(this);\n // Resets the payment request via AJAX.\n // Extending handlers can call this on change events to refresh the data.\n // @since 4.7.0\n this.reset_payment_request = this.reset_payment_request.bind(this);\n // Gets the payment request via AJAX.\n // @since 4.7.0\n this.get_payment_request = this.get_payment_request.bind(this);\n this.gateway_id = args.gateway_id;\n this.gateway_slug = args.gateway_slug;\n this.merchant_id = args.merchant_id;\n this.ajax_url = args.ajax_url;\n this.validate_nonce = args.validate_nonce;\n this.recalculate_totals_nonce = args.recalculate_totals_nonce;\n this.process_nonce = args.process_nonce;\n this.payment_request = args.payment_request;\n this.generic_error = args.generic_error;\n this.wrapper = '.sv-wc-external-checkout';\n this.container = '.buttons-container';\n this.button = '.sv-wc-apple-pay-button';\n }\n // Determines if Apple Pay is available.\n // @since 4.7.0\n // @return bool\n is_available() {\n if (!window.ApplePaySession) return false;\n return ApplePaySession.canMakePaymentsWithActiveCard(this.merchant_id).then((canMakePayments)=>{\n return canMakePayments;\n });\n }\n // Initializes the handler.\n // @since 4.7.0\n init() {\n // hide the wrapper if Apple Pay is the only button\n if ($(this.container).children().length === 1) $(this.wrapper).hide();\n if (!this.is_available()) return;\n // initialize for the various pages\n if ($('form.cart').length) this.init_product_page();\n else if ($('form.woocommerce-cart-form').length) this.init_cart_page();\n else if ($('form.woocommerce-checkout').length) this.init_checkout_page();\n // bail if no UI was initialized\n if (!this.ui_element) return;\n if (this.payment_request) {\n $(this.button).show();\n $(this.wrapper).show();\n }\n return $(document.body).on('click', '.sv-wc-apple-pay-button', (e)=>{\n var error;\n e.preventDefault();\n this.block_ui();\n try {\n this.session = this.get_new_session(this.payment_request);\n // set the payment card events\n this.session.onvalidatemerchant = (event)=>{\n return this.on_validate_merchant(event);\n };\n this.session.onpaymentmethodselected = (event)=>{\n return this.on_payment_method_selected(event);\n };\n this.session.onshippingcontactselected = (event)=>{\n return this.on_shipping_contact_selected(event);\n };\n this.session.onshippingmethodselected = (event)=>{\n return this.on_shipping_method_selected(event);\n };\n this.session.onpaymentauthorized = (event)=>{\n return this.on_payment_authorized(event);\n };\n this.session.oncancel = (event)=>{\n return this.on_cancel_payment(event);\n };\n return this.session.begin();\n } catch (error1) {\n error = error1;\n return this.fail_payment(error);\n }\n });\n }\n init_product_page() {\n return this.ui_element = $('form.cart');\n }\n init_cart_page() {\n this.ui_element = $('form.woocommerce-cart-form').parents('div.woocommerce');\n // re-init if the cart totals are updated\n return $(document.body).on('updated_cart_totals', ()=>{\n return this.reset_payment_request();\n });\n }\n init_checkout_page() {\n this.ui_element = $('form.woocommerce-checkout');\n return $(document.body).on('updated_checkout', ()=>{\n // re-init if the checkout is updated\n return this.reset_payment_request();\n });\n }\n // Gets a new Apple Pay session.\n // @since 5.6.0\n // @param [Object] payment_request payment request object\n // @return ApplePaySession\n get_new_session(payment_request) {\n return new ApplePaySession(this.get_sdk_version(), payment_request);\n }\n // Gets the Apple SDK version to use.\n // @since 5.6.0\n // @return int\n get_sdk_version() {\n return 2;\n }\n on_validate_merchant(event) {\n return this.validate_merchant(event.validationURL).then((merchant_session)=>{\n merchant_session = JSON.parse(merchant_session);\n return this.session.completeMerchantValidation(merchant_session);\n }, (response)=>{\n this.session.abort();\n return this.fail_payment('Merchant could no be validated. ' + response.message);\n });\n }\n validate_merchant(url) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_validate_merchant`,\n 'nonce': this.validate_nonce,\n 'merchant_id': this.merchant_id,\n 'url': url\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) return resolve(response.data);\n else return reject(response.data);\n });\n });\n }\n on_payment_method_selected(event) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_recalculate_totals`,\n 'nonce': this.recalculate_totals_nonce\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) {\n data = response.data;\n return resolve(this.session.completePaymentMethodSelection(data.total, data.line_items));\n } else {\n console.error('[Apple Pay] Error selecting a shipping contact. ' + response.data.message);\n return reject(this.session.completePaymentMethodSelection(this.payment_request.total, this.payment_request.lineItems));\n }\n });\n });\n }\n on_shipping_contact_selected(event) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_recalculate_totals`,\n 'nonce': this.recalculate_totals_nonce,\n 'contact': event.shippingContact\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) {\n data = response.data;\n return resolve(this.session.completeShippingContactSelection(ApplePaySession.STATUS_SUCCESS, data.shipping_methods, data.total, data.line_items));\n } else {\n console.error('[Apple Pay] Error selecting a shipping contact. ' + response.data.message);\n return reject(this.session.completeShippingContactSelection(ApplePaySession.STATUS_FAILURE, [], this.payment_request.total, this.payment_request.lineItems));\n }\n });\n });\n }\n on_shipping_method_selected(event) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n 'action': `wc_${this.gateway_id}_apple_pay_recalculate_totals`,\n 'nonce': this.recalculate_totals_nonce,\n 'method': event.shippingMethod.identifier\n };\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) {\n data = response.data;\n return resolve(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_SUCCESS, data.total, data.line_items));\n } else {\n console.error('[Apple Pay] Error selecting a shipping method. ' + response.data.message);\n return reject(this.session.completeShippingMethodSelection(ApplePaySession.STATUS_FAILURE, this.payment_request.total, this.payment_request.lineItems));\n }\n });\n });\n }\n on_payment_authorized(event) {\n return this.process_authorization(event.payment).then((response)=>{\n this.set_payment_status(true);\n return this.complete_purchase(response);\n }, (response)=>{\n this.set_payment_status(false);\n return this.fail_payment('Payment could no be processed. ' + response.message);\n });\n }\n process_authorization(payment) {\n return new Promise((resolve, reject)=>{\n var data;\n data = {\n action: `wc_${this.gateway_id}_apple_pay_process_payment`,\n nonce: this.process_nonce,\n payment: JSON.stringify(payment)\n };\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) return resolve(response.data);\n else return reject(response.data);\n });\n });\n }\n on_cancel_payment(event) {\n return this.unblock_ui();\n }\n // Completes the purchase based on the gateway result.\n // @since 4.7.0\n complete_purchase(response) {\n return window.location = response.redirect;\n }\n // Fails the purchase based on the gateway result.\n // @since 4.7.0\n fail_payment(error) {\n console.error('[Apple Pay] ' + error);\n this.unblock_ui();\n return this.render_errors([\n this.generic_error\n ]);\n }\n // Sets the Apple Pay payment status depending on the gateway result.\n // @since 4.7.0\n set_payment_status(success) {\n var status;\n if (success) status = ApplePaySession.STATUS_SUCCESS;\n else status = ApplePaySession.STATUS_FAILURE;\n return this.session.completePayment(status);\n }\n reset_payment_request(data = {}) {\n this.block_ui();\n return this.get_payment_request(data).then((response)=>{\n $(this.button).show();\n $(this.wrapper).show();\n this.payment_request = JSON.parse(response);\n return this.unblock_ui();\n }, (response)=>{\n console.error('[Apple Pay] Could not build payment request. ' + response.message);\n $(this.button).hide();\n // hide the wrapper if Apple Pay is the only button\n if ($(this.container).children().length === 1) $(this.wrapper).hide();\n return this.unblock_ui();\n });\n }\n get_payment_request(data) {\n return new Promise((resolve, reject)=>{\n var base_data;\n base_data = {\n 'action': `wc_${this.gateway_id}_apple_pay_get_payment_request`\n };\n $.extend(data, base_data);\n // retrieve a payment request object\n return $.post(this.ajax_url, data, (response)=>{\n if (response.success) return resolve(response.data);\n else return reject(response.data);\n });\n });\n }\n // Renders any new errors and bring them into the viewport.\n // @since 4.7.0\n render_errors(errors) {\n // hide and remove any previous errors\n $('.woocommerce-error, .woocommerce-message').remove();\n // add errors\n this.ui_element.prepend('
  • ' + errors.join('
  • ') + '
');\n // unblock UI\n this.ui_element.removeClass('processing').unblock();\n // scroll to top\n return $('html, body').animate({\n scrollTop: this.ui_element.offset().top - 100\n }, 1000);\n }\n // Blocks the payment form UI.\n // @since 4.7.0\n block_ui() {\n return this.ui_element.block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n // Unblocks the payment form UI.\n // @since 4.7.0\n unblock_ui() {\n return this.ui_element.unblock();\n }\n };\n // dispatch loaded event\n return $(document.body).trigger('sv_wc_apple_pay_handler_v6_1_0_loaded');\n });\n}).call($83dab3ad15da905a$exports);\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-apple-pay.js.map\n","###\n WooCommerce Apple Pay Handler\n Version 4.7.0\n\n Copyright (c) 2016, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n###\n\njQuery ( $ ) ->\n\n\t\"use strict\"\n\n\t# The WooCommerce Apple Pay handler base class.\n\t#\n\t# @since 4.7.0\n\tclass window.SV_WC_Apple_Pay_Handler_v6_1_0\n\n\n\t\t# Constructs the handler.\n\t\t#\n\t\t# @since 4.7.0\n\t\tconstructor: (args) ->\n\n\t\t\t@gateway_id = args.gateway_id\n\t\t\t@gateway_slug = args.gateway_slug\n\t\t\t@merchant_id = args.merchant_id\n\t\t\t@ajax_url = args.ajax_url\n\t\t\t@validate_nonce = args.validate_nonce\n\t\t\t@recalculate_totals_nonce = args.recalculate_totals_nonce\n\t\t\t@process_nonce = args.process_nonce\n\t\t\t@payment_request = args.payment_request\n\t\t\t@generic_error = args.generic_error\n\n\t\t\t@wrapper = '.sv-wc-external-checkout'\n\t\t\t@container = '.buttons-container'\n\t\t\t@button = '.sv-wc-apple-pay-button'\n\n\n\t\t# Determines if Apple Pay is available.\n\t\t#\n\t\t# @since 4.7.0\n\t\t# @return bool\n\t\tis_available: ->\n\n\t\t\treturn false unless window.ApplePaySession\n\n\t\t\tApplePaySession.canMakePaymentsWithActiveCard( @merchant_id ).then ( canMakePayments ) =>\n\n\t\t\t\treturn canMakePayments\n\n\n\t\t# Initializes the handler.\n\t\t#\n\t\t# @since 4.7.0\n\t\tinit: ->\n\n\t\t\t# hide the wrapper if Apple Pay is the only button\n\t\t\tif $( @container ).children().length is 1\n\t\t\t\t$( @wrapper ).hide()\n\n\t\t\treturn unless this.is_available()\n\n\t\t\t# initialize for the various pages\n\t\t\tif $( 'form.cart' ).length\n\t\t\t\tthis.init_product_page()\n\t\t\telse if $( 'form.woocommerce-cart-form' ).length\n\t\t\t\tthis.init_cart_page()\n\t\t\telse if $( 'form.woocommerce-checkout' ).length\n\t\t\t\tthis.init_checkout_page()\n\n\t\t\t# bail if no UI was initialized\n\t\t\treturn unless @ui_element\n\n\t\t\tif @payment_request\n\t\t\t\t$( @button ).show()\n\t\t\t\t$( @wrapper ).show()\n\n\t\t\t$( document.body ).on 'click', '.sv-wc-apple-pay-button', ( e ) =>\n\n\t\t\t\te.preventDefault()\n\n\t\t\t\tthis.block_ui()\n\n\t\t\t\ttry\n\n\t\t\t\t\t@session = this.get_new_session( @payment_request )\n\n\t\t\t\t\t# set the payment card events\n\t\t\t\t\t@session.onvalidatemerchant = ( event ) => this.on_validate_merchant( event )\n\t\t\t\t\t@session.onpaymentmethodselected = ( event ) => this.on_payment_method_selected( event )\n\t\t\t\t\t@session.onshippingcontactselected = ( event ) => this.on_shipping_contact_selected( event )\n\t\t\t\t\t@session.onshippingmethodselected = ( event ) => this.on_shipping_method_selected( event )\n\t\t\t\t\t@session.onpaymentauthorized = ( event ) => this.on_payment_authorized( event )\n\t\t\t\t\t@session.oncancel = ( event ) => this.on_cancel_payment( event )\n\n\t\t\t\t\t@session.begin()\n\n\t\t\t\tcatch error\n\n\t\t\t\t\tthis.fail_payment( error )\n\n\n\t\t# Initializes the product page.\n\t\t#\n\t\t# @since 5.6.0\n\t\tinit_product_page: =>\n\n\t\t\t@ui_element = $( 'form.cart' )\n\n\n\t\t# Initializes the cart page.\n\t\t#\n\t\t# @since 5.6.0\n\t\tinit_cart_page: =>\n\n\t\t\t@ui_element = $( 'form.woocommerce-cart-form' ).parents( 'div.woocommerce' )\n\n\t\t\t# re-init if the cart totals are updated\n\t\t\t$( document.body ).on 'updated_cart_totals', =>\n\n\t\t\t\tthis.reset_payment_request()\n\n\n\t\t# Initializes the checkout page.\n\t\t#\n\t\t# @since 5.6.0\n\t\tinit_checkout_page: =>\n\n\t\t\t@ui_element = $( 'form.woocommerce-checkout' )\n\n\t\t\t$( document.body ).on 'updated_checkout', =>\n\n\t\t\t\t# re-init if the checkout is updated\n\t\t\t\tthis.reset_payment_request()\n\n\n\t\t# Gets a new Apple Pay session.\n\t\t#\n\t\t# @since 5.6.0\n\t\t#\n\t\t# @param [Object] payment_request payment request object\n\t\t# @return ApplePaySession\n\t\tget_new_session: ( payment_request ) ->\n\n\t\t\treturn new ApplePaySession( this.get_sdk_version(), payment_request )\n\n\n\t\t# Gets the Apple SDK version to use.\n\t\t#\n\t\t# @since 5.6.0\n\t\t# @return int\n\t\tget_sdk_version: ->\n\n\t\t\treturn 2\n\n\n\t\t# The callback for after the merchant data is validated.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_validate_merchant: ( event ) =>\n\n\t\t\tthis.validate_merchant( event.validationURL ).then ( merchant_session ) =>\n\n\t\t\t\tmerchant_session = JSON.parse( merchant_session )\n\n\t\t\t\t@session.completeMerchantValidation( merchant_session )\n\n\t\t\t, ( response ) =>\n\n\t\t\t\t@session.abort()\n\n\t\t\t\tthis.fail_payment 'Merchant could no be validated. ' + response.message\n\n\n\t\t# Validates the merchant data.\n\t\t#\n\t\t# @since 4.7.0\n\t\t# @return object\n\t\tvalidate_merchant: ( url ) => new Promise ( resolve, reject ) =>\n\n\t\t\tdata = {\n\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_validate_merchant\",\n\t\t\t\t'nonce': @validate_nonce,\n\t\t\t\t'merchant_id': @merchant_id,\n\t\t\t\t'url': url\n\t\t\t}\n\n\t\t\t# retrieve a payment request object\n\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\tif response.success\n\t\t\t\t\tresolve response.data\n\t\t\t\telse\n\t\t\t\t\treject response.data\n\n\n\t\t# Fires after a payment method has been selected.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_payment_method_selected: ( event ) =>\n\n\t\t\tnew Promise ( resolve, reject ) =>\n\n\t\t\t\tdata = {\n\t\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_recalculate_totals\",\n\t\t\t\t\t'nonce': @recalculate_totals_nonce,\n\t\t\t\t}\n\n\t\t\t\t# retrieve a payment request object\n\t\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\t\tif response.success\n\n\t\t\t\t\t\tdata = response.data\n\n\t\t\t\t\t\tresolve @session.completePaymentMethodSelection( data.total, data.line_items )\n\n\t\t\t\t\telse\n\n\t\t\t\t\t\tconsole.error '[Apple Pay] Error selecting a shipping contact. ' + response.data.message\n\n\t\t\t\t\t\treject @session.completePaymentMethodSelection( @payment_request.total, @payment_request.lineItems )\n\n\n\t\t# Fires after a shipping contact has been selected.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_shipping_contact_selected: ( event ) =>\n\n\t\t\tnew Promise ( resolve, reject ) =>\n\n\t\t\t\tdata = {\n\t\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_recalculate_totals\",\n\t\t\t\t\t'nonce': @recalculate_totals_nonce,\n\t\t\t\t\t'contact': event.shippingContact\n\t\t\t\t}\n\n\t\t\t\t# retrieve a payment request object\n\t\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\t\tif response.success\n\n\t\t\t\t\t\tdata = response.data\n\n\t\t\t\t\t\tresolve @session.completeShippingContactSelection( ApplePaySession.STATUS_SUCCESS, data.shipping_methods, data.total, data.line_items )\n\n\t\t\t\t\telse\n\n\t\t\t\t\t\tconsole.error '[Apple Pay] Error selecting a shipping contact. ' + response.data.message\n\n\t\t\t\t\t\treject @session.completeShippingContactSelection( ApplePaySession.STATUS_FAILURE, [], @payment_request.total, @payment_request.lineItems )\n\n\n\t\t# Fires after a shipping method has been selected.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_shipping_method_selected: ( event ) =>\n\n\t\t\tnew Promise ( resolve, reject ) =>\n\n\t\t\t\tdata = {\n\t\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_recalculate_totals\",\n\t\t\t\t\t'nonce': @recalculate_totals_nonce,\n\t\t\t\t\t'method': event.shippingMethod.identifier\n\t\t\t\t}\n\n\t\t\t\t# retrieve a payment request object\n\t\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\t\tif response.success\n\n\t\t\t\t\t\tdata = response.data\n\n\t\t\t\t\t\tresolve @session.completeShippingMethodSelection( ApplePaySession.STATUS_SUCCESS, data.total, data.line_items )\n\n\t\t\t\t\telse\n\n\t\t\t\t\t\tconsole.error '[Apple Pay] Error selecting a shipping method. ' + response.data.message\n\n\t\t\t\t\t\treject @session.completeShippingMethodSelection( ApplePaySession.STATUS_FAILURE, @payment_request.total, @payment_request.lineItems )\n\n\n\t\t# The callback for after the payment data is authorized.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_payment_authorized: ( event ) =>\n\n\t\t\tthis.process_authorization( event.payment ).then ( response ) =>\n\n\t\t\t\tthis.set_payment_status( true )\n\n\t\t\t\tthis.complete_purchase( response )\n\n\t\t\t, ( response ) =>\n\n\t\t\t\tthis.set_payment_status( false )\n\n\t\t\t\tthis.fail_payment 'Payment could no be processed. ' + response.message\n\n\n\t\t# Processes the transaction data.\n\t\t#\n\t\t# @since 4.7.0\n\t\tprocess_authorization: ( payment ) => new Promise ( resolve, reject ) =>\n\n\t\t\tdata = {\n\t\t\t\taction: \"wc_#{ @gateway_id }_apple_pay_process_payment\",\n\t\t\t\tnonce: @process_nonce,\n\t\t\t\tpayment: JSON.stringify( payment )\n\t\t\t}\n\n\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\tif response.success\n\t\t\t\t\tresolve response.data\n\t\t\t\telse\n\t\t\t\t\treject response.data\n\n\n\t\t# The callback for when the payment card is cancelled/dismissed.\n\t\t#\n\t\t# @since 4.7.0\n\t\ton_cancel_payment: ( event ) =>\n\n\t\t\tthis.unblock_ui()\n\n\n\t\t# Completes the purchase based on the gateway result.\n\t\t#\n\t\t# @since 4.7.0\n\t\tcomplete_purchase: ( response ) ->\n\n\t\t\twindow.location = response.redirect\n\n\n\t\t# Fails the purchase based on the gateway result.\n\t\t#\n\t\t# @since 4.7.0\n\t\tfail_payment: ( error ) ->\n\n\t\t\tconsole.error '[Apple Pay] ' + error\n\n\t\t\tthis.unblock_ui()\n\n\t\t\tthis.render_errors( [ @generic_error ] )\n\n\n\t\t# Sets the Apple Pay payment status depending on the gateway result.\n\t\t#\n\t\t# @since 4.7.0\n\t\tset_payment_status: ( success ) ->\n\n\t\t\tif success\n\t\t\t\tstatus = ApplePaySession.STATUS_SUCCESS\n\t\t\telse\n\t\t\t\tstatus = ApplePaySession.STATUS_FAILURE\n\n\t\t\t@session.completePayment( status )\n\n\n\t\t# Resets the payment request via AJAX.\n\t\t#\n\t\t# Extending handlers can call this on change events to refresh the data.\n\t\t#\n\t\t# @since 4.7.0\n\t\treset_payment_request: ( data = {} ) =>\n\n\t\t\tthis.block_ui()\n\n\t\t\tthis.get_payment_request( data ).then ( response ) =>\n\n\t\t\t\t$( @button ).show()\n\t\t\t\t$( @wrapper ).show()\n\n\t\t\t\t@payment_request = JSON.parse( response )\n\n\t\t\t\tthis.unblock_ui()\n\n\t\t\t, ( response ) =>\n\n\t\t\t\tconsole.error '[Apple Pay] Could not build payment request. ' + response.message\n\n\t\t\t\t$( @button ).hide()\n\t\t\t\t# hide the wrapper if Apple Pay is the only button\n\t\t\t\tif $( @container ).children().length is 1\n\t\t\t\t\t$( @wrapper ).hide()\n\n\t\t\t\tthis.unblock_ui()\n\n\n\t\t# Gets the payment request via AJAX.\n\t\t#\n\t\t# @since 4.7.0\n\t\tget_payment_request: ( data ) => new Promise ( resolve, reject ) =>\n\n\t\t\tbase_data = {\n\t\t\t\t'action': \"wc_#{ @gateway_id }_apple_pay_get_payment_request\"\n\t\t\t}\n\n\t\t\t$.extend data, base_data\n\n\t\t\t# retrieve a payment request object\n\t\t\t$.post @ajax_url, data, ( response ) =>\n\n\t\t\t\tif response.success\n\t\t\t\t\tresolve response.data\n\t\t\t\telse\n\t\t\t\t\treject response.data\n\n\n\t\t# Renders any new errors and bring them into the viewport.\n\t\t#\n\t\t# @since 4.7.0\n\t\trender_errors: ( errors ) ->\n\n\t\t\t# hide and remove any previous errors\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove()\n\n\t\t\t# add errors\n\t\t\t@ui_element.prepend '
  • ' + errors.join( '
  • ' ) + '
'\n\n\t\t\t# unblock UI\n\t\t\t@ui_element.removeClass( 'processing' ).unblock()\n\n\t\t\t# scroll to top\n\t\t\t$( 'html, body' ).animate( { scrollTop: @ui_element.offset().top - 100 }, 1000 )\n\n\n\t\t# Blocks the payment form UI.\n\t\t#\n\t\t# @since 4.7.0\n\t\tblock_ui: -> @ui_element.block( message: null, overlayCSS: background: '#fff', opacity: 0.6 )\n\n\n\t\t# Unblocks the payment form UI.\n\t\t#\n\t\t# @since 4.7.0\n\t\tunblock_ui: -> @ui_element.unblock()\n\n\n\t# dispatch loaded event\n\t$( document.body ).trigger( 'sv_wc_apple_pay_handler_v6_1_0_loaded' )\n"],"names":["jQuery","$","window","SV_WC_Apple_Pay_Handler_v6_1_0","constructor","args","init_product_page","bind","init_cart_page","init_checkout_page","on_validate_merchant","validate_merchant","on_payment_method_selected","on_shipping_contact_selected","on_shipping_method_selected","on_payment_authorized","process_authorization","on_cancel_payment","reset_payment_request","get_payment_request","gateway_id","gateway_slug","merchant_id","ajax_url","validate_nonce","recalculate_totals_nonce","process_nonce","payment_request","generic_error","wrapper","container","button","is_available","ApplePaySession","canMakePaymentsWithActiveCard","then","canMakePayments","init","children","length","hide","ui_element","show","document","body","on","e","preventDefault","block_ui","session","get_new_session","onvalidatemerchant","event","onpaymentmethodselected","onshippingcontactselected","onshippingmethodselected","onpaymentauthorized","oncancel","begin","error1","fail_payment","parents","get_sdk_version","validationURL","merchant_session","JSON","parse","completeMerchantValidation","response","abort","message","url","Promise","resolve","reject","data","post","success","completePaymentMethodSelection","total","line_items","console","error","lineItems","shippingContact","completeShippingContactSelection","STATUS_SUCCESS","shipping_methods","STATUS_FAILURE","shippingMethod","identifier","completeShippingMethodSelection","payment","set_payment_status","complete_purchase","action","nonce","stringify","unblock_ui","location","redirect","render_errors","status","completePayment","base_data","extend","errors","remove","prepend","join","removeClass","unblock","animate","scrollTop","offset","top","block","overlayCSS","background","opacity","trigger","call"],"version":3,"file":"sv-wc-payment-gateway-apple-pay.js.map"} \ No newline at end of file diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js index 1baae43b1..6be56205a 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js @@ -1,2 +1,2 @@ -jQuery(function(e){window.SV_WC_Google_Pay_Handler_v6_0_1=class{constructor(e){let{plugin_id:t,merchant_id:a,merchant_name:o,gateway_id:n,gateway_id_dasherized:s,gateway_merchant_id:i,environment:r,ajax_url:l,recalculate_totals_nonce:c,process_nonce:h,button_style:d,card_types:m,available_countries:g,currency_code:u,needs_shipping:p,generic_error:y}=e;this.gatewayID=n,this.gatewayMerchantID=i,this.merchantID=a,this.merchantName=o,this.environment=r,this.ajaxURL=l,this.recalculateTotalsNonce=c,this.processNonce=h,this.buttonStyle=d,this.availableCountries=g,this.currencyCode=u,this.needsShipping=p,this.genericError=y,e.product_id&&(this.productID=e.product_id),this.baseRequest={apiVersion:2,apiVersionMinor:0};let P={type:"PAYMENT_GATEWAY",parameters:{gateway:t,gatewayMerchantId:this.gatewayMerchantID}};this.baseCardPaymentMethod={type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY","CRYPTOGRAM_3DS"],allowedCardNetworks:m,billingAddressRequired:!0,billingAddressParameters:{format:"FULL",phoneNumberRequired:!0}}},this.cardPaymentMethod=Object.assign({},this.baseCardPaymentMethod,{tokenizationSpecification:P}),this.paymentsClient=null}getGoogleIsReadyToPayRequest(){return Object.assign({},this.baseRequest,{allowedPaymentMethods:[this.baseCardPaymentMethod]})}getGooglePaymentDataRequest(e){return this.getGoogleTransactionInfo(t=>{let a=Object.assign({},this.baseRequest);a.allowedPaymentMethods=[this.cardPaymentMethod],a.transactionInfo=t,a.merchantInfo={merchantId:this.merchantID,merchantName:this.merchantName},a.emailRequired=!0,a.callbackIntents=["PAYMENT_AUTHORIZATION"],this.needsShipping&&(a.callbackIntents=["SHIPPING_ADDRESS","SHIPPING_OPTION","PAYMENT_AUTHORIZATION"],a.shippingAddressRequired=!0,a.shippingAddressParameters=this.getGoogleShippingAddressParameters(),a.shippingOptionRequired=!0),e(a)})}getGooglePaymentsClient(){if(null===this.paymentsClient){let e={environment:this.environment,merchantInfo:{merchantName:this.merchantName,merchantId:this.merchantID},paymentDataCallbacks:{onPaymentAuthorized:e=>this.onPaymentAuthorized(e)}};this.needsShipping&&(e.paymentDataCallbacks.onPaymentDataChanged=e=>this.onPaymentDataChanged(e)),this.paymentsClient=new google.payments.api.PaymentsClient(e)}return this.paymentsClient}onPaymentAuthorized(e){return this.blockUI(),new Promise((t,a)=>{try{this.processPayment(e,t)}catch(e){a({transactionState:"ERROR",error:{intent:"PAYMENT_AUTHORIZATION",message:"Payment could not be processed",reason:"PAYMENT_DATA_INVALID"}})}this.unblockUI()})}onPaymentDataChanged(e){return this.blockUI(),new Promise((t,a)=>{try{let a=e.shippingAddress,o=e.shippingOptionData,n="";"SHIPPING_OPTION"==e.callbackTrigger&&(n=o.id),this.getUpdatedTotals(a,n,e=>{0==e.newShippingOptionParameters.shippingOptions.length&&(e={error:this.getGoogleUnserviceableAddressError()}),t(e)})}catch(e){this.failPayment("Could not load updated totals or process payment data request update. "+e)}this.unblockUI()})}getGoogleTransactionInfo(t){let a={action:`wc_${this.gatewayID}_google_pay_get_transaction_info`};this.productID&&(a.productID=this.productID),e.post(this.ajaxURL,a,e=>{e.success?t(JSON.parse(e.data)):this.failPayment("Could not build transaction info. "+e.data.message)})}getUpdatedTotals(t,a,o){let n={action:`wc_${this.gatewayID}_google_pay_recalculate_totals`,nonce:this.recalculateTotalsNonce,shippingAddress:t,shippingMethod:a};this.productID&&(n.productID=this.productID),e.post(this.ajaxURL,n,e=>{e.success?o(JSON.parse(e.data)):this.failPayment("Could not recalculate totals. "+e.data.message)})}getGoogleShippingAddressParameters(){return{allowedCountryCodes:this.availableCountries}}getGoogleUnserviceableAddressError(){return{reason:"SHIPPING_ADDRESS_UNSERVICEABLE",message:"Cannot ship to the selected address",intent:"SHIPPING_ADDRESS"}}addGooglePayButton(){let e=this.getGooglePaymentsClient().createButton({onClick:e=>this.onGooglePaymentButtonClicked(e),buttonColor:this.buttonStyle,buttonSizeMode:"fill"});document.getElementById("sv-wc-google-pay-button-container").appendChild(e)}prefetchGooglePaymentData(){this.getGooglePaymentDataRequest(e=>{e.transactionInfo={totalPriceStatus:"NOT_CURRENTLY_KNOWN",currencyCode:this.currencyCode},this.getGooglePaymentsClient().prefetchPaymentData(e)})}processPayment(t,a){let o={action:`wc_${this.gatewayID}_google_pay_process_payment`,nonce:this.processNonce,paymentData:JSON.stringify(t)};return this.productID&&!this.needsShipping&&(o.productID=this.productID),e.post(this.ajaxURL,o,e=>{e.success?(a({transactionState:"SUCCESS"}),window.location=e.data.redirect):(a({transactionState:"ERROR",error:{intent:"SHIPPING_ADDRESS",message:"Invalid data",reason:"PAYMENT_DATA_INVALID"}}),this.failPayment("Payment could not be processed. "+e.data.message))})}onGooglePaymentButtonClicked(e){e.preventDefault(),this.blockUI(),this.getGooglePaymentDataRequest(e=>{let t=this.getGooglePaymentsClient();try{t.loadPaymentData(e)}catch(e){this.failPayment("Could not load payment data. "+e)}this.unblockUI()})}init(){if(e("form.cart").length)this.initProductPage();else if(e("form.woocommerce-cart-form").length)this.initCartPage();else{if(!e("form.woocommerce-checkout").length)return;this.initCheckoutPage()}this.initGooglePay()}initGooglePay(){this.getGooglePaymentsClient().isReadyToPay(this.getGoogleIsReadyToPayRequest()).then(e=>{e.result&&(this.addGooglePayButton(),this.prefetchGooglePaymentData())}).catch(e=>{this.failPayment("Google Pay is not ready. "+e)})}initProductPage(){this.uiElement=e("form.cart")}initCartPage(){this.uiElement=e("form.woocommerce-cart-form").parents("div.woocommerce"),e(document.body).on("updated_cart_totals",()=>{this.initGooglePay()})}initCheckoutPage(){this.uiElement=e("form.woocommerce-checkout")}failPayment(e){console.error("[Google Pay] "+e),this.unblockUI(),this.renderErrors([this.genericError])}renderErrors(t){e(".woocommerce-error, .woocommerce-message").remove(),this.uiElement.prepend('
  • '+t.join("
  • ")+"
"),this.uiElement.removeClass("processing").unblock(),e("html, body").animate({scrollTop:this.uiElement.offset().top-100},1e3)}blockUI(){this.uiElement.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblockUI(){this.uiElement.unblock()}},e(document.body).trigger("sv_wc_google_pay_handler_v6_0_1_loaded")}); +jQuery(function(e){window.SV_WC_Google_Pay_Handler_v6_1_0=class{constructor(e){let{plugin_id:t,merchant_id:a,merchant_name:o,gateway_id:n,gateway_id_dasherized:s,gateway_merchant_id:i,environment:r,ajax_url:l,recalculate_totals_nonce:c,process_nonce:h,button_style:d,card_types:m,available_countries:g,currency_code:u,needs_shipping:p,generic_error:y}=e;this.gatewayID=n,this.gatewayMerchantID=i,this.merchantID=a,this.merchantName=o,this.environment=r,this.ajaxURL=l,this.recalculateTotalsNonce=c,this.processNonce=h,this.buttonStyle=d,this.availableCountries=g,this.currencyCode=u,this.needsShipping=p,this.genericError=y,e.product_id&&(this.productID=e.product_id),this.baseRequest={apiVersion:2,apiVersionMinor:0};let P={type:"PAYMENT_GATEWAY",parameters:{gateway:t,gatewayMerchantId:this.gatewayMerchantID}};this.baseCardPaymentMethod={type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY","CRYPTOGRAM_3DS"],allowedCardNetworks:m,billingAddressRequired:!0,billingAddressParameters:{format:"FULL",phoneNumberRequired:!0}}},this.cardPaymentMethod=Object.assign({},this.baseCardPaymentMethod,{tokenizationSpecification:P}),this.paymentsClient=null}getGoogleIsReadyToPayRequest(){return Object.assign({},this.baseRequest,{allowedPaymentMethods:[this.baseCardPaymentMethod]})}getGooglePaymentDataRequest(e){return this.getGoogleTransactionInfo(t=>{let a=Object.assign({},this.baseRequest);a.allowedPaymentMethods=[this.cardPaymentMethod],a.transactionInfo=t,a.merchantInfo={merchantId:this.merchantID,merchantName:this.merchantName},a.emailRequired=!0,a.callbackIntents=["PAYMENT_AUTHORIZATION"],this.needsShipping&&(a.callbackIntents=["SHIPPING_ADDRESS","SHIPPING_OPTION","PAYMENT_AUTHORIZATION"],a.shippingAddressRequired=!0,a.shippingAddressParameters=this.getGoogleShippingAddressParameters(),a.shippingOptionRequired=!0),e(a)})}getGooglePaymentsClient(){if(null===this.paymentsClient){let e={environment:this.environment,merchantInfo:{merchantName:this.merchantName,merchantId:this.merchantID},paymentDataCallbacks:{onPaymentAuthorized:e=>this.onPaymentAuthorized(e)}};this.needsShipping&&(e.paymentDataCallbacks.onPaymentDataChanged=e=>this.onPaymentDataChanged(e)),this.paymentsClient=new google.payments.api.PaymentsClient(e)}return this.paymentsClient}onPaymentAuthorized(e){return this.blockUI(),new Promise((t,a)=>{try{this.processPayment(e,t)}catch(e){a({transactionState:"ERROR",error:{intent:"PAYMENT_AUTHORIZATION",message:"Payment could not be processed",reason:"PAYMENT_DATA_INVALID"}})}this.unblockUI()})}onPaymentDataChanged(e){return this.blockUI(),new Promise((t,a)=>{try{let a=e.shippingAddress,o=e.shippingOptionData,n="";"SHIPPING_OPTION"==e.callbackTrigger&&(n=o.id),this.getUpdatedTotals(a,n,e=>{0==e.newShippingOptionParameters.shippingOptions.length&&(e={error:this.getGoogleUnserviceableAddressError()}),t(e)})}catch(e){this.failPayment("Could not load updated totals or process payment data request update. "+e)}this.unblockUI()})}getGoogleTransactionInfo(t){let a={action:`wc_${this.gatewayID}_google_pay_get_transaction_info`};this.productID&&(a.productID=this.productID),e.post(this.ajaxURL,a,e=>{e.success?t(JSON.parse(e.data)):this.failPayment("Could not build transaction info. "+e.data.message)})}getUpdatedTotals(t,a,o){let n={action:`wc_${this.gatewayID}_google_pay_recalculate_totals`,nonce:this.recalculateTotalsNonce,shippingAddress:t,shippingMethod:a};this.productID&&(n.productID=this.productID),e.post(this.ajaxURL,n,e=>{e.success?o(JSON.parse(e.data)):this.failPayment("Could not recalculate totals. "+e.data.message)})}getGoogleShippingAddressParameters(){return{allowedCountryCodes:this.availableCountries}}getGoogleUnserviceableAddressError(){return{reason:"SHIPPING_ADDRESS_UNSERVICEABLE",message:"Cannot ship to the selected address",intent:"SHIPPING_ADDRESS"}}addGooglePayButton(){let e=this.getGooglePaymentsClient().createButton({onClick:e=>this.onGooglePaymentButtonClicked(e),buttonColor:this.buttonStyle,buttonSizeMode:"fill"});document.getElementById("sv-wc-google-pay-button-container").appendChild(e)}prefetchGooglePaymentData(){this.getGooglePaymentDataRequest(e=>{e.transactionInfo={totalPriceStatus:"NOT_CURRENTLY_KNOWN",currencyCode:this.currencyCode},this.getGooglePaymentsClient().prefetchPaymentData(e)})}processPayment(t,a){let o={action:`wc_${this.gatewayID}_google_pay_process_payment`,nonce:this.processNonce,paymentData:JSON.stringify(t)};return this.productID&&!this.needsShipping&&(o.productID=this.productID),e.post(this.ajaxURL,o,e=>{e.success?(a({transactionState:"SUCCESS"}),window.location=e.data.redirect):(a({transactionState:"ERROR",error:{intent:"SHIPPING_ADDRESS",message:"Invalid data",reason:"PAYMENT_DATA_INVALID"}}),this.failPayment("Payment could not be processed. "+e.data.message))})}onGooglePaymentButtonClicked(e){e.preventDefault(),this.blockUI(),this.getGooglePaymentDataRequest(e=>{let t=this.getGooglePaymentsClient();try{t.loadPaymentData(e)}catch(e){this.failPayment("Could not load payment data. "+e)}this.unblockUI()})}init(){if(e("form.cart").length)this.initProductPage();else if(e("form.woocommerce-cart-form").length)this.initCartPage();else{if(!e("form.woocommerce-checkout").length)return;this.initCheckoutPage()}this.initGooglePay()}initGooglePay(){this.getGooglePaymentsClient().isReadyToPay(this.getGoogleIsReadyToPayRequest()).then(e=>{e.result&&(this.addGooglePayButton(),this.prefetchGooglePaymentData())}).catch(e=>{this.failPayment("Google Pay is not ready. "+e)})}initProductPage(){this.uiElement=e("form.cart")}initCartPage(){this.uiElement=e("form.woocommerce-cart-form").parents("div.woocommerce"),e(document.body).on("updated_cart_totals",()=>{this.initGooglePay()})}initCheckoutPage(){this.uiElement=e("form.woocommerce-checkout")}failPayment(e){console.error("[Google Pay] "+e),this.unblockUI(),this.renderErrors([this.genericError])}renderErrors(t){e(".woocommerce-error, .woocommerce-message").remove(),this.uiElement.prepend('
  • '+t.join("
  • ")+"
"),this.uiElement.removeClass("processing").unblock(),e("html, body").animate({scrollTop:this.uiElement.offset().top-100},1e3)}blockUI(){this.uiElement.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblockUI(){this.uiElement.unblock()}},e(document.body).trigger("sv_wc_google_pay_handler_v6_1_0_loaded")}); //# sourceMappingURL=sv-wc-payment-gateway-google-pay.js.map diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js.map b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js.map index 5cfe1a415..ccb50c242 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js.map +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-google-pay.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-google-pay.js"],"sourcesContent":["(() => {\njQuery(function($) {\n \"use strict\";\n /**\n\t * Google Pay handler.\n\t *\n\t * @since 5.10.0\n\t *\n\t * @type {SV_WC_Google_Pay_Handler_v6_0_1} object\n\t */ window.SV_WC_Google_Pay_Handler_v6_0_1 = class SV_WC_Google_Pay_Handler_v6_0_1 {\n /**\n\t\t * Handler constructor.\n\t\t *\n\t\t * @since 5.10.0\n\t\t *\n\t\t * @param {Object} params The plugin ID\n\t\t * @param {string} params.plugin_id The plugin ID\n\t\t * @param {string} params.merchant_id The merchant ID\n\t\t * @param {string} params.merchant_name The site name\n\t\t * @param {string} params.gateway_id The gateway ID\n\t\t * @param {string} params.gateway_id_dasherized The gateway ID dasherized\n\t\t * @param {string} params.gateway_merchant_id The gateway merchant ID\n\t\t * @param {string} params.environment The gateway environment (PRODUCTION or TEST)\n\t\t * @param {string} params.ajax_url The AJAX URL\n\t\t * @param {string} params.recalculate_totals_nonce Nonce for the recalculate_totals AJAX action\n\t\t * @param {string} params.process_nonce Nonce for the process AJAX action\n\t\t * @param {string} params.button_style The button style\n\t\t * @param {string[]} params.card_types The supported card types\n\t\t * @param {string[]} params.available_countries Array of two-letter country codes the gateway is available for\n\t\t * @param {string[]} params.currency_code WC configured currency\n\t\t * @param {boolean} params.needs_shipping Whether or not the cart or product needs shipping\n\t\t * @param {string} params.generic_error The generic error message\n\t\t * @param {string} params.product_id The product ID if we are on a Product page\n\t\t */ constructor(params){\n let { plugin_id: plugin_id, merchant_id: merchant_id, merchant_name: merchant_name, gateway_id: gateway_id, gateway_id_dasherized: gateway_id_dasherized, gateway_merchant_id: gateway_merchant_id, environment: environment, ajax_url: ajax_url, recalculate_totals_nonce: recalculate_totals_nonce, process_nonce: process_nonce, button_style: button_style, card_types: card_types, available_countries: available_countries, currency_code: currency_code, needs_shipping: needs_shipping, generic_error: generic_error } = params;\n this.gatewayID = gateway_id;\n this.gatewayMerchantID = gateway_merchant_id;\n this.merchantID = merchant_id;\n this.merchantName = merchant_name;\n this.environment = environment;\n this.ajaxURL = ajax_url;\n this.recalculateTotalsNonce = recalculate_totals_nonce;\n this.processNonce = process_nonce;\n this.buttonStyle = button_style;\n this.availableCountries = available_countries;\n this.currencyCode = currency_code;\n this.needsShipping = needs_shipping;\n this.genericError = generic_error;\n if (params.product_id) this.productID = params.product_id;\n /**\n\t\t\t * Card networks supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */ const allowedCardNetworks = card_types;\n /**\n\t\t\t * Define the version of the Google Pay API referenced when creating your configuration\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}\n\t\t\t */ this.baseRequest = {\n apiVersion: 2,\n apiVersionMinor: 0\n };\n /**\n\t\t\t * Card authentication methods supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t *\n\t\t\t * @todo confirm your processor supports Android device tokens for your supported card networks\n\t\t\t */ const allowedCardAuthMethods = [\n 'PAN_ONLY',\n 'CRYPTOGRAM_3DS'\n ];\n /**\n\t\t\t * Identify your gateway and your site's gateway merchant identifier\n\t\t\t *\n\t\t\t * The Google Pay API response will return an encrypted payment method capable\n\t\t\t * of being charged by a supported gateway after payer authorization\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}\n\t\t\t */ const tokenizationSpecification = {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n 'gateway': plugin_id,\n 'gatewayMerchantId': this.gatewayMerchantID\n }\n };\n /**\n\t\t\t * Describe your site's support for the CARD payment method and its required fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */ this.baseCardPaymentMethod = {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: allowedCardAuthMethods,\n allowedCardNetworks: allowedCardNetworks,\n billingAddressRequired: true,\n billingAddressParameters: {\n format: 'FULL',\n phoneNumberRequired: true\n }\n }\n };\n /**\n\t\t\t * Describe your site's support for the CARD payment method including optional fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */ this.cardPaymentMethod = Object.assign({}, this.baseCardPaymentMethod, {\n tokenizationSpecification: tokenizationSpecification\n });\n /**\n\t\t\t * An initialized google.payments.api.PaymentsClient object or null if not yet set\n\t\t\t *\n\t\t\t * @see {@link getGooglePaymentsClient}\n\t\t\t */ this.paymentsClient = null;\n }\n /**\n\t\t * Configure your site's support for payment methods supported by the Google Pay\n\t\t * API.\n\t\t *\n\t\t * Each member of allowedPaymentMethods should contain only the required fields,\n\t\t * allowing reuse of this base request when determining a viewer's ability\n\t\t * to pay and later requesting a supported payment method\n\t\t *\n\t\t * @returns {object} Google Pay API version, payment methods supported by the site\n\t\t */ getGoogleIsReadyToPayRequest() {\n return Object.assign({}, this.baseRequest, {\n allowedPaymentMethods: [\n this.baseCardPaymentMethod\n ]\n });\n }\n /**\n\t\t * Configure support for the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} PaymentDataRequest fields\n\t\t */ getGooglePaymentDataRequest(resolve) {\n return this.getGoogleTransactionInfo((transactionInfo)=>{\n const paymentDataRequest = Object.assign({}, this.baseRequest);\n paymentDataRequest.allowedPaymentMethods = [\n this.cardPaymentMethod\n ];\n paymentDataRequest.transactionInfo = transactionInfo;\n paymentDataRequest.merchantInfo = {\n merchantId: this.merchantID,\n merchantName: this.merchantName\n };\n paymentDataRequest.emailRequired = true;\n paymentDataRequest.callbackIntents = [\n 'PAYMENT_AUTHORIZATION'\n ];\n if (this.needsShipping) {\n paymentDataRequest.callbackIntents = [\n 'SHIPPING_ADDRESS',\n 'SHIPPING_OPTION',\n 'PAYMENT_AUTHORIZATION'\n ];\n paymentDataRequest.shippingAddressRequired = true;\n paymentDataRequest.shippingAddressParameters = this.getGoogleShippingAddressParameters();\n paymentDataRequest.shippingOptionRequired = true;\n }\n resolve(paymentDataRequest);\n });\n }\n /**\n\t\t * Return an active PaymentsClient or initialize\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}\n\t\t * @returns {google.payments.api.PaymentsClient} Google Pay API client\n\t\t */ getGooglePaymentsClient() {\n if (this.paymentsClient === null) {\n let args = {\n environment: this.environment,\n merchantInfo: {\n merchantName: this.merchantName,\n merchantId: this.merchantID\n },\n paymentDataCallbacks: {\n onPaymentAuthorized: (paymentData)=>this.onPaymentAuthorized(paymentData)\n }\n };\n if (this.needsShipping) args.paymentDataCallbacks.onPaymentDataChanged = (paymentData)=>this.onPaymentDataChanged(paymentData);\n this.paymentsClient = new google.payments.api.PaymentsClient(args);\n }\n return this.paymentsClient;\n }\n /**\n\t\t * Handles payment authorization callback intent.\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after a payer approves payment.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @returns Promise<{object}> Promise object to complete or fail the transaction.\n\t\t */ onPaymentAuthorized(paymentData) {\n this.blockUI();\n return new Promise((resolve, reject)=>{\n // handle the response\n try {\n this.processPayment(paymentData, resolve);\n } catch (err) {\n reject({\n transactionState: 'ERROR',\n error: {\n intent: 'PAYMENT_AUTHORIZATION',\n message: 'Payment could not be processed',\n reason: 'PAYMENT_DATA_INVALID'\n }\n });\n }\n this.unblockUI();\n });\n }\n /**\n\t\t * Handles dynamic buy flow shipping address and shipping options callback intents.\n\t\t *\n\t\t * @param {object} intermediatePaymentData response from Google Pay API a shipping address or shipping option is selected in the payment sheet.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference}\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet.\n\t\t */ onPaymentDataChanged(intermediatePaymentData) {\n this.blockUI();\n return new Promise((resolve, reject)=>{\n try {\n let shippingAddress = intermediatePaymentData.shippingAddress;\n let shippingOptionData = intermediatePaymentData.shippingOptionData;\n let chosenShippingMethod = '';\n if (intermediatePaymentData.callbackTrigger == 'SHIPPING_OPTION') chosenShippingMethod = shippingOptionData.id;\n this.getUpdatedTotals(shippingAddress, chosenShippingMethod, (paymentDataRequestUpdate)=>{\n if (paymentDataRequestUpdate.newShippingOptionParameters.shippingOptions.length == 0) paymentDataRequestUpdate = {\n error: this.getGoogleUnserviceableAddressError()\n };\n resolve(paymentDataRequestUpdate);\n });\n } catch (err) {\n this.failPayment('Could not load updated totals or process payment data request update. ' + err);\n }\n this.unblockUI();\n });\n }\n /**\n\t\t * Provide Google Pay API with a payment amount, currency, and amount status\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest\n\t\t */ getGoogleTransactionInfo(resolve) {\n // get transaction info from cart\n const data = {\n action: `wc_${this.gatewayID}_google_pay_get_transaction_info`\n };\n if (this.productID) data.productID = this.productID;\n $.post(this.ajaxURL, data, (response)=>{\n if (response.success) resolve(JSON.parse(response.data));\n else this.failPayment('Could not build transaction info. ' + response.data.message);\n });\n }\n /**\n\t\t * Get updated totals and shipping options via AJAX for use in the PaymentDataRequest\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t *\n\t\t * @param {object} shippingAddress shipping address\n\t\t * @param {object} shippingMethod chosen shipping method\n\t\t * @param {function} resolve callback\n\t\t */ getUpdatedTotals(shippingAddress, shippingMethod, resolve) {\n const data = {\n action: `wc_${this.gatewayID}_google_pay_recalculate_totals`,\n 'nonce': this.recalculateTotalsNonce,\n shippingAddress: shippingAddress,\n shippingMethod: shippingMethod\n };\n if (this.productID) data.productID = this.productID;\n $.post(this.ajaxURL, data, (response)=>{\n if (response.success) resolve(JSON.parse(response.data));\n else this.failPayment('Could not recalculate totals. ' + response.data.message);\n });\n }\n /**\n\t\t * Provide Google Pay API with shipping address parameters when using dynamic buy flow.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters}\n\t\t * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest\n\t\t */ getGoogleShippingAddressParameters() {\n return {\n allowedCountryCodes: this.availableCountries\n };\n }\n /**\n\t\t * Provide Google Pay API with a payment data error.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError}\n\t\t * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate\n\t\t */ getGoogleUnserviceableAddressError() {\n return {\n reason: 'SHIPPING_ADDRESS_UNSERVICEABLE',\n message: 'Cannot ship to the selected address',\n intent: 'SHIPPING_ADDRESS'\n };\n }\n /**\n\t\t * Add a Google Pay purchase button alongside an existing checkout button\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}\n\t\t * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}\n\t\t */ addGooglePayButton() {\n const paymentsClient = this.getGooglePaymentsClient();\n const button = paymentsClient.createButton({\n onClick: (event)=>this.onGooglePaymentButtonClicked(event),\n buttonColor: this.buttonStyle,\n buttonSizeMode: 'fill'\n });\n document.getElementById('sv-wc-google-pay-button-container').appendChild(button);\n }\n /**\n\t\t * Prefetch payment data to improve performance\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}\n\t\t */ prefetchGooglePaymentData() {\n this.getGooglePaymentDataRequest((paymentDataRequest)=>{\n // transactionInfo must be set but does not affect cache\n paymentDataRequest.transactionInfo = {\n totalPriceStatus: 'NOT_CURRENTLY_KNOWN',\n currencyCode: this.currencyCode\n };\n const paymentsClient = this.getGooglePaymentsClient();\n paymentsClient.prefetchPaymentData(paymentDataRequest);\n });\n }\n /**\n\t\t * Process payment data returned by the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after user approves payment\n\t\t * @param {function} resolve callback\n\t\t */ processPayment(paymentData, resolve) {\n // pass payment token to your gateway to process payment\n const data = {\n action: `wc_${this.gatewayID}_google_pay_process_payment`,\n nonce: this.processNonce,\n paymentData: JSON.stringify(paymentData)\n };\n if (this.productID && !this.needsShipping) data.productID = this.productID;\n return $.post(this.ajaxURL, data, (response)=>{\n if (response.success) {\n resolve({\n transactionState: 'SUCCESS'\n });\n window.location = response.data.redirect;\n } else {\n resolve({\n transactionState: 'ERROR',\n error: {\n intent: 'SHIPPING_ADDRESS',\n message: 'Invalid data',\n reason: 'PAYMENT_DATA_INVALID'\n }\n });\n this.failPayment('Payment could not be processed. ' + response.data.message);\n }\n });\n }\n /**\n\t\t * Show Google Pay payment sheet when Google Pay payment button is clicked\n\t\t */ onGooglePaymentButtonClicked(event) {\n event.preventDefault();\n this.blockUI();\n this.getGooglePaymentDataRequest((paymentDataRequest)=>{\n const paymentsClient = this.getGooglePaymentsClient();\n try {\n paymentsClient.loadPaymentData(paymentDataRequest);\n } catch (err) {\n this.failPayment('Could not load payment data. ' + err);\n }\n this.unblockUI();\n });\n }\n /**\n\t\t * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded\n\t\t *\n\t\t * Display a Google Pay payment button after confirmation of the viewer's\n\t\t * ability to pay.\n\t\t */ init() {\n // initialize for the various pages\n if ($('form.cart').length) this.initProductPage();\n else if ($('form.woocommerce-cart-form').length) this.initCartPage();\n else if ($('form.woocommerce-checkout').length) this.initCheckoutPage();\n else return;\n this.initGooglePay();\n }\n /**\n\t\t * Initializes Google Pay.\n\t\t */ initGooglePay() {\n const paymentsClient = this.getGooglePaymentsClient();\n paymentsClient.isReadyToPay(this.getGoogleIsReadyToPayRequest()).then((response)=>{\n if (response.result) {\n this.addGooglePayButton();\n // prefetch payment data to improve performance\n this.prefetchGooglePaymentData();\n }\n }).catch((err)=>{\n this.failPayment('Google Pay is not ready. ' + err);\n });\n }\n /**\n\t\t * Initializes the product page.\n\t\t */ initProductPage() {\n this.uiElement = $('form.cart');\n }\n /**\n\t\t * Initializes the cart page.\n\t\t */ initCartPage() {\n this.uiElement = $('form.woocommerce-cart-form').parents('div.woocommerce');\n // re-init if the cart totals are updated\n $(document.body).on('updated_cart_totals', ()=>{\n this.initGooglePay();\n });\n }\n /**\n\t\t * Initializes the checkout page.\n\t\t */ initCheckoutPage() {\n this.uiElement = $('form.woocommerce-checkout');\n }\n /**\n\t\t * Fails the purchase based on the gateway result.\n\t\t */ failPayment(error) {\n console.error('[Google Pay] ' + error);\n this.unblockUI();\n this.renderErrors([\n this.genericError\n ]);\n }\n /**\n\t\t * Renders any new errors and bring them into the viewport.\n \t\t */ renderErrors(errors) {\n // hide and remove any previous errors\n $('.woocommerce-error, .woocommerce-message').remove();\n // add errors\n this.uiElement.prepend('
  • ' + errors.join('
  • ') + '
');\n // unblock UI\n this.uiElement.removeClass('processing').unblock();\n // scroll to top\n $('html, body').animate({\n scrollTop: this.uiElement.offset().top - 100\n }, 1000);\n }\n /**\n\t\t * Blocks the payment form UI.\n\t\t */ blockUI() {\n this.uiElement.block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n /**\n\t\t * Unblocks the payment form UI.\n\t\t */ unblockUI() {\n this.uiElement.unblock();\n }\n };\n $(document.body).trigger('sv_wc_google_pay_handler_v6_0_1_loaded');\n});\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-google-pay.js.map\n","jQuery( function( $ ) {\n\n\t\"use strict\"\n\n\t/**\n\t * Google Pay handler.\n\t *\n\t * @since 5.10.0\n\t *\n\t * @type {SV_WC_Google_Pay_Handler_v6_0_1} object\n\t */\n\twindow.SV_WC_Google_Pay_Handler_v6_0_1 = class SV_WC_Google_Pay_Handler_v6_0_1 {\n\n\t\t/**\n\t\t * Handler constructor.\n\t\t *\n\t\t * @since 5.10.0\n\t\t *\n\t\t * @param {Object} params The plugin ID\n\t\t * @param {string} params.plugin_id The plugin ID\n\t\t * @param {string} params.merchant_id The merchant ID\n\t\t * @param {string} params.merchant_name The site name\n\t\t * @param {string} params.gateway_id The gateway ID\n\t\t * @param {string} params.gateway_id_dasherized The gateway ID dasherized\n\t\t * @param {string} params.gateway_merchant_id The gateway merchant ID\n\t\t * @param {string} params.environment The gateway environment (PRODUCTION or TEST)\n\t\t * @param {string} params.ajax_url The AJAX URL\n\t\t * @param {string} params.recalculate_totals_nonce Nonce for the recalculate_totals AJAX action\n\t\t * @param {string} params.process_nonce Nonce for the process AJAX action\n\t\t * @param {string} params.button_style The button style\n\t\t * @param {string[]} params.card_types The supported card types\n\t\t * @param {string[]} params.available_countries Array of two-letter country codes the gateway is available for\n\t\t * @param {string[]} params.currency_code WC configured currency\n\t\t * @param {boolean} params.needs_shipping Whether or not the cart or product needs shipping\n\t\t * @param {string} params.generic_error The generic error message\n\t\t * @param {string} params.product_id The product ID if we are on a Product page\n\t\t */\n\t\tconstructor( params ) {\n\n\t\t\tlet {\n\t\t\t\tplugin_id,\n\t\t\t\tmerchant_id,\n\t\t\t\tmerchant_name,\n\t\t\t\tgateway_id,\n\t\t\t\tgateway_id_dasherized,\n\t\t\t\tgateway_merchant_id,\n\t\t\t\tenvironment,\n\t\t\t\tajax_url,\n\t\t\t\trecalculate_totals_nonce,\n\t\t\t\tprocess_nonce,\n\t\t\t\tbutton_style,\n\t\t\t\tcard_types,\n\t\t\t\tavailable_countries,\n\t\t\t\tcurrency_code,\n\t\t\t\tneeds_shipping,\n\t\t\t\tgeneric_error\n\t\t\t} = params;\n\n\t\t\tthis.gatewayID = gateway_id;\n\t\t\tthis.gatewayMerchantID = gateway_merchant_id;\n\t\t\tthis.merchantID = merchant_id;\n\t\t\tthis.merchantName = merchant_name;\n\t\t\tthis.environment = environment;\n\t\t\tthis.ajaxURL = ajax_url;\n\t\t\tthis.recalculateTotalsNonce = recalculate_totals_nonce;\n\t\t\tthis.processNonce = process_nonce;\n\t\t\tthis.buttonStyle = button_style;\n\t\t\tthis.availableCountries = available_countries;\n\t\t\tthis.currencyCode = currency_code;\n\t\t\tthis.needsShipping = needs_shipping;\n\t\t\tthis.genericError = generic_error;\n\n\t\t\tif ( params.product_id ) {\n\t\t\t\tthis.productID = params.product_id;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Card networks supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */\n\t\t\tconst allowedCardNetworks = card_types;\n\n\t\t\t/**\n\t\t\t * Define the version of the Google Pay API referenced when creating your configuration\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}\n\t\t\t */\n\t\t\tthis.baseRequest = {\n\t\t\t\tapiVersion: 2,\n\t\t\t\tapiVersionMinor: 0\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Card authentication methods supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t *\n\t\t\t * @todo confirm your processor supports Android device tokens for your supported card networks\n\t\t\t */\n\t\t\tconst allowedCardAuthMethods = [ 'PAN_ONLY', 'CRYPTOGRAM_3DS' ];\n\n\t\t\t/**\n\t\t\t * Identify your gateway and your site's gateway merchant identifier\n\t\t\t *\n\t\t\t * The Google Pay API response will return an encrypted payment method capable\n\t\t\t * of being charged by a supported gateway after payer authorization\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}\n\t\t\t */\n\t\t\tconst tokenizationSpecification = {\n\t\t\t\ttype: 'PAYMENT_GATEWAY',\n\t\t\t\tparameters: {\n\t\t\t\t\t'gateway': plugin_id,\n\t\t\t\t\t'gatewayMerchantId': this.gatewayMerchantID\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Describe your site's support for the CARD payment method and its required fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */\n\t\t\tthis.baseCardPaymentMethod = {\n\t\t\t\ttype: 'CARD',\n\t\t\t\tparameters: {\n\t\t\t\t\tallowedAuthMethods: allowedCardAuthMethods,\n\t\t\t\t\tallowedCardNetworks: allowedCardNetworks,\n\t\t\t\t\tbillingAddressRequired: true,\n\t\t\t\t\tbillingAddressParameters: {\n\t\t\t\t\t\tformat: 'FULL',\n\t\t\t\t\t\tphoneNumberRequired: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Describe your site's support for the CARD payment method including optional fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */\n\t\t\tthis.cardPaymentMethod = Object.assign(\n\t\t\t\t{},\n\t\t\t\tthis.baseCardPaymentMethod,\n\t\t\t\t{\n\t\t\t\t\ttokenizationSpecification: tokenizationSpecification\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * An initialized google.payments.api.PaymentsClient object or null if not yet set\n\t\t\t *\n\t\t\t * @see {@link getGooglePaymentsClient}\n\t\t\t */\n\t\t\tthis.paymentsClient = null;\n\t\t}\n\n\t\t/**\n\t\t * Configure your site's support for payment methods supported by the Google Pay\n\t\t * API.\n\t\t *\n\t\t * Each member of allowedPaymentMethods should contain only the required fields,\n\t\t * allowing reuse of this base request when determining a viewer's ability\n\t\t * to pay and later requesting a supported payment method\n\t\t *\n\t\t * @returns {object} Google Pay API version, payment methods supported by the site\n\t\t */\n\t\tgetGoogleIsReadyToPayRequest() {\n\n\t\t\treturn Object.assign(\n\t\t\t\t{},\n\t\t\t\tthis.baseRequest,\n\t\t\t\t{\n\t\t\t\t\tallowedPaymentMethods: [ this.baseCardPaymentMethod ]\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Configure support for the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} PaymentDataRequest fields\n\t\t */\n\t\tgetGooglePaymentDataRequest( resolve ) {\n\n\t\t\treturn this.getGoogleTransactionInfo( ( transactionInfo ) => {\n\n\t\t\t\tconst paymentDataRequest = Object.assign( {}, this.baseRequest );\n\t\t\t\tpaymentDataRequest.allowedPaymentMethods = [ this.cardPaymentMethod ];\n\t\t\t\tpaymentDataRequest.transactionInfo = transactionInfo;\n\t\t\t\tpaymentDataRequest.merchantInfo = {\n\t\t\t\t\tmerchantId: this.merchantID,\n\t\t\t\t\tmerchantName: this.merchantName\n\t\t\t\t};\n\n\t\t\t\tpaymentDataRequest.emailRequired = true;\n\t\t\t\tpaymentDataRequest.callbackIntents = [ 'PAYMENT_AUTHORIZATION' ];\n\n\t\t\t\tif ( this.needsShipping ) {\n\t\t\t\t\tpaymentDataRequest.callbackIntents = [ 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'PAYMENT_AUTHORIZATION' ];\n\t\t\t\t\tpaymentDataRequest.shippingAddressRequired = true;\n\t\t\t\t\tpaymentDataRequest.shippingAddressParameters = this.getGoogleShippingAddressParameters();\n\t\t\t\t\tpaymentDataRequest.shippingOptionRequired = true;\n\t\t\t\t}\n\n\t\t\t\tresolve( paymentDataRequest );\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Return an active PaymentsClient or initialize\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}\n\t\t * @returns {google.payments.api.PaymentsClient} Google Pay API client\n\t\t */\n\t\tgetGooglePaymentsClient() {\n\t\t\tif ( this.paymentsClient === null ) {\n\t\t\t\tlet args = {\n\t\t\t\t\tenvironment: this.environment,\n\t\t\t\t\tmerchantInfo: {\n\t\t\t\t\t\tmerchantName: this.merchantName,\n\t\t\t\t\t\tmerchantId: this.merchantID\n\t\t\t\t\t},\n\t\t\t\t\tpaymentDataCallbacks: {\n\t\t\t\t\t\tonPaymentAuthorized: ( paymentData ) => this.onPaymentAuthorized( paymentData ),\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif ( this.needsShipping ) {\n\t\t\t\t\targs.paymentDataCallbacks.onPaymentDataChanged = ( paymentData ) => this.onPaymentDataChanged( paymentData );\n\t\t\t\t}\n\n\t\t\t\tthis.paymentsClient = new google.payments.api.PaymentsClient( args );\n\t\t\t}\n\t\t\treturn this.paymentsClient;\n\t\t}\n\n\t\t/**\n\t\t * Handles payment authorization callback intent.\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after a payer approves payment.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @returns Promise<{object}> Promise object to complete or fail the transaction.\n\t\t */\n\t\tonPaymentAuthorized( paymentData ) {\n\n\t\t\tthis.blockUI();\n\n\t\t\treturn new Promise( (resolve, reject) => {\n\n\t\t\t\t// handle the response\n\t\t\t\ttry {\n\t\t\t\t\tthis.processPayment( paymentData, resolve );\n\t\t\t\t}\tcatch( err ) {\n\t\t\t\t\treject( {\n\t\t\t\t\t\ttransactionState: 'ERROR',\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tintent: 'PAYMENT_AUTHORIZATION',\n\t\t\t\t\t\t\tmessage: 'Payment could not be processed',\n\t\t\t\t\t\t\treason: 'PAYMENT_DATA_INVALID'\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tthis.unblockUI();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Handles dynamic buy flow shipping address and shipping options callback intents.\n\t\t *\n\t\t * @param {object} intermediatePaymentData response from Google Pay API a shipping address or shipping option is selected in the payment sheet.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference}\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet.\n\t\t */\n\t\tonPaymentDataChanged( intermediatePaymentData ) {\n\n\t\t\tthis.blockUI();\n\n\t\t\treturn new Promise(( resolve, reject ) => {\n\n\t\t\t\ttry {\n\t\t\t\t\tlet shippingAddress = intermediatePaymentData.shippingAddress;\n\t\t\t\t\tlet shippingOptionData = intermediatePaymentData.shippingOptionData;\n\t\t\t\t\tlet chosenShippingMethod = '';\n\n\t\t\t\t\tif ( intermediatePaymentData.callbackTrigger == 'SHIPPING_OPTION' ) {\n\t\t\t\t\t\tchosenShippingMethod = shippingOptionData.id;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getUpdatedTotals( shippingAddress, chosenShippingMethod, ( paymentDataRequestUpdate ) => {\n\n\t\t\t\t\t\tif ( paymentDataRequestUpdate.newShippingOptionParameters.shippingOptions.length == 0 ) {\n\t\t\t\t\t\t\tpaymentDataRequestUpdate = {\n\t\t\t\t\t\t\t\terror: this.getGoogleUnserviceableAddressError()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve( paymentDataRequestUpdate );\n\t\t\t\t\t} );\n\n\t\t\t\t}\tcatch( err ) {\n\t\t\t\t\tthis.failPayment( 'Could not load updated totals or process payment data request update. ' + err );\n\t\t\t\t}\n\n\t\t\t\tthis.unblockUI();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Provide Google Pay API with a payment amount, currency, and amount status\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest\n\t\t */\n\t\tgetGoogleTransactionInfo( resolve ) {\n\n\t\t\t// get transaction info from cart\n\t\t\tconst data = {\n\t\t\t\taction: `wc_${this.gatewayID}_google_pay_get_transaction_info`,\n\t\t\t}\n\n\t\t\tif ( this.productID ) {\n\t\t\t\tdata.productID = this.productID;\n\t\t\t}\n\n\t\t\t$.post( this.ajaxURL, data, ( response ) => {\n\n\t\t\t\tif ( response.success ) {\n\t\t\t\t\tresolve( JSON.parse( response.data ) )\n\t\t\t\t} else {\n\t\t\t\t\tthis.failPayment( 'Could not build transaction info. ' + response.data.message );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Get updated totals and shipping options via AJAX for use in the PaymentDataRequest\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t *\n\t\t * @param {object} shippingAddress shipping address\n\t\t * @param {object} shippingMethod chosen shipping method\n\t\t * @param {function} resolve callback\n\t\t */\n\t\tgetUpdatedTotals( shippingAddress, shippingMethod, resolve ) {\n\n\t\t\tconst data = {\n\t\t\t\taction: `wc_${this.gatewayID}_google_pay_recalculate_totals`,\n\t\t\t\t'nonce': this.recalculateTotalsNonce,\n\t\t\t\tshippingAddress,\n\t\t\t\tshippingMethod\n\t\t\t}\n\n\t\t\tif ( this.productID ) {\n\t\t\t\tdata.productID = this.productID;\n\t\t\t}\n\n\t\t\t$.post( this.ajaxURL, data, ( response ) => {\n\n\t\t\t\tif ( response.success ) {\n\t\t\t\t\tresolve( JSON.parse( response.data ) )\n\t\t\t\t} else {\n\t\t\t\t\tthis.failPayment( 'Could not recalculate totals. ' + response.data.message );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Provide Google Pay API with shipping address parameters when using dynamic buy flow.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters}\n\t\t * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest\n\t\t */\n\t\tgetGoogleShippingAddressParameters() {\n\n\t\t\treturn {\n\t\t\t\tallowedCountryCodes: this.availableCountries\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Provide Google Pay API with a payment data error.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError}\n\t\t * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate\n\t\t */\n\t\tgetGoogleUnserviceableAddressError() {\n\t\t\treturn {\n\t\t\t\treason: 'SHIPPING_ADDRESS_UNSERVICEABLE',\n\t\t\t\tmessage: 'Cannot ship to the selected address',\n\t\t\t\tintent: 'SHIPPING_ADDRESS'\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Add a Google Pay purchase button alongside an existing checkout button\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}\n\t\t * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}\n\t\t */\n\t\taddGooglePayButton() {\n\n\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\tconst button = paymentsClient.createButton( {\n\t\t\t\tonClick: ( event ) => this.onGooglePaymentButtonClicked( event ),\n\t\t\t\tbuttonColor: this.buttonStyle,\n\t\t\t\tbuttonSizeMode: 'fill'\n\t\t\t} );\n\t\t\tdocument.getElementById( 'sv-wc-google-pay-button-container' ).appendChild( button );\n\t\t}\n\n\t\t/**\n\t\t * Prefetch payment data to improve performance\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}\n\t\t */\n\t\tprefetchGooglePaymentData() {\n\n\t\t\tthis.getGooglePaymentDataRequest( ( paymentDataRequest ) => {\n\n\t\t\t\t// transactionInfo must be set but does not affect cache\n\t\t\t\tpaymentDataRequest.transactionInfo = {\n\t\t\t\t\ttotalPriceStatus: 'NOT_CURRENTLY_KNOWN',\n\t\t\t\t\tcurrencyCode: this.currencyCode\n\t\t\t\t};\n\t\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\t\tpaymentsClient.prefetchPaymentData( paymentDataRequest );\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Process payment data returned by the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after user approves payment\n\t\t * @param {function} resolve callback\n\t\t */\n\t\tprocessPayment( paymentData, resolve ) {\n\n\t\t\t// pass payment token to your gateway to process payment\n\t\t\tconst data = {\n\t\t\t\taction: `wc_${this.gatewayID}_google_pay_process_payment`,\n\t\t\t\tnonce: this.processNonce,\n\t\t\t\tpaymentData: JSON.stringify( paymentData ),\n\t\t\t}\n\n\t\t\tif ( this.productID && ! this.needsShipping ) {\n\t\t\t\tdata.productID = this.productID;\n\t\t\t}\n\n\t\t\treturn $.post( this.ajaxURL, data, ( response ) => {\n\t\t\t\tif ( response.success ) {\n\t\t\t\t\tresolve( {\n\t\t\t\t\t\ttransactionState: 'SUCCESS'\n\t\t\t\t\t} );\n\t\t\t\t\twindow.location = response.data.redirect;\n\t\t\t\t} else {\n\t\t\t\t\tresolve( {\n\t\t\t\t\t\ttransactionState: 'ERROR',\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tintent: 'SHIPPING_ADDRESS',\n\t\t\t\t\t\t\tmessage: 'Invalid data',\n\t\t\t\t\t\t\treason: 'PAYMENT_DATA_INVALID'\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tthis.failPayment( 'Payment could not be processed. ' + response.data.message );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Show Google Pay payment sheet when Google Pay payment button is clicked\n\t\t */\n\t\tonGooglePaymentButtonClicked( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.blockUI();\n\n\t\t\tthis.getGooglePaymentDataRequest( ( paymentDataRequest ) => {\n\n\t\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\t\ttry {\n\t\t\t\t\tpaymentsClient.loadPaymentData( paymentDataRequest );\n\t\t\t\t} catch ( err ) {\n\t\t\t\t\tthis.failPayment( 'Could not load payment data. ' + err );\n\t\t\t\t}\n\n\t\t\t\tthis.unblockUI();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded\n\t\t *\n\t\t * Display a Google Pay payment button after confirmation of the viewer's\n\t\t * ability to pay.\n\t\t */\n\t\tinit() {\n\n\t\t\t// initialize for the various pages\n\t\t\tif ( $( 'form.cart' ).length ) {\n\t\t\t\tthis.initProductPage();\n\t\t\t} else if ( $( 'form.woocommerce-cart-form' ).length ) {\n\t\t\t\tthis.initCartPage();\n\t\t\t} else if ( $( 'form.woocommerce-checkout' ).length) {\n\t\t\t\tthis.initCheckoutPage()\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.initGooglePay();\n\t\t}\n\n\t\t/**\n\t\t * Initializes Google Pay.\n\t\t */\n\t\tinitGooglePay() {\n\n\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\tpaymentsClient.isReadyToPay( this.getGoogleIsReadyToPayRequest() )\n\t\t\t\t.then( ( response ) => {\n\t\t\t\t\tif ( response.result ) {\n\t\t\t\t\t\tthis.addGooglePayButton();\n\t\t\t\t\t\t// prefetch payment data to improve performance\n\t\t\t\t\t\tthis.prefetchGooglePaymentData();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.catch( ( err ) => {\n\t\t\t\t\tthis.failPayment( 'Google Pay is not ready. ' + err );\n\t\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Initializes the product page.\n\t\t */\n\t\tinitProductPage() {\n\t\t\tthis.uiElement = $( 'form.cart' );\n\t\t}\n\n\t\t/**\n\t\t * Initializes the cart page.\n\t\t */\n\t\tinitCartPage() {\n\t\t\tthis.uiElement = $( 'form.woocommerce-cart-form' ).parents( 'div.woocommerce' );\n\n\t\t\t// re-init if the cart totals are updated\n\t\t\t$( document.body ).on( 'updated_cart_totals', () => {\n\t\t\t\tthis.initGooglePay();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Initializes the checkout page.\n\t\t */\n\t\tinitCheckoutPage() {\n\t\t\tthis.uiElement = $( 'form.woocommerce-checkout' );\n\t\t}\n\n\t\t/**\n\t\t * Fails the purchase based on the gateway result.\n\t\t */\n\t\tfailPayment( error ) {\n\n\t\t\tconsole.error( '[Google Pay] ' + error );\n\n\t\t\tthis.unblockUI();\n\n\t\t\tthis.renderErrors( [ this.genericError ] );\n\t\t}\n\n\t\t/**\n\t\t * Renders any new errors and bring them into the viewport.\n \t\t */\n\t\trenderErrors( errors ) {\n\n\t\t\t// hide and remove any previous errors\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\n\t\t\t// add errors\n\t\t\tthis.uiElement.prepend( '
  • ' + errors.join( '
  • ' ) + '
' );\n\n\t\t\t// unblock UI\n\t\t\tthis.uiElement.removeClass( 'processing' ).unblock();\n\n\t\t\t// scroll to top\n\t\t\t$( 'html, body' ).animate( { scrollTop: this.uiElement.offset().top - 100 }, 1000 );\n\t\t}\n\n\t\t/**\n\t\t * Blocks the payment form UI.\n\t\t */\n\t\tblockUI() {\n\t\t\tthis.uiElement.block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } );\n\t\t}\n\n\t\t/**\n\t\t * Unblocks the payment form UI.\n\t\t */\n\t\tunblockUI() {\n\t\t\tthis.uiElement.unblock();\n\t\t}\n\t}\n\n\t$( document.body ).trigger( 'sv_wc_google_pay_handler_v6_0_1_loaded' );\n\n} );\n"],"names":["jQuery","$","window","SV_WC_Google_Pay_Handler_v6_0_1","constructor","params","plugin_id","merchant_id","merchant_name","gateway_id","gateway_id_dasherized","gateway_merchant_id","environment","ajax_url","recalculate_totals_nonce","process_nonce","button_style","card_types","available_countries","currency_code","needs_shipping","generic_error","gatewayID","gatewayMerchantID","merchantID","merchantName","ajaxURL","recalculateTotalsNonce","processNonce","buttonStyle","availableCountries","currencyCode","needsShipping","genericError","product_id","productID","baseRequest","apiVersion","apiVersionMinor","tokenizationSpecification","type","parameters","baseCardPaymentMethod","allowedAuthMethods","allowedCardNetworks","billingAddressRequired","billingAddressParameters","format","phoneNumberRequired","cardPaymentMethod","Object","assign","paymentsClient","getGoogleIsReadyToPayRequest","allowedPaymentMethods","getGooglePaymentDataRequest","resolve","getGoogleTransactionInfo","transactionInfo","paymentDataRequest","merchantInfo","merchantId","emailRequired","callbackIntents","shippingAddressRequired","shippingAddressParameters","getGoogleShippingAddressParameters","shippingOptionRequired","getGooglePaymentsClient","args","paymentDataCallbacks","onPaymentAuthorized","paymentData","onPaymentDataChanged","google","payments","api","PaymentsClient","blockUI","Promise","reject","processPayment","err","transactionState","error","intent","message","reason","unblockUI","intermediatePaymentData","shippingAddress","shippingOptionData","chosenShippingMethod","callbackTrigger","id","getUpdatedTotals","paymentDataRequestUpdate","newShippingOptionParameters","shippingOptions","length","getGoogleUnserviceableAddressError","failPayment","data","action","post","response","success","JSON","parse","shippingMethod","allowedCountryCodes","addGooglePayButton","button","createButton","onClick","event","onGooglePaymentButtonClicked","buttonColor","buttonSizeMode","document","getElementById","appendChild","prefetchGooglePaymentData","totalPriceStatus","prefetchPaymentData","nonce","stringify","location","redirect","preventDefault","loadPaymentData","init","initProductPage","initCartPage","initCheckoutPage","initGooglePay","isReadyToPay","then","result","catch","uiElement","parents","body","on","console","renderErrors","errors","remove","prepend","join","removeClass","unblock","animate","scrollTop","offset","top","block","overlayCSS","background","opacity","trigger"],"version":3,"file":"sv-wc-payment-gateway-google-pay.js.map"} \ No newline at end of file +{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-google-pay.js"],"sourcesContent":["(() => {\njQuery(function($) {\n \"use strict\";\n /**\n\t * Google Pay handler.\n\t *\n\t * @since 5.10.0\n\t *\n\t * @type {SV_WC_Google_Pay_Handler_v6_1_0} object\n\t */ window.SV_WC_Google_Pay_Handler_v6_1_0 = class SV_WC_Google_Pay_Handler_v6_1_0 {\n /**\n\t\t * Handler constructor.\n\t\t *\n\t\t * @since 5.10.0\n\t\t *\n\t\t * @param {Object} params The plugin ID\n\t\t * @param {string} params.plugin_id The plugin ID\n\t\t * @param {string} params.merchant_id The merchant ID\n\t\t * @param {string} params.merchant_name The site name\n\t\t * @param {string} params.gateway_id The gateway ID\n\t\t * @param {string} params.gateway_id_dasherized The gateway ID dasherized\n\t\t * @param {string} params.gateway_merchant_id The gateway merchant ID\n\t\t * @param {string} params.environment The gateway environment (PRODUCTION or TEST)\n\t\t * @param {string} params.ajax_url The AJAX URL\n\t\t * @param {string} params.recalculate_totals_nonce Nonce for the recalculate_totals AJAX action\n\t\t * @param {string} params.process_nonce Nonce for the process AJAX action\n\t\t * @param {string} params.button_style The button style\n\t\t * @param {string[]} params.card_types The supported card types\n\t\t * @param {string[]} params.available_countries Array of two-letter country codes the gateway is available for\n\t\t * @param {string[]} params.currency_code WC configured currency\n\t\t * @param {boolean} params.needs_shipping Whether or not the cart or product needs shipping\n\t\t * @param {string} params.generic_error The generic error message\n\t\t * @param {string} params.product_id The product ID if we are on a Product page\n\t\t */ constructor(params){\n let { plugin_id: plugin_id, merchant_id: merchant_id, merchant_name: merchant_name, gateway_id: gateway_id, gateway_id_dasherized: gateway_id_dasherized, gateway_merchant_id: gateway_merchant_id, environment: environment, ajax_url: ajax_url, recalculate_totals_nonce: recalculate_totals_nonce, process_nonce: process_nonce, button_style: button_style, card_types: card_types, available_countries: available_countries, currency_code: currency_code, needs_shipping: needs_shipping, generic_error: generic_error } = params;\n this.gatewayID = gateway_id;\n this.gatewayMerchantID = gateway_merchant_id;\n this.merchantID = merchant_id;\n this.merchantName = merchant_name;\n this.environment = environment;\n this.ajaxURL = ajax_url;\n this.recalculateTotalsNonce = recalculate_totals_nonce;\n this.processNonce = process_nonce;\n this.buttonStyle = button_style;\n this.availableCountries = available_countries;\n this.currencyCode = currency_code;\n this.needsShipping = needs_shipping;\n this.genericError = generic_error;\n if (params.product_id) this.productID = params.product_id;\n /**\n\t\t\t * Card networks supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */ const allowedCardNetworks = card_types;\n /**\n\t\t\t * Define the version of the Google Pay API referenced when creating your configuration\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}\n\t\t\t */ this.baseRequest = {\n apiVersion: 2,\n apiVersionMinor: 0\n };\n /**\n\t\t\t * Card authentication methods supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t *\n\t\t\t * @todo confirm your processor supports Android device tokens for your supported card networks\n\t\t\t */ const allowedCardAuthMethods = [\n 'PAN_ONLY',\n 'CRYPTOGRAM_3DS'\n ];\n /**\n\t\t\t * Identify your gateway and your site's gateway merchant identifier\n\t\t\t *\n\t\t\t * The Google Pay API response will return an encrypted payment method capable\n\t\t\t * of being charged by a supported gateway after payer authorization\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}\n\t\t\t */ const tokenizationSpecification = {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n 'gateway': plugin_id,\n 'gatewayMerchantId': this.gatewayMerchantID\n }\n };\n /**\n\t\t\t * Describe your site's support for the CARD payment method and its required fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */ this.baseCardPaymentMethod = {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: allowedCardAuthMethods,\n allowedCardNetworks: allowedCardNetworks,\n billingAddressRequired: true,\n billingAddressParameters: {\n format: 'FULL',\n phoneNumberRequired: true\n }\n }\n };\n /**\n\t\t\t * Describe your site's support for the CARD payment method including optional fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */ this.cardPaymentMethod = Object.assign({}, this.baseCardPaymentMethod, {\n tokenizationSpecification: tokenizationSpecification\n });\n /**\n\t\t\t * An initialized google.payments.api.PaymentsClient object or null if not yet set\n\t\t\t *\n\t\t\t * @see {@link getGooglePaymentsClient}\n\t\t\t */ this.paymentsClient = null;\n }\n /**\n\t\t * Configure your site's support for payment methods supported by the Google Pay\n\t\t * API.\n\t\t *\n\t\t * Each member of allowedPaymentMethods should contain only the required fields,\n\t\t * allowing reuse of this base request when determining a viewer's ability\n\t\t * to pay and later requesting a supported payment method\n\t\t *\n\t\t * @returns {object} Google Pay API version, payment methods supported by the site\n\t\t */ getGoogleIsReadyToPayRequest() {\n return Object.assign({}, this.baseRequest, {\n allowedPaymentMethods: [\n this.baseCardPaymentMethod\n ]\n });\n }\n /**\n\t\t * Configure support for the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} PaymentDataRequest fields\n\t\t */ getGooglePaymentDataRequest(resolve) {\n return this.getGoogleTransactionInfo((transactionInfo)=>{\n const paymentDataRequest = Object.assign({}, this.baseRequest);\n paymentDataRequest.allowedPaymentMethods = [\n this.cardPaymentMethod\n ];\n paymentDataRequest.transactionInfo = transactionInfo;\n paymentDataRequest.merchantInfo = {\n merchantId: this.merchantID,\n merchantName: this.merchantName\n };\n paymentDataRequest.emailRequired = true;\n paymentDataRequest.callbackIntents = [\n 'PAYMENT_AUTHORIZATION'\n ];\n if (this.needsShipping) {\n paymentDataRequest.callbackIntents = [\n 'SHIPPING_ADDRESS',\n 'SHIPPING_OPTION',\n 'PAYMENT_AUTHORIZATION'\n ];\n paymentDataRequest.shippingAddressRequired = true;\n paymentDataRequest.shippingAddressParameters = this.getGoogleShippingAddressParameters();\n paymentDataRequest.shippingOptionRequired = true;\n }\n resolve(paymentDataRequest);\n });\n }\n /**\n\t\t * Return an active PaymentsClient or initialize\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}\n\t\t * @returns {google.payments.api.PaymentsClient} Google Pay API client\n\t\t */ getGooglePaymentsClient() {\n if (this.paymentsClient === null) {\n let args = {\n environment: this.environment,\n merchantInfo: {\n merchantName: this.merchantName,\n merchantId: this.merchantID\n },\n paymentDataCallbacks: {\n onPaymentAuthorized: (paymentData)=>this.onPaymentAuthorized(paymentData)\n }\n };\n if (this.needsShipping) args.paymentDataCallbacks.onPaymentDataChanged = (paymentData)=>this.onPaymentDataChanged(paymentData);\n this.paymentsClient = new google.payments.api.PaymentsClient(args);\n }\n return this.paymentsClient;\n }\n /**\n\t\t * Handles payment authorization callback intent.\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after a payer approves payment.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @returns Promise<{object}> Promise object to complete or fail the transaction.\n\t\t */ onPaymentAuthorized(paymentData) {\n this.blockUI();\n return new Promise((resolve, reject)=>{\n // handle the response\n try {\n this.processPayment(paymentData, resolve);\n } catch (err) {\n reject({\n transactionState: 'ERROR',\n error: {\n intent: 'PAYMENT_AUTHORIZATION',\n message: 'Payment could not be processed',\n reason: 'PAYMENT_DATA_INVALID'\n }\n });\n }\n this.unblockUI();\n });\n }\n /**\n\t\t * Handles dynamic buy flow shipping address and shipping options callback intents.\n\t\t *\n\t\t * @param {object} intermediatePaymentData response from Google Pay API a shipping address or shipping option is selected in the payment sheet.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference}\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet.\n\t\t */ onPaymentDataChanged(intermediatePaymentData) {\n this.blockUI();\n return new Promise((resolve, reject)=>{\n try {\n let shippingAddress = intermediatePaymentData.shippingAddress;\n let shippingOptionData = intermediatePaymentData.shippingOptionData;\n let chosenShippingMethod = '';\n if (intermediatePaymentData.callbackTrigger == 'SHIPPING_OPTION') chosenShippingMethod = shippingOptionData.id;\n this.getUpdatedTotals(shippingAddress, chosenShippingMethod, (paymentDataRequestUpdate)=>{\n if (paymentDataRequestUpdate.newShippingOptionParameters.shippingOptions.length == 0) paymentDataRequestUpdate = {\n error: this.getGoogleUnserviceableAddressError()\n };\n resolve(paymentDataRequestUpdate);\n });\n } catch (err) {\n this.failPayment('Could not load updated totals or process payment data request update. ' + err);\n }\n this.unblockUI();\n });\n }\n /**\n\t\t * Provide Google Pay API with a payment amount, currency, and amount status\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest\n\t\t */ getGoogleTransactionInfo(resolve) {\n // get transaction info from cart\n const data = {\n action: `wc_${this.gatewayID}_google_pay_get_transaction_info`\n };\n if (this.productID) data.productID = this.productID;\n $.post(this.ajaxURL, data, (response)=>{\n if (response.success) resolve(JSON.parse(response.data));\n else this.failPayment('Could not build transaction info. ' + response.data.message);\n });\n }\n /**\n\t\t * Get updated totals and shipping options via AJAX for use in the PaymentDataRequest\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t *\n\t\t * @param {object} shippingAddress shipping address\n\t\t * @param {object} shippingMethod chosen shipping method\n\t\t * @param {function} resolve callback\n\t\t */ getUpdatedTotals(shippingAddress, shippingMethod, resolve) {\n const data = {\n action: `wc_${this.gatewayID}_google_pay_recalculate_totals`,\n 'nonce': this.recalculateTotalsNonce,\n shippingAddress: shippingAddress,\n shippingMethod: shippingMethod\n };\n if (this.productID) data.productID = this.productID;\n $.post(this.ajaxURL, data, (response)=>{\n if (response.success) resolve(JSON.parse(response.data));\n else this.failPayment('Could not recalculate totals. ' + response.data.message);\n });\n }\n /**\n\t\t * Provide Google Pay API with shipping address parameters when using dynamic buy flow.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters}\n\t\t * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest\n\t\t */ getGoogleShippingAddressParameters() {\n return {\n allowedCountryCodes: this.availableCountries\n };\n }\n /**\n\t\t * Provide Google Pay API with a payment data error.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError}\n\t\t * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate\n\t\t */ getGoogleUnserviceableAddressError() {\n return {\n reason: 'SHIPPING_ADDRESS_UNSERVICEABLE',\n message: 'Cannot ship to the selected address',\n intent: 'SHIPPING_ADDRESS'\n };\n }\n /**\n\t\t * Add a Google Pay purchase button alongside an existing checkout button\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}\n\t\t * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}\n\t\t */ addGooglePayButton() {\n const paymentsClient = this.getGooglePaymentsClient();\n const button = paymentsClient.createButton({\n onClick: (event)=>this.onGooglePaymentButtonClicked(event),\n buttonColor: this.buttonStyle,\n buttonSizeMode: 'fill'\n });\n document.getElementById('sv-wc-google-pay-button-container').appendChild(button);\n }\n /**\n\t\t * Prefetch payment data to improve performance\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}\n\t\t */ prefetchGooglePaymentData() {\n this.getGooglePaymentDataRequest((paymentDataRequest)=>{\n // transactionInfo must be set but does not affect cache\n paymentDataRequest.transactionInfo = {\n totalPriceStatus: 'NOT_CURRENTLY_KNOWN',\n currencyCode: this.currencyCode\n };\n const paymentsClient = this.getGooglePaymentsClient();\n paymentsClient.prefetchPaymentData(paymentDataRequest);\n });\n }\n /**\n\t\t * Process payment data returned by the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after user approves payment\n\t\t * @param {function} resolve callback\n\t\t */ processPayment(paymentData, resolve) {\n // pass payment token to your gateway to process payment\n const data = {\n action: `wc_${this.gatewayID}_google_pay_process_payment`,\n nonce: this.processNonce,\n paymentData: JSON.stringify(paymentData)\n };\n if (this.productID && !this.needsShipping) data.productID = this.productID;\n return $.post(this.ajaxURL, data, (response)=>{\n if (response.success) {\n resolve({\n transactionState: 'SUCCESS'\n });\n window.location = response.data.redirect;\n } else {\n resolve({\n transactionState: 'ERROR',\n error: {\n intent: 'SHIPPING_ADDRESS',\n message: 'Invalid data',\n reason: 'PAYMENT_DATA_INVALID'\n }\n });\n this.failPayment('Payment could not be processed. ' + response.data.message);\n }\n });\n }\n /**\n\t\t * Show Google Pay payment sheet when Google Pay payment button is clicked\n\t\t */ onGooglePaymentButtonClicked(event) {\n event.preventDefault();\n this.blockUI();\n this.getGooglePaymentDataRequest((paymentDataRequest)=>{\n const paymentsClient = this.getGooglePaymentsClient();\n try {\n paymentsClient.loadPaymentData(paymentDataRequest);\n } catch (err) {\n this.failPayment('Could not load payment data. ' + err);\n }\n this.unblockUI();\n });\n }\n /**\n\t\t * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded\n\t\t *\n\t\t * Display a Google Pay payment button after confirmation of the viewer's\n\t\t * ability to pay.\n\t\t */ init() {\n // initialize for the various pages\n if ($('form.cart').length) this.initProductPage();\n else if ($('form.woocommerce-cart-form').length) this.initCartPage();\n else if ($('form.woocommerce-checkout').length) this.initCheckoutPage();\n else return;\n this.initGooglePay();\n }\n /**\n\t\t * Initializes Google Pay.\n\t\t */ initGooglePay() {\n const paymentsClient = this.getGooglePaymentsClient();\n paymentsClient.isReadyToPay(this.getGoogleIsReadyToPayRequest()).then((response)=>{\n if (response.result) {\n this.addGooglePayButton();\n // prefetch payment data to improve performance\n this.prefetchGooglePaymentData();\n }\n }).catch((err)=>{\n this.failPayment('Google Pay is not ready. ' + err);\n });\n }\n /**\n\t\t * Initializes the product page.\n\t\t */ initProductPage() {\n this.uiElement = $('form.cart');\n }\n /**\n\t\t * Initializes the cart page.\n\t\t */ initCartPage() {\n this.uiElement = $('form.woocommerce-cart-form').parents('div.woocommerce');\n // re-init if the cart totals are updated\n $(document.body).on('updated_cart_totals', ()=>{\n this.initGooglePay();\n });\n }\n /**\n\t\t * Initializes the checkout page.\n\t\t */ initCheckoutPage() {\n this.uiElement = $('form.woocommerce-checkout');\n }\n /**\n\t\t * Fails the purchase based on the gateway result.\n\t\t */ failPayment(error) {\n console.error('[Google Pay] ' + error);\n this.unblockUI();\n this.renderErrors([\n this.genericError\n ]);\n }\n /**\n\t\t * Renders any new errors and bring them into the viewport.\n \t\t */ renderErrors(errors) {\n // hide and remove any previous errors\n $('.woocommerce-error, .woocommerce-message').remove();\n // add errors\n this.uiElement.prepend('
  • ' + errors.join('
  • ') + '
');\n // unblock UI\n this.uiElement.removeClass('processing').unblock();\n // scroll to top\n $('html, body').animate({\n scrollTop: this.uiElement.offset().top - 100\n }, 1000);\n }\n /**\n\t\t * Blocks the payment form UI.\n\t\t */ blockUI() {\n this.uiElement.block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n /**\n\t\t * Unblocks the payment form UI.\n\t\t */ unblockUI() {\n this.uiElement.unblock();\n }\n };\n $(document.body).trigger('sv_wc_google_pay_handler_v6_1_0_loaded');\n});\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-google-pay.js.map\n","jQuery( function( $ ) {\n\n\t\"use strict\"\n\n\t/**\n\t * Google Pay handler.\n\t *\n\t * @since 5.10.0\n\t *\n\t * @type {SV_WC_Google_Pay_Handler_v6_1_0} object\n\t */\n\twindow.SV_WC_Google_Pay_Handler_v6_1_0 = class SV_WC_Google_Pay_Handler_v6_1_0 {\n\n\t\t/**\n\t\t * Handler constructor.\n\t\t *\n\t\t * @since 5.10.0\n\t\t *\n\t\t * @param {Object} params The plugin ID\n\t\t * @param {string} params.plugin_id The plugin ID\n\t\t * @param {string} params.merchant_id The merchant ID\n\t\t * @param {string} params.merchant_name The site name\n\t\t * @param {string} params.gateway_id The gateway ID\n\t\t * @param {string} params.gateway_id_dasherized The gateway ID dasherized\n\t\t * @param {string} params.gateway_merchant_id The gateway merchant ID\n\t\t * @param {string} params.environment The gateway environment (PRODUCTION or TEST)\n\t\t * @param {string} params.ajax_url The AJAX URL\n\t\t * @param {string} params.recalculate_totals_nonce Nonce for the recalculate_totals AJAX action\n\t\t * @param {string} params.process_nonce Nonce for the process AJAX action\n\t\t * @param {string} params.button_style The button style\n\t\t * @param {string[]} params.card_types The supported card types\n\t\t * @param {string[]} params.available_countries Array of two-letter country codes the gateway is available for\n\t\t * @param {string[]} params.currency_code WC configured currency\n\t\t * @param {boolean} params.needs_shipping Whether or not the cart or product needs shipping\n\t\t * @param {string} params.generic_error The generic error message\n\t\t * @param {string} params.product_id The product ID if we are on a Product page\n\t\t */\n\t\tconstructor( params ) {\n\n\t\t\tlet {\n\t\t\t\tplugin_id,\n\t\t\t\tmerchant_id,\n\t\t\t\tmerchant_name,\n\t\t\t\tgateway_id,\n\t\t\t\tgateway_id_dasherized,\n\t\t\t\tgateway_merchant_id,\n\t\t\t\tenvironment,\n\t\t\t\tajax_url,\n\t\t\t\trecalculate_totals_nonce,\n\t\t\t\tprocess_nonce,\n\t\t\t\tbutton_style,\n\t\t\t\tcard_types,\n\t\t\t\tavailable_countries,\n\t\t\t\tcurrency_code,\n\t\t\t\tneeds_shipping,\n\t\t\t\tgeneric_error\n\t\t\t} = params;\n\n\t\t\tthis.gatewayID = gateway_id;\n\t\t\tthis.gatewayMerchantID = gateway_merchant_id;\n\t\t\tthis.merchantID = merchant_id;\n\t\t\tthis.merchantName = merchant_name;\n\t\t\tthis.environment = environment;\n\t\t\tthis.ajaxURL = ajax_url;\n\t\t\tthis.recalculateTotalsNonce = recalculate_totals_nonce;\n\t\t\tthis.processNonce = process_nonce;\n\t\t\tthis.buttonStyle = button_style;\n\t\t\tthis.availableCountries = available_countries;\n\t\t\tthis.currencyCode = currency_code;\n\t\t\tthis.needsShipping = needs_shipping;\n\t\t\tthis.genericError = generic_error;\n\n\t\t\tif ( params.product_id ) {\n\t\t\t\tthis.productID = params.product_id;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Card networks supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */\n\t\t\tconst allowedCardNetworks = card_types;\n\n\t\t\t/**\n\t\t\t * Define the version of the Google Pay API referenced when creating your configuration\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}\n\t\t\t */\n\t\t\tthis.baseRequest = {\n\t\t\t\tapiVersion: 2,\n\t\t\t\tapiVersionMinor: 0\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Card authentication methods supported by your site and your gateway\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t *\n\t\t\t * @todo confirm your processor supports Android device tokens for your supported card networks\n\t\t\t */\n\t\t\tconst allowedCardAuthMethods = [ 'PAN_ONLY', 'CRYPTOGRAM_3DS' ];\n\n\t\t\t/**\n\t\t\t * Identify your gateway and your site's gateway merchant identifier\n\t\t\t *\n\t\t\t * The Google Pay API response will return an encrypted payment method capable\n\t\t\t * of being charged by a supported gateway after payer authorization\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}\n\t\t\t */\n\t\t\tconst tokenizationSpecification = {\n\t\t\t\ttype: 'PAYMENT_GATEWAY',\n\t\t\t\tparameters: {\n\t\t\t\t\t'gateway': plugin_id,\n\t\t\t\t\t'gatewayMerchantId': this.gatewayMerchantID\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Describe your site's support for the CARD payment method and its required fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */\n\t\t\tthis.baseCardPaymentMethod = {\n\t\t\t\ttype: 'CARD',\n\t\t\t\tparameters: {\n\t\t\t\t\tallowedAuthMethods: allowedCardAuthMethods,\n\t\t\t\t\tallowedCardNetworks: allowedCardNetworks,\n\t\t\t\t\tbillingAddressRequired: true,\n\t\t\t\t\tbillingAddressParameters: {\n\t\t\t\t\t\tformat: 'FULL',\n\t\t\t\t\t\tphoneNumberRequired: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Describe your site's support for the CARD payment method including optional fields\n\t\t\t *\n\t\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}\n\t\t\t */\n\t\t\tthis.cardPaymentMethod = Object.assign(\n\t\t\t\t{},\n\t\t\t\tthis.baseCardPaymentMethod,\n\t\t\t\t{\n\t\t\t\t\ttokenizationSpecification: tokenizationSpecification\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * An initialized google.payments.api.PaymentsClient object or null if not yet set\n\t\t\t *\n\t\t\t * @see {@link getGooglePaymentsClient}\n\t\t\t */\n\t\t\tthis.paymentsClient = null;\n\t\t}\n\n\t\t/**\n\t\t * Configure your site's support for payment methods supported by the Google Pay\n\t\t * API.\n\t\t *\n\t\t * Each member of allowedPaymentMethods should contain only the required fields,\n\t\t * allowing reuse of this base request when determining a viewer's ability\n\t\t * to pay and later requesting a supported payment method\n\t\t *\n\t\t * @returns {object} Google Pay API version, payment methods supported by the site\n\t\t */\n\t\tgetGoogleIsReadyToPayRequest() {\n\n\t\t\treturn Object.assign(\n\t\t\t\t{},\n\t\t\t\tthis.baseRequest,\n\t\t\t\t{\n\t\t\t\t\tallowedPaymentMethods: [ this.baseCardPaymentMethod ]\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Configure support for the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} PaymentDataRequest fields\n\t\t */\n\t\tgetGooglePaymentDataRequest( resolve ) {\n\n\t\t\treturn this.getGoogleTransactionInfo( ( transactionInfo ) => {\n\n\t\t\t\tconst paymentDataRequest = Object.assign( {}, this.baseRequest );\n\t\t\t\tpaymentDataRequest.allowedPaymentMethods = [ this.cardPaymentMethod ];\n\t\t\t\tpaymentDataRequest.transactionInfo = transactionInfo;\n\t\t\t\tpaymentDataRequest.merchantInfo = {\n\t\t\t\t\tmerchantId: this.merchantID,\n\t\t\t\t\tmerchantName: this.merchantName\n\t\t\t\t};\n\n\t\t\t\tpaymentDataRequest.emailRequired = true;\n\t\t\t\tpaymentDataRequest.callbackIntents = [ 'PAYMENT_AUTHORIZATION' ];\n\n\t\t\t\tif ( this.needsShipping ) {\n\t\t\t\t\tpaymentDataRequest.callbackIntents = [ 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'PAYMENT_AUTHORIZATION' ];\n\t\t\t\t\tpaymentDataRequest.shippingAddressRequired = true;\n\t\t\t\t\tpaymentDataRequest.shippingAddressParameters = this.getGoogleShippingAddressParameters();\n\t\t\t\t\tpaymentDataRequest.shippingOptionRequired = true;\n\t\t\t\t}\n\n\t\t\t\tresolve( paymentDataRequest );\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Return an active PaymentsClient or initialize\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}\n\t\t * @returns {google.payments.api.PaymentsClient} Google Pay API client\n\t\t */\n\t\tgetGooglePaymentsClient() {\n\t\t\tif ( this.paymentsClient === null ) {\n\t\t\t\tlet args = {\n\t\t\t\t\tenvironment: this.environment,\n\t\t\t\t\tmerchantInfo: {\n\t\t\t\t\t\tmerchantName: this.merchantName,\n\t\t\t\t\t\tmerchantId: this.merchantID\n\t\t\t\t\t},\n\t\t\t\t\tpaymentDataCallbacks: {\n\t\t\t\t\t\tonPaymentAuthorized: ( paymentData ) => this.onPaymentAuthorized( paymentData ),\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif ( this.needsShipping ) {\n\t\t\t\t\targs.paymentDataCallbacks.onPaymentDataChanged = ( paymentData ) => this.onPaymentDataChanged( paymentData );\n\t\t\t\t}\n\n\t\t\t\tthis.paymentsClient = new google.payments.api.PaymentsClient( args );\n\t\t\t}\n\t\t\treturn this.paymentsClient;\n\t\t}\n\n\t\t/**\n\t\t * Handles payment authorization callback intent.\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after a payer approves payment.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @returns Promise<{object}> Promise object to complete or fail the transaction.\n\t\t */\n\t\tonPaymentAuthorized( paymentData ) {\n\n\t\t\tthis.blockUI();\n\n\t\t\treturn new Promise( (resolve, reject) => {\n\n\t\t\t\t// handle the response\n\t\t\t\ttry {\n\t\t\t\t\tthis.processPayment( paymentData, resolve );\n\t\t\t\t}\tcatch( err ) {\n\t\t\t\t\treject( {\n\t\t\t\t\t\ttransactionState: 'ERROR',\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tintent: 'PAYMENT_AUTHORIZATION',\n\t\t\t\t\t\t\tmessage: 'Payment could not be processed',\n\t\t\t\t\t\t\treason: 'PAYMENT_DATA_INVALID'\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tthis.unblockUI();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Handles dynamic buy flow shipping address and shipping options callback intents.\n\t\t *\n\t\t * @param {object} intermediatePaymentData response from Google Pay API a shipping address or shipping option is selected in the payment sheet.\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference}\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet.\n\t\t */\n\t\tonPaymentDataChanged( intermediatePaymentData ) {\n\n\t\t\tthis.blockUI();\n\n\t\t\treturn new Promise(( resolve, reject ) => {\n\n\t\t\t\ttry {\n\t\t\t\t\tlet shippingAddress = intermediatePaymentData.shippingAddress;\n\t\t\t\t\tlet shippingOptionData = intermediatePaymentData.shippingOptionData;\n\t\t\t\t\tlet chosenShippingMethod = '';\n\n\t\t\t\t\tif ( intermediatePaymentData.callbackTrigger == 'SHIPPING_OPTION' ) {\n\t\t\t\t\t\tchosenShippingMethod = shippingOptionData.id;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getUpdatedTotals( shippingAddress, chosenShippingMethod, ( paymentDataRequestUpdate ) => {\n\n\t\t\t\t\t\tif ( paymentDataRequestUpdate.newShippingOptionParameters.shippingOptions.length == 0 ) {\n\t\t\t\t\t\t\tpaymentDataRequestUpdate = {\n\t\t\t\t\t\t\t\terror: this.getGoogleUnserviceableAddressError()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve( paymentDataRequestUpdate );\n\t\t\t\t\t} );\n\n\t\t\t\t}\tcatch( err ) {\n\t\t\t\t\tthis.failPayment( 'Could not load updated totals or process payment data request update. ' + err );\n\t\t\t\t}\n\n\t\t\t\tthis.unblockUI();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Provide Google Pay API with a payment amount, currency, and amount status\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}\n\t\t *\n\t\t * @param {function} resolve callback\n\t\t * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest\n\t\t */\n\t\tgetGoogleTransactionInfo( resolve ) {\n\n\t\t\t// get transaction info from cart\n\t\t\tconst data = {\n\t\t\t\taction: `wc_${this.gatewayID}_google_pay_get_transaction_info`,\n\t\t\t}\n\n\t\t\tif ( this.productID ) {\n\t\t\t\tdata.productID = this.productID;\n\t\t\t}\n\n\t\t\t$.post( this.ajaxURL, data, ( response ) => {\n\n\t\t\t\tif ( response.success ) {\n\t\t\t\t\tresolve( JSON.parse( response.data ) )\n\t\t\t\t} else {\n\t\t\t\t\tthis.failPayment( 'Could not build transaction info. ' + response.data.message );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Get updated totals and shipping options via AJAX for use in the PaymentDataRequest\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}\n\t\t *\n\t\t * @param {object} shippingAddress shipping address\n\t\t * @param {object} shippingMethod chosen shipping method\n\t\t * @param {function} resolve callback\n\t\t */\n\t\tgetUpdatedTotals( shippingAddress, shippingMethod, resolve ) {\n\n\t\t\tconst data = {\n\t\t\t\taction: `wc_${this.gatewayID}_google_pay_recalculate_totals`,\n\t\t\t\t'nonce': this.recalculateTotalsNonce,\n\t\t\t\tshippingAddress,\n\t\t\t\tshippingMethod\n\t\t\t}\n\n\t\t\tif ( this.productID ) {\n\t\t\t\tdata.productID = this.productID;\n\t\t\t}\n\n\t\t\t$.post( this.ajaxURL, data, ( response ) => {\n\n\t\t\t\tif ( response.success ) {\n\t\t\t\t\tresolve( JSON.parse( response.data ) )\n\t\t\t\t} else {\n\t\t\t\t\tthis.failPayment( 'Could not recalculate totals. ' + response.data.message );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Provide Google Pay API with shipping address parameters when using dynamic buy flow.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters}\n\t\t * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest\n\t\t */\n\t\tgetGoogleShippingAddressParameters() {\n\n\t\t\treturn {\n\t\t\t\tallowedCountryCodes: this.availableCountries\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Provide Google Pay API with a payment data error.\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError}\n\t\t * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate\n\t\t */\n\t\tgetGoogleUnserviceableAddressError() {\n\t\t\treturn {\n\t\t\t\treason: 'SHIPPING_ADDRESS_UNSERVICEABLE',\n\t\t\t\tmessage: 'Cannot ship to the selected address',\n\t\t\t\tintent: 'SHIPPING_ADDRESS'\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Add a Google Pay purchase button alongside an existing checkout button\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}\n\t\t * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}\n\t\t */\n\t\taddGooglePayButton() {\n\n\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\tconst button = paymentsClient.createButton( {\n\t\t\t\tonClick: ( event ) => this.onGooglePaymentButtonClicked( event ),\n\t\t\t\tbuttonColor: this.buttonStyle,\n\t\t\t\tbuttonSizeMode: 'fill'\n\t\t\t} );\n\t\t\tdocument.getElementById( 'sv-wc-google-pay-button-container' ).appendChild( button );\n\t\t}\n\n\t\t/**\n\t\t * Prefetch payment data to improve performance\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}\n\t\t */\n\t\tprefetchGooglePaymentData() {\n\n\t\t\tthis.getGooglePaymentDataRequest( ( paymentDataRequest ) => {\n\n\t\t\t\t// transactionInfo must be set but does not affect cache\n\t\t\t\tpaymentDataRequest.transactionInfo = {\n\t\t\t\t\ttotalPriceStatus: 'NOT_CURRENTLY_KNOWN',\n\t\t\t\t\tcurrencyCode: this.currencyCode\n\t\t\t\t};\n\t\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\t\tpaymentsClient.prefetchPaymentData( paymentDataRequest );\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Process payment data returned by the Google Pay API\n\t\t *\n\t\t * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}\n\t\t *\n\t\t * @param {object} paymentData response from Google Pay API after user approves payment\n\t\t * @param {function} resolve callback\n\t\t */\n\t\tprocessPayment( paymentData, resolve ) {\n\n\t\t\t// pass payment token to your gateway to process payment\n\t\t\tconst data = {\n\t\t\t\taction: `wc_${this.gatewayID}_google_pay_process_payment`,\n\t\t\t\tnonce: this.processNonce,\n\t\t\t\tpaymentData: JSON.stringify( paymentData ),\n\t\t\t}\n\n\t\t\tif ( this.productID && ! this.needsShipping ) {\n\t\t\t\tdata.productID = this.productID;\n\t\t\t}\n\n\t\t\treturn $.post( this.ajaxURL, data, ( response ) => {\n\t\t\t\tif ( response.success ) {\n\t\t\t\t\tresolve( {\n\t\t\t\t\t\ttransactionState: 'SUCCESS'\n\t\t\t\t\t} );\n\t\t\t\t\twindow.location = response.data.redirect;\n\t\t\t\t} else {\n\t\t\t\t\tresolve( {\n\t\t\t\t\t\ttransactionState: 'ERROR',\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tintent: 'SHIPPING_ADDRESS',\n\t\t\t\t\t\t\tmessage: 'Invalid data',\n\t\t\t\t\t\t\treason: 'PAYMENT_DATA_INVALID'\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tthis.failPayment( 'Payment could not be processed. ' + response.data.message );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Show Google Pay payment sheet when Google Pay payment button is clicked\n\t\t */\n\t\tonGooglePaymentButtonClicked( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.blockUI();\n\n\t\t\tthis.getGooglePaymentDataRequest( ( paymentDataRequest ) => {\n\n\t\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\t\ttry {\n\t\t\t\t\tpaymentsClient.loadPaymentData( paymentDataRequest );\n\t\t\t\t} catch ( err ) {\n\t\t\t\t\tthis.failPayment( 'Could not load payment data. ' + err );\n\t\t\t\t}\n\n\t\t\t\tthis.unblockUI();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded\n\t\t *\n\t\t * Display a Google Pay payment button after confirmation of the viewer's\n\t\t * ability to pay.\n\t\t */\n\t\tinit() {\n\n\t\t\t// initialize for the various pages\n\t\t\tif ( $( 'form.cart' ).length ) {\n\t\t\t\tthis.initProductPage();\n\t\t\t} else if ( $( 'form.woocommerce-cart-form' ).length ) {\n\t\t\t\tthis.initCartPage();\n\t\t\t} else if ( $( 'form.woocommerce-checkout' ).length) {\n\t\t\t\tthis.initCheckoutPage()\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.initGooglePay();\n\t\t}\n\n\t\t/**\n\t\t * Initializes Google Pay.\n\t\t */\n\t\tinitGooglePay() {\n\n\t\t\tconst paymentsClient = this.getGooglePaymentsClient();\n\t\t\tpaymentsClient.isReadyToPay( this.getGoogleIsReadyToPayRequest() )\n\t\t\t\t.then( ( response ) => {\n\t\t\t\t\tif ( response.result ) {\n\t\t\t\t\t\tthis.addGooglePayButton();\n\t\t\t\t\t\t// prefetch payment data to improve performance\n\t\t\t\t\t\tthis.prefetchGooglePaymentData();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.catch( ( err ) => {\n\t\t\t\t\tthis.failPayment( 'Google Pay is not ready. ' + err );\n\t\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Initializes the product page.\n\t\t */\n\t\tinitProductPage() {\n\t\t\tthis.uiElement = $( 'form.cart' );\n\t\t}\n\n\t\t/**\n\t\t * Initializes the cart page.\n\t\t */\n\t\tinitCartPage() {\n\t\t\tthis.uiElement = $( 'form.woocommerce-cart-form' ).parents( 'div.woocommerce' );\n\n\t\t\t// re-init if the cart totals are updated\n\t\t\t$( document.body ).on( 'updated_cart_totals', () => {\n\t\t\t\tthis.initGooglePay();\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Initializes the checkout page.\n\t\t */\n\t\tinitCheckoutPage() {\n\t\t\tthis.uiElement = $( 'form.woocommerce-checkout' );\n\t\t}\n\n\t\t/**\n\t\t * Fails the purchase based on the gateway result.\n\t\t */\n\t\tfailPayment( error ) {\n\n\t\t\tconsole.error( '[Google Pay] ' + error );\n\n\t\t\tthis.unblockUI();\n\n\t\t\tthis.renderErrors( [ this.genericError ] );\n\t\t}\n\n\t\t/**\n\t\t * Renders any new errors and bring them into the viewport.\n \t\t */\n\t\trenderErrors( errors ) {\n\n\t\t\t// hide and remove any previous errors\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\n\t\t\t// add errors\n\t\t\tthis.uiElement.prepend( '
  • ' + errors.join( '
  • ' ) + '
' );\n\n\t\t\t// unblock UI\n\t\t\tthis.uiElement.removeClass( 'processing' ).unblock();\n\n\t\t\t// scroll to top\n\t\t\t$( 'html, body' ).animate( { scrollTop: this.uiElement.offset().top - 100 }, 1000 );\n\t\t}\n\n\t\t/**\n\t\t * Blocks the payment form UI.\n\t\t */\n\t\tblockUI() {\n\t\t\tthis.uiElement.block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } );\n\t\t}\n\n\t\t/**\n\t\t * Unblocks the payment form UI.\n\t\t */\n\t\tunblockUI() {\n\t\t\tthis.uiElement.unblock();\n\t\t}\n\t}\n\n\t$( document.body ).trigger( 'sv_wc_google_pay_handler_v6_1_0_loaded' );\n\n} );\n"],"names":["jQuery","$","window","SV_WC_Google_Pay_Handler_v6_1_0","constructor","params","plugin_id","merchant_id","merchant_name","gateway_id","gateway_id_dasherized","gateway_merchant_id","environment","ajax_url","recalculate_totals_nonce","process_nonce","button_style","card_types","available_countries","currency_code","needs_shipping","generic_error","gatewayID","gatewayMerchantID","merchantID","merchantName","ajaxURL","recalculateTotalsNonce","processNonce","buttonStyle","availableCountries","currencyCode","needsShipping","genericError","product_id","productID","baseRequest","apiVersion","apiVersionMinor","tokenizationSpecification","type","parameters","baseCardPaymentMethod","allowedAuthMethods","allowedCardNetworks","billingAddressRequired","billingAddressParameters","format","phoneNumberRequired","cardPaymentMethod","Object","assign","paymentsClient","getGoogleIsReadyToPayRequest","allowedPaymentMethods","getGooglePaymentDataRequest","resolve","getGoogleTransactionInfo","transactionInfo","paymentDataRequest","merchantInfo","merchantId","emailRequired","callbackIntents","shippingAddressRequired","shippingAddressParameters","getGoogleShippingAddressParameters","shippingOptionRequired","getGooglePaymentsClient","args","paymentDataCallbacks","onPaymentAuthorized","paymentData","onPaymentDataChanged","google","payments","api","PaymentsClient","blockUI","Promise","reject","processPayment","err","transactionState","error","intent","message","reason","unblockUI","intermediatePaymentData","shippingAddress","shippingOptionData","chosenShippingMethod","callbackTrigger","id","getUpdatedTotals","paymentDataRequestUpdate","newShippingOptionParameters","shippingOptions","length","getGoogleUnserviceableAddressError","failPayment","data","action","post","response","success","JSON","parse","shippingMethod","allowedCountryCodes","addGooglePayButton","button","createButton","onClick","event","onGooglePaymentButtonClicked","buttonColor","buttonSizeMode","document","getElementById","appendChild","prefetchGooglePaymentData","totalPriceStatus","prefetchPaymentData","nonce","stringify","location","redirect","preventDefault","loadPaymentData","init","initProductPage","initCartPage","initCheckoutPage","initGooglePay","isReadyToPay","then","result","catch","uiElement","parents","body","on","console","renderErrors","errors","remove","prepend","join","removeClass","unblock","animate","scrollTop","offset","top","block","overlayCSS","background","opacity","trigger"],"version":3,"file":"sv-wc-payment-gateway-google-pay.js.map"} \ No newline at end of file diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js index 94ad263f3..6d8919018 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js @@ -1,2 +1,2 @@ -(function(){jQuery(function(e){return window.SV_WC_Payment_Methods_Handler_v6_0_1=class{constructor(t){this.replace_method_column=this.replace_method_column.bind(this),this.remove_duplicate_default_marks=this.remove_duplicate_default_marks.bind(this),this.edit_method=this.edit_method.bind(this),this.save_method=this.save_method.bind(this),this.cancel_edit=this.cancel_edit.bind(this),this.id=t.id,this.slug=t.slug,this.i18n=t.i18n,this.ajax_url=t.ajax_url,this.ajax_nonce=t.ajax_nonce,this.replace_method_column(),this.remove_duplicate_default_marks(),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .button.edit",e=>this.edit_method(e)),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .button.save",e=>this.save_method(e)),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .cancel-edit",e=>this.cancel_edit(e)),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .button.delete",t=>{var n;if(0!==(n=e(t.currentTarget)).parents("tr").find(`input[name=plugin-id][value=${this.slug}]`).length&&!confirm(this.i18n.delete_ays))return n.prop("disabled",!1).removeClass("disabled"),t.preventDefault()}),e('.button[href*="add-payment-method"]').on("click",event(function(){if(e(this).hasClass("disabled"))return event.preventDefault()}))}replace_method_column(){return e(".woocommerce-MyAccount-paymentMethods").find("tr").each((t,n)=>{var i;if(0!==e(n).find(`input[name=plugin-id][value=${this.slug}]`).length)return e(n).find("th.woocommerce-PaymentMethod--title").remove(),(i=e(n).find("td.woocommerce-PaymentMethod--title")).children().length>0&&e(n).find("td.woocommerce-PaymentMethod--method").html(i.html()),e(n).find("td.woocommerce-PaymentMethod--title").remove()})}remove_duplicate_default_marks(){return e(".woocommerce-MyAccount-paymentMethods").find("tr").each((t,n)=>e(n).find("td.woocommerce-PaymentMethod--default").find("mark.default:not(:first-child)").remove())}edit_method(t){var n,i;if(t.preventDefault(),0!==(i=(n=e(t.currentTarget)).parents("tr")).find(`input[name=plugin-id][value=${this.slug}]`).length)return i.find("div.view").hide(),i.find("div.edit").show(),i.addClass("editing"),n.text(this.i18n.cancel_button).removeClass("edit").addClass("cancel-edit").removeClass("button"),this.enable_editing_ui()}save_method(t){var n,i,o;if(t.preventDefault(),0!==(o=(n=e(t.currentTarget)).parents("tr")).find(`input[name=plugin-id][value=${this.slug}]`).length)return this.block_ui(),o.next(".error").remove(),i={action:`wc_${this.id}_save_payment_method`,nonce:this.ajax_nonce,token_id:o.find("input[name=token-id]").val(),data:o.find("input[name]").serialize()},e.post(this.ajax_url,i).done(e=>e.success?(null!=e.data.title&&o.find(".woocommerce-PaymentMethod--method").html(e.data.title),null!=e.data.nonce&&(this.ajax_nonce=e.data.nonce),n.siblings(".cancel-edit").removeClass("cancel-edit").addClass("edit").text(this.i18n.edit_button).addClass("button"),o.removeClass("editing"),this.disable_editing_ui()):this.display_error(o,e.data)).fail((e,t,n)=>this.display_error(o,n)).always(()=>this.unblock_ui())}cancel_edit(t){var n,i;if(t.preventDefault(),0!==(i=(n=e(t.currentTarget)).parents("tr")).find(`input[name=plugin-id][value=${this.slug}]`).length)return i.find("div.view").show(),i.find("div.edit").hide(),i.removeClass("editing"),n.removeClass("cancel-edit").addClass("edit").text(this.i18n.edit_button).addClass("button"),this.disable_editing_ui()}enable_editing_ui(){return e(".woocommerce-MyAccount-paymentMethods").addClass("editing"),e('.button[href*="add-payment-method"]').addClass("disabled")}disable_editing_ui(){return e(".woocommerce-MyAccount-paymentMethods").removeClass("editing"),e('.button[href*="add-payment-method"]').removeClass("disabled")}block_ui(){return e(".woocommerce-MyAccount-paymentMethods").parent("div").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock_ui(){return e(".woocommerce-MyAccount-paymentMethods").parent("div").unblock()}display_error(t,n,i=""){var o;return console.error(n),i||(i=this.i18n.save_error),o=e(".woocommerce-MyAccount-paymentMethods thead tr th").length,e(''+i+"").insertAfter(t).find("td").delay(8e3).slideUp(200)}},e(document.body).trigger("sv_wc_payment_methods_handler_v6_0_1_loaded")})}).call({}); +(function(){jQuery(function(e){return window.SV_WC_Payment_Methods_Handler_v6_1_0=class{constructor(t){this.replace_method_column=this.replace_method_column.bind(this),this.remove_duplicate_default_marks=this.remove_duplicate_default_marks.bind(this),this.edit_method=this.edit_method.bind(this),this.save_method=this.save_method.bind(this),this.cancel_edit=this.cancel_edit.bind(this),this.id=t.id,this.slug=t.slug,this.i18n=t.i18n,this.ajax_url=t.ajax_url,this.ajax_nonce=t.ajax_nonce,this.replace_method_column(),this.remove_duplicate_default_marks(),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .button.edit",e=>this.edit_method(e)),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .button.save",e=>this.save_method(e)),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .cancel-edit",e=>this.cancel_edit(e)),e(".woocommerce-MyAccount-paymentMethods").on("click",".woocommerce-PaymentMethod--actions .button.delete",t=>{var n;if(0!==(n=e(t.currentTarget)).parents("tr").find(`input[name=plugin-id][value=${this.slug}]`).length&&!confirm(this.i18n.delete_ays))return n.prop("disabled",!1).removeClass("disabled"),t.preventDefault()}),e('.button[href*="add-payment-method"]').on("click",event(function(){if(e(this).hasClass("disabled"))return event.preventDefault()}))}replace_method_column(){return e(".woocommerce-MyAccount-paymentMethods").find("tr").each((t,n)=>{var i;if(0!==e(n).find(`input[name=plugin-id][value=${this.slug}]`).length)return e(n).find("th.woocommerce-PaymentMethod--title").remove(),(i=e(n).find("td.woocommerce-PaymentMethod--title")).children().length>0&&e(n).find("td.woocommerce-PaymentMethod--method").html(i.html()),e(n).find("td.woocommerce-PaymentMethod--title").remove()})}remove_duplicate_default_marks(){return e(".woocommerce-MyAccount-paymentMethods").find("tr").each((t,n)=>e(n).find("td.woocommerce-PaymentMethod--default").find("mark.default:not(:first-child)").remove())}edit_method(t){var n,i;if(t.preventDefault(),0!==(i=(n=e(t.currentTarget)).parents("tr")).find(`input[name=plugin-id][value=${this.slug}]`).length)return i.find("div.view").hide(),i.find("div.edit").show(),i.addClass("editing"),n.text(this.i18n.cancel_button).removeClass("edit").addClass("cancel-edit").removeClass("button"),this.enable_editing_ui()}save_method(t){var n,i,o;if(t.preventDefault(),0!==(o=(n=e(t.currentTarget)).parents("tr")).find(`input[name=plugin-id][value=${this.slug}]`).length)return this.block_ui(),o.next(".error").remove(),i={action:`wc_${this.id}_save_payment_method`,nonce:this.ajax_nonce,token_id:o.find("input[name=token-id]").val(),data:o.find("input[name]").serialize()},e.post(this.ajax_url,i).done(e=>e.success?(null!=e.data.title&&o.find(".woocommerce-PaymentMethod--method").html(e.data.title),null!=e.data.nonce&&(this.ajax_nonce=e.data.nonce),n.siblings(".cancel-edit").removeClass("cancel-edit").addClass("edit").text(this.i18n.edit_button).addClass("button"),o.removeClass("editing"),this.disable_editing_ui()):this.display_error(o,e.data)).fail((e,t,n)=>this.display_error(o,n)).always(()=>this.unblock_ui())}cancel_edit(t){var n,i;if(t.preventDefault(),0!==(i=(n=e(t.currentTarget)).parents("tr")).find(`input[name=plugin-id][value=${this.slug}]`).length)return i.find("div.view").show(),i.find("div.edit").hide(),i.removeClass("editing"),n.removeClass("cancel-edit").addClass("edit").text(this.i18n.edit_button).addClass("button"),this.disable_editing_ui()}enable_editing_ui(){return e(".woocommerce-MyAccount-paymentMethods").addClass("editing"),e('.button[href*="add-payment-method"]').addClass("disabled")}disable_editing_ui(){return e(".woocommerce-MyAccount-paymentMethods").removeClass("editing"),e('.button[href*="add-payment-method"]').removeClass("disabled")}block_ui(){return e(".woocommerce-MyAccount-paymentMethods").parent("div").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock_ui(){return e(".woocommerce-MyAccount-paymentMethods").parent("div").unblock()}display_error(t,n,i=""){var o;return console.error(n),i||(i=this.i18n.save_error),o=e(".woocommerce-MyAccount-paymentMethods thead tr th").length,e(''+i+"").insertAfter(t).find("td").delay(8e3).slideUp(200)}},e(document.body).trigger("sv_wc_payment_methods_handler_v6_1_0_loaded")})}).call({}); //# sourceMappingURL=sv-wc-payment-gateway-my-payment-methods.js.map diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js.map b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js.map index 3b9b759b5..6d83c392d 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js.map +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-my-payment-methods.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-my-payment-methods.coffee"],"sourcesContent":["(() => {\nvar $f921149b16c1f5f9$exports = {};\n(function() {\n /*\n WooCommerce SkyVerge Payment Gateway My Payment Methods CoffeeScript\n Version 5.1.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n */ jQuery(function($) {\n \"use strict\";\n // The My Payment Methods handler.\n // @since 5.1.0\n window.SV_WC_Payment_Methods_Handler_v6_0_1 = class SV_WC_Payment_Methods_Handler_v6_0_1 {\n // Constructs the class.\n // @since 5.1.0\n // @param [Object] args, with the properties:\n // id: [String] plugin ID\n // slug: [String] plugin slug or dasherized ID\n // i18n: [Object] localized text strings\n // ajax_url: [String] URL for AJAX requests\n // ajax_nonce: [String] nonce for AJAX requests\n constructor(args){\n // Replace Method column content with Title column content, for FW tokens.\n // @since 5.8.0\n this.replace_method_column = this.replace_method_column.bind(this);\n // Removes duplicate \"Default\" marks.\n // They are already hidden using CSS, but should also be removed for accessibility.\n // @since 5.8.0\n this.remove_duplicate_default_marks = this.remove_duplicate_default_marks.bind(this);\n // Edits a payment method.\n // @since 5.1.0\n // @param [Object] event jQuery event object\n this.edit_method = this.edit_method.bind(this);\n // Saves a payment method.\n // @since 5.1.0\n // @param [Object] event jQuery event object\n this.save_method = this.save_method.bind(this);\n // Cancels/stop editing a payment method.\n // @since 5.1.0\n // @param [Object] event jQuery event object\n this.cancel_edit = this.cancel_edit.bind(this);\n this.id = args.id;\n this.slug = args.slug;\n this.i18n = args.i18n;\n this.ajax_url = args.ajax_url;\n this.ajax_nonce = args.ajax_nonce;\n // replace the \"Method\" column content for FW tokens\n this.replace_method_column();\n // remove duplicate \"Default\" marks\n this.remove_duplicate_default_marks();\n // handle the edit action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .button.edit\", (event1)=>{\n return this.edit_method(event1);\n });\n // handle the save action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .button.save\", (event1)=>{\n return this.save_method(event1);\n });\n // handle the cancel action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .cancel-edit\", (event1)=>{\n return this.cancel_edit(event1);\n });\n // handle the delete action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .button.delete\", (event1)=>{\n var button, row;\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n if (!confirm(this.i18n.delete_ays)) {\n // re-enable the button if user cancels (side note: WooCommerce core is the one that added the disabled state in the first place)\n button.prop('disabled', false).removeClass('disabled');\n return event1.preventDefault();\n }\n });\n // don't follow the Add Payment Method button URL if it's disabled\n $('.button[href*=\"add-payment-method\"]').on('click', event(function() {\n if ($(this).hasClass('disabled')) return event.preventDefault();\n }));\n }\n replace_method_column() {\n return $('.woocommerce-MyAccount-paymentMethods').find('tr').each((index, element)=>{\n var titleColumn;\n // check if the method belongs to this plugin\n if ($(element).find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n // delete the Title header\n $(element).find('th.woocommerce-PaymentMethod--title').remove();\n titleColumn = $(element).find('td.woocommerce-PaymentMethod--title');\n // Title column is not empty, this is a FW token\n if (titleColumn.children().length > 0) // replace Method column\n $(element).find('td.woocommerce-PaymentMethod--method').html(titleColumn.html());\n // delete Title column\n return $(element).find('td.woocommerce-PaymentMethod--title').remove();\n });\n }\n remove_duplicate_default_marks() {\n return $('.woocommerce-MyAccount-paymentMethods').find('tr').each((index, element)=>{\n return $(element).find('td.woocommerce-PaymentMethod--default').find('mark.default:not(:first-child)').remove();\n });\n }\n edit_method(event1) {\n var button, row;\n event1.preventDefault();\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n row.find('div.view').hide();\n row.find('div.edit').show();\n row.addClass('editing');\n // change the Edit button to \"Cancel\"\n button.text(this.i18n.cancel_button).removeClass('edit').addClass('cancel-edit').removeClass('button');\n return this.enable_editing_ui();\n }\n save_method(event1) {\n var button, data, row;\n event1.preventDefault();\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n this.block_ui();\n // remove any previous errors\n row.next('.error').remove();\n data = {\n action: `wc_${this.id}_save_payment_method`,\n nonce: this.ajax_nonce,\n token_id: row.find('input[name=token-id]').val(),\n data: row.find('input[name]').serialize()\n };\n return $.post(this.ajax_url, data).done((response)=>{\n if (!response.success) return this.display_error(row, response.data);\n if (response.data.title != null) row.find('.woocommerce-PaymentMethod--method').html(response.data.title);\n if (response.data.nonce != null) this.ajax_nonce = response.data.nonce;\n // change the \"Cancel\" button back to \"Edit\"\n button.siblings('.cancel-edit').removeClass('cancel-edit').addClass('edit').text(this.i18n.edit_button).addClass('button');\n row.removeClass('editing');\n return this.disable_editing_ui();\n }).fail((jqXHR, textStatus, error)=>{\n return this.display_error(row, error);\n }).always(()=>{\n return this.unblock_ui();\n });\n }\n cancel_edit(event1) {\n var button, row;\n event1.preventDefault();\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n row.find('div.view').show();\n row.find('div.edit').hide();\n row.removeClass('editing');\n // change the \"Cancel\" button back to \"Edit\"\n button.removeClass('cancel-edit').addClass('edit').text(this.i18n.edit_button).addClass('button');\n return this.disable_editing_ui();\n }\n // Sets the page UI to the \"editing\" state.\n // This brings proper focus to the method being edited and prevents\n // other available buttons/actions until the editing is finished or cancelled.\n // @since 5.1.1\n enable_editing_ui() {\n // set the methods table as 'editing'\n $(\".woocommerce-MyAccount-paymentMethods\").addClass('editing');\n // disable the Add Payment Method button\n return $('.button[href*=\"add-payment-method\"]').addClass('disabled');\n }\n // Sets the page UI back to the default state.\n // @since 5.1.1\n disable_editing_ui() {\n // removes the methods table's \"editing\" status\n $(\".woocommerce-MyAccount-paymentMethods\").removeClass('editing');\n // re-enable the Add Payment Method button\n return $('.button[href*=\"add-payment-method\"]').removeClass('disabled');\n }\n // Blocks the payment methods table UI.\n // @since 5.1.0\n block_ui() {\n return $(\".woocommerce-MyAccount-paymentMethods\").parent('div').block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n // Unblocks the payment methods table UI.\n // @since 5.1.0\n unblock_ui() {\n return $(\".woocommerce-MyAccount-paymentMethods\").parent('div').unblock();\n }\n // Displays an error message to the user.\n // @since 5.1.0\n // @param [Object] row payment method table row\n // @param [String] error raw error message\n // @param [String] message user error message\n display_error(row, error, message = '') {\n var columns;\n console.error(error);\n if (!message) message = this.i18n.save_error;\n columns = $(\".woocommerce-MyAccount-paymentMethods thead tr th\").length;\n return $('' + message + '').insertAfter(row).find('td').delay(8000).slideUp(200);\n }\n };\n // dispatch loaded event\n return $(document.body).trigger('sv_wc_payment_methods_handler_v6_0_1_loaded');\n });\n}).call($f921149b16c1f5f9$exports);\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-my-payment-methods.js.map\n","###\n WooCommerce SkyVerge Payment Gateway My Payment Methods CoffeeScript\n Version 5.1.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n###\njQuery ( $ ) ->\n\t\"use strict\"\n\n\t# The My Payment Methods handler.\n\t#\n\t# @since 5.1.0\n\tclass window.SV_WC_Payment_Methods_Handler_v6_0_1\n\n\n\t\t# Constructs the class.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] args, with the properties:\n\t\t# id: [String] plugin ID\n\t\t# slug: [String] plugin slug or dasherized ID\n\t\t# i18n: [Object] localized text strings\n\t\t# ajax_url: [String] URL for AJAX requests\n\t\t# ajax_nonce: [String] nonce for AJAX requests\n\t\tconstructor: ( args ) ->\n\n\t\t\t@id = args.id\n\t\t\t@slug = args.slug\n\t\t\t@i18n = args.i18n\n\t\t\t@ajax_url = args.ajax_url\n\t\t\t@ajax_nonce = args.ajax_nonce\n\n\t\t\t# replace the \"Method\" column content for FW tokens\n\t\t\tthis.replace_method_column()\n\n\t\t\t# remove duplicate \"Default\" marks\n\t\t\tthis.remove_duplicate_default_marks()\n\n\t\t\t# handle the edit action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .button.edit\", ( event ) => this.edit_method( event ) )\n\n\t\t\t# handle the save action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .button.save\", ( event ) => this.save_method( event ) )\n\n\t\t\t# handle the cancel action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .cancel-edit\", ( event ) => this.cancel_edit( event ) )\n\n\t\t\t# handle the delete action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .button.delete\", ( event ) =>\n\n\t\t\t\tbutton = $( event.currentTarget )\n\t\t\t\trow = button.parents( 'tr' )\n\n\t\t\t\t# check if the method belongs to this plugin\n\t\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\t\treturn\n\n\t\t\t\tif not confirm( @i18n.delete_ays )\n\t\t\t\t\t# re-enable the button if user cancels (side note: WooCommerce core is the one that added the disabled state in the first place)\n\t\t\t\t\tbutton.prop( 'disabled', false ).removeClass( 'disabled' )\n\t\t\t\t\tevent.preventDefault()\n\n\t\t\t)\n\n\t\t\t# don't follow the Add Payment Method button URL if it's disabled\n\t\t\t$( '.button[href*=\"add-payment-method\"]' ).on 'click', event ->\n\t\t\t\tevent.preventDefault() if $( this ).hasClass( 'disabled' )\n\n\n\t\t# Replace Method column content with Title column content, for FW tokens.\n\t\t#\n\t\t# @since 5.8.0\n\t\treplace_method_column: =>\n\n\t\t\t$( '.woocommerce-MyAccount-paymentMethods' ).find( 'tr' ).each ( index, element ) =>\n\n\t\t\t\t# check if the method belongs to this plugin\n\t\t\t\tif $( element ).find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\t\treturn\n\n\t\t\t\t# delete the Title header\n\t\t\t\t$( element ).find( 'th.woocommerce-PaymentMethod--title' ).remove()\n\n\t\t\t\ttitleColumn = $( element ).find( 'td.woocommerce-PaymentMethod--title' )\n\n\t\t\t\t# Title column is not empty, this is a FW token\n\t\t\t\tif ( titleColumn.children().length > 0 )\n\n\t\t\t\t\t# replace Method column\n\t\t\t\t\t$( element ).find( 'td.woocommerce-PaymentMethod--method' ).html( titleColumn.html() )\n\n\t\t\t\t# delete Title column\n\t\t\t\t$( element ).find( 'td.woocommerce-PaymentMethod--title' ).remove()\n\n\n\t\t# Removes duplicate \"Default\" marks.\n\t\t#\n\t\t# They are already hidden using CSS, but should also be removed for accessibility.\n\t\t#\n\t\t# @since 5.8.0\n\t\tremove_duplicate_default_marks: =>\n\n\t\t\t$( '.woocommerce-MyAccount-paymentMethods' ).find( 'tr' ).each ( index, element ) =>\n\n\t\t\t\t$( element ).find( 'td.woocommerce-PaymentMethod--default' ).find( 'mark.default:not(:first-child)' ).remove()\n\n\n\t\t# Edits a payment method.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] event jQuery event object\n\t\tedit_method: ( event ) =>\n\n\t\t\tevent.preventDefault()\n\n\t\t\tbutton = $( event.currentTarget )\n\t\t\trow = button.parents( 'tr' )\n\n\t\t\t# check if the method belongs to this plugin\n\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\treturn\n\n\t\t\trow.find( 'div.view' ).hide()\n\t\t\trow.find( 'div.edit' ).show()\n\t\t\trow.addClass( 'editing' )\n\n\t\t\t# change the Edit button to \"Cancel\"\n\t\t\tbutton.text( @i18n.cancel_button ).removeClass( 'edit' ).addClass( 'cancel-edit' ).removeClass( 'button' )\n\n\t\t\tthis.enable_editing_ui()\n\n\n\t\t# Saves a payment method.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] event jQuery event object\n\t\tsave_method: ( event ) =>\n\n\t\t\tevent.preventDefault()\n\n\t\t\tbutton = $( event.currentTarget )\n\t\t\trow = button.parents( 'tr' )\n\n\t\t\t# check if the method belongs to this plugin\n\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\treturn\n\n\t\t\tthis.block_ui()\n\n\t\t\t# remove any previous errors\n\t\t\trow.next( '.error' ).remove()\n\n\t\t\tdata =\n\t\t\t\taction: \"wc_#{@id}_save_payment_method\"\n\t\t\t\tnonce: @ajax_nonce\n\t\t\t\ttoken_id: row.find( 'input[name=token-id]' ).val()\n\t\t\t\tdata: row.find( 'input[name]' ).serialize()\n\n\t\t\t$.post( @ajax_url, data )\n\n\t\t\t\t.done ( response ) =>\n\n\t\t\t\t\treturn this.display_error( row, response.data ) unless response.success\n\n\t\t\t\t\tif response.data.title?\n\t\t\t\t\t\trow.find('.woocommerce-PaymentMethod--method').html( response.data.title )\n\n\t\t\t\t\tif response.data.nonce?\n\t\t\t\t\t\t@ajax_nonce = response.data.nonce\n\n\t\t\t\t\t# change the \"Cancel\" button back to \"Edit\"\n\t\t\t\t\tbutton.siblings( '.cancel-edit' ).removeClass( 'cancel-edit' ).addClass( 'edit' ).text( @i18n.edit_button ).addClass( 'button' )\n\n\t\t\t\t\trow.removeClass( 'editing' )\n\n\t\t\t\t\tthis.disable_editing_ui()\n\n\t\t\t\t.fail ( jqXHR, textStatus, error ) =>\n\n\t\t\t\t\tthis.display_error( row, error )\n\n\t\t\t\t.always =>\n\n\t\t\t\t\tthis.unblock_ui()\n\n\n\t\t# Cancels/stop editing a payment method.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] event jQuery event object\n\t\tcancel_edit: ( event ) =>\n\n\t\t\tevent.preventDefault()\n\n\t\t\tbutton = $( event.currentTarget )\n\t\t\trow = button.parents( 'tr' )\n\n\t\t\t# check if the method belongs to this plugin\n\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\treturn\n\n\t\t\trow.find( 'div.view' ).show()\n\t\t\trow.find( 'div.edit' ).hide()\n\t\t\trow.removeClass( 'editing' )\n\n\t\t\t# change the \"Cancel\" button back to \"Edit\"\n\t\t\tbutton.removeClass( 'cancel-edit' ).addClass( 'edit' ).text( @i18n.edit_button ).addClass( 'button' )\n\n\t\t\tthis.disable_editing_ui()\n\n\n\t\t# Sets the page UI to the \"editing\" state.\n\t\t#\n\t\t# This brings proper focus to the method being edited and prevents\n\t\t# other available buttons/actions until the editing is finished or cancelled.\n\t\t#\n\t\t# @since 5.1.1\n\t\tenable_editing_ui: ->\n\n\t\t\t# set the methods table as 'editing'\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).addClass( 'editing' )\n\n\t\t\t# disable the Add Payment Method button\n\t\t\t$( '.button[href*=\"add-payment-method\"]' ).addClass( 'disabled' )\n\n\n\t\t# Sets the page UI back to the default state.\n\t\t#\n\t\t# @since 5.1.1\n\t\tdisable_editing_ui: ->\n\n\t\t\t# removes the methods table's \"editing\" status\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).removeClass( 'editing' )\n\n\t\t\t# re-enable the Add Payment Method button\n\t\t\t$( '.button[href*=\"add-payment-method\"]' ).removeClass( 'disabled' )\n\n\n\t\t# Blocks the payment methods table UI.\n\t\t#\n\t\t# @since 5.1.0\n\t\tblock_ui: -> $( \".woocommerce-MyAccount-paymentMethods\" ).parent( 'div' ).block( message: null, overlayCSS: background: '#fff', opacity: 0.6 )\n\n\n\t\t# Unblocks the payment methods table UI.\n\t\t#\n\t\t# @since 5.1.0\n\t\tunblock_ui: -> $( \".woocommerce-MyAccount-paymentMethods\" ).parent( 'div' ).unblock()\n\n\n\t\t# Displays an error message to the user.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] row payment method table row\n\t\t# @param [String] error raw error message\n\t\t# @param [String] message user error message\n\t\tdisplay_error: ( row, error, message = '' ) ->\n\n\t\t\tconsole.error( error )\n\n\t\t\tmessage = @i18n.save_error unless message\n\t\t\tcolumns = $( \".woocommerce-MyAccount-paymentMethods thead tr th\" ).length\n\n\t\t\t$( '' + message + '' ).insertAfter( row ).find( 'td' ).delay( 8000 ).slideUp( 200 )\n\n\n\t# dispatch loaded event\n\t$( document.body ).trigger( 'sv_wc_payment_methods_handler_v6_0_1_loaded' )\n"],"names":["jQuery","$","window","SV_WC_Payment_Methods_Handler_v6_0_1","constructor","args","replace_method_column","bind","remove_duplicate_default_marks","edit_method","save_method","cancel_edit","id","slug","i18n","ajax_url","ajax_nonce","on","event1","button","row","currentTarget","parents","find","length","confirm","delete_ays","prop","removeClass","preventDefault","event","hasClass","each","index","element","titleColumn","remove","children","html","hide","show","addClass","text","cancel_button","enable_editing_ui","data","block_ui","next","action","nonce","token_id","val","serialize","post","done","response","success","title","siblings","edit_button","disable_editing_ui","display_error","fail","jqXHR","textStatus","error","always","unblock_ui","parent","block","message","overlayCSS","background","opacity","unblock","columns","console","save_error","insertAfter","delay","slideUp","document","body","trigger","call"],"version":3,"file":"sv-wc-payment-gateway-my-payment-methods.js.map"} \ No newline at end of file +{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-my-payment-methods.coffee"],"sourcesContent":["(() => {\nvar $f921149b16c1f5f9$exports = {};\n(function() {\n /*\n WooCommerce SkyVerge Payment Gateway My Payment Methods CoffeeScript\n Version 5.1.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n */ jQuery(function($) {\n \"use strict\";\n // The My Payment Methods handler.\n // @since 5.1.0\n window.SV_WC_Payment_Methods_Handler_v6_1_0 = class SV_WC_Payment_Methods_Handler_v6_1_0 {\n // Constructs the class.\n // @since 5.1.0\n // @param [Object] args, with the properties:\n // id: [String] plugin ID\n // slug: [String] plugin slug or dasherized ID\n // i18n: [Object] localized text strings\n // ajax_url: [String] URL for AJAX requests\n // ajax_nonce: [String] nonce for AJAX requests\n constructor(args){\n // Replace Method column content with Title column content, for FW tokens.\n // @since 5.8.0\n this.replace_method_column = this.replace_method_column.bind(this);\n // Removes duplicate \"Default\" marks.\n // They are already hidden using CSS, but should also be removed for accessibility.\n // @since 5.8.0\n this.remove_duplicate_default_marks = this.remove_duplicate_default_marks.bind(this);\n // Edits a payment method.\n // @since 5.1.0\n // @param [Object] event jQuery event object\n this.edit_method = this.edit_method.bind(this);\n // Saves a payment method.\n // @since 5.1.0\n // @param [Object] event jQuery event object\n this.save_method = this.save_method.bind(this);\n // Cancels/stop editing a payment method.\n // @since 5.1.0\n // @param [Object] event jQuery event object\n this.cancel_edit = this.cancel_edit.bind(this);\n this.id = args.id;\n this.slug = args.slug;\n this.i18n = args.i18n;\n this.ajax_url = args.ajax_url;\n this.ajax_nonce = args.ajax_nonce;\n // replace the \"Method\" column content for FW tokens\n this.replace_method_column();\n // remove duplicate \"Default\" marks\n this.remove_duplicate_default_marks();\n // handle the edit action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .button.edit\", (event1)=>{\n return this.edit_method(event1);\n });\n // handle the save action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .button.save\", (event1)=>{\n return this.save_method(event1);\n });\n // handle the cancel action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .cancel-edit\", (event1)=>{\n return this.cancel_edit(event1);\n });\n // handle the delete action\n $(\".woocommerce-MyAccount-paymentMethods\").on('click', \".woocommerce-PaymentMethod--actions .button.delete\", (event1)=>{\n var button, row;\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n if (!confirm(this.i18n.delete_ays)) {\n // re-enable the button if user cancels (side note: WooCommerce core is the one that added the disabled state in the first place)\n button.prop('disabled', false).removeClass('disabled');\n return event1.preventDefault();\n }\n });\n // don't follow the Add Payment Method button URL if it's disabled\n $('.button[href*=\"add-payment-method\"]').on('click', event(function() {\n if ($(this).hasClass('disabled')) return event.preventDefault();\n }));\n }\n replace_method_column() {\n return $('.woocommerce-MyAccount-paymentMethods').find('tr').each((index, element)=>{\n var titleColumn;\n // check if the method belongs to this plugin\n if ($(element).find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n // delete the Title header\n $(element).find('th.woocommerce-PaymentMethod--title').remove();\n titleColumn = $(element).find('td.woocommerce-PaymentMethod--title');\n // Title column is not empty, this is a FW token\n if (titleColumn.children().length > 0) // replace Method column\n $(element).find('td.woocommerce-PaymentMethod--method').html(titleColumn.html());\n // delete Title column\n return $(element).find('td.woocommerce-PaymentMethod--title').remove();\n });\n }\n remove_duplicate_default_marks() {\n return $('.woocommerce-MyAccount-paymentMethods').find('tr').each((index, element)=>{\n return $(element).find('td.woocommerce-PaymentMethod--default').find('mark.default:not(:first-child)').remove();\n });\n }\n edit_method(event1) {\n var button, row;\n event1.preventDefault();\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n row.find('div.view').hide();\n row.find('div.edit').show();\n row.addClass('editing');\n // change the Edit button to \"Cancel\"\n button.text(this.i18n.cancel_button).removeClass('edit').addClass('cancel-edit').removeClass('button');\n return this.enable_editing_ui();\n }\n save_method(event1) {\n var button, data, row;\n event1.preventDefault();\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n this.block_ui();\n // remove any previous errors\n row.next('.error').remove();\n data = {\n action: `wc_${this.id}_save_payment_method`,\n nonce: this.ajax_nonce,\n token_id: row.find('input[name=token-id]').val(),\n data: row.find('input[name]').serialize()\n };\n return $.post(this.ajax_url, data).done((response)=>{\n if (!response.success) return this.display_error(row, response.data);\n if (response.data.title != null) row.find('.woocommerce-PaymentMethod--method').html(response.data.title);\n if (response.data.nonce != null) this.ajax_nonce = response.data.nonce;\n // change the \"Cancel\" button back to \"Edit\"\n button.siblings('.cancel-edit').removeClass('cancel-edit').addClass('edit').text(this.i18n.edit_button).addClass('button');\n row.removeClass('editing');\n return this.disable_editing_ui();\n }).fail((jqXHR, textStatus, error)=>{\n return this.display_error(row, error);\n }).always(()=>{\n return this.unblock_ui();\n });\n }\n cancel_edit(event1) {\n var button, row;\n event1.preventDefault();\n button = $(event1.currentTarget);\n row = button.parents('tr');\n // check if the method belongs to this plugin\n if (row.find(`input[name=plugin-id][value=${this.slug}]`).length === 0) return;\n row.find('div.view').show();\n row.find('div.edit').hide();\n row.removeClass('editing');\n // change the \"Cancel\" button back to \"Edit\"\n button.removeClass('cancel-edit').addClass('edit').text(this.i18n.edit_button).addClass('button');\n return this.disable_editing_ui();\n }\n // Sets the page UI to the \"editing\" state.\n // This brings proper focus to the method being edited and prevents\n // other available buttons/actions until the editing is finished or cancelled.\n // @since 5.1.1\n enable_editing_ui() {\n // set the methods table as 'editing'\n $(\".woocommerce-MyAccount-paymentMethods\").addClass('editing');\n // disable the Add Payment Method button\n return $('.button[href*=\"add-payment-method\"]').addClass('disabled');\n }\n // Sets the page UI back to the default state.\n // @since 5.1.1\n disable_editing_ui() {\n // removes the methods table's \"editing\" status\n $(\".woocommerce-MyAccount-paymentMethods\").removeClass('editing');\n // re-enable the Add Payment Method button\n return $('.button[href*=\"add-payment-method\"]').removeClass('disabled');\n }\n // Blocks the payment methods table UI.\n // @since 5.1.0\n block_ui() {\n return $(\".woocommerce-MyAccount-paymentMethods\").parent('div').block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n // Unblocks the payment methods table UI.\n // @since 5.1.0\n unblock_ui() {\n return $(\".woocommerce-MyAccount-paymentMethods\").parent('div').unblock();\n }\n // Displays an error message to the user.\n // @since 5.1.0\n // @param [Object] row payment method table row\n // @param [String] error raw error message\n // @param [String] message user error message\n display_error(row, error, message = '') {\n var columns;\n console.error(error);\n if (!message) message = this.i18n.save_error;\n columns = $(\".woocommerce-MyAccount-paymentMethods thead tr th\").length;\n return $('' + message + '').insertAfter(row).find('td').delay(8000).slideUp(200);\n }\n };\n // dispatch loaded event\n return $(document.body).trigger('sv_wc_payment_methods_handler_v6_1_0_loaded');\n });\n}).call($f921149b16c1f5f9$exports);\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-my-payment-methods.js.map\n","###\n WooCommerce SkyVerge Payment Gateway My Payment Methods CoffeeScript\n Version 5.1.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n###\njQuery ( $ ) ->\n\t\"use strict\"\n\n\t# The My Payment Methods handler.\n\t#\n\t# @since 5.1.0\n\tclass window.SV_WC_Payment_Methods_Handler_v6_1_0\n\n\n\t\t# Constructs the class.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] args, with the properties:\n\t\t# id: [String] plugin ID\n\t\t# slug: [String] plugin slug or dasherized ID\n\t\t# i18n: [Object] localized text strings\n\t\t# ajax_url: [String] URL for AJAX requests\n\t\t# ajax_nonce: [String] nonce for AJAX requests\n\t\tconstructor: ( args ) ->\n\n\t\t\t@id = args.id\n\t\t\t@slug = args.slug\n\t\t\t@i18n = args.i18n\n\t\t\t@ajax_url = args.ajax_url\n\t\t\t@ajax_nonce = args.ajax_nonce\n\n\t\t\t# replace the \"Method\" column content for FW tokens\n\t\t\tthis.replace_method_column()\n\n\t\t\t# remove duplicate \"Default\" marks\n\t\t\tthis.remove_duplicate_default_marks()\n\n\t\t\t# handle the edit action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .button.edit\", ( event ) => this.edit_method( event ) )\n\n\t\t\t# handle the save action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .button.save\", ( event ) => this.save_method( event ) )\n\n\t\t\t# handle the cancel action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .cancel-edit\", ( event ) => this.cancel_edit( event ) )\n\n\t\t\t# handle the delete action\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).on( 'click', \".woocommerce-PaymentMethod--actions .button.delete\", ( event ) =>\n\n\t\t\t\tbutton = $( event.currentTarget )\n\t\t\t\trow = button.parents( 'tr' )\n\n\t\t\t\t# check if the method belongs to this plugin\n\t\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\t\treturn\n\n\t\t\t\tif not confirm( @i18n.delete_ays )\n\t\t\t\t\t# re-enable the button if user cancels (side note: WooCommerce core is the one that added the disabled state in the first place)\n\t\t\t\t\tbutton.prop( 'disabled', false ).removeClass( 'disabled' )\n\t\t\t\t\tevent.preventDefault()\n\n\t\t\t)\n\n\t\t\t# don't follow the Add Payment Method button URL if it's disabled\n\t\t\t$( '.button[href*=\"add-payment-method\"]' ).on 'click', event ->\n\t\t\t\tevent.preventDefault() if $( this ).hasClass( 'disabled' )\n\n\n\t\t# Replace Method column content with Title column content, for FW tokens.\n\t\t#\n\t\t# @since 5.8.0\n\t\treplace_method_column: =>\n\n\t\t\t$( '.woocommerce-MyAccount-paymentMethods' ).find( 'tr' ).each ( index, element ) =>\n\n\t\t\t\t# check if the method belongs to this plugin\n\t\t\t\tif $( element ).find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\t\treturn\n\n\t\t\t\t# delete the Title header\n\t\t\t\t$( element ).find( 'th.woocommerce-PaymentMethod--title' ).remove()\n\n\t\t\t\ttitleColumn = $( element ).find( 'td.woocommerce-PaymentMethod--title' )\n\n\t\t\t\t# Title column is not empty, this is a FW token\n\t\t\t\tif ( titleColumn.children().length > 0 )\n\n\t\t\t\t\t# replace Method column\n\t\t\t\t\t$( element ).find( 'td.woocommerce-PaymentMethod--method' ).html( titleColumn.html() )\n\n\t\t\t\t# delete Title column\n\t\t\t\t$( element ).find( 'td.woocommerce-PaymentMethod--title' ).remove()\n\n\n\t\t# Removes duplicate \"Default\" marks.\n\t\t#\n\t\t# They are already hidden using CSS, but should also be removed for accessibility.\n\t\t#\n\t\t# @since 5.8.0\n\t\tremove_duplicate_default_marks: =>\n\n\t\t\t$( '.woocommerce-MyAccount-paymentMethods' ).find( 'tr' ).each ( index, element ) =>\n\n\t\t\t\t$( element ).find( 'td.woocommerce-PaymentMethod--default' ).find( 'mark.default:not(:first-child)' ).remove()\n\n\n\t\t# Edits a payment method.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] event jQuery event object\n\t\tedit_method: ( event ) =>\n\n\t\t\tevent.preventDefault()\n\n\t\t\tbutton = $( event.currentTarget )\n\t\t\trow = button.parents( 'tr' )\n\n\t\t\t# check if the method belongs to this plugin\n\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\treturn\n\n\t\t\trow.find( 'div.view' ).hide()\n\t\t\trow.find( 'div.edit' ).show()\n\t\t\trow.addClass( 'editing' )\n\n\t\t\t# change the Edit button to \"Cancel\"\n\t\t\tbutton.text( @i18n.cancel_button ).removeClass( 'edit' ).addClass( 'cancel-edit' ).removeClass( 'button' )\n\n\t\t\tthis.enable_editing_ui()\n\n\n\t\t# Saves a payment method.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] event jQuery event object\n\t\tsave_method: ( event ) =>\n\n\t\t\tevent.preventDefault()\n\n\t\t\tbutton = $( event.currentTarget )\n\t\t\trow = button.parents( 'tr' )\n\n\t\t\t# check if the method belongs to this plugin\n\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\treturn\n\n\t\t\tthis.block_ui()\n\n\t\t\t# remove any previous errors\n\t\t\trow.next( '.error' ).remove()\n\n\t\t\tdata =\n\t\t\t\taction: \"wc_#{@id}_save_payment_method\"\n\t\t\t\tnonce: @ajax_nonce\n\t\t\t\ttoken_id: row.find( 'input[name=token-id]' ).val()\n\t\t\t\tdata: row.find( 'input[name]' ).serialize()\n\n\t\t\t$.post( @ajax_url, data )\n\n\t\t\t\t.done ( response ) =>\n\n\t\t\t\t\treturn this.display_error( row, response.data ) unless response.success\n\n\t\t\t\t\tif response.data.title?\n\t\t\t\t\t\trow.find('.woocommerce-PaymentMethod--method').html( response.data.title )\n\n\t\t\t\t\tif response.data.nonce?\n\t\t\t\t\t\t@ajax_nonce = response.data.nonce\n\n\t\t\t\t\t# change the \"Cancel\" button back to \"Edit\"\n\t\t\t\t\tbutton.siblings( '.cancel-edit' ).removeClass( 'cancel-edit' ).addClass( 'edit' ).text( @i18n.edit_button ).addClass( 'button' )\n\n\t\t\t\t\trow.removeClass( 'editing' )\n\n\t\t\t\t\tthis.disable_editing_ui()\n\n\t\t\t\t.fail ( jqXHR, textStatus, error ) =>\n\n\t\t\t\t\tthis.display_error( row, error )\n\n\t\t\t\t.always =>\n\n\t\t\t\t\tthis.unblock_ui()\n\n\n\t\t# Cancels/stop editing a payment method.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] event jQuery event object\n\t\tcancel_edit: ( event ) =>\n\n\t\t\tevent.preventDefault()\n\n\t\t\tbutton = $( event.currentTarget )\n\t\t\trow = button.parents( 'tr' )\n\n\t\t\t# check if the method belongs to this plugin\n\t\t\tif row.find( \"input[name=plugin-id][value=#{@slug}]\" ).length is 0\n\t\t\t\treturn\n\n\t\t\trow.find( 'div.view' ).show()\n\t\t\trow.find( 'div.edit' ).hide()\n\t\t\trow.removeClass( 'editing' )\n\n\t\t\t# change the \"Cancel\" button back to \"Edit\"\n\t\t\tbutton.removeClass( 'cancel-edit' ).addClass( 'edit' ).text( @i18n.edit_button ).addClass( 'button' )\n\n\t\t\tthis.disable_editing_ui()\n\n\n\t\t# Sets the page UI to the \"editing\" state.\n\t\t#\n\t\t# This brings proper focus to the method being edited and prevents\n\t\t# other available buttons/actions until the editing is finished or cancelled.\n\t\t#\n\t\t# @since 5.1.1\n\t\tenable_editing_ui: ->\n\n\t\t\t# set the methods table as 'editing'\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).addClass( 'editing' )\n\n\t\t\t# disable the Add Payment Method button\n\t\t\t$( '.button[href*=\"add-payment-method\"]' ).addClass( 'disabled' )\n\n\n\t\t# Sets the page UI back to the default state.\n\t\t#\n\t\t# @since 5.1.1\n\t\tdisable_editing_ui: ->\n\n\t\t\t# removes the methods table's \"editing\" status\n\t\t\t$( \".woocommerce-MyAccount-paymentMethods\" ).removeClass( 'editing' )\n\n\t\t\t# re-enable the Add Payment Method button\n\t\t\t$( '.button[href*=\"add-payment-method\"]' ).removeClass( 'disabled' )\n\n\n\t\t# Blocks the payment methods table UI.\n\t\t#\n\t\t# @since 5.1.0\n\t\tblock_ui: -> $( \".woocommerce-MyAccount-paymentMethods\" ).parent( 'div' ).block( message: null, overlayCSS: background: '#fff', opacity: 0.6 )\n\n\n\t\t# Unblocks the payment methods table UI.\n\t\t#\n\t\t# @since 5.1.0\n\t\tunblock_ui: -> $( \".woocommerce-MyAccount-paymentMethods\" ).parent( 'div' ).unblock()\n\n\n\t\t# Displays an error message to the user.\n\t\t#\n\t\t# @since 5.1.0\n\t\t#\n\t\t# @param [Object] row payment method table row\n\t\t# @param [String] error raw error message\n\t\t# @param [String] message user error message\n\t\tdisplay_error: ( row, error, message = '' ) ->\n\n\t\t\tconsole.error( error )\n\n\t\t\tmessage = @i18n.save_error unless message\n\t\t\tcolumns = $( \".woocommerce-MyAccount-paymentMethods thead tr th\" ).length\n\n\t\t\t$( '' + message + '' ).insertAfter( row ).find( 'td' ).delay( 8000 ).slideUp( 200 )\n\n\n\t# dispatch loaded event\n\t$( document.body ).trigger( 'sv_wc_payment_methods_handler_v6_1_0_loaded' )\n"],"names":["jQuery","$","window","SV_WC_Payment_Methods_Handler_v6_1_0","constructor","args","replace_method_column","bind","remove_duplicate_default_marks","edit_method","save_method","cancel_edit","id","slug","i18n","ajax_url","ajax_nonce","on","event1","button","row","currentTarget","parents","find","length","confirm","delete_ays","prop","removeClass","preventDefault","event","hasClass","each","index","element","titleColumn","remove","children","html","hide","show","addClass","text","cancel_button","enable_editing_ui","data","block_ui","next","action","nonce","token_id","val","serialize","post","done","response","success","title","siblings","edit_button","disable_editing_ui","display_error","fail","jqXHR","textStatus","error","always","unblock_ui","parent","block","message","overlayCSS","background","opacity","unblock","columns","console","save_error","insertAfter","delay","slideUp","document","body","trigger","call"],"version":3,"file":"sv-wc-payment-gateway-my-payment-methods.js.map"} \ No newline at end of file diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js index 3fa53bcbb..6f4250cad 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js @@ -1,2 +1,2 @@ -(function(){var e=[].indexOf;jQuery(function(t){return window.SV_WC_Payment_Form_Handler_v6_0_1=class{constructor(e){if(this.id=e.id,this.id_dasherized=e.id_dasherized,this.plugin_id=e.plugin_id,this.type=e.type,this.csc_required=e.csc_required,this.csc_required_for_tokens=e.csc_required_for_tokens,this.enabled_card_types=e.enabled_card_types,t("form.checkout").length)this.form=t("form.checkout"),this.handle_checkout_page();else if(t("form#order_review").length)this.form=t("form#order_review"),this.handle_pay_page();else if(t("form#add_payment_method").length)this.form=t("form#add_payment_method"),this.handle_add_payment_method_page();else{console.log("No payment form found!");return}this.params=window.sv_wc_payment_gateway_payment_form_params,"echeck"===this.type&&this.form.on("click",".js-sv-wc-payment-gateway-echeck-form-check-hint, .js-sv-wc-payment-gateway-echeck-form-sample-check",()=>this.handle_sample_check_hint()),t(document).trigger("sv_wc_payment_form_handler_init",{id:this.id,instance:this})}handle_checkout_page(){return"credit-card"===this.type&&t(document.body).on("updated_checkout",()=>this.format_credit_card_inputs()),t(document.body).on("updated_checkout",()=>this.set_payment_fields()),t(document.body).on("updated_checkout",()=>this.handle_saved_payment_methods()),this.form.on(`checkout_place_order_${this.id}`,()=>this.validate_payment_data())}handle_pay_page(){return this.set_payment_fields(),"credit-card"===this.type&&this.format_credit_card_inputs(),this.handle_saved_payment_methods(),this.form.submit(()=>{if(t("#order_review input[name=payment_method]:checked").val()===this.id)return this.validate_payment_data()})}handle_add_payment_method_page(){return this.set_payment_fields(),"credit-card"===this.type&&this.format_credit_card_inputs(),this.form.submit(()=>{if(t("#add_payment_method input[name=payment_method]:checked").val()===this.id)return this.validate_payment_data()})}set_payment_fields(){return this.payment_fields=t(`.payment_method_${this.id}`),this.payment_fields.find(".validate-required .input-text").each((e,a)=>!t(a).val()&&t(a).trigger("input"))}validate_payment_data(){var e,a;return!this.form.is(".processing")&&(this.saved_payment_method_selected=this.payment_fields.find(".js-sv-wc-payment-gateway-payment-token:checked").val(),a="credit-card"===this.type?this.validate_card_data():this.validate_account_data(),e=!1!==t(document.body).triggerHandler("sv_wc_payment_form_valid_payment_data",{payment_form:this,passed_validation:a}),a&&e)}format_credit_card_inputs(){var e,a,r;return e=t(".js-sv-wc-payment-gateway-credit-card-form-account-number").payment("formatCardNumber"),r=t(".js-sv-wc-payment-gateway-credit-card-form-expiry").payment("formatCardExpiry"),a=t(".js-sv-wc-payment-gateway-credit-card-form-csc").payment("formatCardCVC"),e.val()&&e.val().length>0&&e.trigger("change"),r.val()&&r.val().length>0&&r.trigger("change"),a.val()&&a.val().length>0&&a.trigger("change"),t(".js-sv-wc-payment-gateway-credit-card-form-input").on("change paste keyup",()=>this.do_inline_credit_card_validation())}do_inline_credit_card_validation(){var a,r,i,s;return(a=t(".js-sv-wc-payment-gateway-credit-card-form-account-number"),s=t(".js-sv-wc-payment-gateway-credit-card-form-expiry"),i=t(".js-sv-wc-payment-gateway-credit-card-form-csc"),r=t.payment.cardType(a.val()),0>e.call(this.enabled_card_types,r)?a.addClass("invalid-card-type"):a.removeClass("invalid-card-type"),t.payment.validateCardExpiry(s.payment("cardExpiryVal"))?s.addClass("identified"):s.removeClass("identified"),t.payment.validateCardCVC(i.val()))?i.addClass("identified"):i.removeClass("identified")}validate_card_data(){var e,a,r,i;return(r=[],null!=(a=this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-csc").val())&&(a?(/\D/.test(a)&&r.push(this.params.cvv_digits_invalid),(a.length<3||a.length>4)&&r.push(this.params.cvv_length_invalid)):this.csc_required&&(!this.saved_payment_method_selected||this.csc_required_for_tokens)&&r.push(this.params.cvv_missing)),this.saved_payment_method_selected||(e=this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-account-number").val(),i=t.payment.cardExpiryVal(this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-expiry").val()),(e=e.replace(/-|\s/g,""))?((e.length<12||e.length>19)&&r.push(this.params.card_number_length_invalid),/\D/.test(e)&&r.push(this.params.card_number_digits_invalid),t.payment.validateCardNumber(e)||r.push(this.params.card_number_invalid)):r.push(this.params.card_number_missing),t.payment.validateCardExpiry(i)||r.push(this.params.card_exp_date_invalid)),r.length>0)?(this.render_errors(r),!1):(this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-account-number").val(e),!0)}validate_account_data(){var e,t,a;return!!this.saved_payment_method_selected||((t=[],a=this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-routing-number").val(),e=this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-account-number").val(),a?(9!==a.length&&t.push(this.params.routing_number_length_invalid),/\D/.test(a)&&t.push(this.params.routing_number_digits_invalid)):t.push(this.params.routing_number_missing),e?((e.length<3||e.length>17)&&t.push(this.params.account_number_length_invalid),/\D/.test(e)&&t.push(this.params.account_number_invalid)):t.push(this.params.account_number_missing),t.length>0)?(this.render_errors(t),!1):(this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-account-number").val(e),!0))}render_errors(e){return t(".woocommerce-error, .woocommerce-message").remove(),this.form.prepend('
  • '+e.join("
  • ")+"
"),this.form.removeClass("processing").unblock(),this.form.find(".input-text, select").blur(),t("html, body").animate({scrollTop:this.form.offset().top-100},1e3)}handle_saved_payment_methods(){var e,a,r,i;if(i=this.id_dasherized,this.csc_required,r=this.csc_required_for_tokens,e=(a=t(`div.js-wc-${i}-new-payment-method-form`)).find(".js-sv-wc-payment-gateway-credit-card-form-csc").closest(".form-row"),t(`input.js-wc-${this.id_dasherized}-payment-token`).on("change",function(){if(t(`input.js-wc-${i}-payment-token:checked`).val()){if(a.slideUp(200),r)return e.removeClass("form-row-last").addClass("form-row-first"),a.after(e)}else if(a.slideDown(200),r)return e.removeClass("form-row-first").addClass("form-row-last"),a.find(".js-sv-wc-payment-gateway-credit-card-form-expiry").closest(".form-row").after(e)}).change(),t("input#createaccount").on("change",function(){var e;return(e=t(`input.js-wc-${i}-tokenize-payment-method`).closest("p.form-row"),t(this).is(":checked"))?(e.slideDown(),e.next().show()):(e.hide(),e.next().hide())}),!t("input#createaccount").is(":checked"))return t("input#createaccount").change()}handle_sample_check_hint(){var e;return(e=this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-sample-check")).is(":visible")?e.slideUp():e.slideDown()}block_ui(){return this.form.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock_ui(){return this.form.unblock()}},t(document.body).trigger("sv_wc_payment_form_handler_v6_0_1_loaded")})}).call({}); +(function(){var e=[].indexOf;jQuery(function(t){return window.SV_WC_Payment_Form_Handler_v6_1_0=class{constructor(e){if(this.id=e.id,this.id_dasherized=e.id_dasherized,this.plugin_id=e.plugin_id,this.type=e.type,this.csc_required=e.csc_required,this.csc_required_for_tokens=e.csc_required_for_tokens,this.enabled_card_types=e.enabled_card_types,t("form.checkout").length)this.form=t("form.checkout"),this.handle_checkout_page();else if(t("form#order_review").length)this.form=t("form#order_review"),this.handle_pay_page();else if(t("form#add_payment_method").length)this.form=t("form#add_payment_method"),this.handle_add_payment_method_page();else{console.log("No payment form found!");return}this.params=window.sv_wc_payment_gateway_payment_form_params,"echeck"===this.type&&this.form.on("click",".js-sv-wc-payment-gateway-echeck-form-check-hint, .js-sv-wc-payment-gateway-echeck-form-sample-check",()=>this.handle_sample_check_hint()),t(document).trigger("sv_wc_payment_form_handler_init",{id:this.id,instance:this})}handle_checkout_page(){return"credit-card"===this.type&&t(document.body).on("updated_checkout",()=>this.format_credit_card_inputs()),t(document.body).on("updated_checkout",()=>this.set_payment_fields()),t(document.body).on("updated_checkout",()=>this.handle_saved_payment_methods()),this.form.on(`checkout_place_order_${this.id}`,()=>this.validate_payment_data())}handle_pay_page(){return this.set_payment_fields(),"credit-card"===this.type&&this.format_credit_card_inputs(),this.handle_saved_payment_methods(),this.form.submit(()=>{if(t("#order_review input[name=payment_method]:checked").val()===this.id)return this.validate_payment_data()})}handle_add_payment_method_page(){return this.set_payment_fields(),"credit-card"===this.type&&this.format_credit_card_inputs(),this.form.submit(()=>{if(t("#add_payment_method input[name=payment_method]:checked").val()===this.id)return this.validate_payment_data()})}set_payment_fields(){return this.payment_fields=t(`.payment_method_${this.id}`),this.payment_fields.find(".validate-required .input-text").each((e,a)=>!t(a).val()&&t(a).trigger("input"))}validate_payment_data(){var e,a;return!this.form.is(".processing")&&(this.saved_payment_method_selected=this.payment_fields.find(".js-sv-wc-payment-gateway-payment-token:checked").val(),a="credit-card"===this.type?this.validate_card_data():this.validate_account_data(),e=!1!==t(document.body).triggerHandler("sv_wc_payment_form_valid_payment_data",{payment_form:this,passed_validation:a}),a&&e)}format_credit_card_inputs(){var e,a,r;return e=t(".js-sv-wc-payment-gateway-credit-card-form-account-number").payment("formatCardNumber"),r=t(".js-sv-wc-payment-gateway-credit-card-form-expiry").payment("formatCardExpiry"),a=t(".js-sv-wc-payment-gateway-credit-card-form-csc").payment("formatCardCVC"),e.val()&&e.val().length>0&&e.trigger("change"),r.val()&&r.val().length>0&&r.trigger("change"),a.val()&&a.val().length>0&&a.trigger("change"),t(".js-sv-wc-payment-gateway-credit-card-form-input").on("change paste keyup",()=>this.do_inline_credit_card_validation())}do_inline_credit_card_validation(){var a,r,i,s;return(a=t(".js-sv-wc-payment-gateway-credit-card-form-account-number"),s=t(".js-sv-wc-payment-gateway-credit-card-form-expiry"),i=t(".js-sv-wc-payment-gateway-credit-card-form-csc"),r=t.payment.cardType(a.val()),0>e.call(this.enabled_card_types,r)?a.addClass("invalid-card-type"):a.removeClass("invalid-card-type"),t.payment.validateCardExpiry(s.payment("cardExpiryVal"))?s.addClass("identified"):s.removeClass("identified"),t.payment.validateCardCVC(i.val()))?i.addClass("identified"):i.removeClass("identified")}validate_card_data(){var e,a,r,i;return(r=[],null!=(a=this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-csc").val())&&(a?(/\D/.test(a)&&r.push(this.params.cvv_digits_invalid),(a.length<3||a.length>4)&&r.push(this.params.cvv_length_invalid)):this.csc_required&&(!this.saved_payment_method_selected||this.csc_required_for_tokens)&&r.push(this.params.cvv_missing)),this.saved_payment_method_selected||(e=this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-account-number").val(),i=t.payment.cardExpiryVal(this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-expiry").val()),(e=e.replace(/-|\s/g,""))?((e.length<12||e.length>19)&&r.push(this.params.card_number_length_invalid),/\D/.test(e)&&r.push(this.params.card_number_digits_invalid),t.payment.validateCardNumber(e)||r.push(this.params.card_number_invalid)):r.push(this.params.card_number_missing),t.payment.validateCardExpiry(i)||r.push(this.params.card_exp_date_invalid)),r.length>0)?(this.render_errors(r),!1):(this.payment_fields.find(".js-sv-wc-payment-gateway-credit-card-form-account-number").val(e),!0)}validate_account_data(){var e,t,a;return!!this.saved_payment_method_selected||((t=[],a=this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-routing-number").val(),e=this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-account-number").val(),a?(9!==a.length&&t.push(this.params.routing_number_length_invalid),/\D/.test(a)&&t.push(this.params.routing_number_digits_invalid)):t.push(this.params.routing_number_missing),e?((e.length<3||e.length>17)&&t.push(this.params.account_number_length_invalid),/\D/.test(e)&&t.push(this.params.account_number_invalid)):t.push(this.params.account_number_missing),t.length>0)?(this.render_errors(t),!1):(this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-account-number").val(e),!0))}render_errors(e){return t(".woocommerce-error, .woocommerce-message").remove(),this.form.prepend('
  • '+e.join("
  • ")+"
"),this.form.removeClass("processing").unblock(),this.form.find(".input-text, select").blur(),t("html, body").animate({scrollTop:this.form.offset().top-100},1e3)}handle_saved_payment_methods(){var e,a,r,i;if(i=this.id_dasherized,this.csc_required,r=this.csc_required_for_tokens,e=(a=t(`div.js-wc-${i}-new-payment-method-form`)).find(".js-sv-wc-payment-gateway-credit-card-form-csc").closest(".form-row"),t(`input.js-wc-${this.id_dasherized}-payment-token`).on("change",function(){if(t(`input.js-wc-${i}-payment-token:checked`).val()){if(a.slideUp(200),r)return e.removeClass("form-row-last").addClass("form-row-first"),a.after(e)}else if(a.slideDown(200),r)return e.removeClass("form-row-first").addClass("form-row-last"),a.find(".js-sv-wc-payment-gateway-credit-card-form-expiry").closest(".form-row").after(e)}).change(),t("input#createaccount").on("change",function(){var e;return(e=t(`input.js-wc-${i}-tokenize-payment-method`).closest("p.form-row"),t(this).is(":checked"))?(e.slideDown(),e.next().show()):(e.hide(),e.next().hide())}),!t("input#createaccount").is(":checked"))return t("input#createaccount").change()}handle_sample_check_hint(){var e;return(e=this.payment_fields.find(".js-sv-wc-payment-gateway-echeck-form-sample-check")).is(":visible")?e.slideUp():e.slideDown()}block_ui(){return this.form.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}unblock_ui(){return this.form.unblock()}},t(document.body).trigger("sv_wc_payment_form_handler_v6_1_0_loaded")})}).call({}); //# sourceMappingURL=sv-wc-payment-gateway-payment-form.js.map diff --git a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js.map b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js.map index c23df5a1a..b850d8bcd 100644 --- a/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js.map +++ b/woocommerce/payment-gateway/assets/dist/frontend/sv-wc-payment-gateway-payment-form.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-payment-form.coffee"],"sourcesContent":["(() => {\nvar $a2c1c221aac1d794$exports = {};\n(function() {\n /*\n WooCommerce SkyVerge Payment Gateway Framework Payment Form CoffeeScript\n Version 4.3.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n */ var indexOf = [].indexOf;\n jQuery(function($) {\n \"use strict\";\n window.SV_WC_Payment_Form_Handler_v6_0_1 = class SV_WC_Payment_Form_Handler_v6_0_1 {\n // Public: Instantiate Payment Form Handler\n // args - object with properties:\n // id - gateway ID\n // id_dasherized - gateway ID dasherized\n // plugin_id - plugin ID\n // type - gateway type, either `credit-card` or `echeck`\n // csc_required - true if the gateway requires the CSC field to be displayed\n // Returns SV_WC_Payment_Form_Handler_v6_0_1 instance\n constructor(args){\n this.id = args.id;\n this.id_dasherized = args.id_dasherized;\n this.plugin_id = args.plugin_id;\n this.type = args.type;\n this.csc_required = args.csc_required;\n this.csc_required_for_tokens = args.csc_required_for_tokens;\n this.enabled_card_types = args.enabled_card_types;\n // which payment form?\n if ($('form.checkout').length) {\n this.form = $('form.checkout');\n this.handle_checkout_page();\n } else if ($('form#order_review').length) {\n this.form = $('form#order_review');\n this.handle_pay_page();\n } else if ($('form#add_payment_method').length) {\n this.form = $('form#add_payment_method');\n this.handle_add_payment_method_page();\n } else {\n console.log('No payment form found!');\n return;\n }\n // localized error messages\n this.params = window[\"sv_wc_payment_gateway_payment_form_params\"];\n if (this.type === 'echeck') // handle sample check image hint\n this.form.on('click', '.js-sv-wc-payment-gateway-echeck-form-check-hint, .js-sv-wc-payment-gateway-echeck-form-sample-check', ()=>{\n return this.handle_sample_check_hint();\n });\n $(document).trigger('sv_wc_payment_form_handler_init', {\n id: this.id,\n instance: this\n });\n }\n // Public: Handle required actions on the checkout page\n // Returns nothing.\n handle_checkout_page() {\n if (this.type === 'credit-card') // format/validate credit card inputs using jQuery.payment\n $(document.body).on('updated_checkout', ()=>{\n return this.format_credit_card_inputs();\n });\n // updated payment fields jQuery object on each checkout update (prevents stale data)\n $(document.body).on('updated_checkout', ()=>{\n return this.set_payment_fields();\n });\n // handle saved payment methods\n // note on the checkout page, this is bound to `updated_checkout` so it\n // fires even when other parts of the checkout are changed\n $(document.body).on('updated_checkout', ()=>{\n return this.handle_saved_payment_methods();\n });\n // validate payment data before order is submitted\n return this.form.on(`checkout_place_order_${this.id}`, ()=>{\n return this.validate_payment_data();\n });\n }\n // Public: Handle required actions on the Order > Pay page\n // Returns nothing.\n handle_pay_page() {\n this.set_payment_fields();\n // format/validate credit card inputs using jQuery.payment\n if (this.type === 'credit-card') this.format_credit_card_inputs();\n // handle saved payment methods\n this.handle_saved_payment_methods();\n // validate payment data before order is submitted\n return this.form.submit(()=>{\n if ($('#order_review input[name=payment_method]:checked').val() === this.id) // but only when one of our payment gateways is selected\n return this.validate_payment_data();\n });\n }\n // Public: Handle required actions on the Add Payment Method page\n // Returns nothing.\n handle_add_payment_method_page() {\n this.set_payment_fields();\n // format/validate credit card inputs using jQuery.payment\n if (this.type === 'credit-card') this.format_credit_card_inputs();\n // validate payment data before order is submitted\n return this.form.submit(()=>{\n if ($('#add_payment_method input[name=payment_method]:checked').val() === this.id) // but only when one of our payment gateways is selected\n return this.validate_payment_data();\n });\n }\n // Public: Set payment fields class variable, this is done\n // during the updated_checkout event as otherwise the reference to\n // the checkout fields becomes stale (somehow ¯\\_(ツ)_/¯)\n // This ensures payment fields are not marked as \"invalid\" before the customer has interacted with them.\n // Returns nothing.\n set_payment_fields() {\n var $required_fields;\n this.payment_fields = $(`.payment_method_${this.id}`);\n $required_fields = this.payment_fields.find('.validate-required .input-text');\n return $required_fields.each((i, input)=>{\n // if any of the required fields have a value, bail this loop and proceed with WooCommerce validation\n if ($(input).val()) return false;\n // otherwise remove all validation result classes from the inputs, since the form is freshly loaded\n return $(input).trigger('input');\n });\n }\n // Public: Validate Payment data when order is placed\n // Returns boolean, true if payment data is valid, false otherwise\n validate_payment_data() {\n var handler, valid;\n if (this.form.is('.processing')) // bail when already processing\n return false;\n this.saved_payment_method_selected = this.payment_fields.find('.js-sv-wc-payment-gateway-payment-token:checked').val();\n // perform internal validations (all fields present & valid, etc)\n valid = this.type === 'credit-card' ? this.validate_card_data() : this.validate_account_data();\n // let gateways perform their own validation prior to form submission\n handler = $(document.body).triggerHandler('sv_wc_payment_form_valid_payment_data', {\n payment_form: this,\n passed_validation: valid\n }) !== false;\n return valid && handler;\n }\n // Public: format card data using jQuery.Payment\n // Returns nothing.\n format_credit_card_inputs() {\n var $card_number, $csc, $expiry;\n $card_number = $('.js-sv-wc-payment-gateway-credit-card-form-account-number').payment('formatCardNumber');\n $expiry = $('.js-sv-wc-payment-gateway-credit-card-form-expiry').payment('formatCardExpiry');\n $csc = $('.js-sv-wc-payment-gateway-credit-card-form-csc').payment('formatCardCVC');\n if ($card_number.val() && $card_number.val().length > 0) $card_number.trigger('change');\n if ($expiry.val() && $expiry.val().length > 0) $expiry.trigger('change');\n if ($csc.val() && $csc.val().length > 0) $csc.trigger('change');\n // perform inline validation on credit card inputs\n return $('.js-sv-wc-payment-gateway-credit-card-form-input').on('change paste keyup', ()=>{\n return this.do_inline_credit_card_validation();\n });\n }\n // Public: perform inline validation on credit card fields\n // Returns nothing.\n do_inline_credit_card_validation() {\n var $card_number, $card_type, $csc, $expiry;\n $card_number = $('.js-sv-wc-payment-gateway-credit-card-form-account-number');\n $expiry = $('.js-sv-wc-payment-gateway-credit-card-form-expiry');\n $csc = $('.js-sv-wc-payment-gateway-credit-card-form-csc');\n $card_type = $.payment.cardType($card_number.val());\n if (indexOf.call(this.enabled_card_types, $card_type) < 0) $card_number.addClass('invalid-card-type');\n else $card_number.removeClass('invalid-card-type');\n if ($.payment.validateCardExpiry($expiry.payment('cardExpiryVal'))) $expiry.addClass('identified');\n else $expiry.removeClass('identified');\n if ($.payment.validateCardCVC($csc.val())) return $csc.addClass('identified');\n else return $csc.removeClass('identified');\n }\n // Public: Perform validation on the credit card info entered\n // Return boolean, true if credit card info is valid, false otherwise\n validate_card_data() {\n var account_number, csc, errors, expiry;\n errors = [];\n csc = this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-csc').val();\n // always validate the CSC if present\n if (csc != null) {\n if (csc) {\n if (/\\D/.test(csc)) errors.push(this.params.cvv_digits_invalid);\n if (csc.length < 3 || csc.length > 4) errors.push(this.params.cvv_length_invalid);\n } else if (this.csc_required) {\n if (!this.saved_payment_method_selected || this.csc_required_for_tokens) errors.push(this.params.cvv_missing);\n }\n }\n // Only validate the other CC fields if necessary\n if (!this.saved_payment_method_selected) {\n account_number = this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-account-number').val();\n expiry = $.payment.cardExpiryVal(this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-expiry').val());\n // replace any dashes or spaces in the card number\n account_number = account_number.replace(/-|\\s/g, '');\n // validate card number\n if (!account_number) errors.push(this.params.card_number_missing);\n else {\n if (account_number.length < 12 || account_number.length > 19) errors.push(this.params.card_number_length_invalid);\n if (/\\D/.test(account_number)) errors.push(this.params.card_number_digits_invalid);\n if (!$.payment.validateCardNumber(account_number)) errors.push(this.params.card_number_invalid);\n }\n if (!$.payment.validateCardExpiry(expiry)) // validate expiration date\n errors.push(this.params.card_exp_date_invalid);\n }\n if (errors.length > 0) {\n this.render_errors(errors);\n return false;\n } else {\n // get rid of any space/dash characters\n this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-account-number').val(account_number);\n return true;\n }\n }\n // Public: Perform validation on the eCheck info entered\n // Return boolean, true if eCheck info is valid, false otherwise\n validate_account_data() {\n var account_number, errors, routing_number;\n if (this.saved_payment_method_selected) return true;\n errors = [];\n routing_number = this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-routing-number').val();\n account_number = this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-account-number').val();\n // validate routing number\n if (!routing_number) errors.push(this.params.routing_number_missing);\n else {\n if (9 !== routing_number.length) errors.push(this.params.routing_number_length_invalid);\n if (/\\D/.test(routing_number)) errors.push(this.params.routing_number_digits_invalid);\n }\n // validate account number\n if (!account_number) errors.push(this.params.account_number_missing);\n else {\n if (account_number.length < 3 || account_number.length > 17) errors.push(this.params.account_number_length_invalid);\n if (/\\D/.test(account_number)) errors.push(this.params.account_number_invalid);\n }\n if (errors.length > 0) {\n this.render_errors(errors);\n return false;\n } else {\n // get rid of any space/dash characters\n this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-account-number').val(account_number);\n return true;\n }\n }\n // Public: Render any new errors and bring them into the viewport\n // Returns nothing.\n render_errors(errors) {\n // hide and remove any previous errors\n $('.woocommerce-error, .woocommerce-message').remove();\n // add errors\n this.form.prepend('
  • ' + errors.join('
  • ') + '
');\n // unblock UI\n this.form.removeClass('processing').unblock();\n this.form.find('.input-text, select').blur();\n // scroll to top\n return $('html, body').animate({\n scrollTop: this.form.offset().top - 100\n }, 1000);\n }\n // Public: Handle associated actions for saved payment methods\n // Returns nothing.\n handle_saved_payment_methods() {\n var $csc_field, $new_payment_method_selection, csc_required, csc_required_for_tokens, id_dasherized;\n // make available inside change events\n id_dasherized = this.id_dasherized;\n csc_required = this.csc_required;\n csc_required_for_tokens = this.csc_required_for_tokens;\n $new_payment_method_selection = $(`div.js-wc-${id_dasherized}-new-payment-method-form`);\n $csc_field = $new_payment_method_selection.find('.js-sv-wc-payment-gateway-credit-card-form-csc').closest('.form-row');\n // show/hide the saved payment methods when a saved payment method is de-selected/selected\n $(`input.js-wc-${this.id_dasherized}-payment-token`).on('change', function() {\n var tokenized_payment_method_selected;\n tokenized_payment_method_selected = $(`input.js-wc-${id_dasherized}-payment-token:checked`).val();\n if (tokenized_payment_method_selected) {\n // using an existing tokenized payment method, hide the 'new method' fields\n $new_payment_method_selection.slideUp(200);\n // move the CSC field out of the 'new method' fields so it can be used with the tokenized transaction\n if (csc_required_for_tokens) {\n $csc_field.removeClass('form-row-last').addClass('form-row-first');\n return $new_payment_method_selection.after($csc_field);\n }\n } else {\n // use new payment method, display the 'new method' fields\n $new_payment_method_selection.slideDown(200);\n // move the CSC field back into its regular spot\n if (csc_required_for_tokens) {\n $csc_field.removeClass('form-row-first').addClass('form-row-last');\n return $new_payment_method_selection.find('.js-sv-wc-payment-gateway-credit-card-form-expiry').closest('.form-row').after($csc_field);\n }\n }\n }).change();\n // display the 'save payment method' option for guest checkouts if the 'create account' option is checked\n // but only hide the input if there is a 'create account' checkbox (some themes just display the password)\n $('input#createaccount').on('change', function() {\n var $parent_row;\n $parent_row = $(`input.js-wc-${id_dasherized}-tokenize-payment-method`).closest('p.form-row');\n if ($(this).is(':checked')) {\n $parent_row.slideDown();\n return $parent_row.next().show();\n } else {\n $parent_row.hide();\n return $parent_row.next().hide();\n }\n });\n if (!$('input#createaccount').is(':checked')) return $('input#createaccount').change();\n }\n // Public: Handle showing/hiding the sample check image\n // Returns nothing.\n handle_sample_check_hint() {\n var $sample_check;\n $sample_check = this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-sample-check');\n if ($sample_check.is(\":visible\")) return $sample_check.slideUp();\n else return $sample_check.slideDown();\n }\n // Blocks the payment form UI\n // @since 3.0.0\n block_ui() {\n return this.form.block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n // Unblocks the payment form UI\n // @since 3.0.0\n unblock_ui() {\n return this.form.unblock();\n }\n };\n // dispatch loaded event\n return $(document.body).trigger(\"sv_wc_payment_form_handler_v6_0_1_loaded\");\n });\n}).call($a2c1c221aac1d794$exports);\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-payment-form.js.map\n","###\n WooCommerce SkyVerge Payment Gateway Framework Payment Form CoffeeScript\n Version 4.3.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n###\njQuery ( $ ) ->\n\t\"use strict\"\n\n\n\tclass window.SV_WC_Payment_Form_Handler_v6_0_1\n\n\n\t\t# Public: Instantiate Payment Form Handler\n\t\t#\n\t\t# args - object with properties:\n\t\t# id - gateway ID\n\t\t# id_dasherized - gateway ID dasherized\n\t\t# plugin_id - plugin ID\n\t\t# type - gateway type, either `credit-card` or `echeck`\n\t\t# csc_required - true if the gateway requires the CSC field to be displayed\n\t\t#\n\t\t# Returns SV_WC_Payment_Form_Handler_v6_0_1 instance\n\t\tconstructor: (args) ->\n\n\t\t\t@id = args.id\n\t\t\t@id_dasherized = args.id_dasherized\n\t\t\t@plugin_id = args.plugin_id\n\t\t\t@type = args.type\n\t\t\t@csc_required = args.csc_required\n\t\t\t@csc_required_for_tokens = args.csc_required_for_tokens\n\t\t\t@enabled_card_types = args.enabled_card_types\n\n\t\t\t# which payment form?\n\t\t\tif $( 'form.checkout' ).length\n\t\t\t\t@form = $( 'form.checkout' )\n\t\t\t\tthis.handle_checkout_page()\n\n\t\t\telse if $( 'form#order_review' ).length\n\t\t\t\t@form = $( 'form#order_review' )\n\t\t\t\tthis.handle_pay_page()\n\n\t\t\telse if $( 'form#add_payment_method' ).length\n\t\t\t\t@form = $( 'form#add_payment_method' )\n\t\t\t\tthis.handle_add_payment_method_page()\n\n\t\t\telse\n\t\t\t\tconsole.log( 'No payment form found!' )\n\t\t\t\treturn\n\n\t\t\t# localized error messages\n\t\t\t@params = window[ \"sv_wc_payment_gateway_payment_form_params\" ]\n\n\t\t\t# handle sample check image hint\n\t\t\t@form.on( 'click', '.js-sv-wc-payment-gateway-echeck-form-check-hint, .js-sv-wc-payment-gateway-echeck-form-sample-check', => this.handle_sample_check_hint() ) if @type is 'echeck'\n\n\t\t\t$( document ).trigger( 'sv_wc_payment_form_handler_init', { id: @id, instance: @ } )\n\n\n\t\t# Public: Handle required actions on the checkout page\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_checkout_page: ->\n\n\t\t\t# format/validate credit card inputs using jQuery.payment\n\t\t\t$( document.body ).on( 'updated_checkout', => this.format_credit_card_inputs() ) if @type is 'credit-card'\n\n\t\t\t# updated payment fields jQuery object on each checkout update (prevents stale data)\n\t\t\t$( document.body ).on( 'updated_checkout', => this.set_payment_fields() )\n\n\t\t\t# handle saved payment methods\n\t\t\t# note on the checkout page, this is bound to `updated_checkout` so it\n\t\t\t# fires even when other parts of the checkout are changed\n\t\t\t$( document.body ).on( 'updated_checkout', => this.handle_saved_payment_methods() )\n\n\t\t\t# validate payment data before order is submitted\n\t\t\t@form.on( \"checkout_place_order_#{ @id }\", => this.validate_payment_data() )\n\n\n\t\t# Public: Handle required actions on the Order > Pay page\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_pay_page: ->\n\n\t\t\tthis.set_payment_fields()\n\n\t\t\t# format/validate credit card inputs using jQuery.payment\n\t\t\tif @type is 'credit-card'\n\t\t\t\tthis.format_credit_card_inputs()\n\n\t\t\t# handle saved payment methods\n\t\t\tthis.handle_saved_payment_methods()\n\n\t\t\t# validate payment data before order is submitted\n\t\t\t@form.submit =>\n\n\t\t\t\t# but only when one of our payment gateways is selected\n\t\t\t\treturn this.validate_payment_data() if $( '#order_review input[name=payment_method]:checked' ).val() is @id\n\n\n\t\t# Public: Handle required actions on the Add Payment Method page\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_add_payment_method_page: ->\n\n\t\t\tthis.set_payment_fields()\n\n\t\t\t# format/validate credit card inputs using jQuery.payment\n\t\t\tif @type is 'credit-card'\n\t\t\t\tthis.format_credit_card_inputs()\n\n\t\t\t# validate payment data before order is submitted\n\t\t\t@form.submit =>\n\n\t\t\t\t# but only when one of our payment gateways is selected\n\t\t\t\treturn this.validate_payment_data() if $( '#add_payment_method input[name=payment_method]:checked' ).val() is @id\n\n\n\t\t# Public: Set payment fields class variable, this is done\n\t\t# during the updated_checkout event as otherwise the reference to\n\t\t# the checkout fields becomes stale (somehow ¯\\_(ツ)_/¯)\n\t\t#\n\t\t# This ensures payment fields are not marked as \"invalid\" before the customer has interacted with them.\n\t\t#\n\t\t# Returns nothing.\n\t\tset_payment_fields: ->\n\n\t\t\t@payment_fields = $( \".payment_method_#{ @id }\" )\n\n\t\t\t$required_fields = @payment_fields.find( '.validate-required .input-text' )\n\n\t\t\t$required_fields.each( ( i, input ) =>\n\n\t\t\t\t# if any of the required fields have a value, bail this loop and proceed with WooCommerce validation\n\t\t\t\tif $( input ).val()\n\t\t\t\t\treturn false\n\n\t\t\t\t# otherwise remove all validation result classes from the inputs, since the form is freshly loaded\n\t\t\t\t$( input ).trigger( 'input' )\n\t\t\t)\n\n\n\t\t# Public: Validate Payment data when order is placed\n\t\t#\n\t\t# Returns boolean, true if payment data is valid, false otherwise\n\t\tvalidate_payment_data: ->\n\n\t\t\t# bail when already processing\n\t\t\treturn false if @form.is( '.processing' )\n\n\t\t\t@saved_payment_method_selected = @payment_fields.find( '.js-sv-wc-payment-gateway-payment-token:checked' ).val()\n\n\t\t\t# perform internal validations (all fields present & valid, etc)\n\t\t\tvalid = if @type is 'credit-card' then this.validate_card_data() else this.validate_account_data()\n\n\t\t\t# let gateways perform their own validation prior to form submission\n\t\t\thandler = $( document.body ).triggerHandler( 'sv_wc_payment_form_valid_payment_data', { payment_form: this, passed_validation: valid } ) isnt false\n\n\t\t\treturn valid && handler\n\n\n\t\t# Public: format card data using jQuery.Payment\n\t\t#\n\t\t# Returns nothing.\n\t\tformat_credit_card_inputs: ->\n\t\t\t$card_number = $('.js-sv-wc-payment-gateway-credit-card-form-account-number').payment('formatCardNumber');\n\t\t\t$expiry = $('.js-sv-wc-payment-gateway-credit-card-form-expiry').payment('formatCardExpiry');\n\t\t\t$csc = $('.js-sv-wc-payment-gateway-credit-card-form-csc').payment('formatCardCVC');\n\n\t\t\t# trigger a 'change' event for non empty fields only\n\t\t\t$card_number.trigger( 'change') if $card_number.val() && $card_number.val().length > 0\n\t\t\t$expiry.trigger( 'change') if $expiry.val() && $expiry.val().length > 0\n\t\t\t$csc.trigger( 'change') if $csc.val() && $csc.val().length > 0\n\n\t\t\t# perform inline validation on credit card inputs\n\t\t\t$( '.js-sv-wc-payment-gateway-credit-card-form-input' ).on( 'change paste keyup', => this.do_inline_credit_card_validation() )\n\n\n\t\t# Public: perform inline validation on credit card fields\n\t\t#\n\t\t# Returns nothing.\n\t\tdo_inline_credit_card_validation: ->\n\n\t\t\t$card_number = $( '.js-sv-wc-payment-gateway-credit-card-form-account-number' )\n\t\t\t$expiry = $( '.js-sv-wc-payment-gateway-credit-card-form-expiry' )\n\t\t\t$csc = $( '.js-sv-wc-payment-gateway-credit-card-form-csc' )\n\n\t\t\t$card_type = $.payment.cardType( $card_number.val() )\n\n\t\t\tif $card_type not in @enabled_card_types\n\t\t\t\t$card_number.addClass( 'invalid-card-type' )\n\t\t\telse\n\t\t\t\t$card_number.removeClass( 'invalid-card-type' )\n\n\t\t\tif $.payment.validateCardExpiry( $expiry.payment( 'cardExpiryVal' ) )\n\t\t\t\t$expiry.addClass( 'identified' )\n\t\t\telse\n\t\t\t\t$expiry.removeClass( 'identified' )\n\n\t\t\tif $.payment.validateCardCVC( $csc.val() )\n\t\t\t\t$csc.addClass( 'identified' )\n\t\t\telse\n\t\t\t\t$csc.removeClass( 'identified' )\n\n\n\t\t# Public: Perform validation on the credit card info entered\n\t\t#\n\t\t# Return boolean, true if credit card info is valid, false otherwise\n\t\tvalidate_card_data: ->\n\n\t\t\terrors = []\n\n\t\t\tcsc = @payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-csc' ).val()\n\n\t\t\t# always validate the CSC if present\n\t\t\tif csc?\n\n\t\t\t\tif csc\n\t\t\t\t\terrors.push( @params.cvv_digits_invalid ) if /\\D/.test( csc )\n\t\t\t\t\terrors.push( @params.cvv_length_invalid ) if csc.length < 3 || csc.length > 4\n\t\t\t\telse if @csc_required\n\t\t\t\t\tif not @saved_payment_method_selected or @csc_required_for_tokens\n\t\t\t\t\t\terrors.push( @params.cvv_missing )\n\n\t\t\t# Only validate the other CC fields if necessary\n\t\t\tif not @saved_payment_method_selected\n\n\t\t\t\taccount_number = @payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-account-number' ).val()\n\t\t\t\texpiry = $.payment.cardExpiryVal( @payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-expiry' ).val() )\n\n\t\t\t\t# replace any dashes or spaces in the card number\n\t\t\t\taccount_number = account_number.replace( /-|\\s/g, '' )\n\n\t\t\t\t# validate card number\n\t\t\t\tif not account_number\n\t\t\t\t\terrors.push( @params.card_number_missing )\n\t\t\t\telse\n\t\t\t\t\terrors.push( @params.card_number_length_invalid ) if account_number.length < 12 || account_number.length > 19\n\t\t\t\t\terrors.push( @params.card_number_digits_invalid ) if /\\D/.test( account_number )\n\t\t\t\t\terrors.push( @params.card_number_invalid ) unless $.payment.validateCardNumber( account_number ) # performs luhn check\n\n\t\t\t\t# validate expiration date\n\t\t\t\terrors.push( @params.card_exp_date_invalid ) unless $.payment.validateCardExpiry( expiry ) # validates future date\n\n\t\t\tif errors.length > 0\n\t\t\t\tthis.render_errors( errors )\n\t\t\t\treturn false\n\t\t\telse\n\t\t\t\t# get rid of any space/dash characters\n\t\t\t\t@payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-account-number' ).val( account_number )\n\t\t\t\treturn true\n\n\n\t\t# Public: Perform validation on the eCheck info entered\n\t\t#\n\t\t# Return boolean, true if eCheck info is valid, false otherwise\n\t\tvalidate_account_data: ->\n\n\t\t\treturn true if @saved_payment_method_selected\n\n\t\t\terrors = []\n\n\t\t\trouting_number = @payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-routing-number').val()\n\t\t\taccount_number = @payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-account-number').val()\n\n\t\t\t# validate routing number\n\t\t\tif not routing_number\n\t\t\t\terrors.push( @params.routing_number_missing )\n\t\t\telse\n\t\t\t\terrors.push( @params.routing_number_length_invalid ) if 9 != routing_number.length\n\t\t\t\terrors.push( @params.routing_number_digits_invalid ) if /\\D/.test( routing_number )\n\n\t\t\t# validate account number\n\t\t\tif not account_number\n\t\t\t\terrors.push( @params.account_number_missing )\n\t\t\telse\n\t\t\t\terrors.push( @params.account_number_length_invalid ) if account_number.length < 3 || account_number.length > 17\n\t\t\t\terrors.push( @params.account_number_invalid ) if /\\D/.test( account_number )\n\n\t\t\tif errors.length > 0\n\t\t\t\tthis.render_errors( errors )\n\t\t\t\treturn false\n\t\t\telse\n\t\t\t\t# get rid of any space/dash characters\n\t\t\t\t@payment_fields.find( '.js-sv-wc-payment-gateway-echeck-form-account-number' ).val( account_number )\n\t\t\t\treturn true\n\n\n\t\t# Public: Render any new errors and bring them into the viewport\n\t\t#\n\t\t# Returns nothing.\n\t\trender_errors: (errors) ->\n\n\t\t\t# hide and remove any previous errors\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove()\n\n\t\t\t# add errors\n\t\t\t@form.prepend '
  • ' + errors.join( '
  • ' ) + '
'\n\n\t\t\t# unblock UI\n\t\t\t@form.removeClass( 'processing' ).unblock()\n\t\t\t@form.find( '.input-text, select' ).blur()\n\n\t\t\t# scroll to top\n\t\t\t$( 'html, body' ).animate( { scrollTop: @form.offset().top - 100 }, 1000 )\n\n\n\t\t# Public: Handle associated actions for saved payment methods\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_saved_payment_methods: ->\n\n\t\t\t# make available inside change events\n\t\t\tid_dasherized = @id_dasherized\n\n\t\t\tcsc_required = @csc_required\n\t\t\tcsc_required_for_tokens = @csc_required_for_tokens\n\n\t\t\t$new_payment_method_selection = $( \"div.js-wc-#{ id_dasherized }-new-payment-method-form\" )\n\t\t\t$csc_field = $new_payment_method_selection.find( '.js-sv-wc-payment-gateway-credit-card-form-csc' ).closest( '.form-row' )\n\n\t\t\t# show/hide the saved payment methods when a saved payment method is de-selected/selected\n\t\t\t$( \"input.js-wc-#{ @id_dasherized }-payment-token\" ).on 'change', ->\n\n\t\t\t\ttokenized_payment_method_selected = $( \"input.js-wc-#{ id_dasherized }-payment-token:checked\" ).val()\n\n\t\t\t\tif tokenized_payment_method_selected\n\n\t\t\t\t\t# using an existing tokenized payment method, hide the 'new method' fields\n\t\t\t\t\t$new_payment_method_selection.slideUp( 200 )\n\n\t\t\t\t\t# move the CSC field out of the 'new method' fields so it can be used with the tokenized transaction\n\t\t\t\t\tif csc_required_for_tokens\n\t\t\t\t\t\t$csc_field.removeClass( 'form-row-last' ).addClass( 'form-row-first' )\n\t\t\t\t\t\t$new_payment_method_selection.after( $csc_field )\n\n\t\t\t\telse\n\t\t\t\t\t# use new payment method, display the 'new method' fields\n\t\t\t\t\t$new_payment_method_selection.slideDown( 200 )\n\n\t\t\t\t\t# move the CSC field back into its regular spot\n\t\t\t\t\tif csc_required_for_tokens\n\t\t\t\t\t\t$csc_field.removeClass( 'form-row-first' ).addClass( 'form-row-last' )\n\t\t\t\t\t\t$new_payment_method_selection.find( '.js-sv-wc-payment-gateway-credit-card-form-expiry' ).closest( '.form-row' ).after( $csc_field )\n\t\t\t.change()\n\n\t\t\t# display the 'save payment method' option for guest checkouts if the 'create account' option is checked\n\t\t\t# but only hide the input if there is a 'create account' checkbox (some themes just display the password)\n\t\t\t$( 'input#createaccount' ).on 'change', ->\n\t\t\t\t$parent_row = $( \"input.js-wc-#{ id_dasherized }-tokenize-payment-method\" ).closest( 'p.form-row' )\n\n\t\t\t\tif $( this ).is( ':checked' )\n\t\t\t\t\t$parent_row.slideDown()\n\t\t\t\t\t$parent_row.next().show()\n\t\t\t\telse\n\t\t\t\t\t$parent_row.hide()\n\t\t\t\t\t$parent_row.next().hide()\n\n\t\t\t$( 'input#createaccount' ).change() unless $( 'input#createaccount' ).is( ':checked' )\n\n\n\t\t# Public: Handle showing/hiding the sample check image\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_sample_check_hint: ->\n\n\t\t\t$sample_check = @payment_fields.find( '.js-sv-wc-payment-gateway-echeck-form-sample-check' )\n\n\t\t\tif $sample_check.is( \":visible\" ) then $sample_check.slideUp() else $sample_check.slideDown()\n\n\n\n\t\t# Blocks the payment form UI\n\t\t#\n\t\t# @since 3.0.0\n\t\tblock_ui: -> @form.block( message: null, overlayCSS: background: '#fff',opacity: 0.6 )\n\n\n\t\t# Unblocks the payment form UI\n\t\t#\n\t\t# @since 3.0.0\n\t\tunblock_ui: -> @form.unblock()\n\n\n\t# dispatch loaded event\n\t$( document.body ).trigger( \"sv_wc_payment_form_handler_v6_0_1_loaded\" )\n"],"names":["indexOf","jQuery","$","window","SV_WC_Payment_Form_Handler_v6_0_1","constructor","args","id","id_dasherized","plugin_id","type","csc_required","csc_required_for_tokens","enabled_card_types","length","form","handle_checkout_page","handle_pay_page","handle_add_payment_method_page","console","log","params","on","handle_sample_check_hint","document","trigger","instance","body","format_credit_card_inputs","set_payment_fields","handle_saved_payment_methods","validate_payment_data","submit","val","payment_fields","$required_fields","find","each","i","input","handler","valid","is","saved_payment_method_selected","validate_card_data","validate_account_data","triggerHandler","payment_form","passed_validation","$card_number","$csc","$expiry","payment","do_inline_credit_card_validation","$card_type","cardType","call","addClass","removeClass","validateCardExpiry","validateCardCVC","account_number","csc","errors","expiry","test","push","cvv_digits_invalid","cvv_length_invalid","cvv_missing","cardExpiryVal","replace","card_number_length_invalid","card_number_digits_invalid","validateCardNumber","card_number_invalid","card_number_missing","card_exp_date_invalid","render_errors","routing_number","routing_number_length_invalid","routing_number_digits_invalid","routing_number_missing","account_number_length_invalid","account_number_invalid","account_number_missing","remove","prepend","join","unblock","blur","animate","scrollTop","offset","top","$csc_field","$new_payment_method_selection","closest","slideUp","after","slideDown","change","$parent_row","next","show","hide","$sample_check","block_ui","block","message","overlayCSS","background","opacity","unblock_ui"],"version":3,"file":"sv-wc-payment-gateway-payment-form.js.map"} \ No newline at end of file +{"mappings":"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","sources":["","woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-payment-form.coffee"],"sourcesContent":["(() => {\nvar $a2c1c221aac1d794$exports = {};\n(function() {\n /*\n WooCommerce SkyVerge Payment Gateway Framework Payment Form CoffeeScript\n Version 4.3.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n */ var indexOf = [].indexOf;\n jQuery(function($) {\n \"use strict\";\n window.SV_WC_Payment_Form_Handler_v6_1_0 = class SV_WC_Payment_Form_Handler_v6_1_0 {\n // Public: Instantiate Payment Form Handler\n // args - object with properties:\n // id - gateway ID\n // id_dasherized - gateway ID dasherized\n // plugin_id - plugin ID\n // type - gateway type, either `credit-card` or `echeck`\n // csc_required - true if the gateway requires the CSC field to be displayed\n // Returns SV_WC_Payment_Form_Handler_v6_1_0 instance\n constructor(args){\n this.id = args.id;\n this.id_dasherized = args.id_dasherized;\n this.plugin_id = args.plugin_id;\n this.type = args.type;\n this.csc_required = args.csc_required;\n this.csc_required_for_tokens = args.csc_required_for_tokens;\n this.enabled_card_types = args.enabled_card_types;\n // which payment form?\n if ($('form.checkout').length) {\n this.form = $('form.checkout');\n this.handle_checkout_page();\n } else if ($('form#order_review').length) {\n this.form = $('form#order_review');\n this.handle_pay_page();\n } else if ($('form#add_payment_method').length) {\n this.form = $('form#add_payment_method');\n this.handle_add_payment_method_page();\n } else {\n console.log('No payment form found!');\n return;\n }\n // localized error messages\n this.params = window[\"sv_wc_payment_gateway_payment_form_params\"];\n if (this.type === 'echeck') // handle sample check image hint\n this.form.on('click', '.js-sv-wc-payment-gateway-echeck-form-check-hint, .js-sv-wc-payment-gateway-echeck-form-sample-check', ()=>{\n return this.handle_sample_check_hint();\n });\n $(document).trigger('sv_wc_payment_form_handler_init', {\n id: this.id,\n instance: this\n });\n }\n // Public: Handle required actions on the checkout page\n // Returns nothing.\n handle_checkout_page() {\n if (this.type === 'credit-card') // format/validate credit card inputs using jQuery.payment\n $(document.body).on('updated_checkout', ()=>{\n return this.format_credit_card_inputs();\n });\n // updated payment fields jQuery object on each checkout update (prevents stale data)\n $(document.body).on('updated_checkout', ()=>{\n return this.set_payment_fields();\n });\n // handle saved payment methods\n // note on the checkout page, this is bound to `updated_checkout` so it\n // fires even when other parts of the checkout are changed\n $(document.body).on('updated_checkout', ()=>{\n return this.handle_saved_payment_methods();\n });\n // validate payment data before order is submitted\n return this.form.on(`checkout_place_order_${this.id}`, ()=>{\n return this.validate_payment_data();\n });\n }\n // Public: Handle required actions on the Order > Pay page\n // Returns nothing.\n handle_pay_page() {\n this.set_payment_fields();\n // format/validate credit card inputs using jQuery.payment\n if (this.type === 'credit-card') this.format_credit_card_inputs();\n // handle saved payment methods\n this.handle_saved_payment_methods();\n // validate payment data before order is submitted\n return this.form.submit(()=>{\n if ($('#order_review input[name=payment_method]:checked').val() === this.id) // but only when one of our payment gateways is selected\n return this.validate_payment_data();\n });\n }\n // Public: Handle required actions on the Add Payment Method page\n // Returns nothing.\n handle_add_payment_method_page() {\n this.set_payment_fields();\n // format/validate credit card inputs using jQuery.payment\n if (this.type === 'credit-card') this.format_credit_card_inputs();\n // validate payment data before order is submitted\n return this.form.submit(()=>{\n if ($('#add_payment_method input[name=payment_method]:checked').val() === this.id) // but only when one of our payment gateways is selected\n return this.validate_payment_data();\n });\n }\n // Public: Set payment fields class variable, this is done\n // during the updated_checkout event as otherwise the reference to\n // the checkout fields becomes stale (somehow ¯\\_(ツ)_/¯)\n // This ensures payment fields are not marked as \"invalid\" before the customer has interacted with them.\n // Returns nothing.\n set_payment_fields() {\n var $required_fields;\n this.payment_fields = $(`.payment_method_${this.id}`);\n $required_fields = this.payment_fields.find('.validate-required .input-text');\n return $required_fields.each((i, input)=>{\n // if any of the required fields have a value, bail this loop and proceed with WooCommerce validation\n if ($(input).val()) return false;\n // otherwise remove all validation result classes from the inputs, since the form is freshly loaded\n return $(input).trigger('input');\n });\n }\n // Public: Validate Payment data when order is placed\n // Returns boolean, true if payment data is valid, false otherwise\n validate_payment_data() {\n var handler, valid;\n if (this.form.is('.processing')) // bail when already processing\n return false;\n this.saved_payment_method_selected = this.payment_fields.find('.js-sv-wc-payment-gateway-payment-token:checked').val();\n // perform internal validations (all fields present & valid, etc)\n valid = this.type === 'credit-card' ? this.validate_card_data() : this.validate_account_data();\n // let gateways perform their own validation prior to form submission\n handler = $(document.body).triggerHandler('sv_wc_payment_form_valid_payment_data', {\n payment_form: this,\n passed_validation: valid\n }) !== false;\n return valid && handler;\n }\n // Public: format card data using jQuery.Payment\n // Returns nothing.\n format_credit_card_inputs() {\n var $card_number, $csc, $expiry;\n $card_number = $('.js-sv-wc-payment-gateway-credit-card-form-account-number').payment('formatCardNumber');\n $expiry = $('.js-sv-wc-payment-gateway-credit-card-form-expiry').payment('formatCardExpiry');\n $csc = $('.js-sv-wc-payment-gateway-credit-card-form-csc').payment('formatCardCVC');\n if ($card_number.val() && $card_number.val().length > 0) $card_number.trigger('change');\n if ($expiry.val() && $expiry.val().length > 0) $expiry.trigger('change');\n if ($csc.val() && $csc.val().length > 0) $csc.trigger('change');\n // perform inline validation on credit card inputs\n return $('.js-sv-wc-payment-gateway-credit-card-form-input').on('change paste keyup', ()=>{\n return this.do_inline_credit_card_validation();\n });\n }\n // Public: perform inline validation on credit card fields\n // Returns nothing.\n do_inline_credit_card_validation() {\n var $card_number, $card_type, $csc, $expiry;\n $card_number = $('.js-sv-wc-payment-gateway-credit-card-form-account-number');\n $expiry = $('.js-sv-wc-payment-gateway-credit-card-form-expiry');\n $csc = $('.js-sv-wc-payment-gateway-credit-card-form-csc');\n $card_type = $.payment.cardType($card_number.val());\n if (indexOf.call(this.enabled_card_types, $card_type) < 0) $card_number.addClass('invalid-card-type');\n else $card_number.removeClass('invalid-card-type');\n if ($.payment.validateCardExpiry($expiry.payment('cardExpiryVal'))) $expiry.addClass('identified');\n else $expiry.removeClass('identified');\n if ($.payment.validateCardCVC($csc.val())) return $csc.addClass('identified');\n else return $csc.removeClass('identified');\n }\n // Public: Perform validation on the credit card info entered\n // Return boolean, true if credit card info is valid, false otherwise\n validate_card_data() {\n var account_number, csc, errors, expiry;\n errors = [];\n csc = this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-csc').val();\n // always validate the CSC if present\n if (csc != null) {\n if (csc) {\n if (/\\D/.test(csc)) errors.push(this.params.cvv_digits_invalid);\n if (csc.length < 3 || csc.length > 4) errors.push(this.params.cvv_length_invalid);\n } else if (this.csc_required) {\n if (!this.saved_payment_method_selected || this.csc_required_for_tokens) errors.push(this.params.cvv_missing);\n }\n }\n // Only validate the other CC fields if necessary\n if (!this.saved_payment_method_selected) {\n account_number = this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-account-number').val();\n expiry = $.payment.cardExpiryVal(this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-expiry').val());\n // replace any dashes or spaces in the card number\n account_number = account_number.replace(/-|\\s/g, '');\n // validate card number\n if (!account_number) errors.push(this.params.card_number_missing);\n else {\n if (account_number.length < 12 || account_number.length > 19) errors.push(this.params.card_number_length_invalid);\n if (/\\D/.test(account_number)) errors.push(this.params.card_number_digits_invalid);\n if (!$.payment.validateCardNumber(account_number)) errors.push(this.params.card_number_invalid);\n }\n if (!$.payment.validateCardExpiry(expiry)) // validate expiration date\n errors.push(this.params.card_exp_date_invalid);\n }\n if (errors.length > 0) {\n this.render_errors(errors);\n return false;\n } else {\n // get rid of any space/dash characters\n this.payment_fields.find('.js-sv-wc-payment-gateway-credit-card-form-account-number').val(account_number);\n return true;\n }\n }\n // Public: Perform validation on the eCheck info entered\n // Return boolean, true if eCheck info is valid, false otherwise\n validate_account_data() {\n var account_number, errors, routing_number;\n if (this.saved_payment_method_selected) return true;\n errors = [];\n routing_number = this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-routing-number').val();\n account_number = this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-account-number').val();\n // validate routing number\n if (!routing_number) errors.push(this.params.routing_number_missing);\n else {\n if (9 !== routing_number.length) errors.push(this.params.routing_number_length_invalid);\n if (/\\D/.test(routing_number)) errors.push(this.params.routing_number_digits_invalid);\n }\n // validate account number\n if (!account_number) errors.push(this.params.account_number_missing);\n else {\n if (account_number.length < 3 || account_number.length > 17) errors.push(this.params.account_number_length_invalid);\n if (/\\D/.test(account_number)) errors.push(this.params.account_number_invalid);\n }\n if (errors.length > 0) {\n this.render_errors(errors);\n return false;\n } else {\n // get rid of any space/dash characters\n this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-account-number').val(account_number);\n return true;\n }\n }\n // Public: Render any new errors and bring them into the viewport\n // Returns nothing.\n render_errors(errors) {\n // hide and remove any previous errors\n $('.woocommerce-error, .woocommerce-message').remove();\n // add errors\n this.form.prepend('
  • ' + errors.join('
  • ') + '
');\n // unblock UI\n this.form.removeClass('processing').unblock();\n this.form.find('.input-text, select').blur();\n // scroll to top\n return $('html, body').animate({\n scrollTop: this.form.offset().top - 100\n }, 1000);\n }\n // Public: Handle associated actions for saved payment methods\n // Returns nothing.\n handle_saved_payment_methods() {\n var $csc_field, $new_payment_method_selection, csc_required, csc_required_for_tokens, id_dasherized;\n // make available inside change events\n id_dasherized = this.id_dasherized;\n csc_required = this.csc_required;\n csc_required_for_tokens = this.csc_required_for_tokens;\n $new_payment_method_selection = $(`div.js-wc-${id_dasherized}-new-payment-method-form`);\n $csc_field = $new_payment_method_selection.find('.js-sv-wc-payment-gateway-credit-card-form-csc').closest('.form-row');\n // show/hide the saved payment methods when a saved payment method is de-selected/selected\n $(`input.js-wc-${this.id_dasherized}-payment-token`).on('change', function() {\n var tokenized_payment_method_selected;\n tokenized_payment_method_selected = $(`input.js-wc-${id_dasherized}-payment-token:checked`).val();\n if (tokenized_payment_method_selected) {\n // using an existing tokenized payment method, hide the 'new method' fields\n $new_payment_method_selection.slideUp(200);\n // move the CSC field out of the 'new method' fields so it can be used with the tokenized transaction\n if (csc_required_for_tokens) {\n $csc_field.removeClass('form-row-last').addClass('form-row-first');\n return $new_payment_method_selection.after($csc_field);\n }\n } else {\n // use new payment method, display the 'new method' fields\n $new_payment_method_selection.slideDown(200);\n // move the CSC field back into its regular spot\n if (csc_required_for_tokens) {\n $csc_field.removeClass('form-row-first').addClass('form-row-last');\n return $new_payment_method_selection.find('.js-sv-wc-payment-gateway-credit-card-form-expiry').closest('.form-row').after($csc_field);\n }\n }\n }).change();\n // display the 'save payment method' option for guest checkouts if the 'create account' option is checked\n // but only hide the input if there is a 'create account' checkbox (some themes just display the password)\n $('input#createaccount').on('change', function() {\n var $parent_row;\n $parent_row = $(`input.js-wc-${id_dasherized}-tokenize-payment-method`).closest('p.form-row');\n if ($(this).is(':checked')) {\n $parent_row.slideDown();\n return $parent_row.next().show();\n } else {\n $parent_row.hide();\n return $parent_row.next().hide();\n }\n });\n if (!$('input#createaccount').is(':checked')) return $('input#createaccount').change();\n }\n // Public: Handle showing/hiding the sample check image\n // Returns nothing.\n handle_sample_check_hint() {\n var $sample_check;\n $sample_check = this.payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-sample-check');\n if ($sample_check.is(\":visible\")) return $sample_check.slideUp();\n else return $sample_check.slideDown();\n }\n // Blocks the payment form UI\n // @since 3.0.0\n block_ui() {\n return this.form.block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n // Unblocks the payment form UI\n // @since 3.0.0\n unblock_ui() {\n return this.form.unblock();\n }\n };\n // dispatch loaded event\n return $(document.body).trigger(\"sv_wc_payment_form_handler_v6_1_0_loaded\");\n });\n}).call($a2c1c221aac1d794$exports);\n\n})();\n//# sourceMappingURL=sv-wc-payment-gateway-payment-form.js.map\n","###\n WooCommerce SkyVerge Payment Gateway Framework Payment Form CoffeeScript\n Version 4.3.0\n\n Copyright (c) 2014-2024, SkyVerge, Inc.\n Licensed under the GNU General Public License v3.0\n http://www.gnu.org/licenses/gpl-3.0.html\n###\njQuery ( $ ) ->\n\t\"use strict\"\n\n\n\tclass window.SV_WC_Payment_Form_Handler_v6_1_0\n\n\n\t\t# Public: Instantiate Payment Form Handler\n\t\t#\n\t\t# args - object with properties:\n\t\t# id - gateway ID\n\t\t# id_dasherized - gateway ID dasherized\n\t\t# plugin_id - plugin ID\n\t\t# type - gateway type, either `credit-card` or `echeck`\n\t\t# csc_required - true if the gateway requires the CSC field to be displayed\n\t\t#\n\t\t# Returns SV_WC_Payment_Form_Handler_v6_1_0 instance\n\t\tconstructor: (args) ->\n\n\t\t\t@id = args.id\n\t\t\t@id_dasherized = args.id_dasherized\n\t\t\t@plugin_id = args.plugin_id\n\t\t\t@type = args.type\n\t\t\t@csc_required = args.csc_required\n\t\t\t@csc_required_for_tokens = args.csc_required_for_tokens\n\t\t\t@enabled_card_types = args.enabled_card_types\n\n\t\t\t# which payment form?\n\t\t\tif $( 'form.checkout' ).length\n\t\t\t\t@form = $( 'form.checkout' )\n\t\t\t\tthis.handle_checkout_page()\n\n\t\t\telse if $( 'form#order_review' ).length\n\t\t\t\t@form = $( 'form#order_review' )\n\t\t\t\tthis.handle_pay_page()\n\n\t\t\telse if $( 'form#add_payment_method' ).length\n\t\t\t\t@form = $( 'form#add_payment_method' )\n\t\t\t\tthis.handle_add_payment_method_page()\n\n\t\t\telse\n\t\t\t\tconsole.log( 'No payment form found!' )\n\t\t\t\treturn\n\n\t\t\t# localized error messages\n\t\t\t@params = window[ \"sv_wc_payment_gateway_payment_form_params\" ]\n\n\t\t\t# handle sample check image hint\n\t\t\t@form.on( 'click', '.js-sv-wc-payment-gateway-echeck-form-check-hint, .js-sv-wc-payment-gateway-echeck-form-sample-check', => this.handle_sample_check_hint() ) if @type is 'echeck'\n\n\t\t\t$( document ).trigger( 'sv_wc_payment_form_handler_init', { id: @id, instance: @ } )\n\n\n\t\t# Public: Handle required actions on the checkout page\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_checkout_page: ->\n\n\t\t\t# format/validate credit card inputs using jQuery.payment\n\t\t\t$( document.body ).on( 'updated_checkout', => this.format_credit_card_inputs() ) if @type is 'credit-card'\n\n\t\t\t# updated payment fields jQuery object on each checkout update (prevents stale data)\n\t\t\t$( document.body ).on( 'updated_checkout', => this.set_payment_fields() )\n\n\t\t\t# handle saved payment methods\n\t\t\t# note on the checkout page, this is bound to `updated_checkout` so it\n\t\t\t# fires even when other parts of the checkout are changed\n\t\t\t$( document.body ).on( 'updated_checkout', => this.handle_saved_payment_methods() )\n\n\t\t\t# validate payment data before order is submitted\n\t\t\t@form.on( \"checkout_place_order_#{ @id }\", => this.validate_payment_data() )\n\n\n\t\t# Public: Handle required actions on the Order > Pay page\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_pay_page: ->\n\n\t\t\tthis.set_payment_fields()\n\n\t\t\t# format/validate credit card inputs using jQuery.payment\n\t\t\tif @type is 'credit-card'\n\t\t\t\tthis.format_credit_card_inputs()\n\n\t\t\t# handle saved payment methods\n\t\t\tthis.handle_saved_payment_methods()\n\n\t\t\t# validate payment data before order is submitted\n\t\t\t@form.submit =>\n\n\t\t\t\t# but only when one of our payment gateways is selected\n\t\t\t\treturn this.validate_payment_data() if $( '#order_review input[name=payment_method]:checked' ).val() is @id\n\n\n\t\t# Public: Handle required actions on the Add Payment Method page\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_add_payment_method_page: ->\n\n\t\t\tthis.set_payment_fields()\n\n\t\t\t# format/validate credit card inputs using jQuery.payment\n\t\t\tif @type is 'credit-card'\n\t\t\t\tthis.format_credit_card_inputs()\n\n\t\t\t# validate payment data before order is submitted\n\t\t\t@form.submit =>\n\n\t\t\t\t# but only when one of our payment gateways is selected\n\t\t\t\treturn this.validate_payment_data() if $( '#add_payment_method input[name=payment_method]:checked' ).val() is @id\n\n\n\t\t# Public: Set payment fields class variable, this is done\n\t\t# during the updated_checkout event as otherwise the reference to\n\t\t# the checkout fields becomes stale (somehow ¯\\_(ツ)_/¯)\n\t\t#\n\t\t# This ensures payment fields are not marked as \"invalid\" before the customer has interacted with them.\n\t\t#\n\t\t# Returns nothing.\n\t\tset_payment_fields: ->\n\n\t\t\t@payment_fields = $( \".payment_method_#{ @id }\" )\n\n\t\t\t$required_fields = @payment_fields.find( '.validate-required .input-text' )\n\n\t\t\t$required_fields.each( ( i, input ) =>\n\n\t\t\t\t# if any of the required fields have a value, bail this loop and proceed with WooCommerce validation\n\t\t\t\tif $( input ).val()\n\t\t\t\t\treturn false\n\n\t\t\t\t# otherwise remove all validation result classes from the inputs, since the form is freshly loaded\n\t\t\t\t$( input ).trigger( 'input' )\n\t\t\t)\n\n\n\t\t# Public: Validate Payment data when order is placed\n\t\t#\n\t\t# Returns boolean, true if payment data is valid, false otherwise\n\t\tvalidate_payment_data: ->\n\n\t\t\t# bail when already processing\n\t\t\treturn false if @form.is( '.processing' )\n\n\t\t\t@saved_payment_method_selected = @payment_fields.find( '.js-sv-wc-payment-gateway-payment-token:checked' ).val()\n\n\t\t\t# perform internal validations (all fields present & valid, etc)\n\t\t\tvalid = if @type is 'credit-card' then this.validate_card_data() else this.validate_account_data()\n\n\t\t\t# let gateways perform their own validation prior to form submission\n\t\t\thandler = $( document.body ).triggerHandler( 'sv_wc_payment_form_valid_payment_data', { payment_form: this, passed_validation: valid } ) isnt false\n\n\t\t\treturn valid && handler\n\n\n\t\t# Public: format card data using jQuery.Payment\n\t\t#\n\t\t# Returns nothing.\n\t\tformat_credit_card_inputs: ->\n\t\t\t$card_number = $('.js-sv-wc-payment-gateway-credit-card-form-account-number').payment('formatCardNumber');\n\t\t\t$expiry = $('.js-sv-wc-payment-gateway-credit-card-form-expiry').payment('formatCardExpiry');\n\t\t\t$csc = $('.js-sv-wc-payment-gateway-credit-card-form-csc').payment('formatCardCVC');\n\n\t\t\t# trigger a 'change' event for non empty fields only\n\t\t\t$card_number.trigger( 'change') if $card_number.val() && $card_number.val().length > 0\n\t\t\t$expiry.trigger( 'change') if $expiry.val() && $expiry.val().length > 0\n\t\t\t$csc.trigger( 'change') if $csc.val() && $csc.val().length > 0\n\n\t\t\t# perform inline validation on credit card inputs\n\t\t\t$( '.js-sv-wc-payment-gateway-credit-card-form-input' ).on( 'change paste keyup', => this.do_inline_credit_card_validation() )\n\n\n\t\t# Public: perform inline validation on credit card fields\n\t\t#\n\t\t# Returns nothing.\n\t\tdo_inline_credit_card_validation: ->\n\n\t\t\t$card_number = $( '.js-sv-wc-payment-gateway-credit-card-form-account-number' )\n\t\t\t$expiry = $( '.js-sv-wc-payment-gateway-credit-card-form-expiry' )\n\t\t\t$csc = $( '.js-sv-wc-payment-gateway-credit-card-form-csc' )\n\n\t\t\t$card_type = $.payment.cardType( $card_number.val() )\n\n\t\t\tif $card_type not in @enabled_card_types\n\t\t\t\t$card_number.addClass( 'invalid-card-type' )\n\t\t\telse\n\t\t\t\t$card_number.removeClass( 'invalid-card-type' )\n\n\t\t\tif $.payment.validateCardExpiry( $expiry.payment( 'cardExpiryVal' ) )\n\t\t\t\t$expiry.addClass( 'identified' )\n\t\t\telse\n\t\t\t\t$expiry.removeClass( 'identified' )\n\n\t\t\tif $.payment.validateCardCVC( $csc.val() )\n\t\t\t\t$csc.addClass( 'identified' )\n\t\t\telse\n\t\t\t\t$csc.removeClass( 'identified' )\n\n\n\t\t# Public: Perform validation on the credit card info entered\n\t\t#\n\t\t# Return boolean, true if credit card info is valid, false otherwise\n\t\tvalidate_card_data: ->\n\n\t\t\terrors = []\n\n\t\t\tcsc = @payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-csc' ).val()\n\n\t\t\t# always validate the CSC if present\n\t\t\tif csc?\n\n\t\t\t\tif csc\n\t\t\t\t\terrors.push( @params.cvv_digits_invalid ) if /\\D/.test( csc )\n\t\t\t\t\terrors.push( @params.cvv_length_invalid ) if csc.length < 3 || csc.length > 4\n\t\t\t\telse if @csc_required\n\t\t\t\t\tif not @saved_payment_method_selected or @csc_required_for_tokens\n\t\t\t\t\t\terrors.push( @params.cvv_missing )\n\n\t\t\t# Only validate the other CC fields if necessary\n\t\t\tif not @saved_payment_method_selected\n\n\t\t\t\taccount_number = @payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-account-number' ).val()\n\t\t\t\texpiry = $.payment.cardExpiryVal( @payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-expiry' ).val() )\n\n\t\t\t\t# replace any dashes or spaces in the card number\n\t\t\t\taccount_number = account_number.replace( /-|\\s/g, '' )\n\n\t\t\t\t# validate card number\n\t\t\t\tif not account_number\n\t\t\t\t\terrors.push( @params.card_number_missing )\n\t\t\t\telse\n\t\t\t\t\terrors.push( @params.card_number_length_invalid ) if account_number.length < 12 || account_number.length > 19\n\t\t\t\t\terrors.push( @params.card_number_digits_invalid ) if /\\D/.test( account_number )\n\t\t\t\t\terrors.push( @params.card_number_invalid ) unless $.payment.validateCardNumber( account_number ) # performs luhn check\n\n\t\t\t\t# validate expiration date\n\t\t\t\terrors.push( @params.card_exp_date_invalid ) unless $.payment.validateCardExpiry( expiry ) # validates future date\n\n\t\t\tif errors.length > 0\n\t\t\t\tthis.render_errors( errors )\n\t\t\t\treturn false\n\t\t\telse\n\t\t\t\t# get rid of any space/dash characters\n\t\t\t\t@payment_fields.find( '.js-sv-wc-payment-gateway-credit-card-form-account-number' ).val( account_number )\n\t\t\t\treturn true\n\n\n\t\t# Public: Perform validation on the eCheck info entered\n\t\t#\n\t\t# Return boolean, true if eCheck info is valid, false otherwise\n\t\tvalidate_account_data: ->\n\n\t\t\treturn true if @saved_payment_method_selected\n\n\t\t\terrors = []\n\n\t\t\trouting_number = @payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-routing-number').val()\n\t\t\taccount_number = @payment_fields.find('.js-sv-wc-payment-gateway-echeck-form-account-number').val()\n\n\t\t\t# validate routing number\n\t\t\tif not routing_number\n\t\t\t\terrors.push( @params.routing_number_missing )\n\t\t\telse\n\t\t\t\terrors.push( @params.routing_number_length_invalid ) if 9 != routing_number.length\n\t\t\t\terrors.push( @params.routing_number_digits_invalid ) if /\\D/.test( routing_number )\n\n\t\t\t# validate account number\n\t\t\tif not account_number\n\t\t\t\terrors.push( @params.account_number_missing )\n\t\t\telse\n\t\t\t\terrors.push( @params.account_number_length_invalid ) if account_number.length < 3 || account_number.length > 17\n\t\t\t\terrors.push( @params.account_number_invalid ) if /\\D/.test( account_number )\n\n\t\t\tif errors.length > 0\n\t\t\t\tthis.render_errors( errors )\n\t\t\t\treturn false\n\t\t\telse\n\t\t\t\t# get rid of any space/dash characters\n\t\t\t\t@payment_fields.find( '.js-sv-wc-payment-gateway-echeck-form-account-number' ).val( account_number )\n\t\t\t\treturn true\n\n\n\t\t# Public: Render any new errors and bring them into the viewport\n\t\t#\n\t\t# Returns nothing.\n\t\trender_errors: (errors) ->\n\n\t\t\t# hide and remove any previous errors\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove()\n\n\t\t\t# add errors\n\t\t\t@form.prepend '
  • ' + errors.join( '
  • ' ) + '
'\n\n\t\t\t# unblock UI\n\t\t\t@form.removeClass( 'processing' ).unblock()\n\t\t\t@form.find( '.input-text, select' ).blur()\n\n\t\t\t# scroll to top\n\t\t\t$( 'html, body' ).animate( { scrollTop: @form.offset().top - 100 }, 1000 )\n\n\n\t\t# Public: Handle associated actions for saved payment methods\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_saved_payment_methods: ->\n\n\t\t\t# make available inside change events\n\t\t\tid_dasherized = @id_dasherized\n\n\t\t\tcsc_required = @csc_required\n\t\t\tcsc_required_for_tokens = @csc_required_for_tokens\n\n\t\t\t$new_payment_method_selection = $( \"div.js-wc-#{ id_dasherized }-new-payment-method-form\" )\n\t\t\t$csc_field = $new_payment_method_selection.find( '.js-sv-wc-payment-gateway-credit-card-form-csc' ).closest( '.form-row' )\n\n\t\t\t# show/hide the saved payment methods when a saved payment method is de-selected/selected\n\t\t\t$( \"input.js-wc-#{ @id_dasherized }-payment-token\" ).on 'change', ->\n\n\t\t\t\ttokenized_payment_method_selected = $( \"input.js-wc-#{ id_dasherized }-payment-token:checked\" ).val()\n\n\t\t\t\tif tokenized_payment_method_selected\n\n\t\t\t\t\t# using an existing tokenized payment method, hide the 'new method' fields\n\t\t\t\t\t$new_payment_method_selection.slideUp( 200 )\n\n\t\t\t\t\t# move the CSC field out of the 'new method' fields so it can be used with the tokenized transaction\n\t\t\t\t\tif csc_required_for_tokens\n\t\t\t\t\t\t$csc_field.removeClass( 'form-row-last' ).addClass( 'form-row-first' )\n\t\t\t\t\t\t$new_payment_method_selection.after( $csc_field )\n\n\t\t\t\telse\n\t\t\t\t\t# use new payment method, display the 'new method' fields\n\t\t\t\t\t$new_payment_method_selection.slideDown( 200 )\n\n\t\t\t\t\t# move the CSC field back into its regular spot\n\t\t\t\t\tif csc_required_for_tokens\n\t\t\t\t\t\t$csc_field.removeClass( 'form-row-first' ).addClass( 'form-row-last' )\n\t\t\t\t\t\t$new_payment_method_selection.find( '.js-sv-wc-payment-gateway-credit-card-form-expiry' ).closest( '.form-row' ).after( $csc_field )\n\t\t\t.change()\n\n\t\t\t# display the 'save payment method' option for guest checkouts if the 'create account' option is checked\n\t\t\t# but only hide the input if there is a 'create account' checkbox (some themes just display the password)\n\t\t\t$( 'input#createaccount' ).on 'change', ->\n\t\t\t\t$parent_row = $( \"input.js-wc-#{ id_dasherized }-tokenize-payment-method\" ).closest( 'p.form-row' )\n\n\t\t\t\tif $( this ).is( ':checked' )\n\t\t\t\t\t$parent_row.slideDown()\n\t\t\t\t\t$parent_row.next().show()\n\t\t\t\telse\n\t\t\t\t\t$parent_row.hide()\n\t\t\t\t\t$parent_row.next().hide()\n\n\t\t\t$( 'input#createaccount' ).change() unless $( 'input#createaccount' ).is( ':checked' )\n\n\n\t\t# Public: Handle showing/hiding the sample check image\n\t\t#\n\t\t# Returns nothing.\n\t\thandle_sample_check_hint: ->\n\n\t\t\t$sample_check = @payment_fields.find( '.js-sv-wc-payment-gateway-echeck-form-sample-check' )\n\n\t\t\tif $sample_check.is( \":visible\" ) then $sample_check.slideUp() else $sample_check.slideDown()\n\n\n\n\t\t# Blocks the payment form UI\n\t\t#\n\t\t# @since 3.0.0\n\t\tblock_ui: -> @form.block( message: null, overlayCSS: background: '#fff',opacity: 0.6 )\n\n\n\t\t# Unblocks the payment form UI\n\t\t#\n\t\t# @since 3.0.0\n\t\tunblock_ui: -> @form.unblock()\n\n\n\t# dispatch loaded event\n\t$( document.body ).trigger( \"sv_wc_payment_form_handler_v6_1_0_loaded\" )\n"],"names":["indexOf","jQuery","$","window","SV_WC_Payment_Form_Handler_v6_1_0","constructor","args","id","id_dasherized","plugin_id","type","csc_required","csc_required_for_tokens","enabled_card_types","length","form","handle_checkout_page","handle_pay_page","handle_add_payment_method_page","console","log","params","on","handle_sample_check_hint","document","trigger","instance","body","format_credit_card_inputs","set_payment_fields","handle_saved_payment_methods","validate_payment_data","submit","val","payment_fields","$required_fields","find","each","i","input","handler","valid","is","saved_payment_method_selected","validate_card_data","validate_account_data","triggerHandler","payment_form","passed_validation","$card_number","$csc","$expiry","payment","do_inline_credit_card_validation","$card_type","cardType","call","addClass","removeClass","validateCardExpiry","validateCardCVC","account_number","csc","errors","expiry","test","push","cvv_digits_invalid","cvv_length_invalid","cvv_missing","cardExpiryVal","replace","card_number_length_invalid","card_number_digits_invalid","validateCardNumber","card_number_invalid","card_number_missing","card_exp_date_invalid","render_errors","routing_number","routing_number_length_invalid","routing_number_digits_invalid","routing_number_missing","account_number_length_invalid","account_number_invalid","account_number_missing","remove","prepend","join","unblock","blur","animate","scrollTop","offset","top","$csc_field","$new_payment_method_selection","closest","slideUp","after","slideDown","change","$parent_row","next","show","hide","$sample_check","block_ui","block","message","overlayCSS","background","opacity","unblock_ui"],"version":3,"file":"sv-wc-payment-gateway-payment-form.js.map"} \ No newline at end of file diff --git a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-apple-pay.coffee b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-apple-pay.coffee index 66d7e6889..3d0c68eab 100644 --- a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-apple-pay.coffee +++ b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-apple-pay.coffee @@ -14,7 +14,7 @@ jQuery ( $ ) -> # The WooCommerce Apple Pay handler base class. # # @since 4.7.0 - class window.SV_WC_Apple_Pay_Handler_v6_0_1 + class window.SV_WC_Apple_Pay_Handler_v6_1_0 # Constructs the handler. @@ -440,4 +440,4 @@ jQuery ( $ ) -> # dispatch loaded event - $( document.body ).trigger( 'sv_wc_apple_pay_handler_v6_0_1_loaded' ) + $( document.body ).trigger( 'sv_wc_apple_pay_handler_v6_1_0_loaded' ) diff --git a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-google-pay.js b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-google-pay.js index 9477ebab1..738dbb1c6 100644 --- a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-google-pay.js +++ b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-google-pay.js @@ -7,9 +7,9 @@ jQuery( function( $ ) { * * @since 5.10.0 * - * @type {SV_WC_Google_Pay_Handler_v6_0_1} object + * @type {SV_WC_Google_Pay_Handler_v6_1_0} object */ - window.SV_WC_Google_Pay_Handler_v6_0_1 = class SV_WC_Google_Pay_Handler_v6_0_1 { + window.SV_WC_Google_Pay_Handler_v6_1_0 = class SV_WC_Google_Pay_Handler_v6_1_0 { /** * Handler constructor. @@ -612,6 +612,6 @@ jQuery( function( $ ) { } } - $( document.body ).trigger( 'sv_wc_google_pay_handler_v6_0_1_loaded' ); + $( document.body ).trigger( 'sv_wc_google_pay_handler_v6_1_0_loaded' ); } ); diff --git a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-my-payment-methods.coffee b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-my-payment-methods.coffee index 3cc48f92d..654fb5208 100644 --- a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-my-payment-methods.coffee +++ b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-my-payment-methods.coffee @@ -12,7 +12,7 @@ jQuery ( $ ) -> # The My Payment Methods handler. # # @since 5.1.0 - class window.SV_WC_Payment_Methods_Handler_v6_0_1 + class window.SV_WC_Payment_Methods_Handler_v6_1_0 # Constructs the class. @@ -272,4 +272,4 @@ jQuery ( $ ) -> # dispatch loaded event - $( document.body ).trigger( 'sv_wc_payment_methods_handler_v6_0_1_loaded' ) + $( document.body ).trigger( 'sv_wc_payment_methods_handler_v6_1_0_loaded' ) diff --git a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-payment-form.coffee b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-payment-form.coffee index da9e236f3..eded2f4a8 100644 --- a/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-payment-form.coffee +++ b/woocommerce/payment-gateway/assets/js/frontend/sv-wc-payment-gateway-payment-form.coffee @@ -10,7 +10,7 @@ jQuery ( $ ) -> "use strict" - class window.SV_WC_Payment_Form_Handler_v6_0_1 + class window.SV_WC_Payment_Form_Handler_v6_1_0 # Public: Instantiate Payment Form Handler @@ -22,7 +22,7 @@ jQuery ( $ ) -> # type - gateway type, either `credit-card` or `echeck` # csc_required - true if the gateway requires the CSC field to be displayed # - # Returns SV_WC_Payment_Form_Handler_v6_0_1 instance + # Returns SV_WC_Payment_Form_Handler_v6_1_0 instance constructor: (args) -> @id = args.id @@ -385,4 +385,4 @@ jQuery ( $ ) -> # dispatch loaded event - $( document.body ).trigger( "sv_wc_payment_form_handler_v6_0_1_loaded" ) + $( document.body ).trigger( "sv_wc_payment_form_handler_v6_1_0_loaded" ) diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-direct.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-direct.php index 8f5451f22..3b183e818 100644 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-direct.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-direct.php @@ -22,15 +22,15 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Blocks\Blocks_Handler; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Dynamic_Props; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Blocks\Blocks_Handler; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Dynamic_Props; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Direct' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Direct' ) ) : /** diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-helper.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-helper.php index 3ae1d440f..874dae34f 100755 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-helper.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-helper.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Helper' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Helper' ) ) : /** diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-hosted.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-hosted.php index c5b99eac2..d85c6f743 100644 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-hosted.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-hosted.php @@ -22,15 +22,15 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\ScriptHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\ScriptHelper; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Hosted' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Hosted' ) ) : /** diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-my-payment-methods.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-my-payment-methods.php index 8910193a6..6e0edf175 100644 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-my-payment-methods.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-my-payment-methods.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_My_Payment_Methods' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_My_Payment_Methods' ) ) : /** @@ -174,9 +174,9 @@ public function maybe_enqueue_styles_scripts() { wp_register_script( 'jquery-tiptip', WC()->plugin_url() . '/assets/js/jquery-tiptip/jquery.tipTip.min.js', [ 'jquery' ], $wc_version ); - wp_enqueue_style( "$handle-v6_0_1", $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/css/frontend/' . $handle . '.min.css', [ 'dashicons' ], $fw_version ); + wp_enqueue_style( "$handle-v6_1_0", $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/css/frontend/' . $handle . '.min.css', [ 'dashicons' ], $fw_version ); - wp_enqueue_script( "$handle-v6_0_1", $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/' . $handle . '.js', [ 'jquery-tiptip', 'jquery' ], $fw_version ); + wp_enqueue_script( "$handle-v6_1_0", $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/' . $handle . '.js', [ 'jquery-tiptip', 'jquery' ], $fw_version ); } diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-payment-form.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-payment-form.php index a44cc39d0..bf574b7ea 100644 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-payment-form.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-payment-form.php @@ -22,15 +22,15 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Blocks\Blocks_Handler; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Enums\PaymentFormContext; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Blocks\Gateway_Checkout_Block_Integration; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Blocks\Blocks_Handler; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Enums\PaymentFormContext; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Blocks\Gateway_Checkout_Block_Integration; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Payment_Form' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Payment_Form' ) ) : /** @@ -1180,7 +1180,7 @@ protected function get_js_handler_args() { if ( is_array( $card_types ) && ! empty( $card_types ) ) { - $args['enabled_card_types'] = array_map( [ 'SkyVerge\WooCommerce\PluginFramework\v6_0_1\SV_WC_Payment_Gateway_Helper', 'normalize_card_type' ], $card_types ); + $args['enabled_card_types'] = array_map( [ 'SkyVerge\WooCommerce\PluginFramework\v6_1_0\SV_WC_Payment_Gateway_Helper', 'normalize_card_type' ], $card_types ); } } diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-plugin.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-plugin.php index 600622d1f..89242bc63 100644 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-plugin.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-plugin.php @@ -22,16 +22,16 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; use Automattic\WooCommerce\Admin\Notes\WC_Admin_Note; use Automattic\WooCommerce\Admin\Notes\WC_Admin_Notes; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Blocks\Gateway_Blocks_Handler; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\External_Checkout\Google_Pay\Google_Pay; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Blocks\Gateway_Blocks_Handler; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\External_Checkout\Google_Pay\Google_Pay; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Plugin' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Plugin' ) ) : /** diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-privacy.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-privacy.php index 72bb15f78..2843a19c6 100644 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway-privacy.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway-privacy.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Privacy' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Privacy' ) ) : /** diff --git a/woocommerce/payment-gateway/class-sv-wc-payment-gateway.php b/woocommerce/payment-gateway/class-sv-wc-payment-gateway.php index 5e5af2547..7aa35067d 100755 --- a/woocommerce/payment-gateway/class-sv-wc-payment-gateway.php +++ b/woocommerce/payment-gateway/class-sv-wc-payment-gateway.php @@ -22,19 +22,19 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; use Automattic\WooCommerce\Blocks\Integrations\IntegrationInterface; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Blocks\Blocks_Handler; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\ScriptHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Blocks\Gateway_Checkout_Block_Integration; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Dynamic_Props; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Blocks\Blocks_Handler; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\ScriptHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Blocks\Gateway_Checkout_Block_Integration; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Dynamic_Props; use stdClass; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway' ) ) : /** @@ -476,7 +476,7 @@ protected function enqueue_payment_form_assets() { } $handle = 'sv-wc-payment-gateway-payment-form'; - $versioned_handle = $handle . '-v6_0_1'; + $versioned_handle = $handle . '-v6_1_0'; // Frontend JS wp_enqueue_script( $versioned_handle, $this->get_plugin()->get_payment_gateway_framework_assets_url() . '/dist/frontend/' . $handle . '.js', array( 'jquery-payment' ), SV_WC_Plugin::VERSION, true ); diff --git a/woocommerce/payment-gateway/exceptions/class-sv-wc-payment-gateway-exception.php b/woocommerce/payment-gateway/exceptions/class-sv-wc-payment-gateway-exception.php index 3cfe41663..ffb508950 100644 --- a/woocommerce/payment-gateway/exceptions/class-sv-wc-payment-gateway-exception.php +++ b/woocommerce/payment-gateway/exceptions/class-sv-wc-payment-gateway-exception.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Exception' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Exception' ) ) : /** diff --git a/woocommerce/payment-gateway/integrations/abstract-sv-wc-payment-gateway-integration.php b/woocommerce/payment-gateway/integrations/abstract-sv-wc-payment-gateway-integration.php index 564560b29..f191db180 100644 --- a/woocommerce/payment-gateway/integrations/abstract-sv-wc-payment-gateway-integration.php +++ b/woocommerce/payment-gateway/integrations/abstract-sv-wc-payment-gateway-integration.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Integration' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Integration' ) ) : /** diff --git a/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-pre-orders.php b/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-pre-orders.php index 771175d66..a674d1fe8 100644 --- a/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-pre-orders.php +++ b/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-pre-orders.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Dynamic_Props; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Dynamic_Props; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Integration_Pre_Orders' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Integration_Pre_Orders' ) ) : /** diff --git a/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-subscriptions.php b/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-subscriptions.php index 3a588319e..76def22a1 100644 --- a/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-subscriptions.php +++ b/woocommerce/payment-gateway/integrations/class-sv-wc-payment-gateway-integration-subscriptions.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway\Dynamic_Props; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\Dynamic_Props; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Integration_Subscriptions' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Integration_Subscriptions' ) ) : /** diff --git a/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-token.php b/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-token.php index efa84f503..84342507e 100644 --- a/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-token.php +++ b/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-token.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Payment_Token' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Payment_Token' ) ) : /** diff --git a/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-tokens-handler.php b/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-tokens-handler.php index 7caabd33d..914361548 100644 --- a/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-tokens-handler.php +++ b/woocommerce/payment-gateway/payment-tokens/class-sv-wc-payment-gateway-payment-tokens-handler.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\OrderHelper; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\OrderHelper; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WC_Payment_Gateway_Payment_Tokens_Handler' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WC_Payment_Gateway_Payment_Tokens_Handler' ) ) : /** diff --git a/woocommerce/payment-gateway/rest-api/class-sv-wc-payment-gateway-plugin-rest-api.php b/woocommerce/payment-gateway/rest-api/class-sv-wc-payment-gateway-plugin-rest-api.php index f26f1212a..5c7607c9d 100644 --- a/woocommerce/payment-gateway/rest-api/class-sv-wc-payment-gateway-plugin-rest-api.php +++ b/woocommerce/payment-gateway/rest-api/class-sv-wc-payment-gateway-plugin-rest-api.php @@ -22,19 +22,19 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\Payment_Gateway; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\REST_API as Plugin_REST_API; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\REST_API as Plugin_REST_API; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\Payment_Gateway\\REST_API' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\Payment_Gateway\\REST_API' ) ) : /** * The payment gateway plugin REST API handler class. * - * @see \SkyVerge\WooCommerce\PluginFramework\v6_0_1\REST_API + * @see \SkyVerge\WooCommerce\PluginFramework\v6_1_0\REST_API * * @since 5.2.0 */ @@ -47,7 +47,7 @@ class REST_API extends Plugin_REST_API { * * Plugins can override this to add their own data. * - * @see \SkyVerge\WooCommerce\PluginFramework\v6_0_1\REST_API::get_system_status_data() + * @see \SkyVerge\WooCommerce\PluginFramework\v6_1_0\REST_API::get_system_status_data() * * @since 5.2.0 * diff --git a/woocommerce/rest-api/Controllers/Settings.php b/woocommerce/rest-api/Controllers/Settings.php index c0bc8b5e1..465babdd6 100644 --- a/woocommerce/rest-api/Controllers/Settings.php +++ b/woocommerce/rest-api/Controllers/Settings.php @@ -22,14 +22,14 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1\REST_API\Controllers; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0\REST_API\Controllers; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Settings_API\Abstract_Settings; -use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Settings_API\Setting; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Settings_API\Abstract_Settings; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Settings_API\Setting; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\REST_API\\Controllers\\Settings' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\REST_API\\Controllers\\Settings' ) ) : /** diff --git a/woocommerce/rest-api/class-sv-wc-plugin-rest-api.php b/woocommerce/rest-api/class-sv-wc-plugin-rest-api.php index f667ebd62..c217d7a34 100644 --- a/woocommerce/rest-api/class-sv-wc-plugin-rest-api.php +++ b/woocommerce/rest-api/class-sv-wc-plugin-rest-api.php @@ -22,11 +22,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\REST_API' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\REST_API' ) ) : /** diff --git a/woocommerce/utilities/class-sv-wp-async-request.php b/woocommerce/utilities/class-sv-wp-async-request.php index 6c6a7f17d..35f1205bc 100644 --- a/woocommerce/utilities/class-sv-wp-async-request.php +++ b/woocommerce/utilities/class-sv-wp-async-request.php @@ -23,11 +23,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WP_Async_Request' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WP_Async_Request' ) ) : /** diff --git a/woocommerce/utilities/class-sv-wp-background-job-handler.php b/woocommerce/utilities/class-sv-wp-background-job-handler.php index 524454766..c1299e90b 100644 --- a/woocommerce/utilities/class-sv-wp-background-job-handler.php +++ b/woocommerce/utilities/class-sv-wp-background-job-handler.php @@ -23,11 +23,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ -namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; +namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; defined( 'ABSPATH' ) or exit; -if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WP_Background_Job_Handler' ) ) : +if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WP_Background_Job_Handler' ) ) : /** diff --git a/woocommerce/utilities/class-sv-wp-job-batch-handler.php b/woocommerce/utilities/class-sv-wp-job-batch-handler.php index 35a2bbebb..3ab2290c3 100644 --- a/woocommerce/utilities/class-sv-wp-job-batch-handler.php +++ b/woocommerce/utilities/class-sv-wp-job-batch-handler.php @@ -22,13 +22,13 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ - namespace SkyVerge\WooCommerce\PluginFramework\v6_0_1; + namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; - use SkyVerge\WooCommerce\PluginFramework\v6_0_1\Helpers\ScriptHelper; + use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Helpers\ScriptHelper; defined( 'ABSPATH' ) or exit; - if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_0_1\\SV_WP_Job_Batch_Handler' ) ) : + if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v6_1_0\\SV_WP_Job_Batch_Handler' ) ) : /** From defed46d66f68fc513e1e51901d06b3e0305c345 Mon Sep 17 00:00:00 2001 From: Ashley Gibson <99189195+agibson-godaddy@users.noreply.github.com> Date: Thu, 12 Mar 2026 14:22:30 +0000 Subject: [PATCH 2/4] Set up abilities API abstraction layers (#803) * Set up abilities API abstraction layers * Remove unnecessary properties * Implement rest as an example * Add JsonSerializable * Clean up class * Use trait * Simplify schema * Update changelog * Add file headings & improve docblocks * Remove REST references * Clean up unnecessary types * Centralize can use abilities API logic * Add tests * Add more tests * Fix docblock Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Check if class exists --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- tests/unit/Abilities/AbilitiesHandlerTest.php | 140 ++++++++++++++++++ .../AbstractAbilitiesProviderTest.php | 119 +++++++++++++++ .../DataObjects/AbilityAnnotationsTest.php | 41 +++++ .../DataObjects/AbilityCategoryTest.php | 42 ++++++ .../Abilities/DataObjects/AbilityTest.php | 88 +++++++++++ woocommerce/Abilities/AbilitiesHandler.php | 105 +++++++++++++ .../Abilities/AbstractAbilitiesProvider.php | 105 +++++++++++++ .../Contracts/AbilitiesProviderContract.php | 56 +++++++ .../Contracts/HasAbilitiesContract.php | 47 ++++++ .../Abilities/Contracts/JsonSerializable.php | 47 ++++++ .../Contracts/MakesAbilityContract.php | 44 ++++++ woocommerce/Abilities/DataObjects/Ability.php | 123 +++++++++++++++ .../DataObjects/AbilityAnnotations.php | 60 ++++++++ .../Abilities/DataObjects/AbilityCategory.php | 83 +++++++++++ woocommerce/changelog.txt | 1 + woocommerce/class-sv-wc-plugin.php | 38 +++++ 16 files changed, 1139 insertions(+) create mode 100644 tests/unit/Abilities/AbilitiesHandlerTest.php create mode 100644 tests/unit/Abilities/AbstractAbilitiesProviderTest.php create mode 100644 tests/unit/Abilities/DataObjects/AbilityAnnotationsTest.php create mode 100644 tests/unit/Abilities/DataObjects/AbilityCategoryTest.php create mode 100644 tests/unit/Abilities/DataObjects/AbilityTest.php create mode 100644 woocommerce/Abilities/AbilitiesHandler.php create mode 100644 woocommerce/Abilities/AbstractAbilitiesProvider.php create mode 100644 woocommerce/Abilities/Contracts/AbilitiesProviderContract.php create mode 100644 woocommerce/Abilities/Contracts/HasAbilitiesContract.php create mode 100644 woocommerce/Abilities/Contracts/JsonSerializable.php create mode 100644 woocommerce/Abilities/Contracts/MakesAbilityContract.php create mode 100644 woocommerce/Abilities/DataObjects/Ability.php create mode 100644 woocommerce/Abilities/DataObjects/AbilityAnnotations.php create mode 100644 woocommerce/Abilities/DataObjects/AbilityCategory.php diff --git a/tests/unit/Abilities/AbilitiesHandlerTest.php b/tests/unit/Abilities/AbilitiesHandlerTest.php new file mode 100644 index 000000000..5fd97337c --- /dev/null +++ b/tests/unit/Abilities/AbilitiesHandlerTest.php @@ -0,0 +1,140 @@ +assertSame($provider, $this->getInaccessiblePropertyValue($handler, 'abilitiesProvider')); + } + + /** + * @covers ::addHooks + * @dataProvider providerCanAddHooks + */ + public function testCanAddHooks(bool $canUseApi) : void + { + $handler = $this->createPartialMock(AbilitiesHandler::class, ['canUseAbilitiesApi']); + + $handler->expects($this->once()) + ->method('canUseAbilitiesApi') + ->willReturn($canUseApi); + + if ($canUseApi) { + WP_Mock::expectActionAdded('wp_abilities_api_categories_init', [$handler, 'handleCategoriesInit']); + WP_Mock::expectActionAdded('wp_abilities_api_init', [$handler, 'handleAbilitiesInit']); + } else { + WP_Mock::expectActionNotAdded('wp_abilities_api_categories_init', [$handler, 'handleCategoriesInit']); + WP_Mock::expectActionNotAdded('wp_abilities_api_init', [$handler, 'handleAbilitiesInit']); + } + + $handler->addHooks(); + + $this->assertConditionsMet(); + } + + /** @see testCanAddHooks */ + public function providerCanAddHooks() : Generator + { + yield 'can use api' => [true]; + yield 'cannot use api' => [false]; + } + + /** + * @covers ::handleCategoriesInit + */ + public function testCanHandleCategoriesInit() : void + { + $category = new AbilityCategory('memberships', 'WooCommerce Memberships', 'Description'); + + $provider = Mockery::mock(AbilitiesProviderContract::class); + $provider->expects('getCategories') + ->once() + ->andReturn([$category]); + + $handler = new AbilitiesHandler($provider); + + WP_Mock::userFunction('wp_register_ability_category') + ->once() + ->with('memberships', [ + 'label' => 'WooCommerce Memberships', + 'description' => 'Description', + 'meta' => [], + ]); + + $handler->handleCategoriesInit(); + + $this->assertConditionsMet(); + } + + /** + * @covers ::handleAbilitiesInit + */ + public function testCanHandleAbilitiesInit(): void + { + $ability = new Ability( + 'woocommerce-memberships/create-plan', + 'Create Membership Plan', + 'Create a new plan.', + 'woocommerce-memberships', + fn() => true, + fn() => false, + ['type' => 'integer'], + ['type' => 'boolean'], + new AbilityAnnotations(false, false, false) + ); + + $provider = Mockery::mock(AbilitiesProviderContract::class); + $provider->expects('getAbilities') + ->once() + ->andReturn([$ability]); + + $handler = new AbilitiesHandler($provider); + + WP_Mock::userFunction('wp_register_ability') + ->once() + ->with('woocommerce-memberships/create-plan', [ + 'label' => $ability->label, + 'description' => $ability->description, + 'category' => $ability->category, + 'execute_callback' => $ability->executeCallback, + 'permission_callback' => $ability->permissionCallback, + 'input_schema' => $ability->inputSchema, + 'output_schema' => $ability->outputSchema, + 'meta' => [ + 'show_in_rest' => true, + 'annotations' => [ + 'readonly' => false, + 'destructive' => false, + 'idempotent' => false, + ], + ], + ]); + + $handler->handleAbilitiesInit(); + + $this->assertConditionsMet(); + } +} diff --git a/tests/unit/Abilities/AbstractAbilitiesProviderTest.php b/tests/unit/Abilities/AbstractAbilitiesProviderTest.php new file mode 100644 index 000000000..d1757d19f --- /dev/null +++ b/tests/unit/Abilities/AbstractAbilitiesProviderTest.php @@ -0,0 +1,119 @@ +assertSame($plugin, $this->getInaccessiblePropertyValue($concrete, 'plugin')); + } + + /** + * @covers ::getCategories + * @throws Exception + */ + public function testCanGetCategories() : void + { + $this->assertSame( + [], + $this->invokeInaccessibleMethod( + $this->getMockForAbstractClass(AbstractAbilitiesProvider::class, [], '', false), + 'getCategories' + ) + ); + } + + /** + * @covers ::getAbilities + * @throws Exception + */ + public function testCanGetAbilities() : void + { + $abilityMaker = Mockery::mock(MakesAbilityContract::class); + $abilityMakerClassName = get_class($abilityMaker); + + $abilityMaker->expects('makeAbility') + ->once() + ->andReturn($ability = Mockery::mock(Ability::class)); + + $abstractProvider = $this->getMockForAbstractClass( + AbstractAbilitiesProvider::class, + [], + '', + false, + false, + true, + ['instantiateAbilityClass'] + ); + + $this->setInaccessiblePropertyValue($abstractProvider, 'abilities', [$abilityMakerClassName]); + + $abstractProvider->expects($this->once()) + ->method('instantiateAbilityClass') + ->with(get_class($abilityMaker)) + ->willReturn($abilityMaker); + + $this->assertSame( + [$ability], + $this->invokeInaccessibleMethod($abstractProvider, 'getAbilities') + ); + } + + /** + * @covers ::getAbilities + * @throws Exception + */ + public function testCanGetAbilitiesWithInvalidAbilityMaker() : void + { + $abilityMaker = new \stdClass(); + $abilityMakerClassName = get_class($abilityMaker); + + $abstractProvider = $this->getMockForAbstractClass( + AbstractAbilitiesProvider::class, + [], + '', + false, + false, + true, + ['instantiateAbilityClass'] + ); + + $this->setInaccessiblePropertyValue($abstractProvider, 'abilities', [$abilityMakerClassName]); + + $abstractProvider->expects($this->never()) + ->method('instantiateAbilityClass'); + + WP_Mock::userFunction('wc_doing_it_wrong') + ->once() + ->with( + sprintf('%s::getAbilities', AbstractAbilitiesProvider::class), + 'Ability class "stdClass" must implement '.MakesAbilityContract::class.'.', + '6.1.0' + ); + + $this->assertSame( + [], + $this->invokeInaccessibleMethod($abstractProvider, 'getAbilities') + ); + } +} diff --git a/tests/unit/Abilities/DataObjects/AbilityAnnotationsTest.php b/tests/unit/Abilities/DataObjects/AbilityAnnotationsTest.php new file mode 100644 index 000000000..27e1603c8 --- /dev/null +++ b/tests/unit/Abilities/DataObjects/AbilityAnnotationsTest.php @@ -0,0 +1,41 @@ +assertTrue($abilityAnnotations->readonly); + $this->assertTrue($abilityAnnotations->destructive); + $this->assertTrue($abilityAnnotations->idempotent); + } + + /** + * @covers ::toArray + */ + public function testCanConvertToArray() : void + { + $abilityAnnotations = new AbilityAnnotations(true, true, true); + + $this->assertSame( + [ + 'readonly' => true, + 'destructive' => true, + 'idempotent' => true, + ], + $abilityAnnotations->toArray() + ); + } +} diff --git a/tests/unit/Abilities/DataObjects/AbilityCategoryTest.php b/tests/unit/Abilities/DataObjects/AbilityCategoryTest.php new file mode 100644 index 000000000..87ec5531b --- /dev/null +++ b/tests/unit/Abilities/DataObjects/AbilityCategoryTest.php @@ -0,0 +1,42 @@ + 'value']); + + $this->assertSame('ability-category', $category->slug); + $this->assertSame('Ability Category', $category->label); + $this->assertSame('Description...', $category->description); + $this->assertSame(['key' => 'value'], $category->meta); + } + + /** + * @covers ::toArray + */ + public function testCanConvertToArray() : void + { + $category = new AbilityCategory('ability-category', 'Ability Category', 'Description...', ['key' => 'value']); + + $this->assertSame( + [ + 'label' => $category->label, + 'description' => $category->description, + 'meta' => $category->meta, + ], + $category->toArray() + ); + } +} diff --git a/tests/unit/Abilities/DataObjects/AbilityTest.php b/tests/unit/Abilities/DataObjects/AbilityTest.php new file mode 100644 index 000000000..eb3ef0556 --- /dev/null +++ b/tests/unit/Abilities/DataObjects/AbilityTest.php @@ -0,0 +1,88 @@ + true; + $permissionCallback = fn() => false; + + $annotations = Mockery::mock(AbilityAnnotations::class); + + $ability = new Ability( + 'ability/name', + 'Ability Name', + 'Description...', + 'category-slug', + $executeCallback, + $permissionCallback, + ['type' => 'integer'], + ['type' => 'object'], + $annotations, + false + ); + + $this->assertSame('ability/name', $ability->name); + $this->assertSame('Ability Name', $ability->label); + $this->assertSame('Description...', $ability->description); + $this->assertSame($executeCallback, $ability->executeCallback); + $this->assertSame($permissionCallback, $ability->permissionCallback); + $this->assertSame(['type' => 'integer'], $ability->inputSchema); + $this->assertSame(['type' => 'object'], $ability->outputSchema); + $this->assertSame($annotations, $ability->annotations); + $this->assertFalse($ability->showInRest); + } + + /** + * @covers ::toArray + */ + public function testCanConvertToArray() : void + { + $ability = new Ability( + 'ability/name', + 'Ability Name', + 'Description...', + 'category-slug', + fn() => true, + fn() => false, + ['type' => 'integer'], + ['type' => 'object'], + new AbilityAnnotations(true, false, true), + false + ); + + $this->assertSame( + [ + 'label' => $ability->label, + 'description' => $ability->description, + 'category' => $ability->category, + 'execute_callback' => $ability->executeCallback, + 'permission_callback' => $ability->permissionCallback, + 'input_schema' => $ability->inputSchema, + 'output_schema' => $ability->outputSchema, + 'meta' => [ + 'show_in_rest' => $ability->showInRest, + 'annotations' => [ + 'readonly' => true, + 'destructive' => false, + 'idempotent' => true, + ], + ], + ], + $ability->toArray() + ); + } +} diff --git a/woocommerce/Abilities/AbilitiesHandler.php b/woocommerce/Abilities/AbilitiesHandler.php new file mode 100644 index 000000000..8f8f3b979 --- /dev/null +++ b/woocommerce/Abilities/AbilitiesHandler.php @@ -0,0 +1,105 @@ +abilitiesProvider = $abilitiesProvider; + } + + /** + * Hooks into WordPress Abilities API initialization actions. + * + * @since 6.1.0 + */ + public function addHooks() : void + { + if (! $this->canUseAbilitiesApi()) { + return; + } + + add_action('wp_abilities_api_categories_init', [$this, 'handleCategoriesInit']); + add_action('wp_abilities_api_init', [$this, 'handleAbilitiesInit']); + } + + /** + * Determines whether the site is able to use the Abilities API. Requires WordPress 6.9+. + * + * @codeCoverageIgnore + * + * @since 6.1.0 + */ + protected function canUseAbilitiesApi() : bool + { + return function_exists('wp_register_ability') && function_exists('wp_register_ability_category'); + } + + /** + * Handles the categories init hook by registering ability categories with WordPress. + * + * @internal + * + * @since 6.1.0 + */ + public function handleCategoriesInit() : void + { + foreach ($this->abilitiesProvider->getCategories() as $category) { + wp_register_ability_category($category->slug, $category->toArray()); + } + } + + /** + * Handles the abilities init hook by registering the abilities with WordPress. + * + * @internal + * + * @since 6.1.0 + */ + public function handleAbilitiesInit() : void + { + foreach ($this->abilitiesProvider->getAbilities() as $ability) { + wp_register_ability($ability->name, $ability->toArray()); + } + } +} diff --git a/woocommerce/Abilities/AbstractAbilitiesProvider.php b/woocommerce/Abilities/AbstractAbilitiesProvider.php new file mode 100644 index 000000000..c28d5442b --- /dev/null +++ b/woocommerce/Abilities/AbstractAbilitiesProvider.php @@ -0,0 +1,105 @@ +[] FQCNs of classes implementing MakesAbilityContract */ + protected array $abilities = []; + + /** + * Constructor. + * + * @since 6.1.0 + */ + public function __construct(SV_WC_Plugin $plugin) + { + $this->plugin = $plugin; + } + + /** @inheritDoc */ + public function getCategories() : array + { + return []; + } + + /** @inheritDoc */ + public function getAbilities() : array + { + $abilities = []; + + foreach ($this->abilities as $className) { + if ( + ! is_string($className) || + ! class_exists($className) || + ! in_array(MakesAbilityContract::class, class_implements($className) ?: [], true) + ) { + wc_doing_it_wrong( + __METHOD__, + sprintf('Ability class "%s" must implement %s.', $className, MakesAbilityContract::class), + '6.1.0' + ); + continue; + } + + $abilities[] = $this->instantiateAbilityClass($className)->makeAbility(); + } + + return $abilities; + } + + /** + * Instantiates the provided {@see MakesAbilityContract} class name. + * + * @codeCoverageIgnore + * + * @param class-string $className + * @return MakesAbilityContract + */ + protected function instantiateAbilityClass(string $className) : MakesAbilityContract + { + return new $className(); + } +} diff --git a/woocommerce/Abilities/Contracts/AbilitiesProviderContract.php b/woocommerce/Abilities/Contracts/AbilitiesProviderContract.php new file mode 100644 index 000000000..ebe634156 --- /dev/null +++ b/woocommerce/Abilities/Contracts/AbilitiesProviderContract.php @@ -0,0 +1,56 @@ + JSON Schema array (e.g. with 'type', 'properties', etc.) + */ + public static function getJsonSchema() : array; +} diff --git a/woocommerce/Abilities/Contracts/MakesAbilityContract.php b/woocommerce/Abilities/Contracts/MakesAbilityContract.php new file mode 100644 index 000000000..c1eaaa0b9 --- /dev/null +++ b/woocommerce/Abilities/Contracts/MakesAbilityContract.php @@ -0,0 +1,44 @@ + JSON Schema describing the expected input */ + public array $inputSchema; + + /** @var array JSON Schema describing the output */ + public array $outputSchema; + + /** @var ?AbilityAnnotations behavioral annotations (readonly, destructive, idempotent) */ + public ?AbilityAnnotations $annotations; + + /** @var bool whether this ability should be exposed in the REST API */ + public bool $showInRest; + + public function __construct( + string $name, + string $label, + string $description, + string $category, + callable $executeCallback, + callable $permissionCallback, + array $inputSchema = [], + array $outputSchema = [], + ?AbilityAnnotations $annotations = null, + bool $showInRest = true + ) + { + $this->name = $name; + $this->label = $label; + $this->description = $description; + $this->category = $category; + $this->executeCallback = $executeCallback; + $this->permissionCallback = $permissionCallback; + $this->inputSchema = $inputSchema; + $this->outputSchema = $outputSchema; + $this->annotations = $annotations; + $this->showInRest = $showInRest; + } + + /** + * Maps properties to the structure expected by wp_register_ability(), + * including the nested meta.annotations and meta.show_in_rest format. + * + * @link https://developer.wordpress.org/reference/functions/wp_register_ability/ + * + * @since 6.1.0 + */ + public function toArray() : array + { + $args = [ + 'label' => $this->label, + 'description' => $this->description, + 'category' => $this->category, + 'execute_callback' => $this->executeCallback, + 'permission_callback' => $this->permissionCallback, + 'input_schema' => $this->inputSchema, + 'output_schema' => $this->outputSchema, + 'meta' => [ + 'show_in_rest' => $this->showInRest, + ], + ]; + + if ($this->annotations) { + $args['meta']['annotations'] = $this->annotations->toArray(); + } + + return $args; + } +} diff --git a/woocommerce/Abilities/DataObjects/AbilityAnnotations.php b/woocommerce/Abilities/DataObjects/AbilityAnnotations.php new file mode 100644 index 000000000..d6d4344b4 --- /dev/null +++ b/woocommerce/Abilities/DataObjects/AbilityAnnotations.php @@ -0,0 +1,60 @@ +readonly = $readonly; + $this->destructive = $destructive; + $this->idempotent = $idempotent; + } +} diff --git a/woocommerce/Abilities/DataObjects/AbilityCategory.php b/woocommerce/Abilities/DataObjects/AbilityCategory.php new file mode 100644 index 000000000..7870c0e17 --- /dev/null +++ b/woocommerce/Abilities/DataObjects/AbilityCategory.php @@ -0,0 +1,83 @@ + optional additional metadata */ + public array $meta = []; + + public function __construct( + string $slug, + string $label, + string $description, + array $meta = [] + ) + { + $this->slug = $slug; + $this->label = $label; + $this->description = $description; + $this->meta = $meta; + } + + /** + * {@inheritDoc} + * + * Returns the format expected by wp_register_ability_category(), excluding slug + * since that is passed as a positional argument. + * + * @link https://developer.wordpress.org/reference/functions/wp_register_ability_category/ + * + * @since 6.1.0 + */ + public function toArray() : array + { + return [ + 'label' => $this->label, + 'description' => $this->description, + 'meta' => $this->meta, + ]; + } +} diff --git a/woocommerce/changelog.txt b/woocommerce/changelog.txt index e85ceb912..49d04ff9b 100644 --- a/woocommerce/changelog.txt +++ b/woocommerce/changelog.txt @@ -1,6 +1,7 @@ *** SkyVerge WooCommerce Plugin Framework Changelog *** 2026.nn.nn - version 6.1.0 +* New: Introduced Abilities abstraction layers 2025.nn.nn - version 6.0.1 * New: Introduced a new ScriptHelper class with addInlineScript() method diff --git a/woocommerce/class-sv-wc-plugin.php b/woocommerce/class-sv-wc-plugin.php index 74247ef31..daf5fea2d 100644 --- a/woocommerce/class-sv-wc-plugin.php +++ b/woocommerce/class-sv-wc-plugin.php @@ -25,6 +25,7 @@ namespace SkyVerge\WooCommerce\PluginFramework\v6_1_0; use Automattic\WooCommerce\Utilities\FeaturesUtil; +use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Abilities\Contracts\HasAbilitiesContract; use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Handlers\Country_Helper; use SkyVerge\WooCommerce\PluginFramework\v6_1_0\Payment_Gateway\PaymentFormContextChecker; use stdClass; @@ -101,6 +102,9 @@ abstract class SV_WC_Plugin { /** @var Blocks\Blocks_Handler blocks handler instance */ protected Blocks\Blocks_Handler $blocks_handler; + /** @var ?Abilities\AbilitiesHandler abilities handler instance */ + protected ?Abilities\AbilitiesHandler $abilities_handler = null; + /** @var Admin\Setup_Wizard handler instance */ protected $setup_wizard_handler; @@ -179,6 +183,9 @@ public function __construct( string $id, string $version, array $args = [] ) { // build the blocks handler instance $this->init_blocks_handler(); + // build the abilities handler instance + $this->init_abilities_handler(); + // add the action & filter hooks $this->add_hooks(); } @@ -311,6 +318,24 @@ protected function init_blocks_handler() : void { } + /** + * Builds the abilities handler instance. + * + * Hooks into the WordPress Abilities API (WP 6.9+) to register plugin abilities. + * + * @since 6.1.0 + * + * @return void + */ + protected function init_abilities_handler() : void { + + if ($this instanceof HasAbilitiesContract && function_exists('wp_register_ability')) { + $this->abilities_handler = new Abilities\AbilitiesHandler($this->getAbilitiesProvider()); + $this->abilities_handler->addHooks(); + } + } + + /** * Builds the Setup Wizard handler instance. * @@ -1021,6 +1046,19 @@ public function get_blocks_handler() : Blocks\Blocks_Handler { } + /** + * Gets the abilities handler instance. + * + * @since 6.1.0 + * + * @return ?Abilities\AbilitiesHandler + */ + public function get_abilities_handler() : ?Abilities\AbilitiesHandler { + + return $this->abilities_handler; + } + + /** * Gets the Setup Wizard handler instance. * From e55375a79d3fac82ac17a5fd462c4d017e1a35cd Mon Sep 17 00:00:00 2001 From: Ashley Gibson Date: Thu, 12 Mar 2026 14:28:04 +0000 Subject: [PATCH 3/4] Update changelog --- woocommerce/changelog.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/woocommerce/changelog.txt b/woocommerce/changelog.txt index 49d04ff9b..ae5ffe2ec 100644 --- a/woocommerce/changelog.txt +++ b/woocommerce/changelog.txt @@ -1,18 +1,18 @@ *** SkyVerge WooCommerce Plugin Framework Changelog *** -2026.nn.nn - version 6.1.0 -* New: Introduced Abilities abstraction layers +2026.03.12 - version 6.1.0 +* New: Introduced Abilities API abstraction layers for registering abilities -2025.nn.nn - version 6.0.1 +2026.02.17 - version 6.0.1 * New: Introduced a new ScriptHelper class with addInlineScript() method * Tweak: Update usage of deprecated wc_enqueue_js() in favour of wp_add_inline_script() * Dev - Set PHP 8.1 defaults on `html_entity_decode()` usage (ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401) -2025.nn.nn - version 6.0.0 +2025.12.01 - version 6.0.0 * Dev - Completely reworked how we handle dynamic properties on WooCommerce order objects. For now this change is backwards compatible with v5, but we will eventually drop support for the legacy method, so migrating ASAP is recommended. See the upgrade guide: https://github.com/godaddy-wordpress/wc-plugin-framework/wiki/Migrating-to-v6 * Dev - Address "Implicitly marking parameter as nullable is deprecated" warnings in PHP 8.4 -2025.nn.nn - version 5.15.12 +2025.05.27 - version 5.15.12 * Fix: Only retrieve subscriptions data during checkout if there's a valid order to associate them with 2025.05.19 - version 5.15.11 From 51029b8862056aa6967bbea4bfc4962ef68b0fa4 Mon Sep 17 00:00:00 2001 From: Ashley Gibson Date: Thu, 12 Mar 2026 15:02:43 +0000 Subject: [PATCH 4/4] Change namespace caps --- tests/unit/Abilities/AbilitiesHandlerTest.php | 2 +- tests/unit/Abilities/AbstractAbilitiesProviderTest.php | 2 +- tests/unit/Abilities/DataObjects/AbilityAnnotationsTest.php | 2 +- tests/unit/Abilities/DataObjects/AbilityCategoryTest.php | 2 +- tests/unit/Abilities/DataObjects/AbilityTest.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/Abilities/AbilitiesHandlerTest.php b/tests/unit/Abilities/AbilitiesHandlerTest.php index 5fd97337c..d0dedd8f9 100644 --- a/tests/unit/Abilities/AbilitiesHandlerTest.php +++ b/tests/unit/Abilities/AbilitiesHandlerTest.php @@ -1,6 +1,6 @@