Version Description
16.11.2022
- Tweak: Removed a console.og statement
- Tweak: Remove an error_log if an invalid phone number is passed to the e164 formatter
- Fix: Fixed a check if conversions have already fired for logged-in users
Download this release
Release Info
Developer | alekv |
Plugin | Pixel Manager for WooCommerce – Track Google Analytics, Google Ads, Facebook and more |
Version | 1.27.1 |
Comparing to | |
See all releases |
Code changes from version 1.27.0 to 1.27.1
- classes/class-db-upgrade.php +0 -141
- classes/class-default-options.php +0 -150
- classes/class-helpers.php +4 -1
- classes/class-shop.php +35 -4
- classes/pixels/trait-product.php +0 -424
- classes/pixels/trait-shop.php +0 -587
- js/admin/edit-order.js +0 -28
- js/public/wpm-public.p1.min.js +1 -1
- js/public/wpm-public.p1.min.js.br +0 -0
- js/public/wpm-public.p1.min.js.gz +0 -0
- js/public/wpm-public.p1.min.js.map +1 -1
- readme.txt +10 -2
- vendor/freemius/wordpress-sdk/assets/img/woocommerce-google-adwords-conversion-tracking-tag.png +0 -0
- vendor/freemius/wordpress-sdk/includes/i18n.php +0 -605
- wgact.php +2 -2
classes/class-db-upgrade.php
DELETED
@@ -1,141 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* DB upgrade function
|
4 |
-
*/
|
5 |
-
|
6 |
-
namespace WCPM\Classes;
|
7 |
-
|
8 |
-
if (!defined('ABSPATH')) {
|
9 |
-
exit; // Exit if accessed directly
|
10 |
-
}
|
11 |
-
|
12 |
-
class Db_Upgrade {
|
13 |
-
|
14 |
-
private static $options_backup_name = 'wgact_options_backup';
|
15 |
-
|
16 |
-
public static function run_options_db_upgrade() {
|
17 |
-
|
18 |
-
$mysql_db_version = self::get_mysql_db_version();
|
19 |
-
|
20 |
-
// determine version and run version specific upgrade function
|
21 |
-
// check if options db version zero by looking if the old entries are still there.
|
22 |
-
if ('0' === $mysql_db_version) {
|
23 |
-
self::up_from_zero_to_1();
|
24 |
-
}
|
25 |
-
|
26 |
-
if (version_compare(2, $mysql_db_version, '>')) {
|
27 |
-
self::up_from_1_to_2();
|
28 |
-
}
|
29 |
-
|
30 |
-
if (version_compare(3, $mysql_db_version, '>')) {
|
31 |
-
self::up_from_2_to_3();
|
32 |
-
}
|
33 |
-
}
|
34 |
-
|
35 |
-
private function up_from_2_to_3() {
|
36 |
-
|
37 |
-
$options_old = get_option(WPM_DB_OPTIONS_NAME);
|
38 |
-
|
39 |
-
self::backup_options($options_old, '2');
|
40 |
-
|
41 |
-
$options_new = $options_old;
|
42 |
-
|
43 |
-
$options_new['shop']['order_total_logic'] = $options_old['gads']['order_total_logic'];
|
44 |
-
|
45 |
-
$options_new['google']['ads'] = $options_old['gads'];
|
46 |
-
$options_new['google']['gtag'] = $options_old['gtag'];
|
47 |
-
|
48 |
-
|
49 |
-
unset($options_new['google']['ads']['order_total_logic']);
|
50 |
-
unset($options_new['gads']);
|
51 |
-
unset($options_new['gtag']);
|
52 |
-
unset($options_new['google']['ads']['google_business_vertical']);
|
53 |
-
|
54 |
-
$options_new['google']['ads']['google_business_vertical'] = 0;
|
55 |
-
|
56 |
-
$options_new['db_version'] = '3';
|
57 |
-
|
58 |
-
update_option(WPM_DB_OPTIONS_NAME, $options_new);
|
59 |
-
}
|
60 |
-
|
61 |
-
private function up_from_1_to_2() {
|
62 |
-
|
63 |
-
$options_old = get_option(WPM_DB_OPTIONS_NAME);
|
64 |
-
|
65 |
-
self::backup_options($options_old, '1');
|
66 |
-
|
67 |
-
$options_new = [
|
68 |
-
'gads' => [
|
69 |
-
'conversion_id' => $options_old['conversion_id'],
|
70 |
-
'conversion_label' => $options_old['conversion_label'],
|
71 |
-
'order_total_logic' => $options_old['order_total_logic'],
|
72 |
-
'add_cart_data' => $options_old['add_cart_data'],
|
73 |
-
'aw_merchant_id' => $options_old['aw_merchant_id'],
|
74 |
-
'product_identifier' => $options_old['product_identifier'],
|
75 |
-
],
|
76 |
-
'gtag' => [
|
77 |
-
'deactivation' => $options_old['gtag_deactivation'],
|
78 |
-
],
|
79 |
-
'db_version' => '2',
|
80 |
-
];
|
81 |
-
|
82 |
-
update_option(WPM_DB_OPTIONS_NAME, $options_new);
|
83 |
-
}
|
84 |
-
|
85 |
-
private static function get_mysql_db_version() {
|
86 |
-
|
87 |
-
$options = get_option(WPM_DB_OPTIONS_NAME);
|
88 |
-
|
89 |
-
// error_log(print_r($options,true));
|
90 |
-
|
91 |
-
if (( get_option('wgact_plugin_options_1') ) || ( get_option('wgact_plugin_options_2') )) {
|
92 |
-
return '0';
|
93 |
-
} elseif (array_key_exists('conversion_id', $options)) {
|
94 |
-
return '1';
|
95 |
-
} else {
|
96 |
-
return $options['db_version'];
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
-
private static function up_from_zero_to_1() {
|
101 |
-
|
102 |
-
$option_name_old_1 = 'wgact_plugin_options_1';
|
103 |
-
$option_name_old_2 = 'wgact_plugin_options_2';
|
104 |
-
|
105 |
-
// db version place options into new array
|
106 |
-
$options = [
|
107 |
-
'conversion_id' => self::get_option_value_v1($option_name_old_1),
|
108 |
-
'conversion_label' => self::get_option_value_v1($option_name_old_2),
|
109 |
-
];
|
110 |
-
|
111 |
-
// store new option array into the options table
|
112 |
-
update_option(WPM_DB_OPTIONS_NAME, $options);
|
113 |
-
|
114 |
-
// delete old options
|
115 |
-
// only on single site
|
116 |
-
// we will run the multisite deletion only during uninstall
|
117 |
-
delete_option($option_name_old_1);
|
118 |
-
delete_option($option_name_old_2);
|
119 |
-
}
|
120 |
-
|
121 |
-
protected static function get_option_value_v1( $option_name ) {
|
122 |
-
|
123 |
-
if (!get_option($option_name)) {
|
124 |
-
$option_value = '';
|
125 |
-
} else {
|
126 |
-
$option = get_option($option_name);
|
127 |
-
$option_value = $option['text_string'];
|
128 |
-
}
|
129 |
-
|
130 |
-
return $option_value;
|
131 |
-
}
|
132 |
-
|
133 |
-
protected static function backup_options( $options, $version ) {
|
134 |
-
|
135 |
-
$options_backup = get_option(self::$options_backup_name);
|
136 |
-
|
137 |
-
$options_backup[$version] = $options;
|
138 |
-
|
139 |
-
update_option(self::$options_backup_name, $options_backup);
|
140 |
-
}
|
141 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/class-default-options.php
DELETED
@@ -1,150 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WCPM\Classes;
|
4 |
-
|
5 |
-
if (!defined('ABSPATH')) {
|
6 |
-
exit; // Exit if accessed directly
|
7 |
-
}
|
8 |
-
|
9 |
-
class Default_Options {
|
10 |
-
|
11 |
-
// get the default options
|
12 |
-
public function get_default_options() {
|
13 |
-
|
14 |
-
// default options settings
|
15 |
-
return [
|
16 |
-
'google' => [
|
17 |
-
'ads' => [
|
18 |
-
'conversion_id' => '',
|
19 |
-
'conversion_label' => '',
|
20 |
-
'aw_merchant_id' => '',
|
21 |
-
'product_identifier' => 0,
|
22 |
-
'google_business_vertical' => 0,
|
23 |
-
'dynamic_remarketing' => false,
|
24 |
-
'phone_conversion_number' => '',
|
25 |
-
'phone_conversion_label' => '',
|
26 |
-
'enhanced_conversions' => false,
|
27 |
-
'conversion_adjustments' => [
|
28 |
-
'conversion_name' => '',
|
29 |
-
],
|
30 |
-
],
|
31 |
-
'analytics' => [
|
32 |
-
'universal' => [
|
33 |
-
'property_id' => '',
|
34 |
-
],
|
35 |
-
'ga4' => [
|
36 |
-
'measurement_id' => '',
|
37 |
-
'api_secret' => '',
|
38 |
-
'data_api' => [
|
39 |
-
'property_id' => '',
|
40 |
-
'credentials' => [],
|
41 |
-
],
|
42 |
-
],
|
43 |
-
'link_attribution' => false,
|
44 |
-
],
|
45 |
-
'optimize' => [
|
46 |
-
'container_id' => '',
|
47 |
-
],
|
48 |
-
'consent_mode' => [
|
49 |
-
'active' => false,
|
50 |
-
'regions' => [],
|
51 |
-
],
|
52 |
-
'user_id' => false,
|
53 |
-
],
|
54 |
-
'facebook' => [
|
55 |
-
'pixel_id' => '',
|
56 |
-
'microdata' => false,
|
57 |
-
'capi' => [
|
58 |
-
'token' => '',
|
59 |
-
'test_event_code' => '',
|
60 |
-
'user_transparency' => [
|
61 |
-
'process_anonymous_hits' => false,
|
62 |
-
'send_additional_client_identifiers' => false,
|
63 |
-
]
|
64 |
-
]
|
65 |
-
],
|
66 |
-
'bing' => [
|
67 |
-
'uet_tag_id' => ''
|
68 |
-
],
|
69 |
-
'twitter' => [
|
70 |
-
'pixel_id' => ''
|
71 |
-
],
|
72 |
-
'pinterest' => [
|
73 |
-
'pixel_id' => '',
|
74 |
-
'enhanced_match' => false,
|
75 |
-
],
|
76 |
-
'snapchat' => [
|
77 |
-
'pixel_id' => ''
|
78 |
-
],
|
79 |
-
'tiktok' => [
|
80 |
-
'pixel_id' => ''
|
81 |
-
],
|
82 |
-
'hotjar' => [
|
83 |
-
'site_id' => ''
|
84 |
-
],
|
85 |
-
'shop' => [
|
86 |
-
'order_total_logic' => 0,
|
87 |
-
'cookie_consent_mgmt' => [
|
88 |
-
'explicit_consent' => false,
|
89 |
-
],
|
90 |
-
'order_deduplication' => true,
|
91 |
-
'disable_tracking_for' => [],
|
92 |
-
'order_list_info' => true,
|
93 |
-
],
|
94 |
-
'general' => [
|
95 |
-
'variations_output' => true,
|
96 |
-
'maximum_compatibility_mode' => false,
|
97 |
-
'pro_version_demo' => false,
|
98 |
-
'scroll_tracker_thresholds' => [],
|
99 |
-
],
|
100 |
-
'db_version' => WPM_DB_VERSION,
|
101 |
-
];
|
102 |
-
}
|
103 |
-
|
104 |
-
public function update_with_defaults( $target_array, $default_array ) {
|
105 |
-
|
106 |
-
// error_log(print_r($target_array, true));
|
107 |
-
|
108 |
-
// Walk through every key in the default array
|
109 |
-
foreach ($default_array as $default_key => $default_value) {
|
110 |
-
|
111 |
-
// If the target key doesn't exist yet
|
112 |
-
// copy all default values,
|
113 |
-
// including the subtree if one exists,
|
114 |
-
// into the target array.
|
115 |
-
if (!isset($target_array[$default_key])) {
|
116 |
-
$target_array[$default_key] = $default_value;
|
117 |
-
|
118 |
-
// We only want to keep going down the tree
|
119 |
-
// if the array contains more settings in an associative array,
|
120 |
-
// otherwise we keep the settings of what's in the target array.
|
121 |
-
} elseif ($this->is_associative_array($default_value)) {
|
122 |
-
|
123 |
-
$target_array[$default_key] = $this->update_with_defaults($target_array[$default_key], $default_value);
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
-
// error_log(print_r($target_array, true));
|
128 |
-
return $target_array;
|
129 |
-
}
|
130 |
-
|
131 |
-
protected function does_contain_nested_arrays( $array ) {
|
132 |
-
|
133 |
-
foreach ($array as $key) {
|
134 |
-
if (is_array($key)) {
|
135 |
-
return true;
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
return false;
|
140 |
-
}
|
141 |
-
|
142 |
-
protected function is_associative_array( $array ) {
|
143 |
-
|
144 |
-
if (is_array($array)) {
|
145 |
-
return ( array_values($array) !== $array );
|
146 |
-
} else {
|
147 |
-
return false;
|
148 |
-
}
|
149 |
-
}
|
150 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/class-helpers.php
CHANGED
@@ -115,7 +115,10 @@ class Helpers {
|
|
115 |
$number_parsed = $phone_util->parse($number, $country);
|
116 |
return $phone_util->format($number_parsed, PhoneNumberFormat::E164);
|
117 |
} catch (NumberParseException $e) {
|
118 |
-
|
|
|
|
|
|
|
119 |
return $number;
|
120 |
}
|
121 |
}
|
115 |
$number_parsed = $phone_util->parse($number, $country);
|
116 |
return $phone_util->format($number_parsed, PhoneNumberFormat::E164);
|
117 |
} catch (NumberParseException $e) {
|
118 |
+
/**
|
119 |
+
* Don't error log the exception. It leads to more confusion than it helps:
|
120 |
+
* https://wordpress.org/support/topic/php-errors-in-version-1-27-0/
|
121 |
+
*/
|
122 |
return $number;
|
123 |
}
|
124 |
}
|
classes/class-shop.php
CHANGED
@@ -39,7 +39,7 @@ class Shop
|
|
39 |
return true;
|
40 |
}
|
41 |
|
42 |
-
public static function do_not_track_user( $user_id )
|
43 |
{
|
44 |
return !self::track_user( $user_id );
|
45 |
}
|
@@ -166,14 +166,45 @@ class Shop
|
|
166 |
'1.13.0',
|
167 |
'wpm_conversion_prevention'
|
168 |
);
|
|
|
169 |
$conversion_prevention = apply_filters( 'wpm_conversion_prevention', $conversion_prevention, $order );
|
170 |
-
|
171 |
-
if ( self::
|
172 |
return true;
|
173 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
return false;
|
175 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
|
|
|
|
|
|
|
177 |
}
|
178 |
|
179 |
public static function is_browser_on_shop()
|
39 |
return true;
|
40 |
}
|
41 |
|
42 |
+
public static function do_not_track_user( $user_id = null )
|
43 |
{
|
44 |
return !self::track_user( $user_id );
|
45 |
}
|
166 |
'1.13.0',
|
167 |
'wpm_conversion_prevention'
|
168 |
);
|
169 |
+
// If the conversion prevention filter is set to true, the order confirmation will not be processed
|
170 |
$conversion_prevention = apply_filters( 'wpm_conversion_prevention', $conversion_prevention, $order );
|
171 |
+
// If the order deduplication is disabled, we can process the order confirmation
|
172 |
+
if ( self::is_order_deduplication_disabled() ) {
|
173 |
return true;
|
174 |
+
}
|
175 |
+
// If order is in failed, cancelled or refunded status, skip the order confirmation
|
176 |
+
if ( self::is_order_confirmation_not_allowed_status( $order ) ) {
|
177 |
+
return false;
|
178 |
+
}
|
179 |
+
// If this user role is not allowed to be tracked, skip the order confirmation
|
180 |
+
if ( self::do_not_track_user() ) {
|
181 |
return false;
|
182 |
}
|
183 |
+
// If the conversion prevention filter is set to true, skip the order confirmation
|
184 |
+
if ( $conversion_prevention ) {
|
185 |
+
return false;
|
186 |
+
}
|
187 |
+
// if the conversion pixels have not been fired yet, we can process the order confirmation
|
188 |
+
if ( self::has_conversion_pixel_already_fired( $order ) !== true ) {
|
189 |
+
return true;
|
190 |
+
}
|
191 |
+
return false;
|
192 |
+
}
|
193 |
+
|
194 |
+
public static function is_order_deduplication_disabled()
|
195 |
+
{
|
196 |
+
if ( !Options::get_options_obj()->shop->order_deduplication ) {
|
197 |
+
return true;
|
198 |
+
}
|
199 |
+
if ( self::is_nodedupe_parameter_set() ) {
|
200 |
+
return true;
|
201 |
+
}
|
202 |
+
return false;
|
203 |
+
}
|
204 |
|
205 |
+
public static function is_order_deduplication_enabled()
|
206 |
+
{
|
207 |
+
return !self::is_order_deduplication_disabled();
|
208 |
}
|
209 |
|
210 |
public static function is_browser_on_shop()
|
classes/pixels/trait-product.php
DELETED
@@ -1,424 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WCPM\Classes\Pixels;
|
4 |
-
|
5 |
-
use WCPM\Classes\Admin\Environment_Check;
|
6 |
-
use WCPM\Classes\Helpers;
|
7 |
-
use WCPM\Classes\Pixels\Google\Google;
|
8 |
-
|
9 |
-
if (!defined('ABSPATH')) {
|
10 |
-
exit; // Exit if accessed directly
|
11 |
-
}
|
12 |
-
|
13 |
-
trait Trait_Product {
|
14 |
-
|
15 |
-
protected function get_formatted_variant_text( $product ) {
|
16 |
-
|
17 |
-
$variant_text_array = [];
|
18 |
-
|
19 |
-
$attributes = $product->get_attributes();
|
20 |
-
if ($attributes) {
|
21 |
-
foreach ($attributes as $key => $value) {
|
22 |
-
|
23 |
-
$key_name = str_replace('pa_', '', $key);
|
24 |
-
$variant_text_array[] = ucfirst($key_name) . ': ' . strtolower($value);
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
return implode(' | ', $variant_text_array);
|
29 |
-
}
|
30 |
-
|
31 |
-
protected function get_variation_or_product_id( $item, $variations_output = true ) {
|
32 |
-
|
33 |
-
if (true === filter_var($variations_output, FILTER_VALIDATE_BOOLEAN) && !empty($item['variation_id'])) {
|
34 |
-
return $item['variation_id'];
|
35 |
-
}
|
36 |
-
|
37 |
-
return $item['product_id'];
|
38 |
-
}
|
39 |
-
|
40 |
-
// https://stackoverflow.com/a/56278308/4688612
|
41 |
-
// https://stackoverflow.com/a/39034036/4688612
|
42 |
-
public function get_brand_name( $product_id ) {
|
43 |
-
|
44 |
-
$brand_taxonomy = 'pa_brand';
|
45 |
-
|
46 |
-
if (Environment_Check::get_instance()->is_yith_wc_brands_active()) {
|
47 |
-
$brand_taxonomy = 'yith_product_brand';
|
48 |
-
} elseif (Environment_Check::get_instance()->is_woocommerce_brands_active()) {
|
49 |
-
$brand_taxonomy = 'product_brand';
|
50 |
-
}
|
51 |
-
|
52 |
-
$brand_taxonomy = apply_filters_deprecated('wooptpm_custom_brand_taxonomy', [$brand_taxonomy], '1.13.0', 'wpm_custom_brand_taxonomy');
|
53 |
-
|
54 |
-
// Use custom brand_taxonomy
|
55 |
-
$brand_taxonomy = apply_filters('wpm_custom_brand_taxonomy', $brand_taxonomy);
|
56 |
-
|
57 |
-
if ($this->get_brand_by_taxonomy($product_id, $brand_taxonomy)) {
|
58 |
-
return $this->get_brand_by_taxonomy($product_id, $brand_taxonomy);
|
59 |
-
} elseif ($this->get_brand_by_taxonomy($product_id, 'pa_' . $brand_taxonomy)) {
|
60 |
-
return $this->get_brand_by_taxonomy($product_id, 'pa_' . $brand_taxonomy);
|
61 |
-
} else {
|
62 |
-
return '';
|
63 |
-
}
|
64 |
-
}
|
65 |
-
|
66 |
-
public function get_brand_by_taxonomy( $product_id, $taxonomy ) {
|
67 |
-
|
68 |
-
if (taxonomy_exists($taxonomy)) {
|
69 |
-
$brand_names = wp_get_post_terms($product_id, $taxonomy, ['fields' => 'names']);
|
70 |
-
return reset($brand_names);
|
71 |
-
} else {
|
72 |
-
return '';
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
// get an array with all product categories
|
77 |
-
public function get_product_category( $product_id ) {
|
78 |
-
|
79 |
-
/**
|
80 |
-
* On some installs the categories don't sync down to the variations.
|
81 |
-
* Therefore, we get the categories from the parent product.
|
82 |
-
*/
|
83 |
-
if ('variation' === wc_get_product($product_id)->get_type()) {
|
84 |
-
$product_id = wc_get_product($product_id)->get_parent_id();
|
85 |
-
}
|
86 |
-
|
87 |
-
$prod_cats = get_the_terms($product_id, 'product_cat');
|
88 |
-
$prod_cats_output = [];
|
89 |
-
|
90 |
-
// only continue with the loop if one or more product categories have been set for the product
|
91 |
-
if (!empty($prod_cats)) {
|
92 |
-
|
93 |
-
foreach ((array) $prod_cats as $key) {
|
94 |
-
$prod_cats_output[] = $key->name;
|
95 |
-
}
|
96 |
-
|
97 |
-
// apply filter to the $prod_cats_output array
|
98 |
-
$prod_cats_output = apply_filters_deprecated('wgact_filter', [$prod_cats_output], '1.10.2', '', 'This filter has been deprecated without replacement.');
|
99 |
-
}
|
100 |
-
|
101 |
-
return $prod_cats_output;
|
102 |
-
}
|
103 |
-
|
104 |
-
protected function is_variable_product_by_id( $product_id ) {
|
105 |
-
|
106 |
-
$product = wc_get_product($product_id);
|
107 |
-
|
108 |
-
return $product->get_type() === 'variable';
|
109 |
-
}
|
110 |
-
|
111 |
-
protected function get_compiled_product_id( $product_id, $product_sku, $options, $channel = '' ) {
|
112 |
-
|
113 |
-
// depending on setting use product IDs or SKUs
|
114 |
-
if (0 == $this->options['google']['ads']['product_identifier'] || 'ga_ua' === $channel || 'ga_4' === $channel) {
|
115 |
-
return (string) $product_id;
|
116 |
-
} else {
|
117 |
-
if (1 == $this->options['google']['ads']['product_identifier']) {
|
118 |
-
return (string) 'woocommerce_gpf_' . $product_id;
|
119 |
-
} else {
|
120 |
-
if ($product_sku) {
|
121 |
-
return (string) $product_sku;
|
122 |
-
} else {
|
123 |
-
return (string) $product_id;
|
124 |
-
}
|
125 |
-
}
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
protected function get_dyn_r_ids( $product ) {
|
130 |
-
|
131 |
-
$dyn_r_ids = [
|
132 |
-
'post_id' => (string) $product->get_id(),
|
133 |
-
'sku' => (string) $product->get_sku() ? $product->get_sku() : $product->get_id(),
|
134 |
-
'gpf' => 'woocommerce_gpf_' . $product->get_id(),
|
135 |
-
'gla' => 'gla_' . $product->get_id(),
|
136 |
-
];
|
137 |
-
|
138 |
-
// if you want to add a custom dyn_r_id for each product
|
139 |
-
$dyn_r_ids = apply_filters_deprecated('wooptpm_product_ids', [$dyn_r_ids, $product], '1.13.0', 'wpm_product_ids');
|
140 |
-
return apply_filters('wpm_product_ids', $dyn_r_ids, $product);
|
141 |
-
}
|
142 |
-
|
143 |
-
protected function log_problematic_product_id( $product_id = 0 ) {
|
144 |
-
|
145 |
-
wc_get_logger()->debug(
|
146 |
-
'WooCommerce detects the page ID ' . $product_id . ' as product, but when invoked by wc_get_product( ' . $product_id . ' ) it returns no product object',
|
147 |
-
['source' => 'wpm']
|
148 |
-
);
|
149 |
-
}
|
150 |
-
|
151 |
-
protected function log_problematic_product( $product ) {
|
152 |
-
|
153 |
-
wc_get_logger()->debug(
|
154 |
-
'WooCommerce detects the following product as product , but when invoked by wc_get_product( ' . $product_id . ' ) it returns no product object',
|
155 |
-
['source' => 'wpm']
|
156 |
-
);
|
157 |
-
}
|
158 |
-
|
159 |
-
protected function get_order_item_ids( $order ) {
|
160 |
-
|
161 |
-
$order_items = $this->wpm_get_order_items($order);
|
162 |
-
$order_items_array = [];
|
163 |
-
|
164 |
-
foreach ((array) $order_items as $order_item) {
|
165 |
-
|
166 |
-
$product_id = $this->get_variation_or_product_id($order_item->get_data(), $this->options_obj->general->variations_output);
|
167 |
-
|
168 |
-
$product = wc_get_product($product_id);
|
169 |
-
|
170 |
-
// only continue if WC retrieves a valid product
|
171 |
-
if (is_object($product)) {
|
172 |
-
|
173 |
-
$dyn_r_ids = $this->get_dyn_r_ids($product);
|
174 |
-
$product_id_compiled = $dyn_r_ids[$this->get_dyn_r_id_type()];
|
175 |
-
$order_items_array[] = $product_id_compiled;
|
176 |
-
} else {
|
177 |
-
|
178 |
-
$this->log_problematic_product_id($product_id);
|
179 |
-
}
|
180 |
-
}
|
181 |
-
|
182 |
-
return $order_items_array;
|
183 |
-
}
|
184 |
-
|
185 |
-
protected function get_order_items_formatted_for_purchase_event( $order ) {
|
186 |
-
|
187 |
-
$order_items = $this->wpm_get_order_items($order);
|
188 |
-
$order_items_formatted = [];
|
189 |
-
|
190 |
-
foreach ((array) $order_items as $order_item) {
|
191 |
-
|
192 |
-
$product_id = $this->get_variation_or_product_id($order_item->get_data(), $this->options_obj->general->variations_output);
|
193 |
-
|
194 |
-
$product = wc_get_product($product_id);
|
195 |
-
$product_details = [];
|
196 |
-
|
197 |
-
// only continue if WC retrieves a valid product
|
198 |
-
if (is_object($product)) {
|
199 |
-
|
200 |
-
$dyn_r_ids = $this->get_dyn_r_ids($product);
|
201 |
-
$product_id_compiled = $dyn_r_ids[$this->get_dyn_r_id_type()];
|
202 |
-
|
203 |
-
$product_details['id'] = $product_id_compiled;
|
204 |
-
$product_details['name'] = $product->get_name();
|
205 |
-
$product_details['quantity'] = $order_item->get_quantity();
|
206 |
-
$product_details['price'] = $product->get_price();
|
207 |
-
$product_details['brand'] = $this->get_brand_name($product_id);
|
208 |
-
$product_details['category'] = implode(',', $this->get_product_category($product_id));
|
209 |
-
|
210 |
-
if ($product->is_type('variation')) {
|
211 |
-
$product_details['variant'] = $this->get_formatted_variant_text($product);
|
212 |
-
|
213 |
-
$parent_product = wc_get_product($product->get_parent_id());
|
214 |
-
|
215 |
-
$dyn_r_ids_parent = $this->get_dyn_r_ids($parent_product);
|
216 |
-
$parent_product_id_compiled = $dyn_r_ids_parent[$this->get_dyn_r_id_type()];
|
217 |
-
$product_details['parent_id'] = $parent_product_id_compiled;
|
218 |
-
$product_details['brand'] = $this->get_brand_name($parent_product->get_id());
|
219 |
-
}
|
220 |
-
|
221 |
-
$order_items_formatted[] = $product_details;
|
222 |
-
} else {
|
223 |
-
|
224 |
-
$this->log_problematic_product_id($product_id);
|
225 |
-
}
|
226 |
-
}
|
227 |
-
|
228 |
-
return $order_items_formatted;
|
229 |
-
}
|
230 |
-
|
231 |
-
protected function get_dyn_r_id_type( $pixel_name = null ) {
|
232 |
-
|
233 |
-
if ($pixel_name) {
|
234 |
-
$this->pixel_name = $pixel_name;
|
235 |
-
}
|
236 |
-
|
237 |
-
if (0 == $this->options_obj->google->ads->product_identifier) {
|
238 |
-
$this->dyn_r_id_type = 'post_id';
|
239 |
-
} elseif (1 == $this->options_obj->google->ads->product_identifier) {
|
240 |
-
$this->dyn_r_id_type = 'gpf';
|
241 |
-
} elseif (2 == $this->options_obj->google->ads->product_identifier) {
|
242 |
-
$this->dyn_r_id_type = 'sku';
|
243 |
-
} elseif (3 == $this->options_obj->google->ads->product_identifier) {
|
244 |
-
$this->dyn_r_id_type = 'gla';
|
245 |
-
}
|
246 |
-
|
247 |
-
// If you want to change the dyn_r_id type programmatically
|
248 |
-
$this->dyn_r_id_type = apply_filters_deprecated('wooptpm_product_id_type_for_' . $this->pixel_name, [$this->dyn_r_id_type], '1.13.0', 'wpm_product_id_type_for_');
|
249 |
-
$this->dyn_r_id_type = apply_filters('wpm_product_id_type_for_' . $this->pixel_name, $this->dyn_r_id_type);
|
250 |
-
|
251 |
-
return $this->dyn_r_id_type;
|
252 |
-
}
|
253 |
-
|
254 |
-
protected function wpm_get_order_items( $order ) {
|
255 |
-
|
256 |
-
$order_items = apply_filters_deprecated('wooptpm_order_items', [$order->get_items(), $order], '1.13.0', 'wpm_order_items');
|
257 |
-
|
258 |
-
// Give option to filter order items
|
259 |
-
// then return
|
260 |
-
return apply_filters('wpm_order_items', $order_items, $order);
|
261 |
-
}
|
262 |
-
|
263 |
-
protected function get_front_end_order_items( $order ) {
|
264 |
-
|
265 |
-
$order_items = $this->wpm_get_order_items($order);
|
266 |
-
$order_items_formatted = [];
|
267 |
-
|
268 |
-
foreach ((array) $order_items as $order_item) {
|
269 |
-
|
270 |
-
$order_item_data = $order_item->get_data();
|
271 |
-
|
272 |
-
$product = $order_item->get_product();
|
273 |
-
|
274 |
-
if (!is_object($product)) {
|
275 |
-
|
276 |
-
wc_get_logger()->debug('get_order_item_data received an order item which is not a valid product: ' . $order_item->get_id(), ['source' => 'wpm']);
|
277 |
-
return [];
|
278 |
-
}
|
279 |
-
|
280 |
-
$order_items_formatted[$order_item_data['product_id']] = [
|
281 |
-
'id' => $order_item_data['product_id'],
|
282 |
-
'variation_id' => $order_item_data['variation_id'],
|
283 |
-
'name' => $order_item_data['name'],
|
284 |
-
'quantity' => $order_item_data['quantity'],
|
285 |
-
'price' => ( new Google($this->options) )->wpm_get_order_item_price($order_item),
|
286 |
-
'subtotal' => (float) wc_format_decimal($order_item_data['subtotal'], 2),
|
287 |
-
'subtotal_tax' => (float) wc_format_decimal($order_item_data['subtotal_tax'], 2),
|
288 |
-
'total' => (float) wc_format_decimal($order_item_data['total'], 2),
|
289 |
-
'total_tax' => (float) wc_format_decimal($order_item_data['total_tax'], 2),
|
290 |
-
];
|
291 |
-
}
|
292 |
-
|
293 |
-
return $order_items_formatted;
|
294 |
-
}
|
295 |
-
|
296 |
-
public function buffer_get_product_data_layer_script( $product, $set_position = true, $meta_tag = false ) {
|
297 |
-
|
298 |
-
ob_start();
|
299 |
-
|
300 |
-
$this->get_product_data_layer_script($product, $set_position = true, $meta_tag = false);
|
301 |
-
|
302 |
-
return ob_get_clean();
|
303 |
-
}
|
304 |
-
|
305 |
-
public function get_product_data_layer_script( $product, $set_position = true, $meta_tag = false ) {
|
306 |
-
|
307 |
-
if (!is_object($product)) {
|
308 |
-
wc_get_logger()->debug('get_product_data_layer_script received an invalid product', ['source' => 'wpm']);
|
309 |
-
return '';
|
310 |
-
}
|
311 |
-
|
312 |
-
$data = $this->get_product_details_for_datalayer($product);
|
313 |
-
|
314 |
-
// If placed in <head> it must be a <meta> tag else, it can be an <input> tag
|
315 |
-
// Added name and content to meta in order to pass W3 validation test at https://validator.w3.org/nu/
|
316 |
-
$tag = $meta_tag ? "meta name='wpm-dataLayer-meta' content='" . $product->get_id() . "'" : "input type='hidden'";
|
317 |
-
|
318 |
-
$this->get_product_data_layer_script_html_part_1($tag, $product, $data, $set_position, $meta_tag);
|
319 |
-
}
|
320 |
-
|
321 |
-
protected function get_product_data_layer_script_html_part_1( $tag, $product, $data, $set_position, $meta_tag ) {
|
322 |
-
|
323 |
-
if ($meta_tag) {
|
324 |
-
?>
|
325 |
-
<meta name="pm-dataLayer-meta" content="<?php esc_html_e($product->get_id()); ?>" class="wpmProductId"
|
326 |
-
data-id="<?php esc_html_e($product->get_id()); ?>">
|
327 |
-
<?php
|
328 |
-
} else {
|
329 |
-
?>
|
330 |
-
<input type="hidden" class="wpmProductId" data-id="<?php esc_html_e($product->get_id()); ?>">
|
331 |
-
<?php
|
332 |
-
}
|
333 |
-
|
334 |
-
?>
|
335 |
-
<script>
|
336 |
-
(window.wpmDataLayer = window.wpmDataLayer || {}).products = window.wpmDataLayer.products || {}
|
337 |
-
window.wpmDataLayer.products[<?php esc_html_e($product->get_id()); ?>] = <?php echo wp_json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); ?>;
|
338 |
-
<?php $set_position ? $this->get_product_data_layer_script_html_part_2($product) : ''; ?>
|
339 |
-
</script>
|
340 |
-
<?php
|
341 |
-
}
|
342 |
-
|
343 |
-
protected function get_product_data_layer_script_html_part_2( $product ) {
|
344 |
-
?>
|
345 |
-
window.wpmDataLayer.products[<?php esc_html_e($product->get_id()); ?>]['position'] = window.wpmDataLayer.position++
|
346 |
-
<?php
|
347 |
-
}
|
348 |
-
|
349 |
-
protected function pmw_output_product_prices_with_tax() {
|
350 |
-
|
351 |
-
// Output the product prices with tax as default
|
352 |
-
// otherwise, output the prices without tax
|
353 |
-
return apply_filters('pmw_output_product_prices_with_tax', true);
|
354 |
-
}
|
355 |
-
|
356 |
-
public function get_product_details_for_datalayer( $product ) {
|
357 |
-
|
358 |
-
global $woocommerce_wpml;
|
359 |
-
|
360 |
-
$dyn_r_ids = $this->get_dyn_r_ids($product);
|
361 |
-
|
362 |
-
// Output the product prices with tax as default
|
363 |
-
// otherwise, output the prices without tax
|
364 |
-
$use_price_with_tax = $this->pmw_output_product_prices_with_tax();
|
365 |
-
|
366 |
-
if (Environment_Check::get_instance()->is_wpml_woocommerce_multi_currency_active()) {
|
367 |
-
// https://github.com/wp-premium/woocommerce-multilingual/blob/134e1a789622341e8de7690b955b25ea8d8f7cfc/inc/currencies/class-wcml-multi-currency-prices.php#L158
|
368 |
-
$price = $woocommerce_wpml->multi_currency->prices->get_product_price_in_currency($product->get_id(), get_woocommerce_currency());
|
369 |
-
|
370 |
-
if ($use_price_with_tax) {
|
371 |
-
|
372 |
-
if (floatval(wc_get_price_excluding_tax($product)) !== 0.0) {
|
373 |
-
$price = ( $price / wc_get_price_excluding_tax($product) ) * wc_get_price_including_tax($product);
|
374 |
-
} else {
|
375 |
-
$price = 0;
|
376 |
-
}
|
377 |
-
}
|
378 |
-
} else {
|
379 |
-
// https://stackoverflow.com/a/37231033/4688612
|
380 |
-
if ($use_price_with_tax) {
|
381 |
-
$price = wc_get_price_including_tax($product);
|
382 |
-
} else {
|
383 |
-
$price = wc_get_price_excluding_tax($product);
|
384 |
-
}
|
385 |
-
}
|
386 |
-
|
387 |
-
$product_details = [
|
388 |
-
'id' => (string) $product->get_id(),
|
389 |
-
'sku' => (string) $product->get_sku(),
|
390 |
-
'price' => (float) wc_format_decimal($price, 2),
|
391 |
-
'brand' => $this->get_brand_name($product->get_id()),
|
392 |
-
'quantity' => 1,
|
393 |
-
'dyn_r_ids' => $dyn_r_ids,
|
394 |
-
'isVariable' => $product->get_type() === 'variable',
|
395 |
-
];
|
396 |
-
|
397 |
-
if ($product->get_type() === 'variation') { // In case the product is a variation
|
398 |
-
|
399 |
-
$parent_product = wc_get_product($product->get_parent_id());
|
400 |
-
|
401 |
-
if ($parent_product) {
|
402 |
-
|
403 |
-
$product_details['name'] = Helpers::clean_product_name_for_output($parent_product->get_name());
|
404 |
-
$product_details['parentId_dyn_r_ids'] = $this->get_dyn_r_ids($parent_product);
|
405 |
-
$product_details['parentId'] = $parent_product->get_id();
|
406 |
-
$product_details['brand'] = $this->get_brand_name($parent_product->get_id());
|
407 |
-
} else {
|
408 |
-
|
409 |
-
wc_get_logger()->debug('Variation ' . $product->get_id() . ' doesn\'t link to a valid parent product.', ['source' => 'wpm']);
|
410 |
-
}
|
411 |
-
|
412 |
-
$product_details['variant'] = $this->get_formatted_variant_text($product);
|
413 |
-
$product_details['category'] = $this->get_product_category($product->get_parent_id());
|
414 |
-
$product_details['isVariation'] = true;
|
415 |
-
} else { // It's not a variation, so get the fields for a regular product
|
416 |
-
|
417 |
-
$product_details['name'] = Helpers::clean_product_name_for_output((string) $product->get_name());
|
418 |
-
$product_details['category'] = $this->get_product_category($product->get_id());
|
419 |
-
$product_details['isVariation'] = false;
|
420 |
-
}
|
421 |
-
|
422 |
-
return $product_details;
|
423 |
-
}
|
424 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/pixels/trait-shop.php
DELETED
@@ -1,587 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace WCPM\Classes\Pixels;
|
4 |
-
|
5 |
-
use libphonenumber\NumberParseException ;
|
6 |
-
use libphonenumber\PhoneNumberFormat ;
|
7 |
-
use libphonenumber\PhoneNumberUtil ;
|
8 |
-
use WC_Geolocation ;
|
9 |
-
use WCPM\Classes\Admin\Documentation ;
|
10 |
-
use WCPM\Classes\Admin\Environment_Check ;
|
11 |
-
use WCPM\Classes\Helpers ;
|
12 |
-
use WCPM\Classes\Profit_Margin ;
|
13 |
-
|
14 |
-
if ( !defined( 'ABSPATH' ) ) {
|
15 |
-
exit;
|
16 |
-
// Exit if accessed directly
|
17 |
-
}
|
18 |
-
|
19 |
-
trait Trait_Shop
|
20 |
-
{
|
21 |
-
protected $clv_orders_by_billing_email = null ;
|
22 |
-
protected function get_list_name_suffix()
|
23 |
-
{
|
24 |
-
$list_suffix = '';
|
25 |
-
|
26 |
-
if ( is_product_category() ) {
|
27 |
-
$category = get_queried_object();
|
28 |
-
$list_suffix = ' | ' . wp_specialchars_decode( $category->name );
|
29 |
-
$list_suffix = $this->add_parent_category_name( $category, $list_suffix );
|
30 |
-
} else {
|
31 |
-
|
32 |
-
if ( is_product_tag() ) {
|
33 |
-
$tag = get_queried_object();
|
34 |
-
$list_suffix = ' | ' . wp_specialchars_decode( $tag->name );
|
35 |
-
}
|
36 |
-
|
37 |
-
}
|
38 |
-
|
39 |
-
return $list_suffix;
|
40 |
-
}
|
41 |
-
|
42 |
-
protected function add_parent_category_name( $category, $list_suffix )
|
43 |
-
{
|
44 |
-
|
45 |
-
if ( $category->parent > 0 ) {
|
46 |
-
$parent_category = get_term_by( 'id', $category->parent, 'product_cat' );
|
47 |
-
$list_suffix = ' | ' . wp_specialchars_decode( $parent_category->name ) . $list_suffix;
|
48 |
-
$list_suffix = $this->add_parent_category_name( $parent_category, $list_suffix );
|
49 |
-
}
|
50 |
-
|
51 |
-
return $list_suffix;
|
52 |
-
}
|
53 |
-
|
54 |
-
protected function get_list_id_suffix()
|
55 |
-
{
|
56 |
-
$list_suffix = '';
|
57 |
-
|
58 |
-
if ( is_product_category() ) {
|
59 |
-
$category = get_queried_object();
|
60 |
-
$list_suffix = '.' . $category->slug;
|
61 |
-
$list_suffix = $this->add_parent_category_id( $category, $list_suffix );
|
62 |
-
} else {
|
63 |
-
|
64 |
-
if ( is_product_tag() ) {
|
65 |
-
$tag = get_queried_object();
|
66 |
-
$list_suffix = '.' . $tag->slug;
|
67 |
-
}
|
68 |
-
|
69 |
-
}
|
70 |
-
|
71 |
-
return $list_suffix;
|
72 |
-
}
|
73 |
-
|
74 |
-
protected function add_parent_category_id( $category, $list_suffix )
|
75 |
-
{
|
76 |
-
|
77 |
-
if ( $category->parent > 0 ) {
|
78 |
-
$parent_category = get_term_by( 'id', $category->parent, 'product_cat' );
|
79 |
-
$list_suffix = '.' . $parent_category->slug . $list_suffix;
|
80 |
-
$list_suffix = $this->add_parent_category_id( $parent_category, $list_suffix );
|
81 |
-
}
|
82 |
-
|
83 |
-
return $list_suffix;
|
84 |
-
}
|
85 |
-
|
86 |
-
protected function is_valid_order_key_in_url()
|
87 |
-
{
|
88 |
-
$_get = Helpers::get_input_vars( INPUT_GET );
|
89 |
-
$order_key = null;
|
90 |
-
// key is for WooCommerce
|
91 |
-
// wcf-key is for CartFlows
|
92 |
-
|
93 |
-
if ( isset( $_get['key'] ) ) {
|
94 |
-
$order_key = $_get['key'];
|
95 |
-
// for WooCommerce
|
96 |
-
} elseif ( isset( $_get['wcf-key'] ) ) {
|
97 |
-
$order_key = $_get['wcf-key'];
|
98 |
-
// for CartFlows
|
99 |
-
}
|
100 |
-
|
101 |
-
|
102 |
-
if ( $order_key && wc_get_order_id_by_order_key( $order_key ) ) {
|
103 |
-
return true;
|
104 |
-
} else {
|
105 |
-
return false;
|
106 |
-
}
|
107 |
-
|
108 |
-
}
|
109 |
-
|
110 |
-
protected function wpm_get_order_total( $order )
|
111 |
-
{
|
112 |
-
$order_total = $order->get_total();
|
113 |
-
|
114 |
-
if ( in_array( $this->options_obj->shop->order_total_logic, [ '0', 'order_subtotal' ], true ) ) {
|
115 |
-
$order_total = $order->get_subtotal() - $order->get_total_discount();
|
116 |
-
} elseif ( in_array( $this->options_obj->shop->order_total_logic, [ '1', 'order_total' ], true ) ) {
|
117 |
-
$order_total = $order->get_total();
|
118 |
-
} elseif ( in_array( $this->options_obj->shop->order_total_logic, [ '2', 'order_profit_margin' ], true ) ) {
|
119 |
-
$order_total = Profit_Margin::get_order_profit_margin( $order );
|
120 |
-
}
|
121 |
-
|
122 |
-
// deprecated filters to adjust the order value
|
123 |
-
$order_total = apply_filters_deprecated(
|
124 |
-
'wgact_conversion_value_filter',
|
125 |
-
[ $order_total, $order ],
|
126 |
-
'1.10.2',
|
127 |
-
'wooptpm_conversion_value_filter'
|
128 |
-
);
|
129 |
-
$order_total = apply_filters_deprecated(
|
130 |
-
'wooptpm_conversion_value_filter',
|
131 |
-
[ $order_total, $order ],
|
132 |
-
'1.13.0',
|
133 |
-
'wpm_conversion_value_filter'
|
134 |
-
);
|
135 |
-
// filter to adjust the order value
|
136 |
-
$order_total = apply_filters( 'wpm_conversion_value_filter', $order_total, $order );
|
137 |
-
return wc_format_decimal( (double) $order_total, 2 );
|
138 |
-
}
|
139 |
-
|
140 |
-
protected function get_order_from_query_vars()
|
141 |
-
{
|
142 |
-
global $wp ;
|
143 |
-
if ( !isset( $wp->query_vars['order-received'] ) ) {
|
144 |
-
return false;
|
145 |
-
}
|
146 |
-
$order_id = absint( $wp->query_vars['order-received'] );
|
147 |
-
|
148 |
-
if ( $order_id && 0 != $order_id && wc_get_order( $order_id ) ) {
|
149 |
-
return wc_get_order( $order_id );
|
150 |
-
} else {
|
151 |
-
wc_get_logger()->debug( 'WooCommerce couldn\'t retrieve the order ID from $wp->query_vars[\'order-received\']', [
|
152 |
-
'source' => 'wpm',
|
153 |
-
] );
|
154 |
-
wc_get_logger()->debug( print_r( $wp->query_vars, true ), [
|
155 |
-
'source' => 'wpm',
|
156 |
-
] );
|
157 |
-
return false;
|
158 |
-
}
|
159 |
-
|
160 |
-
}
|
161 |
-
|
162 |
-
protected function get_order_with_url_order_key()
|
163 |
-
{
|
164 |
-
$_get = Helpers::get_input_vars( INPUT_GET );
|
165 |
-
// key is for WooCommerce
|
166 |
-
// wcf-key is for CartFlows
|
167 |
-
|
168 |
-
if ( isset( $_get['key'] ) || isset( $_get['wcf-key'] ) ) {
|
169 |
-
|
170 |
-
if ( isset( $_get['key'] ) ) {
|
171 |
-
$order_key = $_get['key'];
|
172 |
-
// for WooCommerce keys
|
173 |
-
} else {
|
174 |
-
$order_key = $_get['wcf-key'];
|
175 |
-
// for CartFlows keys
|
176 |
-
}
|
177 |
-
|
178 |
-
wc_get_logger()->debug( 'URL order key: ' . $order_key, [
|
179 |
-
'source' => 'wpm',
|
180 |
-
] );
|
181 |
-
return wc_get_order( wc_get_order_id_by_order_key( $order_key ) );
|
182 |
-
} else {
|
183 |
-
wc_get_logger()->debug( 'WooCommerce couldn\'t retrieve the order ID from order key in the URL', [
|
184 |
-
'source' => 'wpm',
|
185 |
-
] );
|
186 |
-
return false;
|
187 |
-
}
|
188 |
-
|
189 |
-
}
|
190 |
-
|
191 |
-
protected function get_order_currency( $order )
|
192 |
-
{
|
193 |
-
// use the right function to get the currency depending on the WooCommerce version
|
194 |
-
return ( $this->woocommerce_3_and_above() ? $order->get_currency() : $order->get_order_currency() );
|
195 |
-
}
|
196 |
-
|
197 |
-
protected function woocommerce_3_and_above()
|
198 |
-
{
|
199 |
-
global $woocommerce ;
|
200 |
-
|
201 |
-
if ( version_compare( $woocommerce->version, 3.0, '>=' ) ) {
|
202 |
-
return true;
|
203 |
-
} else {
|
204 |
-
return false;
|
205 |
-
}
|
206 |
-
|
207 |
-
}
|
208 |
-
|
209 |
-
/**
|
210 |
-
* Don't count in the current order
|
211 |
-
* https://stackoverflow.com/a/46216073/4688612
|
212 |
-
* https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query#description
|
213 |
-
*/
|
214 |
-
protected function is_existing_customer( $order )
|
215 |
-
{
|
216 |
-
$query_arguments = [
|
217 |
-
'return' => 'ids',
|
218 |
-
'exclude' => [ $order->get_id() ],
|
219 |
-
'post_status' => wc_get_is_paid_statuses(),
|
220 |
-
'limit' => 1,
|
221 |
-
];
|
222 |
-
|
223 |
-
if ( is_user_logged_in() ) {
|
224 |
-
$current_user = wp_get_current_user();
|
225 |
-
$query_arguments['customer'] = sanitize_email( $current_user->user_email );
|
226 |
-
} else {
|
227 |
-
$query_arguments['billing_email'] = sanitize_email( $order->get_billing_email() );
|
228 |
-
}
|
229 |
-
|
230 |
-
$orders = wc_get_orders( $query_arguments );
|
231 |
-
return count( $orders ) > 0;
|
232 |
-
}
|
233 |
-
|
234 |
-
protected function is_new_customer( $order )
|
235 |
-
{
|
236 |
-
return !$this->is_existing_customer( $order );
|
237 |
-
}
|
238 |
-
|
239 |
-
// https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query
|
240 |
-
// https://github.com/woocommerce/woocommerce/blob/5d7f6acbcb387f1d51d51305bf949d07fa3c4b08/includes/data-stores/class-wc-customer-data-store.php#L401
|
241 |
-
protected function get_clv_order_total_by_billing_email( $billing_email )
|
242 |
-
{
|
243 |
-
$orders = $this->get_all_paid_orders_by_billing_email( $billing_email );
|
244 |
-
$value = 0;
|
245 |
-
foreach ( $orders as $order ) {
|
246 |
-
$value += $order->get_total();
|
247 |
-
}
|
248 |
-
return wc_format_decimal( $value, 2 );
|
249 |
-
}
|
250 |
-
|
251 |
-
protected function get_clv_value_filtered_by_billing_email( $billing_email )
|
252 |
-
{
|
253 |
-
$orders = $this->get_all_paid_orders_by_billing_email( $billing_email );
|
254 |
-
$value = 0;
|
255 |
-
foreach ( $orders as $order ) {
|
256 |
-
$value += (double) $this->wpm_get_order_total( $order );
|
257 |
-
}
|
258 |
-
return wc_format_decimal( $value, 2 );
|
259 |
-
}
|
260 |
-
|
261 |
-
protected function get_all_paid_orders_by_billing_email( $billing_email )
|
262 |
-
{
|
263 |
-
|
264 |
-
if ( $this->clv_orders_by_billing_email ) {
|
265 |
-
return $this->clv_orders_by_billing_email;
|
266 |
-
} else {
|
267 |
-
$orders = wc_get_orders( [
|
268 |
-
'billing_email' => sanitize_email( $billing_email ),
|
269 |
-
'post_status' => wc_get_is_paid_statuses(),
|
270 |
-
'limit' => -1,
|
271 |
-
] );
|
272 |
-
$this->clv_orders_by_billing_email = $orders;
|
273 |
-
return $orders;
|
274 |
-
}
|
275 |
-
|
276 |
-
}
|
277 |
-
|
278 |
-
protected function can_clv_query_be_run( $billing_email )
|
279 |
-
{
|
280 |
-
// Abort if is not a valid email
|
281 |
-
if ( !Helpers::is_email( $billing_email ) ) {
|
282 |
-
return false;
|
283 |
-
}
|
284 |
-
// Abort if memory_limit is too low
|
285 |
-
if ( !Environment_Check::get_instance()->is_memory_limit_higher_than( '100M' ) ) {
|
286 |
-
return false;
|
287 |
-
}
|
288 |
-
// Abort if customer has too many orders
|
289 |
-
if ( $this->get_count_of_order_ids_by_billing_email( $billing_email ) > 1000 ) {
|
290 |
-
return false;
|
291 |
-
}
|
292 |
-
// Abort if the wc_get_orders query doesn't properly accept the 'billing_email' parameter
|
293 |
-
if ( $this->get_count_of_all_order_ids() === $this->get_count_of_order_ids_by_billing_email( $billing_email ) ) {
|
294 |
-
return false;
|
295 |
-
}
|
296 |
-
return true;
|
297 |
-
}
|
298 |
-
|
299 |
-
protected function get_all_order_ids_by_billing_email( $billing_email )
|
300 |
-
{
|
301 |
-
return wc_get_orders( [
|
302 |
-
'billing_email' => sanitize_email( $billing_email ),
|
303 |
-
'post_status' => wc_get_is_paid_statuses(),
|
304 |
-
'limit' => -1,
|
305 |
-
'return' => 'ids',
|
306 |
-
] );
|
307 |
-
}
|
308 |
-
|
309 |
-
protected function get_count_of_order_ids_by_billing_email( $billing_email )
|
310 |
-
{
|
311 |
-
return count( $this->get_all_order_ids_by_billing_email( $billing_email ) );
|
312 |
-
}
|
313 |
-
|
314 |
-
protected function get_all_order_ids()
|
315 |
-
{
|
316 |
-
return wc_get_orders( [
|
317 |
-
'post_status' => wc_get_is_paid_statuses(),
|
318 |
-
'limit' => -1,
|
319 |
-
'return' => 'ids',
|
320 |
-
] );
|
321 |
-
}
|
322 |
-
|
323 |
-
protected function get_count_of_all_order_ids()
|
324 |
-
{
|
325 |
-
return count( $this->get_all_order_ids() );
|
326 |
-
}
|
327 |
-
|
328 |
-
protected function get_user_ip()
|
329 |
-
{
|
330 |
-
|
331 |
-
if ( $this->is_localhost() ) {
|
332 |
-
$ip = WC_Geolocation::get_external_ip_address();
|
333 |
-
} else {
|
334 |
-
$ip = WC_Geolocation::get_ip_address();
|
335 |
-
}
|
336 |
-
|
337 |
-
// only set the IP if it is a public address
|
338 |
-
$ip = filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE );
|
339 |
-
// Remove the IPv6 to IPv4 mapping in case the IP contains one
|
340 |
-
// and return the IP plain public IPv4 or IPv6 IP
|
341 |
-
// https://en.wikipedia.org/wiki/IPv6_address
|
342 |
-
return str_replace( '::ffff:', '', $ip );
|
343 |
-
}
|
344 |
-
|
345 |
-
protected function get_visitor_country()
|
346 |
-
{
|
347 |
-
$location = WC_Geolocation::geolocate_ip( $this->get_user_ip() );
|
348 |
-
return $location['country'];
|
349 |
-
}
|
350 |
-
|
351 |
-
protected function is_localhost()
|
352 |
-
{
|
353 |
-
// If the IP is local, return true, else false
|
354 |
-
// https://stackoverflow.com/a/13818647/4688612
|
355 |
-
return !filter_var( WC_Geolocation::get_ip_address(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE );
|
356 |
-
}
|
357 |
-
|
358 |
-
private function get_e164_formatted_phone_number( $number, $country )
|
359 |
-
{
|
360 |
-
try {
|
361 |
-
$phone_util = PhoneNumberUtil::getInstance();
|
362 |
-
$number_parsed = $phone_util->parse( $number, $country );
|
363 |
-
return $phone_util->format( $number_parsed, PhoneNumberFormat::E164 );
|
364 |
-
} catch ( NumberParseException $e ) {
|
365 |
-
error_log( $e );
|
366 |
-
return $number;
|
367 |
-
}
|
368 |
-
}
|
369 |
-
|
370 |
-
protected function track_user( $user_id = null )
|
371 |
-
{
|
372 |
-
$user = null;
|
373 |
-
|
374 |
-
if ( 0 === $user_id ) {
|
375 |
-
// If anonymous visitor then track
|
376 |
-
return true;
|
377 |
-
} elseif ( $user_id && 0 <= $user_id ) {
|
378 |
-
// If user ID is known, get the user
|
379 |
-
$user = get_user_by( 'id', $user_id );
|
380 |
-
} elseif ( null === $user_id && is_user_logged_in() ) {
|
381 |
-
// If user id is not given, but the user is logged in, get the user
|
382 |
-
$user = wp_get_current_user();
|
383 |
-
}
|
384 |
-
|
385 |
-
// Find out if the user has a role that is restricted from tracking
|
386 |
-
if ( $user ) {
|
387 |
-
foreach ( $user->roles as $role ) {
|
388 |
-
if ( in_array( $role, $this->options_obj->shop->disable_tracking_for, true ) ) {
|
389 |
-
return false;
|
390 |
-
}
|
391 |
-
}
|
392 |
-
}
|
393 |
-
return true;
|
394 |
-
}
|
395 |
-
|
396 |
-
protected function do_not_track_user( $user_id = null )
|
397 |
-
{
|
398 |
-
return !$this->track_user( $user_id );
|
399 |
-
}
|
400 |
-
|
401 |
-
// https://wordpress.stackexchange.com/a/95440/68337
|
402 |
-
// https://wordpress.stackexchange.com/a/31435/68337
|
403 |
-
// https://developer.wordpress.org/reference/functions/get_the_title/
|
404 |
-
// https://codex.wordpress.org/Data_Validation#Output_Sanitation
|
405 |
-
// https://developer.wordpress.org/reference/functions/wp_specialchars_decode/
|
406 |
-
protected function wpm_get_the_title( $post = 0 )
|
407 |
-
{
|
408 |
-
$post = get_post( $post );
|
409 |
-
$title = ( isset( $post->post_title ) ? $post->post_title : '' );
|
410 |
-
return wp_specialchars_decode( $title );
|
411 |
-
}
|
412 |
-
|
413 |
-
protected function is_backend_manual_order( $order )
|
414 |
-
{
|
415 |
-
// Only continue if this is a back-end order
|
416 |
-
|
417 |
-
if ( $order->meta_exists( '_created_via' ) && 'admin' === $order->get_meta( '_created_via', true ) ) {
|
418 |
-
return true;
|
419 |
-
} else {
|
420 |
-
return false;
|
421 |
-
}
|
422 |
-
|
423 |
-
}
|
424 |
-
|
425 |
-
protected function is_backend_subscription_renewal_order( $order )
|
426 |
-
{
|
427 |
-
// Only continue if this is a back-end order
|
428 |
-
|
429 |
-
if ( $order->meta_exists( '_created_via' ) && 'subscription' === $order->get_meta( '_created_via', true ) ) {
|
430 |
-
return true;
|
431 |
-
} else {
|
432 |
-
return false;
|
433 |
-
}
|
434 |
-
|
435 |
-
}
|
436 |
-
|
437 |
-
protected function was_order_created_while_wpm_was_active( $order )
|
438 |
-
{
|
439 |
-
|
440 |
-
if ( $order->meta_exists( '_wpm_process_through_wpm' ) ) {
|
441 |
-
return true;
|
442 |
-
} else {
|
443 |
-
return false;
|
444 |
-
}
|
445 |
-
|
446 |
-
}
|
447 |
-
|
448 |
-
protected function was_order_created_while_wpm_premium_was_active( $order )
|
449 |
-
{
|
450 |
-
|
451 |
-
if ( $order->meta_exists( '_wpm_premium_active' ) ) {
|
452 |
-
return true;
|
453 |
-
} else {
|
454 |
-
return false;
|
455 |
-
}
|
456 |
-
|
457 |
-
}
|
458 |
-
|
459 |
-
protected function wpm_get_order_user_id( $order )
|
460 |
-
{
|
461 |
-
|
462 |
-
if ( $order->meta_exists( '_wpm_customer_user' ) ) {
|
463 |
-
return (int) $order->get_meta( '_wpm_customer_user', true );
|
464 |
-
} else {
|
465 |
-
return (int) $order->get_meta( '_customer_user', true );
|
466 |
-
}
|
467 |
-
|
468 |
-
}
|
469 |
-
|
470 |
-
protected function is_browser_on_shop()
|
471 |
-
{
|
472 |
-
$_server = Helpers::get_input_vars( INPUT_SERVER );
|
473 |
-
// error_log(print_r($_server, true));
|
474 |
-
// error_log(print_r($_server['HTTP_HOST'], true));
|
475 |
-
// error_log('get_site_url(): ' . parse_url(get_site_url(), PHP_URL_HOST));
|
476 |
-
// error_log('parse url https://www.exampel.com : ' . parse_url('https://www.exampel.com', PHP_URL_HOST));
|
477 |
-
// Servers like Siteground don't seem to always provide $_server['HTTP_HOST']
|
478 |
-
// In that case we need to pretend that we're on the same server
|
479 |
-
if ( !isset( $_server['HTTP_HOST'] ) ) {
|
480 |
-
return true;
|
481 |
-
}
|
482 |
-
|
483 |
-
if ( wp_parse_url( get_site_url(), PHP_URL_HOST ) === $_server['HTTP_HOST'] ) {
|
484 |
-
return true;
|
485 |
-
} else {
|
486 |
-
return false;
|
487 |
-
}
|
488 |
-
|
489 |
-
}
|
490 |
-
|
491 |
-
// https://stackoverflow.com/a/60199374/4688612
|
492 |
-
protected function is_iframe()
|
493 |
-
{
|
494 |
-
|
495 |
-
if ( isset( $_SERVER['HTTP_SEC_FETCH_DEST'] ) && 'iframe' === $_SERVER['HTTP_SEC_FETCH_DEST'] ) {
|
496 |
-
return true;
|
497 |
-
} else {
|
498 |
-
return false;
|
499 |
-
}
|
500 |
-
|
501 |
-
}
|
502 |
-
|
503 |
-
protected function can_order_confirmation_be_processed( $order )
|
504 |
-
{
|
505 |
-
$conversion_prevention = false;
|
506 |
-
$conversion_prevention = apply_filters_deprecated(
|
507 |
-
'wgact_conversion_prevention',
|
508 |
-
[ $conversion_prevention, $order ],
|
509 |
-
'1.10.2',
|
510 |
-
'wooptpm_conversion_prevention'
|
511 |
-
);
|
512 |
-
$conversion_prevention = apply_filters_deprecated(
|
513 |
-
'wooptpm_conversion_prevention',
|
514 |
-
[ $conversion_prevention, $order ],
|
515 |
-
'1.13.0',
|
516 |
-
'wpm_conversion_prevention'
|
517 |
-
);
|
518 |
-
$conversion_prevention = apply_filters( 'wpm_conversion_prevention', $conversion_prevention, $order );
|
519 |
-
|
520 |
-
if ( $this->is_nodedupe_parameter_set() || $this->is_order_confirmation_allowed_status( $order ) && $this->track_user() && false === $conversion_prevention && (!$this->options['shop']['order_deduplication'] || $this->has_conversion_pixel_already_fired( $order ) !== true) ) {
|
521 |
-
return true;
|
522 |
-
} else {
|
523 |
-
return false;
|
524 |
-
}
|
525 |
-
|
526 |
-
}
|
527 |
-
|
528 |
-
protected function is_order_confirmation_allowed_status( $order )
|
529 |
-
{
|
530 |
-
if ( $order->has_status( 'failed' ) || $order->has_status( 'cancelled' ) || $order->has_status( 'refunded' ) ) {
|
531 |
-
return false;
|
532 |
-
}
|
533 |
-
return true;
|
534 |
-
}
|
535 |
-
|
536 |
-
protected function is_order_confirmation_not_allowed_status( $order )
|
537 |
-
{
|
538 |
-
return !$this->is_order_confirmation_allowed_status( $order );
|
539 |
-
}
|
540 |
-
|
541 |
-
protected function has_conversion_pixel_already_fired( $order )
|
542 |
-
{
|
543 |
-
return false;
|
544 |
-
}
|
545 |
-
|
546 |
-
protected function is_nodedupe_parameter_set()
|
547 |
-
{
|
548 |
-
$_get = Helpers::get_input_vars( INPUT_GET );
|
549 |
-
|
550 |
-
if ( isset( $_get['nodedupe'] ) ) {
|
551 |
-
return true;
|
552 |
-
} else {
|
553 |
-
return false;
|
554 |
-
}
|
555 |
-
|
556 |
-
}
|
557 |
-
|
558 |
-
protected function conversion_pixels_already_fired_html()
|
559 |
-
{
|
560 |
-
?>
|
561 |
-
|
562 |
-
<!-- ----------------------------------------------------------------------------------------------------
|
563 |
-
The conversion pixels have not been fired. Possible reasons:
|
564 |
-
- The user role has been disabled for tracking.
|
565 |
-
- The order payment has failed.
|
566 |
-
- The pixels have already been fired. To prevent double counting, the pixels are only fired once.
|
567 |
-
|
568 |
-
If you want to test the order you have two options:
|
569 |
-
- Turn off order duplication prevention in the advanced settings
|
570 |
-
- Add the '&nodedupe' parameter to the order confirmation URL like this:
|
571 |
-
https://example.test/checkout/order-received/123/?key=wc_order_123abc&nodedupe
|
572 |
-
|
573 |
-
More info on testing: <?php
|
574 |
-
esc_html_e( ( new Documentation() )->get_link( 'test_order' ) );
|
575 |
-
?>
|
576 |
-
|
577 |
-
----------------------------------------------------------------------------------------------------
|
578 |
-
-->
|
579 |
-
<?php
|
580 |
-
}
|
581 |
-
|
582 |
-
private function get_percentage( $counter, $denominator )
|
583 |
-
{
|
584 |
-
return ( $denominator > 0 ? round( $counter / $denominator * 100 ) : 0 );
|
585 |
-
}
|
586 |
-
|
587 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/admin/edit-order.js
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
jQuery(function ($) {
|
2 |
-
|
3 |
-
// Get the data element order-id from the div with ID order-attribution-data
|
4 |
-
let orderId = $("#order-attribution-data").data("order-id")
|
5 |
-
|
6 |
-
// use fetch to post data to the server
|
7 |
-
fetch(pmwAdminApi.root + "pmw/v1/ga4/data-api/get-order-attribution-data/", {
|
8 |
-
method : "POST",
|
9 |
-
credentials: "same-origin",
|
10 |
-
headers : {
|
11 |
-
"Content-Type": "application/json",
|
12 |
-
"X-WP-Nonce" : pmwAdminApi.nonce,
|
13 |
-
},
|
14 |
-
body : JSON.stringify(orderId),
|
15 |
-
})
|
16 |
-
.then(response => response.json())
|
17 |
-
.then(async message => {
|
18 |
-
// If message.success is true, then we have data to display
|
19 |
-
if (message.success) {
|
20 |
-
$("#order-attribution-data").html(message.data)
|
21 |
-
} else {
|
22 |
-
// If message.success is false, then we have an error to display
|
23 |
-
// console.log(message)
|
24 |
-
$("#order-attribution-data").html(message.data)
|
25 |
-
}
|
26 |
-
})
|
27 |
-
})
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/public/wpm-public.p1.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
(()=>{var e={164:()=>{jQuery(document).on("wpmLoadPixels",(()=>{var e,t,a,o,r,n,i,l,d;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.pixel_id||null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.facebook)&&void 0!==n&&n.loaded||wpm.doesUrlContainPatterns(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.facebook)||void 0===d?void 0:d.exclusion_patterns)||wpm.canIFire("ads","facebook-ads")&&wpm.loadFacebookPixel()})),jQuery(document).on("wpmClientSideAddToCart",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","AddToCart",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideBeginCheckout",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","InitiateCheckout",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideAddToWishlist",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","AddToWishlist",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideViewItem",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","ViewContent",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideSearch",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","Search",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmLoadAlways",(()=>{try{var e,t,a;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.loaded)return;wpm.setFbUserData()}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideOrderReceivedPage",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","Purchase",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}}))},1:()=>{!function(e,t,a){let o;e.loadFacebookPixel=()=>{try{wpmDataLayer.pixels.facebook.loaded=!0,t=window,a=document,o="script",t.fbq||(r=t.fbq=function(){r.callMethod?r.callMethod.apply(r,arguments):r.queue.push(arguments)},t._fbq||(t._fbq=r),r.push=r,r.loaded=!0,r.version="2.0",r.queue=[],(n=a.createElement(o)).async=!0,n.src="https://connect.facebook.net/en_US/fbevents.js",(i=a.getElementsByTagName(o)[0]).parentNode.insertBefore(n,i));let l={};e.isFbpSet()&&e.isFbAdvancedMatchingEnabled()&&(l={...e.getUserIdentifiersForFb()}),fbq("init",wpmDataLayer.pixels.facebook.pixel_id,l),fbq("track","PageView")}catch(o){console.error(o)}var t,a,o,r,n,i},e.getUserIdentifiersForFb=()=>{var e,t,a,o,r,n,i,l,d,s,c,u,p,m,g,y,w,v,_,f,h,L,D,k,b,C,x,j,S,I,P,Q,E,O,T,A,F,V,U,R,G,q,M,N;let W={};return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.user)&&void 0!==t&&t.id&&(W.external_id=wpmDataLayer.user.id),null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.order)&&void 0!==o&&o.user_id&&(W.external_id=wpmDataLayer.order.user_id),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.user)&&void 0!==n&&null!==(i=n.facebook)&&void 0!==i&&i.email&&(W.em=wpmDataLayer.user.facebook.email),null!==(l=wpmDataLayer)&&void 0!==l&&null!==(d=l.order)&&void 0!==d&&d.billing_email_hashed&&(W.em=wpmDataLayer.order.billing_email_hashed),null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.facebook)&&void 0!==u&&u.first_name&&(W.fn=wpmDataLayer.user.facebook.first_name),null!==(p=wpmDataLayer)&&void 0!==p&&null!==(m=p.order)&&void 0!==m&&m.billing_first_name&&(W.fn=wpmDataLayer.order.billing_first_name.toLowerCase()),null!==(g=wpmDataLayer)&&void 0!==g&&null!==(y=g.user)&&void 0!==y&&null!==(w=y.facebook)&&void 0!==w&&w.last_name&&(W.ln=wpmDataLayer.user.facebook.last_name),null!==(v=wpmDataLayer)&&void 0!==v&&null!==(_=v.order)&&void 0!==_&&_.billing_last_name&&(W.ln=wpmDataLayer.order.billing_last_name.toLowerCase()),null!==(f=wpmDataLayer)&&void 0!==f&&null!==(h=f.user)&&void 0!==h&&null!==(L=h.facebook)&&void 0!==L&&L.phone&&(W.ph=wpmDataLayer.user.facebook.phone),null!==(D=wpmDataLayer)&&void 0!==D&&null!==(k=D.order)&&void 0!==k&&k.billing_phone&&(W.ph=wpmDataLayer.order.billing_phone.replace("+","")),null!==(b=wpmDataLayer)&&void 0!==b&&null!==(C=b.user)&&void 0!==C&&null!==(x=C.facebook)&&void 0!==x&&x.city&&(W.ct=wpmDataLayer.user.facebook.city),null!==(j=wpmDataLayer)&&void 0!==j&&null!==(S=j.order)&&void 0!==S&&S.billing_city&&(W.ct=wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g,"")),null!==(I=wpmDataLayer)&&void 0!==I&&null!==(P=I.user)&&void 0!==P&&null!==(Q=P.facebook)&&void 0!==Q&&Q.state&&(W.st=wpmDataLayer.user.facebook.state),null!==(E=wpmDataLayer)&&void 0!==E&&null!==(O=E.order)&&void 0!==O&&O.billing_state&&(W.st=wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/,"")),null!==(T=wpmDataLayer)&&void 0!==T&&null!==(A=T.user)&&void 0!==A&&null!==(F=A.facebook)&&void 0!==F&&F.postcode&&(W.zp=wpmDataLayer.user.facebook.postcode),null!==(V=wpmDataLayer)&&void 0!==V&&null!==(U=V.order)&&void 0!==U&&U.billing_postcode&&(W.zp=wpmDataLayer.order.billing_postcode),null!==(R=wpmDataLayer)&&void 0!==R&&null!==(G=R.user)&&void 0!==G&&null!==(q=G.facebook)&&void 0!==q&&q.country&&(W.country=wpmDataLayer.user.facebook.country),null!==(M=wpmDataLayer)&&void 0!==M&&null!==(N=M.order)&&void 0!==N&&N.billing_country&&(W.country=wpmDataLayer.order.billing_country.toLowerCase()),W},e.getFbRandomEventId=()=>(Math.random()+1).toString(36).substring(2),e.getFbUserData=()=>(o={...o,...e.getFbUserDataFromBrowser()},o),e.isFbAdvancedMatchingEnabled=()=>{var e,t,a;return!(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.advanced_matching)},e.setFbUserData=()=>{o=e.getFbUserDataFromBrowser()},e.getFbUserDataFromBrowser=()=>{let t={};var a,o;return e.getCookie("_fbp")&&e.isValidFbp(e.getCookie("_fbp"))&&(t.fbp=e.getCookie("_fbp")),e.getCookie("_fbc")&&e.isValidFbc(e.getCookie("_fbc"))&&(t.fbc=e.getCookie("_fbc")),e.isFbAdvancedMatchingEnabled()&&null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&(t.external_id=wpmDataLayer.user.id),navigator.userAgent&&(t.client_user_agent=navigator.userAgent),t},e.isFbpSet=()=>!!e.getCookie("_fbp"),e.isValidFbp=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.\d{8,20}$/).test(e),e.isValidFbc=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.[\da-zA-Z_-]{8,}/).test(e),e.fbGetProductDataForCapiEvent=e=>({content_type:"product",content_name:e.name,content_ids:[e.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]],value:parseFloat(e.quantity*e.price),currency:e.currency}),e.facebookContentIds=()=>{let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?e.push(String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])):e.push(String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))}return e},e.trackCustomFacebookEvent=function(t){let o=arguments.length>1&&arguments[1]!==a?arguments[1]:{};try{var r,n,i;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.facebook)||void 0===i||!i.loaded)return;let a=e.getFbRandomEventId();fbq("trackCustom",t,o,{eventID:a}),jQuery(document).trigger("wpmFbCapiEvent",{event_name:t,event_id:a,user_data:e.getFbUserData(),event_source_url:window.location.href,custom_data:o})}catch(e){console.error(e)}},e.fbGetContentIdsFromCart=()=>{let e=[];for(const t in wpmDataLayer.cart)e.push(wpmDataLayer.products[t].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]);return e}}(window.wpm=window.wpm||{},jQuery)},12:(e,t,a)=>{a(1),a(164)},165:()=>{jQuery(document).on("wpmViewItemList",(function(e,t){try{var a,o,r,n,i,l,d,s,c,u,p,m,g;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.google)||void 0===d||null===(s=d.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;if(null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.general)&&void 0!==p&&p.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;if(!t)return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.user)&&void 0!==g&&g.id&&(e.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","view_item_list",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmAddToCart",(function(e,t){try{var a,o,r,n,i,l,d,s,c,u,p;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.google)||void 0===d||null===(s=d.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:t.quantity*t.price,items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.user)&&void 0!==p&&p.id&&(e.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","add_to_cart",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmViewItem",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;try{var a,o,r,n,i,l,d,s,c,u,p;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.google)||void 0===d||null===(s=d.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers()};t&&(e.value=(t.quantity?t.quantity:1)*t.price,e.items=[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity?t.quantity:1,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]),null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.user)&&void 0!==p&&p.id&&(e.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","view_item",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmSearch",(function(){try{var e,t,a,o,r,n,i,l,d,s,c;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(l=i.ads)||void 0===l||null===(d=l.dynamic_remarketing)||void 0===d||!d.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let m=[];for(const[e,t]of Object.entries(wpmDataLayer.products)){var u,p;if(null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.general)&&void 0!==p&&p.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;m.push({id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical})}let g={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:m};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&c.id&&(g.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","view_search_results",g)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s,c;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(l=i.ads)||void 0===l||null===(d=l.dynamic_remarketing)||void 0===d||!d.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let u={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:wpmDataLayer.order.value_filtered,items:wpm.getGoogleAdsDynamicRemarketingOrderItems()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&c.id&&(u.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","purchase",u)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmLogin",(function(){try{var e,t,a,o,r,n,i,l,d,s,c;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(l=i.ads)||void 0===l||null===(d=l.dynamic_remarketing)||void 0===d||!d.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let u={send_to:wpm.getGoogleAdsConversionIdentifiers()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&c.id&&(u.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","login",u)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n;if(jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel()))return;if(!wpm.googleConfigConditionsMet("ads"))return;let i={},l={};i={send_to:wpm.getGoogleAdsConversionIdentifiersWithLabel(),transaction_id:wpmDataLayer.order.number,value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,new_customer:wpmDataLayer.order.new_customer},null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.order)&&void 0!==t&&t.clv_order_value_filtered&&(i.customer_lifetime_value=wpmDataLayer.order.clv_order_value_filtered),null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&(i.user_id=wpmDataLayer.user.id),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.order)&&void 0!==n&&n.aw_merchant_id&&(l={discount:wpmDataLayer.order.discount,aw_merchant_id:wpmDataLayer.order.aw_merchant_id,aw_feed_country:wpmDataLayer.order.aw_feed_country,aw_feed_language:wpmDataLayer.order.aw_feed_language,items:wpm.getGoogleAdsRegularOrderItems()}),wpm.gtagLoaded().then((function(){gtag("event","conversion",{...i,...l})}))}catch(e){console.error(e)}}))},42:()=>{!function(e,t,a){e.getGoogleAdsConversionIdentifiersWithLabel=function(){var e,t,a,o;let r=[];if(null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.ads)&&void 0!==o&&o.conversionIds)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))t&&r.push(e+"/"+t);return r},e.getGoogleAdsConversionIdentifiers=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))e.push(t);return e},e.getGoogleAdsRegularOrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o)):(o.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o))}return e},e.getGoogleAdsDynamicRemarketingOrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o)):(o.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o))}return e}}(window.wpm=window.wpm||{},jQuery)},190:(e,t,a)=>{a(42),a(165)},625:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.analytics)||void 0===o||null===(r=o.universal)||void 0===r||!r.property_id)return;if(null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.universal)&&void 0!==s&&s.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.universal.property_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGAUAOrderItems()})}))}catch(e){console.error(e)}}))},19:()=>{!function(e,t,a){e.getGAUAOrderItems=function(){let t=[];for(const[r,n]of Object.entries(wpmDataLayer.order.items)){var a,o;let r;r={quantity:n.quantity,price:n.price,name:n.name,currency:wpmDataLayer.order.currency,category:wpmDataLayer.products[n.id].category.join("/")},null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.general)&&void 0!==o&&o.variationsOutput&&0!==n.variation_id?(r.id=String(wpmDataLayer.products[n.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),r.variant=wpmDataLayer.products[n.variation_id].variant_name,r.brand=wpmDataLayer.products[n.variation_id].brand):(r.id=String(wpmDataLayer.products[n.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),r.brand=wpmDataLayer.products[n.id].brand),r=e.ga3AddListNameToProduct(r),t.push(r)}return t},e.ga3AddListNameToProduct=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null;return e.list_name=wpmDataLayer.shop.list_name,t&&(e.list_position=t),e}}(window.wpm=window.wpm||{},jQuery)},562:(e,t,a)=>{a(19),a(625)},572:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.analytics)||void 0===o||null===(r=o.ga4)||void 0===r||!r.measurement_id)return;if(null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.ga4)&&void 0!==s&&s.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.ga4.measurement_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGA4OrderItems()})}))}catch(e){console.error(e)}}))},228:()=>{!function(e,t,a){e.getGA4OrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price,item_name:r.name,currency:wpmDataLayer.order.currency,item_category:wpmDataLayer.products[r.id].category.join("/")},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.item_id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),o.item_variant=wpmDataLayer.products[r.variation_id].variant_name,o.item_brand=wpmDataLayer.products[r.variation_id].brand):(o.item_id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),o.item_brand=wpmDataLayer.products[r.id].brand),e.push(o)}return e}}(window.wpm=window.wpm||{},jQuery)},522:(e,t,a)=>{a(228),a(572)},774:(e,t,a)=>{a(562),a(522)},294:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a;void 0===(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a?void 0:a.state)&&(wpm.canGoogleLoad()?wpm.loadGoogle():wpm.logPreventedPixelLoading("google","analytics / ads"))}))},860:()=>{!function(e,t,a){e.googleConfigConditionsMet=function(t){var a,o,r,n;return!(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.consent_mode)||void 0===n||!n.active)||("category"===e.getConsentValues().mode?!0===e.getConsentValues().categories[t]:"pixel"===e.getConsentValues().mode&&e.getConsentValues().pixels.includes("google-"+t))},e.getVisitorConsentStatusAndUpdateGoogleConsentSettings=function(t){return"category"===e.getConsentValues().mode?(e.getConsentValues().categories.analytics&&(t.analytics_storage="granted"),e.getConsentValues().categories.ads&&(t.ad_storage="granted")):"pixel"===e.getConsentValues().mode&&(t.analytics_storage=e.getConsentValues().pixels.includes("google-analytics")?"granted":"denied",t.ad_storage=e.getConsentValues().pixels.includes("google-ads")?"granted":"denied"),t},e.updateGoogleConsentMode=function(){let e=!(arguments.length>0&&arguments[0]!==a)||arguments[0],t=!(arguments.length>1&&arguments[1]!==a)||arguments[1];try{if(!window.gtag||!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent)return;gtag("consent","update",{analytics_storage:e?"granted":"denied",ad_storage:t?"granted":"denied"})}catch(e){console.error(e)}},e.fireGtagGoogleAds=function(){try{var e,t,a,o,r,n,i,l,d,s,c,u,p,m,g,y,w,v,_,f,h,L,D;if(wpmDataLayer.pixels.google.ads.state="loading",null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.ads)&&void 0!==o&&null!==(r=o.enhanced_conversions)&&void 0!==r&&r.active)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e,{allow_enhanced_conversions:!0});else for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e);null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.ads)&&void 0!==d&&d.conversionIds&&null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.pixels)&&void 0!==c&&null!==(u=c.google)&&void 0!==u&&null!==(p=u.ads)&&void 0!==p&&p.phone_conversion_label&&null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.pixels)&&void 0!==g&&null!==(y=g.google)&&void 0!==y&&null!==(w=y.ads)&&void 0!==w&&w.phone_conversion_number&>ag("config",Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]+"/"+wpmDataLayer.pixels.google.ads.phone_conversion_label,{phone_conversion_number:wpmDataLayer.pixels.google.ads.phone_conversion_number}),null!==(v=wpmDataLayer)&&void 0!==v&&null!==(_=v.shop)&&void 0!==_&&_.page_type&&"order_received_page"===wpmDataLayer.shop.page_type&&null!==(f=wpmDataLayer)&&void 0!==f&&null!==(h=f.order)&&void 0!==h&&null!==(L=h.google)&&void 0!==L&&null!==(D=L.ads)&&void 0!==D&&D.enhanced_conversion_data&>ag("set","user_data",wpmDataLayer.order.google.ads.enhanced_conversion_data),wpmDataLayer.pixels.google.ads.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsUA=function(){try{wpmDataLayer.pixels.google.analytics.universal.state="loading",gtag("config",wpmDataLayer.pixels.google.analytics.universal.property_id,wpmDataLayer.pixels.google.analytics.universal.parameters),wpmDataLayer.pixels.google.analytics.universal.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsGA4=function(){try{var e,t,a,o,r;wpmDataLayer.pixels.google.analytics.ga4.state="loading";let n=wpmDataLayer.pixels.google.analytics.ga4.parameters;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.ga4)&&void 0!==r&&r.debug_mode&&(n.debug_mode=!0),gtag("config",wpmDataLayer.pixels.google.analytics.ga4.measurement_id,n),wpmDataLayer.pixels.google.analytics.ga4.state="ready"}catch(e){console.error(e)}},e.isGoogleActive=function(){var e,t,a,o,r,n,i,l,d,s,c,u,p,m;return!(!(null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.universal)&&void 0!==r&&r.property_id||null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.ga4)&&void 0!==s&&s.measurement_id)&&jQuery.isEmptyObject(null===(c=wpmDataLayer)||void 0===c||null===(u=c.pixels)||void 0===u||null===(p=u.google)||void 0===p||null===(m=p.ads)||void 0===m?void 0:m.conversionIds))},e.getGoogleGtagId=function(){var e,t,a,o,r,n,i,l,d,s;return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.universal)&&void 0!==r&&r.property_id?wpmDataLayer.pixels.google.analytics.universal.property_id:null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.ga4)&&void 0!==s&&s.measurement_id?wpmDataLayer.pixels.google.analytics.ga4.measurement_id:Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]},e.loadGoogle=function(){e.isGoogleActive()&&(wpmDataLayer.pixels.google.state="loading",e.loadScriptAndCacheIt("https://www.googletagmanager.com/gtag/js?id="+e.getGoogleGtagId()).then((function(t,a){try{var o,r,n,i,l,d,s,c,u,p,m,g,y,w,v,_,f,h,L,D,k,b;if(window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.google)&&void 0!==n&&null!==(i=n.consent_mode)&&void 0!==i&&i.active){var C,x,j,S;let t={ad_storage:wpmDataLayer.pixels.google.consent_mode.ad_storage,analytics_storage:wpmDataLayer.pixels.google.consent_mode.analytics_storage,wait_for_update:wpmDataLayer.pixels.google.consent_mode.wait_for_update};null!==(C=wpmDataLayer)&&void 0!==C&&null!==(x=C.pixels)&&void 0!==x&&null!==(j=x.google)&&void 0!==j&&null!==(S=j.consent_mode)&&void 0!==S&&S.region&&(t.region=wpmDataLayer.pixels.google.consent_mode.region),t=e.getVisitorConsentStatusAndUpdateGoogleConsentSettings(t),gtag("consent","default",t),gtag("set","ads_data_redaction",wpmDataLayer.pixels.google.consent_mode.ads_data_redaction),gtag("set","url_passthrough",wpmDataLayer.pixels.google.consent_mode.url_passthrough)}null!==(l=wpmDataLayer)&&void 0!==l&&null!==(d=l.pixels)&&void 0!==d&&null!==(s=d.google)&&void 0!==s&&null!==(c=s.linker)&&void 0!==c&&c.settings&>ag("set","linker",wpmDataLayer.pixels.google.linker.settings),gtag("js",new Date),jQuery.isEmptyObject(null===(u=wpmDataLayer)||void 0===u||null===(p=u.pixels)||void 0===p||null===(m=p.google)||void 0===m||null===(g=m.ads)||void 0===g?void 0:g.conversionIds)||(e.googleConfigConditionsMet("ads")?e.fireGtagGoogleAds():e.logPreventedPixelLoading("google-ads","ads")),null!==(y=wpmDataLayer)&&void 0!==y&&null!==(w=y.pixels)&&void 0!==w&&null!==(v=w.google)&&void 0!==v&&null!==(_=v.analytics)&&void 0!==_&&null!==(f=_.universal)&&void 0!==f&&f.property_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsUA():e.logPreventedPixelLoading("google-universal-analytics","analytics")),null!==(h=wpmDataLayer)&&void 0!==h&&null!==(L=h.pixels)&&void 0!==L&&null!==(D=L.google)&&void 0!==D&&null!==(k=D.analytics)&&void 0!==k&&null!==(b=k.ga4)&&void 0!==b&&b.measurement_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsGA4():e.logPreventedPixelLoading("ga4","analytics")),wpmDataLayer.pixels.google.state="ready"}catch(e){console.error(e)}})))},e.canGoogleLoad=function(){var t,a,o,r;return!(null===(t=wpmDataLayer)||void 0===t||null===(a=t.pixels)||void 0===a||null===(o=a.google)||void 0===o||null===(r=o.consent_mode)||void 0===r||!r.active)||("category"===e.getConsentValues().mode?!(!e.getConsentValues().categories.ads&&!e.getConsentValues().categories.analytics):"pixel"===e.getConsentValues().mode?e.getConsentValues().pixels.includes("google-ads")||e.getConsentValues().pixels.includes("google-analytics"):(console.error("Couldn't find a valid load condition for Google mode in wpmConsentValues"),!1))},e.gtagLoaded=function(){return new Promise((function(e,t){var a,o,r;void 0===(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r?void 0:r.state)&&t();let n=0;!function a(){var o,r,i;return"ready"===(null===(o=wpmDataLayer)||void 0===o||null===(r=o.pixels)||void 0===r||null===(i=r.google)||void 0===i?void 0:i.state)?e():n>=5e3?t():(n+=200,void setTimeout(a,200))}()}))}}(window.wpm=window.wpm||{},jQuery)},580:(e,t,a)=>{a(860),a(294)},69:(e,t,a)=>{a(580),a(190),a(774),a(463)},945:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a,o,r,n,i,l;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.optimize)||void 0===o||!o.container_id||null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.pixels)&&void 0!==n&&null!==(i=n.google)&&void 0!==i&&null!==(l=i.optimize)&&void 0!==l&&l.loaded||wpm.canIFire("analytics","google-optimize")&&wpm.load_google_optimize_pixel()}))},962:()=>{!function(e,t,a){e.load_google_optimize_pixel=function(){try{wpmDataLayer.pixels.google.optimize.loaded=!0,e.loadScriptAndCacheIt("https://www.googleoptimize.com/optimize.js?id="+wpmDataLayer.pixels.google.optimize.container_id)}catch(e){console.error(e)}}}(window.wpm=window.wpm||{},jQuery)},463:(e,t,a)=>{a(962),a(945)},300:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a,o,r,n,i,l,d;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.hotjar)||void 0===a||!a.site_id||null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.hotjar)&&void 0!==n&&n.loaded||!wpm.canIFire("analytics","hotjar")||null!==(i=wpmDataLayer)&&void 0!==i&&null!==(l=i.pixels)&&void 0!==l&&null!==(d=l.hotjar)&&void 0!==d&&d.loaded||wpm.load_hotjar_pixel()}))},376:()=>{!function(e,t,a){e.load_hotjar_pixel=function(){try{wpmDataLayer.pixels.hotjar.loaded=!0,e=window,t=document,e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6},a=t.getElementsByTagName("head")[0],(o=t.createElement("script")).async=1,o.src="https://static.hotjar.com/c/hotjar-"+e._hjSettings.hjid+".js?sv="+e._hjSettings.hjsv,a.appendChild(o)}catch(e){console.error(e)}var e,t,a,o}}(window.wpm=window.wpm||{},jQuery)},787:(e,t,a)=>{a(376),a(300)},473:()=>{!function(e,t,a){let o=()=>{let t=e.getCookie("cmplz_statistics"),a=e.getCookie("cmplz_marketing");return!(!e.getCookie("cmplz_consent_status")&&!e.getCookie("cmplz_banner-status"))&&{analytics:"allow"===t,ads:"allow"===a,visitorHasChosen:!0}},r=()=>{let t=e.getCookie("cookielawinfo-checkbox-analytics")||e.getCookie("cookielawinfo-checkbox-analytiques"),a=e.getCookie("cookielawinfo-checkbox-advertisement")||e.getCookie("cookielawinfo-checkbox-performance")||e.getCookie("cookielawinfo-checkbox-publicite"),o=e.getCookie("CookieLawInfoConsent");return!(!t&&!a)&&{analytics:"yes"===t,ads:"yes"===a,visitorHasChosen:!!o}},n={categories:{},pixels:[],mode:"category",visitorHasChosen:!1};e.getConsentValues=()=>n,e.setConsentValueCategories=function(){let e=arguments.length>0&&arguments[0]!==a&&arguments[0],t=arguments.length>1&&arguments[1]!==a&&arguments[1];n.categories.analytics=e,n.categories.ads=t},e.updateConsentCookieValues=function(){let t,i=arguments.length>0&&arguments[0]!==a?arguments[0]:null,l=arguments.length>1&&arguments[1]!==a?arguments[1]:null,d=arguments.length>2&&arguments[2]!==a&&arguments[2];if(n.categories.analytics=!d,n.categories.ads=!d,i||l)return i&&(n.categories.analytics=!!i),void(l&&(n.categories.ads=!!l));if(t=e.getCookie("pmw_cookie_consent"))return t=JSON.parse(t),n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieConsent"))return t=decodeURI(t),n.categories.analytics=t.indexOf("statistics:true")>=0,n.categories.ads=t.indexOf("marketing:true")>=0,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieScriptConsent"))return t=JSON.parse(t),"reject"===t.action?(n.categories.analytics=!1,n.categories.ads=!1):2===t.categories.length?(n.categories.analytics=!0,n.categories.ads=!0):(n.categories.analytics=t.categories.indexOf("performance")>=0,n.categories.ads=t.categories.indexOf("targeting")>=0),void(n.visitorHasChosen=!0);var s,c,u,p,m,g,y,w;if(t=e.getCookie("borlabs-cookie"))return t=decodeURI(t),t=JSON.parse(t),n.categories.analytics=!(null===(s=t)||void 0===s||null===(c=s.consents)||void 0===c||!c.statistics),n.categories.ads=!(null===(u=t)||void 0===u||null===(p=u.consents)||void 0===p||!p.marketing),n.visitorHasChosen=!0,n.pixels=[...(null===(m=t)||void 0===m||null===(g=m.consents)||void 0===g?void 0:g.statistics)||[],...(null===(y=t)||void 0===y||null===(w=y.consents)||void 0===w?void 0:w.marketing)||[]],void(n.mode="pixel");if(t=o())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=t.visitorHasChosen);if(t=e.getCookie("cookie_notice_accepted"))return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);if(t=e.getCookie("hu-consent"))return t=JSON.parse(t),n.categories.analytics=!!t.categories[3],n.categories.ads=!!t.categories[4],void(n.visitorHasChosen=!0);if(t=r())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0===t.visitorHasChosen);if(t=e.getCookie("moove_gdpr_popup"))return t=JSON.parse(t),n.categories.analytics="1"===t.thirdparty,n.categories.ads="1"===t.advanced,void(n.visitorHasChosen=!0);if(t=e.getCookie("wpautoterms-cookies-notice")){if("1"!==t)return;return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0)}if(window.localStorage&&window.localStorage.getItem("uc_settings")){if(console.log("Usercentrics settings detected"),"undefined"==typeof UC_UI)return void window.addEventListener("UC_UI_INITIALIZED",(function(t){e.ucUiProcessConsent()}));if(UC_UI.areAllConsentsAccepted())return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);e.ucUiProcessConsent()}if(t=e.getCookie("OptanonConsent")){let e=new URLSearchParams(t).get("groups").split(","),a={};return e.forEach((e=>{let t=e.split(":");a[t[0]]=t[1]})),n.categories.analytics="1"===groubsObject[2],n.categories.ads="1"===a[4],void(n.visitorHasChosen=!0)}},e.ucUiProcessConsent=function(){if("undefined"==typeof UC_UI)return;UC_UI.areAllConsentsAccepted()&&pmw.consentAcceptAll();const e=UC_UI.getSettingsLabels().categories.filter((e=>"Statistics"===e.label))[0].slug;pmw.consentAdjustSelectively({analytics:!UC_UI.getServicesBaseInfo().filter((t=>t.categorySlug===e&&!1===t.consent.status)).length>0,ads:!UC_UI.getServicesBaseInfo().filter((e=>"marketing"===e.categorySlug&&!1===e.consent.status)).length>0})},e.updateConsentCookieValues(),e.setConsentDefaultValuesToExplicit=()=>{n.categories={analytics:!1,ads:!1}},e.canIFire=(t,a)=>{let o;return"category"===n.mode?o=!!n.categories[t]:"pixel"===n.mode?(o=n.pixels.includes(a),!1===o&&"microsoft-ads"===a&&(o=n.pixels.includes("bing-ads"))):(console.error("Couldn't find a valid consent mode in wpmConsentValues"),o=!1),!!o||(e.logPreventedPixelLoading(a,t),!1)},e.logPreventedPixelLoading=(e,t)=>{var a,o,r;null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.shop)&&void 0!==o&&null!==(r=o.cookie_consent_mgmt)&&void 0!==r&&r.explicit_consent?console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)'):console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)')},e.scriptTagObserver=new MutationObserver((a=>{a.forEach((a=>{let{addedNodes:o}=a;[...o].forEach((a=>{t(a).data("wpm-cookie-category")&&(e.shouldScriptBeActive(a)?e.unblockScript(a):e.blockScript(a))}))}))})),e.scriptTagObserver.observe(document.head,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",(()=>e.scriptTagObserver.disconnect())),e.shouldScriptBeActive=e=>{var a,o,r,i;return!((wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent||n.visitorHasChosen)&&("category"!==n.mode||!t(e).data("wpm-cookie-category").split(",").some((e=>n.categories[e])))&&("pixel"!==n.mode||!n.pixels.includes(t(e).data("wpm-pixel-name")))&&("pixel"!==n.mode||"google"!==t(e).data("wpm-pixel-name")||!["google-analytics","google-ads"].some((e=>n.pixels.includes(e))))&&(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(i=r.consent_mode)||void 0===i||!i.active||"google"!==t(e).data("wpm-pixel-name")))},e.unblockScript=function(e){let o=arguments.length>1&&arguments[1]!==a&&arguments[1];o&&t(e).remove();let r=t(e).data("wpm-src");r&&t(e).attr("src",r),e.type="text/javascript",o&&t(e).appendTo("head"),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.blockScript=function(e){let o=arguments.length>1&&arguments[1]!==a&&arguments[1];o&&t(e).remove(),t(e).attr("src")&&t(e).removeAttr("src"),e.type="blocked/javascript",o&&t(e).appendTo("head")},e.unblockAllScripts=function(){let t=!(arguments.length>0&&arguments[0]!==a)||arguments[0],o=!(arguments.length>1&&arguments[1]!==a)||arguments[1];e.setConsentValueCategories(t,o),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.unblockSelectedPixels=()=>{document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.explicitConsentStateAlreadySet=()=>{if(n.explicitConsentStateAlreadySet)return!0;n.explicitConsentStateAlreadySet=!0},document.addEventListener("borlabs-cookie-consent-saved",(()=>{e.updateConsentCookieValues(),"pixel"===n.mode?(e.unblockSelectedPixels(),e.updateGoogleConsentMode(n.pixels.includes("google-analytics"),n.pixels.includes("google-ads"))):(e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads))})),document.addEventListener("CookiebotOnAccept",(()=>{Cookiebot.consent.statistics&&(n.categories.analytics=!0),Cookiebot.consent.marketing&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}),!1),document.addEventListener("CookieScriptAccept",(t=>{t.detail.categories.includes("performance")&&(n.categories.analytics=!0),t.detail.categories.includes("targeting")&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),document.addEventListener("CookieScriptAcceptAll",(()=>{e.setConsentValueCategories(!0,!0),e.unblockAllScripts(!0,!0),e.updateGoogleConsentMode(!0,!0)})),e.cmplzStatusChange=t=>{t.detail.categories.includes("statistics")&&e.updateConsentCookieValues(!0,null),t.detail.categories.includes("marketing")&&e.updateConsentCookieValues(null,!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)},document.addEventListener("cmplzStatusChange",e.cmplzStatusChange),document.addEventListener("cmplz_status_change",e.cmplzStatusChange),document.addEventListener("setCookieNotice",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),e.huObserver=new MutationObserver((t=>{t.forEach((t=>{let{addedNodes:a}=t;[...a].forEach((t=>{"hu"===t.id&&document.querySelector(".hu-cookies-save").addEventListener("click",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}))}))}))})),window.hu&&e.huObserver.observe(document.documentElement||document.body,{childList:!0,subtree:!0}),window.addEventListener("ucEvent",(function(e){e.detail&&"consent_status"==e.detail.event&&(!0===e.detail["Google Ads Remarketing"]?console.log("Google Ads Remarketing has consent"):console.log("Google Ads Remarketing has no consent"))})),window.addEventListener("UC_UI_CMP_EVENT",(function(e){"ACCEPT_ALL"===e.detail.type&&pmw.consentAcceptAll(),"DENY_ALL"===e.detail.type&&pmw.consentRevokeAll(),"SAVE"===e.detail.type&&console.log("event.detail",e.detail)})),jQuery("#accept-recommended-btn-handler, #onetrust-accept-btn-handler").on("click",(function(){void 0!==window.OneTrust&&pmw.consentAcceptAll()})),jQuery(".ot-pc-refuse-all-handler, #onetrust-reject-all-handler").on("click",(function(){pmw.consentRevokeAll()})),jQuery(".save-preference-btn-handler.onetrust-close-btn-handler").on("click",(function(){location.reload()}))}(window.wpm=window.wpm||{},jQuery),function(e,t,a){e.consentAcceptAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,e.consentSetCookie(!0,!0,t.duration),wpm.unblockAllScripts(!0,!0),wpm.updateGoogleConsentMode(!0,!0)},e.consentAdjustSelectively=t=>{t.analytics=t.analytics!==a?t.analytics:wpm.getConsentValues().categories.analytics,t.ads=t.ads!==a?t.ads:wpm.getConsentValues().categories.ads,t.duration=t.duration||365,e.consentSetCookie(t.analytics,t.ads,t.duration),wpm.unblockAllScripts(t.analytics,t.ads),wpm.updateGoogleConsentMode(t.analytics,t.ads)},e.consentRevokeAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,wpm.setConsentValueCategories(!1,!1),e.consentSetCookie(!1,!1,t.duration),wpm.updateGoogleConsentMode(!1,!1)},e.consentSetCookie=function(e,t){let o=arguments.length>2&&arguments[2]!==a?arguments[2]:365;wpm.setCookie("pmw_cookie_consent",JSON.stringify({analytics:e,ads:t}),o)},jQuery(document).trigger("pmw_cookie_consent_management_loaded")}(window.pmw=window.pmw||{},jQuery)},299:()=>{jQuery(document).on("click",".remove_from_cart_button, .remove",(e=>{console.log("remove_from_cart event"+(new Date).getTime());try{let t=new URL(jQuery(e.currentTarget).attr("href")),a=wpm.getProductIdByCartItemKeyUrl(t);wpm.removeProductFromCart(a)}catch(e){console.error(e)}}));let e=[".checkout-button",".cart-checkout-button",".button.checkout",".xoo-wsc-ft-btn-checkout",".elementor-button--checkout"].join(",");jQuery(document).on("click init_checkout",e,(()=>{jQuery(document).trigger("wpmBeginCheckout")})),jQuery(document).on("updated_cart_totals",(()=>{jQuery(document).trigger("wpmViewCart")})),jQuery(document).on("wpmLoad",(e=>{jQuery(document).on("payment_method_selected",(()=>{!1===wpm.paymentMethodSelected&&wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val()),wpm.paymentMethodSelected=!0}))})),jQuery(document).on("wpmLoad",(()=>{try{wpm.doesWooCommerceCartExist()&&wpm.getCartItems()}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(()=>{wpmDataLayer.products=wpmDataLayer.products||{};let e=wpm.getAddToCartLinkProductIds();wpm.getProductsFromBackend(e)})),jQuery(document).on("wpmLoad",(()=>{if(!wpm.getCookie("wpmReferrer")&&document.referrer){let e=new URL(document.referrer).hostname;e!==window.location.host&&wpm.setCookie("wpmReferrer",e)}})),jQuery(document).on("wpmLoad",(()=>{try{var e;if("undefined"!=typeof wpmDataLayer&&(null===(e=wpmDataLayer)||void 0===e||!e.wpmLoadFired)){var t,a,o;if(jQuery(document).trigger("wpmLoadAlways"),null!==(t=wpmDataLayer)&&void 0!==t&&t.shop)if("product"===wpmDataLayer.shop.page_type&&"variable"!==wpmDataLayer.shop.product_type&&wpm.getMainProductIdFromProductPage()){let e=wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage());jQuery(document).trigger("wpmViewItem",e)}else"product_category"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmCategory"):"search"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmSearch"):"cart"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmViewCart"):"order_received_page"===wpmDataLayer.shop.page_type&&wpmDataLayer.order?wpm.isOrderIdStored(wpmDataLayer.order.id)||(jQuery(document).trigger("wpmOrderReceivedPage"),wpm.writeOrderIdToStorage(wpmDataLayer.order.id),"function"==typeof wpm.acrRemoveCookie&&wpm.acrRemoveCookie()):jQuery(document).trigger("wpmEverywhereElse");else jQuery(document).trigger("wpmEverywhereElse");null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&!wpm.hasLoginEventFired()&&(jQuery(document).trigger("wpmLogin"),wpm.setLoginEventFired()),wpmDataLayer.wpmLoadFired=!0}}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(async()=>{window.sessionStorage&&window.sessionStorage.getItem("_pmw_endpoint_available")&&!JSON.parse(window.sessionStorage.getItem("_pmw_endpoint_available"))&&console.error("Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.")})),jQuery(document).on("wpmPreLoadPixels",(()=>{var e,t,a;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.shop)&&void 0!==t&&null!==(a=t.cookie_consent_mgmt)&&void 0!==a&&a.explicit_consent&&!wpm.explicitConsentStateAlreadySet()&&wpm.updateConsentCookieValues(null,null,!0),jQuery(document).trigger("wpmLoadPixels",{})})),jQuery(document).on("wpmAddToCart",((e,t)=>{var a,o,r,n,i,l;let d={event:"addToCart",product:t};null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.pixels)&&void 0!==o&&null!==(r=o.facebook)&&void 0!==r&&r.loaded&&(d.facebook={event_name:"AddToCart",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.tiktok)&&void 0!==l&&l.loaded&&(d.tiktok={event:"AddToCart",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToCart",d),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(d)})),jQuery(document).on("wpmBeginCheckout",(()=>{var e,t,a,o,r,n;let i={event:"beginCheckout"};var l;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"InitiateCheckout",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},null!==(l=wpmDataLayer)&&void 0!==l&&l.cart&&!jQuery.isEmptyObject(wpmDataLayer.cart)&&(i.facebook.custom_data={content_type:"product",content_ids:wpm.fbGetContentIdsFromCart(),value:wpm.getCartValue(),currency:wpmDataLayer.shop.currency})),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"InitiateCheckout",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientSideBeginCheckout",i),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(i)})),jQuery(document).on("wpmAddToWishlist",((e,t)=>{var a,o,r,n,i,l;let d={event:"addToWishlist",product:t};null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.pixels)&&void 0!==o&&null!==(r=o.facebook)&&void 0!==r&&r.loaded&&(d.facebook={event_name:"AddToWishlist",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.tiktok)&&void 0!==l&&l.loaded&&(d.tiktok={event:"AddToWishlist",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToWishlist",d),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(d)})),jQuery(document).on("wpmViewItem",(function(e){var t,a,o,r,n,i;let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,d={event:"viewItem",product:l};null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.pixels)&&void 0!==a&&null!==(o=a.facebook)&&void 0!==o&&o.loaded&&(d.facebook={event_name:"ViewContent",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},l&&(d.facebook.custom_data=wpm.fbGetProductDataForCapiEvent(l))),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.pixels)&&void 0!==n&&null!==(i=n.tiktok)&&void 0!==i&&i.loaded&&(d.tiktok={event:"ViewContent",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()},l&&(d.tiktok.properties={value:l.price*l.quantity,currency:l.currency,contents:[{content_id:l.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:l.name,quantity:l.quantity,price:l.price}]})),jQuery(document).trigger("wpmClientSideViewItem",d),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(d)})),jQuery(document).on("wpmSearch",(()=>{var e,t,a,o,r,n;let i={event:"search"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"Search",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{search_string:wpm.getSearchTermFromUrl()}}),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"Search",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{query:wpm.getSearchTermFromUrl()}}),jQuery(document).trigger("wpmClientSideSearch",i),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(i)})),jQuery(document).on("wpmPlaceOrder",(()=>{var e,t,a;let o={event:"placeOrder"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.tiktok)&&void 0!==a&&a.loaded&&(o.tiktok={event:"PlaceAnOrder",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientPlaceOrder",o),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(o)})),jQuery(document).on("wpmOrderReceivedPage",(()=>{var e,t,a,o,r,n;let i={event:"orderReceived"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"Purchase",event_id:wpmDataLayer.order.id,user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{content_type:"product",value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,content_ids:wpm.facebookContentIds()}}),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"CompletePayment",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,contents:wpm.getTikTokOrderItemIds()}}),jQuery(document).trigger("wpmClientSideOrderReceivedPage",i)}))},459:()=>{const e=[".add_to_cart_button:not(.product_type_variable)",".ajax_add_to_cart",".single_add_to_cart_button"].join(",");jQuery(e).on("click adding_to_cart",(e=>{try{let t,a=1;"product"===wpmDataLayer.shop.page_type?(void 0!==jQuery(e.currentTarget).attr("href")&&jQuery(e.currentTarget).attr("href").includes("add-to-cart")&&(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a)),"simple"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery(e.currentTarget).val(),wpm.addProductToCart(t,a)),["variable","variable-subscription"].indexOf(wpmDataLayer.shop.product_type)>=0&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("[name='variation_id']").val(),wpm.addProductToCart(t,a)),"grouped"===wpmDataLayer.shop.product_type&&jQuery(".woocommerce-grouped-product-list-item").each(((e,o)=>{a=Number(jQuery(o).find(".input-text.qty").val()),a||0===a||(a=1);let r=jQuery(o).attr("class");t=wpm.getPostIdFromString(r),wpm.addProductToCart(t,a)})),"bundle"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("input[name=add-to-cart]").val(),wpm.addProductToCart(t,a))):(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a))}catch(e){console.error(e)}})),jQuery("a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)").one("click",(e=>{try{if(jQuery(e.target).closest("a").attr("href")){let t=new URL(jQuery(e.currentTarget).attr("href"),window.location.origin);if(t.searchParams.has("add-to-cart")){let e=t.searchParams.get("add-to-cart");wpm.addProductToCart(e,1)}}}catch(e){console.error(e)}})),jQuery(".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product").on("click",(e=>{try{let t=jQuery(e.currentTarget).nextAll(".wpmProductId:first").data("id");if(t){if(t=wpm.getIdBasedOndVariationsOutputSetting(t),!t)throw Error("Wasn't able to retrieve a productId");if(wpmDataLayer.products&&wpmDataLayer.products[t]){let e=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmSelectContentGaUa",e),jQuery(document).trigger("wpmSelectItem",e)}}}catch(e){console.error(e)}})),jQuery("#billing_email").on("input",(e=>{wpm.isEmail(jQuery(e.currentTarget).val())&&(wpm.fireCheckoutProgress(2),wpm.emailSelected=!0)})),jQuery("form.checkout").on("checkout_place_order_success",(()=>{!1===wpm.emailSelected&&wpm.fireCheckoutProgress(2),!1===wpm.paymentMethodSelected&&(wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val())),wpm.fireCheckoutProgress(4),jQuery(document).trigger("wpmPlaceOrder",{})})),jQuery("[name='update_cart']").on("click",(()=>{try{jQuery(".cart_item").each(((e,t)=>{let a=new URL(jQuery(t).find(".product-remove").find("a").attr("href")),o=wpm.getProductIdByCartItemKeyUrl(a),r=jQuery(t).find(".qty").val();0===r?wpm.removeProductFromCart(o):r<wpmDataLayer.cart[o].quantity?wpm.removeProductFromCart(o,wpmDataLayer.cart[o].quantity-r):r>wpmDataLayer.cart[o].quantity&&wpm.addProductToCart(o,r-wpmDataLayer.cart[o].quantity)}))}catch(e){console.error(e),wpm.getCartItemsFromBackend()}})),jQuery(".add_to_wishlist,.wl-add-to").on("click",(e=>{try{let t;if(jQuery(e.currentTarget).data("productid")?t=jQuery(e.currentTarget).data("productid"):jQuery(e.currentTarget).data("product-id")&&(t=jQuery(e.currentTarget).data("product-id")),!t)throw Error("Wasn't able to retrieve a productId");let a=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmAddToWishlist",a)}catch(e){console.error(e)}})),jQuery(".single_variation_wrap").on("show_variation",((e,t)=>{try{let e=wpm.getIdBasedOndVariationsOutputSetting(t.variation_id);if(!e)throw Error("Wasn't able to retrieve a productId");wpm.triggerViewItemEventPrep(e)}catch(e){console.error(e)}}))},584:()=>{!function(e,t,a){const o="_wpm_order_ids",r="_pmw_endpoint_available",n="pmw/v1/test/";function i(){return""!==e.getCookie(o)}e.emailSelected=!1,e.paymentMethodSelected=!1,e.useRestEndpoint=()=>e.isSessionStorageAvailable()&&e.isRestEndpointAvailable()&&e.isBelowRestErrorThreshold(),e.isBelowRestErrorThreshold=()=>window.sessionStorage.getItem(0)<=10,e.isRestEndpointAvailable=async()=>window.sessionStorage.getItem(r)?JSON.parse(window.sessionStorage.getItem(r)):await e.testEndpoint(),e.isSessionStorageAvailable=()=>!!window.sessionStorage,e.testEndpoint=async function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:e.root+n,o=arguments.length>1&&arguments[1]!==a?arguments[1]:r,i=await fetch(t,{method:"POST",mode:"cors",cache:"no-cache",keepalive:!0});return 200===i.status?(window.sessionStorage.setItem(o,JSON.stringify(!0)),!0):404===i.status||0===i.status?(window.sessionStorage.setItem(o,JSON.stringify(!1)),!1):void 0},e.isWpmRestEndpointAvailable=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:r;return!!e.getCookie(t)},e.writeOrderIdToStorage=function(t){let r=arguments.length>1&&arguments[1]!==a?arguments[1]:"thankyou_page";if(window.Storage)if(null===localStorage.getItem(o)){let e=[];e.push(t),window.localStorage.setItem(o,JSON.stringify(e))}else{let e=JSON.parse(localStorage.getItem(o));e.includes(t)||(e.push(t),window.localStorage.setItem(o,JSON.stringify(e)))}else{let a=new Date;a.setDate(a.getDate()+365);let r=[];i()&&(r=JSON.parse(e.getCookie(o))),r.includes(t)||(r.push(t),document.cookie="_wpm_order_ids="+JSON.stringify(r)+";expires="+a.toUTCString())}"function"==typeof e.storeOrderIdOnServer&&wpmDataLayer.orderDeduplication&&e.storeOrderIdOnServer(t,r)},e.isOrderIdStored=t=>wpmDataLayer.orderDeduplication?window.Storage?null!==localStorage.getItem(o)&&JSON.parse(localStorage.getItem(o)).includes(t):!!i()&&JSON.parse(e.getCookie(o)).includes(t):(console.log("order duplication prevention: off"),!1),e.isEmail=e=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),e.removeProductFromCart=function(t){let o=arguments.length>1&&arguments[1]!==a?arguments[1]:null;try{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");let a;if(a=null==o?wpmDataLayer.cart[t].quantity:o,wpmDataLayer.cart[t]){let r=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmRemoveFromCart",r),null==o||wpmDataLayer.cart[t].quantity===o?(delete wpmDataLayer.cart[t],sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))):(wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity-a,sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart)))}}catch(e){console.error(e)}},e.getIdBasedOndVariationsOutputSetting=e=>{try{var t,a;return null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput?e:wpmDataLayer.products[e].isVariation?wpmDataLayer.products[e].parentId:e}catch(e){console.error(e)}},e.addProductToCart=(t,a)=>{try{var o;if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");if(null!==(o=wpmDataLayer)&&void 0!==o&&o.products[t]){var r;let o=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmAddToCart",o),null!==(r=wpmDataLayer)&&void 0!==r&&r.cart[t]?wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity+a:("cart"in wpmDataLayer||(wpmDataLayer.cart={}),wpmDataLayer.cart[t]=e.getProductDetailsFormattedForEvent(t,a)),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))}}catch(t){console.error(t),e.getCartItemsFromBackend()}},e.getCartItems=()=>{sessionStorage?sessionStorage.getItem("wpmDataLayerCart")&&"order_received_page"!==wpmDataLayer.shop.page_type?e.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem("wpmDataLayerCart"))):sessionStorage.setItem("wpmDataLayerCart",JSON.stringify({})):e.getCartItemsFromBackend()},e.getCartItemsFromBackend=()=>{try{fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_cart_items"}),keepalive:!0}).then((e=>{if(e.ok)return e.json();throw Error("Error getting cart items from backend")})).then((t=>{if(!t.success)throw Error("Error getting cart items from backend");t.data.cart||(t.data.cart={}),e.saveCartObjectToDataLayer(t.data.cart),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(t.data.cart))}))}catch(e){console.error(e)}},e.getProductsFromBackend=async t=>{var a;if(null!==(a=wpmDataLayer)&&void 0!==a&&a.products&&(t=t.filter((e=>!(e in wpmDataLayer.products)))),t&&0!==t.length){try{let a;if(a=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/products/",{method:"POST",cache:"no-cache",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:wpmDataLayer.general.pageId,productIds:t})}):await fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_product_ids",productIds:t})}),a.ok){let e=await a.json();e.success&&(wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e.data))}else console.error("Error getting products from backend")}catch(e){console.error(e)}return!0}},e.saveCartObjectToDataLayer=e=>{wpmDataLayer.cart=e,wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e)},e.triggerViewItemEventPrep=async t=>{wpmDataLayer.products&&wpmDataLayer.products[t]||await e.getProductsFromBackend([t]),e.triggerViewItemEvent(t)},e.triggerViewItemEvent=t=>{let a=e.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmViewItem",a)},e.triggerViewItemEventNoProduct=()=>{jQuery(document).trigger("wpmViewItem")},e.fireCheckoutOption=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null,o=arguments.length>2&&arguments[2]!==a?arguments[2]:null,r={step:e,checkout_option:t,value:o};jQuery(document).trigger("wpmFireCheckoutOption",r)},e.fireCheckoutProgress=e=>{let t={step:e};jQuery(document).trigger("wpmFireCheckoutProgress",t)},e.getPostIdFromString=e=>{try{return e.match(/(post-)(\d+)/)[2]}catch(e){console.error(e)}},e.triggerViewItemList=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");jQuery(document).trigger("wpmViewItemList",e.getProductDataForViewItemEvent(t))},e.getProductDataForViewItemEvent=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");try{if(wpmDataLayer.products[t])return e.getProductDetailsFormattedForEvent(t)}catch(e){console.error(e)}},e.getMainProductIdFromProductPage=()=>{try{return["simple","variable","grouped","composite","bundle"].indexOf(wpmDataLayer.shop.product_type)>=0&&jQuery(".wpmProductId:first").data("id")}catch(e){console.error(e)}},e.viewItemListTriggerTestMode=e=>{jQuery(e).css({position:"relative"}),jQuery(e).append('<div id="viewItemListTriggerOverlay"></div>'),jQuery(e).find("#viewItemListTriggerOverlay").css({"z-index":"10",display:"block",position:"absolute",height:"100%",top:"0",left:"0",right:"0",opacity:wpmDataLayer.viewItemListTrigger.opacity,"background-color":wpmDataLayer.viewItemListTrigger.backgroundColor})},e.getSearchTermFromUrl=()=>{try{return new URLSearchParams(window.location.search).get("s")}catch(e){console.error(e)}};let l,d={};e.observerCallback=(t,a)=>{t.forEach((t=>{try{let o,r=jQuery(t.target).data("ioid");if(o=jQuery(t.target).next(".wpmProductId").length?jQuery(t.target).next(".wpmProductId").data("id"):jQuery(t.target).find(".wpmProductId").data("id"),!o)throw Error("wpmProductId element not found");t.isIntersecting?d[r]=setTimeout((()=>{e.triggerViewItemList(o),wpmDataLayer.viewItemListTrigger.testMode&&e.viewItemListTriggerTestMode(t.target),!1===wpmDataLayer.viewItemListTrigger.repeat&&a.unobserve(t.target)}),wpmDataLayer.viewItemListTrigger.timeout):(clearTimeout(d[r]),wpmDataLayer.viewItemListTrigger.testMode&&jQuery(t.target).find("#viewItemListTriggerOverlay").remove())}catch(e){console.error(e)}}))};let s,c=0,u=()=>{s=jQuery(".wpmProductId").map((function(e,t){return jQuery(t).parent().hasClass("type-product")||jQuery(t).parent().hasClass("product")||jQuery(t).parent().hasClass("product-item-inner")?jQuery(t).parent():jQuery(t).prev().hasClass("wc-block-grid__product")||jQuery(t).prev().hasClass("product")||jQuery(t).prev().hasClass("product-small")||jQuery(t).prev().hasClass("woocommerce-LoopProduct-link")?jQuery(this).prev():jQuery(t).closest(".product").length?jQuery(t).closest(".product"):void 0}))};e.startIntersectionObserverToWatch=()=>{try{e.urlHasParameter("vildemomode")&&(wpmDataLayer.viewItemListTrigger.testMode=!0),l=new IntersectionObserver(e.observerCallback,{threshold:wpmDataLayer.viewItemListTrigger.threshold}),u(),s.each(((e,t)=>{jQuery(t[0]).data("ioid",c++),l.observe(t[0])}))}catch(e){console.error(e)}},e.startProductsMutationObserverToWatch=()=>{try{let e=jQuery(".wpmProductId:eq(0)").parents().has(jQuery(".wpmProductId:eq(1)").parents()).first();e.length&&p.observe(e[0],{attributes:!0,childList:!0,characterData:!0})}catch(e){console.error(e)}};let p=new MutationObserver((e=>{e.forEach((e=>{let t=e.addedNodes;null!==t&&jQuery(t).each((function(){(jQuery(this).hasClass("type-product")||jQuery(this).hasClass("product-small")||jQuery(this).hasClass("wc-block-grid__product"))&&m(this)&&(jQuery(this).data("ioid",c++),l.observe(this))}))}))})),m=e=>!(!jQuery(e).find(".wpmProductId").length&&!jQuery(e).siblings(".wpmProductId").length);e.setCookie=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:"",o=arguments.length>2&&arguments[2]!==a?arguments[2]:null;if(o){let a=new Date;a.setTime(a.getTime()+24*o*60*60*1e3);let r="expires="+a.toUTCString();document.cookie=e+"="+t+";"+r+";path=/"}else document.cookie=e+"="+t+";path=/"},e.getCookie=e=>{let t=e+"=",a=decodeURIComponent(document.cookie).split(";");for(let e=0;e<a.length;e++){let o=a[e];for(;" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""},e.deleteCookie=t=>{e.setCookie(t,"",-1)},e.getWpmSessionData=()=>{if(window.sessionStorage){let e=window.sessionStorage.getItem("_wpm");return null!==e?JSON.parse(e):{}}return{}},e.setWpmSessionData=e=>{window.sessionStorage&&window.sessionStorage.setItem("_wpm",JSON.stringify(e))},e.storeOrderIdOnServer=async(t,a)=>{try{let o;o=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/pixels-fired/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({order_id:t,source:a,nonce:e.nonce}),keepalive:!0,cache:"no-cache"}):await fetch(e.ajax_url,{method:"POST",body:new URLSearchParams({action:"pmw_purchase_pixels_fired",order_id:t,source:a,nonce:e.nonce}),keepalive:!0}),o.ok||console.error("wpm.storeOrderIdOnServer error")}catch(e){console.error(e)}},e.getProductIdByCartItemKeyUrl=e=>{let t,a=new URLSearchParams(e.search).get("remove_item");return t=0===wpmDataLayer.cartItemKeys[a].variation_id?wpmDataLayer.cartItemKeys[a].product_id:wpmDataLayer.cartItemKeys[a].variation_id,t},e.getAddToCartLinkProductIds=()=>jQuery("a").map((function(){let e=jQuery(this).attr("href");if(e&&e.includes("?add-to-cart=")){let t=e.match(/(add-to-cart=)(\d+)/);if(t)return t[2]}})).get(),e.getProductDetailsFormattedForEvent=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:1,o={id:e.toString(),dyn_r_ids:wpmDataLayer.products[e].dyn_r_ids,name:wpmDataLayer.products[e].name,list_name:wpmDataLayer.shop.list_name,brand:wpmDataLayer.products[e].brand,category:wpmDataLayer.products[e].category,variant:wpmDataLayer.products[e].variant,list_position:wpmDataLayer.products[e].position,quantity:t,price:wpmDataLayer.products[e].price,currency:wpmDataLayer.shop.currency,isVariable:wpmDataLayer.products[e].isVariable,isVariation:wpmDataLayer.products[e].isVariation,parentId:wpmDataLayer.products[e].parentId};return o.isVariation&&(o.parentId_dyn_r_ids=wpmDataLayer.products[e].parentId_dyn_r_ids),o},e.setReferrerToCookie=()=>{e.getCookie("wpmReferrer")||e.setCookie("wpmReferrer",document.referrer)},e.getReferrerFromCookie=()=>e.getCookie("wpmReferrer")?e.getCookie("wpmReferrer"):null,e.getClidFromBrowser=function(){let t,o=arguments.length>0&&arguments[0]!==a?arguments[0]:"gclid";return t={gclid:"_gcl_aw",dclid:"_gcl_dc"},e.getCookie(t[o])?e.getCookie(t[o]).match(/(GCL.[\d]*.)(.*)/)[2]:""},e.getUserAgent=()=>navigator.userAgent,e.getViewPort=()=>({width:Math.max(document.documentElement.clientWidth||0,window.innerWidth||0),height:Math.max(document.documentElement.clientHeight||0,window.innerHeight||0)}),e.version=()=>{console.log(wpmDataLayer.version)},e.loadScriptAndCacheIt=e=>{let t={dataType:"script",cache:!0,url:e};return jQuery.ajax(t)},e.getOrderItemPrice=e=>(e.total+e.total_tax)/e.quantity,e.hasLoginEventFired=()=>{let t=e.getWpmSessionData();return null==t?void 0:t.loginEventFired},e.setLoginEventFired=()=>{let t=e.getWpmSessionData();t.loginEventFired=!0,e.setWpmSessionData(t)},e.wpmDataLayerExists=()=>new Promise((e=>{!function t(){if("undefined"!=typeof wpmDataLayer)return e();setTimeout(t,50)}()})),e.jQueryExists=()=>new Promise((e=>{!function t(){if("undefined"!=typeof jQuery)return e();setTimeout(t,100)}()})),e.pageLoaded=()=>new Promise((e=>{!function t(){if("complete"===document.readyState)return e();setTimeout(t,50)}()})),e.pageReady=()=>new Promise((e=>{!function t(){if("interactive"===document.readyState||"complete"===document.readyState)return e();setTimeout(t,50)}()})),e.isMiniCartActive=()=>{if(window.sessionStorage){for(const[e,t]of Object.entries(window.sessionStorage))if(e.includes("wc_fragments"))return!0;return!1}return!1},e.doesWooCommerceCartExist=()=>document.cookie.includes("woocommerce_items_in_cart"),e.urlHasParameter=e=>new URLSearchParams(window.location.search).has(e),e.hashAsync=(e,t)=>crypto.subtle.digest(e,new TextEncoder("utf-8").encode(t)).then((e=>Array.prototype.map.call(new Uint8Array(e),(e=>("00"+e.toString(16)).slice(-2))).join(""))),e.getCartValue=()=>{var e;let t=0;if(null!==(e=wpmDataLayer)&&void 0!==e&&e.cart)for(const e in wpmDataLayer.cart){let a=wpmDataLayer.cart[e];t+=a.quantity*a.price}return t},e.doesUrlContainPatterns=e=>{for(const t of e)if(new RegExp(t).test(window.location.href))return!0;return!1},e.excludeDomainFromTracking=()=>{var e,t;let a=["appspot.com","translate.google.com"];return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.general)&&void 0!==t&&t.excludeDomains&&(a=[...a,...wpmDataLayer.general.excludeDomains]),!!a.some((e=>window.location.href.includes(e)))&&(console.debug("Pixel Manager for WooCommerce: Aborted due to excluded domain"),!0)},e.getRandomEventId=()=>(Math.random()+1).toString(36).substring(2);let g=!1;const y=()=>{!1===g&&jQuery(document).trigger("pmw:ready"),g=!0};jQuery(document).on("ready",(()=>{y()})),document.addEventListener("DOMContentLoaded",(()=>{y()}))}(window.wpm=window.wpm||{},jQuery)},534:(e,t,a)=>{a(584),a(473)},207:()=>{wpm.wpmDataLayerExists().then((()=>{console.log("Pixel Manager for WooCommerce: "+(wpmDataLayer.version.pro?"Pro":"Free")+" Version "+wpmDataLayer.version.number+" loaded"),wpm.excludeDomainFromTracking()||document.dispatchEvent(new Event("wpmPreLoadPixels"))})).then((()=>{wpm.pageLoaded().then((()=>{document.dispatchEvent(new Event("wpmLoad"))}))})),jQuery(document).on("pmw:ready",(()=>{wpm.wpmDataLayerExists().then((()=>{wpm.startIntersectionObserverToWatch(),wpm.startProductsMutationObserverToWatch()}))}))}},t={};function a(o){var r=t[o];if(void 0!==r)return r.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,a),n.exports}a(534),wpm.jQueryExists().then((function(){jQuery(document).on("pmw:ready",(()=>{a(459)})),a(299),a(69),a(12),a(787),a(207)}))})();
|
2 |
//# sourceMappingURL=wpm-public.p1.min.js.map
|
1 |
+
(()=>{var e={164:()=>{jQuery(document).on("wpmLoadPixels",(()=>{var e,t,a,o,r,n,i,d,l;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.pixel_id||null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.facebook)&&void 0!==n&&n.loaded||wpm.doesUrlContainPatterns(null===(i=wpmDataLayer)||void 0===i||null===(d=i.pixels)||void 0===d||null===(l=d.facebook)||void 0===l?void 0:l.exclusion_patterns)||wpm.canIFire("ads","facebook-ads")&&wpm.loadFacebookPixel()})),jQuery(document).on("wpmClientSideAddToCart",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","AddToCart",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideBeginCheckout",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","InitiateCheckout",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideAddToWishlist",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","AddToWishlist",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideViewItem",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","ViewContent",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideSearch",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","Search",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmLoadAlways",(()=>{try{var e,t,a;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.loaded)return;wpm.setFbUserData()}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideOrderReceivedPage",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","Purchase",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}}))},1:()=>{!function(e,t,a){let o;e.loadFacebookPixel=()=>{try{wpmDataLayer.pixels.facebook.loaded=!0,t=window,a=document,o="script",t.fbq||(r=t.fbq=function(){r.callMethod?r.callMethod.apply(r,arguments):r.queue.push(arguments)},t._fbq||(t._fbq=r),r.push=r,r.loaded=!0,r.version="2.0",r.queue=[],(n=a.createElement(o)).async=!0,n.src="https://connect.facebook.net/en_US/fbevents.js",(i=a.getElementsByTagName(o)[0]).parentNode.insertBefore(n,i));let d={};e.isFbpSet()&&e.isFbAdvancedMatchingEnabled()&&(d={...e.getUserIdentifiersForFb()}),fbq("init",wpmDataLayer.pixels.facebook.pixel_id,d),fbq("track","PageView")}catch(o){console.error(o)}var t,a,o,r,n,i},e.getUserIdentifiersForFb=()=>{var e,t,a,o,r,n,i,d,l,s,c,u,p,m,g,y,w,v,_,f,h,L,D,k,b,C,x,j,S,I,P,Q,E,O,T,A,F,V,U,R,G,q,M,N;let W={};return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.user)&&void 0!==t&&t.id&&(W.external_id=wpmDataLayer.user.id),null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.order)&&void 0!==o&&o.user_id&&(W.external_id=wpmDataLayer.order.user_id),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.user)&&void 0!==n&&null!==(i=n.facebook)&&void 0!==i&&i.email&&(W.em=wpmDataLayer.user.facebook.email),null!==(d=wpmDataLayer)&&void 0!==d&&null!==(l=d.order)&&void 0!==l&&l.billing_email_hashed&&(W.em=wpmDataLayer.order.billing_email_hashed),null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.facebook)&&void 0!==u&&u.first_name&&(W.fn=wpmDataLayer.user.facebook.first_name),null!==(p=wpmDataLayer)&&void 0!==p&&null!==(m=p.order)&&void 0!==m&&m.billing_first_name&&(W.fn=wpmDataLayer.order.billing_first_name.toLowerCase()),null!==(g=wpmDataLayer)&&void 0!==g&&null!==(y=g.user)&&void 0!==y&&null!==(w=y.facebook)&&void 0!==w&&w.last_name&&(W.ln=wpmDataLayer.user.facebook.last_name),null!==(v=wpmDataLayer)&&void 0!==v&&null!==(_=v.order)&&void 0!==_&&_.billing_last_name&&(W.ln=wpmDataLayer.order.billing_last_name.toLowerCase()),null!==(f=wpmDataLayer)&&void 0!==f&&null!==(h=f.user)&&void 0!==h&&null!==(L=h.facebook)&&void 0!==L&&L.phone&&(W.ph=wpmDataLayer.user.facebook.phone),null!==(D=wpmDataLayer)&&void 0!==D&&null!==(k=D.order)&&void 0!==k&&k.billing_phone&&(W.ph=wpmDataLayer.order.billing_phone.replace("+","")),null!==(b=wpmDataLayer)&&void 0!==b&&null!==(C=b.user)&&void 0!==C&&null!==(x=C.facebook)&&void 0!==x&&x.city&&(W.ct=wpmDataLayer.user.facebook.city),null!==(j=wpmDataLayer)&&void 0!==j&&null!==(S=j.order)&&void 0!==S&&S.billing_city&&(W.ct=wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g,"")),null!==(I=wpmDataLayer)&&void 0!==I&&null!==(P=I.user)&&void 0!==P&&null!==(Q=P.facebook)&&void 0!==Q&&Q.state&&(W.st=wpmDataLayer.user.facebook.state),null!==(E=wpmDataLayer)&&void 0!==E&&null!==(O=E.order)&&void 0!==O&&O.billing_state&&(W.st=wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/,"")),null!==(T=wpmDataLayer)&&void 0!==T&&null!==(A=T.user)&&void 0!==A&&null!==(F=A.facebook)&&void 0!==F&&F.postcode&&(W.zp=wpmDataLayer.user.facebook.postcode),null!==(V=wpmDataLayer)&&void 0!==V&&null!==(U=V.order)&&void 0!==U&&U.billing_postcode&&(W.zp=wpmDataLayer.order.billing_postcode),null!==(R=wpmDataLayer)&&void 0!==R&&null!==(G=R.user)&&void 0!==G&&null!==(q=G.facebook)&&void 0!==q&&q.country&&(W.country=wpmDataLayer.user.facebook.country),null!==(M=wpmDataLayer)&&void 0!==M&&null!==(N=M.order)&&void 0!==N&&N.billing_country&&(W.country=wpmDataLayer.order.billing_country.toLowerCase()),W},e.getFbRandomEventId=()=>(Math.random()+1).toString(36).substring(2),e.getFbUserData=()=>(o={...o,...e.getFbUserDataFromBrowser()},o),e.isFbAdvancedMatchingEnabled=()=>{var e,t,a;return!(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.advanced_matching)},e.setFbUserData=()=>{o=e.getFbUserDataFromBrowser()},e.getFbUserDataFromBrowser=()=>{let t={};var a,o;return e.getCookie("_fbp")&&e.isValidFbp(e.getCookie("_fbp"))&&(t.fbp=e.getCookie("_fbp")),e.getCookie("_fbc")&&e.isValidFbc(e.getCookie("_fbc"))&&(t.fbc=e.getCookie("_fbc")),e.isFbAdvancedMatchingEnabled()&&null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&(t.external_id=wpmDataLayer.user.id),navigator.userAgent&&(t.client_user_agent=navigator.userAgent),t},e.isFbpSet=()=>!!e.getCookie("_fbp"),e.isValidFbp=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.\d{8,20}$/).test(e),e.isValidFbc=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.[\da-zA-Z_-]{8,}/).test(e),e.fbGetProductDataForCapiEvent=e=>({content_type:"product",content_name:e.name,content_ids:[e.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]],value:parseFloat(e.quantity*e.price),currency:e.currency}),e.facebookContentIds=()=>{let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?e.push(String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])):e.push(String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))}return e},e.trackCustomFacebookEvent=function(t){let o=arguments.length>1&&arguments[1]!==a?arguments[1]:{};try{var r,n,i;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.facebook)||void 0===i||!i.loaded)return;let a=e.getFbRandomEventId();fbq("trackCustom",t,o,{eventID:a}),jQuery(document).trigger("wpmFbCapiEvent",{event_name:t,event_id:a,user_data:e.getFbUserData(),event_source_url:window.location.href,custom_data:o})}catch(e){console.error(e)}},e.fbGetContentIdsFromCart=()=>{let e=[];for(const t in wpmDataLayer.cart)e.push(wpmDataLayer.products[t].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]);return e}}(window.wpm=window.wpm||{},jQuery)},12:(e,t,a)=>{a(1),a(164)},165:()=>{jQuery(document).on("wpmViewItemList",(function(e,t){try{var a,o,r,n,i,d,l,s,c,u,p,m,g;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(d=i.pixels)||void 0===d||null===(l=d.google)||void 0===l||null===(s=l.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;if(null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.general)&&void 0!==p&&p.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;if(!t)return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.user)&&void 0!==g&&g.id&&(e.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","view_item_list",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmAddToCart",(function(e,t){try{var a,o,r,n,i,d,l,s,c,u,p;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(d=i.pixels)||void 0===d||null===(l=d.google)||void 0===l||null===(s=l.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:t.quantity*t.price,items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.user)&&void 0!==p&&p.id&&(e.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","add_to_cart",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmViewItem",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;try{var a,o,r,n,i,d,l,s,c,u,p;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(d=i.pixels)||void 0===d||null===(l=d.google)||void 0===l||null===(s=l.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers()};t&&(e.value=(t.quantity?t.quantity:1)*t.price,e.items=[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity?t.quantity:1,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]),null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.user)&&void 0!==p&&p.id&&(e.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","view_item",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmSearch",(function(){try{var e,t,a,o,r,n,i,d,l,s,c;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(d=i.ads)||void 0===d||null===(l=d.dynamic_remarketing)||void 0===l||!l.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let m=[];for(const[e,t]of Object.entries(wpmDataLayer.products)){var u,p;if(null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.general)&&void 0!==p&&p.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;m.push({id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical})}let g={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:m};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&c.id&&(g.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","view_search_results",g)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,d,l,s,c;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(d=i.ads)||void 0===d||null===(l=d.dynamic_remarketing)||void 0===l||!l.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let u={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:wpmDataLayer.order.value_filtered,items:wpm.getGoogleAdsDynamicRemarketingOrderItems()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&c.id&&(u.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","purchase",u)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmLogin",(function(){try{var e,t,a,o,r,n,i,d,l,s,c;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(d=i.ads)||void 0===d||null===(l=d.dynamic_remarketing)||void 0===l||!l.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let u={send_to:wpm.getGoogleAdsConversionIdentifiers()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&c.id&&(u.user_id=wpmDataLayer.user.id),wpm.gtagLoaded().then((function(){gtag("event","login",u)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n;if(jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel()))return;if(!wpm.googleConfigConditionsMet("ads"))return;let i={},d={};i={send_to:wpm.getGoogleAdsConversionIdentifiersWithLabel(),transaction_id:wpmDataLayer.order.number,value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,new_customer:wpmDataLayer.order.new_customer},null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.order)&&void 0!==t&&t.clv_order_value_filtered&&(i.customer_lifetime_value=wpmDataLayer.order.clv_order_value_filtered),null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&(i.user_id=wpmDataLayer.user.id),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.order)&&void 0!==n&&n.aw_merchant_id&&(d={discount:wpmDataLayer.order.discount,aw_merchant_id:wpmDataLayer.order.aw_merchant_id,aw_feed_country:wpmDataLayer.order.aw_feed_country,aw_feed_language:wpmDataLayer.order.aw_feed_language,items:wpm.getGoogleAdsRegularOrderItems()}),wpm.gtagLoaded().then((function(){gtag("event","conversion",{...i,...d})}))}catch(e){console.error(e)}}))},42:()=>{!function(e,t,a){e.getGoogleAdsConversionIdentifiersWithLabel=function(){var e,t,a,o;let r=[];if(null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.ads)&&void 0!==o&&o.conversionIds)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))t&&r.push(e+"/"+t);return r},e.getGoogleAdsConversionIdentifiers=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))e.push(t);return e},e.getGoogleAdsRegularOrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o)):(o.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o))}return e},e.getGoogleAdsDynamicRemarketingOrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o)):(o.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o))}return e}}(window.wpm=window.wpm||{},jQuery)},190:(e,t,a)=>{a(42),a(165)},625:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,d,l,s;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.analytics)||void 0===o||null===(r=o.universal)||void 0===r||!r.property_id)return;if(null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.google)&&void 0!==d&&null!==(l=d.analytics)&&void 0!==l&&null!==(s=l.universal)&&void 0!==s&&s.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.universal.property_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGAUAOrderItems()})}))}catch(e){console.error(e)}}))},19:()=>{!function(e,t,a){e.getGAUAOrderItems=function(){let t=[];for(const[r,n]of Object.entries(wpmDataLayer.order.items)){var a,o;let r;r={quantity:n.quantity,price:n.price,name:n.name,currency:wpmDataLayer.order.currency,category:wpmDataLayer.products[n.id].category.join("/")},null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.general)&&void 0!==o&&o.variationsOutput&&0!==n.variation_id?(r.id=String(wpmDataLayer.products[n.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),r.variant=wpmDataLayer.products[n.variation_id].variant_name,r.brand=wpmDataLayer.products[n.variation_id].brand):(r.id=String(wpmDataLayer.products[n.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),r.brand=wpmDataLayer.products[n.id].brand),r=e.ga3AddListNameToProduct(r),t.push(r)}return t},e.ga3AddListNameToProduct=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null;return e.list_name=wpmDataLayer.shop.list_name,t&&(e.list_position=t),e}}(window.wpm=window.wpm||{},jQuery)},562:(e,t,a)=>{a(19),a(625)},572:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,d,l,s;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.analytics)||void 0===o||null===(r=o.ga4)||void 0===r||!r.measurement_id)return;if(null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.google)&&void 0!==d&&null!==(l=d.analytics)&&void 0!==l&&null!==(s=l.ga4)&&void 0!==s&&s.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.ga4.measurement_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGA4OrderItems()})}))}catch(e){console.error(e)}}))},228:()=>{!function(e,t,a){e.getGA4OrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price,item_name:r.name,currency:wpmDataLayer.order.currency,item_category:wpmDataLayer.products[r.id].category.join("/")},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.item_id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),o.item_variant=wpmDataLayer.products[r.variation_id].variant_name,o.item_brand=wpmDataLayer.products[r.variation_id].brand):(o.item_id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),o.item_brand=wpmDataLayer.products[r.id].brand),e.push(o)}return e}}(window.wpm=window.wpm||{},jQuery)},522:(e,t,a)=>{a(228),a(572)},774:(e,t,a)=>{a(562),a(522)},294:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a;void 0===(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a?void 0:a.state)&&(wpm.canGoogleLoad()?wpm.loadGoogle():wpm.logPreventedPixelLoading("google","analytics / ads"))}))},860:()=>{!function(e,t,a){e.googleConfigConditionsMet=function(t){var a,o,r,n;return!(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.consent_mode)||void 0===n||!n.active)||("category"===e.getConsentValues().mode?!0===e.getConsentValues().categories[t]:"pixel"===e.getConsentValues().mode&&e.getConsentValues().pixels.includes("google-"+t))},e.getVisitorConsentStatusAndUpdateGoogleConsentSettings=function(t){return"category"===e.getConsentValues().mode?(e.getConsentValues().categories.analytics&&(t.analytics_storage="granted"),e.getConsentValues().categories.ads&&(t.ad_storage="granted")):"pixel"===e.getConsentValues().mode&&(t.analytics_storage=e.getConsentValues().pixels.includes("google-analytics")?"granted":"denied",t.ad_storage=e.getConsentValues().pixels.includes("google-ads")?"granted":"denied"),t},e.updateGoogleConsentMode=function(){let e=!(arguments.length>0&&arguments[0]!==a)||arguments[0],t=!(arguments.length>1&&arguments[1]!==a)||arguments[1];try{if(!window.gtag||!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent)return;gtag("consent","update",{analytics_storage:e?"granted":"denied",ad_storage:t?"granted":"denied"})}catch(e){console.error(e)}},e.fireGtagGoogleAds=function(){try{var e,t,a,o,r,n,i,d,l,s,c,u,p,m,g,y,w,v,_,f,h,L,D;if(wpmDataLayer.pixels.google.ads.state="loading",null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.ads)&&void 0!==o&&null!==(r=o.enhanced_conversions)&&void 0!==r&&r.active)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e,{allow_enhanced_conversions:!0});else for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e);null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.google)&&void 0!==d&&null!==(l=d.ads)&&void 0!==l&&l.conversionIds&&null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.pixels)&&void 0!==c&&null!==(u=c.google)&&void 0!==u&&null!==(p=u.ads)&&void 0!==p&&p.phone_conversion_label&&null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.pixels)&&void 0!==g&&null!==(y=g.google)&&void 0!==y&&null!==(w=y.ads)&&void 0!==w&&w.phone_conversion_number&>ag("config",Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]+"/"+wpmDataLayer.pixels.google.ads.phone_conversion_label,{phone_conversion_number:wpmDataLayer.pixels.google.ads.phone_conversion_number}),null!==(v=wpmDataLayer)&&void 0!==v&&null!==(_=v.shop)&&void 0!==_&&_.page_type&&"order_received_page"===wpmDataLayer.shop.page_type&&null!==(f=wpmDataLayer)&&void 0!==f&&null!==(h=f.order)&&void 0!==h&&null!==(L=h.google)&&void 0!==L&&null!==(D=L.ads)&&void 0!==D&&D.enhanced_conversion_data&>ag("set","user_data",wpmDataLayer.order.google.ads.enhanced_conversion_data),wpmDataLayer.pixels.google.ads.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsUA=function(){try{wpmDataLayer.pixels.google.analytics.universal.state="loading",gtag("config",wpmDataLayer.pixels.google.analytics.universal.property_id,wpmDataLayer.pixels.google.analytics.universal.parameters),wpmDataLayer.pixels.google.analytics.universal.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsGA4=function(){try{var e,t,a,o,r;wpmDataLayer.pixels.google.analytics.ga4.state="loading";let n=wpmDataLayer.pixels.google.analytics.ga4.parameters;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.ga4)&&void 0!==r&&r.debug_mode&&(n.debug_mode=!0),gtag("config",wpmDataLayer.pixels.google.analytics.ga4.measurement_id,n),wpmDataLayer.pixels.google.analytics.ga4.state="ready"}catch(e){console.error(e)}},e.isGoogleActive=function(){var e,t,a,o,r,n,i,d,l,s,c,u,p,m;return!(!(null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.universal)&&void 0!==r&&r.property_id||null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.google)&&void 0!==d&&null!==(l=d.analytics)&&void 0!==l&&null!==(s=l.ga4)&&void 0!==s&&s.measurement_id)&&jQuery.isEmptyObject(null===(c=wpmDataLayer)||void 0===c||null===(u=c.pixels)||void 0===u||null===(p=u.google)||void 0===p||null===(m=p.ads)||void 0===m?void 0:m.conversionIds))},e.getGoogleGtagId=function(){var e,t,a,o,r,n,i,d,l,s;return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.universal)&&void 0!==r&&r.property_id?wpmDataLayer.pixels.google.analytics.universal.property_id:null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.google)&&void 0!==d&&null!==(l=d.analytics)&&void 0!==l&&null!==(s=l.ga4)&&void 0!==s&&s.measurement_id?wpmDataLayer.pixels.google.analytics.ga4.measurement_id:Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]},e.loadGoogle=function(){e.isGoogleActive()&&(wpmDataLayer.pixels.google.state="loading",e.loadScriptAndCacheIt("https://www.googletagmanager.com/gtag/js?id="+e.getGoogleGtagId()).then((function(t,a){try{var o,r,n,i,d,l,s,c,u,p,m,g,y,w,v,_,f,h,L,D,k,b;if(window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.google)&&void 0!==n&&null!==(i=n.consent_mode)&&void 0!==i&&i.active){var C,x,j,S;let t={ad_storage:wpmDataLayer.pixels.google.consent_mode.ad_storage,analytics_storage:wpmDataLayer.pixels.google.consent_mode.analytics_storage,wait_for_update:wpmDataLayer.pixels.google.consent_mode.wait_for_update};null!==(C=wpmDataLayer)&&void 0!==C&&null!==(x=C.pixels)&&void 0!==x&&null!==(j=x.google)&&void 0!==j&&null!==(S=j.consent_mode)&&void 0!==S&&S.region&&(t.region=wpmDataLayer.pixels.google.consent_mode.region),t=e.getVisitorConsentStatusAndUpdateGoogleConsentSettings(t),gtag("consent","default",t),gtag("set","ads_data_redaction",wpmDataLayer.pixels.google.consent_mode.ads_data_redaction),gtag("set","url_passthrough",wpmDataLayer.pixels.google.consent_mode.url_passthrough)}null!==(d=wpmDataLayer)&&void 0!==d&&null!==(l=d.pixels)&&void 0!==l&&null!==(s=l.google)&&void 0!==s&&null!==(c=s.linker)&&void 0!==c&&c.settings&>ag("set","linker",wpmDataLayer.pixels.google.linker.settings),gtag("js",new Date),jQuery.isEmptyObject(null===(u=wpmDataLayer)||void 0===u||null===(p=u.pixels)||void 0===p||null===(m=p.google)||void 0===m||null===(g=m.ads)||void 0===g?void 0:g.conversionIds)||(e.googleConfigConditionsMet("ads")?e.fireGtagGoogleAds():e.logPreventedPixelLoading("google-ads","ads")),null!==(y=wpmDataLayer)&&void 0!==y&&null!==(w=y.pixels)&&void 0!==w&&null!==(v=w.google)&&void 0!==v&&null!==(_=v.analytics)&&void 0!==_&&null!==(f=_.universal)&&void 0!==f&&f.property_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsUA():e.logPreventedPixelLoading("google-universal-analytics","analytics")),null!==(h=wpmDataLayer)&&void 0!==h&&null!==(L=h.pixels)&&void 0!==L&&null!==(D=L.google)&&void 0!==D&&null!==(k=D.analytics)&&void 0!==k&&null!==(b=k.ga4)&&void 0!==b&&b.measurement_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsGA4():e.logPreventedPixelLoading("ga4","analytics")),wpmDataLayer.pixels.google.state="ready"}catch(e){console.error(e)}})))},e.canGoogleLoad=function(){var t,a,o,r;return!(null===(t=wpmDataLayer)||void 0===t||null===(a=t.pixels)||void 0===a||null===(o=a.google)||void 0===o||null===(r=o.consent_mode)||void 0===r||!r.active)||("category"===e.getConsentValues().mode?!(!e.getConsentValues().categories.ads&&!e.getConsentValues().categories.analytics):"pixel"===e.getConsentValues().mode?e.getConsentValues().pixels.includes("google-ads")||e.getConsentValues().pixels.includes("google-analytics"):(console.error("Couldn't find a valid load condition for Google mode in wpmConsentValues"),!1))},e.gtagLoaded=function(){return new Promise((function(e,t){var a,o,r;void 0===(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r?void 0:r.state)&&t();let n=0;!function a(){var o,r,i;return"ready"===(null===(o=wpmDataLayer)||void 0===o||null===(r=o.pixels)||void 0===r||null===(i=r.google)||void 0===i?void 0:i.state)?e():n>=5e3?t():(n+=200,void setTimeout(a,200))}()}))}}(window.wpm=window.wpm||{},jQuery)},580:(e,t,a)=>{a(860),a(294)},69:(e,t,a)=>{a(580),a(190),a(774),a(463)},945:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a,o,r,n,i,d;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.optimize)||void 0===o||!o.container_id||null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.pixels)&&void 0!==n&&null!==(i=n.google)&&void 0!==i&&null!==(d=i.optimize)&&void 0!==d&&d.loaded||wpm.canIFire("analytics","google-optimize")&&wpm.load_google_optimize_pixel()}))},962:()=>{!function(e,t,a){e.load_google_optimize_pixel=function(){try{wpmDataLayer.pixels.google.optimize.loaded=!0,e.loadScriptAndCacheIt("https://www.googleoptimize.com/optimize.js?id="+wpmDataLayer.pixels.google.optimize.container_id)}catch(e){console.error(e)}}}(window.wpm=window.wpm||{},jQuery)},463:(e,t,a)=>{a(962),a(945)},300:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a,o,r,n,i,d,l;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.hotjar)||void 0===a||!a.site_id||null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.hotjar)&&void 0!==n&&n.loaded||!wpm.canIFire("analytics","hotjar")||null!==(i=wpmDataLayer)&&void 0!==i&&null!==(d=i.pixels)&&void 0!==d&&null!==(l=d.hotjar)&&void 0!==l&&l.loaded||wpm.load_hotjar_pixel()}))},376:()=>{!function(e,t,a){e.load_hotjar_pixel=function(){try{wpmDataLayer.pixels.hotjar.loaded=!0,e=window,t=document,e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6},a=t.getElementsByTagName("head")[0],(o=t.createElement("script")).async=1,o.src="https://static.hotjar.com/c/hotjar-"+e._hjSettings.hjid+".js?sv="+e._hjSettings.hjsv,a.appendChild(o)}catch(e){console.error(e)}var e,t,a,o}}(window.wpm=window.wpm||{},jQuery)},787:(e,t,a)=>{a(376),a(300)},473:()=>{!function(e,t,a){let o=()=>{let t=e.getCookie("cmplz_statistics"),a=e.getCookie("cmplz_marketing");return!(!e.getCookie("cmplz_consent_status")&&!e.getCookie("cmplz_banner-status"))&&{analytics:"allow"===t,ads:"allow"===a,visitorHasChosen:!0}},r=()=>{let t=e.getCookie("cookielawinfo-checkbox-analytics")||e.getCookie("cookielawinfo-checkbox-analytiques"),a=e.getCookie("cookielawinfo-checkbox-advertisement")||e.getCookie("cookielawinfo-checkbox-performance")||e.getCookie("cookielawinfo-checkbox-publicite"),o=e.getCookie("CookieLawInfoConsent");return!(!t&&!a)&&{analytics:"yes"===t,ads:"yes"===a,visitorHasChosen:!!o}},n={categories:{},pixels:[],mode:"category",visitorHasChosen:!1};e.getConsentValues=()=>n,e.setConsentValueCategories=function(){let e=arguments.length>0&&arguments[0]!==a&&arguments[0],t=arguments.length>1&&arguments[1]!==a&&arguments[1];n.categories.analytics=e,n.categories.ads=t},e.updateConsentCookieValues=function(){let t,i=arguments.length>0&&arguments[0]!==a?arguments[0]:null,d=arguments.length>1&&arguments[1]!==a?arguments[1]:null,l=arguments.length>2&&arguments[2]!==a&&arguments[2];if(n.categories.analytics=!l,n.categories.ads=!l,i||d)return i&&(n.categories.analytics=!!i),void(d&&(n.categories.ads=!!d));if(t=e.getCookie("pmw_cookie_consent"))return t=JSON.parse(t),n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieConsent"))return t=decodeURI(t),n.categories.analytics=t.indexOf("statistics:true")>=0,n.categories.ads=t.indexOf("marketing:true")>=0,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieScriptConsent"))return t=JSON.parse(t),"reject"===t.action?(n.categories.analytics=!1,n.categories.ads=!1):2===t.categories.length?(n.categories.analytics=!0,n.categories.ads=!0):(n.categories.analytics=t.categories.indexOf("performance")>=0,n.categories.ads=t.categories.indexOf("targeting")>=0),void(n.visitorHasChosen=!0);var s,c,u,p,m,g,y,w;if(t=e.getCookie("borlabs-cookie"))return t=decodeURI(t),t=JSON.parse(t),n.categories.analytics=!(null===(s=t)||void 0===s||null===(c=s.consents)||void 0===c||!c.statistics),n.categories.ads=!(null===(u=t)||void 0===u||null===(p=u.consents)||void 0===p||!p.marketing),n.visitorHasChosen=!0,n.pixels=[...(null===(m=t)||void 0===m||null===(g=m.consents)||void 0===g?void 0:g.statistics)||[],...(null===(y=t)||void 0===y||null===(w=y.consents)||void 0===w?void 0:w.marketing)||[]],void(n.mode="pixel");if(t=o())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=t.visitorHasChosen);if(t=e.getCookie("cookie_notice_accepted"))return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);if(t=e.getCookie("hu-consent"))return t=JSON.parse(t),n.categories.analytics=!!t.categories[3],n.categories.ads=!!t.categories[4],void(n.visitorHasChosen=!0);if(t=r())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0===t.visitorHasChosen);if(t=e.getCookie("moove_gdpr_popup"))return t=JSON.parse(t),n.categories.analytics="1"===t.thirdparty,n.categories.ads="1"===t.advanced,void(n.visitorHasChosen=!0);if(t=e.getCookie("wpautoterms-cookies-notice")){if("1"!==t)return;return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0)}if(window.localStorage&&window.localStorage.getItem("uc_settings")){if(console.log("Usercentrics settings detected"),"undefined"==typeof UC_UI)return void window.addEventListener("UC_UI_INITIALIZED",(function(t){e.ucUiProcessConsent()}));if(UC_UI.areAllConsentsAccepted())return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);e.ucUiProcessConsent()}if(t=e.getCookie("OptanonConsent")){let e=new URLSearchParams(t).get("groups").split(","),a={};return e.forEach((e=>{let t=e.split(":");a[t[0]]=t[1]})),n.categories.analytics="1"===groubsObject[2],n.categories.ads="1"===a[4],void(n.visitorHasChosen=!0)}},e.ucUiProcessConsent=function(){if("undefined"==typeof UC_UI)return;UC_UI.areAllConsentsAccepted()&&pmw.consentAcceptAll();const e=UC_UI.getSettingsLabels().categories.filter((e=>"Statistics"===e.label))[0].slug;pmw.consentAdjustSelectively({analytics:!UC_UI.getServicesBaseInfo().filter((t=>t.categorySlug===e&&!1===t.consent.status)).length>0,ads:!UC_UI.getServicesBaseInfo().filter((e=>"marketing"===e.categorySlug&&!1===e.consent.status)).length>0})},e.updateConsentCookieValues(),e.setConsentDefaultValuesToExplicit=()=>{n.categories={analytics:!1,ads:!1}},e.canIFire=(t,a)=>{let o;return"category"===n.mode?o=!!n.categories[t]:"pixel"===n.mode?(o=n.pixels.includes(a),!1===o&&"microsoft-ads"===a&&(o=n.pixels.includes("bing-ads"))):(console.error("Couldn't find a valid consent mode in wpmConsentValues"),o=!1),!!o||(e.logPreventedPixelLoading(a,t),!1)},e.logPreventedPixelLoading=(e,t)=>{var a,o,r;null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.shop)&&void 0!==o&&null!==(r=o.cookie_consent_mgmt)&&void 0!==r&&r.explicit_consent?console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)'):console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)')},e.scriptTagObserver=new MutationObserver((a=>{a.forEach((a=>{let{addedNodes:o}=a;[...o].forEach((a=>{t(a).data("wpm-cookie-category")&&(e.shouldScriptBeActive(a)?e.unblockScript(a):e.blockScript(a))}))}))})),e.scriptTagObserver.observe(document.head,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",(()=>e.scriptTagObserver.disconnect())),e.shouldScriptBeActive=e=>{var a,o,r,i;return!((wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent||n.visitorHasChosen)&&("category"!==n.mode||!t(e).data("wpm-cookie-category").split(",").some((e=>n.categories[e])))&&("pixel"!==n.mode||!n.pixels.includes(t(e).data("wpm-pixel-name")))&&("pixel"!==n.mode||"google"!==t(e).data("wpm-pixel-name")||!["google-analytics","google-ads"].some((e=>n.pixels.includes(e))))&&(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(i=r.consent_mode)||void 0===i||!i.active||"google"!==t(e).data("wpm-pixel-name")))},e.unblockScript=function(e){let o=arguments.length>1&&arguments[1]!==a&&arguments[1];o&&t(e).remove();let r=t(e).data("wpm-src");r&&t(e).attr("src",r),e.type="text/javascript",o&&t(e).appendTo("head"),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.blockScript=function(e){let o=arguments.length>1&&arguments[1]!==a&&arguments[1];o&&t(e).remove(),t(e).attr("src")&&t(e).removeAttr("src"),e.type="blocked/javascript",o&&t(e).appendTo("head")},e.unblockAllScripts=function(){let t=!(arguments.length>0&&arguments[0]!==a)||arguments[0],o=!(arguments.length>1&&arguments[1]!==a)||arguments[1];e.setConsentValueCategories(t,o),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.unblockSelectedPixels=()=>{document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.explicitConsentStateAlreadySet=()=>{if(n.explicitConsentStateAlreadySet)return!0;n.explicitConsentStateAlreadySet=!0},document.addEventListener("borlabs-cookie-consent-saved",(()=>{e.updateConsentCookieValues(),"pixel"===n.mode?(e.unblockSelectedPixels(),e.updateGoogleConsentMode(n.pixels.includes("google-analytics"),n.pixels.includes("google-ads"))):(e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads))})),document.addEventListener("CookiebotOnAccept",(()=>{Cookiebot.consent.statistics&&(n.categories.analytics=!0),Cookiebot.consent.marketing&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}),!1),document.addEventListener("CookieScriptAccept",(t=>{t.detail.categories.includes("performance")&&(n.categories.analytics=!0),t.detail.categories.includes("targeting")&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),document.addEventListener("CookieScriptAcceptAll",(()=>{e.setConsentValueCategories(!0,!0),e.unblockAllScripts(!0,!0),e.updateGoogleConsentMode(!0,!0)})),e.cmplzStatusChange=t=>{t.detail.categories.includes("statistics")&&e.updateConsentCookieValues(!0,null),t.detail.categories.includes("marketing")&&e.updateConsentCookieValues(null,!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)},document.addEventListener("cmplzStatusChange",e.cmplzStatusChange),document.addEventListener("cmplz_status_change",e.cmplzStatusChange),document.addEventListener("setCookieNotice",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),e.huObserver=new MutationObserver((t=>{t.forEach((t=>{let{addedNodes:a}=t;[...a].forEach((t=>{"hu"===t.id&&document.querySelector(".hu-cookies-save").addEventListener("click",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}))}))}))})),window.hu&&e.huObserver.observe(document.documentElement||document.body,{childList:!0,subtree:!0}),window.addEventListener("ucEvent",(function(e){e.detail&&"consent_status"==e.detail.event&&(!0===e.detail["Google Ads Remarketing"]?console.log("Google Ads Remarketing has consent"):console.log("Google Ads Remarketing has no consent"))})),window.addEventListener("UC_UI_CMP_EVENT",(function(e){"ACCEPT_ALL"===e.detail.type&&pmw.consentAcceptAll(),"DENY_ALL"===e.detail.type&&pmw.consentRevokeAll(),"SAVE"===e.detail.type&&console.log("event.detail",e.detail)})),jQuery("#accept-recommended-btn-handler, #onetrust-accept-btn-handler").on("click",(function(){void 0!==window.OneTrust&&pmw.consentAcceptAll()})),jQuery(".ot-pc-refuse-all-handler, #onetrust-reject-all-handler").on("click",(function(){pmw.consentRevokeAll()})),jQuery(".save-preference-btn-handler.onetrust-close-btn-handler").on("click",(function(){location.reload()}))}(window.wpm=window.wpm||{},jQuery),function(e,t,a){e.consentAcceptAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,e.consentSetCookie(!0,!0,t.duration),wpm.unblockAllScripts(!0,!0),wpm.updateGoogleConsentMode(!0,!0)},e.consentAdjustSelectively=t=>{t.analytics=t.analytics!==a?t.analytics:wpm.getConsentValues().categories.analytics,t.ads=t.ads!==a?t.ads:wpm.getConsentValues().categories.ads,t.duration=t.duration||365,e.consentSetCookie(t.analytics,t.ads,t.duration),wpm.unblockAllScripts(t.analytics,t.ads),wpm.updateGoogleConsentMode(t.analytics,t.ads)},e.consentRevokeAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,wpm.setConsentValueCategories(!1,!1),e.consentSetCookie(!1,!1,t.duration),wpm.updateGoogleConsentMode(!1,!1)},e.consentSetCookie=function(e,t){let o=arguments.length>2&&arguments[2]!==a?arguments[2]:365;wpm.setCookie("pmw_cookie_consent",JSON.stringify({analytics:e,ads:t}),o)},jQuery(document).trigger("pmw_cookie_consent_management_loaded")}(window.pmw=window.pmw||{},jQuery)},299:()=>{jQuery(document).on("click",".remove_from_cart_button, .remove",(e=>{try{let t=new URL(jQuery(e.currentTarget).attr("href")),a=wpm.getProductIdByCartItemKeyUrl(t);wpm.removeProductFromCart(a)}catch(e){console.error(e)}}));let e=[".checkout-button",".cart-checkout-button",".button.checkout",".xoo-wsc-ft-btn-checkout",".elementor-button--checkout"].join(",");jQuery(document).on("click init_checkout",e,(()=>{jQuery(document).trigger("wpmBeginCheckout")})),jQuery(document).on("updated_cart_totals",(()=>{jQuery(document).trigger("wpmViewCart")})),jQuery(document).on("wpmLoad",(e=>{jQuery(document).on("payment_method_selected",(()=>{!1===wpm.paymentMethodSelected&&wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val()),wpm.paymentMethodSelected=!0}))})),jQuery(document).on("wpmLoad",(()=>{try{wpm.doesWooCommerceCartExist()&&wpm.getCartItems()}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(()=>{wpmDataLayer.products=wpmDataLayer.products||{};let e=wpm.getAddToCartLinkProductIds();wpm.getProductsFromBackend(e)})),jQuery(document).on("wpmLoad",(()=>{if(!wpm.getCookie("wpmReferrer")&&document.referrer){let e=new URL(document.referrer).hostname;e!==window.location.host&&wpm.setCookie("wpmReferrer",e)}})),jQuery(document).on("wpmLoad",(()=>{try{var e;if("undefined"!=typeof wpmDataLayer&&(null===(e=wpmDataLayer)||void 0===e||!e.wpmLoadFired)){var t,a,o;if(jQuery(document).trigger("wpmLoadAlways"),null!==(t=wpmDataLayer)&&void 0!==t&&t.shop)if("product"===wpmDataLayer.shop.page_type&&"variable"!==wpmDataLayer.shop.product_type&&wpm.getMainProductIdFromProductPage()){let e=wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage());jQuery(document).trigger("wpmViewItem",e)}else"product_category"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmCategory"):"search"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmSearch"):"cart"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmViewCart"):"order_received_page"===wpmDataLayer.shop.page_type&&wpmDataLayer.order?wpm.isOrderIdStored(wpmDataLayer.order.id)||(jQuery(document).trigger("wpmOrderReceivedPage"),wpm.writeOrderIdToStorage(wpmDataLayer.order.id),"function"==typeof wpm.acrRemoveCookie&&wpm.acrRemoveCookie()):jQuery(document).trigger("wpmEverywhereElse");else jQuery(document).trigger("wpmEverywhereElse");null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&!wpm.hasLoginEventFired()&&(jQuery(document).trigger("wpmLogin"),wpm.setLoginEventFired()),wpmDataLayer.wpmLoadFired=!0}}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(async()=>{window.sessionStorage&&window.sessionStorage.getItem("_pmw_endpoint_available")&&!JSON.parse(window.sessionStorage.getItem("_pmw_endpoint_available"))&&console.error("Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.")})),jQuery(document).on("wpmPreLoadPixels",(()=>{var e,t,a;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.shop)&&void 0!==t&&null!==(a=t.cookie_consent_mgmt)&&void 0!==a&&a.explicit_consent&&!wpm.explicitConsentStateAlreadySet()&&wpm.updateConsentCookieValues(null,null,!0),jQuery(document).trigger("wpmLoadPixels",{})})),jQuery(document).on("wpmAddToCart",((e,t)=>{var a,o,r,n,i,d;let l={event:"addToCart",product:t};null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.pixels)&&void 0!==o&&null!==(r=o.facebook)&&void 0!==r&&r.loaded&&(l.facebook={event_name:"AddToCart",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.tiktok)&&void 0!==d&&d.loaded&&(l.tiktok={event:"AddToCart",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToCart",l),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(l)})),jQuery(document).on("wpmBeginCheckout",(()=>{var e,t,a,o,r,n;let i={event:"beginCheckout"};var d;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"InitiateCheckout",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},null!==(d=wpmDataLayer)&&void 0!==d&&d.cart&&!jQuery.isEmptyObject(wpmDataLayer.cart)&&(i.facebook.custom_data={content_type:"product",content_ids:wpm.fbGetContentIdsFromCart(),value:wpm.getCartValue(),currency:wpmDataLayer.shop.currency})),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"InitiateCheckout",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientSideBeginCheckout",i),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(i)})),jQuery(document).on("wpmAddToWishlist",((e,t)=>{var a,o,r,n,i,d;let l={event:"addToWishlist",product:t};null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.pixels)&&void 0!==o&&null!==(r=o.facebook)&&void 0!==r&&r.loaded&&(l.facebook={event_name:"AddToWishlist",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(d=i.tiktok)&&void 0!==d&&d.loaded&&(l.tiktok={event:"AddToWishlist",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToWishlist",l),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(l)})),jQuery(document).on("wpmViewItem",(function(e){var t,a,o,r,n,i;let d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,l={event:"viewItem",product:d};null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.pixels)&&void 0!==a&&null!==(o=a.facebook)&&void 0!==o&&o.loaded&&(l.facebook={event_name:"ViewContent",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},d&&(l.facebook.custom_data=wpm.fbGetProductDataForCapiEvent(d))),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.pixels)&&void 0!==n&&null!==(i=n.tiktok)&&void 0!==i&&i.loaded&&(l.tiktok={event:"ViewContent",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()},d&&(l.tiktok.properties={value:d.price*d.quantity,currency:d.currency,contents:[{content_id:d.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:d.name,quantity:d.quantity,price:d.price}]})),jQuery(document).trigger("wpmClientSideViewItem",l),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(l)})),jQuery(document).on("wpmSearch",(()=>{var e,t,a,o,r,n;let i={event:"search"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"Search",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{search_string:wpm.getSearchTermFromUrl()}}),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"Search",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{query:wpm.getSearchTermFromUrl()}}),jQuery(document).trigger("wpmClientSideSearch",i),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(i)})),jQuery(document).on("wpmPlaceOrder",(()=>{var e,t,a;let o={event:"placeOrder"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.tiktok)&&void 0!==a&&a.loaded&&(o.tiktok={event:"PlaceAnOrder",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientPlaceOrder",o),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(o)})),jQuery(document).on("wpmOrderReceivedPage",(()=>{var e,t,a,o,r,n;let i={event:"orderReceived"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"Purchase",event_id:wpmDataLayer.order.id,user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{content_type:"product",value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,content_ids:wpm.facebookContentIds()}}),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"CompletePayment",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,contents:wpm.getTikTokOrderItemIds()}}),jQuery(document).trigger("wpmClientSideOrderReceivedPage",i)}))},459:()=>{const e=[".add_to_cart_button:not(.product_type_variable)",".ajax_add_to_cart",".single_add_to_cart_button"].join(",");jQuery(e).on("click adding_to_cart",(e=>{try{let t,a=1;"product"===wpmDataLayer.shop.page_type?(void 0!==jQuery(e.currentTarget).attr("href")&&jQuery(e.currentTarget).attr("href").includes("add-to-cart")&&(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a)),"simple"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery(e.currentTarget).val(),wpm.addProductToCart(t,a)),["variable","variable-subscription"].indexOf(wpmDataLayer.shop.product_type)>=0&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("[name='variation_id']").val(),wpm.addProductToCart(t,a)),"grouped"===wpmDataLayer.shop.product_type&&jQuery(".woocommerce-grouped-product-list-item").each(((e,o)=>{a=Number(jQuery(o).find(".input-text.qty").val()),a||0===a||(a=1);let r=jQuery(o).attr("class");t=wpm.getPostIdFromString(r),wpm.addProductToCart(t,a)})),"bundle"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("input[name=add-to-cart]").val(),wpm.addProductToCart(t,a))):(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a))}catch(e){console.error(e)}})),jQuery("a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)").one("click",(e=>{try{if(jQuery(e.target).closest("a").attr("href")){let t=new URL(jQuery(e.currentTarget).attr("href"),window.location.origin);if(t.searchParams.has("add-to-cart")){let e=t.searchParams.get("add-to-cart");wpm.addProductToCart(e,1)}}}catch(e){console.error(e)}})),jQuery(".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product").on("click",(e=>{try{let t=jQuery(e.currentTarget).nextAll(".wpmProductId:first").data("id");if(t){if(t=wpm.getIdBasedOndVariationsOutputSetting(t),!t)throw Error("Wasn't able to retrieve a productId");if(wpmDataLayer.products&&wpmDataLayer.products[t]){let e=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmSelectContentGaUa",e),jQuery(document).trigger("wpmSelectItem",e)}}}catch(e){console.error(e)}})),jQuery("#billing_email").on("input",(e=>{wpm.isEmail(jQuery(e.currentTarget).val())&&(wpm.fireCheckoutProgress(2),wpm.emailSelected=!0)})),jQuery("form.checkout").on("checkout_place_order_success",(()=>{!1===wpm.emailSelected&&wpm.fireCheckoutProgress(2),!1===wpm.paymentMethodSelected&&(wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val())),wpm.fireCheckoutProgress(4),jQuery(document).trigger("wpmPlaceOrder",{})})),jQuery("[name='update_cart']").on("click",(()=>{try{jQuery(".cart_item").each(((e,t)=>{let a=new URL(jQuery(t).find(".product-remove").find("a").attr("href")),o=wpm.getProductIdByCartItemKeyUrl(a),r=jQuery(t).find(".qty").val();0===r?wpm.removeProductFromCart(o):r<wpmDataLayer.cart[o].quantity?wpm.removeProductFromCart(o,wpmDataLayer.cart[o].quantity-r):r>wpmDataLayer.cart[o].quantity&&wpm.addProductToCart(o,r-wpmDataLayer.cart[o].quantity)}))}catch(e){console.error(e),wpm.getCartItemsFromBackend()}})),jQuery(".add_to_wishlist,.wl-add-to").on("click",(e=>{try{let t;if(jQuery(e.currentTarget).data("productid")?t=jQuery(e.currentTarget).data("productid"):jQuery(e.currentTarget).data("product-id")&&(t=jQuery(e.currentTarget).data("product-id")),!t)throw Error("Wasn't able to retrieve a productId");let a=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmAddToWishlist",a)}catch(e){console.error(e)}})),jQuery(".single_variation_wrap").on("show_variation",((e,t)=>{try{let e=wpm.getIdBasedOndVariationsOutputSetting(t.variation_id);if(!e)throw Error("Wasn't able to retrieve a productId");wpm.triggerViewItemEventPrep(e)}catch(e){console.error(e)}}))},584:()=>{!function(e,t,a){const o="_wpm_order_ids",r="_pmw_endpoint_available",n="pmw/v1/test/";function i(){return""!==e.getCookie(o)}e.emailSelected=!1,e.paymentMethodSelected=!1,e.useRestEndpoint=()=>e.isSessionStorageAvailable()&&e.isRestEndpointAvailable()&&e.isBelowRestErrorThreshold(),e.isBelowRestErrorThreshold=()=>window.sessionStorage.getItem(0)<=10,e.isRestEndpointAvailable=async()=>window.sessionStorage.getItem(r)?JSON.parse(window.sessionStorage.getItem(r)):await e.testEndpoint(),e.isSessionStorageAvailable=()=>!!window.sessionStorage,e.testEndpoint=async function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:e.root+n,o=arguments.length>1&&arguments[1]!==a?arguments[1]:r,i=await fetch(t,{method:"POST",mode:"cors",cache:"no-cache",keepalive:!0});return 200===i.status?(window.sessionStorage.setItem(o,JSON.stringify(!0)),!0):404===i.status||0===i.status?(window.sessionStorage.setItem(o,JSON.stringify(!1)),!1):void 0},e.isWpmRestEndpointAvailable=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:r;return!!e.getCookie(t)},e.writeOrderIdToStorage=function(t){let r=arguments.length>1&&arguments[1]!==a?arguments[1]:"thankyou_page";if(window.Storage)if(null===localStorage.getItem(o)){let e=[];e.push(t),window.localStorage.setItem(o,JSON.stringify(e))}else{let e=JSON.parse(localStorage.getItem(o));e.includes(t)||(e.push(t),window.localStorage.setItem(o,JSON.stringify(e)))}else{let a=new Date;a.setDate(a.getDate()+365);let r=[];i()&&(r=JSON.parse(e.getCookie(o))),r.includes(t)||(r.push(t),document.cookie="_wpm_order_ids="+JSON.stringify(r)+";expires="+a.toUTCString())}"function"==typeof e.storeOrderIdOnServer&&wpmDataLayer.orderDeduplication&&e.storeOrderIdOnServer(t,r)},e.isOrderIdStored=t=>wpmDataLayer.orderDeduplication?window.Storage?null!==localStorage.getItem(o)&&JSON.parse(localStorage.getItem(o)).includes(t):!!i()&&JSON.parse(e.getCookie(o)).includes(t):(console.log("order duplication prevention: off"),!1),e.isEmail=e=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),e.removeProductFromCart=function(t){let o=arguments.length>1&&arguments[1]!==a?arguments[1]:null;try{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");let a;if(a=null==o?wpmDataLayer.cart[t].quantity:o,wpmDataLayer.cart[t]){let r=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmRemoveFromCart",r),null==o||wpmDataLayer.cart[t].quantity===o?(delete wpmDataLayer.cart[t],sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))):(wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity-a,sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart)))}}catch(e){console.error(e)}},e.getIdBasedOndVariationsOutputSetting=e=>{try{var t,a;return null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput?e:wpmDataLayer.products[e].isVariation?wpmDataLayer.products[e].parentId:e}catch(e){console.error(e)}},e.addProductToCart=(t,a)=>{try{var o;if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");if(null!==(o=wpmDataLayer)&&void 0!==o&&o.products[t]){var r;let o=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmAddToCart",o),null!==(r=wpmDataLayer)&&void 0!==r&&r.cart[t]?wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity+a:("cart"in wpmDataLayer||(wpmDataLayer.cart={}),wpmDataLayer.cart[t]=e.getProductDetailsFormattedForEvent(t,a)),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))}}catch(t){console.error(t),e.getCartItemsFromBackend()}},e.getCartItems=()=>{sessionStorage?sessionStorage.getItem("wpmDataLayerCart")&&"order_received_page"!==wpmDataLayer.shop.page_type?e.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem("wpmDataLayerCart"))):sessionStorage.setItem("wpmDataLayerCart",JSON.stringify({})):e.getCartItemsFromBackend()},e.getCartItemsFromBackend=()=>{try{fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_cart_items"}),keepalive:!0}).then((e=>{if(e.ok)return e.json();throw Error("Error getting cart items from backend")})).then((t=>{if(!t.success)throw Error("Error getting cart items from backend");t.data.cart||(t.data.cart={}),e.saveCartObjectToDataLayer(t.data.cart),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(t.data.cart))}))}catch(e){console.error(e)}},e.getProductsFromBackend=async t=>{var a;if(null!==(a=wpmDataLayer)&&void 0!==a&&a.products&&(t=t.filter((e=>!(e in wpmDataLayer.products)))),t&&0!==t.length){try{let a;if(a=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/products/",{method:"POST",cache:"no-cache",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:wpmDataLayer.general.pageId,productIds:t})}):await fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_product_ids",productIds:t})}),a.ok){let e=await a.json();e.success&&(wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e.data))}else console.error("Error getting products from backend")}catch(e){console.error(e)}return!0}},e.saveCartObjectToDataLayer=e=>{wpmDataLayer.cart=e,wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e)},e.triggerViewItemEventPrep=async t=>{wpmDataLayer.products&&wpmDataLayer.products[t]||await e.getProductsFromBackend([t]),e.triggerViewItemEvent(t)},e.triggerViewItemEvent=t=>{let a=e.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmViewItem",a)},e.triggerViewItemEventNoProduct=()=>{jQuery(document).trigger("wpmViewItem")},e.fireCheckoutOption=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null,o=arguments.length>2&&arguments[2]!==a?arguments[2]:null,r={step:e,checkout_option:t,value:o};jQuery(document).trigger("wpmFireCheckoutOption",r)},e.fireCheckoutProgress=e=>{let t={step:e};jQuery(document).trigger("wpmFireCheckoutProgress",t)},e.getPostIdFromString=e=>{try{return e.match(/(post-)(\d+)/)[2]}catch(e){console.error(e)}},e.triggerViewItemList=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");jQuery(document).trigger("wpmViewItemList",e.getProductDataForViewItemEvent(t))},e.getProductDataForViewItemEvent=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");try{if(wpmDataLayer.products[t])return e.getProductDetailsFormattedForEvent(t)}catch(e){console.error(e)}},e.getMainProductIdFromProductPage=()=>{try{return["simple","variable","grouped","composite","bundle"].indexOf(wpmDataLayer.shop.product_type)>=0&&jQuery(".wpmProductId:first").data("id")}catch(e){console.error(e)}},e.viewItemListTriggerTestMode=e=>{jQuery(e).css({position:"relative"}),jQuery(e).append('<div id="viewItemListTriggerOverlay"></div>'),jQuery(e).find("#viewItemListTriggerOverlay").css({"z-index":"10",display:"block",position:"absolute",height:"100%",top:"0",left:"0",right:"0",opacity:wpmDataLayer.viewItemListTrigger.opacity,"background-color":wpmDataLayer.viewItemListTrigger.backgroundColor})},e.getSearchTermFromUrl=()=>{try{return new URLSearchParams(window.location.search).get("s")}catch(e){console.error(e)}};let d,l={};e.observerCallback=(t,a)=>{t.forEach((t=>{try{let o,r=jQuery(t.target).data("ioid");if(o=jQuery(t.target).next(".wpmProductId").length?jQuery(t.target).next(".wpmProductId").data("id"):jQuery(t.target).find(".wpmProductId").data("id"),!o)throw Error("wpmProductId element not found");t.isIntersecting?l[r]=setTimeout((()=>{e.triggerViewItemList(o),wpmDataLayer.viewItemListTrigger.testMode&&e.viewItemListTriggerTestMode(t.target),!1===wpmDataLayer.viewItemListTrigger.repeat&&a.unobserve(t.target)}),wpmDataLayer.viewItemListTrigger.timeout):(clearTimeout(l[r]),wpmDataLayer.viewItemListTrigger.testMode&&jQuery(t.target).find("#viewItemListTriggerOverlay").remove())}catch(e){console.error(e)}}))};let s,c=0,u=()=>{s=jQuery(".wpmProductId").map((function(e,t){return jQuery(t).parent().hasClass("type-product")||jQuery(t).parent().hasClass("product")||jQuery(t).parent().hasClass("product-item-inner")?jQuery(t).parent():jQuery(t).prev().hasClass("wc-block-grid__product")||jQuery(t).prev().hasClass("product")||jQuery(t).prev().hasClass("product-small")||jQuery(t).prev().hasClass("woocommerce-LoopProduct-link")?jQuery(this).prev():jQuery(t).closest(".product").length?jQuery(t).closest(".product"):void 0}))};e.startIntersectionObserverToWatch=()=>{try{e.urlHasParameter("vildemomode")&&(wpmDataLayer.viewItemListTrigger.testMode=!0),d=new IntersectionObserver(e.observerCallback,{threshold:wpmDataLayer.viewItemListTrigger.threshold}),u(),s.each(((e,t)=>{jQuery(t[0]).data("ioid",c++),d.observe(t[0])}))}catch(e){console.error(e)}},e.startProductsMutationObserverToWatch=()=>{try{let e=jQuery(".wpmProductId:eq(0)").parents().has(jQuery(".wpmProductId:eq(1)").parents()).first();e.length&&p.observe(e[0],{attributes:!0,childList:!0,characterData:!0})}catch(e){console.error(e)}};let p=new MutationObserver((e=>{e.forEach((e=>{let t=e.addedNodes;null!==t&&jQuery(t).each((function(){(jQuery(this).hasClass("type-product")||jQuery(this).hasClass("product-small")||jQuery(this).hasClass("wc-block-grid__product"))&&m(this)&&(jQuery(this).data("ioid",c++),d.observe(this))}))}))})),m=e=>!(!jQuery(e).find(".wpmProductId").length&&!jQuery(e).siblings(".wpmProductId").length);e.setCookie=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:"",o=arguments.length>2&&arguments[2]!==a?arguments[2]:null;if(o){let a=new Date;a.setTime(a.getTime()+24*o*60*60*1e3);let r="expires="+a.toUTCString();document.cookie=e+"="+t+";"+r+";path=/"}else document.cookie=e+"="+t+";path=/"},e.getCookie=e=>{let t=e+"=",a=decodeURIComponent(document.cookie).split(";");for(let e=0;e<a.length;e++){let o=a[e];for(;" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""},e.deleteCookie=t=>{e.setCookie(t,"",-1)},e.getWpmSessionData=()=>{if(window.sessionStorage){let e=window.sessionStorage.getItem("_wpm");return null!==e?JSON.parse(e):{}}return{}},e.setWpmSessionData=e=>{window.sessionStorage&&window.sessionStorage.setItem("_wpm",JSON.stringify(e))},e.storeOrderIdOnServer=async(t,a)=>{try{let o;o=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/pixels-fired/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({order_id:t,source:a,nonce:e.nonce}),keepalive:!0,cache:"no-cache"}):await fetch(e.ajax_url,{method:"POST",body:new URLSearchParams({action:"pmw_purchase_pixels_fired",order_id:t,source:a,nonce:e.nonce}),keepalive:!0}),o.ok||console.error("wpm.storeOrderIdOnServer error")}catch(e){console.error(e)}},e.getProductIdByCartItemKeyUrl=e=>{let t,a=new URLSearchParams(e.search).get("remove_item");return t=0===wpmDataLayer.cartItemKeys[a].variation_id?wpmDataLayer.cartItemKeys[a].product_id:wpmDataLayer.cartItemKeys[a].variation_id,t},e.getAddToCartLinkProductIds=()=>jQuery("a").map((function(){let e=jQuery(this).attr("href");if(e&&e.includes("?add-to-cart=")){let t=e.match(/(add-to-cart=)(\d+)/);if(t)return t[2]}})).get(),e.getProductDetailsFormattedForEvent=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:1,o={id:e.toString(),dyn_r_ids:wpmDataLayer.products[e].dyn_r_ids,name:wpmDataLayer.products[e].name,list_name:wpmDataLayer.shop.list_name,brand:wpmDataLayer.products[e].brand,category:wpmDataLayer.products[e].category,variant:wpmDataLayer.products[e].variant,list_position:wpmDataLayer.products[e].position,quantity:t,price:wpmDataLayer.products[e].price,currency:wpmDataLayer.shop.currency,isVariable:wpmDataLayer.products[e].isVariable,isVariation:wpmDataLayer.products[e].isVariation,parentId:wpmDataLayer.products[e].parentId};return o.isVariation&&(o.parentId_dyn_r_ids=wpmDataLayer.products[e].parentId_dyn_r_ids),o},e.setReferrerToCookie=()=>{e.getCookie("wpmReferrer")||e.setCookie("wpmReferrer",document.referrer)},e.getReferrerFromCookie=()=>e.getCookie("wpmReferrer")?e.getCookie("wpmReferrer"):null,e.getClidFromBrowser=function(){let t,o=arguments.length>0&&arguments[0]!==a?arguments[0]:"gclid";return t={gclid:"_gcl_aw",dclid:"_gcl_dc"},e.getCookie(t[o])?e.getCookie(t[o]).match(/(GCL.[\d]*.)(.*)/)[2]:""},e.getUserAgent=()=>navigator.userAgent,e.getViewPort=()=>({width:Math.max(document.documentElement.clientWidth||0,window.innerWidth||0),height:Math.max(document.documentElement.clientHeight||0,window.innerHeight||0)}),e.version=()=>{console.log(wpmDataLayer.version)},e.loadScriptAndCacheIt=e=>{let t={dataType:"script",cache:!0,url:e};return jQuery.ajax(t)},e.getOrderItemPrice=e=>(e.total+e.total_tax)/e.quantity,e.hasLoginEventFired=()=>{let t=e.getWpmSessionData();return null==t?void 0:t.loginEventFired},e.setLoginEventFired=()=>{let t=e.getWpmSessionData();t.loginEventFired=!0,e.setWpmSessionData(t)},e.wpmDataLayerExists=()=>new Promise((e=>{!function t(){if("undefined"!=typeof wpmDataLayer)return e();setTimeout(t,50)}()})),e.jQueryExists=()=>new Promise((e=>{!function t(){if("undefined"!=typeof jQuery)return e();setTimeout(t,100)}()})),e.pageLoaded=()=>new Promise((e=>{!function t(){if("complete"===document.readyState)return e();setTimeout(t,50)}()})),e.pageReady=()=>new Promise((e=>{!function t(){if("interactive"===document.readyState||"complete"===document.readyState)return e();setTimeout(t,50)}()})),e.isMiniCartActive=()=>{if(window.sessionStorage){for(const[e,t]of Object.entries(window.sessionStorage))if(e.includes("wc_fragments"))return!0;return!1}return!1},e.doesWooCommerceCartExist=()=>document.cookie.includes("woocommerce_items_in_cart"),e.urlHasParameter=e=>new URLSearchParams(window.location.search).has(e),e.hashAsync=(e,t)=>crypto.subtle.digest(e,new TextEncoder("utf-8").encode(t)).then((e=>Array.prototype.map.call(new Uint8Array(e),(e=>("00"+e.toString(16)).slice(-2))).join(""))),e.getCartValue=()=>{var e;let t=0;if(null!==(e=wpmDataLayer)&&void 0!==e&&e.cart)for(const e in wpmDataLayer.cart){let a=wpmDataLayer.cart[e];t+=a.quantity*a.price}return t},e.doesUrlContainPatterns=e=>{for(const t of e)if(new RegExp(t).test(window.location.href))return!0;return!1},e.excludeDomainFromTracking=()=>{var e,t;let a=["appspot.com","translate.google.com"];return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.general)&&void 0!==t&&t.excludeDomains&&(a=[...a,...wpmDataLayer.general.excludeDomains]),!!a.some((e=>window.location.href.includes(e)))&&(console.debug("Pixel Manager for WooCommerce: Aborted due to excluded domain"),!0)},e.getRandomEventId=()=>(Math.random()+1).toString(36).substring(2);let g=!1;const y=()=>{!1===g&&jQuery(document).trigger("pmw:ready"),g=!0};jQuery(document).on("ready",(()=>{y()})),document.addEventListener("DOMContentLoaded",(()=>{y()}))}(window.wpm=window.wpm||{},jQuery)},534:(e,t,a)=>{a(584),a(473)},207:()=>{wpm.wpmDataLayerExists().then((()=>{console.log("Pixel Manager for WooCommerce: "+(wpmDataLayer.version.pro?"Pro":"Free")+" Version "+wpmDataLayer.version.number+" loaded"),wpm.excludeDomainFromTracking()||document.dispatchEvent(new Event("wpmPreLoadPixels"))})).then((()=>{wpm.pageLoaded().then((()=>{document.dispatchEvent(new Event("wpmLoad"))}))})),jQuery(document).on("pmw:ready",(()=>{wpm.wpmDataLayerExists().then((()=>{wpm.startIntersectionObserverToWatch(),wpm.startProductsMutationObserverToWatch()}))}))}},t={};function a(o){var r=t[o];if(void 0!==r)return r.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,a),n.exports}a(534),wpm.jQueryExists().then((function(){jQuery(document).on("pmw:ready",(()=>{a(459)})),a(299),a(69),a(12),a(787),a(207)}))})();
|
2 |
//# sourceMappingURL=wpm-public.p1.min.js.map
|
js/public/wpm-public.p1.min.js.br
CHANGED
Binary file
|
js/public/wpm-public.p1.min.js.gz
CHANGED
Binary file
|
js/public/wpm-public.p1.min.js.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"file":"wpm-public.p1.min.js","mappings":"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","sources":["webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/cookie_consent.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners_on_ready.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/init.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/main.js"],"sourcesContent":["/**\n * All event listeners\n *\n * https://developers.facebook.com/docs/meta-pixel/reference\n * */\n\n// Load pixel event\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.facebook?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.facebook?.loaded\n\t\t&& !wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)\n\t) {\n\t\tif (wpm.canIFire(\"ads\", \"facebook-ads\")) wpm.loadFacebookPixel()\n\t}\n})\n\n// AddToCart event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToCart\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// InitiateCheckout event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"InitiateCheckout\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// AddToWishlist event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToWishlist\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// ViewContent event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"ViewContent\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n\n// view search event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Search\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// load always event\njQuery(document).on(\"wpmLoadAlways\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\twpm.setFbUserData()\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Purchase\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Add functions for Facebook\n * */\n\n(function (wpm, $, undefined) {\n\n\tlet fbUserData\n\n\twpm.loadFacebookPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.facebook.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(f,b,e,v,n,t,s)\n\t\t\t{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n\t\t\t\tn.callMethod.apply(n,arguments):n.queue.push(arguments)};\n\t\t\t\tif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n\t\t\t\tn.queue=[];t=b.createElement(e);t.async=!0;\n\t\t\t\tt.src=v;s=b.getElementsByTagName(e)[0];\n\t\t\t\ts.parentNode.insertBefore(t,s)}(window, document,'script',\n\t\t\t\t'https://connect.facebook.net/en_US/fbevents.js');\n\t\t\t// @formatter:on\n\n\t\t\tlet data = {}\n\n\t\t\t// Add user identifiers to data,\n\t\t\t// and only if fbp was set\n\t\t\tif (wpm.isFbpSet() && wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\t\tdata = {...wpm.getUserIdentifiersForFb()}\n\t\t\t}\n\n\t\t\tfbq(\"init\", wpmDataLayer.pixels.facebook.pixel_id, data)\n\t\t\tfbq(\"track\", \"PageView\")\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching\n\twpm.getUserIdentifiersForFb = () => {\n\n\t\tlet data = {}\n\n\t\t// external ID\n\t\tif (wpmDataLayer?.user?.id) data.external_id = wpmDataLayer.user.id\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.facebook?.email) data.em = wpmDataLayer.user.facebook.email\n\t\tif (wpmDataLayer?.order?.billing_email_hashed) data.em = wpmDataLayer.order.billing_email_hashed\n\n\t\t// first name\n\t\tif (wpmDataLayer?.user?.facebook?.first_name) data.fn = wpmDataLayer.user.facebook.first_name\n\t\tif (wpmDataLayer?.order?.billing_first_name) data.fn = wpmDataLayer.order.billing_first_name.toLowerCase()\n\n\t\t// last name\n\t\tif (wpmDataLayer?.user?.facebook?.last_name) data.ln = wpmDataLayer.user.facebook.last_name\n\t\tif (wpmDataLayer?.order?.billing_last_name) data.ln = wpmDataLayer.order.billing_last_name.toLowerCase()\n\n\t\t// phone\n\t\tif (wpmDataLayer?.user?.facebook?.phone) data.ph = wpmDataLayer.user.facebook.phone\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.facebook?.city) data.ct = wpmDataLayer.user.facebook.city\n\t\tif (wpmDataLayer?.order?.billing_city) data.ct = wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g, \"\")\n\n\t\t// state\n\t\tif (wpmDataLayer?.user?.facebook?.state) data.st = wpmDataLayer.user.facebook.state\n\t\tif (wpmDataLayer?.order?.billing_state) data.st = wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/, \"\")\n\n\t\t// postcode\n\t\tif (wpmDataLayer?.user?.facebook?.postcode) data.zp = wpmDataLayer.user.facebook.postcode\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.facebook?.country) data.country = wpmDataLayer.user.facebook.country\n\t\tif (wpmDataLayer?.order?.billing_country) data.country = wpmDataLayer.order.billing_country.toLowerCase()\n\n\t\treturn data\n\t}\n\n\twpm.getFbRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.getFbUserData = () => {\n\n\t\t/**\n\t\t * We need to cache the FB user data for InitiateCheckout\n\t\t * where getting the user data from the browser is too slow\n\t\t * using wpm.getCookie().\n\t\t *\n\t\t * And we need the object merge because the ViewContent hit happens too fast\n\t\t * after adding a variation to the cart because the function to cache\n\t\t * the user data is too slow.\n\t\t *\n\t\t * But we can get the user_data using wpm.getCookie()\n\t\t * because we don't move away from the page and can wait for the browser\n\t\t * to get it.\n\t\t *\n\t\t * Also, the merge ensures that new data will be added to fbUserData if new\n\t\t * data is being added later, like user ID, or fbc.\n\t\t */\n\n\t\tfbUserData = {...fbUserData, ...wpm.getFbUserDataFromBrowser()}\n\n\t\treturn fbUserData\n\t}\n\n\twpm.isFbAdvancedMatchingEnabled = () => {\n\t\tif (wpmDataLayer?.pixels?.facebook?.advanced_matching) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.setFbUserData = () => {\n\t\tfbUserData = wpm.getFbUserDataFromBrowser()\n\t}\n\n\twpm.getFbUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {}\n\n\t\tif (wpm.getCookie(\"_fbp\") && wpm.isValidFbp(wpm.getCookie(\"_fbp\"))) {\n\t\t\tdata.fbp = wpm.getCookie(\"_fbp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_fbc\") && wpm.isValidFbc(wpm.getCookie(\"_fbc\"))) {\n\t\t\tdata.fbc = wpm.getCookie(\"_fbc\")\n\t\t}\n\n\t\tif (wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\tif (wpmDataLayer?.user?.id) data.external_id = wpmDataLayer.user.id\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\treturn data\n\t}\n\n\twpm.isFbpSet = () => {\n\t\treturn !!wpm.getCookie(\"_fbp\")\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbp = fbp => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.\\d{8,20}$/)\n\n\t\treturn re.test(fbp)\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbc = fbc => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.[\\da-zA-Z_-]{8,}/)\n\n\t\treturn re.test(fbc)\n\t}\n\n\t// wpm.fbViewContent = (product = null) => {\n\t//\n\t// \ttry {\n\t// \t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\t//\n\t// \t\tlet eventId = wpm.getFbRandomEventId()\n\t//\n\t// \t\tlet data = {}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tdata.content_type = \"product\"\n\t// \t\t\tdata.content_name = product.name\n\t// \t\t\t// data.content_category = product.category\n\t// \t\t\tdata.content_ids = product.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]\n\t// \t\t\tdata.currency = wpmDataLayer.shop.currency\n\t// \t\t\tdata.value = product.price\n\t// \t\t}\n\t//\n\t// \t\tfbq(\"track\", \"ViewContent\", data, {\n\t// \t\t\teventID: eventId,\n\t// \t\t})\n\t//\n\t// \t\tlet capiData = {\n\t// \t\t\tevent_name : \"ViewContent\",\n\t// \t\t\tevent_id : eventId,\n\t// \t\t\tuser_data : wpm.getFbUserData(),\n\t// \t\t\tevent_source_url: window.location.href,\n\t// \t\t}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tproduct[\"currency\"] = wpmDataLayer.shop.currency\n\t// \t\t\tcapiData.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t// \t\t}\n\t//\n\t// \t\tjQuery(document).trigger(\"wpmFbCapiEvent\", capiData)\n\t// \t} catch (e) {\n\t// \t\tconsole.error(e)\n\t// \t}\n\t// }\n\n\twpm.fbGetProductDataForCapiEvent = product => {\n\t\treturn {\n\t\t\tcontent_type: \"product\",\n\t\t\tcontent_name: product.name,\n\t\t\tcontent_ids : [\n\t\t\t\tproduct.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type],\n\t\t\t],\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t}\n\t}\n\n\twpm.facebookContentIds = () => {\n\t\tlet prodIds = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t}\n\n\t\treturn prodIds\n\t}\n\n\twpm.trackCustomFacebookEvent = (eventName, customData = {}) => {\n\t\ttry {\n\t\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\t\tlet eventId = wpm.getFbRandomEventId()\n\n\t\t\tfbq(\"trackCustom\", eventName, customData, {\n\t\t\t\teventID: eventId,\n\t\t\t})\n\n\t\t\tjQuery(document).trigger(\"wpmFbCapiEvent\", {\n\t\t\t\tevent_name : eventName,\n\t\t\t\tevent_id : eventId,\n\t\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\t\tevent_source_url: window.location.href,\n\t\t\t\tcustom_data : customData,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fbGetContentIdsFromCart = () => {\n\n\t\tlet content_ids = []\n\n\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\tcontent_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\t\t}\n\n\t\treturn content_ids\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Facebook loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n\n","/**\n * Load Google Ads event listeners\n * */\n\n// view_item_list event\njQuery(document).on(\"wpmViewItemList\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tif (\n\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\tproduct.isVariable &&\n\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t) return\n\n\t\t// try to prevent that WC sends cached hits to Google\n\t\tif (!product) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\njQuery(document).on(\"wpmAddToCart\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : product.quantity * product.price,\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.value = (product.quantity ? product.quantity : 1) * product.price\n\t\t\tdata.items = [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : (product.quantity ? product.quantity : 1),\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}]\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view search event\njQuery(document).on(\"wpmSearch\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tlet products = []\n\n\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n\n\t\t\tif (\n\t\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\t\tproduct.isVariable &&\n\t\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t\t) return\n\n\t\t\tproducts.push({\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t})\n\t\t}\n\n\t\t// console.log(products);\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\t// value : 1 * product.price,\n\t\t\titems: products,\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// TODO distinguish with or without cart data active\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\titems : wpm.getGoogleAdsDynamicRemarketingOrderItems(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t})\n\n\t\t// console.log(wpm.getGoogleAdsDynamicRemarketingOrderItems())\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// user log in event\njQuery(document).on(\"wpmLogin\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// conversion event\n// new_customer parameter: https://support.google.com/google-ads/answer/9917012\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data_basic = {}\n\t\tlet data_with_cart = {}\n\n\t\tdata_basic = {\n\t\t\tsend_to : wpm.getGoogleAdsConversionIdentifiersWithLabel(),\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tnew_customer : wpmDataLayer.order.new_customer,\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.clv_order_value_filtered) {\n\t\t\tdata_basic.customer_lifetime_value = wpmDataLayer.order.clv_order_value_filtered\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata_basic.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.aw_merchant_id) {\n\t\t\tdata_with_cart = {\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\taw_merchant_id : wpmDataLayer.order.aw_merchant_id,\n\t\t\t\taw_feed_country : wpmDataLayer.order.aw_feed_country,\n\t\t\t\taw_feed_language: wpmDataLayer.order.aw_feed_language,\n\t\t\t\titems : wpm.getGoogleAdsRegularOrderItems(),\n\t\t\t}\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"conversion\", {...data_basic, ...data_with_cart})\n\t\t})\n\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\n\twpm.getGoogleAdsConversionIdentifiersWithLabel = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds) {\n\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\tif (item) {\n\t\t\t\t\tconversionIdentifiers.push(key + \"/\" + item)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsConversionIdentifiers = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\tconversionIdentifiers.push(key)\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsRegularOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.getGoogleAdsDynamicRemarketingOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Ads\n */\n\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Google Universal Analytics (GA3) event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.universal.property_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGAUAOrderItems(),\n\t\t\t})\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Add functions for Google Analytics Universal\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGAUAOrderItems = function () {\n\n\t\t// \"id\" : \"34\",\n\t\t// \"name\" : \"Hoodie\",\n\t\t// \"brand\" : \"\",\n\t\t// \"category\" : \"Hoodies\",\n\t\t// \"list_position\": 1,\n\t\t// \"price\" : 45,\n\t\t// \"quantity\" : 1,\n\t\t// \"variant\" : \"Color: blue | Logo: yes\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tname : item.name,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcategory: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItem = wpm.ga3AddListNameToProduct(orderItem)\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.ga3AddListNameToProduct = function (item_data, productPosition = null) {\n\n\t\t// if (wpm.ga3CanProductListBeSet(item_data.id)) {\n\t\t// \titem_data.listname = wpmDataLayer.shop.list_name\n\t\t//\n\t\t// \tif (productPosition) {\n\t\t// \t\titem_data.list_position = productPosition\n\t\t// \t}\n\t\t// }\n\n\t\titem_data.list_name = wpmDataLayer.shop.list_name\n\n\t\tif (productPosition) {\n\t\t\titem_data.list_position = productPosition\n\t\t}\n\n\t\treturn item_data\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Google Universal Analytics (GA3) loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Load GA4 event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGA4OrderItems(),\n\t\t\t})\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load GA4 functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGA4OrderItems = function () {\n\n\t\t// \"item_id\" : \"34\",\n\t\t// \"item_name\" : \"Hoodie\",\n\t\t// \"quantity\" : 1,\n\t\t// \"item_brand\" : \"\",\n\t\t// \"item_variant\" : \"Color: blue | Logo: yes\",\n\t\t// \"price\" : 45,\n\t\t// \"currency\" : \"CHF\",\n\t\t// \"item_category\": \"Hoodies\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\titem_name : item.name,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\titem_category: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * GA4 loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Google Analytics loader\n */\n\nrequire(\"./ga3/loader\")\nrequire(\"./ga4/loader\")\n","/**\n * Load Google base event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") {\n\t\tif (wpm.canGoogleLoad()) {\n\t\t\twpm.loadGoogle()\n\t\t} else {\n\t\t\twpm.logPreventedPixelLoading(\"google\", \"analytics / ads\")\n\t\t}\n\t}\n})\n","/**\n * Load Google base functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.googleConfigConditionsMet = function (type) {\n\n\t\t// always returns true if Google Consent Mode is active\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (wpm.getConsentValues().mode === \"category\") {\n\t\t\treturn wpm.getConsentValues().categories[type] === true\n\t\t} else if (wpm.getConsentValues().mode === \"pixel\") {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-\" + type)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings = function (google_consent_settings) {\n\n\t\tif (wpm.getConsentValues().mode === \"category\") {\n\n\t\t\tif (wpm.getConsentValues().categories.analytics) google_consent_settings.analytics_storage = \"granted\"\n\t\t\tif (wpm.getConsentValues().categories.ads) google_consent_settings.ad_storage = \"granted\"\n\t\t} else if ((wpm.getConsentValues().mode === \"pixel\")) {\n\n\t\t\tgoogle_consent_settings.analytics_storage = wpm.getConsentValues().pixels.includes(\"google-analytics\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_storage = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t}\n\n\t\treturn google_consent_settings\n\t}\n\n\twpm.updateGoogleConsentMode = function (analytics = true, ads = true) {\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!window.gtag ||\n\t\t\t\t!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent\n\t\t\t) return\n\n\t\t\tgtag(\"consent\", \"update\", {\n\t\t\t\tanalytics_storage: analytics ? \"granted\" : \"denied\",\n\t\t\t\tad_storage : ads ? \"granted\" : \"denied\",\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAds = function () {\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.ads.state = \"loading\"\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active) {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key, {\"allow_enhanced_conversions\": true})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number) {\n\t\t\t\tgtag(\"config\", Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0] + \"/\" + wpmDataLayer.pixels.google.ads.phone_conversion_label, {\n\t\t\t\t\tphone_conversion_number: wpmDataLayer.pixels.google.ads.phone_conversion_number,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// ! enhanced_conversion_data needs to set on the window object\n\t\t\t// https://support.google.com/google-ads/answer/9888145#zippy=%2Cvalidate-your-implementation-using-chrome-developer-tools\n\t\t\tif (wpmDataLayer?.shop?.page_type && \"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data) {\n\t\t\t\t// window.enhanced_conversion_data = wpmDataLayer.order.google.ads.enhanced_conversion_data\n\n\t\t\t\tgtag(\"set\", \"user_data\", wpmDataLayer.order.google.ads.enhanced_conversion_data)\n\t\t\t}\n\n\t\t\twpmDataLayer.pixels.google.ads.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsUA = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"loading\"\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.universal.property_id, wpmDataLayer.pixels.google.analytics.universal.parameters)\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsGA4 = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"loading\"\n\n\t\t\tlet parameters = wpmDataLayer.pixels.google.analytics.ga4.parameters\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode) {\n\t\t\t\tparameters.debug_mode = true\n\t\t\t}\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, parameters)\n\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.isGoogleActive = function () {\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.universal?.property_id ||\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id ||\n\t\t\t!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)\n\t\t) {\n\t\t\treturn true\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getGoogleGtagId = function () {\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.universal.property_id\n\t\t} else if (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.ga4.measurement_id\n\t\t} else {\n\t\t\treturn Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t}\n\t}\n\n\n\twpm.loadGoogle = function () {\n\n\t\tif (wpm.isGoogleActive()) {\n\n\t\t\twpmDataLayer.pixels.google.state = \"loading\"\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googletagmanager.com/gtag/js?id=\" + wpm.getGoogleGtagId())\n\t\t\t\t.then(function (script, textStatus) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Initiate Google dataLayer and gtag\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\t\t\t\twindow.gtag = function gtag() {\n\t\t\t\t\t\t\tdataLayer.push(arguments)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Consent Mode\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\n\t\t\t\t\t\t\tlet google_consent_settings = {\n\t\t\t\t\t\t\t\t\"ad_storage\" : wpmDataLayer.pixels.google.consent_mode.ad_storage,\n\t\t\t\t\t\t\t\t\"analytics_storage\": wpmDataLayer.pixels.google.consent_mode.analytics_storage,\n\t\t\t\t\t\t\t\t\"wait_for_update\" : wpmDataLayer.pixels.google.consent_mode.wait_for_update,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.region) {\n\t\t\t\t\t\t\t\tgoogle_consent_settings.region = wpmDataLayer.pixels.google.consent_mode.region\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgoogle_consent_settings = wpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings(google_consent_settings)\n\n\t\t\t\t\t\t\tgtag(\"consent\", \"default\", google_consent_settings)\n\t\t\t\t\t\t\tgtag(\"set\", \"ads_data_redaction\", wpmDataLayer.pixels.google.consent_mode.ads_data_redaction)\n\t\t\t\t\t\t\tgtag(\"set\", \"url_passthrough\", wpmDataLayer.pixels.google.consent_mode.url_passthrough)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Linker\n\t\t\t\t\t\t// https://developers.google.com/gtagjs/devguide/linker\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.linker?.settings) {\n\t\t\t\t\t\t\tgtag(\"set\", \"linker\", wpmDataLayer.pixels.google.linker.settings)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgtag(\"js\", new Date())\n\n\t\t\t\t\t\t// Google Ads loader\n\t\t\t\t\t\tif (!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) { // Only run if the pixel has set up\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"ads\")) { \t\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAds()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-ads\", \"ads\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Universal Analytics loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) { \t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsUA()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-universal-analytics\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GA4 loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) { \t\t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsGA4()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"ga4\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twpmDataLayer.pixels.google.state = \"ready\"\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\twpm.canGoogleLoad = function () {\n\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (\"category\" === wpm.getConsentValues().mode) {\n\t\t\treturn !!(wpm.getConsentValues().categories[\"ads\"] || wpm.getConsentValues().categories[\"analytics\"])\n\t\t} else if (\"pixel\" === wpm.getConsentValues().mode) {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-ads\") || wpm.getConsentValues().pixels.includes(\"google-analytics\")\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid load condition for Google mode in wpmConsentValues\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.gtagLoaded = function () {\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") reject()\n\n\t\t\tlet startTime = 0\n\t\t\tlet timeout = 5000\n\t\t\tlet frequency = 200;\n\n\t\t\t(function wait() {\n\t\t\t\tif (wpmDataLayer?.pixels?.google?.state === \"ready\") return resolve()\n\t\t\t\tif (startTime >= timeout) return reject()\n\t\t\t\tstartTime += frequency\n\t\t\t\tsetTimeout(wait, frequency)\n\t\t\t})()\n\t\t})\n\t}\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google base\n */\n\n// Load base\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Load Google\n */\n\n// Load base\nrequire(\"./base/loader\")\n\n//Load additional Google libraries\nrequire(\"./ads/loader\")\nrequire(\"./analytics/loader\")\nrequire(\"./optimize/loader\")\n\n\n","/**\n * Load Google Optimize event listeners\n */\n\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.google?.optimize?.container_id && !wpmDataLayer?.pixels?.google?.optimize?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"google-optimize\")) wpm.load_google_optimize_pixel()\n\t}\n})\n","/**\n * Load Google Optimize functions\n */\n\n\n(function (wpm, $, undefined) {\n\n\twpm.load_google_optimize_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.optimize.loaded = true\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googleoptimize.com/optimize.js?id=\" + wpmDataLayer.pixels.google.optimize.container_id)\n\t\t\t// .then(function (script, textStatus) {\n\t\t\t// \t\tconsole.log('Google Optimize loaded')\n\t\t\t// });\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Load Google Optimize\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Hotjar event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.hotjar?.site_id && !wpmDataLayer?.pixels?.hotjar?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"hotjar\") && !wpmDataLayer?.pixels?.hotjar?.loaded) wpm.load_hotjar_pixel()\n\t}\n})\n","/**\n * Load Hotjar functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_hotjar_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.hotjar.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(h,o,t,j,a,r){\n\t\t\t\th.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n\t\t\t\th._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6};\n\t\t\t\ta=o.getElementsByTagName('head')[0];\n\t\t\t\tr=o.createElement('script');r.async=1;\n\t\t\t\tr.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n\t\t\t\ta.appendChild(r);\n\t\t\t})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Hotjar loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Consent Mode functions\n */\n\n(function (wpm, $, undefined) {\n\n\t/**\n\t * Handle Cookie Management Platforms\n\t */\n\n\tlet getComplianzCookies = () => {\n\n\t\tlet cmplz_statistics = wpm.getCookie(\"cmplz_statistics\")\n\t\tlet cmplz_marketing = wpm.getCookie(\"cmplz_marketing\")\n\t\tlet cmplz_consent_status = wpm.getCookie(\"cmplz_consent_status\") || wpm.getCookie(\"cmplz_banner-status\")\n\n\t\tif (cmplz_consent_status) {\n\t\t\treturn {\n\t\t\t\tanalytics : cmplz_statistics === \"allow\",\n\t\t\t\tads : cmplz_marketing === \"allow\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tlet getCookieLawInfoCookies = () => {\n\n\t\tlet analyticsCookie = wpm.getCookie(\"cookielawinfo-checkbox-analytics\") || wpm.getCookie(\"cookielawinfo-checkbox-analytiques\")\n\t\tlet adsCookie = wpm.getCookie(\"cookielawinfo-checkbox-advertisement\") || wpm.getCookie(\"cookielawinfo-checkbox-performance\") || wpm.getCookie(\"cookielawinfo-checkbox-publicite\")\n\t\tlet visitorHasChosen = wpm.getCookie(\"CookieLawInfoConsent\")\n\n\t\tif (analyticsCookie || adsCookie) {\n\n\t\t\treturn {\n\t\t\t\tanalytics : analyticsCookie === \"yes\",\n\t\t\t\tads : adsCookie === \"yes\",\n\t\t\t\tvisitorHasChosen: !!visitorHasChosen,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * Initialize and set default values\n\t */\n\n\tlet\n\t\twpmConsentValues = {}\n\twpmConsentValues.categories = {}\n\twpmConsentValues.pixels = []\n\twpmConsentValues.mode = \"category\"\n\twpmConsentValues.visitorHasChosen = false\n\n\t// Return current consent values\n\twpm.getConsentValues = () => wpmConsentValues\n\n\twpm.setConsentValueCategories = (analytics = false, ads = false) => {\n\t\twpmConsentValues.categories.analytics = analytics\n\t\twpmConsentValues.categories.ads = ads\n\t}\n\n\t// Update the PMW consent values with values coming from a CMP\n\twpm.updateConsentCookieValues = (analytics = null, ads = null, explicitConsent = false) => {\n\n\t\t// ad_storage\n\t\t// analytics_storage\n\t\t// functionality_storage\n\t\t// personalization_storage\n\t\t// security_storage\n\n\t\tlet cookie\n\n\t\t/**\n\t\t * Setup defaults\n\t\t */\n\n\t\t// consentValues.categories.analytics = true\n\t\t// consentValues.categories.ads = true\n\n\t\twpmConsentValues.categories.analytics = !explicitConsent\n\t\twpmConsentValues.categories.ads = !explicitConsent\n\n\n\t\tif (analytics || ads) {\n\n\t\t\tif (analytics) {\n\t\t\t\twpmConsentValues.categories.analytics = !!analytics\n\t\t\t}\n\n\t\t\tif (ads) {\n\t\t\t\twpmConsentValues.categories.ads = !!ads\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * PMW Cookie Consent\n\t\t *\n\t\t * Must be before every other CMP for the case that one of the included CMPs\n\t\t * decides to implement the PMW cookie consent API. In that case\n\t\t * the PMW consent cookie must take precedence.\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"pmw_cookie_consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookiebot\n\t\t * https://wordpress.org/plugins/cookiebot/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieConsent\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.indexOf(\"statistics:true\") >= 0\n\t\t\twpmConsentValues.categories.ads = cookie.indexOf(\"marketing:true\") >= 0\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Script\n\t\t * https://wordpress.org/plugins/cookie-script-com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieScriptConsent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\tif (cookie.action === \"reject\") {\n\t\t\t\twpmConsentValues.categories.analytics = false\n\t\t\t\twpmConsentValues.categories.ads = false\n\t\t\t} else if (cookie.categories.length === 2) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t} else {\n\t\t\t\twpmConsentValues.categories.analytics = cookie.categories.indexOf(\"performance\") >= 0\n\t\t\t\twpmConsentValues.categories.ads = cookie.categories.indexOf(\"targeting\") >= 0\n\t\t\t}\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Borlabs Cookie\n\t\t * https://borlabs.io/borlabs-cookie/\n\t\t */\n\t\tif (cookie = wpm.getCookie(\"borlabs-cookie\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie?.consents?.statistics\n\t\t\twpmConsentValues.categories.ads = !!cookie?.consents?.marketing\n\t\t\twpmConsentValues.visitorHasChosen = true\n\t\t\twpmConsentValues.pixels = [...cookie?.consents?.statistics || [], ...cookie?.consents?.marketing || []]\n\t\t\twpmConsentValues.mode = \"pixel\"\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Complianz Cookie\n\t\t * https://wordpress.org/plugins/complianz-gdpr/\n\t\t */\n\n\t\tif (cookie = getComplianzCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (free version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"cookie_notice_accepted\")) {\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (pro version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"hu-consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie.categories[\"3\"]\n\t\t\twpmConsentValues.categories.ads = !!cookie.categories[\"4\"]\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * CookieYes, GDPR Cookie Consent (Cookie Law Info)\n\t\t * https://wordpress.org/plugins/cookie-law-info/\n\t\t */\n\n\t\tif (cookie = getCookieLawInfoCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * GDPR Cookie Compliance Plugin by Moove Agency\n\t\t * https://wordpress.org/plugins/gdpr-cookie-compliance/\n\t\t *\n\t\t * TODO write documentation on how to set up the plugin in order for this to work properly\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"moove_gdpr_popup\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.thirdparty === \"1\"\n\t\t\twpmConsentValues.categories.ads = cookie.advanced === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP AutoTerms\n\t\t * https://wordpress.org/plugins/auto-terms-of-service-and-privacy-policy/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"wpautoterms-cookies-notice\")) {\n\n\t\t\tif (cookie !== \"1\") return\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Usercentrics\n\t\t *\n\t\t * https://usercentrics.com/\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api?id=getservicesbaseinfo\n\t\t */\n\n\t\tif (window.localStorage && window.localStorage.getItem(\"uc_settings\")) {\n\n\t\t\tconsole.log(\"Usercentrics settings detected\")\n\n\t\t\tif (typeof UC_UI === \"undefined\") {\n\n\t\t\t\t// register event to block unblock after UC_UI library is loaded\n\t\t\t\twindow.addEventListener(\"UC_UI_INITIALIZED\", function (event) {\n\t\t\t\t\twpm.ucUiProcessConsent()\n\t\t\t\t})\n\n\t\t\t\t// Don't continue because in here the UC_UI library is not loaded yet\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\twpm.ucUiProcessConsent()\n\t\t}\n\n\t\t/**\n\t\t * OneTrust\n\t\t *\n\t\t * https://www.onetrust.com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"OptanonConsent\")) {\n\n\t\t\t// console.log(\"OneTrust settings detected\")\n\n\t\t\tlet params = new URLSearchParams(cookie)\n\t\t\tlet groups = params.get(\"groups\").split(\",\")\n\n\t\t\t// Groups is an array like this ['1:1', '2:0', '3:1', '4:1']. Make it an object with key value pairs\n\t\t\tlet groupsObject = {}\n\t\t\tgroups.forEach((group) => {\n\n\t\t\t\tlet groupArray = group.split(\":\")\n\t\t\t\tgroupsObject[groupArray[0]] = groupArray[1]\n\t\t\t})\n\n\t\t\t// group mapping\n\t\t\t// 1 = necessary\n\t\t\t// 2 = analytics\n\t\t\t// 3 = functional\n\t\t\t// 4 = ads\n\n\t\t\twpmConsentValues.categories.analytics = groubsObject[\"2\"] === \"1\"\n\t\t\twpmConsentValues.categories.ads = groupsObject[\"4\"] === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Only run after having made sure that the UC_UI library is loaded\n\twpm.ucUiProcessConsent = function () {\n\n\t\tif (typeof UC_UI === \"undefined\") return\n\n\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tconst ucStatisticsSlug = UC_UI.getSettingsLabels().categories.filter(data => data.label === \"Statistics\")[0].slug\n\n\t\tpmw.consentAdjustSelectively(\n\t\t\t{\n\t\t\t\tanalytics: !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === ucStatisticsSlug && data.consent.status === false).length > 0,\n\t\t\t\tads : !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === \"marketing\" && data.consent.status === false).length > 0,\n\t\t\t},\n\t\t)\n\t}\n\n\twpm.updateConsentCookieValues()\n\n\twpm.setConsentDefaultValuesToExplicit = () => {\n\t\twpmConsentValues.categories = {\n\t\t\tanalytics: false,\n\t\t\tads : false,\n\t\t}\n\t}\n\n\twpm.canIFire = (category, pixelName) => {\n\n\t\tlet canIFireMode\n\n\t\tif (\"category\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = !!wpmConsentValues.categories[category]\n\t\t} else if (\"pixel\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(pixelName)\n\n\t\t\t// If a user sets \"bing-ads\" in Borlabs Cookie instead of\n\t\t\t// \"microsoft-ads\" in the Borlabs settings, we need to check\n\t\t\t// for that too.\n\t\t\tif (false === canIFireMode && \"microsoft-ads\" === pixelName) {\n\t\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(\"bing-ads\")\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid consent mode in wpmConsentValues\")\n\t\t\tcanIFireMode = false\n\t\t}\n\n\t\tif (canIFireMode) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (true || wpm.urlHasParameter(\"debugConsentMode\")) {\n\t\t\t\twpm.logPreventedPixelLoading(pixelName, category)\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.logPreventedPixelLoading = (pixelName, category) => {\n\n\t\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)\")\n\t\t} else {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)\")\n\t\t}\n\t}\n\n\t/**\n\t * Runs through each script in <head> and blocks / unblocks it according to the plugin settings\n\t * and user consent.\n\t */\n\n\t// https://stackoverflow.com/q/65453565/4688612\n\twpm.scriptTagObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif ($(node).data(\"wpm-cookie-category\")) {\n\n\t\t\t\t\t\t// If the pixel category has been approved > unblock\n\t\t\t\t\t\t// If the pixel belongs to more than one category, then unblock if one of the categories has been approved\n\t\t\t\t\t\t// If no category has been approved, but the Google Consent Mode is active, then only unblock the Google scripts\n\n\t\t\t\t\t\tif (wpm.shouldScriptBeActive(node)) {\n\t\t\t\t\t\t\twpm.unblockScript(node)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twpm.blockScript(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\twpm.scriptTagObserver.observe(document.head, {childList: true, subtree: true})\n\t// jQuery(document).on(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\tdocument.addEventListener(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\n\twpm.shouldScriptBeActive = node => {\n\n\t\tif (\n\t\t\twpmDataLayer.shop.cookie_consent_mgmt.explicit_consent ||\n\t\t\twpmConsentValues.visitorHasChosen\n\t\t) {\n\n\t\t\tif (wpmConsentValues.mode === \"category\" && $(node).data(\"wpm-cookie-category\").split(\",\").some(element => wpmConsentValues.categories[element])) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && wpmConsentValues.pixels.includes($(node).data(\"wpm-pixel-name\"))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && $(node).data(\"wpm-pixel-name\") === \"google\" && [\"google-analytics\", \"google-ads\"].some(element => wpmConsentValues.pixels.includes(element))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmDataLayer?.pixels?.google?.consent_mode?.active && $(node).data(\"wpm-pixel-name\") === \"google\") {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\treturn true\n\t\t}\n\t}\n\n\n\twpm.unblockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tlet wpmSrc = $(scriptNode).data(\"wpm-src\")\n\t\tif (wpmSrc) $(scriptNode).attr(\"src\", wpmSrc)\n\n\t\tscriptNode.type = \"text/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.blockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tif ($(scriptNode).attr(\"src\")) $(scriptNode).removeAttr(\"src\")\n\t\tscriptNode.type = \"blocked/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\t}\n\n\twpm.unblockAllScripts = (analytics = true, ads = true) => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\twpm.setConsentValueCategories(analytics, ads)\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.unblockSelectedPixels = () => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.explicitConsentStateAlreadySet = () => {\n\n\t\tif (wpmConsentValues.explicitConsentStateAlreadySet) {\n\t\t\treturn true\n\t\t} else {\n\t\t\twpmConsentValues.explicitConsentStateAlreadySet = true\n\t\t}\n\t}\n\n\n\t/**\n\t * Block or unblock scripts for each CMP immediately after cookie consent has been updated\n\t * by the visitor.\n\t */\n\n\t/**\n\t * Borlabs Cookie\n\t * If visitor accepts cookies in Borlabs Cookie unblock the scripts\n\t */\n\tdocument.addEventListener(\"borlabs-cookie-consent-saved\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\tif (wpmConsentValues.mode === \"pixel\") {\n\n\t\t\twpm.unblockSelectedPixels()\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.pixels.includes(\"google-analytics\"), wpmConsentValues.pixels.includes(\"google-ads\"))\n\t\t} else {\n\n\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t}\n\t})\n\n\t/**\n\t * Cookiebot\n\t * \tIf visitor accepts cookies in Cookiebot unblock the scripts\n\t * \thttps://www.cookiebot.com/en/developer/\n\t */\n\tdocument.addEventListener(\"CookiebotOnAccept\", () => {\n\t\tif (Cookiebot.consent.statistics) wpmConsentValues.categories.analytics = true\n\t\tif (Cookiebot.consent.marketing) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\n\t}, false)\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/article/20-custom-events\n\t */\n\t// jQuery(document).on(\"CookieScriptAccept\", e => {\n\tdocument.addEventListener(\"CookieScriptAccept\", e => {\n\n\t\tif (e.detail.categories.includes(\"performance\")) wpmConsentValues.categories.analytics = true\n\t\tif (e.detail.categories.includes(\"targeting\")) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/\n\t */\n\t// jQuery(document).on(\"CookieScriptAcceptAll\", () => {\n\tdocument.addEventListener(\"CookieScriptAcceptAll\", () => {\n\n\t\twpm.setConsentValueCategories(true, true)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t})\n\n\t/**\n\t * Complianz Cookie\n\t *\n\t * If visitor accepts cookies in Complianz unblock the scripts\n\t */\n\n\twpm.cmplzStatusChange = (cmplzConsentData) => {\n\n\t\tif (cmplzConsentData.detail.categories.includes(\"statistics\")) wpm.updateConsentCookieValues(true, null)\n\t\tif (cmplzConsentData.detail.categories.includes(\"marketing\")) wpm.updateConsentCookieValues(null, true)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t}\n\n\t// jQuery(document).on(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\t// jQuery(document).on(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\n\t// Cookie Compliance by hu-manity.co (free and pro)\n\t// If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (free version)\n\t// https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t// jQuery(document).on(\"setCookieNotice\", () => {\n\tdocument.addEventListener(\"setCookieNotice\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Compliance by hu-manity.co (free and pro)\n\t * If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (pro version)\n\t * https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t * Because Cookie Notice has no documented API or event that is being triggered on consent save or update\n\t * we have to solve this by using a mutation observer.\n\t *\n\t * @type {MutationObserver}\n\t */\n\n\twpm.huObserver = new MutationObserver(mutations => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif (node.id === \"hu\") {\n\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t\t\t\t\t\tdocument.querySelector(\".hu-cookies-save\").addEventListener(\"click\", () => {\n\t\t\t\t\t\t\twpm.updateConsentCookieValues()\n\t\t\t\t\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\tif (window.hu) {\n\t\twpm.huObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t}\n\n\t/**\n\t * Usercentrics Event Listeners\n\t *\n\t * https://docs.usercentrics.com/#/v2-events?id=usage-as-window-event\n\t */\n\n\twindow.addEventListener(\"ucEvent\", function (e) {\n\t\tif (e.detail && e.detail.event == \"consent_status\") {\n\t\t\t// check for consent status of service \"Google Ads Remarketing\"\n\t\t\tif (e.detail[\"Google Ads Remarketing\"] === true) {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has no consent\")\n\t\t\t}\n\t\t}\n\t})\n\n\t// https://docs.usercentrics.com/#/v2-events?id=uc_ui_cmp_event\n\twindow.addEventListener(\"UC_UI_CMP_EVENT\", function (event) {\n\n\t\tif (event.detail.type === \"ACCEPT_ALL\") {\n\t\t\t// console.log('accept all');\n\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tif (event.detail.type === \"DENY_ALL\") {\n\t\t\tpmw.consentRevokeAll()\n\t\t}\n\n\t\tif (event.detail.type === \"SAVE\") {\n\t\t\tconsole.log(\"event.detail\", event.detail)\n\t\t}\n\t})\n\n\n\t/**\n\t * OneTrust Event Listeners\n\t *\n\t * CookiePro by OneTrust doesn't emit any events when the user accepts or declines cookies.\n\t */\n\n\t// There are two accept all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\"#accept-recommended-btn-handler, #onetrust-accept-btn-handler\").on(\"click\", function () {\n\n\t\t// If OneTrust is not loaded, return\n\t\tif (typeof window.OneTrust === \"undefined\") return\n\n\t\tpmw.consentAcceptAll()\n\t})\n\n\t// There are two revoke all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\".ot-pc-refuse-all-handler, #onetrust-reject-all-handler\").on(\"click\", function () {\n\t\tpmw.consentRevokeAll()\n\t})\n\n\t// There is one save button that saves mixed consent. It is in the settings window. We reload the page after saving to reflect the changes.\n\tjQuery(\".save-preference-btn-handler.onetrust-close-btn-handler\").on(\"click\", function () {\n\t\tlocation.reload()\n\n\t\t// OneTrust.OnConsentChanged(function (e) {\n\t\t// \tpmw.consentAdjustSelectively({\n\t\t// \t\tanalytics: e.detail.includes(\"2\"),\n\t\t// \t\tads : e.detail.includes(\"4\"),\n\t\t// \t})\n\t\t// })\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n\n(function (pmw, $, undefined) {\n\n\t/**\n\t * Pixel Manager Cookie Consent API\n\t */\n\n\t// Accept consent for all cookies\n\tpmw.consentAcceptAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(true, true, settings.duration)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t}\n\n\t// Accept consent selectively\n\tpmw.consentAdjustSelectively = (settings) => {\n\n\t\t// If settings.analytics is set, keep it, otherwise set it to wpm.getConsentValues().categories.analytics\n\t\tsettings.analytics = settings.analytics !== undefined ? settings.analytics : wpm.getConsentValues().categories.analytics\n\t\tsettings.ads = settings.ads !== undefined ? settings.ads : wpm.getConsentValues().categories.ads\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(settings.analytics, settings.ads, settings.duration)\n\t\twpm.unblockAllScripts(settings.analytics, settings.ads)\n\t\twpm.updateGoogleConsentMode(settings.analytics, settings.ads)\n\t}\n\n\t// Remove consent for all cookies\n\tpmw.consentRevokeAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\twpm.setConsentValueCategories(false, false)\n\t\tpmw.consentSetCookie(false, false, settings.duration)\n\t\twpm.updateGoogleConsentMode(false, false)\n\t}\n\n\t// Set a cookie called pmw_cookie_consent with the value of pmw_cookie_consent\n\t// and set the default expiration date to 1 year from now\n\tpmw.consentSetCookie = (analytics, ads, duration = 365) => {\n\t\twpm.setCookie(\"pmw_cookie_consent\", JSON.stringify({analytics, ads}), duration)\n\t}\n\n\t// Trigger an event once the PMW consent management has been loaded\n\tjQuery(document).trigger(\"pmw_cookie_consent_management_loaded\")\n\n}(window.pmw = window.pmw || {}, jQuery))\n","/**\n * remove_from_cart event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\njQuery(document).on(\"click\", \".remove_from_cart_button, .remove\", (event) => {\n\n\tconsole.log(\"remove_from_cart event\" + new Date().getTime())\n\n\ttry {\n\n\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"))\n\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\twpm.removeProductFromCart(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * begin_checkout event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\nlet checkoutButtonClasses = [\n\t// \".checkout\",\n\t\".checkout-button\",\n\t\".cart-checkout-button\",\n\t\".button.checkout\",\n\t\".xoo-wsc-ft-btn-checkout\", // https://xootix.com/side-cart-for-woocommerce/\n\t\".elementor-button--checkout\",\n].join(\",\")\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonClasses, () => {\n\n\t// console.log(\"init_checkout at: \" + new Date().getTime())\n\n\tjQuery(document).trigger(\"wpmBeginCheckout\")\n})\n\njQuery(document).on(\"updated_cart_totals\", () => {\n\tjQuery(document).trigger(\"wpmViewCart\")\n})\n\n/**\n * Set up PWM events\n */\n\n// track checkout option event: purchase click\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"wpmLoad\", (event) => {\n\tjQuery(document).on(\"payment_method_selected\", () => {\n\n\t\tif (false === wpm.paymentMethodSelected) {\n\t\t\twpm.fireCheckoutProgress(3)\n\t\t}\n\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t\twpm.paymentMethodSelected = true\n\t})\n})\n\n// populate the wpmDataLayer with the cart items\njQuery(document).on(\"wpmLoad\", () => {\n\n\ttry {\n\t\t// When a new session is initiated there are no items in the cart,\n\t\t// so we can save the call to get the cart items\n\t\tif (wpm.doesWooCommerceCartExist()) wpm.getCartItems()\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// get all add-to-cart= products from backend\njQuery(document).on(\"wpmLoad\", () => {\n\n\twpmDataLayer.products = wpmDataLayer.products || {}\n\n\t// scan page for add-to-cart= links\n\tlet productIds = wpm.getAddToCartLinkProductIds()\n\n\twpm.getProductsFromBackend(productIds)\n})\n\n/**\n * Save the referrer into a cookie\n */\n\njQuery(document).on(\"wpmLoad\", () => {\n\n\t// can't use session storage as we can't read it from the server\n\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\n\t\tif (document.referrer) {\n\t\t\tlet referrerUrl = new URL(document.referrer)\n\t\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\t\tif (referrerHostname !== window.location.host) {\n\t\t\t\twpm.setCookie(\"wpmReferrer\", referrerHostname)\n\t\t\t}\n\t\t}\n\t}\n})\n\n\n/**\n * Create our own load event in order to better handle script flow execution when JS \"optimizers\" shuffle the code.\n */\njQuery(document).on(\"wpmLoad\", () => {\n\t// document.addEventListener(\"wpmLoad\", function () {\n\ttry {\n\t\tif (typeof wpmDataLayer != \"undefined\" && !wpmDataLayer?.wpmLoadFired) {\n\n\t\t\tjQuery(document).trigger(\"wpmLoadAlways\")\n\n\t\t\tif (wpmDataLayer?.shop) {\n\t\t\t\tif (\n\t\t\t\t\t\"product\" === wpmDataLayer.shop.page_type &&\n\t\t\t\t\t\"variable\" !== wpmDataLayer.shop.product_type &&\n\t\t\t\t\twpm.getMainProductIdFromProductPage()\n\t\t\t\t) {\n\t\t\t\t\tlet product = wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage())\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t\t\t\t} else if (\"product_category\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmCategory\")\n\t\t\t\t} else if (\"search\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmSearch\")\n\t\t\t\t} else if (\"cart\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewCart\")\n\t\t\t\t} else if (\"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer.order) {\n\t\t\t\t\tif (!wpm.isOrderIdStored(wpmDataLayer.order.id)) {\n\t\t\t\t\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\t\t\t\t\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id)\n\t\t\t\t\t\tif (typeof wpm.acrRemoveCookie === \"function\") wpm.acrRemoveCookie()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.user?.id && !wpm.hasLoginEventFired()) {\n\t\t\t\tjQuery(document).trigger(\"wpmLogin\")\n\t\t\t\twpm.setLoginEventFired()\n\t\t\t}\n\n\t\t\t// /**\n\t\t\t// * Load mini cart fragments into a wpm session storage key,\n\t\t\t// * after the document load event.\n\t\t\t// */\n\t\t\t// jQuery(document).ajaxSend(function (event, jqxhr, settings) {\n\t\t\t// \t// console.log('settings.url: ' + settings.url);\n\t\t\t//\n\t\t\t// \tif (settings.url.includes(\"get_refreshed_fragments\") && sessionStorage) {\n\t\t\t// \t\tif (!sessionStorage.getItem(\"wpmMiniCartActive\")) {\n\t\t\t// \t\t\tsessionStorage.setItem(\"wpmMiniCartActive\", JSON.stringify(true))\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// })\n\n\t\t\twpmDataLayer.wpmLoadFired = true\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmLoad\", async () => {\n\n\tif (\n\t\twindow.sessionStorage &&\n\t\twindow.sessionStorage.getItem(\"_pmw_endpoint_available\") &&\n\t\t!JSON.parse(window.sessionStorage.getItem(\"_pmw_endpoint_available\"))\n\t) {\n\t\tconsole.error(\"Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.\")\n\t}\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent && !wpm.explicitConsentStateAlreadySet()) {\n\t\twpm.updateConsentCookieValues(null, null, true)\n\t}\n\n\tjQuery(document).trigger(\"wpmLoadPixels\", {})\n})\n\n\n/**\n * All ecommerce events\n */\n\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToCart\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\t// If Facebook pixel is loaded, add Facebook server to server event data to the payload\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToCart\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/gateway/docs/index?identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&language=ENGLISH&doc_id=1739585702922241#item-link-Adding%20parameters%20to%20event%20code\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToCart\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToCart\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"beginCheckout\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (wpmDataLayer?.cart && !jQuery.isEmptyObject(wpmDataLayer.cart)) {\n\t\t\tpayload.facebook.custom_data = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tcontent_ids : wpm.fbGetContentIdsFromCart(),\n\t\t\t\tvalue : wpm.getCartValue(),\n\t\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\t}\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"InitiateCheckout\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideBeginCheckout\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToWishlist\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToWishlist\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"viewItem\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"ViewContent\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.facebook.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"ViewContent\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.tiktok.properties = {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewItem\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmSearch\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"search\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Search\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"Search\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tquery: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideSearch\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmPlaceOrder\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"placeOrder\",\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"PlaceAnOrder\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientPlaceOrder\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"orderReceived\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Purchase\",\n\t\t\tevent_id : wpmDataLayer.order.id,\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tcontent_ids : wpm.facebookContentIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"CompletePayment\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcontents: wpm.getTikTokOrderItemIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideOrderReceivedPage\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// ! No server-to-server event is sent for this event because it is compiled and sent from the server directly\n})\n\n\n\n\n\n","/**\n * Register event listeners\n */\n\n\n/**\n * add_to_cart event\n *\n * WC is inconsistent with events that emit add-to-cart events.\n * adding_to_cart and added_to_are legacy events. Also, they only work\n * on Ajax buttons on shop pages.\n */\n\nconst addToCartSelectors = [\n\t\".add_to_cart_button:not(.product_type_variable)\",\n\t\".ajax_add_to_cart\",\n\t\".single_add_to_cart_button\",\n].join(\",\")\n\njQuery(addToCartSelectors).on(\"click adding_to_cart\", (event) => {\n\t// console log current time\n\t// console.log(\"add_to_cart event fired at: \" + new Date().getTime())\n\n\ttry {\n\n\t\t// console.log(\"add_to_cart event detected\")\n\n\t\tlet quantity = 1,\n\t\t\tproductId\n\n\t\t// Only process on product pages\n\t\tif (wpmDataLayer.shop.page_type === \"product\") {\n\n\t\t\t// First process related and upsell products\n\t\t\tif (typeof jQuery(event.currentTarget).attr(\"href\") !== \"undefined\" && jQuery(event.currentTarget).attr(\"href\").includes(\"add-to-cart\")) {\n\n\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is simple product\n\t\t\tif (wpmDataLayer.shop.product_type === \"simple\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(event.currentTarget).val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is variable product or variable-subscription\n\t\t\tif ([\"variable\", \"variable-subscription\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"[name='variation_id']\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is grouped product\n\t\t\tif (wpmDataLayer.shop.product_type === \"grouped\") {\n\n\t\t\t\tjQuery(\".woocommerce-grouped-product-list-item\").each((index, element) => {\n\n\t\t\t\t\tquantity = Number(jQuery(element).find(\".input-text.qty\").val())\n\t\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\t\tlet classes = jQuery(element).attr(\"class\")\n\t\t\t\t\tproductId = wpm.getPostIdFromString(classes)\n\n\t\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// If is bundle product\n\t\t\tif (wpmDataLayer.shop.product_type === \"bundle\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"input[name=add-to-cart]\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\t\t\twpm.addProductToCart(productId, quantity)\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * If someone clicks anywhere on a custom /?add-to-cart=123 link\n * trigger the add to cart event\n */\n\n// jQuery(document).one(\"click\", \"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\", (event) => {\njQuery(\"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\").one(\"click\", (event) => {\n\n\ttry {\n\t\tif (jQuery(event.target).closest(\"a\").attr(\"href\")) {\n\n\t\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"), window.location.origin)\n\n\t\t\tif (url.searchParams.has(\"add-to-cart\")) {\n\n\t\t\t\tlet productId = url.searchParams.get(\"add-to-cart\")\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select item event\n// jQuery(document).on(\"click\", \".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\", (event) => {\njQuery(\".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\").on(\"click\", (event) => {\n\n\ttry {\n\n\t\t/**\n\t\t * On some pages the event fires multiple times, and on product pages\n\t\t * even on page load. Using e.stopPropagation helps to prevent this,\n\t\t * but I don't know why. We don't even have to use this, since only a real\n\t\t * product click yields a valid productId. So we filter the invalid click\n\t\t * events out later down in the code. I'll keep it that way because this is\n\t\t * the most compatible way across shops.\n\t\t *\n\t\t * e.stopPropagation();\n\t\t * */\n\n\t\tlet productId = jQuery(event.currentTarget).nextAll(\".wpmProductId:first\").data(\"id\")\n\n\t\t/**\n\t\t * On product pages, for some reason, the click event is triggered on the main product on page load.\n\t\t * In that case no ID is found. But we can discard it, since we only want to trigger the event on\n\t\t * related products, which are found below.\n\t\t */\n\n\t\tif (productId) {\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\t\t\tjQuery(document).trigger(\"wpmSelectContentGaUa\", product)\n\t\t\t\tjQuery(document).trigger(\"wpmSelectItem\", product)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// checkout_progress event\n// track checkout option event: entered valid billing email\n// jQuery(document).on(\"input\", \"#billing_email\", (event) => {\njQuery(\"#billing_email\").on(\"input\", (event) => {\n\n\tif (wpm.isEmail(jQuery(event.currentTarget).val())) {\n\t\t// wpm.fireCheckoutOption(2);\n\t\twpm.fireCheckoutProgress(2)\n\t\twpm.emailSelected = true\n\t}\n})\n\n\n/**\n * Place order button\n *\n * Track checkout option event: purchase click\n * https://stackoverflow.com/a/34112407/4688612\n * jQuery(document).one(\"click\", \"#place_order\", () => {\n *\n * Has to be hooked after document ready !\n */\njQuery(\"form.checkout\").on(\"checkout_place_order_success\", () => {\n\n\t// console log current time\n\t// console.log(\"checkout_place_order_success event fired at: \" + new Date().getTime())\n\n\tif (false === wpm.emailSelected) {\n\t\twpm.fireCheckoutProgress(2)\n\t}\n\n\tif (false === wpm.paymentMethodSelected) {\n\t\twpm.fireCheckoutProgress(3)\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t}\n\n\twpm.fireCheckoutProgress(4)\n\n\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n})\n\n/**\n * Update cart event\n *\n * Has to be hooked after document ready !\n */\njQuery(\"[name='update_cart']\").on(\"click\", () => {\n\n\ttry {\n\t\tjQuery(\".cart_item\").each((index, element) => {\n\n\t\t\tlet url = new URL(jQuery(element).find(\".product-remove\").find(\"a\").attr(\"href\"))\n\t\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\t\tlet quantity = jQuery(element).find(\".qty\").val()\n\n\t\t\tif (quantity === 0) {\n\t\t\t\twpm.removeProductFromCart(productId)\n\t\t\t} else if (quantity < wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.removeProductFromCart(productId, wpmDataLayer.cart[productId].quantity - quantity)\n\t\t\t} else if (quantity > wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.addProductToCart(productId, quantity - wpmDataLayer.cart[productId].quantity)\n\t\t\t}\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t\twpm.getCartItemsFromBackend()\n\t}\n})\n\n// add_to_wishlist\njQuery(\".add_to_wishlist,.wl-add-to\").on(\"click\", event => {\n\n\ttry {\n\n\t\tlet productId\n\n\t\tif (jQuery(event.currentTarget).data(\"productid\")) { // for the WooCommerce wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"productid\")\n\t\t} else if (jQuery(event.currentTarget).data(\"product-id\")) { // for the YITH wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product-id\")\n\t\t}\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\n\t\tjQuery(document).trigger(\"wpmAddToWishlist\", product)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called when the user selects all the required dropdowns / attributes\n *\n * Has to be hooked after document ready !\n *\n * https://stackoverflow.com/a/27849208/4688612\n * https://stackoverflow.com/a/65065335/4688612\n */\n\njQuery(\".single_variation_wrap\").on(\"show_variation\", (event, variation) => {\n\n\ttry {\n\t\tlet productId = wpm.getIdBasedOndVariationsOutputSetting(variation.variation_id)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\twpm.triggerViewItemEventPrep(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called on variable products when no selection has been done yet\n * or when the visitor deselects his choice.\n *\n * Has to be hooked after document ready !\n */\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n//\n// \t\ttry {\n// \t\t\tlet classes = jQuery(\"body\").attr(\"class\")\n// \t\t\tlet productId = classes.match(/(postid-)(\\d+)/)[2]\n//\n// \t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n//\n// \t\t\t/**\n// \t\t\t * If we have a variable product with no preset,\n// \t\t\t * and variations output is enabled,\n// \t\t\t * then we send a viewItem event with the first\n// \t\t\t * variation we find for the parent.\n// \t\t\t * If variations output is disabled,\n// \t\t\t * we just send the parent ID.\n// \t\t\t *\n// \t\t\t * And if Facebook microdata is active, use the\n// \t\t\t * microdata product ID.\n// \t\t\t */\n//\n// \t\t\tif (\n// \t\t\t\t\"variable\" === wpmDataLayer.shop.product_type &&\n// \t\t\t\twpmDataLayer?.general?.variationsOutput\n// \t\t\t) {\n// \t\t\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n// \t\t\t\t\tif (\"parentId\" in product) {\n//\n// \t\t\t\t\t\tproductId = product.id\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n// \t\t\t\t}\n//\n// \t\t\t\tif (wpmDataLayer?.pixels?.facebook?.microdata_product_id) {\n// \t\t\t\t\tproductId = wpmDataLayer.pixels.facebook.microdata_product_id\n// \t\t\t\t}\n// \t\t\t}\n//\n// \t\t\t// console.log(\"hmm\")\n// \t\t\twpm.triggerViewItemEventPrep(productId)\n//\n// \t\t} catch (e) {\n// \t\t\tconsole.error(e)\n// \t\t}\n// \t})\n// })\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n// \t\tjQuery(document).trigger(\"wpmviewitem\")\n// \t})\n// })\n","/**\n * Create a wpm namespace under which all functions are declared\n */\n\n// https://stackoverflow.com/a/5947280/4688612\n\n(function (wpm, $, undefined) {\n\n\tconst wpmDeduper = {\n\t\tkeyName : \"_wpm_order_ids\",\n\t\tcookieExpiresDays: 365,\n\t}\n\n\tconst wpmRestSettings = {\n\t\t// cookiesAvailable : '_wpm_cookies_are_available',\n\t\tcookiePmwRestEndpointAvailable: \"_pmw_endpoint_available\",\n\t\trestEndpointPost : \"pmw/v1/test/\",\n\t\trestFails : 0,\n\t\trestFailsThreshold : 10,\n\t}\n\n\twpm.emailSelected = false\n\twpm.paymentMethodSelected = false\n\n\t// wpm.checkIfCookiesAvailable = function () {\n\t//\n\t// // read the cookie if previously set, if it is return true, otherwise continue\n\t// if (wpm.getCookie(wpmRestSettings.cookiesAvailable)) {\n\t// return true;\n\t// }\n\t//\n\t// // set the cookie for the session\n\t// Cookies.set(wpmRestSettings.cookiesAvailable, true);\n\t//\n\t// // read cookie, true if ok, false if not ok\n\t// return !!wpm.getCookie(wpmRestSettings.cookiesAvailable);\n\t// }\n\n\twpm.useRestEndpoint = () => {\n\n\t\t// only if sessionStorage is available\n\n\t\t// only if REST API endpoint is generally accessible\n\t\t// check in sessionStorage if we checked before and return answer\n\t\t// otherwise check if the endpoint is available, save answer in sessionStorage and return answer\n\n\t\t// only if not too many REST API errors happened\n\n\t\treturn wpm.isSessionStorageAvailable() &&\n\t\t\twpm.isRestEndpointAvailable() &&\n\t\t\twpm.isBelowRestErrorThreshold()\n\t}\n\n\twpm.isBelowRestErrorThreshold = () => window.sessionStorage.getItem(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\tif (window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn JSON.parse(window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable))\n\t\t} else {\n\t\t\treturn await wpm.testEndpoint()\n\t\t}\n\t}\n\n\twpm.isSessionStorageAvailable = () => !!window.sessionStorage\n\n\t// Test the endpoint by sending a POST request\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tlet response = await fetch(url, {\n\t\t\tmethod : \"POST\",\n\t\t\tmode : \"cors\",\n\t\t\tcache : \"no-cache\",\n\t\t\tkeepalive: true,\n\t\t})\n\n\t\tif (response.status === 200) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(true))\n\t\t\treturn true\n\t\t} else if (response.status === 404) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t} else if (response.status === 0) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.getCookie(cookieName)\n\n\twpm.writeOrderIdToStorage = (orderId, source = \"thankyou_page\", expireDays = 365) => {\n\n\t\t// save the order ID in the browser storage\n\n\t\tif (!window.Storage) {\n\t\t\tlet expiresDate = new Date()\n\t\t\texpiresDate.setDate(expiresDate.getDate() + wpmDeduper.cookieExpiresDays)\n\n\t\t\tlet ids = []\n\t\t\tif (checkCookie()) {\n\t\t\t\tids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t}\n\n\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\tids.push(orderId)\n\t\t\t\tdocument.cookie = wpmDeduper.keyName + \"=\" + JSON.stringify(ids) + \";expires=\" + expiresDate.toUTCString()\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (localStorage.getItem(wpmDeduper.keyName) === null) {\n\t\t\t\tlet ids = []\n\t\t\t\tids.push(orderId)\n\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\n\t\t\t} else {\n\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\t\tids.push(orderId)\n\t\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof wpm.storeOrderIdOnServer === \"function\" && wpmDataLayer.orderDeduplication) {\n\t\t\twpm.storeOrderIdOnServer(orderId, source)\n\t\t}\n\t}\n\n\tfunction checkCookie() {\n\t\tlet key = wpm.getCookie(wpmDeduper.keyName)\n\t\treturn key !== \"\"\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\tif (wpmDataLayer.orderDeduplication) {\n\n\t\t\tif (!window.Storage) {\n\n\t\t\t\tif (checkCookie()) {\n\t\t\t\t\tlet ids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (localStorage.getItem(wpmDeduper.keyName) !== null) {\n\t\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"order duplication prevention: off\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isEmail = email => {\n\n\t\t// https://emailregex.com/\n\n\t\tlet regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\n\t\treturn regex.test(email)\n\t}\n\n\twpm.removeProductFromCart = (productId, quantityToRemove = null) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tlet quantity\n\n\t\t\tif (quantityToRemove == null) {\n\t\t\t\tquantity = wpmDataLayer.cart[productId].quantity\n\t\t\t} else {\n\t\t\t\tquantity = quantityToRemove\n\t\t\t}\n\n\t\t\tif (wpmDataLayer.cart[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\t\tjQuery(document).trigger(\"wpmRemoveFromCart\", product)\n\n\t\t\t\tif (quantityToRemove == null || wpmDataLayer.cart[productId].quantity === quantityToRemove) {\n\n\t\t\t\t\tdelete wpmDataLayer.cart[productId]\n\n\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t\t} else {\n\n\t\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\n\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\t// console.log('getting cart from back end');\n\t\t\t// wpm.getCartItemsFromBackend();\n\t\t\t// console.log('getting cart from back end done');\n\t\t}\n\t}\n\n\twpm.getIdBasedOndVariationsOutputSetting = productId => {\n\n\t\ttry {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput) {\n\n\t\t\t\treturn productId\n\t\t\t} else {\n\t\t\t\tif (wpmDataLayer.products[productId].isVariation) {\n\n\t\t\t\t\treturn wpmDataLayer.products[productId].parentId\n\t\t\t\t} else {\n\n\t\t\t\t\treturn productId\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// add_to_cart\n\twpm.addProductToCart = (productId, quantity) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer?.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\t\tjQuery(document).trigger(\"wpmAddToCart\", product)\n\n\t\t\t\t// add product to cart wpmDataLayer['cart']\n\n\t\t\t\t// if the product already exists in the object, only add the additional quantity\n\t\t\t\t// otherwise create that product object in the wpmDataLayer['cart']\n\t\t\t\tif (wpmDataLayer?.cart[productId]) {\n\n\t\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity + quantity\n\t\t\t\t} else {\n\n\t\t\t\t\tif (!(\"cart\" in wpmDataLayer)) wpmDataLayer.cart = {}\n\n\t\t\t\t\twpmDataLayer.cart[productId] = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\t\t\t\t}\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\n\t\t\t// fallback if wpmDataLayer.cart and wpmDataLayer.products got out of sync in case cart caching has an issue\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\twpm.getCartItems = () => {\n\n\t\tif (sessionStorage) {\n\t\t\tif (!sessionStorage.getItem(\"wpmDataLayerCart\") || wpmDataLayer.shop.page_type === \"order_received_page\") {\n\t\t\t\tsessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify({}))\n\t\t\t} else {\n\t\t\t\twpm.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem(\"wpmDataLayerCart\")))\n\t\t\t}\n\t\t} else {\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\t// get all cart items from the backend\n\twpm.getCartItemsFromBackend = () => {\n\t\ttry {\n\n\t\t\t/**\n\t\t\t * Can't use a REST API endpoint, as the cart session will not be loaded if the\n\t\t\t * endpoint is called.\n\t\t\t *\n\t\t\t * https://wordpress.org/support/topic/wc-cart-is-null-in-custom-rest-api/#post-11442843\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * Get the cart items from the backend the data object using fetch API\n\t\t\t * and log success or error messages\n\t\t\t * and url encoded data\n\t\t\t */\n\t\t\tfetch(wpm.ajax_url, {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\tbody : new URLSearchParams({action: \"pmw_get_cart_items\"}),\n\t\t\t\tkeepalive: true,\n\t\t\t})\n\t\t\t\t.then(response => {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\treturn response.json()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\n\t\t\t\t\tif (data.success) {\n\n\t\t\t\t\t\tif (!data.data[\"cart\"]) data.data[\"cart\"] = {}\n\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\n\t\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(data.data[\"cart\"]))\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// get productIds from the backend\n\twpm.getProductsFromBackend = async productIds => {\n\n\t\tif (wpmDataLayer?.products) {\n\t\t\t// If productIds already exists as key in wpmDataLayer.products, remove it from the array\n\t\t\tproductIds = productIds.filter(productId => !(productId in wpmDataLayer.products))\n\t\t}\n\n\t\t// if no products IDs are in the object, don't try to get anything from the server\n\t\tif (!productIds || productIds.length === 0) return\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/products/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t} else {\n\n\t\t\t\t// Get the product details from the backend the data object using fetch API\n\t\t\t\t// and log success or error messages\n\t\t\t\t// and url encoded data\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_get_product_ids\",\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\tlet responseData = await response.json()\n\t\t\t\tif (responseData.success) {\n\t\t\t\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, responseData.data)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error getting products from backend\")\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\n\t\treturn true\n\t}\n\n\twpm.saveCartObjectToDataLayer = cartObject => {\n\n\t\twpmDataLayer.cart = cartObject\n\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, cartObject)\n\t}\n\n\twpm.triggerViewItemEventPrep = async productId => {\n\n\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t} else {\n\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t}\n\t}\n\n\twpm.triggerViewItemEvent = productId => {\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t}\n\n\twpm.triggerViewItemEventNoProduct = () => {\n\t\tjQuery(document).trigger(\"wpmViewItem\")\n\t}\n\n\twpm.fireCheckoutOption = (step, checkout_option = null, value = null) => {\n\n\t\tlet data = {\n\t\t\tstep : step,\n\t\t\tcheckout_option: checkout_option,\n\t\t\tvalue : value,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutOption\", data)\n\t}\n\n\twpm.fireCheckoutProgress = step => {\n\n\t\tlet data = {\n\t\t\tstep: step,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutProgress\", data)\n\t}\n\n\twpm.getPostIdFromString = string => {\n\n\t\ttry {\n\t\t\treturn string.match(/(post-)(\\d+)/)[2]\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.triggerViewItemList = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tjQuery(document).trigger(\"wpmViewItemList\", wpm.getProductDataForViewItemEvent(productId))\n\t}\n\n\twpm.getProductDataForViewItemEvent = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\ttry {\n\t\t\tif (wpmDataLayer.products[productId]) {\n\n\t\t\t\treturn wpm.getProductDetailsFormattedForEvent(productId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getMainProductIdFromProductPage = () => {\n\n\t\ttry {\n\t\t\tif ([\"simple\", \"variable\", \"grouped\", \"composite\", \"bundle\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\t\t\t\treturn jQuery(\".wpmProductId:first\").data(\"id\")\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.viewItemListTriggerTestMode = target => {\n\n\t\tjQuery(target).css({\"position\": \"relative\"})\n\t\tjQuery(target).append(\"<div id=\\\"viewItemListTriggerOverlay\\\"></div>\")\n\t\tjQuery(target).find(\"#viewItemListTriggerOverlay\").css({\n\t\t\t\"z-index\" : \"10\",\n\t\t\t\"display\" : \"block\",\n\t\t\t\"position\" : \"absolute\",\n\t\t\t\"height\" : \"100%\",\n\t\t\t\"top\" : \"0\",\n\t\t\t\"left\" : \"0\",\n\t\t\t\"right\" : \"0\",\n\t\t\t\"opacity\" : wpmDataLayer.viewItemListTrigger.opacity,\n\t\t\t\"background-color\": wpmDataLayer.viewItemListTrigger.backgroundColor,\n\t\t})\n\t}\n\n\twpm.getSearchTermFromUrl = () => {\n\n\t\ttry {\n\t\t\tlet urlParameters = new URLSearchParams(window.location.search)\n\t\t\treturn urlParameters.get(\"s\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// we need this to track timeouts for intersection observers\n\tlet ioTimeouts = {}\n\n\twpm.observerCallback = (entries, observer) => {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\ttry {\n\t\t\t\tlet productId\n\n\t\t\t\tlet elementId = jQuery(entry.target).data(\"ioid\")\n\n\t\t\t\t// Get the productId from next element, if wpmProductId is a sibling, like in Gutenberg blocks\n\t\t\t\t// otherwise go search in children, like in regular WC loop items\n\t\t\t\tif (jQuery(entry.target).next(\".wpmProductId\").length) {\n\t\t\t\t\t// console.log('test 1');\n\t\t\t\t\tproductId = jQuery(entry.target).next(\".wpmProductId\").data(\"id\")\n\t\t\t\t} else {\n\t\t\t\t\tproductId = jQuery(entry.target).find(\".wpmProductId\").data(\"id\")\n\t\t\t\t}\n\n\n\t\t\t\tif (!productId) throw Error(\"wpmProductId element not found\")\n\n\t\t\t\tif (entry.isIntersecting) {\n\n\t\t\t\t\tioTimeouts[elementId] = setTimeout(() => {\n\n\t\t\t\t\t\twpm.triggerViewItemList(productId)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) wpm.viewItemListTriggerTestMode(entry.target)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.repeat === false) observer.unobserve(entry.target)\n\t\t\t\t\t}, wpmDataLayer.viewItemListTrigger.timeout)\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearTimeout(ioTimeouts[elementId])\n\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) jQuery(entry.target).find(\"#viewItemListTriggerOverlay\").remove()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t})\n\t}\n\n\t// fire view_item_list only on products that have become visible\n\tlet io\n\tlet ioid = 0\n\tlet allIoElementsToWatch\n\n\tlet getAllElementsToWatch = () => {\n\n\t\tallIoElementsToWatch = jQuery(\".wpmProductId\")\n\t\t\t.map(function (i, elem) {\n\n\t\t\t\tif (\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"type-product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product-item-inner\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(elem).parent()\n\t\t\t\t} else if (\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"wc-block-grid__product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product-small\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"woocommerce-LoopProduct-link\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(this).prev()\n\t\t\t\t} else if (jQuery(elem).closest(\".product\").length) {\n\t\t\t\t\treturn jQuery(elem).closest(\".product\")\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\twpm.startIntersectionObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// enable view_item_list test mode from browser\n\t\t\tif (wpm.urlHasParameter(\"vildemomode\")) wpmDataLayer.viewItemListTrigger.testMode = true\n\n\t\t\t// set up intersection observer\n\t\t\tio = new IntersectionObserver(wpm.observerCallback, {\n\t\t\t\tthreshold: wpmDataLayer.viewItemListTrigger.threshold,\n\t\t\t})\n\n\t\t\tgetAllElementsToWatch()\n\n\t\t\tallIoElementsToWatch.each((i, elem) => {\n\n\t\t\t\tjQuery(elem[0]).data(\"ioid\", ioid++)\n\n\t\t\t\tio.observe(elem[0])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// watch DOM for new lazy loaded products and add them to the intersection observer\n\twpm.startProductsMutationObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// Pass in the target node, as well as the observer options\n\n\t\t\t// selects the most common parent node\n\t\t\t// https://stackoverflow.com/a/7648323/4688612\n\t\t\tlet productsNode = jQuery(\".wpmProductId:eq(0)\").parents().has(jQuery(\".wpmProductId:eq(1)\").parents()).first()\n\n\t\t\tif (productsNode.length) {\n\t\t\t\tproductsMutationObserver.observe(productsNode[0], {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Create an observer instance\n\tlet productsMutationObserver = new MutationObserver(mutations => {\n\n\t\tmutations.forEach(mutation => {\n\t\t\tlet newNodes = mutation.addedNodes // DOM NodeList\n\t\t\tif (newNodes !== null) { // If there are new nodes added\n\t\t\t\tlet nodes = jQuery(newNodes) // jQuery set\n\t\t\t\tnodes.each(function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\tjQuery(this).hasClass(\"type-product\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"product-small\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"wc-block-grid__product\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// check if the node has a child or sibling wpmProductId\n\t\t\t\t\t\t// if yes add it to the intersectionObserver\n\t\t\t\t\t\tif (hasWpmProductIdElement(this)) {\n\t\t\t\t\t\t\tjQuery(this).data(\"ioid\", ioid++)\n\t\t\t\t\t\t\tio.observe(this)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\tlet hasWpmProductIdElement = elem =>\n\t\t!!(jQuery(elem).find(\".wpmProductId\").length ||\n\t\t\tjQuery(elem).siblings(\".wpmProductId\").length)\n\n\twpm.setCookie = (cookieName, cookieValue = \"\", expiryDays = null) => {\n\n\t\tif (expiryDays) {\n\n\t\t\tlet d = new Date()\n\t\t\td.setTime(d.getTime() + (expiryDays * 24 * 60 * 60 * 1000))\n\t\t\tlet expires = \"expires=\" + d.toUTCString()\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\"\n\t\t} else {\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";path=/\"\n\t\t}\n\t}\n\n\twpm.getCookie = cookieName => {\n\n\t\tlet name = cookieName + \"=\"\n\t\tlet decodedCookie = decodeURIComponent(document.cookie)\n\t\tlet ca = decodedCookie.split(\";\")\n\n\t\tfor (let i = 0; i < ca.length; i++) {\n\n\t\t\tlet c = ca[i]\n\n\t\t\twhile (c.charAt(0) == \" \") {\n\t\t\t\tc = c.substring(1)\n\t\t\t}\n\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length)\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\twpm.deleteCookie = cookieName => {\n\t\twpm.setCookie(cookieName, \"\", -1)\n\t}\n\n\twpm.getWpmSessionData = () => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(\"_wpm\")\n\n\t\t\tif (data !== null) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t} else {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\twpm.setWpmSessionData = data => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(\"_wpm\", JSON.stringify(data))\n\t\t}\n\t}\n\n\twpm.storeOrderIdOnServer = async (orderId, source) => {\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/pixels-fired/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t// \"X-WP-Nonce\" : wpm.nonce,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\torder_id: orderId,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce : wpm.nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t})\n\n\t\t\t} else {\n\t\t\t\t// save the state in the database\n\n\t\t\t\t// Send the data object with ajax request\n\t\t\t\t// and log success or error using fetch API and url encoded\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_purchase_pixels_fired\",\n\t\t\t\t\t\torder_id: orderId,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce : wpm.nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\t// console.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.error(\"wpm.storeOrderIdOnServer error\")\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getProductIdByCartItemKeyUrl = url => {\n\n\t\tlet searchParams = new URLSearchParams(url.search)\n\t\tlet cartItemKey = searchParams.get(\"remove_item\")\n\n\t\tlet productId\n\n\t\tif (wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"] === 0) {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"product_id\"]\n\t\t} else {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"]\n\t\t}\n\n\t\treturn productId\n\t}\n\n\twpm.getAddToCartLinkProductIds = () =>\n\t\tjQuery(\"a\").map(function () {\n\t\t\tlet href = jQuery(this).attr(\"href\")\n\n\t\t\tif (href && href.includes(\"?add-to-cart=\")) {\n\t\t\t\tlet matches = href.match(/(add-to-cart=)(\\d+)/)\n\t\t\t\tif (matches) return matches[2]\n\t\t\t}\n\t\t}).get()\n\n\twpm.getProductDetailsFormattedForEvent = (productId, quantity = 1) => {\n\n\t\tlet product = {\n\t\t\tid : productId.toString(),\n\t\t\tdyn_r_ids : wpmDataLayer.products[productId].dyn_r_ids,\n\t\t\tname : wpmDataLayer.products[productId].name,\n\t\t\tlist_name : wpmDataLayer.shop.list_name,\n\t\t\tbrand : wpmDataLayer.products[productId].brand,\n\t\t\tcategory : wpmDataLayer.products[productId].category,\n\t\t\tvariant : wpmDataLayer.products[productId].variant,\n\t\t\tlist_position: wpmDataLayer.products[productId].position,\n\t\t\tquantity : quantity,\n\t\t\tprice : wpmDataLayer.products[productId].price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tisVariable : wpmDataLayer.products[productId].isVariable,\n\t\t\tisVariation : wpmDataLayer.products[productId].isVariation,\n\t\t\tparentId : wpmDataLayer.products[productId].parentId,\n\t\t}\n\n\t\tif (product.isVariation) product[\"parentId_dyn_r_ids\"] = wpmDataLayer.products[productId].parentId_dyn_r_ids\n\n\t\treturn product\n\t}\n\n\twpm.setReferrerToCookie = () => {\n\n\t\t// can't use session storage as we can't read it from the server\n\t\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\t\t\twpm.setCookie(\"wpmReferrer\", document.referrer)\n\t\t}\n\t}\n\n\twpm.getReferrerFromCookie = () => {\n\n\t\tif (wpm.getCookie(\"wpmReferrer\")) {\n\t\t\treturn wpm.getCookie(\"wpmReferrer\")\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\twpm.getClidFromBrowser = (clidId = \"gclid\") => {\n\n\t\tlet clidCookieId\n\n\t\tclidCookieId = {\n\t\t\tgclid: \"_gcl_aw\",\n\t\t\tdclid: \"_gcl_dc\",\n\t\t}\n\n\t\tif (wpm.getCookie(clidCookieId[clidId])) {\n\n\t\t\tlet clidCookie = wpm.getCookie(clidCookieId[clidId])\n\t\t\tlet matches = clidCookie.match(/(GCL.[\\d]*.)(.*)/)\n\t\t\treturn matches[2]\n\t\t} else {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n\twpm.getUserAgent = () => navigator.userAgent\n\n\twpm.getViewPort = () => ({\n\t\twidth : Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t\theight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0),\n\t})\n\n\n\twpm.version = () => {\n\t\tconsole.log(wpmDataLayer.version)\n\t}\n\n\t/**\n\t * https://api.jquery.com/jquery.getscript/\n\t *\n\t * Switched back to jQuery.ajax as the fetch method on some sites returned a type error\n\t * Possible reasons are:\n\t * * CORS mismatch\n\t * * The user is using an ad blocker\n\t */\n\n\twpm.loadScriptAndCacheIt = url => {\n\n\t\t// Get and load the script using fetch API, if possible from cache, and return it without using eval\n\t\t// return fetch(url, {\n\t\t// \tmethod : \"GET\",\n\t\t// \tcache : \"default\",\n\t\t// \tkeepalive: true,\n\t\t// })\n\t\t// \t.then(response => {\n\t\t// \t\tif (response.ok) {\n\t\t// \t\t\t// console.log(\"response\", response)\n\t\t// \t\t\treturn response.text()\n\t\t// \t\t\t// console.log(\"wpm.loadScriptAndCacheIt success: \" + url)\n\t\t// \t\t} else {\n\t\t// \t\t\tthrow new Error(\"Network response was not ok: \" + url)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.then(script => {\n\t\t// \t\t// Execute the script\n\t\t// \t\t// console.error(\"executing script: \" + script)\n\t\t// \t\teval(script)\n\t\t// \t\t// console.log(\"executed script: \" + script)\n\t\t// \t})\n\t\t// \t.catch(e => {\n\t\t// \t\tconsole.error(e)\n\t\t// \t})\n\n\t\tlet options = {\n\t\t\tdataType: \"script\",\n\t\t\tcache : true,\n\t\t\turl : url,\n\t\t}\n\n\t\treturn jQuery.ajax(options)\n\t}\n\n\twpm.getOrderItemPrice = orderItem => (orderItem.total + orderItem.total_tax) / orderItem.quantity\n\n\twpm.hasLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setWpmSessionData(data)\n\t}\n\n\twpm.wpmDataLayerExists = () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (typeof wpmDataLayer !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.jQueryExists = () => new Promise(resolve => {\n\t\t(function waitForjQuery() {\n\t\t\tif (typeof jQuery !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForjQuery, 100)\n\t\t})()\n\t})\n\n\twpm.pageLoaded = () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (\"complete\" === document.readyState) return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.pageReady = () => {\n\t\treturn new Promise(resolve => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\"interactive\" === document.readyState || \"complete\" === document.readyState) return resolve()\n\t\t\t\tsetTimeout(waitForVar, 50)\n\t\t\t})()\n\t\t})\n\t}\n\n\twpm.isMiniCartActive = () => {\n\t\tif (window.sessionStorage) {\n\t\t\tfor (const [key, value] of Object.entries(window.sessionStorage)) {\n\t\t\t\tif (key.includes(\"wc_fragments\")) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.doesWooCommerceCartExist = () => document.cookie.includes(\"woocommerce_items_in_cart\")\n\n\twpm.urlHasParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.has(parameter)\n\t}\n\n\t// https://stackoverflow.com/a/60606893/4688612\n\twpm.hashAsync = (algo, str) => {\n\t\treturn crypto.subtle.digest(algo, new TextEncoder(\"utf-8\").encode(str)).then(buf => {\n\t\t\treturn Array.prototype.map.call(new Uint8Array(buf), x => ((\"00\" + x.toString(16)).slice(-2))).join(\"\")\n\t\t})\n\t}\n\n\twpm.getCartValue = () => {\n\n\t\tlet value = 0\n\n\t\tif (wpmDataLayer?.cart) {\n\n\t\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\t\t// content_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\n\t\t\t\tlet product = wpmDataLayer.cart[key]\n\n\t\t\t\tvalue += product.quantity * product.price\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern\n\t *\n\t * @param patterns\n\t * @returns {boolean}\n\t */\n\twpm.doesUrlContainPatterns = patterns => {\n\n\t\tfor (const pattern of patterns) {\n\t\t\tif (new RegExp(pattern).test(window.location.href)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern that is on the tracking exclusion list\n\t *\n\t * https://www.linkedin.com/pulse/how-remove-google-robot-problem-via-gtm-facebook-pixel-hjelpdahl/\n\t * https://www.youtube.com/watch?v=b4I1ePZt8Z0\n\t *\n\t * @returns {boolean}\n\t */\n\twpm.excludeDomainFromTracking = () => {\n\n\t\tlet excludeDomains = [\n\t\t\t\"appspot.com\",\n\t\t\t\"translate.google.com\",\n\t\t]\n\n\t\tif (wpmDataLayer?.general?.excludeDomains) {\n\t\t\texcludeDomains = [...excludeDomains, ...wpmDataLayer.general.excludeDomains]\n\t\t}\n\n\t\t// Abort if URL contains excluded domains\n\t\tif (excludeDomains.some(domain => window.location.href.includes(domain))) {\n\t\t\tconsole.debug(\"Pixel Manager for WooCommerce: Aborted due to excluded domain\")\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.getRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\tlet jQueryReadyFired = false\n\n\tconst fireJQueryReady = () => {\n\t\tif (jQueryReadyFired === false) jQuery(document).trigger(\"pmw:ready\")\n\t\tjQueryReadyFired = true\n\t}\n\n\tjQuery(document).on(\"ready\", () => {\n\t\tfireJQueryReady()\n\t})\n\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\tfireJQueryReady()\n\t})\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load all WPM functions\n *\n * Ignore event listeners. They need to be loaded after\n * we made sure that jQuery has been loaded.\n */\n\nrequire(\"./functions\")\nrequire(\"./cookie_consent\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// #endif\n","/**\n * After WPM is loaded\n * we first check if wpmDataLayer is loaded,\n * and as soon as it is, we load the pixels,\n * and as soon as the page load is complete,\n * we fire the wpmLoad event.\n *\n * @param {{pro:bool}} wpmDataLayer.version\n *\n * https://stackoverflow.com/a/25868457/4688612\n * https://stackoverflow.com/a/44093516/4688612\n */\n\nwpm.wpmDataLayerExists()\n\t.then(() => {\n\t\tconsole.log(\"Pixel Manager for WooCommerce: \" + (wpmDataLayer.version.pro ? \"Pro\" : \"Free\") + \" Version \" + wpmDataLayer.version.number + \" loaded\")\n\n\t\tif (wpm.excludeDomainFromTracking()) return\n\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t})\n\t.then(() => {\n\t\twpm.pageLoaded().then(() => {\n\t\t\tdocument.dispatchEvent(new Event(\"wpmLoad\"))\n\t\t})\n\t})\n\n\n/**\n * Run when page is ready\n */\n\n// wpm.pageReady().then(() => {\njQuery(document).on(\"pmw:ready\", () => {\n\n\t/**\n\t * Run as soon as wpm namespace is loaded\n\t */\n\n\twpm.wpmDataLayerExists()\n\t\t.then(() => {\n\t\t\t// watch for products visible in viewport\n\t\t\twpm.startIntersectionObserverToWatch()\n\n\t\t\t// watch for lazy loaded products\n\t\t\twpm.startProductsMutationObserverToWatch()\n\t\t})\n})\n\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Load all essential scripts first\n */\n\nrequire(\"./wpm/functions_loader\")\n\n// Only load the event listeners after jQuery has been loaded for sure\nwpm.jQueryExists().then(function () {\n\n\tjQuery(document).on(\"pmw:ready\", () => {\n\t\trequire(\"./wpm/event_listeners_on_ready\")\n\t})\n\n\trequire(\"./wpm/event_listeners\")\n\n\t// require(\"./wpm/wc_hooks\")\n\n\trequire(\"./google/loader\")\n\trequire(\"./facebook/loader\")\n\trequire(\"./hotjar/loader\")\n\n\t/**\n\t * Load all premium scripts\n\t */\n\n\t// #if process.env.TIER === 'premium'\n// \trequire(\"./wpm/event_listeners_premium\")\n// \trequire(\"./microsoft-ads/loader\")\n// \trequire(\"./pinterest/loader\")\n// \trequire(\"./snapchat/loader\")\n// \trequire(\"./tiktok/loader\")\n// \trequire(\"./twitter/loader\")\n\t// #endif\n\n\n\t/**\n\t * Initiate WPM.\n\t *\n\t * It makes sure that the script flow gets executed correctly,\n\t * no matter how JS \"optimizers\" shuffle the code.\n\t */\n\n\trequire(\"./wpm/init\")\n})\n\n"],"names":["jQuery","document","on","wpmDataLayer","pixels","facebook","pixel_id","loaded","wpm","doesUrlContainPatterns","exclusion_patterns","canIFire","loadFacebookPixel","event","payload","fbq","custom_data","eventID","event_id","error","console","setFbUserData","$","undefined","fbUserData","f","window","b","e","n","callMethod","apply","arguments","queue","push","_fbq","version","t","createElement","async","src","s","getElementsByTagName","parentNode","insertBefore","data","isFbpSet","isFbAdvancedMatchingEnabled","getUserIdentifiersForFb","user","id","external_id","order","user_id","email","em","billing_email_hashed","first_name","fn","billing_first_name","toLowerCase","last_name","ln","billing_last_name","phone","ph","billing_phone","replace","city","ct","billing_city","state","st","billing_state","postcode","zp","billing_postcode","country","billing_country","getFbRandomEventId","Math","random","toString","substring","getFbUserData","getFbUserDataFromBrowser","advanced_matching","getCookie","isValidFbp","fbp","isValidFbc","fbc","navigator","userAgent","client_user_agent","RegExp","test","fbGetProductDataForCapiEvent","product","content_type","content_name","name","content_ids","dyn_r_ids","dynamic_remarketing","id_type","value","parseFloat","quantity","price","currency","facebookContentIds","prodIds","key","item","Object","entries","items","general","variationsOutput","variation_id","String","products","trackCustomFacebookEvent","eventName","customData","eventId","trigger","event_name","user_data","event_source_url","location","href","fbGetContentIdsFromCart","cart","require","isEmptyObject","google","ads","conversionIds","status","googleConfigConditionsMet","isVariable","send_events_with_parent_ids","send_to","getGoogleAdsConversionIdentifiers","google_business_vertical","gtagLoaded","then","gtag","value_filtered","getGoogleAdsDynamicRemarketingOrderItems","getGoogleAdsConversionIdentifiersWithLabel","data_basic","data_with_cart","transaction_id","number","new_customer","clv_order_value_filtered","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","getGoogleAdsRegularOrderItems","conversionIdentifiers","orderItems","orderItem","analytics","universal","property_id","mp_active","affiliation","value_regular","tax","shipping","coupon","getGAUAOrderItems","category","join","variant","variant_name","brand","ga3AddListNameToProduct","item_data","productPosition","list_name","shop","list_position","ga4","measurement_id","getGA4OrderItems","item_name","item_category","item_id","item_variant","item_brand","canGoogleLoad","loadGoogle","logPreventedPixelLoading","type","consent_mode","active","getConsentValues","mode","categories","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","updateGoogleConsentMode","cookie_consent_mgmt","explicit_consent","fireGtagGoogleAds","enhanced_conversions","phone_conversion_label","phone_conversion_number","keys","page_type","enhanced_conversion_data","fireGtagGoogleAnalyticsUA","parameters","fireGtagGoogleAnalyticsGA4","debug_mode","isGoogleActive","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","setTimeout","optimize","container_id","load_google_optimize_pixel","hotjar","site_id","load_hotjar_pixel","h","o","hj","q","_hjSettings","hjid","hjsv","a","r","appendChild","getComplianzCookies","cmplz_statistics","cmplz_marketing","visitorHasChosen","getCookieLawInfoCookies","analyticsCookie","adsCookie","wpmConsentValues","setConsentValueCategories","updateConsentCookieValues","cookie","explicitConsent","JSON","parse","decodeURI","indexOf","action","length","consents","statistics","marketing","thirdparty","advanced","localStorage","getItem","log","UC_UI","addEventListener","ucUiProcessConsent","areAllConsentsAccepted","groups","URLSearchParams","get","split","groupsObject","forEach","group","groupArray","groubsObject","pmw","consentAcceptAll","ucStatisticsSlug","getSettingsLabels","filter","label","slug","consentAdjustSelectively","getServicesBaseInfo","categorySlug","consent","setConsentDefaultValuesToExplicit","pixelName","canIFireMode","scriptTagObserver","MutationObserver","mutations","addedNodes","node","shouldScriptBeActive","unblockScript","blockScript","observe","head","childList","subtree","disconnect","some","element","scriptNode","removeAttach","remove","wpmSrc","attr","appendTo","dispatchEvent","Event","removeAttr","unblockAllScripts","unblockSelectedPixels","explicitConsentStateAlreadySet","Cookiebot","detail","cmplzStatusChange","cmplzConsentData","huObserver","querySelector","hu","documentElement","body","consentRevokeAll","OneTrust","reload","duration","consentSetCookie","setCookie","stringify","getTime","url","URL","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonClasses","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","doesWooCommerceCartExist","getCartItems","productIds","getAddToCartLinkProductIds","getProductsFromBackend","referrer","referrerHostname","hostname","host","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","sessionStorage","tiktok","getRandomEventId","context","getTikTokUserDataFromBrowser","properties","contents","content_id","sendEventPayloadToServer","getCartValue","search_string","getSearchTermFromUrl","query","getTikTokOrderItemIds","addToCartSelectors","addProductToCart","Number","each","index","find","classes","getPostIdFromString","one","target","closest","origin","searchParams","has","nextAll","getIdBasedOndVariationsOutputSetting","Error","getProductDetailsFormattedForEvent","isEmail","emailSelected","getCartItemsFromBackend","variation","triggerViewItemEventPrep","wpmDeduper","wpmRestSettings","checkCookie","useRestEndpoint","isSessionStorageAvailable","isRestEndpointAvailable","isBelowRestErrorThreshold","testEndpoint","root","cookieName","response","fetch","method","cache","keepalive","setItem","isWpmRestEndpointAvailable","orderId","source","Storage","ids","expiresDate","setDate","getDate","toUTCString","storeOrderIdOnServer","orderDeduplication","quantityToRemove","isVariation","parentId","saveCartObjectToDataLayer","ajax_url","ok","json","success","headers","pageId","responseData","assign","cartObject","triggerViewItemEvent","triggerViewItemEventNoProduct","step","checkout_option","string","match","triggerViewItemList","viewItemListTriggerTestMode","css","append","viewItemListTrigger","opacity","backgroundColor","search","io","ioTimeouts","observerCallback","observer","entry","elementId","next","isIntersecting","testMode","repeat","unobserve","timeout","clearTimeout","allIoElementsToWatch","ioid","getAllElementsToWatch","map","i","elem","parent","hasClass","prev","this","startIntersectionObserverToWatch","urlHasParameter","IntersectionObserver","threshold","startProductsMutationObserverToWatch","productsNode","parents","first","productsMutationObserver","attributes","characterData","mutation","newNodes","hasWpmProductIdElement","siblings","cookieValue","expiryDays","d","setTime","expires","ca","decodeURIComponent","c","charAt","deleteCookie","getWpmSessionData","setWpmSessionData","order_id","nonce","cartItemKey","cartItemKeys","matches","position","parentId_dyn_r_ids","setReferrerToCookie","getReferrerFromCookie","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","max","clientWidth","innerWidth","height","clientHeight","innerHeight","options","dataType","ajax","getOrderItemPrice","total","total_tax","loginEventFired","wpmDataLayerExists","waitForVar","jQueryExists","waitForjQuery","pageLoaded","readyState","pageReady","isMiniCartActive","parameter","hashAsync","algo","str","crypto","subtle","digest","TextEncoder","encode","buf","Array","prototype","call","Uint8Array","x","slice","patterns","pattern","excludeDomainFromTracking","excludeDomains","domain","debug","jQueryReadyFired","fireJQueryReady","pro","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__"],"sourceRoot":""}
|
1 |
+
{"version":3,"file":"wpm-public.p1.min.js","mappings":"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","sources":["webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/cookie_consent.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners_on_ready.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/init.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/main.js"],"sourcesContent":["/**\n * All event listeners\n *\n * https://developers.facebook.com/docs/meta-pixel/reference\n * */\n\n// Load pixel event\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.facebook?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.facebook?.loaded\n\t\t&& !wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)\n\t) {\n\t\tif (wpm.canIFire(\"ads\", \"facebook-ads\")) wpm.loadFacebookPixel()\n\t}\n})\n\n// AddToCart event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToCart\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// InitiateCheckout event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"InitiateCheckout\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// AddToWishlist event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToWishlist\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// ViewContent event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"ViewContent\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n\n// view search event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Search\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// load always event\njQuery(document).on(\"wpmLoadAlways\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\twpm.setFbUserData()\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Purchase\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Add functions for Facebook\n * */\n\n(function (wpm, $, undefined) {\n\n\tlet fbUserData\n\n\twpm.loadFacebookPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.facebook.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(f,b,e,v,n,t,s)\n\t\t\t{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n\t\t\t\tn.callMethod.apply(n,arguments):n.queue.push(arguments)};\n\t\t\t\tif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n\t\t\t\tn.queue=[];t=b.createElement(e);t.async=!0;\n\t\t\t\tt.src=v;s=b.getElementsByTagName(e)[0];\n\t\t\t\ts.parentNode.insertBefore(t,s)}(window, document,'script',\n\t\t\t\t'https://connect.facebook.net/en_US/fbevents.js');\n\t\t\t// @formatter:on\n\n\t\t\tlet data = {}\n\n\t\t\t// Add user identifiers to data,\n\t\t\t// and only if fbp was set\n\t\t\tif (wpm.isFbpSet() && wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\t\tdata = {...wpm.getUserIdentifiersForFb()}\n\t\t\t}\n\n\t\t\tfbq(\"init\", wpmDataLayer.pixels.facebook.pixel_id, data)\n\t\t\tfbq(\"track\", \"PageView\")\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching\n\twpm.getUserIdentifiersForFb = () => {\n\n\t\tlet data = {}\n\n\t\t// external ID\n\t\tif (wpmDataLayer?.user?.id) data.external_id = wpmDataLayer.user.id\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.facebook?.email) data.em = wpmDataLayer.user.facebook.email\n\t\tif (wpmDataLayer?.order?.billing_email_hashed) data.em = wpmDataLayer.order.billing_email_hashed\n\n\t\t// first name\n\t\tif (wpmDataLayer?.user?.facebook?.first_name) data.fn = wpmDataLayer.user.facebook.first_name\n\t\tif (wpmDataLayer?.order?.billing_first_name) data.fn = wpmDataLayer.order.billing_first_name.toLowerCase()\n\n\t\t// last name\n\t\tif (wpmDataLayer?.user?.facebook?.last_name) data.ln = wpmDataLayer.user.facebook.last_name\n\t\tif (wpmDataLayer?.order?.billing_last_name) data.ln = wpmDataLayer.order.billing_last_name.toLowerCase()\n\n\t\t// phone\n\t\tif (wpmDataLayer?.user?.facebook?.phone) data.ph = wpmDataLayer.user.facebook.phone\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.facebook?.city) data.ct = wpmDataLayer.user.facebook.city\n\t\tif (wpmDataLayer?.order?.billing_city) data.ct = wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g, \"\")\n\n\t\t// state\n\t\tif (wpmDataLayer?.user?.facebook?.state) data.st = wpmDataLayer.user.facebook.state\n\t\tif (wpmDataLayer?.order?.billing_state) data.st = wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/, \"\")\n\n\t\t// postcode\n\t\tif (wpmDataLayer?.user?.facebook?.postcode) data.zp = wpmDataLayer.user.facebook.postcode\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.facebook?.country) data.country = wpmDataLayer.user.facebook.country\n\t\tif (wpmDataLayer?.order?.billing_country) data.country = wpmDataLayer.order.billing_country.toLowerCase()\n\n\t\treturn data\n\t}\n\n\twpm.getFbRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.getFbUserData = () => {\n\n\t\t/**\n\t\t * We need to cache the FB user data for InitiateCheckout\n\t\t * where getting the user data from the browser is too slow\n\t\t * using wpm.getCookie().\n\t\t *\n\t\t * And we need the object merge because the ViewContent hit happens too fast\n\t\t * after adding a variation to the cart because the function to cache\n\t\t * the user data is too slow.\n\t\t *\n\t\t * But we can get the user_data using wpm.getCookie()\n\t\t * because we don't move away from the page and can wait for the browser\n\t\t * to get it.\n\t\t *\n\t\t * Also, the merge ensures that new data will be added to fbUserData if new\n\t\t * data is being added later, like user ID, or fbc.\n\t\t */\n\n\t\tfbUserData = {...fbUserData, ...wpm.getFbUserDataFromBrowser()}\n\n\t\treturn fbUserData\n\t}\n\n\twpm.isFbAdvancedMatchingEnabled = () => {\n\t\tif (wpmDataLayer?.pixels?.facebook?.advanced_matching) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.setFbUserData = () => {\n\t\tfbUserData = wpm.getFbUserDataFromBrowser()\n\t}\n\n\twpm.getFbUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {}\n\n\t\tif (wpm.getCookie(\"_fbp\") && wpm.isValidFbp(wpm.getCookie(\"_fbp\"))) {\n\t\t\tdata.fbp = wpm.getCookie(\"_fbp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_fbc\") && wpm.isValidFbc(wpm.getCookie(\"_fbc\"))) {\n\t\t\tdata.fbc = wpm.getCookie(\"_fbc\")\n\t\t}\n\n\t\tif (wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\tif (wpmDataLayer?.user?.id) data.external_id = wpmDataLayer.user.id\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\treturn data\n\t}\n\n\twpm.isFbpSet = () => {\n\t\treturn !!wpm.getCookie(\"_fbp\")\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbp = fbp => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.\\d{8,20}$/)\n\n\t\treturn re.test(fbp)\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbc = fbc => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.[\\da-zA-Z_-]{8,}/)\n\n\t\treturn re.test(fbc)\n\t}\n\n\t// wpm.fbViewContent = (product = null) => {\n\t//\n\t// \ttry {\n\t// \t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\t//\n\t// \t\tlet eventId = wpm.getFbRandomEventId()\n\t//\n\t// \t\tlet data = {}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tdata.content_type = \"product\"\n\t// \t\t\tdata.content_name = product.name\n\t// \t\t\t// data.content_category = product.category\n\t// \t\t\tdata.content_ids = product.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]\n\t// \t\t\tdata.currency = wpmDataLayer.shop.currency\n\t// \t\t\tdata.value = product.price\n\t// \t\t}\n\t//\n\t// \t\tfbq(\"track\", \"ViewContent\", data, {\n\t// \t\t\teventID: eventId,\n\t// \t\t})\n\t//\n\t// \t\tlet capiData = {\n\t// \t\t\tevent_name : \"ViewContent\",\n\t// \t\t\tevent_id : eventId,\n\t// \t\t\tuser_data : wpm.getFbUserData(),\n\t// \t\t\tevent_source_url: window.location.href,\n\t// \t\t}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tproduct[\"currency\"] = wpmDataLayer.shop.currency\n\t// \t\t\tcapiData.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t// \t\t}\n\t//\n\t// \t\tjQuery(document).trigger(\"wpmFbCapiEvent\", capiData)\n\t// \t} catch (e) {\n\t// \t\tconsole.error(e)\n\t// \t}\n\t// }\n\n\twpm.fbGetProductDataForCapiEvent = product => {\n\t\treturn {\n\t\t\tcontent_type: \"product\",\n\t\t\tcontent_name: product.name,\n\t\t\tcontent_ids : [\n\t\t\t\tproduct.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type],\n\t\t\t],\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t}\n\t}\n\n\twpm.facebookContentIds = () => {\n\t\tlet prodIds = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t}\n\n\t\treturn prodIds\n\t}\n\n\twpm.trackCustomFacebookEvent = (eventName, customData = {}) => {\n\t\ttry {\n\t\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\t\tlet eventId = wpm.getFbRandomEventId()\n\n\t\t\tfbq(\"trackCustom\", eventName, customData, {\n\t\t\t\teventID: eventId,\n\t\t\t})\n\n\t\t\tjQuery(document).trigger(\"wpmFbCapiEvent\", {\n\t\t\t\tevent_name : eventName,\n\t\t\t\tevent_id : eventId,\n\t\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\t\tevent_source_url: window.location.href,\n\t\t\t\tcustom_data : customData,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fbGetContentIdsFromCart = () => {\n\n\t\tlet content_ids = []\n\n\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\tcontent_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\t\t}\n\n\t\treturn content_ids\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Facebook loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n\n","/**\n * Load Google Ads event listeners\n * */\n\n// view_item_list event\njQuery(document).on(\"wpmViewItemList\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tif (\n\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\tproduct.isVariable &&\n\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t) return\n\n\t\t// try to prevent that WC sends cached hits to Google\n\t\tif (!product) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\njQuery(document).on(\"wpmAddToCart\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : product.quantity * product.price,\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.value = (product.quantity ? product.quantity : 1) * product.price\n\t\t\tdata.items = [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : (product.quantity ? product.quantity : 1),\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}]\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view search event\njQuery(document).on(\"wpmSearch\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tlet products = []\n\n\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n\n\t\t\tif (\n\t\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\t\tproduct.isVariable &&\n\t\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t\t) return\n\n\t\t\tproducts.push({\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t})\n\t\t}\n\n\t\t// console.log(products);\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\t// value : 1 * product.price,\n\t\t\titems: products,\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// TODO distinguish with or without cart data active\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\titems : wpm.getGoogleAdsDynamicRemarketingOrderItems(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t})\n\n\t\t// console.log(wpm.getGoogleAdsDynamicRemarketingOrderItems())\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// user log in event\njQuery(document).on(\"wpmLogin\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// conversion event\n// new_customer parameter: https://support.google.com/google-ads/answer/9917012\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data_basic = {}\n\t\tlet data_with_cart = {}\n\n\t\tdata_basic = {\n\t\t\tsend_to : wpm.getGoogleAdsConversionIdentifiersWithLabel(),\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tnew_customer : wpmDataLayer.order.new_customer,\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.clv_order_value_filtered) {\n\t\t\tdata_basic.customer_lifetime_value = wpmDataLayer.order.clv_order_value_filtered\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id) {\n\t\t\tdata_basic.user_id = wpmDataLayer.user.id\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.aw_merchant_id) {\n\t\t\tdata_with_cart = {\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\taw_merchant_id : wpmDataLayer.order.aw_merchant_id,\n\t\t\t\taw_feed_country : wpmDataLayer.order.aw_feed_country,\n\t\t\t\taw_feed_language: wpmDataLayer.order.aw_feed_language,\n\t\t\t\titems : wpm.getGoogleAdsRegularOrderItems(),\n\t\t\t}\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"conversion\", {...data_basic, ...data_with_cart})\n\t\t})\n\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\n\twpm.getGoogleAdsConversionIdentifiersWithLabel = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds) {\n\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\tif (item) {\n\t\t\t\t\tconversionIdentifiers.push(key + \"/\" + item)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsConversionIdentifiers = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\tconversionIdentifiers.push(key)\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsRegularOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.getGoogleAdsDynamicRemarketingOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Ads\n */\n\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Google Universal Analytics (GA3) event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.universal.property_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGAUAOrderItems(),\n\t\t\t})\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Add functions for Google Analytics Universal\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGAUAOrderItems = function () {\n\n\t\t// \"id\" : \"34\",\n\t\t// \"name\" : \"Hoodie\",\n\t\t// \"brand\" : \"\",\n\t\t// \"category\" : \"Hoodies\",\n\t\t// \"list_position\": 1,\n\t\t// \"price\" : 45,\n\t\t// \"quantity\" : 1,\n\t\t// \"variant\" : \"Color: blue | Logo: yes\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tname : item.name,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcategory: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItem = wpm.ga3AddListNameToProduct(orderItem)\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.ga3AddListNameToProduct = function (item_data, productPosition = null) {\n\n\t\t// if (wpm.ga3CanProductListBeSet(item_data.id)) {\n\t\t// \titem_data.listname = wpmDataLayer.shop.list_name\n\t\t//\n\t\t// \tif (productPosition) {\n\t\t// \t\titem_data.list_position = productPosition\n\t\t// \t}\n\t\t// }\n\n\t\titem_data.list_name = wpmDataLayer.shop.list_name\n\n\t\tif (productPosition) {\n\t\t\titem_data.list_position = productPosition\n\t\t}\n\n\t\treturn item_data\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Google Universal Analytics (GA3) loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Load GA4 event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGA4OrderItems(),\n\t\t\t})\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load GA4 functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGA4OrderItems = function () {\n\n\t\t// \"item_id\" : \"34\",\n\t\t// \"item_name\" : \"Hoodie\",\n\t\t// \"quantity\" : 1,\n\t\t// \"item_brand\" : \"\",\n\t\t// \"item_variant\" : \"Color: blue | Logo: yes\",\n\t\t// \"price\" : 45,\n\t\t// \"currency\" : \"CHF\",\n\t\t// \"item_category\": \"Hoodies\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\titem_name : item.name,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\titem_category: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * GA4 loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Google Analytics loader\n */\n\nrequire(\"./ga3/loader\")\nrequire(\"./ga4/loader\")\n","/**\n * Load Google base event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") {\n\t\tif (wpm.canGoogleLoad()) {\n\t\t\twpm.loadGoogle()\n\t\t} else {\n\t\t\twpm.logPreventedPixelLoading(\"google\", \"analytics / ads\")\n\t\t}\n\t}\n})\n","/**\n * Load Google base functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.googleConfigConditionsMet = function (type) {\n\n\t\t// always returns true if Google Consent Mode is active\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (wpm.getConsentValues().mode === \"category\") {\n\t\t\treturn wpm.getConsentValues().categories[type] === true\n\t\t} else if (wpm.getConsentValues().mode === \"pixel\") {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-\" + type)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings = function (google_consent_settings) {\n\n\t\tif (wpm.getConsentValues().mode === \"category\") {\n\n\t\t\tif (wpm.getConsentValues().categories.analytics) google_consent_settings.analytics_storage = \"granted\"\n\t\t\tif (wpm.getConsentValues().categories.ads) google_consent_settings.ad_storage = \"granted\"\n\t\t} else if ((wpm.getConsentValues().mode === \"pixel\")) {\n\n\t\t\tgoogle_consent_settings.analytics_storage = wpm.getConsentValues().pixels.includes(\"google-analytics\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_storage = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t}\n\n\t\treturn google_consent_settings\n\t}\n\n\twpm.updateGoogleConsentMode = function (analytics = true, ads = true) {\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!window.gtag ||\n\t\t\t\t!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent\n\t\t\t) return\n\n\t\t\tgtag(\"consent\", \"update\", {\n\t\t\t\tanalytics_storage: analytics ? \"granted\" : \"denied\",\n\t\t\t\tad_storage : ads ? \"granted\" : \"denied\",\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAds = function () {\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.ads.state = \"loading\"\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active) {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key, {\"allow_enhanced_conversions\": true})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number) {\n\t\t\t\tgtag(\"config\", Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0] + \"/\" + wpmDataLayer.pixels.google.ads.phone_conversion_label, {\n\t\t\t\t\tphone_conversion_number: wpmDataLayer.pixels.google.ads.phone_conversion_number,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// ! enhanced_conversion_data needs to set on the window object\n\t\t\t// https://support.google.com/google-ads/answer/9888145#zippy=%2Cvalidate-your-implementation-using-chrome-developer-tools\n\t\t\tif (wpmDataLayer?.shop?.page_type && \"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data) {\n\t\t\t\t// window.enhanced_conversion_data = wpmDataLayer.order.google.ads.enhanced_conversion_data\n\n\t\t\t\tgtag(\"set\", \"user_data\", wpmDataLayer.order.google.ads.enhanced_conversion_data)\n\t\t\t}\n\n\t\t\twpmDataLayer.pixels.google.ads.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsUA = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"loading\"\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.universal.property_id, wpmDataLayer.pixels.google.analytics.universal.parameters)\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsGA4 = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"loading\"\n\n\t\t\tlet parameters = wpmDataLayer.pixels.google.analytics.ga4.parameters\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode) {\n\t\t\t\tparameters.debug_mode = true\n\t\t\t}\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, parameters)\n\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.isGoogleActive = function () {\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.universal?.property_id ||\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id ||\n\t\t\t!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)\n\t\t) {\n\t\t\treturn true\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getGoogleGtagId = function () {\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.universal.property_id\n\t\t} else if (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.ga4.measurement_id\n\t\t} else {\n\t\t\treturn Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t}\n\t}\n\n\n\twpm.loadGoogle = function () {\n\n\t\tif (wpm.isGoogleActive()) {\n\n\t\t\twpmDataLayer.pixels.google.state = \"loading\"\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googletagmanager.com/gtag/js?id=\" + wpm.getGoogleGtagId())\n\t\t\t\t.then(function (script, textStatus) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Initiate Google dataLayer and gtag\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\t\t\t\twindow.gtag = function gtag() {\n\t\t\t\t\t\t\tdataLayer.push(arguments)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Consent Mode\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\n\t\t\t\t\t\t\tlet google_consent_settings = {\n\t\t\t\t\t\t\t\t\"ad_storage\" : wpmDataLayer.pixels.google.consent_mode.ad_storage,\n\t\t\t\t\t\t\t\t\"analytics_storage\": wpmDataLayer.pixels.google.consent_mode.analytics_storage,\n\t\t\t\t\t\t\t\t\"wait_for_update\" : wpmDataLayer.pixels.google.consent_mode.wait_for_update,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.region) {\n\t\t\t\t\t\t\t\tgoogle_consent_settings.region = wpmDataLayer.pixels.google.consent_mode.region\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgoogle_consent_settings = wpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings(google_consent_settings)\n\n\t\t\t\t\t\t\tgtag(\"consent\", \"default\", google_consent_settings)\n\t\t\t\t\t\t\tgtag(\"set\", \"ads_data_redaction\", wpmDataLayer.pixels.google.consent_mode.ads_data_redaction)\n\t\t\t\t\t\t\tgtag(\"set\", \"url_passthrough\", wpmDataLayer.pixels.google.consent_mode.url_passthrough)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Linker\n\t\t\t\t\t\t// https://developers.google.com/gtagjs/devguide/linker\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.linker?.settings) {\n\t\t\t\t\t\t\tgtag(\"set\", \"linker\", wpmDataLayer.pixels.google.linker.settings)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgtag(\"js\", new Date())\n\n\t\t\t\t\t\t// Google Ads loader\n\t\t\t\t\t\tif (!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) { // Only run if the pixel has set up\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"ads\")) { \t\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAds()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-ads\", \"ads\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Universal Analytics loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) { \t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsUA()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-universal-analytics\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GA4 loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) { \t\t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsGA4()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"ga4\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twpmDataLayer.pixels.google.state = \"ready\"\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\twpm.canGoogleLoad = function () {\n\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (\"category\" === wpm.getConsentValues().mode) {\n\t\t\treturn !!(wpm.getConsentValues().categories[\"ads\"] || wpm.getConsentValues().categories[\"analytics\"])\n\t\t} else if (\"pixel\" === wpm.getConsentValues().mode) {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-ads\") || wpm.getConsentValues().pixels.includes(\"google-analytics\")\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid load condition for Google mode in wpmConsentValues\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.gtagLoaded = function () {\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") reject()\n\n\t\t\tlet startTime = 0\n\t\t\tlet timeout = 5000\n\t\t\tlet frequency = 200;\n\n\t\t\t(function wait() {\n\t\t\t\tif (wpmDataLayer?.pixels?.google?.state === \"ready\") return resolve()\n\t\t\t\tif (startTime >= timeout) return reject()\n\t\t\t\tstartTime += frequency\n\t\t\t\tsetTimeout(wait, frequency)\n\t\t\t})()\n\t\t})\n\t}\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google base\n */\n\n// Load base\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Load Google\n */\n\n// Load base\nrequire(\"./base/loader\")\n\n//Load additional Google libraries\nrequire(\"./ads/loader\")\nrequire(\"./analytics/loader\")\nrequire(\"./optimize/loader\")\n\n\n","/**\n * Load Google Optimize event listeners\n */\n\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.google?.optimize?.container_id && !wpmDataLayer?.pixels?.google?.optimize?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"google-optimize\")) wpm.load_google_optimize_pixel()\n\t}\n})\n","/**\n * Load Google Optimize functions\n */\n\n\n(function (wpm, $, undefined) {\n\n\twpm.load_google_optimize_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.optimize.loaded = true\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googleoptimize.com/optimize.js?id=\" + wpmDataLayer.pixels.google.optimize.container_id)\n\t\t\t// .then(function (script, textStatus) {\n\t\t\t// \t\tconsole.log('Google Optimize loaded')\n\t\t\t// });\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Load Google Optimize\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Hotjar event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.hotjar?.site_id && !wpmDataLayer?.pixels?.hotjar?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"hotjar\") && !wpmDataLayer?.pixels?.hotjar?.loaded) wpm.load_hotjar_pixel()\n\t}\n})\n","/**\n * Load Hotjar functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_hotjar_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.hotjar.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(h,o,t,j,a,r){\n\t\t\t\th.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n\t\t\t\th._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6};\n\t\t\t\ta=o.getElementsByTagName('head')[0];\n\t\t\t\tr=o.createElement('script');r.async=1;\n\t\t\t\tr.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n\t\t\t\ta.appendChild(r);\n\t\t\t})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Hotjar loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Consent Mode functions\n */\n\n(function (wpm, $, undefined) {\n\n\t/**\n\t * Handle Cookie Management Platforms\n\t */\n\n\tlet getComplianzCookies = () => {\n\n\t\tlet cmplz_statistics = wpm.getCookie(\"cmplz_statistics\")\n\t\tlet cmplz_marketing = wpm.getCookie(\"cmplz_marketing\")\n\t\tlet cmplz_consent_status = wpm.getCookie(\"cmplz_consent_status\") || wpm.getCookie(\"cmplz_banner-status\")\n\n\t\tif (cmplz_consent_status) {\n\t\t\treturn {\n\t\t\t\tanalytics : cmplz_statistics === \"allow\",\n\t\t\t\tads : cmplz_marketing === \"allow\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tlet getCookieLawInfoCookies = () => {\n\n\t\tlet analyticsCookie = wpm.getCookie(\"cookielawinfo-checkbox-analytics\") || wpm.getCookie(\"cookielawinfo-checkbox-analytiques\")\n\t\tlet adsCookie = wpm.getCookie(\"cookielawinfo-checkbox-advertisement\") || wpm.getCookie(\"cookielawinfo-checkbox-performance\") || wpm.getCookie(\"cookielawinfo-checkbox-publicite\")\n\t\tlet visitorHasChosen = wpm.getCookie(\"CookieLawInfoConsent\")\n\n\t\tif (analyticsCookie || adsCookie) {\n\n\t\t\treturn {\n\t\t\t\tanalytics : analyticsCookie === \"yes\",\n\t\t\t\tads : adsCookie === \"yes\",\n\t\t\t\tvisitorHasChosen: !!visitorHasChosen,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * Initialize and set default values\n\t */\n\n\tlet\n\t\twpmConsentValues = {}\n\twpmConsentValues.categories = {}\n\twpmConsentValues.pixels = []\n\twpmConsentValues.mode = \"category\"\n\twpmConsentValues.visitorHasChosen = false\n\n\t// Return current consent values\n\twpm.getConsentValues = () => wpmConsentValues\n\n\twpm.setConsentValueCategories = (analytics = false, ads = false) => {\n\t\twpmConsentValues.categories.analytics = analytics\n\t\twpmConsentValues.categories.ads = ads\n\t}\n\n\t// Update the PMW consent values with values coming from a CMP\n\twpm.updateConsentCookieValues = (analytics = null, ads = null, explicitConsent = false) => {\n\n\t\t// ad_storage\n\t\t// analytics_storage\n\t\t// functionality_storage\n\t\t// personalization_storage\n\t\t// security_storage\n\n\t\tlet cookie\n\n\t\t/**\n\t\t * Setup defaults\n\t\t */\n\n\t\t// consentValues.categories.analytics = true\n\t\t// consentValues.categories.ads = true\n\n\t\twpmConsentValues.categories.analytics = !explicitConsent\n\t\twpmConsentValues.categories.ads = !explicitConsent\n\n\n\t\tif (analytics || ads) {\n\n\t\t\tif (analytics) {\n\t\t\t\twpmConsentValues.categories.analytics = !!analytics\n\t\t\t}\n\n\t\t\tif (ads) {\n\t\t\t\twpmConsentValues.categories.ads = !!ads\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * PMW Cookie Consent\n\t\t *\n\t\t * Must be before every other CMP for the case that one of the included CMPs\n\t\t * decides to implement the PMW cookie consent API. In that case\n\t\t * the PMW consent cookie must take precedence.\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"pmw_cookie_consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookiebot\n\t\t * https://wordpress.org/plugins/cookiebot/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieConsent\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.indexOf(\"statistics:true\") >= 0\n\t\t\twpmConsentValues.categories.ads = cookie.indexOf(\"marketing:true\") >= 0\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Script\n\t\t * https://wordpress.org/plugins/cookie-script-com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieScriptConsent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\tif (cookie.action === \"reject\") {\n\t\t\t\twpmConsentValues.categories.analytics = false\n\t\t\t\twpmConsentValues.categories.ads = false\n\t\t\t} else if (cookie.categories.length === 2) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t} else {\n\t\t\t\twpmConsentValues.categories.analytics = cookie.categories.indexOf(\"performance\") >= 0\n\t\t\t\twpmConsentValues.categories.ads = cookie.categories.indexOf(\"targeting\") >= 0\n\t\t\t}\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Borlabs Cookie\n\t\t * https://borlabs.io/borlabs-cookie/\n\t\t */\n\t\tif (cookie = wpm.getCookie(\"borlabs-cookie\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie?.consents?.statistics\n\t\t\twpmConsentValues.categories.ads = !!cookie?.consents?.marketing\n\t\t\twpmConsentValues.visitorHasChosen = true\n\t\t\twpmConsentValues.pixels = [...cookie?.consents?.statistics || [], ...cookie?.consents?.marketing || []]\n\t\t\twpmConsentValues.mode = \"pixel\"\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Complianz Cookie\n\t\t * https://wordpress.org/plugins/complianz-gdpr/\n\t\t */\n\n\t\tif (cookie = getComplianzCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (free version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"cookie_notice_accepted\")) {\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (pro version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"hu-consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie.categories[\"3\"]\n\t\t\twpmConsentValues.categories.ads = !!cookie.categories[\"4\"]\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * CookieYes, GDPR Cookie Consent (Cookie Law Info)\n\t\t * https://wordpress.org/plugins/cookie-law-info/\n\t\t */\n\n\t\tif (cookie = getCookieLawInfoCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * GDPR Cookie Compliance Plugin by Moove Agency\n\t\t * https://wordpress.org/plugins/gdpr-cookie-compliance/\n\t\t *\n\t\t * TODO write documentation on how to set up the plugin in order for this to work properly\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"moove_gdpr_popup\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.thirdparty === \"1\"\n\t\t\twpmConsentValues.categories.ads = cookie.advanced === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP AutoTerms\n\t\t * https://wordpress.org/plugins/auto-terms-of-service-and-privacy-policy/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"wpautoterms-cookies-notice\")) {\n\n\t\t\tif (cookie !== \"1\") return\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Usercentrics\n\t\t *\n\t\t * https://usercentrics.com/\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api?id=getservicesbaseinfo\n\t\t */\n\n\t\tif (window.localStorage && window.localStorage.getItem(\"uc_settings\")) {\n\n\t\t\tconsole.log(\"Usercentrics settings detected\")\n\n\t\t\tif (typeof UC_UI === \"undefined\") {\n\n\t\t\t\t// register event to block unblock after UC_UI library is loaded\n\t\t\t\twindow.addEventListener(\"UC_UI_INITIALIZED\", function (event) {\n\t\t\t\t\twpm.ucUiProcessConsent()\n\t\t\t\t})\n\n\t\t\t\t// Don't continue because in here the UC_UI library is not loaded yet\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\twpm.ucUiProcessConsent()\n\t\t}\n\n\t\t/**\n\t\t * OneTrust\n\t\t *\n\t\t * https://www.onetrust.com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"OptanonConsent\")) {\n\n\t\t\t// console.log(\"OneTrust settings detected\")\n\n\t\t\tlet params = new URLSearchParams(cookie)\n\t\t\tlet groups = params.get(\"groups\").split(\",\")\n\n\t\t\t// Groups is an array like this ['1:1', '2:0', '3:1', '4:1']. Make it an object with key value pairs\n\t\t\tlet groupsObject = {}\n\t\t\tgroups.forEach((group) => {\n\n\t\t\t\tlet groupArray = group.split(\":\")\n\t\t\t\tgroupsObject[groupArray[0]] = groupArray[1]\n\t\t\t})\n\n\t\t\t// group mapping\n\t\t\t// 1 = necessary\n\t\t\t// 2 = analytics\n\t\t\t// 3 = functional\n\t\t\t// 4 = ads\n\n\t\t\twpmConsentValues.categories.analytics = groubsObject[\"2\"] === \"1\"\n\t\t\twpmConsentValues.categories.ads = groupsObject[\"4\"] === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Only run after having made sure that the UC_UI library is loaded\n\twpm.ucUiProcessConsent = function () {\n\n\t\tif (typeof UC_UI === \"undefined\") return\n\n\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tconst ucStatisticsSlug = UC_UI.getSettingsLabels().categories.filter(data => data.label === \"Statistics\")[0].slug\n\n\t\tpmw.consentAdjustSelectively(\n\t\t\t{\n\t\t\t\tanalytics: !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === ucStatisticsSlug && data.consent.status === false).length > 0,\n\t\t\t\tads : !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === \"marketing\" && data.consent.status === false).length > 0,\n\t\t\t},\n\t\t)\n\t}\n\n\twpm.updateConsentCookieValues()\n\n\twpm.setConsentDefaultValuesToExplicit = () => {\n\t\twpmConsentValues.categories = {\n\t\t\tanalytics: false,\n\t\t\tads : false,\n\t\t}\n\t}\n\n\twpm.canIFire = (category, pixelName) => {\n\n\t\tlet canIFireMode\n\n\t\tif (\"category\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = !!wpmConsentValues.categories[category]\n\t\t} else if (\"pixel\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(pixelName)\n\n\t\t\t// If a user sets \"bing-ads\" in Borlabs Cookie instead of\n\t\t\t// \"microsoft-ads\" in the Borlabs settings, we need to check\n\t\t\t// for that too.\n\t\t\tif (false === canIFireMode && \"microsoft-ads\" === pixelName) {\n\t\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(\"bing-ads\")\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid consent mode in wpmConsentValues\")\n\t\t\tcanIFireMode = false\n\t\t}\n\n\t\tif (canIFireMode) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (true || wpm.urlHasParameter(\"debugConsentMode\")) {\n\t\t\t\twpm.logPreventedPixelLoading(pixelName, category)\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.logPreventedPixelLoading = (pixelName, category) => {\n\n\t\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)\")\n\t\t} else {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)\")\n\t\t}\n\t}\n\n\t/**\n\t * Runs through each script in <head> and blocks / unblocks it according to the plugin settings\n\t * and user consent.\n\t */\n\n\t// https://stackoverflow.com/q/65453565/4688612\n\twpm.scriptTagObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif ($(node).data(\"wpm-cookie-category\")) {\n\n\t\t\t\t\t\t// If the pixel category has been approved > unblock\n\t\t\t\t\t\t// If the pixel belongs to more than one category, then unblock if one of the categories has been approved\n\t\t\t\t\t\t// If no category has been approved, but the Google Consent Mode is active, then only unblock the Google scripts\n\n\t\t\t\t\t\tif (wpm.shouldScriptBeActive(node)) {\n\t\t\t\t\t\t\twpm.unblockScript(node)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twpm.blockScript(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\twpm.scriptTagObserver.observe(document.head, {childList: true, subtree: true})\n\t// jQuery(document).on(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\tdocument.addEventListener(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\n\twpm.shouldScriptBeActive = node => {\n\n\t\tif (\n\t\t\twpmDataLayer.shop.cookie_consent_mgmt.explicit_consent ||\n\t\t\twpmConsentValues.visitorHasChosen\n\t\t) {\n\n\t\t\tif (wpmConsentValues.mode === \"category\" && $(node).data(\"wpm-cookie-category\").split(\",\").some(element => wpmConsentValues.categories[element])) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && wpmConsentValues.pixels.includes($(node).data(\"wpm-pixel-name\"))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && $(node).data(\"wpm-pixel-name\") === \"google\" && [\"google-analytics\", \"google-ads\"].some(element => wpmConsentValues.pixels.includes(element))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmDataLayer?.pixels?.google?.consent_mode?.active && $(node).data(\"wpm-pixel-name\") === \"google\") {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\treturn true\n\t\t}\n\t}\n\n\n\twpm.unblockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tlet wpmSrc = $(scriptNode).data(\"wpm-src\")\n\t\tif (wpmSrc) $(scriptNode).attr(\"src\", wpmSrc)\n\n\t\tscriptNode.type = \"text/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.blockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tif ($(scriptNode).attr(\"src\")) $(scriptNode).removeAttr(\"src\")\n\t\tscriptNode.type = \"blocked/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\t}\n\n\twpm.unblockAllScripts = (analytics = true, ads = true) => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\twpm.setConsentValueCategories(analytics, ads)\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.unblockSelectedPixels = () => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.explicitConsentStateAlreadySet = () => {\n\n\t\tif (wpmConsentValues.explicitConsentStateAlreadySet) {\n\t\t\treturn true\n\t\t} else {\n\t\t\twpmConsentValues.explicitConsentStateAlreadySet = true\n\t\t}\n\t}\n\n\n\t/**\n\t * Block or unblock scripts for each CMP immediately after cookie consent has been updated\n\t * by the visitor.\n\t */\n\n\t/**\n\t * Borlabs Cookie\n\t * If visitor accepts cookies in Borlabs Cookie unblock the scripts\n\t */\n\tdocument.addEventListener(\"borlabs-cookie-consent-saved\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\tif (wpmConsentValues.mode === \"pixel\") {\n\n\t\t\twpm.unblockSelectedPixels()\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.pixels.includes(\"google-analytics\"), wpmConsentValues.pixels.includes(\"google-ads\"))\n\t\t} else {\n\n\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t}\n\t})\n\n\t/**\n\t * Cookiebot\n\t * \tIf visitor accepts cookies in Cookiebot unblock the scripts\n\t * \thttps://www.cookiebot.com/en/developer/\n\t */\n\tdocument.addEventListener(\"CookiebotOnAccept\", () => {\n\t\tif (Cookiebot.consent.statistics) wpmConsentValues.categories.analytics = true\n\t\tif (Cookiebot.consent.marketing) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\n\t}, false)\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/article/20-custom-events\n\t */\n\t// jQuery(document).on(\"CookieScriptAccept\", e => {\n\tdocument.addEventListener(\"CookieScriptAccept\", e => {\n\n\t\tif (e.detail.categories.includes(\"performance\")) wpmConsentValues.categories.analytics = true\n\t\tif (e.detail.categories.includes(\"targeting\")) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/\n\t */\n\t// jQuery(document).on(\"CookieScriptAcceptAll\", () => {\n\tdocument.addEventListener(\"CookieScriptAcceptAll\", () => {\n\n\t\twpm.setConsentValueCategories(true, true)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t})\n\n\t/**\n\t * Complianz Cookie\n\t *\n\t * If visitor accepts cookies in Complianz unblock the scripts\n\t */\n\n\twpm.cmplzStatusChange = (cmplzConsentData) => {\n\n\t\tif (cmplzConsentData.detail.categories.includes(\"statistics\")) wpm.updateConsentCookieValues(true, null)\n\t\tif (cmplzConsentData.detail.categories.includes(\"marketing\")) wpm.updateConsentCookieValues(null, true)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t}\n\n\t// jQuery(document).on(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\t// jQuery(document).on(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\n\t// Cookie Compliance by hu-manity.co (free and pro)\n\t// If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (free version)\n\t// https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t// jQuery(document).on(\"setCookieNotice\", () => {\n\tdocument.addEventListener(\"setCookieNotice\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Compliance by hu-manity.co (free and pro)\n\t * If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (pro version)\n\t * https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t * Because Cookie Notice has no documented API or event that is being triggered on consent save or update\n\t * we have to solve this by using a mutation observer.\n\t *\n\t * @type {MutationObserver}\n\t */\n\n\twpm.huObserver = new MutationObserver(mutations => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif (node.id === \"hu\") {\n\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t\t\t\t\t\tdocument.querySelector(\".hu-cookies-save\").addEventListener(\"click\", () => {\n\t\t\t\t\t\t\twpm.updateConsentCookieValues()\n\t\t\t\t\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\tif (window.hu) {\n\t\twpm.huObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t}\n\n\t/**\n\t * Usercentrics Event Listeners\n\t *\n\t * https://docs.usercentrics.com/#/v2-events?id=usage-as-window-event\n\t */\n\n\twindow.addEventListener(\"ucEvent\", function (e) {\n\t\tif (e.detail && e.detail.event == \"consent_status\") {\n\t\t\t// check for consent status of service \"Google Ads Remarketing\"\n\t\t\tif (e.detail[\"Google Ads Remarketing\"] === true) {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has no consent\")\n\t\t\t}\n\t\t}\n\t})\n\n\t// https://docs.usercentrics.com/#/v2-events?id=uc_ui_cmp_event\n\twindow.addEventListener(\"UC_UI_CMP_EVENT\", function (event) {\n\n\t\tif (event.detail.type === \"ACCEPT_ALL\") {\n\t\t\t// console.log('accept all');\n\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tif (event.detail.type === \"DENY_ALL\") {\n\t\t\tpmw.consentRevokeAll()\n\t\t}\n\n\t\tif (event.detail.type === \"SAVE\") {\n\t\t\tconsole.log(\"event.detail\", event.detail)\n\t\t}\n\t})\n\n\n\t/**\n\t * OneTrust Event Listeners\n\t *\n\t * CookiePro by OneTrust doesn't emit any events when the user accepts or declines cookies.\n\t */\n\n\t// There are two accept all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\"#accept-recommended-btn-handler, #onetrust-accept-btn-handler\").on(\"click\", function () {\n\n\t\t// If OneTrust is not loaded, return\n\t\tif (typeof window.OneTrust === \"undefined\") return\n\n\t\tpmw.consentAcceptAll()\n\t})\n\n\t// There are two revoke all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\".ot-pc-refuse-all-handler, #onetrust-reject-all-handler\").on(\"click\", function () {\n\t\tpmw.consentRevokeAll()\n\t})\n\n\t// There is one save button that saves mixed consent. It is in the settings window. We reload the page after saving to reflect the changes.\n\tjQuery(\".save-preference-btn-handler.onetrust-close-btn-handler\").on(\"click\", function () {\n\t\tlocation.reload()\n\n\t\t// OneTrust.OnConsentChanged(function (e) {\n\t\t// \tpmw.consentAdjustSelectively({\n\t\t// \t\tanalytics: e.detail.includes(\"2\"),\n\t\t// \t\tads : e.detail.includes(\"4\"),\n\t\t// \t})\n\t\t// })\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n\n(function (pmw, $, undefined) {\n\n\t/**\n\t * Pixel Manager Cookie Consent API\n\t */\n\n\t// Accept consent for all cookies\n\tpmw.consentAcceptAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(true, true, settings.duration)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t}\n\n\t// Accept consent selectively\n\tpmw.consentAdjustSelectively = (settings) => {\n\n\t\t// If settings.analytics is set, keep it, otherwise set it to wpm.getConsentValues().categories.analytics\n\t\tsettings.analytics = settings.analytics !== undefined ? settings.analytics : wpm.getConsentValues().categories.analytics\n\t\tsettings.ads = settings.ads !== undefined ? settings.ads : wpm.getConsentValues().categories.ads\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(settings.analytics, settings.ads, settings.duration)\n\t\twpm.unblockAllScripts(settings.analytics, settings.ads)\n\t\twpm.updateGoogleConsentMode(settings.analytics, settings.ads)\n\t}\n\n\t// Remove consent for all cookies\n\tpmw.consentRevokeAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\twpm.setConsentValueCategories(false, false)\n\t\tpmw.consentSetCookie(false, false, settings.duration)\n\t\twpm.updateGoogleConsentMode(false, false)\n\t}\n\n\t// Set a cookie called pmw_cookie_consent with the value of pmw_cookie_consent\n\t// and set the default expiration date to 1 year from now\n\tpmw.consentSetCookie = (analytics, ads, duration = 365) => {\n\t\twpm.setCookie(\"pmw_cookie_consent\", JSON.stringify({analytics, ads}), duration)\n\t}\n\n\t// Trigger an event once the PMW consent management has been loaded\n\tjQuery(document).trigger(\"pmw_cookie_consent_management_loaded\")\n\n}(window.pmw = window.pmw || {}, jQuery))\n","/**\n * remove_from_cart event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\njQuery(document).on(\"click\", \".remove_from_cart_button, .remove\", (event) => {\n\n\t// console.log(\"remove_from_cart event\" + new Date().getTime())\n\n\ttry {\n\n\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"))\n\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\twpm.removeProductFromCart(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * begin_checkout event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\nlet checkoutButtonClasses = [\n\t// \".checkout\",\n\t\".checkout-button\",\n\t\".cart-checkout-button\",\n\t\".button.checkout\",\n\t\".xoo-wsc-ft-btn-checkout\", // https://xootix.com/side-cart-for-woocommerce/\n\t\".elementor-button--checkout\",\n].join(\",\")\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonClasses, () => {\n\n\t// console.log(\"init_checkout at: \" + new Date().getTime())\n\n\tjQuery(document).trigger(\"wpmBeginCheckout\")\n})\n\njQuery(document).on(\"updated_cart_totals\", () => {\n\tjQuery(document).trigger(\"wpmViewCart\")\n})\n\n/**\n * Set up PWM events\n */\n\n// track checkout option event: purchase click\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"wpmLoad\", (event) => {\n\tjQuery(document).on(\"payment_method_selected\", () => {\n\n\t\tif (false === wpm.paymentMethodSelected) {\n\t\t\twpm.fireCheckoutProgress(3)\n\t\t}\n\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t\twpm.paymentMethodSelected = true\n\t})\n})\n\n// populate the wpmDataLayer with the cart items\njQuery(document).on(\"wpmLoad\", () => {\n\n\ttry {\n\t\t// When a new session is initiated there are no items in the cart,\n\t\t// so we can save the call to get the cart items\n\t\tif (wpm.doesWooCommerceCartExist()) wpm.getCartItems()\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// get all add-to-cart= products from backend\njQuery(document).on(\"wpmLoad\", () => {\n\n\twpmDataLayer.products = wpmDataLayer.products || {}\n\n\t// scan page for add-to-cart= links\n\tlet productIds = wpm.getAddToCartLinkProductIds()\n\n\twpm.getProductsFromBackend(productIds)\n})\n\n/**\n * Save the referrer into a cookie\n */\n\njQuery(document).on(\"wpmLoad\", () => {\n\n\t// can't use session storage as we can't read it from the server\n\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\n\t\tif (document.referrer) {\n\t\t\tlet referrerUrl = new URL(document.referrer)\n\t\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\t\tif (referrerHostname !== window.location.host) {\n\t\t\t\twpm.setCookie(\"wpmReferrer\", referrerHostname)\n\t\t\t}\n\t\t}\n\t}\n})\n\n\n/**\n * Create our own load event in order to better handle script flow execution when JS \"optimizers\" shuffle the code.\n */\njQuery(document).on(\"wpmLoad\", () => {\n\t// document.addEventListener(\"wpmLoad\", function () {\n\ttry {\n\t\tif (typeof wpmDataLayer != \"undefined\" && !wpmDataLayer?.wpmLoadFired) {\n\n\t\t\tjQuery(document).trigger(\"wpmLoadAlways\")\n\n\t\t\tif (wpmDataLayer?.shop) {\n\t\t\t\tif (\n\t\t\t\t\t\"product\" === wpmDataLayer.shop.page_type &&\n\t\t\t\t\t\"variable\" !== wpmDataLayer.shop.product_type &&\n\t\t\t\t\twpm.getMainProductIdFromProductPage()\n\t\t\t\t) {\n\t\t\t\t\tlet product = wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage())\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t\t\t\t} else if (\"product_category\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmCategory\")\n\t\t\t\t} else if (\"search\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmSearch\")\n\t\t\t\t} else if (\"cart\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewCart\")\n\t\t\t\t} else if (\"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer.order) {\n\t\t\t\t\tif (!wpm.isOrderIdStored(wpmDataLayer.order.id)) {\n\t\t\t\t\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\t\t\t\t\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id)\n\t\t\t\t\t\tif (typeof wpm.acrRemoveCookie === \"function\") wpm.acrRemoveCookie()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.user?.id && !wpm.hasLoginEventFired()) {\n\t\t\t\tjQuery(document).trigger(\"wpmLogin\")\n\t\t\t\twpm.setLoginEventFired()\n\t\t\t}\n\n\t\t\t// /**\n\t\t\t// * Load mini cart fragments into a wpm session storage key,\n\t\t\t// * after the document load event.\n\t\t\t// */\n\t\t\t// jQuery(document).ajaxSend(function (event, jqxhr, settings) {\n\t\t\t// \t// console.log('settings.url: ' + settings.url);\n\t\t\t//\n\t\t\t// \tif (settings.url.includes(\"get_refreshed_fragments\") && sessionStorage) {\n\t\t\t// \t\tif (!sessionStorage.getItem(\"wpmMiniCartActive\")) {\n\t\t\t// \t\t\tsessionStorage.setItem(\"wpmMiniCartActive\", JSON.stringify(true))\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// })\n\n\t\t\twpmDataLayer.wpmLoadFired = true\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmLoad\", async () => {\n\n\tif (\n\t\twindow.sessionStorage &&\n\t\twindow.sessionStorage.getItem(\"_pmw_endpoint_available\") &&\n\t\t!JSON.parse(window.sessionStorage.getItem(\"_pmw_endpoint_available\"))\n\t) {\n\t\tconsole.error(\"Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.\")\n\t}\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent && !wpm.explicitConsentStateAlreadySet()) {\n\t\twpm.updateConsentCookieValues(null, null, true)\n\t}\n\n\tjQuery(document).trigger(\"wpmLoadPixels\", {})\n})\n\n\n/**\n * All ecommerce events\n */\n\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToCart\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\t// If Facebook pixel is loaded, add Facebook server to server event data to the payload\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToCart\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/gateway/docs/index?identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&language=ENGLISH&doc_id=1739585702922241#item-link-Adding%20parameters%20to%20event%20code\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToCart\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToCart\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"beginCheckout\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (wpmDataLayer?.cart && !jQuery.isEmptyObject(wpmDataLayer.cart)) {\n\t\t\tpayload.facebook.custom_data = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tcontent_ids : wpm.fbGetContentIdsFromCart(),\n\t\t\t\tvalue : wpm.getCartValue(),\n\t\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\t}\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"InitiateCheckout\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideBeginCheckout\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToWishlist\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToWishlist\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"viewItem\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"ViewContent\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.facebook.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"ViewContent\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.tiktok.properties = {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewItem\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmSearch\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"search\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Search\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"Search\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tquery: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideSearch\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmPlaceOrder\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"placeOrder\",\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"PlaceAnOrder\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientPlaceOrder\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"orderReceived\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Purchase\",\n\t\t\tevent_id : wpmDataLayer.order.id,\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tcontent_ids : wpm.facebookContentIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"CompletePayment\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcontents: wpm.getTikTokOrderItemIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideOrderReceivedPage\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// ! No server-to-server event is sent for this event because it is compiled and sent from the server directly\n})\n\n\n\n\n\n","/**\n * Register event listeners\n */\n\n\n/**\n * add_to_cart event\n *\n * WC is inconsistent with events that emit add-to-cart events.\n * adding_to_cart and added_to_are legacy events. Also, they only work\n * on Ajax buttons on shop pages.\n */\n\nconst addToCartSelectors = [\n\t\".add_to_cart_button:not(.product_type_variable)\",\n\t\".ajax_add_to_cart\",\n\t\".single_add_to_cart_button\",\n].join(\",\")\n\njQuery(addToCartSelectors).on(\"click adding_to_cart\", (event) => {\n\t// console log current time\n\t// console.log(\"add_to_cart event fired at: \" + new Date().getTime())\n\n\ttry {\n\n\t\t// console.log(\"add_to_cart event detected\")\n\n\t\tlet quantity = 1,\n\t\t\tproductId\n\n\t\t// Only process on product pages\n\t\tif (wpmDataLayer.shop.page_type === \"product\") {\n\n\t\t\t// First process related and upsell products\n\t\t\tif (typeof jQuery(event.currentTarget).attr(\"href\") !== \"undefined\" && jQuery(event.currentTarget).attr(\"href\").includes(\"add-to-cart\")) {\n\n\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is simple product\n\t\t\tif (wpmDataLayer.shop.product_type === \"simple\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(event.currentTarget).val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is variable product or variable-subscription\n\t\t\tif ([\"variable\", \"variable-subscription\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"[name='variation_id']\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is grouped product\n\t\t\tif (wpmDataLayer.shop.product_type === \"grouped\") {\n\n\t\t\t\tjQuery(\".woocommerce-grouped-product-list-item\").each((index, element) => {\n\n\t\t\t\t\tquantity = Number(jQuery(element).find(\".input-text.qty\").val())\n\t\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\t\tlet classes = jQuery(element).attr(\"class\")\n\t\t\t\t\tproductId = wpm.getPostIdFromString(classes)\n\n\t\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// If is bundle product\n\t\t\tif (wpmDataLayer.shop.product_type === \"bundle\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"input[name=add-to-cart]\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\t\t\twpm.addProductToCart(productId, quantity)\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * If someone clicks anywhere on a custom /?add-to-cart=123 link\n * trigger the add to cart event\n */\n\n// jQuery(document).one(\"click\", \"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\", (event) => {\njQuery(\"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\").one(\"click\", (event) => {\n\n\ttry {\n\t\tif (jQuery(event.target).closest(\"a\").attr(\"href\")) {\n\n\t\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"), window.location.origin)\n\n\t\t\tif (url.searchParams.has(\"add-to-cart\")) {\n\n\t\t\t\tlet productId = url.searchParams.get(\"add-to-cart\")\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select item event\n// jQuery(document).on(\"click\", \".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\", (event) => {\njQuery(\".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\").on(\"click\", (event) => {\n\n\ttry {\n\n\t\t/**\n\t\t * On some pages the event fires multiple times, and on product pages\n\t\t * even on page load. Using e.stopPropagation helps to prevent this,\n\t\t * but I don't know why. We don't even have to use this, since only a real\n\t\t * product click yields a valid productId. So we filter the invalid click\n\t\t * events out later down in the code. I'll keep it that way because this is\n\t\t * the most compatible way across shops.\n\t\t *\n\t\t * e.stopPropagation();\n\t\t * */\n\n\t\tlet productId = jQuery(event.currentTarget).nextAll(\".wpmProductId:first\").data(\"id\")\n\n\t\t/**\n\t\t * On product pages, for some reason, the click event is triggered on the main product on page load.\n\t\t * In that case no ID is found. But we can discard it, since we only want to trigger the event on\n\t\t * related products, which are found below.\n\t\t */\n\n\t\tif (productId) {\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\t\t\tjQuery(document).trigger(\"wpmSelectContentGaUa\", product)\n\t\t\t\tjQuery(document).trigger(\"wpmSelectItem\", product)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// checkout_progress event\n// track checkout option event: entered valid billing email\n// jQuery(document).on(\"input\", \"#billing_email\", (event) => {\njQuery(\"#billing_email\").on(\"input\", (event) => {\n\n\tif (wpm.isEmail(jQuery(event.currentTarget).val())) {\n\t\t// wpm.fireCheckoutOption(2);\n\t\twpm.fireCheckoutProgress(2)\n\t\twpm.emailSelected = true\n\t}\n})\n\n\n/**\n * Place order button\n *\n * Track checkout option event: purchase click\n * https://stackoverflow.com/a/34112407/4688612\n * jQuery(document).one(\"click\", \"#place_order\", () => {\n *\n * Has to be hooked after document ready !\n */\njQuery(\"form.checkout\").on(\"checkout_place_order_success\", () => {\n\n\t// console log current time\n\t// console.log(\"checkout_place_order_success event fired at: \" + new Date().getTime())\n\n\tif (false === wpm.emailSelected) {\n\t\twpm.fireCheckoutProgress(2)\n\t}\n\n\tif (false === wpm.paymentMethodSelected) {\n\t\twpm.fireCheckoutProgress(3)\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t}\n\n\twpm.fireCheckoutProgress(4)\n\n\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n})\n\n/**\n * Update cart event\n *\n * Has to be hooked after document ready !\n */\njQuery(\"[name='update_cart']\").on(\"click\", () => {\n\n\ttry {\n\t\tjQuery(\".cart_item\").each((index, element) => {\n\n\t\t\tlet url = new URL(jQuery(element).find(\".product-remove\").find(\"a\").attr(\"href\"))\n\t\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\t\tlet quantity = jQuery(element).find(\".qty\").val()\n\n\t\t\tif (quantity === 0) {\n\t\t\t\twpm.removeProductFromCart(productId)\n\t\t\t} else if (quantity < wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.removeProductFromCart(productId, wpmDataLayer.cart[productId].quantity - quantity)\n\t\t\t} else if (quantity > wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.addProductToCart(productId, quantity - wpmDataLayer.cart[productId].quantity)\n\t\t\t}\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t\twpm.getCartItemsFromBackend()\n\t}\n})\n\n// add_to_wishlist\njQuery(\".add_to_wishlist,.wl-add-to\").on(\"click\", event => {\n\n\ttry {\n\n\t\tlet productId\n\n\t\tif (jQuery(event.currentTarget).data(\"productid\")) { // for the WooCommerce wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"productid\")\n\t\t} else if (jQuery(event.currentTarget).data(\"product-id\")) { // for the YITH wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product-id\")\n\t\t}\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\n\t\tjQuery(document).trigger(\"wpmAddToWishlist\", product)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called when the user selects all the required dropdowns / attributes\n *\n * Has to be hooked after document ready !\n *\n * https://stackoverflow.com/a/27849208/4688612\n * https://stackoverflow.com/a/65065335/4688612\n */\n\njQuery(\".single_variation_wrap\").on(\"show_variation\", (event, variation) => {\n\n\ttry {\n\t\tlet productId = wpm.getIdBasedOndVariationsOutputSetting(variation.variation_id)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\twpm.triggerViewItemEventPrep(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called on variable products when no selection has been done yet\n * or when the visitor deselects his choice.\n *\n * Has to be hooked after document ready !\n */\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n//\n// \t\ttry {\n// \t\t\tlet classes = jQuery(\"body\").attr(\"class\")\n// \t\t\tlet productId = classes.match(/(postid-)(\\d+)/)[2]\n//\n// \t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n//\n// \t\t\t/**\n// \t\t\t * If we have a variable product with no preset,\n// \t\t\t * and variations output is enabled,\n// \t\t\t * then we send a viewItem event with the first\n// \t\t\t * variation we find for the parent.\n// \t\t\t * If variations output is disabled,\n// \t\t\t * we just send the parent ID.\n// \t\t\t *\n// \t\t\t * And if Facebook microdata is active, use the\n// \t\t\t * microdata product ID.\n// \t\t\t */\n//\n// \t\t\tif (\n// \t\t\t\t\"variable\" === wpmDataLayer.shop.product_type &&\n// \t\t\t\twpmDataLayer?.general?.variationsOutput\n// \t\t\t) {\n// \t\t\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n// \t\t\t\t\tif (\"parentId\" in product) {\n//\n// \t\t\t\t\t\tproductId = product.id\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n// \t\t\t\t}\n//\n// \t\t\t\tif (wpmDataLayer?.pixels?.facebook?.microdata_product_id) {\n// \t\t\t\t\tproductId = wpmDataLayer.pixels.facebook.microdata_product_id\n// \t\t\t\t}\n// \t\t\t}\n//\n// \t\t\t// console.log(\"hmm\")\n// \t\t\twpm.triggerViewItemEventPrep(productId)\n//\n// \t\t} catch (e) {\n// \t\t\tconsole.error(e)\n// \t\t}\n// \t})\n// })\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n// \t\tjQuery(document).trigger(\"wpmviewitem\")\n// \t})\n// })\n","/**\n * Create a wpm namespace under which all functions are declared\n */\n\n// https://stackoverflow.com/a/5947280/4688612\n\n(function (wpm, $, undefined) {\n\n\tconst wpmDeduper = {\n\t\tkeyName : \"_wpm_order_ids\",\n\t\tcookieExpiresDays: 365,\n\t}\n\n\tconst wpmRestSettings = {\n\t\t// cookiesAvailable : '_wpm_cookies_are_available',\n\t\tcookiePmwRestEndpointAvailable: \"_pmw_endpoint_available\",\n\t\trestEndpointPost : \"pmw/v1/test/\",\n\t\trestFails : 0,\n\t\trestFailsThreshold : 10,\n\t}\n\n\twpm.emailSelected = false\n\twpm.paymentMethodSelected = false\n\n\t// wpm.checkIfCookiesAvailable = function () {\n\t//\n\t// // read the cookie if previously set, if it is return true, otherwise continue\n\t// if (wpm.getCookie(wpmRestSettings.cookiesAvailable)) {\n\t// return true;\n\t// }\n\t//\n\t// // set the cookie for the session\n\t// Cookies.set(wpmRestSettings.cookiesAvailable, true);\n\t//\n\t// // read cookie, true if ok, false if not ok\n\t// return !!wpm.getCookie(wpmRestSettings.cookiesAvailable);\n\t// }\n\n\twpm.useRestEndpoint = () => {\n\n\t\t// only if sessionStorage is available\n\n\t\t// only if REST API endpoint is generally accessible\n\t\t// check in sessionStorage if we checked before and return answer\n\t\t// otherwise check if the endpoint is available, save answer in sessionStorage and return answer\n\n\t\t// only if not too many REST API errors happened\n\n\t\treturn wpm.isSessionStorageAvailable() &&\n\t\t\twpm.isRestEndpointAvailable() &&\n\t\t\twpm.isBelowRestErrorThreshold()\n\t}\n\n\twpm.isBelowRestErrorThreshold = () => window.sessionStorage.getItem(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\tif (window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn JSON.parse(window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable))\n\t\t} else {\n\t\t\treturn await wpm.testEndpoint()\n\t\t}\n\t}\n\n\twpm.isSessionStorageAvailable = () => !!window.sessionStorage\n\n\t// Test the endpoint by sending a POST request\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tlet response = await fetch(url, {\n\t\t\tmethod : \"POST\",\n\t\t\tmode : \"cors\",\n\t\t\tcache : \"no-cache\",\n\t\t\tkeepalive: true,\n\t\t})\n\n\t\tif (response.status === 200) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(true))\n\t\t\treturn true\n\t\t} else if (response.status === 404) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t} else if (response.status === 0) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.getCookie(cookieName)\n\n\twpm.writeOrderIdToStorage = (orderId, source = \"thankyou_page\", expireDays = 365) => {\n\n\t\t// save the order ID in the browser storage\n\n\t\tif (!window.Storage) {\n\t\t\tlet expiresDate = new Date()\n\t\t\texpiresDate.setDate(expiresDate.getDate() + wpmDeduper.cookieExpiresDays)\n\n\t\t\tlet ids = []\n\t\t\tif (checkCookie()) {\n\t\t\t\tids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t}\n\n\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\tids.push(orderId)\n\t\t\t\tdocument.cookie = wpmDeduper.keyName + \"=\" + JSON.stringify(ids) + \";expires=\" + expiresDate.toUTCString()\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (localStorage.getItem(wpmDeduper.keyName) === null) {\n\t\t\t\tlet ids = []\n\t\t\t\tids.push(orderId)\n\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\n\t\t\t} else {\n\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\t\tids.push(orderId)\n\t\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof wpm.storeOrderIdOnServer === \"function\" && wpmDataLayer.orderDeduplication) {\n\t\t\twpm.storeOrderIdOnServer(orderId, source)\n\t\t}\n\t}\n\n\tfunction checkCookie() {\n\t\tlet key = wpm.getCookie(wpmDeduper.keyName)\n\t\treturn key !== \"\"\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\tif (wpmDataLayer.orderDeduplication) {\n\n\t\t\tif (!window.Storage) {\n\n\t\t\t\tif (checkCookie()) {\n\t\t\t\t\tlet ids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (localStorage.getItem(wpmDeduper.keyName) !== null) {\n\t\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"order duplication prevention: off\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isEmail = email => {\n\n\t\t// https://emailregex.com/\n\n\t\tlet regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\n\t\treturn regex.test(email)\n\t}\n\n\twpm.removeProductFromCart = (productId, quantityToRemove = null) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tlet quantity\n\n\t\t\tif (quantityToRemove == null) {\n\t\t\t\tquantity = wpmDataLayer.cart[productId].quantity\n\t\t\t} else {\n\t\t\t\tquantity = quantityToRemove\n\t\t\t}\n\n\t\t\tif (wpmDataLayer.cart[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\t\tjQuery(document).trigger(\"wpmRemoveFromCart\", product)\n\n\t\t\t\tif (quantityToRemove == null || wpmDataLayer.cart[productId].quantity === quantityToRemove) {\n\n\t\t\t\t\tdelete wpmDataLayer.cart[productId]\n\n\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t\t} else {\n\n\t\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\n\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\t// console.log('getting cart from back end');\n\t\t\t// wpm.getCartItemsFromBackend();\n\t\t\t// console.log('getting cart from back end done');\n\t\t}\n\t}\n\n\twpm.getIdBasedOndVariationsOutputSetting = productId => {\n\n\t\ttry {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput) {\n\n\t\t\t\treturn productId\n\t\t\t} else {\n\t\t\t\tif (wpmDataLayer.products[productId].isVariation) {\n\n\t\t\t\t\treturn wpmDataLayer.products[productId].parentId\n\t\t\t\t} else {\n\n\t\t\t\t\treturn productId\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// add_to_cart\n\twpm.addProductToCart = (productId, quantity) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer?.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\t\tjQuery(document).trigger(\"wpmAddToCart\", product)\n\n\t\t\t\t// add product to cart wpmDataLayer['cart']\n\n\t\t\t\t// if the product already exists in the object, only add the additional quantity\n\t\t\t\t// otherwise create that product object in the wpmDataLayer['cart']\n\t\t\t\tif (wpmDataLayer?.cart[productId]) {\n\n\t\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity + quantity\n\t\t\t\t} else {\n\n\t\t\t\t\tif (!(\"cart\" in wpmDataLayer)) wpmDataLayer.cart = {}\n\n\t\t\t\t\twpmDataLayer.cart[productId] = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\t\t\t\t}\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\n\t\t\t// fallback if wpmDataLayer.cart and wpmDataLayer.products got out of sync in case cart caching has an issue\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\twpm.getCartItems = () => {\n\n\t\tif (sessionStorage) {\n\t\t\tif (!sessionStorage.getItem(\"wpmDataLayerCart\") || wpmDataLayer.shop.page_type === \"order_received_page\") {\n\t\t\t\tsessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify({}))\n\t\t\t} else {\n\t\t\t\twpm.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem(\"wpmDataLayerCart\")))\n\t\t\t}\n\t\t} else {\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\t// get all cart items from the backend\n\twpm.getCartItemsFromBackend = () => {\n\t\ttry {\n\n\t\t\t/**\n\t\t\t * Can't use a REST API endpoint, as the cart session will not be loaded if the\n\t\t\t * endpoint is called.\n\t\t\t *\n\t\t\t * https://wordpress.org/support/topic/wc-cart-is-null-in-custom-rest-api/#post-11442843\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * Get the cart items from the backend the data object using fetch API\n\t\t\t * and log success or error messages\n\t\t\t * and url encoded data\n\t\t\t */\n\t\t\tfetch(wpm.ajax_url, {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\tbody : new URLSearchParams({action: \"pmw_get_cart_items\"}),\n\t\t\t\tkeepalive: true,\n\t\t\t})\n\t\t\t\t.then(response => {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\treturn response.json()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\n\t\t\t\t\tif (data.success) {\n\n\t\t\t\t\t\tif (!data.data[\"cart\"]) data.data[\"cart\"] = {}\n\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\n\t\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(data.data[\"cart\"]))\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// get productIds from the backend\n\twpm.getProductsFromBackend = async productIds => {\n\n\t\tif (wpmDataLayer?.products) {\n\t\t\t// If productIds already exists as key in wpmDataLayer.products, remove it from the array\n\t\t\tproductIds = productIds.filter(productId => !(productId in wpmDataLayer.products))\n\t\t}\n\n\t\t// if no products IDs are in the object, don't try to get anything from the server\n\t\tif (!productIds || productIds.length === 0) return\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/products/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t} else {\n\n\t\t\t\t// Get the product details from the backend the data object using fetch API\n\t\t\t\t// and log success or error messages\n\t\t\t\t// and url encoded data\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_get_product_ids\",\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\tlet responseData = await response.json()\n\t\t\t\tif (responseData.success) {\n\t\t\t\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, responseData.data)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error getting products from backend\")\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\n\t\treturn true\n\t}\n\n\twpm.saveCartObjectToDataLayer = cartObject => {\n\n\t\twpmDataLayer.cart = cartObject\n\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, cartObject)\n\t}\n\n\twpm.triggerViewItemEventPrep = async productId => {\n\n\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t} else {\n\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t}\n\t}\n\n\twpm.triggerViewItemEvent = productId => {\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t}\n\n\twpm.triggerViewItemEventNoProduct = () => {\n\t\tjQuery(document).trigger(\"wpmViewItem\")\n\t}\n\n\twpm.fireCheckoutOption = (step, checkout_option = null, value = null) => {\n\n\t\tlet data = {\n\t\t\tstep : step,\n\t\t\tcheckout_option: checkout_option,\n\t\t\tvalue : value,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutOption\", data)\n\t}\n\n\twpm.fireCheckoutProgress = step => {\n\n\t\tlet data = {\n\t\t\tstep: step,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutProgress\", data)\n\t}\n\n\twpm.getPostIdFromString = string => {\n\n\t\ttry {\n\t\t\treturn string.match(/(post-)(\\d+)/)[2]\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.triggerViewItemList = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tjQuery(document).trigger(\"wpmViewItemList\", wpm.getProductDataForViewItemEvent(productId))\n\t}\n\n\twpm.getProductDataForViewItemEvent = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\ttry {\n\t\t\tif (wpmDataLayer.products[productId]) {\n\n\t\t\t\treturn wpm.getProductDetailsFormattedForEvent(productId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getMainProductIdFromProductPage = () => {\n\n\t\ttry {\n\t\t\tif ([\"simple\", \"variable\", \"grouped\", \"composite\", \"bundle\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\t\t\t\treturn jQuery(\".wpmProductId:first\").data(\"id\")\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.viewItemListTriggerTestMode = target => {\n\n\t\tjQuery(target).css({\"position\": \"relative\"})\n\t\tjQuery(target).append(\"<div id=\\\"viewItemListTriggerOverlay\\\"></div>\")\n\t\tjQuery(target).find(\"#viewItemListTriggerOverlay\").css({\n\t\t\t\"z-index\" : \"10\",\n\t\t\t\"display\" : \"block\",\n\t\t\t\"position\" : \"absolute\",\n\t\t\t\"height\" : \"100%\",\n\t\t\t\"top\" : \"0\",\n\t\t\t\"left\" : \"0\",\n\t\t\t\"right\" : \"0\",\n\t\t\t\"opacity\" : wpmDataLayer.viewItemListTrigger.opacity,\n\t\t\t\"background-color\": wpmDataLayer.viewItemListTrigger.backgroundColor,\n\t\t})\n\t}\n\n\twpm.getSearchTermFromUrl = () => {\n\n\t\ttry {\n\t\t\tlet urlParameters = new URLSearchParams(window.location.search)\n\t\t\treturn urlParameters.get(\"s\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// we need this to track timeouts for intersection observers\n\tlet ioTimeouts = {}\n\n\twpm.observerCallback = (entries, observer) => {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\ttry {\n\t\t\t\tlet productId\n\n\t\t\t\tlet elementId = jQuery(entry.target).data(\"ioid\")\n\n\t\t\t\t// Get the productId from next element, if wpmProductId is a sibling, like in Gutenberg blocks\n\t\t\t\t// otherwise go search in children, like in regular WC loop items\n\t\t\t\tif (jQuery(entry.target).next(\".wpmProductId\").length) {\n\t\t\t\t\t// console.log('test 1');\n\t\t\t\t\tproductId = jQuery(entry.target).next(\".wpmProductId\").data(\"id\")\n\t\t\t\t} else {\n\t\t\t\t\tproductId = jQuery(entry.target).find(\".wpmProductId\").data(\"id\")\n\t\t\t\t}\n\n\n\t\t\t\tif (!productId) throw Error(\"wpmProductId element not found\")\n\n\t\t\t\tif (entry.isIntersecting) {\n\n\t\t\t\t\tioTimeouts[elementId] = setTimeout(() => {\n\n\t\t\t\t\t\twpm.triggerViewItemList(productId)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) wpm.viewItemListTriggerTestMode(entry.target)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.repeat === false) observer.unobserve(entry.target)\n\t\t\t\t\t}, wpmDataLayer.viewItemListTrigger.timeout)\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearTimeout(ioTimeouts[elementId])\n\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) jQuery(entry.target).find(\"#viewItemListTriggerOverlay\").remove()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t})\n\t}\n\n\t// fire view_item_list only on products that have become visible\n\tlet io\n\tlet ioid = 0\n\tlet allIoElementsToWatch\n\n\tlet getAllElementsToWatch = () => {\n\n\t\tallIoElementsToWatch = jQuery(\".wpmProductId\")\n\t\t\t.map(function (i, elem) {\n\n\t\t\t\tif (\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"type-product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product-item-inner\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(elem).parent()\n\t\t\t\t} else if (\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"wc-block-grid__product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product-small\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"woocommerce-LoopProduct-link\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(this).prev()\n\t\t\t\t} else if (jQuery(elem).closest(\".product\").length) {\n\t\t\t\t\treturn jQuery(elem).closest(\".product\")\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\twpm.startIntersectionObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// enable view_item_list test mode from browser\n\t\t\tif (wpm.urlHasParameter(\"vildemomode\")) wpmDataLayer.viewItemListTrigger.testMode = true\n\n\t\t\t// set up intersection observer\n\t\t\tio = new IntersectionObserver(wpm.observerCallback, {\n\t\t\t\tthreshold: wpmDataLayer.viewItemListTrigger.threshold,\n\t\t\t})\n\n\t\t\tgetAllElementsToWatch()\n\n\t\t\tallIoElementsToWatch.each((i, elem) => {\n\n\t\t\t\tjQuery(elem[0]).data(\"ioid\", ioid++)\n\n\t\t\t\tio.observe(elem[0])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// watch DOM for new lazy loaded products and add them to the intersection observer\n\twpm.startProductsMutationObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// Pass in the target node, as well as the observer options\n\n\t\t\t// selects the most common parent node\n\t\t\t// https://stackoverflow.com/a/7648323/4688612\n\t\t\tlet productsNode = jQuery(\".wpmProductId:eq(0)\").parents().has(jQuery(\".wpmProductId:eq(1)\").parents()).first()\n\n\t\t\tif (productsNode.length) {\n\t\t\t\tproductsMutationObserver.observe(productsNode[0], {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Create an observer instance\n\tlet productsMutationObserver = new MutationObserver(mutations => {\n\n\t\tmutations.forEach(mutation => {\n\t\t\tlet newNodes = mutation.addedNodes // DOM NodeList\n\t\t\tif (newNodes !== null) { // If there are new nodes added\n\t\t\t\tlet nodes = jQuery(newNodes) // jQuery set\n\t\t\t\tnodes.each(function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\tjQuery(this).hasClass(\"type-product\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"product-small\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"wc-block-grid__product\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// check if the node has a child or sibling wpmProductId\n\t\t\t\t\t\t// if yes add it to the intersectionObserver\n\t\t\t\t\t\tif (hasWpmProductIdElement(this)) {\n\t\t\t\t\t\t\tjQuery(this).data(\"ioid\", ioid++)\n\t\t\t\t\t\t\tio.observe(this)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\tlet hasWpmProductIdElement = elem =>\n\t\t!!(jQuery(elem).find(\".wpmProductId\").length ||\n\t\t\tjQuery(elem).siblings(\".wpmProductId\").length)\n\n\twpm.setCookie = (cookieName, cookieValue = \"\", expiryDays = null) => {\n\n\t\tif (expiryDays) {\n\n\t\t\tlet d = new Date()\n\t\t\td.setTime(d.getTime() + (expiryDays * 24 * 60 * 60 * 1000))\n\t\t\tlet expires = \"expires=\" + d.toUTCString()\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\"\n\t\t} else {\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";path=/\"\n\t\t}\n\t}\n\n\twpm.getCookie = cookieName => {\n\n\t\tlet name = cookieName + \"=\"\n\t\tlet decodedCookie = decodeURIComponent(document.cookie)\n\t\tlet ca = decodedCookie.split(\";\")\n\n\t\tfor (let i = 0; i < ca.length; i++) {\n\n\t\t\tlet c = ca[i]\n\n\t\t\twhile (c.charAt(0) == \" \") {\n\t\t\t\tc = c.substring(1)\n\t\t\t}\n\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length)\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\twpm.deleteCookie = cookieName => {\n\t\twpm.setCookie(cookieName, \"\", -1)\n\t}\n\n\twpm.getWpmSessionData = () => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(\"_wpm\")\n\n\t\t\tif (data !== null) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t} else {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\twpm.setWpmSessionData = data => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(\"_wpm\", JSON.stringify(data))\n\t\t}\n\t}\n\n\twpm.storeOrderIdOnServer = async (orderId, source) => {\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/pixels-fired/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t// \"X-WP-Nonce\" : wpm.nonce,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\torder_id: orderId,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce : wpm.nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t})\n\n\t\t\t} else {\n\t\t\t\t// save the state in the database\n\n\t\t\t\t// Send the data object with ajax request\n\t\t\t\t// and log success or error using fetch API and url encoded\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_purchase_pixels_fired\",\n\t\t\t\t\t\torder_id: orderId,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce : wpm.nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\t// console.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.error(\"wpm.storeOrderIdOnServer error\")\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getProductIdByCartItemKeyUrl = url => {\n\n\t\tlet searchParams = new URLSearchParams(url.search)\n\t\tlet cartItemKey = searchParams.get(\"remove_item\")\n\n\t\tlet productId\n\n\t\tif (wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"] === 0) {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"product_id\"]\n\t\t} else {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"]\n\t\t}\n\n\t\treturn productId\n\t}\n\n\twpm.getAddToCartLinkProductIds = () =>\n\t\tjQuery(\"a\").map(function () {\n\t\t\tlet href = jQuery(this).attr(\"href\")\n\n\t\t\tif (href && href.includes(\"?add-to-cart=\")) {\n\t\t\t\tlet matches = href.match(/(add-to-cart=)(\\d+)/)\n\t\t\t\tif (matches) return matches[2]\n\t\t\t}\n\t\t}).get()\n\n\twpm.getProductDetailsFormattedForEvent = (productId, quantity = 1) => {\n\n\t\tlet product = {\n\t\t\tid : productId.toString(),\n\t\t\tdyn_r_ids : wpmDataLayer.products[productId].dyn_r_ids,\n\t\t\tname : wpmDataLayer.products[productId].name,\n\t\t\tlist_name : wpmDataLayer.shop.list_name,\n\t\t\tbrand : wpmDataLayer.products[productId].brand,\n\t\t\tcategory : wpmDataLayer.products[productId].category,\n\t\t\tvariant : wpmDataLayer.products[productId].variant,\n\t\t\tlist_position: wpmDataLayer.products[productId].position,\n\t\t\tquantity : quantity,\n\t\t\tprice : wpmDataLayer.products[productId].price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tisVariable : wpmDataLayer.products[productId].isVariable,\n\t\t\tisVariation : wpmDataLayer.products[productId].isVariation,\n\t\t\tparentId : wpmDataLayer.products[productId].parentId,\n\t\t}\n\n\t\tif (product.isVariation) product[\"parentId_dyn_r_ids\"] = wpmDataLayer.products[productId].parentId_dyn_r_ids\n\n\t\treturn product\n\t}\n\n\twpm.setReferrerToCookie = () => {\n\n\t\t// can't use session storage as we can't read it from the server\n\t\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\t\t\twpm.setCookie(\"wpmReferrer\", document.referrer)\n\t\t}\n\t}\n\n\twpm.getReferrerFromCookie = () => {\n\n\t\tif (wpm.getCookie(\"wpmReferrer\")) {\n\t\t\treturn wpm.getCookie(\"wpmReferrer\")\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\twpm.getClidFromBrowser = (clidId = \"gclid\") => {\n\n\t\tlet clidCookieId\n\n\t\tclidCookieId = {\n\t\t\tgclid: \"_gcl_aw\",\n\t\t\tdclid: \"_gcl_dc\",\n\t\t}\n\n\t\tif (wpm.getCookie(clidCookieId[clidId])) {\n\n\t\t\tlet clidCookie = wpm.getCookie(clidCookieId[clidId])\n\t\t\tlet matches = clidCookie.match(/(GCL.[\\d]*.)(.*)/)\n\t\t\treturn matches[2]\n\t\t} else {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n\twpm.getUserAgent = () => navigator.userAgent\n\n\twpm.getViewPort = () => ({\n\t\twidth : Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t\theight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0),\n\t})\n\n\n\twpm.version = () => {\n\t\tconsole.log(wpmDataLayer.version)\n\t}\n\n\t/**\n\t * https://api.jquery.com/jquery.getscript/\n\t *\n\t * Switched back to jQuery.ajax as the fetch method on some sites returned a type error\n\t * Possible reasons are:\n\t * * CORS mismatch\n\t * * The user is using an ad blocker\n\t */\n\n\twpm.loadScriptAndCacheIt = url => {\n\n\t\t// Get and load the script using fetch API, if possible from cache, and return it without using eval\n\t\t// return fetch(url, {\n\t\t// \tmethod : \"GET\",\n\t\t// \tcache : \"default\",\n\t\t// \tkeepalive: true,\n\t\t// })\n\t\t// \t.then(response => {\n\t\t// \t\tif (response.ok) {\n\t\t// \t\t\t// console.log(\"response\", response)\n\t\t// \t\t\treturn response.text()\n\t\t// \t\t\t// console.log(\"wpm.loadScriptAndCacheIt success: \" + url)\n\t\t// \t\t} else {\n\t\t// \t\t\tthrow new Error(\"Network response was not ok: \" + url)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.then(script => {\n\t\t// \t\t// Execute the script\n\t\t// \t\t// console.error(\"executing script: \" + script)\n\t\t// \t\teval(script)\n\t\t// \t\t// console.log(\"executed script: \" + script)\n\t\t// \t})\n\t\t// \t.catch(e => {\n\t\t// \t\tconsole.error(e)\n\t\t// \t})\n\n\t\tlet options = {\n\t\t\tdataType: \"script\",\n\t\t\tcache : true,\n\t\t\turl : url,\n\t\t}\n\n\t\treturn jQuery.ajax(options)\n\t}\n\n\twpm.getOrderItemPrice = orderItem => (orderItem.total + orderItem.total_tax) / orderItem.quantity\n\n\twpm.hasLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setWpmSessionData(data)\n\t}\n\n\twpm.wpmDataLayerExists = () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (typeof wpmDataLayer !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.jQueryExists = () => new Promise(resolve => {\n\t\t(function waitForjQuery() {\n\t\t\tif (typeof jQuery !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForjQuery, 100)\n\t\t})()\n\t})\n\n\twpm.pageLoaded = () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (\"complete\" === document.readyState) return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.pageReady = () => {\n\t\treturn new Promise(resolve => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\"interactive\" === document.readyState || \"complete\" === document.readyState) return resolve()\n\t\t\t\tsetTimeout(waitForVar, 50)\n\t\t\t})()\n\t\t})\n\t}\n\n\twpm.isMiniCartActive = () => {\n\t\tif (window.sessionStorage) {\n\t\t\tfor (const [key, value] of Object.entries(window.sessionStorage)) {\n\t\t\t\tif (key.includes(\"wc_fragments\")) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.doesWooCommerceCartExist = () => document.cookie.includes(\"woocommerce_items_in_cart\")\n\n\twpm.urlHasParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.has(parameter)\n\t}\n\n\t// https://stackoverflow.com/a/60606893/4688612\n\twpm.hashAsync = (algo, str) => {\n\t\treturn crypto.subtle.digest(algo, new TextEncoder(\"utf-8\").encode(str)).then(buf => {\n\t\t\treturn Array.prototype.map.call(new Uint8Array(buf), x => ((\"00\" + x.toString(16)).slice(-2))).join(\"\")\n\t\t})\n\t}\n\n\twpm.getCartValue = () => {\n\n\t\tlet value = 0\n\n\t\tif (wpmDataLayer?.cart) {\n\n\t\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\t\t// content_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\n\t\t\t\tlet product = wpmDataLayer.cart[key]\n\n\t\t\t\tvalue += product.quantity * product.price\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern\n\t *\n\t * @param patterns\n\t * @returns {boolean}\n\t */\n\twpm.doesUrlContainPatterns = patterns => {\n\n\t\tfor (const pattern of patterns) {\n\t\t\tif (new RegExp(pattern).test(window.location.href)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern that is on the tracking exclusion list\n\t *\n\t * https://www.linkedin.com/pulse/how-remove-google-robot-problem-via-gtm-facebook-pixel-hjelpdahl/\n\t * https://www.youtube.com/watch?v=b4I1ePZt8Z0\n\t *\n\t * @returns {boolean}\n\t */\n\twpm.excludeDomainFromTracking = () => {\n\n\t\tlet excludeDomains = [\n\t\t\t\"appspot.com\",\n\t\t\t\"translate.google.com\",\n\t\t]\n\n\t\tif (wpmDataLayer?.general?.excludeDomains) {\n\t\t\texcludeDomains = [...excludeDomains, ...wpmDataLayer.general.excludeDomains]\n\t\t}\n\n\t\t// Abort if URL contains excluded domains\n\t\tif (excludeDomains.some(domain => window.location.href.includes(domain))) {\n\t\t\tconsole.debug(\"Pixel Manager for WooCommerce: Aborted due to excluded domain\")\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.getRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\tlet jQueryReadyFired = false\n\n\tconst triggerDomReadyEvent = () => {\n\t\tif (jQueryReadyFired === false) jQuery(document).trigger(\"pmw:ready\")\n\t\tjQueryReadyFired = true\n\t}\n\n\tjQuery(document).on(\"ready\", () => {\n\t\ttriggerDomReadyEvent()\n\t})\n\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\ttriggerDomReadyEvent()\n\t})\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load all WPM functions\n *\n * Ignore event listeners. They need to be loaded after\n * we made sure that jQuery has been loaded.\n */\n\nrequire(\"./functions\")\nrequire(\"./cookie_consent\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// #endif\n","/**\n * After WPM is loaded\n * we first check if wpmDataLayer is loaded,\n * and as soon as it is, we load the pixels,\n * and as soon as the page load is complete,\n * we fire the wpmLoad event.\n *\n * @param {{pro:bool}} wpmDataLayer.version\n *\n * https://stackoverflow.com/a/25868457/4688612\n * https://stackoverflow.com/a/44093516/4688612\n */\n\nwpm.wpmDataLayerExists()\n\t.then(() => {\n\t\tconsole.log(\"Pixel Manager for WooCommerce: \" + (wpmDataLayer.version.pro ? \"Pro\" : \"Free\") + \" Version \" + wpmDataLayer.version.number + \" loaded\")\n\n\t\tif (wpm.excludeDomainFromTracking()) return\n\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t})\n\t.then(() => {\n\t\twpm.pageLoaded().then(() => {\n\t\t\tdocument.dispatchEvent(new Event(\"wpmLoad\"))\n\t\t})\n\t})\n\n\n/**\n * Run when page is ready\n */\n\n// wpm.pageReady().then(() => {\njQuery(document).on(\"pmw:ready\", () => {\n\n\t/**\n\t * Run as soon as wpm namespace is loaded\n\t */\n\n\twpm.wpmDataLayerExists()\n\t\t.then(() => {\n\t\t\t// watch for products visible in viewport\n\t\t\twpm.startIntersectionObserverToWatch()\n\n\t\t\t// watch for lazy loaded products\n\t\t\twpm.startProductsMutationObserverToWatch()\n\t\t})\n})\n\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Load all essential scripts first\n */\n\nrequire(\"./wpm/functions_loader\")\n\n// Only load the event listeners after jQuery has been loaded for sure\nwpm.jQueryExists().then(function () {\n\n\tjQuery(document).on(\"pmw:ready\", () => {\n\t\trequire(\"./wpm/event_listeners_on_ready\")\n\t})\n\n\trequire(\"./wpm/event_listeners\")\n\n\t// require(\"./wpm/wc_hooks\")\n\n\trequire(\"./google/loader\")\n\trequire(\"./facebook/loader\")\n\trequire(\"./hotjar/loader\")\n\n\t/**\n\t * Load all premium scripts\n\t */\n\n\t// #if process.env.TIER === 'premium'\n// \trequire(\"./wpm/event_listeners_premium\")\n// \trequire(\"./microsoft-ads/loader\")\n// \trequire(\"./pinterest/loader\")\n// \trequire(\"./snapchat/loader\")\n// \trequire(\"./tiktok/loader\")\n// \trequire(\"./twitter/loader\")\n\t// #endif\n\n\n\t/**\n\t * Initiate WPM.\n\t *\n\t * It makes sure that the script flow gets executed correctly,\n\t * no matter how JS \"optimizers\" shuffle the code.\n\t */\n\n\trequire(\"./wpm/init\")\n})\n\n"],"names":["jQuery","document","on","wpmDataLayer","pixels","facebook","pixel_id","loaded","wpm","doesUrlContainPatterns","exclusion_patterns","canIFire","loadFacebookPixel","event","payload","fbq","custom_data","eventID","event_id","error","console","setFbUserData","$","undefined","fbUserData","f","window","b","e","n","callMethod","apply","arguments","queue","push","_fbq","version","t","createElement","async","src","s","getElementsByTagName","parentNode","insertBefore","data","isFbpSet","isFbAdvancedMatchingEnabled","getUserIdentifiersForFb","user","id","external_id","order","user_id","email","em","billing_email_hashed","first_name","fn","billing_first_name","toLowerCase","last_name","ln","billing_last_name","phone","ph","billing_phone","replace","city","ct","billing_city","state","st","billing_state","postcode","zp","billing_postcode","country","billing_country","getFbRandomEventId","Math","random","toString","substring","getFbUserData","getFbUserDataFromBrowser","advanced_matching","getCookie","isValidFbp","fbp","isValidFbc","fbc","navigator","userAgent","client_user_agent","RegExp","test","fbGetProductDataForCapiEvent","product","content_type","content_name","name","content_ids","dyn_r_ids","dynamic_remarketing","id_type","value","parseFloat","quantity","price","currency","facebookContentIds","prodIds","key","item","Object","entries","items","general","variationsOutput","variation_id","String","products","trackCustomFacebookEvent","eventName","customData","eventId","trigger","event_name","user_data","event_source_url","location","href","fbGetContentIdsFromCart","cart","require","isEmptyObject","google","ads","conversionIds","status","googleConfigConditionsMet","isVariable","send_events_with_parent_ids","send_to","getGoogleAdsConversionIdentifiers","google_business_vertical","gtagLoaded","then","gtag","value_filtered","getGoogleAdsDynamicRemarketingOrderItems","getGoogleAdsConversionIdentifiersWithLabel","data_basic","data_with_cart","transaction_id","number","new_customer","clv_order_value_filtered","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","getGoogleAdsRegularOrderItems","conversionIdentifiers","orderItems","orderItem","analytics","universal","property_id","mp_active","affiliation","value_regular","tax","shipping","coupon","getGAUAOrderItems","category","join","variant","variant_name","brand","ga3AddListNameToProduct","item_data","productPosition","list_name","shop","list_position","ga4","measurement_id","getGA4OrderItems","item_name","item_category","item_id","item_variant","item_brand","canGoogleLoad","loadGoogle","logPreventedPixelLoading","type","consent_mode","active","getConsentValues","mode","categories","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","updateGoogleConsentMode","cookie_consent_mgmt","explicit_consent","fireGtagGoogleAds","enhanced_conversions","phone_conversion_label","phone_conversion_number","keys","page_type","enhanced_conversion_data","fireGtagGoogleAnalyticsUA","parameters","fireGtagGoogleAnalyticsGA4","debug_mode","isGoogleActive","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","setTimeout","optimize","container_id","load_google_optimize_pixel","hotjar","site_id","load_hotjar_pixel","h","o","hj","q","_hjSettings","hjid","hjsv","a","r","appendChild","getComplianzCookies","cmplz_statistics","cmplz_marketing","visitorHasChosen","getCookieLawInfoCookies","analyticsCookie","adsCookie","wpmConsentValues","setConsentValueCategories","updateConsentCookieValues","cookie","explicitConsent","JSON","parse","decodeURI","indexOf","action","length","consents","statistics","marketing","thirdparty","advanced","localStorage","getItem","log","UC_UI","addEventListener","ucUiProcessConsent","areAllConsentsAccepted","groups","URLSearchParams","get","split","groupsObject","forEach","group","groupArray","groubsObject","pmw","consentAcceptAll","ucStatisticsSlug","getSettingsLabels","filter","label","slug","consentAdjustSelectively","getServicesBaseInfo","categorySlug","consent","setConsentDefaultValuesToExplicit","pixelName","canIFireMode","scriptTagObserver","MutationObserver","mutations","addedNodes","node","shouldScriptBeActive","unblockScript","blockScript","observe","head","childList","subtree","disconnect","some","element","scriptNode","removeAttach","remove","wpmSrc","attr","appendTo","dispatchEvent","Event","removeAttr","unblockAllScripts","unblockSelectedPixels","explicitConsentStateAlreadySet","Cookiebot","detail","cmplzStatusChange","cmplzConsentData","huObserver","querySelector","hu","documentElement","body","consentRevokeAll","OneTrust","reload","duration","consentSetCookie","setCookie","stringify","url","URL","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonClasses","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","doesWooCommerceCartExist","getCartItems","productIds","getAddToCartLinkProductIds","getProductsFromBackend","referrer","referrerHostname","hostname","host","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","sessionStorage","tiktok","getRandomEventId","context","getTikTokUserDataFromBrowser","properties","contents","content_id","sendEventPayloadToServer","getCartValue","search_string","getSearchTermFromUrl","query","getTikTokOrderItemIds","addToCartSelectors","addProductToCart","Number","each","index","find","classes","getPostIdFromString","one","target","closest","origin","searchParams","has","nextAll","getIdBasedOndVariationsOutputSetting","Error","getProductDetailsFormattedForEvent","isEmail","emailSelected","getCartItemsFromBackend","variation","triggerViewItemEventPrep","wpmDeduper","wpmRestSettings","checkCookie","useRestEndpoint","isSessionStorageAvailable","isRestEndpointAvailable","isBelowRestErrorThreshold","testEndpoint","root","cookieName","response","fetch","method","cache","keepalive","setItem","isWpmRestEndpointAvailable","orderId","source","Storage","ids","expiresDate","setDate","getDate","toUTCString","storeOrderIdOnServer","orderDeduplication","quantityToRemove","isVariation","parentId","saveCartObjectToDataLayer","ajax_url","ok","json","success","headers","pageId","responseData","assign","cartObject","triggerViewItemEvent","triggerViewItemEventNoProduct","step","checkout_option","string","match","triggerViewItemList","viewItemListTriggerTestMode","css","append","viewItemListTrigger","opacity","backgroundColor","search","io","ioTimeouts","observerCallback","observer","entry","elementId","next","isIntersecting","testMode","repeat","unobserve","timeout","clearTimeout","allIoElementsToWatch","ioid","getAllElementsToWatch","map","i","elem","parent","hasClass","prev","this","startIntersectionObserverToWatch","urlHasParameter","IntersectionObserver","threshold","startProductsMutationObserverToWatch","productsNode","parents","first","productsMutationObserver","attributes","characterData","mutation","newNodes","hasWpmProductIdElement","siblings","cookieValue","expiryDays","d","setTime","getTime","expires","ca","decodeURIComponent","c","charAt","deleteCookie","getWpmSessionData","setWpmSessionData","order_id","nonce","cartItemKey","cartItemKeys","matches","position","parentId_dyn_r_ids","setReferrerToCookie","getReferrerFromCookie","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","max","clientWidth","innerWidth","height","clientHeight","innerHeight","options","dataType","ajax","getOrderItemPrice","total","total_tax","loginEventFired","wpmDataLayerExists","waitForVar","jQueryExists","waitForjQuery","pageLoaded","readyState","pageReady","isMiniCartActive","parameter","hashAsync","algo","str","crypto","subtle","digest","TextEncoder","encode","buf","Array","prototype","call","Uint8Array","x","slice","patterns","pattern","excludeDomainFromTracking","excludeDomains","domain","debug","jQueryReadyFired","triggerDomReadyEvent","pro","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__"],"sourceRoot":""}
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: woocommerce, google analytics, google ads, facebook, conversion tracking,
|
|
4 |
Requires at least: 3.7
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 7.3
|
7 |
-
Stable tag: 1.27.
|
8 |
License: GPLv3 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -221,6 +221,12 @@ You can send the link to the front page of your shop too if you think it would b
|
|
221 |
|
222 |
== Changelog ==
|
223 |
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
= 1.27.0 = 15.11.2022
|
225 |
|
226 |
|
@@ -231,7 +237,8 @@ You can send the link to the front page of your shop too if you think it would b
|
|
231 |
* Tweak: Switched back to the previous method to attach most of the events to DOM elements, as the old method looks like to be compatible with more themes.
|
232 |
* Tweak: Added filter to exclude domains from tracking.
|
233 |
* Tweak: Updated third party libraries.
|
234 |
-
* Tweak: Include PMW version
|
|
|
235 |
* Fix: Fixed an edge case where get_pmw_tracked_payment_methods would throw an error if no orders were found.
|
236 |
* Fix: Fixed generation of precompressed admin .js files.
|
237 |
|
@@ -483,6 +490,7 @@ You can send the link to the front page of your shop too if you think it would b
|
|
483 |
= 1.16.12 = 27.04.2022
|
484 |
|
485 |
* Tweak: Added a new event listener for the Complianz Cookie Banner
|
|
|
486 |
|
487 |
|
488 |
|
4 |
Requires at least: 3.7
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 7.3
|
7 |
+
Stable tag: 1.27.1
|
8 |
License: GPLv3 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
221 |
|
222 |
== Changelog ==
|
223 |
|
224 |
+
= 1.27.1 = 16.11.2022
|
225 |
+
|
226 |
+
* Tweak: Removed a console.og statement
|
227 |
+
* Tweak: Remove an error_log if an invalid phone number is passed to the e164 formatter
|
228 |
+
* Fix: Fixed a check if conversions have already fired for logged-in users
|
229 |
+
|
230 |
= 1.27.0 = 15.11.2022
|
231 |
|
232 |
|
237 |
* Tweak: Switched back to the previous method to attach most of the events to DOM elements, as the old method looks like to be compatible with more themes.
|
238 |
* Tweak: Added filter to exclude domains from tracking.
|
239 |
* Tweak: Updated third party libraries.
|
240 |
+
* Tweak: Include PMW version in filename of settings export file.
|
241 |
+
* Tweak: Added logic for dealing with database downgrades in case a user downgrades to a lower version of the plugin.
|
242 |
* Fix: Fixed an edge case where get_pmw_tracked_payment_methods would throw an error if no orders were found.
|
243 |
* Fix: Fixed generation of precompressed admin .js files.
|
244 |
|
490 |
= 1.16.12 = 27.04.2022
|
491 |
|
492 |
* Tweak: Added a new event listener for the Complianz Cookie Banner
|
493 |
+
* Tweak: Added polyfill iconv to fix an edge case: https://wordpress.org/support/topic/update-to-pho-8-crash-wp/
|
494 |
|
495 |
|
496 |
|
vendor/freemius/wordpress-sdk/assets/img/woocommerce-google-adwords-conversion-tracking-tag.png
DELETED
Binary file
|
vendor/freemius/wordpress-sdk/includes/i18n.php
DELETED
@@ -1,605 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @since 1.1.4
|
7 |
-
*
|
8 |
-
* @deprecated This file is no longer in use. It's still in the project for backward compatibility.
|
9 |
-
*/
|
10 |
-
|
11 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
12 |
-
exit;
|
13 |
-
}
|
14 |
-
|
15 |
-
require_once dirname( __FILE__ ) . '/l10n.php';
|
16 |
-
|
17 |
-
/**
|
18 |
-
* All strings can now be overridden.
|
19 |
-
*
|
20 |
-
* For example, if we want to override:
|
21 |
-
* 'you-are-step-away' => 'You are just one step away - %s',
|
22 |
-
*
|
23 |
-
* We can use the filter:
|
24 |
-
* fs_override_i18n( array(
|
25 |
-
* 'opt-in-connect' => __( "Yes - I'm in!", '{your-text_domain}' ),
|
26 |
-
* 'skip' => __( 'Not today', '{your-text_domain}' ),
|
27 |
-
* ), '{plugin_slug}' );
|
28 |
-
*
|
29 |
-
* Or with the Freemius instance:
|
30 |
-
*
|
31 |
-
* my_freemius->override_i18n( array(
|
32 |
-
* 'opt-in-connect' => __( "Yes - I'm in!", '{your-text_domain}' ),
|
33 |
-
* 'skip' => __( 'Not today', '{your-text_domain}' ),
|
34 |
-
* ) );
|
35 |
-
*/
|
36 |
-
global $fs_text;
|
37 |
-
|
38 |
-
$fs_text = array(
|
39 |
-
'account' => _fs_text( 'Account' ),
|
40 |
-
'addon' => _fs_text( 'Add-On' ),
|
41 |
-
'contact-us' => _fs_text( 'Contact Us' ),
|
42 |
-
'contact-support' => _fs_text( 'Contact Support' ),
|
43 |
-
'change-ownership' => _fs_text( 'Change Ownership' ),
|
44 |
-
'support' => _fs_text( 'Support' ),
|
45 |
-
'support-forum' => _fs_text( 'Support Forum' ),
|
46 |
-
'add-ons' => _fs_text( 'Add-Ons' ),
|
47 |
-
'upgrade' => _fs_x( 'Upgrade', 'verb' ),
|
48 |
-
'awesome' => _fs_text( 'Awesome' ),
|
49 |
-
'pricing' => _fs_x( 'Pricing', 'noun' ),
|
50 |
-
'price' => _fs_x( 'Price', 'noun' ),
|
51 |
-
'unlimited-updates' => _fs_text( 'Unlimited Updates' ),
|
52 |
-
'downgrade' => _fs_x( 'Downgrade', 'verb' ),
|
53 |
-
'cancel-subscription' => _fs_x( 'Cancel Subscription', 'verb' ),
|
54 |
-
'cancel-trial' => _fs_text( 'Cancel Trial' ),
|
55 |
-
'free-trial' => _fs_text( 'Free Trial' ),
|
56 |
-
'start-free-x' => _fs_text( 'Start my free %s' ),
|
57 |
-
'no-commitment-x' => _fs_text( 'No commitment for %s - cancel anytime' ),
|
58 |
-
'after-x-pay-as-little-y' => _fs_text( 'After your free %s, pay as little as %s' ),
|
59 |
-
'details' => _fs_text( 'Details' ),
|
60 |
-
'account-details' => _fs_text( 'Account Details' ),
|
61 |
-
'delete' => _fs_x( 'Delete', 'verb' ),
|
62 |
-
'show' => _fs_x( 'Show', 'verb' ),
|
63 |
-
'hide' => _fs_x( 'Hide', 'verb' ),
|
64 |
-
'edit' => _fs_x( 'Edit', 'verb' ),
|
65 |
-
'update' => _fs_x( 'Update', 'verb' ),
|
66 |
-
'date' => _fs_text( 'Date' ),
|
67 |
-
'amount' => _fs_text( 'Amount' ),
|
68 |
-
'invoice' => _fs_text( 'Invoice' ),
|
69 |
-
'billing' => _fs_text( 'Billing' ),
|
70 |
-
'payments' => _fs_text( 'Payments' ),
|
71 |
-
'delete-account' => _fs_text( 'Delete Account' ),
|
72 |
-
'dismiss' => _fs_x( 'Dismiss', 'as close a window' ),
|
73 |
-
'plan' => _fs_x( 'Plan', 'as product pricing plan' ),
|
74 |
-
'change-plan' => _fs_text( 'Change Plan' ),
|
75 |
-
'download-x-version' => _fs_x( 'Download %s Version', 'as download professional version' ),
|
76 |
-
'download-x-version-now' => _fs_x( 'Download %s version now', 'as download professional version now' ),
|
77 |
-
'download-latest' => _fs_x( 'Download Latest', 'as download latest version' ),
|
78 |
-
'you-have-x-license' => _fs_x( 'You have a %s license.', 'E.g. you have a professional license.' ),
|
79 |
-
'new' => _fs_text( 'New' ),
|
80 |
-
'free' => _fs_text( 'Free' ),
|
81 |
-
'trial' => _fs_x( 'Trial', 'as trial plan' ),
|
82 |
-
'start-trial' => _fs_x( 'Start Trial', 'as starting a trial plan' ),
|
83 |
-
'purchase' => _fs_x( 'Purchase', 'verb' ),
|
84 |
-
'purchase-license' => _fs_text( 'Purchase License' ),
|
85 |
-
'buy' => _fs_x( 'Buy', 'verb' ),
|
86 |
-
'buy-license' => _fs_text( 'Buy License' ),
|
87 |
-
'license-single-site' => _fs_text( 'Single Site License' ),
|
88 |
-
'license-unlimited' => _fs_text( 'Unlimited Licenses' ),
|
89 |
-
'license-x-sites' => _fs_text( 'Up to %s Sites' ),
|
90 |
-
'renew-license-now' => _fs_text( '%sRenew your license now%s to access version %s security & feature updates, and support.' ),
|
91 |
-
'ask-for-upgrade-email-address' => _fs_text( "Enter the email address you've used for the upgrade below and we will resend you the license key." ),
|
92 |
-
'x-plan' => _fs_x( '%s Plan', 'e.g. Professional Plan' ),
|
93 |
-
'you-are-step-away' => _fs_text( 'You are just one step away - %s' ),
|
94 |
-
'activate-x-now' => _fs_x( 'Complete "%s" Activation Now',
|
95 |
-
'%s - plugin name. As complete "Jetpack" activation now' ),
|
96 |
-
'few-plugin-tweaks' => _fs_text( 'We made a few tweaks to the %s, %s' ),
|
97 |
-
'optin-x-now' => _fs_text( 'Opt in to make "%s" better!' ),
|
98 |
-
'error' => _fs_text( 'Error' ),
|
99 |
-
'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
|
100 |
-
'learn-more' => _fs_text( 'Learn more' ),
|
101 |
-
'license_not_whitelabeled' => _fs_text( "Is this your client's site? %s if you wish to hide sensitive info like your billing address and invoices from the WP Admin."),
|
102 |
-
'license_whitelabeled' => _fs_text( 'Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your billing address and invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s.'),
|
103 |
-
|
104 |
-
#region Affiliation
|
105 |
-
'affiliation' => _fs_text( 'Affiliation' ),
|
106 |
-
'affiliate' => _fs_text( 'Affiliate' ),
|
107 |
-
'affiliate-tracking' => _fs_text( '%s tracking cookie after the first visit to maximize earnings potential.' ),
|
108 |
-
'renewals-commission' => _fs_text( 'Get commission for automated subscription renewals.' ),
|
109 |
-
'affiliate-application-accepted' => _fs_text( "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s." ),
|
110 |
-
'affiliate-application-thank-you' => _fs_text( "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information." ),
|
111 |
-
'affiliate-application-rejected' => _fs_text( "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days." ),
|
112 |
-
'affiliate-account-suspended' => _fs_text( 'Your affiliation account was temporarily suspended.' ),
|
113 |
-
'affiliate-account-blocked' => _fs_text( 'Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support.' ),
|
114 |
-
'become-an-ambassador' => _fs_text( 'Like the %s? Become our ambassador and earn cash ;-)' ),
|
115 |
-
'become-an-ambassador-admin-notice' => _fs_text( 'Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!' ),
|
116 |
-
'refer-new-customers' => _fs_text( 'Refer new customers to our %s and earn %s commission on each successful sale you refer!' ),
|
117 |
-
'program-summary' => _fs_text( 'Program Summary' ),
|
118 |
-
'commission-on-new-license-purchase' => _fs_text( '%s commission when a customer purchases a new license.' ),
|
119 |
-
'unlimited-commissions' => _fs_text( 'Unlimited commissions.' ),
|
120 |
-
'minimum-payout-amount' => _fs_text( '%s minimum payout amount.' ),
|
121 |
-
'payouts-unit-and-processing' => _fs_text( 'Payouts are in USD and processed monthly via PayPal.' ),
|
122 |
-
'commission-payment' => _fs_text( 'As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days.' ),
|
123 |
-
'become-an-affiliate' => _fs_text( 'Become an affiliate' ),
|
124 |
-
'apply-to-become-an-affiliate' => _fs_text( 'Apply to become an affiliate' ),
|
125 |
-
'full-name' => _fs_text( 'Full name' ),
|
126 |
-
'paypal-account-email-address' => _fs_text( 'PayPal account email address' ),
|
127 |
-
'promotion-methods' => _fs_text( 'Promotion methods' ),
|
128 |
-
'social-media' => _fs_text( 'Social media (Facebook, Twitter, etc.)' ),
|
129 |
-
'mobile-apps' => _fs_text( 'Mobile apps' ),
|
130 |
-
'statistics-information-field-label' => _fs_text( 'Website, email, and social media statistics (optional)' ),
|
131 |
-
'statistics-information-field-desc' => _fs_text( 'Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential).' ),
|
132 |
-
'promotion-method-desc-field-label' => _fs_text( 'How will you promote us?' ),
|
133 |
-
'promotion-method-desc-field-desc' => _fs_text( 'Please provide details on how you intend to promote %s (please be as specific as possible).' ),
|
134 |
-
'domain-field-label' => _fs_text( 'Where are you going to promote the %s?' ),
|
135 |
-
'domain-field-desc' => _fs_text( 'Enter the domain of your website or other websites from where you plan to promote the %s.' ),
|
136 |
-
'extra-domain-fields-label' => _fs_text( 'Extra Domains' ),
|
137 |
-
'extra-domain-fields-desc' => _fs_text( 'Extra domains where you will be marketing the product from.' ),
|
138 |
-
'add-another-domain' => _fs_text( 'Add another domain' ),
|
139 |
-
'remove' => _fs_x( 'Remove', 'Remove domain' ),
|
140 |
-
'email-address-is-required' => _fs_text( 'Email address is required.' ),
|
141 |
-
'domain-is-required' => _fs_text( 'Domain is required.' ),
|
142 |
-
'invalid-domain' => _fs_text( 'Invalid domain' ),
|
143 |
-
'paypal-email-address-is-required' => _fs_text( 'PayPal email address is required.' ),
|
144 |
-
'processing' => _fs_text( 'Processing...' ),
|
145 |
-
'non-expiring' => _fs_text( 'Non-expiring' ),
|
146 |
-
'account-is-pending-activation' => _fs_text( 'Account is pending activation.' ),
|
147 |
-
#endregion Affiliation
|
148 |
-
|
149 |
-
#region Account
|
150 |
-
'expiration' => _fs_x( 'Expiration', 'as expiration date' ),
|
151 |
-
'license' => _fs_x( 'License', 'as software license' ),
|
152 |
-
'not-verified' => _fs_text( 'not verified' ),
|
153 |
-
'verify-email' => _fs_text( 'Verify Email' ),
|
154 |
-
'expires-in' => _fs_x( 'Expires in %s', 'e.g. expires in 2 months' ),
|
155 |
-
'renews-in' => _fs_x( 'Auto renews in %s', 'e.g. auto renews in 2 months' ),
|
156 |
-
'no-expiration' => _fs_text( 'No expiration' ),
|
157 |
-
'expired' => _fs_text( 'Expired' ),
|
158 |
-
'cancelled' => _fs_text( 'Cancelled' ),
|
159 |
-
'in-x' => _fs_x( 'In %s', 'e.g. In 2 hours' ),
|
160 |
-
'x-ago' => _fs_x( '%s ago', 'e.g. 2 min ago' ),
|
161 |
-
/* translators: %s: Version number (e.g. 4.6 or higher) */
|
162 |
-
'x-or-higher' => _fs_text( '%s or higher' ),
|
163 |
-
'version' => _fs_x( 'Version', 'as plugin version' ),
|
164 |
-
'name' => _fs_text( 'Name' ),
|
165 |
-
'email' => _fs_text( 'Email' ),
|
166 |
-
'email-address' => _fs_text( 'Email address' ),
|
167 |
-
'verified' => _fs_text( 'Verified' ),
|
168 |
-
'module' => _fs_text( 'Module' ),
|
169 |
-
'module-type' => _fs_text( 'Module Type' ),
|
170 |
-
'plugin' => _fs_text( 'Plugin' ),
|
171 |
-
'plugins' => _fs_text( 'Plugins' ),
|
172 |
-
'theme' => _fs_text( 'Theme' ),
|
173 |
-
'themes' => _fs_text( 'Themes' ),
|
174 |
-
'path' => _fs_x( 'Path', 'as file/folder path' ),
|
175 |
-
'title' => _fs_text( 'Title' ),
|
176 |
-
'free-version' => _fs_text( 'Free version' ),
|
177 |
-
'premium-version' => _fs_text( 'Premium version' ),
|
178 |
-
'slug' => _fs_x( 'Slug', 'as WP plugin slug' ),
|
179 |
-
'id' => _fs_text( 'ID' ),
|
180 |
-
'users' => _fs_text( 'Users' ),
|
181 |
-
'module-installs' => _fs_text( '%s Installs' ),
|
182 |
-
'sites' => _fs_x( 'Sites', 'like websites' ),
|
183 |
-
'user-id' => _fs_text( 'User ID' ),
|
184 |
-
'site-id' => _fs_text( 'Site ID' ),
|
185 |
-
'public-key' => _fs_text( 'Public Key' ),
|
186 |
-
'secret-key' => _fs_text( 'Secret Key' ),
|
187 |
-
'no-secret' => _fs_x( 'No Secret', 'as secret encryption key missing' ),
|
188 |
-
'no-id' => _fs_text( 'No ID' ),
|
189 |
-
'sync-license' => _fs_x( 'Sync License', 'as synchronize license' ),
|
190 |
-
'sync' => _fs_x( 'Sync', 'as synchronize' ),
|
191 |
-
'activate-license' => _fs_text( 'Activate License' ),
|
192 |
-
'activate-free-version' => _fs_text( 'Activate Free Version' ),
|
193 |
-
'activate-license-message' => _fs_text( 'Please enter the license key that you received in the email right after the purchase:' ),
|
194 |
-
'activating-license' => _fs_text( 'Activating license...' ),
|
195 |
-
'change-license' => _fs_text( 'Change License' ),
|
196 |
-
'update-license' => _fs_text( 'Update License' ),
|
197 |
-
'deactivate-license' => _fs_text( 'Deactivate License' ),
|
198 |
-
'activate' => _fs_text( 'Activate' ),
|
199 |
-
'deactivate' => _fs_text( 'Deactivate' ),
|
200 |
-
'skip-deactivate' => _fs_text( 'Skip & Deactivate' ),
|
201 |
-
'skip-and-x' => _fs_text( 'Skip & %s' ),
|
202 |
-
'no-deactivate' => _fs_text( 'No - just deactivate' ),
|
203 |
-
'yes-do-your-thing' => _fs_text( 'Yes - do your thing' ),
|
204 |
-
'active' => _fs_x( 'Active', 'active mode' ),
|
205 |
-
'is-active' => _fs_x( 'Is Active', 'is active mode?' ),
|
206 |
-
'install-now' => _fs_text( 'Install Now' ),
|
207 |
-
'install-update-now' => _fs_text( 'Install Update Now' ),
|
208 |
-
'more-information-about-x' => _fs_text( 'More information about %s' ),
|
209 |
-
'localhost' => _fs_text( 'Localhost' ),
|
210 |
-
'activate-x-plan' => _fs_x( 'Activate %s Plan', 'as activate Professional plan' ),
|
211 |
-
'x-left' => _fs_x( '%s left', 'as 5 licenses left' ),
|
212 |
-
'last-license' => _fs_text( 'Last license' ),
|
213 |
-
'what-is-your-x' => _fs_text( 'What is your %s?' ),
|
214 |
-
'activate-this-addon' => _fs_text( 'Activate this add-on' ),
|
215 |
-
'deactivate-license-confirm' => _fs_text( 'Deactivating your license will block all premium features, but will enable you to activate the license on another site. Are you sure you want to proceed?' ),
|
216 |
-
'delete-account-x-confirm' => _fs_text( 'Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the "Cancel" button, and first "Downgrade" your account. Are you sure you would like to continue with the deletion?' ),
|
217 |
-
'delete-account-confirm' => _fs_text( 'Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?' ),
|
218 |
-
'downgrade-x-confirm' => _fs_text( 'Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s.' ),
|
219 |
-
'cancel-trial-confirm' => _fs_text( 'Cancelling the trial will immediately block access to all premium features. Are you sure?' ),
|
220 |
-
'after-downgrade-non-blocking' => _fs_text( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.' ),
|
221 |
-
'after-downgrade-blocking' => _fs_text( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.' ),
|
222 |
-
'proceed-confirmation' => _fs_text( 'Are you sure you want to proceed?' ),
|
223 |
-
#endregion Account
|
224 |
-
|
225 |
-
'add-ons-for-x' => _fs_text( 'Add Ons for %s' ),
|
226 |
-
'add-ons-missing' => _fs_text( 'We could\'nt load the add-ons list. It\'s probably an issue on our side, please try to come back in few minutes.' ),
|
227 |
-
#region Plugin Deactivation
|
228 |
-
'anonymous-feedback' => _fs_text( 'Anonymous feedback' ),
|
229 |
-
'quick-feedback' => _fs_text( 'Quick feedback' ),
|
230 |
-
'deactivation-share-reason' => _fs_text( 'If you have a moment, please let us know why you are %s' ),
|
231 |
-
'deactivating' => _fs_text( 'deactivating' ),
|
232 |
-
'deactivation' => _fs_text( 'Deactivation' ),
|
233 |
-
'theme-switch' => _fs_text( 'Theme Switch' ),
|
234 |
-
'switching' => _fs_text( 'switching' ),
|
235 |
-
'switch' => _fs_text( 'Switch' ),
|
236 |
-
'activate-x' => _fs_text( 'Activate %s' ),
|
237 |
-
'deactivation-modal-button-confirm' => _fs_text( 'Yes - %s' ),
|
238 |
-
'deactivation-modal-button-submit' => _fs_text( 'Submit & %s' ),
|
239 |
-
'cancel' => _fs_text( 'Cancel' ),
|
240 |
-
'reason-no-longer-needed' => _fs_text( 'I no longer need the %s' ),
|
241 |
-
'reason-found-a-better-plugin' => _fs_text( 'I found a better %s' ),
|
242 |
-
'reason-needed-for-a-short-period' => _fs_text( 'I only needed the %s for a short period' ),
|
243 |
-
'reason-broke-my-site' => _fs_text( 'The %s broke my site' ),
|
244 |
-
'reason-suddenly-stopped-working' => _fs_text( 'The %s suddenly stopped working' ),
|
245 |
-
'reason-cant-pay-anymore' => _fs_text( "I can't pay for it anymore" ),
|
246 |
-
'reason-temporary-deactivation' => _fs_text( "It's a temporary deactivation. I'm just debugging an issue." ),
|
247 |
-
'reason-temporary-x' => _fs_text( "It's a temporary %s. I'm just debugging an issue." ),
|
248 |
-
'reason-other' => _fs_x( 'Other',
|
249 |
-
'the text of the "other" reason for deactivating the module that is shown in the modal box.' ),
|
250 |
-
'ask-for-reason-message' => _fs_text( 'Kindly tell us the reason so we can improve.' ),
|
251 |
-
'placeholder-plugin-name' => _fs_text( "What's the %s's name?" ),
|
252 |
-
'placeholder-comfortable-price' => _fs_text( 'What price would you feel comfortable paying?' ),
|
253 |
-
'reason-couldnt-make-it-work' => _fs_text( "I couldn't understand how to make it work" ),
|
254 |
-
'reason-great-but-need-specific-feature' => _fs_text( "The %s is great, but I need specific feature that you don't support" ),
|
255 |
-
'reason-not-working' => _fs_text( 'The %s is not working' ),
|
256 |
-
'reason-not-what-i-was-looking-for' => _fs_text( "It's not what I was looking for" ),
|
257 |
-
'reason-didnt-work-as-expected' => _fs_text( "The %s didn't work as expected" ),
|
258 |
-
'placeholder-feature' => _fs_text( 'What feature?' ),
|
259 |
-
'placeholder-share-what-didnt-work' => _fs_text( "Kindly share what didn't work so we can fix it for future users..." ),
|
260 |
-
'placeholder-what-youve-been-looking-for' => _fs_text( "What you've been looking for?" ),
|
261 |
-
'placeholder-what-did-you-expect' => _fs_text( "What did you expect?" ),
|
262 |
-
'reason-didnt-work' => _fs_text( "The %s didn't work" ),
|
263 |
-
'reason-dont-like-to-share-my-information' => _fs_text( "I don't like to share my information with you" ),
|
264 |
-
'dont-have-to-share-any-data' => _fs_text( "You might have missed it, but you don't have to share any data and can just %s the opt-in." ),
|
265 |
-
#endregion Plugin Deactivation
|
266 |
-
|
267 |
-
#region Connect
|
268 |
-
'hey-x' => _fs_x( 'Hey %s,', 'greeting' ),
|
269 |
-
'thanks-x' => _fs_x( 'Thanks %s!', 'a greeting. E.g. Thanks John!' ),
|
270 |
-
'connect-message' => _fs_text( 'Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s.' ),
|
271 |
-
'connect-message_on-update' => _fs_text( 'Please help us improve %1$s! If you opt in, some data about your usage of %1$s will be sent to %4$s. If you skip this, that\'s okay! %1$s will still work just fine.' ),
|
272 |
-
'pending-activation-message' => _fs_text( 'You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s.' ),
|
273 |
-
'complete-the-install' => _fs_text( 'complete the install' ),
|
274 |
-
'start-the-trial' => _fs_text( 'start the trial' ),
|
275 |
-
'thanks-for-purchasing' => _fs_text( 'Thanks for purchasing %s! To get started, please enter your license key:' ),
|
276 |
-
'license-sync-disclaimer' => _fs_text( 'The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license.' ),
|
277 |
-
'what-permissions' => _fs_text( 'What permissions are being granted?' ),
|
278 |
-
'permissions-profile' => _fs_text( 'Your Profile Overview' ),
|
279 |
-
'permissions-profile_desc' => _fs_text( 'Name and email address' ),
|
280 |
-
'permissions-site' => _fs_text( 'Your Site Overview' ),
|
281 |
-
'permissions-site_desc' => _fs_text( 'Site URL, WP version, PHP info, plugins & themes' ),
|
282 |
-
'permissions-events' => _fs_text( 'Current %s Events' ),
|
283 |
-
'permissions-events_desc' => _fs_text( 'Activation, deactivation and uninstall' ),
|
284 |
-
'permissions-plugins_themes' => _fs_text( 'Plugins & Themes' ),
|
285 |
-
'permissions-plugins_themes_desc' => _fs_text( 'Titles, versions and state.' ),
|
286 |
-
'permissions-admin-notices' => _fs_text( 'Admin Notices' ),
|
287 |
-
'permissions-newsletter' => _fs_text( 'Newsletter' ),
|
288 |
-
'permissions-newsletter_desc' => _fs_text( 'Updates, announcements, marketing, no spam' ),
|
289 |
-
'privacy-policy' => _fs_text( 'Privacy Policy' ),
|
290 |
-
'tos' => _fs_text( 'Terms of Service' ),
|
291 |
-
'activating' => _fs_x( 'Activating', 'as activating plugin' ),
|
292 |
-
'sending-email' => _fs_x( 'Sending email', 'as in the process of sending an email' ),
|
293 |
-
'opt-in-connect' => _fs_x( 'Allow & Continue', 'button label' ),
|
294 |
-
'agree-activate-license' => _fs_x( 'Agree & Activate License', 'button label' ),
|
295 |
-
'skip' => _fs_x( 'Skip', 'verb' ),
|
296 |
-
'click-here-to-use-plugin-anonymously' => _fs_text( 'Click here to use the plugin anonymously' ),
|
297 |
-
'resend-activation-email' => _fs_text( 'Re-send activation email' ),
|
298 |
-
'license-key' => _fs_text( 'License key' ),
|
299 |
-
'send-license-key' => _fs_text( 'Send License Key' ),
|
300 |
-
'sending-license-key' => _fs_text( 'Sending license key' ),
|
301 |
-
'have-license-key' => _fs_text( 'Have a license key?' ),
|
302 |
-
'dont-have-license-key' => _fs_text( 'Don\'t have a license key?' ),
|
303 |
-
'cant-find-license-key' => _fs_text( "Can't find your license key?" ),
|
304 |
-
'email-not-found' => _fs_text( "We couldn't find your email address in the system, are you sure it's the right address?" ),
|
305 |
-
'no-active-licenses' => _fs_text( "We can't see any active licenses associated with that email address, are you sure it's the right address?" ),
|
306 |
-
'opt-in' => _fs_text( 'Opt In' ),
|
307 |
-
'opt-out' => _fs_text( 'Opt Out' ),
|
308 |
-
'opt-out-cancel' => _fs_text( 'On second thought - I want to continue helping' ),
|
309 |
-
'opting-out' => _fs_text( 'Opting out...' ),
|
310 |
-
'opting-in' => _fs_text( 'Opting in...' ),
|
311 |
-
'opt-out-message-appreciation' => _fs_text( 'We appreciate your help in making the %s better by letting us track some usage data.' ),
|
312 |
-
'opt-out-message-usage-tracking' => _fs_text( "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking." ),
|
313 |
-
'opt-out-message-clicking-opt-out' => _fs_text( 'By clicking "Opt Out", we will no longer be sending any data from %s to %s.' ),
|
314 |
-
'apply-on-all-sites-in-the-network' => _fs_text( 'Apply on all sites in the network.' ),
|
315 |
-
'delegate-to-site-admins' => _fs_text( 'Delegate to Site Admins' ),
|
316 |
-
'delegate-to-site-admins-and-continue' => _fs_text( 'Delegate to Site Admins & Continue' ),
|
317 |
-
'continue' => _fs_text( 'Continue' ),
|
318 |
-
'allow' => _fs_text( 'allow' ),
|
319 |
-
'delegate' => _fs_text( 'delegate' ),
|
320 |
-
#endregion Connect
|
321 |
-
|
322 |
-
#region Screenshots
|
323 |
-
'screenshots' => _fs_text( 'Screenshots' ),
|
324 |
-
'view-full-size-x' => _fs_text( 'Click to view full-size screenshot %d' ),
|
325 |
-
#endregion Screenshots
|
326 |
-
|
327 |
-
#region Debug
|
328 |
-
'freemius-debug' => _fs_text( 'Freemius Debug' ),
|
329 |
-
'on' => _fs_x( 'On', 'as turned on' ),
|
330 |
-
'off' => _fs_x( 'Off', 'as turned off' ),
|
331 |
-
'debugging' => _fs_x( 'Debugging', 'as code debugging' ),
|
332 |
-
'freemius-state' => _fs_text( 'Freemius State' ),
|
333 |
-
'connected' => _fs_x( 'Connected', 'as connection was successful' ),
|
334 |
-
'blocked' => _fs_x( 'Blocked', 'as connection blocked' ),
|
335 |
-
'api' => _fs_x( 'API', 'as application program interface' ),
|
336 |
-
'sdk' => _fs_x( 'SDK', 'as software development kit versions' ),
|
337 |
-
'sdk-versions' => _fs_x( 'SDK Versions', 'as software development kit versions' ),
|
338 |
-
'plugin-path' => _fs_x( 'Plugin Path', 'as plugin folder path' ),
|
339 |
-
'sdk-path' => _fs_x( 'SDK Path', 'as sdk path' ),
|
340 |
-
'addons-of-x' => _fs_text( 'Add Ons of Plugin %s' ),
|
341 |
-
'delete-all-confirm' => _fs_text( 'Are you sure you want to delete all Freemius data?' ),
|
342 |
-
'actions' => _fs_text( 'Actions' ),
|
343 |
-
'delete-all-accounts' => _fs_text( 'Delete All Accounts' ),
|
344 |
-
'start-fresh' => _fs_text( 'Start Fresh' ),
|
345 |
-
'clear-api-cache' => _fs_text( 'Clear API Cache' ),
|
346 |
-
'sync-data-from-server' => _fs_text( 'Sync Data From Server' ),
|
347 |
-
'scheduled-crons' => _fs_text( 'Scheduled Crons' ),
|
348 |
-
'cron-type' => _fs_text( 'Cron Type' ),
|
349 |
-
'plugins-themes-sync' => _fs_text( 'Plugins & Themes Sync' ),
|
350 |
-
'module-licenses' => _fs_text( '%s Licenses' ),
|
351 |
-
'debug-log' => _fs_text( 'Debug Log' ),
|
352 |
-
'all' => _fs_text( 'All' ),
|
353 |
-
'file' => _fs_text( 'File' ),
|
354 |
-
'function' => _fs_text( 'Function' ),
|
355 |
-
'process-id' => _fs_text( 'Process ID' ),
|
356 |
-
'logger' => _fs_text( 'Logger' ),
|
357 |
-
'message' => _fs_text( 'Message' ),
|
358 |
-
'download' => _fs_text( 'Download' ),
|
359 |
-
'filter' => _fs_text( 'Filter' ),
|
360 |
-
'type' => _fs_text( 'Type' ),
|
361 |
-
'all-types' => _fs_text( 'All Types' ),
|
362 |
-
'all-requests' => _fs_text( 'All Requests' ),
|
363 |
-
#endregion Debug
|
364 |
-
|
365 |
-
#region Expressions
|
366 |
-
'congrats' => _fs_x( 'Congrats', 'as congratulations' ),
|
367 |
-
'oops' => _fs_x( 'Oops', 'exclamation' ),
|
368 |
-
'yee-haw' => _fs_x( 'Yee-haw', 'interjection expressing joy or exuberance' ),
|
369 |
-
'woot' => _fs_x( 'W00t',
|
370 |
-
'(especially in electronic communication) used to express elation, enthusiasm, or triumph.' ),
|
371 |
-
'right-on' => _fs_x( 'Right on', 'a positive response' ),
|
372 |
-
'hmm' => _fs_x( 'Hmm',
|
373 |
-
'something somebody says when they are thinking about what you have just said. ' ),
|
374 |
-
'ok' => _fs_text( 'O.K' ),
|
375 |
-
'hey' => _fs_x( 'Hey', 'exclamation' ),
|
376 |
-
'heads-up' => _fs_x( 'Heads up',
|
377 |
-
'advance notice of something that will need attention.' ),
|
378 |
-
#endregion Expressions
|
379 |
-
|
380 |
-
#region Admin Notices
|
381 |
-
'you-have-latest' => _fs_text( 'Seems like you got the latest release.' ),
|
382 |
-
'you-are-good' => _fs_text( 'You are all good!' ),
|
383 |
-
'user-exist-message' => _fs_text( 'Sorry, we could not complete the email update. Another user with the same email is already registered.' ),
|
384 |
-
'user-exist-message_ownership' => _fs_text( 'If you would like to give up the ownership of the %s\'s account to %s click the Change Ownership button.' ),
|
385 |
-
'email-updated-message' => _fs_text( 'Your email was successfully updated. You should receive an email with confirmation instructions in few moments.' ),
|
386 |
-
'name-updated-message' => _fs_text( 'Your name was successfully updated.' ),
|
387 |
-
'x-updated' => _fs_text( 'You have successfully updated your %s.' ),
|
388 |
-
'name-update-failed-message' => _fs_text( 'Please provide your full name.' ),
|
389 |
-
'verification-email-sent-message' => _fs_text( 'Verification mail was just sent to %s. If you can\'t find it after 5 min, please check your spam box.' ),
|
390 |
-
'addons-info-external-message' => _fs_text( 'Just letting you know that the add-ons information of %s is being pulled from an external server.' ),
|
391 |
-
'no-cc-required' => _fs_text( 'No credit card required' ),
|
392 |
-
'premium-activated-message' => _fs_text( 'Premium %s version was successfully activated.' ),
|
393 |
-
'successful-version-upgrade-message' => _fs_text( 'The upgrade of %s was successfully completed.' ),
|
394 |
-
'activation-with-plan-x-message' => _fs_text( 'Your account was successfully activated with the %s plan.' ),
|
395 |
-
'download-latest-x-version-now' => _fs_text( 'Download the latest %s version now' ),
|
396 |
-
'follow-steps-to-complete-upgrade' => _fs_text( 'Please follow these steps to complete the upgrade' ),
|
397 |
-
'download-latest-x-version' => _fs_text( 'Download the latest %s version' ),
|
398 |
-
'download-latest-version' => _fs_text( 'Download the latest version' ),
|
399 |
-
'deactivate-free-version' => _fs_text( 'Deactivate the free version' ),
|
400 |
-
'upload-and-activate' => _fs_text( 'Upload and activate the downloaded version' ),
|
401 |
-
'howto-upload-activate' => _fs_text( 'How to upload and activate?' ),
|
402 |
-
'addon-successfully-purchased-message' => _fs_x( '%s Add-on was successfully purchased.',
|
403 |
-
'%s - product name, e.g. Facebook add-on was successfully...' ),
|
404 |
-
'addon-successfully-upgraded-message' => _fs_text( 'Your %s Add-on plan was successfully upgraded.' ),
|
405 |
-
'email-verified-message' => _fs_text( 'Your email has been successfully verified - you are AWESOME!' ),
|
406 |
-
'plan-upgraded-message' => _fs_text( 'Your plan was successfully upgraded.' ),
|
407 |
-
'plan-changed-to-x-message' => _fs_text( 'Your plan was successfully changed to %s.' ),
|
408 |
-
'license-expired-blocking-message' => _fs_text( 'Your license has expired. You can still continue using the free %s forever.' ),
|
409 |
-
'license-cancelled' => _fs_text( 'Your license has been cancelled. If you think it\'s a mistake, please contact support.' ),
|
410 |
-
'trial-started-message' => _fs_text( 'Your trial has been successfully started.' ),
|
411 |
-
'license-activated-message' => _fs_text( 'Your license was successfully activated.' ),
|
412 |
-
'no-active-license-message' => _fs_text( 'It looks like your site currently doesn\'t have an active license.' ),
|
413 |
-
'license-deactivation-message' => _fs_text( 'Your license was successfully deactivated, you are back to the %s plan.' ),
|
414 |
-
'license-deactivation-failed-message' => _fs_text( 'It looks like the license deactivation failed.' ),
|
415 |
-
'license-activation-failed-message' => _fs_text( 'It looks like the license could not be activated.' ),
|
416 |
-
'server-error-message' => _fs_text( 'Error received from the server:' ),
|
417 |
-
'trial-expired-message' => _fs_text( 'Your trial has expired. You can still continue using all our free features.' ),
|
418 |
-
'plan-x-downgraded-message' => _fs_text( 'Your plan was successfully downgraded. Your %s plan license will expire in %s.' ),
|
419 |
-
'plan-downgraded-failure-message' => _fs_text( 'Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes.' ),
|
420 |
-
'trial-cancel-no-trial-message' => _fs_text( 'It looks like you are not in trial mode anymore so there\'s nothing to cancel :)' ),
|
421 |
-
'trial-cancel-message' => _fs_text( 'Your %s free trial was successfully cancelled.' ),
|
422 |
-
'version-x-released' => _fs_x( 'Version %s was released.', '%s - numeric version number' ),
|
423 |
-
'please-download-x' => _fs_text( 'Please download %s.' ),
|
424 |
-
'latest-x-version' => _fs_x( 'the latest %s version here',
|
425 |
-
'%s - plan name, as the latest professional version here' ),
|
426 |
-
'trial-x-promotion-message' => _fs_text( 'How do you like %s so far? Test all our %s premium features with a %d-day free trial.' ),
|
427 |
-
'start-free-trial' => _fs_x( 'Start free trial', 'call to action' ),
|
428 |
-
'starting-trial' => _fs_text( 'Starting trial' ),
|
429 |
-
'please-wait' => _fs_text( 'Please wait' ),
|
430 |
-
'trial-cancel-failure-message' => _fs_text( 'Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes.' ),
|
431 |
-
'trial-utilized' => _fs_text( 'You already utilized a trial before.' ),
|
432 |
-
'in-trial-mode' => _fs_text( 'You are already running the %s in a trial mode.' ),
|
433 |
-
'trial-plan-x-not-exist' => _fs_text( 'Plan %s do not exist, therefore, can\'t start a trial.' ),
|
434 |
-
'plan-x-no-trial' => _fs_text( 'Plan %s does not support a trial period.' ),
|
435 |
-
'no-trials' => _fs_text( 'None of the %s\'s plans supports a trial period.' ),
|
436 |
-
'unexpected-api-error' => _fs_text( 'Unexpected API error. Please contact the %s\'s author with the following error.' ),
|
437 |
-
'no-commitment-for-x-days' => _fs_text( 'No commitment for %s days - cancel anytime!' ),
|
438 |
-
'license-expired-non-blocking-message' => _fs_text( 'Your license has expired. You can still continue using all the %s features, but you\'ll need to renew your license to continue getting updates and support.' ),
|
439 |
-
'could-not-activate-x' => _fs_text( 'Couldn\'t activate %s.' ),
|
440 |
-
'contact-us-with-error-message' => _fs_text( 'Please contact us with the following message:' ),
|
441 |
-
'plan-did-not-change-message' => _fs_text( 'It looks like you are still on the %s plan. If you did upgrade or change your plan, it\'s probably an issue on our side - sorry.' ),
|
442 |
-
'contact-us-here' => _fs_text( 'Please contact us here' ),
|
443 |
-
'plan-did-not-change-email-message' => _fs_text( 'I have upgraded my account but when I try to Sync the License, the plan remains %s.' ),
|
444 |
-
#endregion Admin Notices
|
445 |
-
#region Connectivity Issues
|
446 |
-
'connectivity-test-fails-message' => _fs_text( 'From unknown reason, the API connectivity test failed.' ),
|
447 |
-
'connectivity-test-maybe-temporary' => _fs_text( 'It\'s probably a temporary issue on our end. Just to be sure, with your permission, would it be o.k to run another connectivity test?' ),
|
448 |
-
'curl-missing-message' => _fs_text( 'We use PHP cURL library for the API calls, which is a very common library and usually installed and activated out of the box. Unfortunately, cURL is not activated (or disabled) on your server.' ),
|
449 |
-
'curl-disabled-methods' => _fs_text( 'Disabled method(s):' ),
|
450 |
-
'cloudflare-blocks-connection-message' => _fs_text( 'From unknown reason, CloudFlare, the firewall we use, blocks the connection.' ),
|
451 |
-
'x-requires-access-to-api' => _fs_x( '%s requires an access to our API.',
|
452 |
-
'as pluginX requires an access to our API' ),
|
453 |
-
'squid-blocks-connection-message' => _fs_text( 'It looks like your server is using Squid ACL (access control lists), which blocks the connection.' ),
|
454 |
-
'squid-no-clue-title' => _fs_text( 'I don\'t know what is Squid or ACL, help me!' ),
|
455 |
-
'squid-no-clue-desc' => _fs_text( 'We\'ll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update.' ),
|
456 |
-
'sysadmin-title' => _fs_text( 'I\'m a system administrator' ),
|
457 |
-
'squid-sysadmin-desc' => _fs_text( 'Great, please whitelist the following domains: %s. Once you are done, deactivate the %s and activate it again.' ),
|
458 |
-
'curl-missing-no-clue-title' => _fs_text( 'I don\'t know what is cURL or how to install it, help me!' ),
|
459 |
-
'curl-missing-no-clue-desc' => _fs_text( 'We\'ll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update.' ),
|
460 |
-
'curl-missing-sysadmin-desc' => _fs_text( 'Great, please install cURL and enable it in your php.ini file. In addition, search for the \'disable_functions\' directive in your php.ini file and remove any disabled methods starting with \'curl_\'. To make sure it was successfully activated, use \'phpinfo()\'. Once activated, deactivate the %s and reactivate it back again.' ),
|
461 |
-
'happy-to-resolve-issue-asap' => _fs_text( 'We are sure it\'s an issue on our side and more than happy to resolve it for you ASAP if you give us a chance.' ),
|
462 |
-
'contact-support-before-deactivation' => _fs_text( 'Sorry for the inconvenience and we are here to help if you give us a chance.' ),
|
463 |
-
'fix-issue-title' => _fs_text( 'Yes - I\'m giving you a chance to fix it' ),
|
464 |
-
'fix-issue-desc' => _fs_text( 'We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update.' ),
|
465 |
-
'install-previous-title' => _fs_text( 'Let\'s try your previous version' ),
|
466 |
-
'install-previous-desc' => _fs_text( 'Uninstall this version and install the previous one.' ),
|
467 |
-
'deactivate-plugin-title' => _fs_text( 'That\'s exhausting, please deactivate' ),
|
468 |
-
'deactivate-plugin-desc' => _fs_text( 'We feel your frustration and sincerely apologize for the inconvenience. Hope to see you again in the future.' ),
|
469 |
-
'fix-request-sent-message' => _fs_text( 'Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience.' ),
|
470 |
-
'server-blocking-access' => _fs_x( 'Your server is blocking the access to Freemius\' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s',
|
471 |
-
'%1$s - plugin title, %2$s - API domain' ),
|
472 |
-
'wrong-authentication-param-message' => _fs_text( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.' ),
|
473 |
-
#endregion Connectivity Issues
|
474 |
-
#region Change Owner
|
475 |
-
'change-owner-request-sent-x' => _fs_text( 'Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder.' ),
|
476 |
-
'change-owner-request_owner-confirmed' => _fs_text( 'Thanks for confirming the ownership change. An email was just sent to %s for final approval.' ),
|
477 |
-
'change-owner-request_candidate-confirmed' => _fs_text( '%s is the new owner of the account.' ),
|
478 |
-
#endregion Change Owner
|
479 |
-
'addon-x-cannot-run-without-y' => _fs_x( '%s cannot run without %s.',
|
480 |
-
'addonX cannot run without pluginY' ),
|
481 |
-
'addon-x-cannot-run-without-parent' => _fs_x( '%s cannot run without the plugin.', 'addonX cannot run...' ),
|
482 |
-
'plugin-x-activation-message' => _fs_x( '%s activation was successfully completed.',
|
483 |
-
'pluginX activation was successfully...' ),
|
484 |
-
'features-and-pricing' => _fs_x( 'Features & Pricing', 'Plugin installer section title' ),
|
485 |
-
'free-addon-not-deployed' => _fs_text( 'Add-on must be deployed to WordPress.org or Freemius.' ),
|
486 |
-
'paid-addon-not-deployed' => _fs_text( 'Paid add-on must be deployed to Freemius.' ),
|
487 |
-
#--------------------------------------------------------------------------------
|
488 |
-
#region Add-On Licensing
|
489 |
-
#--------------------------------------------------------------------------------
|
490 |
-
'addon-no-license-message' => _fs_text( '%s is a premium only add-on. You have to purchase a license first before activating the plugin.' ),
|
491 |
-
'addon-trial-cancelled-message' => _fs_text( '%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you\'ll have to purchase a license.' ),
|
492 |
-
#endregion
|
493 |
-
#--------------------------------------------------------------------------------
|
494 |
-
#region Billing Cycles
|
495 |
-
#--------------------------------------------------------------------------------
|
496 |
-
'monthly' => _fs_x( 'Monthly', 'as every month' ),
|
497 |
-
'mo' => _fs_x( 'mo', 'as monthly period' ),
|
498 |
-
'annual' => _fs_x( 'Annual', 'as once a year' ),
|
499 |
-
'annually' => _fs_x( 'Annually', 'as once a year' ),
|
500 |
-
'once' => _fs_x( 'Once', 'as once a year' ),
|
501 |
-
'year' => _fs_x( 'year', 'as annual period' ),
|
502 |
-
'lifetime' => _fs_text( 'Lifetime' ),
|
503 |
-
'best' => _fs_x( 'Best', 'e.g. the best product' ),
|
504 |
-
'billed-x' => _fs_x( 'Billed %s', 'e.g. billed monthly' ),
|
505 |
-
'save-x' => _fs_x( 'Save %s', 'as a discount of $5 or 10%' ),
|
506 |
-
#endregion Billing Cycles
|
507 |
-
'view-details' => _fs_text( 'View details' ),
|
508 |
-
#--------------------------------------------------------------------------------
|
509 |
-
#region Trial
|
510 |
-
#--------------------------------------------------------------------------------
|
511 |
-
'approve-start-trial' => _fs_x( 'Approve & Start Trial', 'button label' ),
|
512 |
-
/* translators: %1$s: Number of trial days; %2$s: Plan name; */
|
513 |
-
'start-trial-prompt-header' => _fs_text( 'You are 1-click away from starting your %1$s-day free trial of the %2$s plan.' ),
|
514 |
-
/* translators: %s: Link to freemius.com */
|
515 |
-
'start-trial-prompt-message' => _fs_text( 'For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial.' ),
|
516 |
-
|
517 |
-
#endregion
|
518 |
-
#--------------------------------------------------------------------------------
|
519 |
-
#region Billing Details
|
520 |
-
#--------------------------------------------------------------------------------
|
521 |
-
'business-name' => _fs_text( 'Business name' ),
|
522 |
-
'tax-vat-id' => _fs_text( 'Tax / VAT ID' ),
|
523 |
-
'address-line-n' => _fs_text( 'Address Line %d' ),
|
524 |
-
'country' => _fs_text( 'Country' ),
|
525 |
-
'select-country' => _fs_text( 'Select Country' ),
|
526 |
-
'city' => _fs_text( 'City' ),
|
527 |
-
'town' => _fs_text( 'Town' ),
|
528 |
-
'state' => _fs_text( 'State' ),
|
529 |
-
'province' => _fs_text( 'Province' ),
|
530 |
-
'zip-postal-code' => _fs_text( 'ZIP / Postal Code' ),
|
531 |
-
#endregion
|
532 |
-
#--------------------------------------------------------------------------------
|
533 |
-
#region Module Installation
|
534 |
-
#--------------------------------------------------------------------------------
|
535 |
-
'installing-plugin-x' => _fs_text( 'Installing plugin: %s' ),
|
536 |
-
'auto-installation' => _fs_text( 'Automatic Installation' ),
|
537 |
-
/* translators: %s: Number of seconds */
|
538 |
-
'x-sec' => _fs_text( '%s sec' ),
|
539 |
-
'installing-in-n' => _fs_text( 'An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now.' ),
|
540 |
-
'installing-module-x' => _fs_text( 'The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page.' ),
|
541 |
-
'cancel-installation' => _fs_text( 'Cancel Installation' ),
|
542 |
-
'module-package-rename-failure' => _fs_text( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.' ),
|
543 |
-
'auto-install-error-invalid-id' => _fs_text( 'Invalid module ID.' ),
|
544 |
-
'auto-install-error-not-opted-in' => _fs_text( 'Auto installation only works for opted-in users.' ),
|
545 |
-
'auto-install-error-premium-activated' => _fs_text( 'Premium version already active.' ),
|
546 |
-
'auto-install-error-premium-addon-activated' => _fs_text( 'Premium add-on version already installed.' ),
|
547 |
-
'auto-install-error-invalid-license' => _fs_text( 'You do not have a valid license to access the premium version.' ),
|
548 |
-
'auto-install-error-serviceware' => _fs_text( 'Plugin is a "Serviceware" which means it does not have a premium code version.' ),
|
549 |
-
#endregion
|
550 |
-
|
551 |
-
/* translators: %s: Page name */
|
552 |
-
'secure-x-page-header' => _fs_text( 'Secure HTTPS %s page, running from an external domain' ),
|
553 |
-
'pci-compliant' => _fs_text( 'PCI compliant' ),
|
554 |
-
'view-paid-features' => _fs_text( 'View paid features' ),
|
555 |
-
);
|
556 |
-
|
557 |
-
/**
|
558 |
-
* Localization of the strings in the plugin/theme info dialog box.
|
559 |
-
*
|
560 |
-
* $fs_module_info_text should ONLY include strings that are not located in $fs_text.
|
561 |
-
*
|
562 |
-
* @author Vova Feldman (@svovaf)
|
563 |
-
* @since 1.2.2
|
564 |
-
*/
|
565 |
-
global $fs_module_info_text;
|
566 |
-
|
567 |
-
$fs_module_info_text = array(
|
568 |
-
'description' => _fs_x( 'Description', 'Plugin installer section title' ),
|
569 |
-
'installation' => _fs_x( 'Installation', 'Plugin installer section title' ),
|
570 |
-
'faq' => _fs_x( 'FAQ', 'Plugin installer section title' ),
|
571 |
-
'changelog' => _fs_x( 'Changelog', 'Plugin installer section title' ),
|
572 |
-
'reviews' => _fs_x( 'Reviews', 'Plugin installer section title' ),
|
573 |
-
'other_notes' => _fs_x( 'Other Notes', 'Plugin installer section title' ),
|
574 |
-
/* translators: %s: 1 or One */
|
575 |
-
'x-star' => _fs_text( '%s star' ),
|
576 |
-
/* translators: %s: Number larger than 1 */
|
577 |
-
'x-stars' => _fs_text( '%s stars' ),
|
578 |
-
/* translators: %s: 1 or One */
|
579 |
-
'x-rating' => _fs_text( '%s rating' ),
|
580 |
-
/* translators: %s: Number larger than 1 */
|
581 |
-
'x-ratings' => _fs_text( '%s ratings' ),
|
582 |
-
/* translators: %s: 1 or One (Number of times downloaded) */
|
583 |
-
'x-time' => _fs_text( '%s time' ),
|
584 |
-
/* translators: %s: Number of times downloaded */
|
585 |
-
'x-times' => _fs_text( '%s times' ),
|
586 |
-
/* translators: %s: # of stars (e.g. 5 stars) */
|
587 |
-
'click-to-reviews' => _fs_text( 'Click to see reviews that provided a rating of %s' ),
|
588 |
-
'last-updated:' => _fs_text( 'Last Updated' ),
|
589 |
-
'requires-wordpress-version:' => _fs_text( 'Requires WordPress Version:' ),
|
590 |
-
'author:' => _fs_x( 'Author:', 'as the plugin author' ),
|
591 |
-
'compatible-up-to:' => _fs_text( 'Compatible up to:' ),
|
592 |
-
'downloaded:' => _fs_text( 'Downloaded:' ),
|
593 |
-
'wp-org-plugin-page' => _fs_text( 'WordPress.org Plugin Page' ),
|
594 |
-
'plugin-homepage' => _fs_text( 'Plugin Homepage' ),
|
595 |
-
'donate-to-plugin' => _fs_text( 'Donate to this plugin' ),
|
596 |
-
'average-rating' => _fs_text( 'Average Rating' ),
|
597 |
-
'based-on-x' => _fs_text( 'based on %s' ),
|
598 |
-
'warning:' => _fs_text( 'Warning:' ),
|
599 |
-
'contributors' => _fs_text( 'Contributors' ),
|
600 |
-
'plugin-install' => _fs_text( 'Plugin Install' ),
|
601 |
-
'not-tested-warning' => _fs_text( 'This plugin has not been tested with your current version of WordPress.' ),
|
602 |
-
'not-compatible-warning' => _fs_text( 'This plugin has not been marked as compatible with your version of WordPress.' ),
|
603 |
-
'newer-installed' => _fs_text( 'Newer Version (%s) Installed' ),
|
604 |
-
'latest-installed' => _fs_text( 'Latest Version Installed' ),
|
605 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wgact.php
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
* Developer URI: https://sweetcode.com
|
11 |
* Text Domain: woocommerce-google-adwords-conversion-tracking-tag
|
12 |
* Domain path: /languages
|
13 |
-
* * Version: 1.27.
|
14 |
*
|
15 |
* WC requires at least: 3.7
|
16 |
* WC tested up to: 7.1
|
@@ -19,7 +19,7 @@
|
|
19 |
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
*
|
21 |
**/
|
22 |
-
const WPM_CURRENT_VERSION = '1.27.
|
23 |
// TODO add option checkbox on uninstall and ask if user wants to delete options from db
|
24 |
|
25 |
if ( !defined( 'ABSPATH' ) ) {
|
10 |
* Developer URI: https://sweetcode.com
|
11 |
* Text Domain: woocommerce-google-adwords-conversion-tracking-tag
|
12 |
* Domain path: /languages
|
13 |
+
* * Version: 1.27.1
|
14 |
*
|
15 |
* WC requires at least: 3.7
|
16 |
* WC tested up to: 7.1
|
19 |
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
20 |
*
|
21 |
**/
|
22 |
+
const WPM_CURRENT_VERSION = '1.27.1' ;
|
23 |
// TODO add option checkbox on uninstall and ask if user wants to delete options from db
|
24 |
|
25 |
if ( !defined( 'ABSPATH' ) ) {
|