diff --git a/data/templates/ach-debit-form.json b/data/templates/ach-debit-form.json new file mode 100644 index 00000000..9e2349e8 --- /dev/null +++ b/data/templates/ach-debit-form.json @@ -0,0 +1,56 @@ +{ + "id": "7c1efe0a-2c73-4456-875a-5c96cf69db71", + "license": [ + "personal", + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "non-profit", + "alternative" + ], + "keywords": [ + "ach", + "debit", + "on-site" + ], + "slug": "ach-debit-form", + "name": "ACH Debit Form", + "description": "Accept ACH debit payments directly from bank accounts (U.S. only).", + "url": "", + "data": { + "title": "ACH Debit Form", + "description": "", + "type": "embedded", + "payment_methods": [ + "ach-debit", + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "" + }, + { + "type": "card", + "label": "", + "icons": "yes" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 10000, + "currency": "usd" + } + ] + } +} \ No newline at end of file diff --git a/data/templates/afterpay-clearpay-form.json b/data/templates/afterpay-clearpay-form.json new file mode 100644 index 00000000..0f313377 --- /dev/null +++ b/data/templates/afterpay-clearpay-form.json @@ -0,0 +1,53 @@ +{ + "id": "e1336366-a8d6-4e6b-8ece-7ab476d96e28", + "license": [ + "professional", + "ultimate", + "elite" + ], + "categories": [ + "business", + "alternative" + ], + "keywords": [ + "buy now", + "pay later", + "on-site" + ], + "slug": "afterpay-clearpay-form", + "name": "Afterpay/Clearpay (Buy Now Pay Later) Form", + "description": "Offer buy now pay later payments with Afterpay/Clearpay.", + "url": "", + "data": { + "title": "Afterpay/Clearpay (Buy Now Pay Later) Form", + "description": "", + "type": "embedded", + "payment_methods": [ + "afterpay-clearpay", + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "" + }, + { + "type": "card", + "label": "", + "icons": "yes" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 2500 + } + ] + } +} \ No newline at end of file diff --git a/data/templates/klarna-form.json b/data/templates/klarna-form.json new file mode 100644 index 00000000..0d9a9462 --- /dev/null +++ b/data/templates/klarna-form.json @@ -0,0 +1,53 @@ +{ + "id": "a0668a50-8b04-4231-8bf5-54264cf7030a", + "license": [ + "professional", + "ultimate", + "elite" + ], + "categories": [ + "business", + "alternative" + ], + "keywords": [ + "buy now", + "pay later", + "on-site" + ], + "slug": "klarna-form", + "name": "Klarna (Buy Now Pay Later) Form", + "description": "Offer buy now pay later payments with Klarna.", + "url": "", + "data": { + "title": "Klarna (Buy Now Pay Later) Form", + "description": "", + "type": "embedded", + "payment_methods": [ + "klarna", + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "" + }, + { + "type": "card", + "label": "", + "icons": "yes" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 2500 + } + ] + } +} \ No newline at end of file diff --git a/data/templates/payment-form-coupon.json b/data/templates/payment-form-coupon.json new file mode 100644 index 00000000..9f5a3198 --- /dev/null +++ b/data/templates/payment-form-coupon.json @@ -0,0 +1,56 @@ +{ + "id": "5201e546-8de6-42dc-9e5f-d3cc51813fa2", + "license": [ + "personal", + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "business" + ], + "keywords": [ + "on-site", + "coupon", + "discount" + ], + "slug": "payment-form-coupon", + "name": "Payment Form with Coupon", + "description": "Collect credit card payments with a basic form, accept coupons.", + "url": "", + "data": { + "title": "Payment Form with Coupon", + "description": "Collect credit card payments", + "type": "embedded", + "payment_methods": [ + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "" + }, + { + "type": "coupon", + "label": "Coupon Code" + }, + { + "type": "card", + "label": "Credit Card" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 1000 + } + ] + } +} \ No newline at end of file diff --git a/data/templates/payment-request-form.json b/data/templates/payment-request-form.json new file mode 100644 index 00000000..8fc8c777 --- /dev/null +++ b/data/templates/payment-request-form.json @@ -0,0 +1,58 @@ +{ + "id": "86d08d6b-8e84-4e59-9177-cf946bb9f910", + "license": [ + "personal", + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "business", + "alternative" + ], + "keywords": [ + "apple", + "google", + "microsoft", + "express", + "on-site" + ], + "slug": "payment-request-form", + "name": "Apple Pay / Google Pay Form", + "description": "Collect payments with Apple Pay and Google Pay.", + "url": "", + "data": { + "title": "Apple Pay / Google Pay Form", + "description": "", + "type": "embedded", + "payment_methods": [ + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "" + }, + { + "type": "payment_request_button" + }, + { + "type": "card", + "label": "Credit Card" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 1000 + } + ] + } +} \ No newline at end of file diff --git a/data/templates/product-installment-plan-form.json b/data/templates/product-installment-plan-form.json new file mode 100644 index 00000000..1478e228 --- /dev/null +++ b/data/templates/product-installment-plan-form.json @@ -0,0 +1,56 @@ +{ + "id": "05387fec-8a7d-423e-8a5d-04e94af41111", + "license": [ + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "recurring" + ], + "keywords": [ + "installment", + "service", + "subscription" + ], + "slug": "product-installment-plan-form", + "name": "Installment Plan Form", + "description": "Collect a specific number of payments in a specific period of time.", + "url": "", + "data": { + "title": "Installment Plan", + "description": "Purchase a product in installments.", + "type": "embedded", + "payment_methods": [ + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select" + }, + { + "type": "card", + "label": "Credit Card" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 2500, + "recurring": { + "interval": "month", + "interval_count": 1, + "invoice_limit": 4 + }, + "default": true + } + ] + } +} \ No newline at end of file diff --git a/data/templates/product-subscription-form-coupon.json b/data/templates/product-subscription-form-coupon.json new file mode 100644 index 00000000..d8d2f840 --- /dev/null +++ b/data/templates/product-subscription-form-coupon.json @@ -0,0 +1,70 @@ +{ + "id": "9c99931b-599b-471f-b39d-2607c8283c19", + "license": [ + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "recurring" + ], + "keywords": [ + "subscription", + "coupon", + "discount" + ], + "slug": "product-subscription-form-coupon", + "name": "Product Subscription with Coupon", + "description": "Bill customers on a recurring basis for a product, accept coupons", + "url": "", + "data": { + "title": "Product Subscription", + "description": "Subscribe to our product.", + "type": "embedded", + "payment_methods": [ + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "Payment Options", + "display_type": "list" + }, + { + "type": "coupon", + "label": "Coupon Code" + }, + { + "type": "card", + "label": "Credit Card" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 1500, + "label": "Monthly", + "recurring": { + "interval": "month", + "interval_count": 1 + }, + "default": true + }, + { + "unit_amount": 10000, + "recurring": { + "interval": "year", + "interval_count": 1 + }, + "label": "Yearly (Save $80!)" + } + ] + } +} \ No newline at end of file diff --git a/data/templates/recurring-service-setup-fee-form.json b/data/templates/recurring-service-setup-fee-form.json new file mode 100644 index 00000000..11b71fdf --- /dev/null +++ b/data/templates/recurring-service-setup-fee-form.json @@ -0,0 +1,61 @@ +{ + "id": "03a82a3c-f9bd-42c2-92e9-e48b7f827c46", + "license": [ + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "recurring" + ], + "keywords": [ + "fee", + "setup", + "service", + "subscription" + ], + "slug": "recurring-service-setup-fee-form", + "name": "Recurring Services with Setup Fee Form", + "description": "Charge an additional amount to setup a recurring service.", + "url": "", + "data": { + "title": "Subscribe to Service", + "description": "Sign up for our service.", + "type": "embedded", + "payment_methods": [ + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select" + }, + { + "type": "card", + "label": "Credit Card" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 2500, + "recurring": { + "interval": "month", + "interval_count": 1 + }, + "line_items": [ + { + "unit_amount": 2500 + } + ], + "default": true + } + ] + } +} \ No newline at end of file diff --git a/data/templates/recurring-service-trial-period-form.json b/data/templates/recurring-service-trial-period-form.json new file mode 100644 index 00000000..d851aa00 --- /dev/null +++ b/data/templates/recurring-service-trial-period-form.json @@ -0,0 +1,57 @@ +{ + "id": "df64055c-3fdc-43d4-bc4c-f58e232160e6", + "license": [ + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "recurring" + ], + "keywords": [ + "trial", + "free", + "service", + "subscription" + ], + "slug": "recurring-service-trial-period-form", + "name": "Recurring Services with Trial Period Form", + "description": "Collect multiple payments after a set trial period.", + "url": "", + "data": { + "title": "Start Your Trial", + "description": "Try our service free for 30 days.", + "type": "embedded", + "payment_methods": [ + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select" + }, + { + "type": "card", + "label": "Credit Card" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 2500, + "recurring": { + "interval": "month", + "interval_count": 1, + "trial_period_days": 30 + }, + "default": true + } + ] + } +} \ No newline at end of file diff --git a/data/templates/sepa-direct-debit-form.json b/data/templates/sepa-direct-debit-form.json new file mode 100644 index 00000000..1b4267e8 --- /dev/null +++ b/data/templates/sepa-direct-debit-form.json @@ -0,0 +1,56 @@ +{ + "id": "378765dc-9691-4155-91ca-1de02b6ed0b1", + "license": [ + "personal", + "plus", + "professional", + "ultimate", + "elite" + ], + "categories": [ + "non-profit", + "alternative" + ], + "keywords": [ + "sepa", + "debit", + "on-site" + ], + "slug": "sepa-direct-debit-form", + "name": "SEPA Direct Debit Form", + "description": "Collect payments through SEPA Direct Debit.", + "url": "", + "data": { + "title": "SEPA Direct Debit Form", + "description": "", + "type": "embedded", + "payment_methods": [ + "sepa-debit", + "card" + ], + "fields": [ + { + "type": "email", + "label": "Email Address" + }, + { + "type": "plan_select", + "label": "" + }, + { + "type": "card", + "label": "", + "icons": "yes" + }, + { + "type": "checkout_button" + } + ], + "prices": [ + { + "unit_amount": 10000, + "currency": "eur" + } + ] + } +} \ No newline at end of file diff --git a/gruntfile.js b/gruntfile.js index 60736edd..7ca71c66 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -55,6 +55,8 @@ module.exports = function( grunt ) { files: { src: [ 'includes/**/*.php', + 'views/**/*.php', + 'src/**/*.php', 'stripe-checkout.php', 'uninstall.php' ], diff --git a/includes/core/admin/class-assets.php b/includes/core/admin/class-assets.php index 5ae16868..03247c1d 100644 --- a/includes/core/admin/class-assets.php +++ b/includes/core/admin/class-assets.php @@ -166,10 +166,11 @@ public function register() { 'simpay-admin', 'simpayAdmin', array( - 'siteTitle' => get_bloginfo( 'name' ), - 'ajaxUrl' => admin_url( 'admin-ajax.php' ), - 'nonce' => wp_create_nonce( 'simpay-admin' ), - 'i18n' => array( + 'siteTitle' => get_bloginfo( 'name' ), + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + 'nonce' => wp_create_nonce( 'simpay-admin' ), + 'licenseLevel' => simpay_get_license()->get_level(), + 'i18n' => array( 'dateFormat' => simpay_get_date_format(), 'leavePageConfirm' => esc_html__( 'The changes you made will be lost if you navigate away from this page.', diff --git a/includes/core/admin/class-menus.php b/includes/core/admin/class-menus.php index a07cac89..7b75509d 100644 --- a/includes/core/admin/class-menus.php +++ b/includes/core/admin/class-menus.php @@ -150,7 +150,7 @@ public static function plugin_action_links( $action_links, $file ) { $documentation_url = simpay_ga_url( 'https://docs.wpsimplepay.com/', 'plugin-listing-link', - false + 'Documentation' ); $links[] = sprintf( @@ -163,7 +163,7 @@ public static function plugin_action_links( $action_links, $file ) { $support_url = simpay_ga_url( 'https://wpsimplepay.com/support', 'plugin-listing-link', - false + 'Support' ); $links[] = sprintf( diff --git a/includes/core/admin/functions/notices.php b/includes/core/admin/functions/notices.php index a76741da..8ff564f2 100644 --- a/includes/core/admin/functions/notices.php +++ b/includes/core/admin/functions/notices.php @@ -95,7 +95,7 @@ function stripe_connect() {
- +
diff --git a/includes/core/admin/notices/promos.php b/includes/core/admin/notices/promos.php deleted file mode 100644 index ba72f831..00000000 --- a/includes/core/admin/notices/promos.php +++ /dev/null @@ -1,79 +0,0 @@ -post_type ) || - 'simple-pay' !== $current_screen->post_type - ) { - return; - } - - // Dismissed, show nothing. - $dismissed = Notice_Manager::is_notice_dismissed( 'simpay-license-upgrade' ); - - if ( true === $dismissed ) { - return; - } - - $license_data = get_option( 'simpay_license_data', false ); - $is_lite = false === class_exists( '\SimplePay\Pro\SimplePayPro', false ); - - // Pro. No license data. Show nothing. - if ( - false === $is_lite && - ( - false === $license_data || - ( isset( $license_data->error ) && 'missing' === $license_data->error ) - ) - ) { - return; - } - - $license_id = isset( $license_data->price_id ) - ? $license_data->price_id - : 0; - - // Pro. Professional or higher. Show nothing. - if ( false === $is_lite && $license_id > 1 ) { - return; - } - - $license_types = array( - 0 => _x( 'Lite', 'license type', 'stripe' ), - 1 => _x( 'Personal', 'license type', 'stripe' ), - 2 => _x( 'Plus', 'license type', 'stripe' ), - 3 => _x( 'Professional', 'license type', 'stripe' ), - 4 => _x( 'Ultimate', 'license type', 'stripe' ), - ); - - $license_type = false === $is_lite - ? $license_types[ $license_id ] - : false; - - $upgrade_url = simpay_pro_upgrade_url( 'notice-bar' ); - - require dirname( __FILE__ ) . '/promos/general/license-upgrade.php'; -} -add_action( 'admin_notices', __NAMESPACE__ . '\\license_upgrade_promo' ); diff --git a/includes/core/admin/notices/promos/general/license-upgrade.php b/includes/core/admin/notices/promos/general/license-upgrade.php deleted file mode 100644 index f04ff5de..00000000 --- a/includes/core/admin/notices/promos/general/license-upgrade.php +++ /dev/null @@ -1,83 +0,0 @@ - - -- { sprintf( - /* translators: %s Template name */ - __( - 'We\'re sorry, the "%s" template is not available on your plan. Please upgrade your plan to unlock all these awesome features.', - 'simple-pay' + { createInterpolateElement( + sprintf( + /* translators: %$ss Template name. %2$s Minimum license level. */ + __( + 'We\'re sorry, the "%1$s" template is not available on your plan. Please upgrade to the %2$s plan or higher to unlock this and other awesome features.', + 'simple-pay' + ), + template.name, + upperFirst( template.license[ 0 ] ) ), - template.name + { + strong: , + } ) }
@@ -65,7 +76,7 @@ function UpgradeModal( { template, setIsShowingUpgradeModal } ) { { createInterpolateElement( // eslint-disable-next-line @wordpress/i18n-translator-comments __( - 'Bonus: WP Simple Pay Lite users get'+l+"
")},stepInstallPluginStatus:function(){var t={action:"simpay_smtp_page_check_plugin_status",nonce:simpay_smtp.nonce};s.post(simpay_smtp.ajax_url,t).done(n.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){if(t.success){if(a.$stepSetup.removeClass("grey"),a.$stepSetupBtn=a.$stepSetup.find("button"),a.$stepSetupBtn.removeClass("grey disabled").addClass("button-primary"),t.data.setup_status>0)return a.$stepSetupNum.attr("src",a.$stepSetupNum.attr("src").replace("step-2.svg","step-complete.svg")),void a.$stepSetupBtn.attr("data-url",simpay_smtp.smtp_settings_url).text(simpay_smtp.smtp_settings);a.$stepSetupBtn.attr("data-url",simpay_smtp.smtp_wizard_url).text(simpay_smtp.smtp_wizard)}},gotoURL:function(){var t=s(this);t.hasClass("disabled")||(e.location.href=t.attr("data-url"))},showSpinner:function(t){t.siblings(".loader").removeClass("hidden")},hideSpinner:function(t){t.siblings(".loader").addClass("hidden")}};return n}(document,window,t)).init()}).call(this,s(12))}}); \ No newline at end of file +!function(t){var e={};function s(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.m=t,s.c=e,s.d=function(t,e,a){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},s.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.t=function(t,e){if(1&e&&(t=s(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(s.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)s.d(a,n,function(e){return t[e]}.bind(null,n));return a},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,"a",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p="",s(s.s=345)}({14:function(t,e){t.exports=jQuery},345:function(t,e,s){"use strict";(function(t){(window.SimPaySMTP||function(t,e,s){var a={},n={init:function(){s(n.ready)},ready:function(){n.initVars(),n.events()},initVars:function(){a={$stepInstall:s("section.step-install"),$stepInstallNum:s("section.step-install .num img"),$stepSetup:s("section.step-setup"),$stepSetupNum:s("section.step-setup .num img")}},events:function(){a.$stepInstall.on("click","button",n.stepInstallClick),a.$stepSetup.on("click","button",n.gotoURL)},stepInstallClick:function(t){t.preventDefault();var i=s(this),r=i.attr("data-action"),l=i.attr("data-plugin"),p=i.text(),u="";if(!i.hasClass("disabled")){switch(r){case"activate":u="simpay_activate_plugin",i.text(simpay_smtp.activating);break;case"install":u="simpay_install_plugin",i.text(simpay_smtp.installing);break;case"goto-url":return void(e.location.href=i.attr("data-url"));default:return}i.addClass("disabled"),n.showSpinner(a.$stepInstallNum);var o={action:u,nonce:simpay_smtp.nonce,plugin:l};s.post(simpay_smtp.ajax_url,o).done((function(t){n.stepInstallDone(t,i,r)})).fail((function(){i.removeClass("disabled"),i.text(p)})).always((function(){n.hideSpinner(a.$stepInstallNum)}))}},stepInstallDone:function(t,e,s){if("install"===s?t.success&&t.data.is_activated:t.success)return a.$stepInstallNum.attr("src",a.$stepInstallNum.attr("src").replace("step-1.","step-complete.")),e.addClass("grey").removeClass("button-primary").text(simpay_smtp.activated),void n.stepInstallPluginStatus();var i="install"===s&&t.success&&!t.data.is_activated||"activate"===s,r=i?simpay_smtp.manual_activate_url:simpay_smtp.manual_install_url,l=i?simpay_smtp.error_could_not_activate:simpay_smtp.error_could_not_install,p=i?simpay_smtp.plugins_page:simpay_smtp.download_now;e.removeClass("grey disabled").text(p).attr("data-action","goto-url").attr("data-url",r),e.after(''+l+"
")},stepInstallPluginStatus:function(){var t={action:"simpay_smtp_page_check_plugin_status",nonce:simpay_smtp.nonce};s.post(simpay_smtp.ajax_url,t).done(n.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){if(t.success){if(a.$stepSetup.removeClass("grey"),a.$stepSetupBtn=a.$stepSetup.find("button"),a.$stepSetupBtn.removeClass("grey disabled").addClass("button-primary"),t.data.setup_status>0)return a.$stepSetupNum.attr("src",a.$stepSetupNum.attr("src").replace("step-2.svg","step-complete.svg")),void a.$stepSetupBtn.attr("data-url",simpay_smtp.smtp_settings_url).text(simpay_smtp.smtp_settings);a.$stepSetupBtn.attr("data-url",simpay_smtp.smtp_wizard_url).text(simpay_smtp.smtp_wizard)}},gotoURL:function(){var t=s(this);t.hasClass("disabled")||(e.location.href=t.attr("data-url"))},showSpinner:function(t){t.siblings(".loader").removeClass("hidden")},hideSpinner:function(t){t.siblings(".loader").addClass("hidden")}};return n}(document,window,t)).init()}).call(this,s(14))}}); \ No newline at end of file diff --git a/includes/core/assets/js/simpay-admin.min.js b/includes/core/assets/js/simpay-admin.min.js index dcb9f209..da6b8e9e 100644 --- a/includes/core/assets/js/simpay-admin.min.js +++ b/includes/core/assets/js/simpay-admin.min.js @@ -1 +1 @@ -!function(e){var t={};function n(a){if(t[a])return t[a].exports;var i=t[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(a,i,function(t){return e[t]}.bind(null,i));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=331)}({107:function(e,t,n){var a=n(63);e.exports=function(e){if(Array.isArray(e))return a(e)},e.exports.__esModule=!0,e.exports.default=e.exports},108:function(e,t){e.exports=function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.__esModule=!0,e.exports.default=e.exports},109:function(e,t,n){var a=n(63);e.exports=function(e,t){if(e){if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}},e.exports.__esModule=!0,e.exports.default=e.exports},110:function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.__esModule=!0,e.exports.default=e.exports},12:function(e,t){e.exports=jQuery},13:function(e,t){var n=/^(?:submit|button|image|reset|file)$/i,a=/^(?:input|select|textarea|keygen)/i,i=/(\[[^\[\]]*\])/g;function r(e,t,n){if(t.match(i))!function e(t,n,a){if(0===n.length)return a;var i=n.shift(),r=i.match(/^\[(.+?)\]$/);if("[]"===i)return t=t||[],Array.isArray(t)?t.push(e(null,n,a)):(t._values=t._values||[],t._values.push(e(null,n,a))),t;if(r){var o=r[1],s=+o;isNaN(s)?(t=t||{})[o]=e(t[o],n,a):(t=t||[])[s]=e(t[s],n,a)}else t[i]=e(t[i],n,a);return t}(e,function(e){var t=[],n=new RegExp(i),a=/^([^\[\]]*)/.exec(e);for(a[1]&&t.push(a[1]);null!==(a=n.exec(e));)t.push(a[1]);return t}(t),n);else{var a=e[t];a?(Array.isArray(a)||(e[t]=[a]),e[t].push(n)):e[t]=n}return e}function o(e,t,n){return n=n.replace(/(\r)?\n/g,"\r\n"),n=(n=encodeURIComponent(n)).replace(/%20/g,"+"),e+(e?"&":"")+encodeURIComponent(t)+"="+n}e.exports=function(e,t){"object"!=typeof t?t={hash:!!t}:void 0===t.hash&&(t.hash=!0);for(var i=t.hash?{}:"",s=t.serializer||(t.hash?r:o),c=e&&e.elements?e.elements:[],l=Object.create(null),u=0;u