| @@ -24,18 +24,16 @@ | ||
| 24 | 24 | |
| 25 | 25 | if (is_admin()) { |
| 26 | 26 | // Add the on-site-messaging web component if we are in the admin area. |
| 27 | 27 | wp_enqueue_script('vipps-onsite-messageing'); |
| 28 | + wp_enqueue_script('vipps-button-webcomponent'); | |
| 28 | 29 | } |
| 29 | 30 | }); |
| 30 | 31 | |
| 31 | 32 | // Inject block config variables to block editor assets |
| 32 | 33 | add_action('enqueue_block_editor_assets', function () { |
| 34 | + wp_enqueue_script('vipps-button-webcomponent'); | |
| 33 | 35 | |
| 34 | - | |
| 35 | - | |
| 36 | - | |
| 37 | - | |
| 38 | 36 | // vipps-badge config |
| 39 | 37 | $vipps = Vipps::instance(); |
| 40 | 38 | $badge_variants = [ |
| 41 | 39 | ['label' => __('White', 'woo-vipps'), 'value' => 'white'], |
| @@ -47,21 +45,21 @@ | ||
| 47 | 45 | $store_language = substr(get_bloginfo('language'), 0, 2); |
| 48 | 46 | if ($store_language == 'nb' || $store_language == 'nn') { |
| 49 | 47 | $store_language = 'no'; |
| 50 | 48 | } |
| 51 | - if ($store_language == 'da') { | |
| 52 | - $store_language = 'dk'; | |
| 53 | - } | |
| 54 | - if (!in_array($store_language, ['en', 'no', 'dk', 'fi'])) { | |
| 49 | + if (!in_array($store_language, ['en', 'no', 'dk', 'da', 'fi'])) { | |
| 55 | 50 | $store_language = 'en'; // english default fallback |
| 56 | 51 | } |
| 52 | + // Looks like button and badge web components now use 'da' instead of 'dk' for danish. LP 2026-08-11 | |
| 53 | + if ('dk' === $store_language) $store_language = 'da'; | |
| 57 | 54 | |
| 58 | 55 | $languages = [ |
| 59 | 56 | ['label' => __('Default', 'woo-vipps'), 'value' => $store_language], |
| 60 | 57 | ['label' => __('English', 'woo-vipps'), 'value' => 'en'], |
| 61 | 58 | ['label' => __('Norwegian', 'woo-vipps'), 'value' => 'no'], |
| 59 | + ['label' => __('Swedish', 'woo-vipps'), 'value' => 'sv'], | |
| 62 | 60 | ['label' => __('Finnish', 'woo-vipps'), 'value' => 'fi'], |
| 63 | - ['label' => __('Danish', 'woo-vipps'), 'value' => 'dk'], | |
| 61 | + ['label' => __('Danish', 'woo-vipps'), 'value' => 'da'], | |
| 64 | 62 | ]; |
| 65 | 63 | |
| 66 | 64 | $badge_config = [ |
| 67 | 65 | 'title' => sprintf(__('%1$s On-Site Messaging Badge', 'woo-vipps'), Vipps::CompanyName()), |
| @@ -82,9 +80,12 @@ | ||
| 82 | 80 | // Buy-now product block uses the JS event 'wc-blocks_product_list_rendered', introduced in woocommerce 9.4. LP 29.11.2024 |
| 83 | 81 | if (version_compare(WC_VERSION, '9.4', '>=')) { |
| 84 | 82 | $payment_method = Vipps::instance()->get_payment_method_name(); |
| 85 | 83 | $store_language = Vipps::instance()->get_customer_language(); |
| 84 | + // Looks like button and badge web components now use 'da' instead of 'dk' for danish. LP 2026-08-11 | |
| 85 | + if ('dk' === $store_language) $store_language = 'da'; | |
| 86 | 86 | |
| 87 | + | |
| 87 | 88 | switch ($payment_method) { |
| 88 | 89 | case 'Vipps': |
| 89 | 90 | $buy_now_languages = [ |
| 90 | 91 | ['label' => __('Store language', 'woo-vipps'), 'value' => "store"], |
| @@ -89,9 +90,10 @@ | ||
| 89 | 90 | $buy_now_languages = [ |
| 90 | 91 | ['label' => __('Store language', 'woo-vipps'), 'value' => "store"], |
| 91 | 92 | ['label' => __('English', 'woo-vipps'), 'value' => 'en'], |
| 92 | 93 | ['label' => __('Norwegian', 'woo-vipps'), 'value' => 'no'], |
| 93 | - ['label' => __('Swedish', 'woo-vipps'), 'value' => 'se'], | |
| 94 | + ['label' => __('Swedish', 'woo-vipps'), 'value' => 'sv'], | |
| 95 | + ['label' => __('Danish', 'woo-vipps'), 'value' => 'da'], | |
| 94 | 96 | ]; |
| 95 | 97 | break; |
| 96 | 98 | case 'MobilePay': |
| 97 | 99 | $buy_now_languages = [ |
| @@ -96,42 +98,53 @@ | ||
| 96 | 98 | case 'MobilePay': |
| 97 | 99 | $buy_now_languages = [ |
| 98 | 100 | ['label' => __('Store language', 'woo-vipps'), 'value' => "store"], |
| 99 | 101 | ['label' => __('English', 'woo-vipps'), 'value' => 'en'], |
| 102 | + ['label' => __('Norwegian', 'woo-vipps'), 'value' => 'no'], | |
| 103 | + ['label' => __('Swedish', 'woo-vipps'), 'value' => 'sv'], | |
| 104 | + ['label' => __('Danish', 'woo-vipps'), 'value' => 'da'], | |
| 100 | 105 | ['label' => __('Finnish', 'woo-vipps'), 'value' => 'fi'], |
| 101 | - ['label' => __('Danish', 'woo-vipps'), 'value' => 'dk'], | |
| 102 | 106 | ]; |
| 103 | 107 | break; |
| 104 | 108 | } |
| 105 | 109 | |
| 106 | - // Array of associative arrays with keys 'label' and 'value'. LP 2026-01-16 | |
| 107 | 110 | $buy_now_variants = [ |
| 108 | - ['label' => __('Default', 'woo-vipps'), 'value' => 'default-mini'], | |
| 111 | + ['label' => __('Primary', 'woo-vipps'), 'value' => 'primary'], | |
| 112 | + ['label' => __('Dark', 'woo-vipps'), 'value' => 'dark'], | |
| 113 | + ['label' => __('Light', 'woo-vipps'), 'value' => 'light'], | |
| 109 | 114 | ]; |
| 110 | - foreach (Vipps::instance()->get_express_logo_variants() as $value => $label) { | |
| 111 | - $buy_now_variants[] = ['label' => $label, 'value' => $value]; | |
| 112 | - } | |
| 113 | 115 | |
| 114 | - // Create array of language => variant => logo_url. LP 2026-01-16 | |
| 115 | - $logos = []; | |
| 116 | - foreach ($buy_now_languages as $lang_arr) { | |
| 117 | - $lang_key = $lang_arr['value']; | |
| 118 | - $lang = $lang_key === 'store' ? $store_language : $lang_key; | |
| 119 | - foreach ($buy_now_variants as $variant_arr) { | |
| 120 | - $variant = $variant_arr['value']; | |
| 121 | - $logos[$lang_key][$variant] = Vipps::instance()->get_express_logo($payment_method, $lang, $variant); | |
| 122 | - } | |
| 116 | + $buy_now_verbs = [ | |
| 117 | + ['label' => __('Buy', 'woo-vipps'), 'value' => 'buy'], | |
| 118 | + ['label' => __('Pay', 'woo-vipps'), 'value' => 'pay'], | |
| 119 | + ['label' => __('Continue', 'woo-vipps'), 'value' => 'continue'], | |
| 120 | + ['label' => __('Confirm', 'woo-vipps'), 'value' => 'confirm'], | |
| 121 | + ['label' => __('Donate', 'woo-vipps'), 'value' => 'donate'], | |
| 122 | + ['label' => __('Express', 'woo-vipps'), 'value' => 'express'], | |
| 123 | + ]; | |
| 124 | + | |
| 125 | + // Migrate from old variants to new config array by sending a map. LP 2026-07-01 | |
| 126 | + $variant_migration_map = []; | |
| 127 | + foreach(array_keys(Vipps::instance()->get_express_logo_variants()) as $old_variant) { | |
| 128 | + $new_config = Vipps::instance()->migrate_button_variant_to_config($old_variant); | |
| 129 | + unset($new_config['brand']); // brand needs to be dynamic from payment method! LP 2026-07-01 | |
| 130 | + unset($new_config['language']); | |
| 131 | + unset($new_config['stretched']); | |
| 132 | + $variant_migration_map[$old_variant] = $new_config; | |
| 123 | 133 | } |
| 124 | 134 | |
| 125 | 135 | $buy_now_config = [ |
| 126 | 136 | 'BuyNowWithVipps' => Vipps::instance()->vippsJSConfig['vippssmileurl'], |
| 127 | - 'logos' => $logos, | |
| 128 | 137 | 'vippssmileurl' => Vipps::instance()->vippsJSConfig['vippssmileurl'], |
| 129 | 138 | 'vippsbuynowbutton' => Vipps::instance()->vippsJSConfig['vippsbuynowbutton'], |
| 130 | 139 | 'vippsbuynowdescription' => Vipps::instance()->vippsJSConfig['vippsbuynowdescription'], |
| 131 | 140 | 'languages' => $buy_now_languages, |
| 132 | 141 | 'variants' => $buy_now_variants, |
| 142 | + 'verbs' => $buy_now_verbs, | |
| 133 | 143 | 'vippsresturl' => '/woo-vipps/v1', |
| 144 | + 'paymentMethod' => Vipps::instance()->get_payment_method_name(), | |
| 145 | + 'storeLanguage' => Vipps::instance()->get_customer_language(), | |
| 146 | + 'variantMigrationMap' => $variant_migration_map, | |
| 134 | 147 | ]; |
| 135 | 148 | wp_add_inline_script('woo-vipps-buy-now-editor-script', 'const vippsBuyNowBlockConfig = ' . json_encode($buy_now_config), 'before'); |
| 136 | 149 | |
| 137 | 150 | // Buy now block for the minicart only. LP 2026-02-09 |
| @@ -139,9 +152,9 @@ | ||
| 139 | 152 | 'vippsbuynowdescription' => sprintf(__( 'Add a %1$s Buy Now-button to the mini-cart', 'woo-vipps'), $vipps->get_payment_method_name()), |
| 140 | 153 | 'vippsbuynowbutton' => $buy_now_config['vippsbuynowbutton'], |
| 141 | 154 | 'vippssmileurl' => $buy_now_config['vippssmileurl'], |
| 142 | 155 | 'BuyNowWithVipps' => $buy_now_config['BuyNowWithVipps'], |
| 143 | - 'minicartLogo' => $vipps->get_payment_logo('minicart'), | |
| 156 | + 'buttonHtml' => $vipps->get_html_button_for_context('minicart'), | |
| 144 | 157 | ]; |
| 145 | 158 | wp_add_inline_script('woo-vipps-buy-now-cart-editor-script', 'const vippsBuyNowCartBlockConfig = ' . json_encode($buy_now_cart_config), 'before'); |
| 146 | 159 | } |
| 147 | 160 | }); |