Version Description
23.11.2022
- Tweak: Prioritize order billing info over logged-in user billing info.
- Tweak: If available, also subtract order fees (such as PayPal or Stripe fees) from the subtotal.
- Tweak: Various UX improvements.
- Tweak: Updated documentation links.
Download this release
Release Info
Developer | alekv |
Plugin | Pixel Manager for WooCommerce – Track Google Analytics, Google Ads, Facebook and more |
Version | 1.27.5 |
Comparing to | |
See all releases |
Code changes from version 1.27.2 to 1.27.5
- classes/admin/class-admin.php +236 -116
- classes/admin/class-documentation.php +6 -0
- classes/admin/class-environment-check.php +0 -22
- classes/admin/class-validations.php +12 -0
- classes/class-options.php +1 -0
- classes/class-profit-margin.php +1 -52
- classes/class-shop.php +90 -1
- classes/pixels/class-pixel-manager.php +151 -86
- classes/pixels/google/class-google.php +18 -12
- css/admin.css +10 -2
- 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
- languages/woocommerce-google-adwords-conversion-tracking-tag.pot +207 -192
- readme.txt +21 -1
- wgact.php +25 -3
classes/admin/class-admin.php
CHANGED
@@ -762,7 +762,7 @@ class Admin
|
|
762 |
'wpm_plugin_options_page',
|
763 |
$section_ids['settings_name']
|
764 |
);
|
765 |
-
//
|
766 |
add_settings_field(
|
767 |
'pmw_setting_facebook_capi_test_event_code',
|
768 |
esc_html__( 'Meta (Facebook) CAPI: test event code', 'woocommerce-google-adwords-conversion-tracking-tag' ),
|
@@ -823,6 +823,14 @@ class Admin
|
|
823 |
'wpm_plugin_options_page',
|
824 |
$section_ids['settings_name']
|
825 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
826 |
// add field for the TikTok EAPI user transparency process anonymous hits
|
827 |
add_settings_field(
|
828 |
'pmw_setting_tiktok_eapi_user_transparency_process_anonymous_hits',
|
@@ -1611,7 +1619,8 @@ class Admin
|
|
1611 |
public function wpm_option_html_google_analytics_universal_property()
|
1612 |
{
|
1613 |
?>
|
1614 |
-
<input
|
|
|
1615 |
name='wgact_plugin_options[google][analytics][universal][property_id]'
|
1616 |
size='40'
|
1617 |
type='text'
|
@@ -1630,7 +1639,8 @@ class Admin
|
|
1630 |
public function wpm_option_html_google_analytics_4_id()
|
1631 |
{
|
1632 |
?>
|
1633 |
-
<input
|
|
|
1634 |
name='wgact_plugin_options[google][analytics][ga4][measurement_id]'
|
1635 |
size='40'
|
1636 |
type='text'
|
@@ -1649,7 +1659,8 @@ class Admin
|
|
1649 |
public function wpm_option_html_google_ads_conversion_id()
|
1650 |
{
|
1651 |
?>
|
1652 |
-
<input
|
|
|
1653 |
name='wgact_plugin_options[google][ads][conversion_id]'
|
1654 |
size='40'
|
1655 |
type='text'
|
@@ -1668,7 +1679,8 @@ class Admin
|
|
1668 |
public function wpm_option_html_google_ads_conversion_label()
|
1669 |
{
|
1670 |
?>
|
1671 |
-
<input
|
|
|
1672 |
name='wgact_plugin_options[google][ads][conversion_label]'
|
1673 |
size='40'
|
1674 |
type='text'
|
@@ -1694,7 +1706,8 @@ class Admin
|
|
1694 |
public function wpm_option_html_google_optimize_container_id()
|
1695 |
{
|
1696 |
?>
|
1697 |
-
<input
|
|
|
1698 |
name='wgact_plugin_options[google][optimize][container_id]'
|
1699 |
size='40'
|
1700 |
type='text'
|
@@ -1716,7 +1729,8 @@ class Admin
|
|
1716 |
public function wpm_option_html_facebook_pixel_id()
|
1717 |
{
|
1718 |
?>
|
1719 |
-
<input
|
|
|
1720 |
name='wgact_plugin_options[facebook][pixel_id]'
|
1721 |
size='40'
|
1722 |
type='text'
|
@@ -1735,7 +1749,8 @@ class Admin
|
|
1735 |
public function wpm_option_html_bing_uet_tag_id()
|
1736 |
{
|
1737 |
?>
|
1738 |
-
<input
|
|
|
1739 |
name='wgact_plugin_options[bing][uet_tag_id]'
|
1740 |
size='40'
|
1741 |
type='text'
|
@@ -1758,12 +1773,12 @@ class Admin
|
|
1758 |
public function wpm_option_html_twitter_pixel_id()
|
1759 |
{
|
1760 |
?>
|
1761 |
-
<input
|
1762 |
-
|
1763 |
-
|
1764 |
-
|
1765 |
-
|
1766 |
-
|
1767 |
esc_html_e( $this->options['twitter']['pixel_id'] );
|
1768 |
?>'
|
1769 |
<?php
|
@@ -1782,12 +1797,12 @@ class Admin
|
|
1782 |
public function wpm_option_html_pinterest_pixel_id()
|
1783 |
{
|
1784 |
?>
|
1785 |
-
<input
|
1786 |
-
|
1787 |
-
|
1788 |
-
|
1789 |
-
|
1790 |
-
|
1791 |
esc_html_e( $this->options['pinterest']['pixel_id'] );
|
1792 |
?>'
|
1793 |
<?php
|
@@ -1823,6 +1838,7 @@ class Admin
|
|
1823 |
</label>
|
1824 |
<?php
|
1825 |
$this->get_status_icon( $this->options['pinterest']['enhanced_match'] );
|
|
|
1826 |
$this->html_beta_e();
|
1827 |
?>
|
1828 |
<?php
|
@@ -1832,12 +1848,12 @@ class Admin
|
|
1832 |
public function wpm_option_html_snapchat_pixel_id()
|
1833 |
{
|
1834 |
?>
|
1835 |
-
<input
|
1836 |
-
|
1837 |
-
|
1838 |
-
|
1839 |
-
|
1840 |
-
|
1841 |
esc_html_e( $this->options['snapchat']['pixel_id'] );
|
1842 |
?>'
|
1843 |
<?php
|
@@ -1857,12 +1873,12 @@ class Admin
|
|
1857 |
public function wpm_option_html_tiktok_pixel_id()
|
1858 |
{
|
1859 |
?>
|
1860 |
-
<input
|
1861 |
-
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
|
1866 |
esc_html_e( $this->options['tiktok']['pixel_id'] );
|
1867 |
?>'
|
1868 |
<?php
|
@@ -1881,7 +1897,11 @@ class Admin
|
|
1881 |
public function wpm_option_html_hotjar_site_id()
|
1882 |
{
|
1883 |
?>
|
1884 |
-
<input
|
|
|
|
|
|
|
|
|
1885 |
value='<?php
|
1886 |
esc_html_e( $this->options['hotjar']['site_id'] );
|
1887 |
?>'/>
|
@@ -1903,7 +1923,7 @@ class Admin
|
|
1903 |
echo checked( 0, $this->options['shop']['order_total_logic'], false ) ;
|
1904 |
?> >
|
1905 |
<?php
|
1906 |
-
esc_html_e( 'Order Subtotal: Doesn\'t include tax and
|
1907 |
?>
|
1908 |
<?php
|
1909 |
$this->get_documentation_html_by_key( 'order_subtotal' );
|
@@ -2115,12 +2135,12 @@ class Admin
|
|
2115 |
public function wpm_setting_html_google_analytics_4_api_secret()
|
2116 |
{
|
2117 |
?>
|
2118 |
-
<input
|
2119 |
-
|
2120 |
-
|
2121 |
-
|
2122 |
-
|
2123 |
-
|
2124 |
esc_html_e( $this->options['google']['analytics']['ga4']['api_secret'] );
|
2125 |
?>'
|
2126 |
<?php
|
@@ -2145,12 +2165,12 @@ class Admin
|
|
2145 |
public function pmw_setting_html_ga4_property_id()
|
2146 |
{
|
2147 |
?>
|
2148 |
-
<input
|
2149 |
-
|
2150 |
-
|
2151 |
-
|
2152 |
-
|
2153 |
-
|
2154 |
esc_html_e( $this->options['google']['analytics']['ga4']['data_api']['property_id'] );
|
2155 |
?>'
|
2156 |
<?php
|
@@ -2173,22 +2193,24 @@ class Admin
|
|
2173 |
public function pmw_setting_html_g4_data_api_credentials()
|
2174 |
{
|
2175 |
$client_email = ( isset( $this->options['google']['analytics']['ga4']['data_api']['credentials']['client_email'] ) ? $this->options['google']['analytics']['ga4']['data_api']['credentials']['client_email'] : '' );
|
2176 |
-
$
|
2177 |
?>
|
2178 |
<div style="margin-top: 5px">
|
2179 |
|
2180 |
-
<input
|
2181 |
-
|
2182 |
-
|
2183 |
-
|
2184 |
-
esc_html_e( $
|
2185 |
?>'
|
2186 |
-
|
2187 |
-
|
|
|
|
|
|
|
2188 |
esc_html_e( $client_email );
|
2189 |
?>'
|
2190 |
-
|
2191 |
-
style="font-family: monospace; color:#505050"
|
2192 |
/>
|
2193 |
|
2194 |
<script>
|
@@ -2409,12 +2431,12 @@ class Admin
|
|
2409 |
public function wpm_setting_html_google_ads_phone_conversion_number()
|
2410 |
{
|
2411 |
?>
|
2412 |
-
<input
|
2413 |
-
|
2414 |
-
|
2415 |
-
|
2416 |
-
|
2417 |
-
|
2418 |
esc_html_e( $this->options['google']['ads']['phone_conversion_number'] );
|
2419 |
?>'
|
2420 |
<?php
|
@@ -2432,12 +2454,12 @@ class Admin
|
|
2432 |
public function wpm_setting_html_google_ads_phone_conversion_label()
|
2433 |
{
|
2434 |
?>
|
2435 |
-
<input
|
2436 |
-
|
2437 |
-
|
2438 |
-
|
2439 |
-
|
2440 |
-
|
2441 |
esc_html_e( $this->options['google']['ads']['phone_conversion_label'] );
|
2442 |
?>'
|
2443 |
<?php
|
@@ -2455,12 +2477,12 @@ class Admin
|
|
2455 |
public function pmw_setting_html_google_ads_conversion_adjustments_conversion_name()
|
2456 |
{
|
2457 |
?>
|
2458 |
-
<input
|
2459 |
-
|
2460 |
-
|
2461 |
-
|
2462 |
-
|
2463 |
-
|
2464 |
esc_html_e( $this->options['google']['ads']['conversion_adjustments']['conversion_name'] );
|
2465 |
?>'
|
2466 |
<?php
|
@@ -2497,22 +2519,24 @@ class Admin
|
|
2497 |
public function pmw_setting_html_google_ads_conversion_adjustments_feed()
|
2498 |
{
|
2499 |
$feed_url = get_site_url() . '/wp-json/pmw/v1/google-ads/conversion-adjustments.csv';
|
2500 |
-
$
|
2501 |
?>
|
2502 |
<div style="margin-top: 5px">
|
2503 |
|
2504 |
-
<input
|
2505 |
-
|
2506 |
-
|
2507 |
-
|
2508 |
-
esc_html_e( $
|
2509 |
?>'
|
2510 |
-
|
2511 |
-
|
|
|
|
|
|
|
2512 |
echo esc_url( get_site_url() . '/wp-json/pmw/v1/google-ads/conversion-adjustments.csv' ) ;
|
2513 |
?>'
|
2514 |
-
|
2515 |
-
style="font-family: monospace; color:#505050"
|
2516 |
/>
|
2517 |
<script>
|
2518 |
const pmwCopyToClipboardCA = () => {
|
@@ -2653,7 +2677,8 @@ class Admin
|
|
2653 |
public function wpm_setting_html_facebook_capi_token()
|
2654 |
{
|
2655 |
?>
|
2656 |
-
<textarea
|
|
|
2657 |
name='wgact_plugin_options[facebook][capi][token]'
|
2658 |
cols='60'
|
2659 |
rows='5'
|
@@ -2682,13 +2707,19 @@ class Admin
|
|
2682 |
|
2683 |
public function pmw_setting_html_facebook_capi_test_event_code()
|
2684 |
{
|
|
|
2685 |
?>
|
2686 |
-
<input
|
2687 |
-
|
2688 |
-
|
2689 |
-
|
2690 |
-
|
2691 |
-
|
|
|
|
|
|
|
|
|
|
|
2692 |
esc_html_e( $this->options['facebook']['capi']['test_event_code'] );
|
2693 |
?>'
|
2694 |
<?php
|
@@ -2822,17 +2853,26 @@ class Admin
|
|
2822 |
|
2823 |
public function pmw_setting_html_tiktok_eapi_token()
|
2824 |
{
|
|
|
2825 |
?>
|
2826 |
-
<
|
2827 |
-
|
2828 |
-
|
2829 |
-
|
2830 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2831 |
esc_html_e( $this->disable_if_demo() );
|
2832 |
?>
|
2833 |
-
|
2834 |
-
esc_html_e( $this->options['tiktok']['eapi']['token'] );
|
2835 |
-
?></textarea>
|
2836 |
<?php
|
2837 |
$this->get_status_icon( $this->options['tiktok']['eapi']['token'], $this->options['tiktok']['pixel_id'] );
|
2838 |
$this->get_documentation_html_by_key( 'tiktok_eapi_token' );
|
@@ -2852,6 +2892,45 @@ class Admin
|
|
2852 |
// echo ' <i>123456789</i>';
|
2853 |
}
|
2854 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2855 |
public function pmw_setting_tiktok_eapi_process_anonymous_hits()
|
2856 |
{
|
2857 |
// adding the hidden input is a hack to make WordPress save the option with the value zero,
|
@@ -2876,7 +2955,7 @@ class Admin
|
|
2876 |
?>
|
2877 |
</label>
|
2878 |
<?php
|
2879 |
-
$this->get_status_icon( $this->options['tiktok']['eapi']['process_anonymous_hits'], $this->options['tiktok']['pixel_id'], true );
|
2880 |
$this->get_documentation_html_by_key( 'tiktok_eapi_process_anonymous_hits' );
|
2881 |
$this->html_pro_feature();
|
2882 |
|
@@ -2912,7 +2991,7 @@ class Admin
|
|
2912 |
?>
|
2913 |
</label>
|
2914 |
<?php
|
2915 |
-
$this->get_status_icon( $this->options['tiktok']['advanced_matching'], $this->options['tiktok']['pixel_id'], true );
|
2916 |
$this->get_documentation_html_by_key( 'tiktok_advanced_matching' );
|
2917 |
$this->html_pro_feature();
|
2918 |
|
@@ -2945,11 +3024,21 @@ class Admin
|
|
2945 |
<?php
|
2946 |
$this->get_status_icon( $this->options['shop']['order_deduplication'] );
|
2947 |
?>
|
|
|
|
|
|
|
|
|
2948 |
<br>
|
2949 |
<p>
|
2950 |
<span class="dashicons dashicons-info"></span>
|
2951 |
<?php
|
2952 |
-
esc_html_e( 'Only disable order duplication prevention for testing.
|
|
|
|
|
|
|
|
|
|
|
|
|
2953 |
?>
|
2954 |
</p>
|
2955 |
<?php
|
@@ -3052,7 +3141,8 @@ class Admin
|
|
3052 |
public function pmw_info_html_scroll_tracker_thresholds()
|
3053 |
{
|
3054 |
?>
|
3055 |
-
<input
|
|
|
3056 |
name='wgact_plugin_options[general][scroll_tracker_thresholds]'
|
3057 |
size='40'
|
3058 |
type='text'
|
@@ -3112,23 +3202,12 @@ class Admin
|
|
3112 |
?>
|
3113 |
</label>
|
3114 |
<?php
|
3115 |
-
$this->get_status_icon( $this->options['google']['ads']['dynamic_remarketing']
|
3116 |
?>
|
3117 |
<?php
|
3118 |
$this->get_documentation_html_by_key( 'google_ads_dynamic_remarketing' );
|
3119 |
?>
|
3120 |
<p>
|
3121 |
-
<?php
|
3122 |
-
|
3123 |
-
if ( !$this->options['google']['ads']['conversion_id'] ) {
|
3124 |
-
?>
|
3125 |
-
<span class="dashicons dashicons-info"></span>
|
3126 |
-
<?php
|
3127 |
-
esc_html_e( 'Requires an active Google Ads Conversion ID', 'woocommerce-google-adwords-conversion-tracking-tag' );
|
3128 |
-
echo '<br>' ;
|
3129 |
-
}
|
3130 |
-
|
3131 |
-
?>
|
3132 |
<span class="dashicons dashicons-info"></span>
|
3133 |
<?php
|
3134 |
esc_html_e( 'You need to choose the correct product identifier setting in order to match the product identifiers in the product feeds.', 'woocommerce-google-adwords-conversion-tracking-tag' );
|
@@ -3290,7 +3369,8 @@ class Admin
|
|
3290 |
public function wpm_plugin_setting_aw_merchant_id()
|
3291 |
{
|
3292 |
?>
|
3293 |
-
<input
|
|
|
3294 |
id="wpm_plugin_aw_merchant_id"
|
3295 |
name="wgact_plugin_options[google][ads][aw_merchant_id]"
|
3296 |
size="40"
|
@@ -3644,6 +3724,15 @@ class Admin
|
|
3644 |
add_settings_error( 'wgact_plugin_options', 'invalid-tiktok-eapi-access-token', esc_html__( 'You have entered an invalid TikTok Events API access token.', 'woocommerce-google-adwords-conversion-tracking-tag' ) );
|
3645 |
}
|
3646 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3647 |
}
|
3648 |
// validate Hotjar site ID
|
3649 |
if ( isset( $input['hotjar']['site_id'] ) ) {
|
@@ -3694,6 +3783,7 @@ class Admin
|
|
3694 |
}
|
3695 |
|
3696 |
}
|
|
|
3697 |
/**
|
3698 |
* Merging with the existing options and overwriting old values
|
3699 |
* since disabling a checkbox doesn't send a value,
|
@@ -3702,6 +3792,36 @@ class Admin
|
|
3702 |
return array_replace_recursive( $this->non_form_keys( $input ), $input );
|
3703 |
}
|
3704 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3705 |
// Recursively go through the array and merge (overwrite old values with new ones
|
3706 |
// if a value is missing in the input array, set it to value zero in the options array
|
3707 |
// Omit key like 'db_version' since they would be overwritten with zero.
|
762 |
'wpm_plugin_options_page',
|
763 |
$section_ids['settings_name']
|
764 |
);
|
765 |
+
// Add field for the Facebook CAPI test event code
|
766 |
add_settings_field(
|
767 |
'pmw_setting_facebook_capi_test_event_code',
|
768 |
esc_html__( 'Meta (Facebook) CAPI: test event code', 'woocommerce-google-adwords-conversion-tracking-tag' ),
|
823 |
'wpm_plugin_options_page',
|
824 |
$section_ids['settings_name']
|
825 |
);
|
826 |
+
// Add field for the TikTok EAPI test event code
|
827 |
+
add_settings_field(
|
828 |
+
'pmw_setting_tiktok_eapi_test_event_code',
|
829 |
+
esc_html__( 'TikTok EAPI: test event code', 'woocommerce-google-adwords-conversion-tracking-tag' ),
|
830 |
+
[ $this, 'pmw_setting_html_tiktok_eapi_test_event_code' ],
|
831 |
+
'wpm_plugin_options_page',
|
832 |
+
$section_ids['settings_name']
|
833 |
+
);
|
834 |
// add field for the TikTok EAPI user transparency process anonymous hits
|
835 |
add_settings_field(
|
836 |
'pmw_setting_tiktok_eapi_user_transparency_process_anonymous_hits',
|
1619 |
public function wpm_option_html_google_analytics_universal_property()
|
1620 |
{
|
1621 |
?>
|
1622 |
+
<input class="pmw mono"
|
1623 |
+
id='wpm_plugin_analytics_ua_property_id'
|
1624 |
name='wgact_plugin_options[google][analytics][universal][property_id]'
|
1625 |
size='40'
|
1626 |
type='text'
|
1639 |
public function wpm_option_html_google_analytics_4_id()
|
1640 |
{
|
1641 |
?>
|
1642 |
+
<input class="pmw mono"
|
1643 |
+
id='wpm_plugin_analytics_4_measurement_id'
|
1644 |
name='wgact_plugin_options[google][analytics][ga4][measurement_id]'
|
1645 |
size='40'
|
1646 |
type='text'
|
1659 |
public function wpm_option_html_google_ads_conversion_id()
|
1660 |
{
|
1661 |
?>
|
1662 |
+
<input class="pmw mono"
|
1663 |
+
id='wpm_plugin_conversion_id'
|
1664 |
name='wgact_plugin_options[google][ads][conversion_id]'
|
1665 |
size='40'
|
1666 |
type='text'
|
1679 |
public function wpm_option_html_google_ads_conversion_label()
|
1680 |
{
|
1681 |
?>
|
1682 |
+
<input class="pmw mono"
|
1683 |
+
id='wpm_plugin_conversion_label'
|
1684 |
name='wgact_plugin_options[google][ads][conversion_label]'
|
1685 |
size='40'
|
1686 |
type='text'
|
1706 |
public function wpm_option_html_google_optimize_container_id()
|
1707 |
{
|
1708 |
?>
|
1709 |
+
<input class="pmw mono"
|
1710 |
+
id='wpm_plugin_google_optimize_container_id'
|
1711 |
name='wgact_plugin_options[google][optimize][container_id]'
|
1712 |
size='40'
|
1713 |
type='text'
|
1729 |
public function wpm_option_html_facebook_pixel_id()
|
1730 |
{
|
1731 |
?>
|
1732 |
+
<input class="pmw mono"
|
1733 |
+
id='wpm_plugin_facebook_pixel_id'
|
1734 |
name='wgact_plugin_options[facebook][pixel_id]'
|
1735 |
size='40'
|
1736 |
type='text'
|
1749 |
public function wpm_option_html_bing_uet_tag_id()
|
1750 |
{
|
1751 |
?>
|
1752 |
+
<input class="pmw mono"
|
1753 |
+
id='wpm_plugin_bing_uet_tag_id'
|
1754 |
name='wgact_plugin_options[bing][uet_tag_id]'
|
1755 |
size='40'
|
1756 |
type='text'
|
1773 |
public function wpm_option_html_twitter_pixel_id()
|
1774 |
{
|
1775 |
?>
|
1776 |
+
<input class="pmw mono"
|
1777 |
+
id='wpm_plugin_twitter_pixel_id'
|
1778 |
+
name='wgact_plugin_options[twitter][pixel_id]'
|
1779 |
+
size='40'
|
1780 |
+
type='text'
|
1781 |
+
value='<?php
|
1782 |
esc_html_e( $this->options['twitter']['pixel_id'] );
|
1783 |
?>'
|
1784 |
<?php
|
1797 |
public function wpm_option_html_pinterest_pixel_id()
|
1798 |
{
|
1799 |
?>
|
1800 |
+
<input class="pmw mono"
|
1801 |
+
id='wpm_plugin_pinterest_pixel_id'
|
1802 |
+
name='wgact_plugin_options[pinterest][pixel_id]'
|
1803 |
+
size='40'
|
1804 |
+
type='text'
|
1805 |
+
value='<?php
|
1806 |
esc_html_e( $this->options['pinterest']['pixel_id'] );
|
1807 |
?>'
|
1808 |
<?php
|
1838 |
</label>
|
1839 |
<?php
|
1840 |
$this->get_status_icon( $this->options['pinterest']['enhanced_match'] );
|
1841 |
+
$this->get_documentation_html_by_key( 'pinterest_enhanced_match' );
|
1842 |
$this->html_beta_e();
|
1843 |
?>
|
1844 |
<?php
|
1848 |
public function wpm_option_html_snapchat_pixel_id()
|
1849 |
{
|
1850 |
?>
|
1851 |
+
<input class="pmw mono"
|
1852 |
+
id='wpm_plugin_snapchat_pixel_id'
|
1853 |
+
name='wgact_plugin_options[snapchat][pixel_id]'
|
1854 |
+
size='40'
|
1855 |
+
type='text'
|
1856 |
+
value='<?php
|
1857 |
esc_html_e( $this->options['snapchat']['pixel_id'] );
|
1858 |
?>'
|
1859 |
<?php
|
1873 |
public function wpm_option_html_tiktok_pixel_id()
|
1874 |
{
|
1875 |
?>
|
1876 |
+
<input class="pmw mono"
|
1877 |
+
id='wpm_plugin_tiktok_pixel_id'
|
1878 |
+
name='wgact_plugin_options[tiktok][pixel_id]'
|
1879 |
+
size='40'
|
1880 |
+
type='text'
|
1881 |
+
value='<?php
|
1882 |
esc_html_e( $this->options['tiktok']['pixel_id'] );
|
1883 |
?>'
|
1884 |
<?php
|
1897 |
public function wpm_option_html_hotjar_site_id()
|
1898 |
{
|
1899 |
?>
|
1900 |
+
<input class="pmw mono"
|
1901 |
+
id='wpm_plugin_hotjar_site_id'
|
1902 |
+
name='wgact_plugin_options[hotjar][site_id]'
|
1903 |
+
size='40'
|
1904 |
+
type='text'
|
1905 |
value='<?php
|
1906 |
esc_html_e( $this->options['hotjar']['site_id'] );
|
1907 |
?>'/>
|
1923 |
echo checked( 0, $this->options['shop']['order_total_logic'], false ) ;
|
1924 |
?> >
|
1925 |
<?php
|
1926 |
+
esc_html_e( 'Order Subtotal: Doesn\'t include tax, shipping, and if available, fees like PayPal or Stripe fees (default)', 'woocommerce-google-adwords-conversion-tracking-tag' );
|
1927 |
?>
|
1928 |
<?php
|
1929 |
$this->get_documentation_html_by_key( 'order_subtotal' );
|
2135 |
public function wpm_setting_html_google_analytics_4_api_secret()
|
2136 |
{
|
2137 |
?>
|
2138 |
+
<input class="pmw mono"
|
2139 |
+
id='wpm_setting_google_analytics_4_api_secret'
|
2140 |
+
name='wgact_plugin_options[google][analytics][ga4][api_secret]'
|
2141 |
+
size='40'
|
2142 |
+
type='text'
|
2143 |
+
value='<?php
|
2144 |
esc_html_e( $this->options['google']['analytics']['ga4']['api_secret'] );
|
2145 |
?>'
|
2146 |
<?php
|
2165 |
public function pmw_setting_html_ga4_property_id()
|
2166 |
{
|
2167 |
?>
|
2168 |
+
<input class="pmw mono"
|
2169 |
+
id='pmw_setting_ga4_property_id'
|
2170 |
+
name='wgact_plugin_options[google][analytics][ga4][data_api][property_id]'
|
2171 |
+
size='40'
|
2172 |
+
type='text'
|
2173 |
+
value='<?php
|
2174 |
esc_html_e( $this->options['google']['analytics']['ga4']['data_api']['property_id'] );
|
2175 |
?>'
|
2176 |
<?php
|
2193 |
public function pmw_setting_html_g4_data_api_credentials()
|
2194 |
{
|
2195 |
$client_email = ( isset( $this->options['google']['analytics']['ga4']['data_api']['credentials']['client_email'] ) ? $this->options['google']['analytics']['ga4']['data_api']['credentials']['client_email'] : '' );
|
2196 |
+
$text_length = max( strlen( $client_email ), 80 );
|
2197 |
?>
|
2198 |
<div style="margin-top: 5px">
|
2199 |
|
2200 |
+
<input class="pmw mono"
|
2201 |
+
id='pmw_setting_ga4_data_api_client_email'
|
2202 |
+
name='pmw_setting_ga4_data_api_client_email'
|
2203 |
+
size='<?php
|
2204 |
+
esc_html_e( $text_length );
|
2205 |
?>'
|
2206 |
+
type='text'
|
2207 |
+
style="width:<?php
|
2208 |
+
esc_html_e( $text_length );
|
2209 |
+
?>ch"
|
2210 |
+
value='<?php
|
2211 |
esc_html_e( $client_email );
|
2212 |
?>'
|
2213 |
+
disabled
|
|
|
2214 |
/>
|
2215 |
|
2216 |
<script>
|
2431 |
public function wpm_setting_html_google_ads_phone_conversion_number()
|
2432 |
{
|
2433 |
?>
|
2434 |
+
<input class="pmw mono"
|
2435 |
+
id='wpm_plugin_google_ads_phone_conversion_number'
|
2436 |
+
name='wgact_plugin_options[google][ads][phone_conversion_number]'
|
2437 |
+
size='40'
|
2438 |
+
type='text'
|
2439 |
+
value='<?php
|
2440 |
esc_html_e( $this->options['google']['ads']['phone_conversion_number'] );
|
2441 |
?>'
|
2442 |
<?php
|
2454 |
public function wpm_setting_html_google_ads_phone_conversion_label()
|
2455 |
{
|
2456 |
?>
|
2457 |
+
<input class="pmw mono"
|
2458 |
+
id='wpm_plugin_google_ads_phone_conversion_label'
|
2459 |
+
name='wgact_plugin_options[google][ads][phone_conversion_label]'
|
2460 |
+
size='40'
|
2461 |
+
type='text'
|
2462 |
+
value='<?php
|
2463 |
esc_html_e( $this->options['google']['ads']['phone_conversion_label'] );
|
2464 |
?>'
|
2465 |
<?php
|
2477 |
public function pmw_setting_html_google_ads_conversion_adjustments_conversion_name()
|
2478 |
{
|
2479 |
?>
|
2480 |
+
<input class="pmw mono"
|
2481 |
+
id='pmw_plugin_google_ads_conversion_adjustments_conversion_name'
|
2482 |
+
name='wgact_plugin_options[google][ads][conversion_adjustments][conversion_name]'
|
2483 |
+
size='40'
|
2484 |
+
type='text'
|
2485 |
+
value='<?php
|
2486 |
esc_html_e( $this->options['google']['ads']['conversion_adjustments']['conversion_name'] );
|
2487 |
?>'
|
2488 |
<?php
|
2519 |
public function pmw_setting_html_google_ads_conversion_adjustments_feed()
|
2520 |
{
|
2521 |
$feed_url = get_site_url() . '/wp-json/pmw/v1/google-ads/conversion-adjustments.csv';
|
2522 |
+
$text_length = strlen( $feed_url );
|
2523 |
?>
|
2524 |
<div style="margin-top: 5px">
|
2525 |
|
2526 |
+
<input class="pmw mono"
|
2527 |
+
id='pmw_plugin_google_ads_conversion_adjustments_feed'
|
2528 |
+
name='pmw_plugin_google_ads_conversion_adjustments_feed'
|
2529 |
+
size='<?php
|
2530 |
+
esc_html_e( $text_length );
|
2531 |
?>'
|
2532 |
+
type='text'
|
2533 |
+
style="width:<?php
|
2534 |
+
esc_html_e( $text_length );
|
2535 |
+
?>ch"
|
2536 |
+
value='<?php
|
2537 |
echo esc_url( get_site_url() . '/wp-json/pmw/v1/google-ads/conversion-adjustments.csv' ) ;
|
2538 |
?>'
|
2539 |
+
disabled
|
|
|
2540 |
/>
|
2541 |
<script>
|
2542 |
const pmwCopyToClipboardCA = () => {
|
2677 |
public function wpm_setting_html_facebook_capi_token()
|
2678 |
{
|
2679 |
?>
|
2680 |
+
<textarea class="pmw mono"
|
2681 |
+
id='wpm_setting_facebook_capi_token'
|
2682 |
name='wgact_plugin_options[facebook][capi][token]'
|
2683 |
cols='60'
|
2684 |
rows='5'
|
2707 |
|
2708 |
public function pmw_setting_html_facebook_capi_test_event_code()
|
2709 |
{
|
2710 |
+
$text_length = max( strlen( $this->options['facebook']['capi']['test_event_code'] ), 9 );
|
2711 |
?>
|
2712 |
+
<input class="pmw mono"
|
2713 |
+
id='pmw_setting_facebook_capi_test_event_code'
|
2714 |
+
name='wgact_plugin_options[facebook][capi][test_event_code]'
|
2715 |
+
size='<?php
|
2716 |
+
esc_html_e( $text_length );
|
2717 |
+
?>'
|
2718 |
+
type='text'
|
2719 |
+
style="width:<?php
|
2720 |
+
esc_html_e( $text_length );
|
2721 |
+
?>ch"
|
2722 |
+
value='<?php
|
2723 |
esc_html_e( $this->options['facebook']['capi']['test_event_code'] );
|
2724 |
?>'
|
2725 |
<?php
|
2853 |
|
2854 |
public function pmw_setting_html_tiktok_eapi_token()
|
2855 |
{
|
2856 |
+
$text_length = max( strlen( $this->options['tiktok']['eapi']['token'] ), 40 );
|
2857 |
?>
|
2858 |
+
<input
|
2859 |
+
class="pmw mono"
|
2860 |
+
id='pmw_setting_tiktok_eapi_token'
|
2861 |
+
name='wgact_plugin_options[tiktok][eapi][token]'
|
2862 |
+
size='<?php
|
2863 |
+
esc_html_e( $text_length );
|
2864 |
+
?>'
|
2865 |
+
type='text'
|
2866 |
+
value='<?php
|
2867 |
+
esc_html_e( $this->options['tiktok']['eapi']['token'] );
|
2868 |
+
?>'
|
2869 |
+
style="width:<?php
|
2870 |
+
esc_html_e( $text_length );
|
2871 |
+
?>ch"
|
2872 |
+
<?php
|
2873 |
esc_html_e( $this->disable_if_demo() );
|
2874 |
?>
|
2875 |
+
/>
|
|
|
|
|
2876 |
<?php
|
2877 |
$this->get_status_icon( $this->options['tiktok']['eapi']['token'], $this->options['tiktok']['pixel_id'] );
|
2878 |
$this->get_documentation_html_by_key( 'tiktok_eapi_token' );
|
2892 |
// echo ' <i>123456789</i>';
|
2893 |
}
|
2894 |
|
2895 |
+
public function pmw_setting_html_tiktok_eapi_test_event_code()
|
2896 |
+
{
|
2897 |
+
$text_length = max( strlen( $this->options['tiktok']['eapi']['test_event_code'] ), 9 );
|
2898 |
+
?>
|
2899 |
+
<input class="pmw mono"
|
2900 |
+
id='pmw_setting_tiktok_eapi_test_event_code'
|
2901 |
+
name='wgact_plugin_options[tiktok][eapi][test_event_code]'
|
2902 |
+
size='<?php
|
2903 |
+
esc_html_e( $text_length );
|
2904 |
+
?>'
|
2905 |
+
type='text'
|
2906 |
+
style="width:<?php
|
2907 |
+
esc_html_e( $text_length );
|
2908 |
+
?>ch"
|
2909 |
+
value='<?php
|
2910 |
+
esc_html_e( $this->options['tiktok']['eapi']['test_event_code'] );
|
2911 |
+
?>'
|
2912 |
+
<?php
|
2913 |
+
esc_html_e( $this->disable_if_demo() );
|
2914 |
+
?>
|
2915 |
+
/>
|
2916 |
+
<?php
|
2917 |
+
$this->get_status_icon( $this->options['tiktok']['eapi']['test_event_code'], $this->options['tiktok']['eapi']['token'] && $this->options['tiktok']['eapi']['test_event_code'], true );
|
2918 |
+
?>
|
2919 |
+
<?php
|
2920 |
+
// $this->get_documentation_html_by_key('facebook_capi_test_event_code');
|
2921 |
+
?>
|
2922 |
+
<?php
|
2923 |
+
$this->html_pro_feature();
|
2924 |
+
?>
|
2925 |
+
<div style="margin-top: 20px">
|
2926 |
+
<span class="dashicons dashicons-info" style="margin-right: 10px"></span>
|
2927 |
+
<?php
|
2928 |
+
esc_html_e( "The test event code automatically rotates frequently within TikTok. If you don't see the server events flowing in, first make sure that you've set the latest test event code.", 'woocommerce-google-adwords-conversion-tracking-tag' );
|
2929 |
+
?>
|
2930 |
+
</div>
|
2931 |
+
<?php
|
2932 |
+
}
|
2933 |
+
|
2934 |
public function pmw_setting_tiktok_eapi_process_anonymous_hits()
|
2935 |
{
|
2936 |
// adding the hidden input is a hack to make WordPress save the option with the value zero,
|
2955 |
?>
|
2956 |
</label>
|
2957 |
<?php
|
2958 |
+
$this->get_status_icon( $this->options['tiktok']['eapi']['process_anonymous_hits'], $this->options['tiktok']['pixel_id'] && $this->options['tiktok']['eapi']['token'], true );
|
2959 |
$this->get_documentation_html_by_key( 'tiktok_eapi_process_anonymous_hits' );
|
2960 |
$this->html_pro_feature();
|
2961 |
|
2991 |
?>
|
2992 |
</label>
|
2993 |
<?php
|
2994 |
+
$this->get_status_icon( $this->options['tiktok']['advanced_matching'], $this->options['tiktok']['pixel_id'] && $this->options['tiktok']['eapi']['token'], true );
|
2995 |
$this->get_documentation_html_by_key( 'tiktok_advanced_matching' );
|
2996 |
$this->html_pro_feature();
|
2997 |
|
3024 |
<?php
|
3025 |
$this->get_status_icon( $this->options['shop']['order_deduplication'] );
|
3026 |
?>
|
3027 |
+
<?php
|
3028 |
+
$this->get_documentation_html_by_key( 'duplication_prevention' );
|
3029 |
+
?>
|
3030 |
+
|
3031 |
<br>
|
3032 |
<p>
|
3033 |
<span class="dashicons dashicons-info"></span>
|
3034 |
<?php
|
3035 |
+
esc_html_e( 'Only disable order duplication prevention for testing.', 'woocommerce-google-adwords-conversion-tracking-tag' );
|
3036 |
+
?>
|
3037 |
+
</p>
|
3038 |
+
<p>
|
3039 |
+
<span class="dashicons dashicons-info"></span>
|
3040 |
+
<?php
|
3041 |
+
esc_html_e( 'Automatically reactivates 6 hours after disabling duplication prevention.', 'woocommerce-google-adwords-conversion-tracking-tag' );
|
3042 |
?>
|
3043 |
</p>
|
3044 |
<?php
|
3141 |
public function pmw_info_html_scroll_tracker_thresholds()
|
3142 |
{
|
3143 |
?>
|
3144 |
+
<input class="pmw mono"
|
3145 |
+
id='pmw_setting_scroll_tracker_thresholds'
|
3146 |
name='wgact_plugin_options[general][scroll_tracker_thresholds]'
|
3147 |
size='40'
|
3148 |
type='text'
|
3202 |
?>
|
3203 |
</label>
|
3204 |
<?php
|
3205 |
+
$this->get_status_icon( $this->options['google']['ads']['dynamic_remarketing'] );
|
3206 |
?>
|
3207 |
<?php
|
3208 |
$this->get_documentation_html_by_key( 'google_ads_dynamic_remarketing' );
|
3209 |
?>
|
3210 |
<p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3211 |
<span class="dashicons dashicons-info"></span>
|
3212 |
<?php
|
3213 |
esc_html_e( 'You need to choose the correct product identifier setting in order to match the product identifiers in the product feeds.', 'woocommerce-google-adwords-conversion-tracking-tag' );
|
3369 |
public function wpm_plugin_setting_aw_merchant_id()
|
3370 |
{
|
3371 |
?>
|
3372 |
+
<input class="pmw mono"
|
3373 |
+
type="text"
|
3374 |
id="wpm_plugin_aw_merchant_id"
|
3375 |
name="wgact_plugin_options[google][ads][aw_merchant_id]"
|
3376 |
size="40"
|
3724 |
add_settings_error( 'wgact_plugin_options', 'invalid-tiktok-eapi-access-token', esc_html__( 'You have entered an invalid TikTok Events API access token.', 'woocommerce-google-adwords-conversion-tracking-tag' ) );
|
3725 |
}
|
3726 |
|
3727 |
+
}
|
3728 |
+
// Validate ['tiktok']['eapi']['test_event_code']
|
3729 |
+
if ( isset( $input['tiktok']['eapi']['test_event_code'] ) ) {
|
3730 |
+
|
3731 |
+
if ( !Validations::is_tiktok_eapi_test_event_code( $input['tiktok']['eapi']['test_event_code'] ) ) {
|
3732 |
+
$input['tiktok']['eapi']['test_event_code'] = ( isset( $this->options['tiktok']['eapi']['test_event_code'] ) ? $this->options['tiktok']['eapi']['test_event_code'] : '' );
|
3733 |
+
add_settings_error( 'wgact_plugin_options', 'invalid-tiktok-eapi-test-event-code', esc_html__( 'You have entered an invalid TikTok EAPI test_event_code.', 'woocommerce-google-adwords-conversion-tracking-tag' ) );
|
3734 |
+
}
|
3735 |
+
|
3736 |
}
|
3737 |
// validate Hotjar site ID
|
3738 |
if ( isset( $input['hotjar']['site_id'] ) ) {
|
3783 |
}
|
3784 |
|
3785 |
}
|
3786 |
+
self::deduplication_check( $input );
|
3787 |
/**
|
3788 |
* Merging with the existing options and overwriting old values
|
3789 |
* since disabling a checkbox doesn't send a value,
|
3792 |
return array_replace_recursive( $this->non_form_keys( $input ), $input );
|
3793 |
}
|
3794 |
|
3795 |
+
private static function deduplication_check( $input )
|
3796 |
+
{
|
3797 |
+
// Check if deduplication has been turned off.
|
3798 |
+
// If so, set an action with the action scheduler to automatically reactivate deduplication in 6 hours from now.
|
3799 |
+
|
3800 |
+
if ( !$input['shop']['order_deduplication'] ) {
|
3801 |
+
|
3802 |
+
if ( !as_next_scheduled_action( 'pmw_reactivate_duplication_prevention' ) ) {
|
3803 |
+
as_schedule_single_action( time() + 6 * HOUR_IN_SECONDS, 'pmw_reactivate_duplication_prevention' );
|
3804 |
+
} else {
|
3805 |
+
// If the action is already scheduled, update the timestamp to 6 hours from now.
|
3806 |
+
as_unschedule_all_actions( 'pmw_reactivate_duplication_prevention' );
|
3807 |
+
as_schedule_single_action( time() + 6 * HOUR_IN_SECONDS, 'pmw_reactivate_duplication_prevention' );
|
3808 |
+
}
|
3809 |
+
|
3810 |
+
} else {
|
3811 |
+
// If set, remove the scheduled action for reactivating deduplication
|
3812 |
+
if ( as_next_scheduled_action( 'pmw_reactivate_duplication_prevention' ) ) {
|
3813 |
+
as_unschedule_action( 'pmw_reactivate_duplication_prevention' );
|
3814 |
+
}
|
3815 |
+
}
|
3816 |
+
|
3817 |
+
}
|
3818 |
+
|
3819 |
+
public function deduper_enable()
|
3820 |
+
{
|
3821 |
+
$this->options['shop']['order_deduplication'] = true;
|
3822 |
+
update_option( 'wgact_plugin_options', $this->options );
|
3823 |
+
}
|
3824 |
+
|
3825 |
// Recursively go through the array and merge (overwrite old values with new ones
|
3826 |
// if a value is missing in the input array, set it to value zero in the options array
|
3827 |
// Omit key like 'db_version' since they would be overwritten with zero.
|
classes/admin/class-documentation.php
CHANGED
@@ -71,6 +71,9 @@ class Documentation {
|
|
71 |
'pinterest_pixel_id' => [
|
72 |
'default' => '/docs/wpm/plugin-configuration/pinterest',
|
73 |
'wcm' => '/document/pixel-manager-pro-for-woocommerce/pmw-plugin-configuration/pinterest/'],
|
|
|
|
|
|
|
74 |
'snapchat_pixel_id' => [
|
75 |
'default' => '/docs/wpm/plugin-configuration/snapchat',
|
76 |
'wcm' => '/document/pixel-manager-pro-for-woocommerce/'],
|
@@ -191,6 +194,9 @@ class Documentation {
|
|
191 |
'ga4_data_api_credentials' => [
|
192 |
'default' => '/docs/wpm/plugin-configuration/google-analytics#ga4-data-api-credentials',
|
193 |
'wcm' => '/document/pixel-manager-pro-for-woocommerce/pmw-plugin-configuration/google-analytics/#ga4-data-api-credentials'],
|
|
|
|
|
|
|
194 |
];
|
195 |
|
196 |
if (array_key_exists($key, $documentation_links)) {
|
71 |
'pinterest_pixel_id' => [
|
72 |
'default' => '/docs/wpm/plugin-configuration/pinterest',
|
73 |
'wcm' => '/document/pixel-manager-pro-for-woocommerce/pmw-plugin-configuration/pinterest/'],
|
74 |
+
'pinterest_enhanced_match' => [
|
75 |
+
'default' => '/docs/wpm/plugin-configuration/pinterest#pinterest-enhanced-match',
|
76 |
+
'wcm' => '/document/pixel-manager-pro-for-woocommerce/pmw-plugin-configuration/pinterest/#pinterest-enhanced-match'],
|
77 |
'snapchat_pixel_id' => [
|
78 |
'default' => '/docs/wpm/plugin-configuration/snapchat',
|
79 |
'wcm' => '/document/pixel-manager-pro-for-woocommerce/'],
|
194 |
'ga4_data_api_credentials' => [
|
195 |
'default' => '/docs/wpm/plugin-configuration/google-analytics#ga4-data-api-credentials',
|
196 |
'wcm' => '/document/pixel-manager-pro-for-woocommerce/pmw-plugin-configuration/google-analytics/#ga4-data-api-credentials'],
|
197 |
+
'duplication_prevention' => [
|
198 |
+
'default' => '/docs/wpm/shop#order-duplication-prevention',
|
199 |
+
'wcm' => '/document/pixel-manager-pro-for-woocommerce/shop/#order-duplication-prevention'],
|
200 |
];
|
201 |
|
202 |
if (array_key_exists($key, $documentation_links)) {
|
classes/admin/class-environment-check.php
CHANGED
@@ -1536,26 +1536,4 @@ class Environment_Check {
|
|
1536 |
return false;
|
1537 |
}
|
1538 |
}
|
1539 |
-
|
1540 |
-
public function wpm_is_order_received_page() {
|
1541 |
-
|
1542 |
-
// Get cached value
|
1543 |
-
if (is_bool($this->wpm_ist_order_received_page)) {
|
1544 |
-
return $this->wpm_ist_order_received_page;
|
1545 |
-
}
|
1546 |
-
|
1547 |
-
/**
|
1548 |
-
* If a purchase order was created by a shop manager
|
1549 |
-
* and the customer is viewing the PO page
|
1550 |
-
* don't fire the conversion pixels
|
1551 |
-
**/
|
1552 |
-
if (is_checkout_pay_page()) {
|
1553 |
-
$this->wpm_ist_order_received_page = false;
|
1554 |
-
return false;
|
1555 |
-
}
|
1556 |
-
|
1557 |
-
// Get value from WC or db
|
1558 |
-
$this->wpm_ist_order_received_page = is_order_received_page() || Shop::is_valid_order_key_in_url();
|
1559 |
-
return $this->wpm_ist_order_received_page;
|
1560 |
-
}
|
1561 |
}
|
1536 |
return false;
|
1537 |
}
|
1538 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1539 |
}
|
classes/admin/class-validations.php
CHANGED
@@ -317,6 +317,18 @@ class Validations {
|
|
317 |
return self::validate_with_regex($re, $string);
|
318 |
}
|
319 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
public static function validate_with_regex( $re, $string ) {
|
321 |
|
322 |
// Validate if string matches the regex $re
|
317 |
return self::validate_with_regex($re, $string);
|
318 |
}
|
319 |
|
320 |
+
|
321 |
+
|
322 |
+
public static function is_tiktok_eapi_test_event_code( $string ) {
|
323 |
+
if (empty($string)) {
|
324 |
+
return true;
|
325 |
+
}
|
326 |
+
|
327 |
+
$re = '/^TEST\d{3,7}$/m';
|
328 |
+
|
329 |
+
return self::validate_with_regex($re, $string);
|
330 |
+
}
|
331 |
+
|
332 |
public static function validate_with_regex( $re, $string ) {
|
333 |
|
334 |
// Validate if string matches the regex $re
|
classes/class-options.php
CHANGED
@@ -121,6 +121,7 @@ class Options {
|
|
121 |
'advanced_matching' => false,
|
122 |
'eapi' => [
|
123 |
'token' => '',
|
|
|
124 |
'process_anonymous_hits' => false,
|
125 |
],
|
126 |
],
|
121 |
'advanced_matching' => false,
|
122 |
'eapi' => [
|
123 |
'token' => '',
|
124 |
+
'test_event_code' => '',
|
125 |
'process_anonymous_hits' => false,
|
126 |
],
|
127 |
],
|
classes/class-profit-margin.php
CHANGED
@@ -17,7 +17,7 @@ class Profit_Margin {
|
|
17 |
$cogs_margin = self::get_order_item_profit_margin($order);
|
18 |
|
19 |
$cogs_margin -= $order->get_total_discount();
|
20 |
-
$cogs_margin -=
|
21 |
|
22 |
return wc_format_decimal($cogs_margin);
|
23 |
}
|
@@ -99,56 +99,5 @@ class Profit_Margin {
|
|
99 |
|
100 |
return $cog;
|
101 |
}
|
102 |
-
|
103 |
-
|
104 |
-
private static function get_order_fees( $order ) {
|
105 |
-
|
106 |
-
$order_fees = 0;
|
107 |
-
|
108 |
-
// Add fees that have been saved to the order
|
109 |
-
if ($order->get_total_fees()) {
|
110 |
-
$order_fees = $order->get_total_fees();
|
111 |
-
}
|
112 |
-
|
113 |
-
// Add Stripe fees
|
114 |
-
// because Stripe doesn't save the fee on the order fees
|
115 |
-
$order_fees += self::get_fee_by_postmeta_key($order, '_stripe_fee');
|
116 |
-
|
117 |
-
// Add _paypal_transaction_fee
|
118 |
-
// because PayPal doesn't save the fee on the order fees
|
119 |
-
// https://stackoverflow.com/a/56129332/4688612
|
120 |
-
$order_fees += self::get_fee_by_postmeta_key($order, '_paypal_transaction_fee');
|
121 |
-
|
122 |
-
// Add ppcp_paypal_fees
|
123 |
-
// because PayPal doesn't save the fee on the order fees
|
124 |
-
// if (get_post_meta($order->get_id(), '_ppcp_paypal_fees', true)) {
|
125 |
-
// $ppcp_paypal_fees = get_post_meta($order->get_id(), '_ppcp_paypal_fees', true);
|
126 |
-
//
|
127 |
-
// if (!empty($ppcp_paypal_fees['paypal_fee']['value'])) {
|
128 |
-
// $order_fees += $ppcp_paypal_fees['paypal_fee']['value'];
|
129 |
-
// }
|
130 |
-
// }
|
131 |
-
|
132 |
-
if ($order->meta_exists('_ppcp_paypal_fees')) {
|
133 |
-
$ppcp_paypal_fees = $order->get_meta('_ppcp_paypal_fees', true);
|
134 |
-
|
135 |
-
if (!empty($ppcp_paypal_fees['paypal_fee']['value'])) {
|
136 |
-
$order_fees += $ppcp_paypal_fees['paypal_fee']['value'];
|
137 |
-
}
|
138 |
-
}
|
139 |
-
|
140 |
-
return $order_fees;
|
141 |
-
}
|
142 |
-
|
143 |
-
private static function get_fee_by_postmeta_key( $order, $postmeta_key ) {
|
144 |
-
|
145 |
-
$fee = $order->get_meta( $postmeta_key, true);
|
146 |
-
|
147 |
-
if (empty($fee)) {
|
148 |
-
return 0;
|
149 |
-
}
|
150 |
-
|
151 |
-
return $fee;
|
152 |
-
}
|
153 |
}
|
154 |
|
17 |
$cogs_margin = self::get_order_item_profit_margin($order);
|
18 |
|
19 |
$cogs_margin -= $order->get_total_discount();
|
20 |
+
$cogs_margin -= Shop::get_order_fees($order);
|
21 |
|
22 |
return wc_format_decimal($cogs_margin);
|
23 |
}
|
99 |
|
100 |
return $cog;
|
101 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
}
|
103 |
|
classes/class-shop.php
CHANGED
@@ -13,6 +13,8 @@ if ( !defined( 'ABSPATH' ) ) {
|
|
13 |
class Shop
|
14 |
{
|
15 |
private static $clv_orders_by_billing_email ;
|
|
|
|
|
16 |
public static function track_user( $user_id = null )
|
17 |
{
|
18 |
$user = null;
|
@@ -60,10 +62,13 @@ class Shop
|
|
60 |
$order_total = $order->get_total();
|
61 |
|
62 |
if ( in_array( Options::get_options_obj()->shop->order_total_logic, [ '0', 'order_subtotal' ], true ) ) {
|
63 |
-
|
|
|
64 |
} elseif ( in_array( Options::get_options_obj()->shop->order_total_logic, [ '1', 'order_total' ], true ) ) {
|
|
|
65 |
$order_total = $order->get_total();
|
66 |
} elseif ( in_array( Options::get_options_obj()->shop->order_total_logic, [ '2', 'order_profit_margin' ], true ) ) {
|
|
|
67 |
$order_total = Profit_Margin::get_order_profit_margin( $order );
|
68 |
}
|
69 |
|
@@ -549,5 +554,89 @@ class Shop
|
|
549 |
|
550 |
return $list_suffix;
|
551 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
552 |
|
553 |
}
|
13 |
class Shop
|
14 |
{
|
15 |
private static $clv_orders_by_billing_email ;
|
16 |
+
private static $pmw_ist_order_received_page ;
|
17 |
+
private static $order ;
|
18 |
public static function track_user( $user_id = null )
|
19 |
{
|
20 |
$user = null;
|
62 |
$order_total = $order->get_total();
|
63 |
|
64 |
if ( in_array( Options::get_options_obj()->shop->order_total_logic, [ '0', 'order_subtotal' ], true ) ) {
|
65 |
+
// Order subtotal
|
66 |
+
$order_total = $order->get_subtotal() - $order->get_total_discount() - self::get_order_fees( $order );
|
67 |
} elseif ( in_array( Options::get_options_obj()->shop->order_total_logic, [ '1', 'order_total' ], true ) ) {
|
68 |
+
// Order total
|
69 |
$order_total = $order->get_total();
|
70 |
} elseif ( in_array( Options::get_options_obj()->shop->order_total_logic, [ '2', 'order_profit_margin' ], true ) ) {
|
71 |
+
// Order profit margin
|
72 |
$order_total = Profit_Margin::get_order_profit_margin( $order );
|
73 |
}
|
74 |
|
554 |
|
555 |
return $list_suffix;
|
556 |
}
|
557 |
+
|
558 |
+
public static function get_order_fees( $order )
|
559 |
+
{
|
560 |
+
$order_fees = 0;
|
561 |
+
// Add fees that have been saved to the order
|
562 |
+
if ( $order->get_total_fees() ) {
|
563 |
+
$order_fees = $order->get_total_fees();
|
564 |
+
}
|
565 |
+
// Add Stripe fees
|
566 |
+
// because Stripe doesn't save the fee on the order fees
|
567 |
+
$order_fees += self::get_fee_by_postmeta_key( $order, '_stripe_fee' );
|
568 |
+
// Add _paypal_transaction_fee
|
569 |
+
// because PayPal doesn't save the fee on the order fees
|
570 |
+
// https://stackoverflow.com/a/56129332/4688612
|
571 |
+
$order_fees += self::get_fee_by_postmeta_key( $order, '_paypal_transaction_fee' );
|
572 |
+
// Add ppcp_paypal_fees
|
573 |
+
// because PayPal doesn't save the fee on the order fees
|
574 |
+
// if (get_post_meta($order->get_id(), '_ppcp_paypal_fees', true)) {
|
575 |
+
// $ppcp_paypal_fees = get_post_meta($order->get_id(), '_ppcp_paypal_fees', true);
|
576 |
+
//
|
577 |
+
// if (!empty($ppcp_paypal_fees['paypal_fee']['value'])) {
|
578 |
+
// $order_fees += $ppcp_paypal_fees['paypal_fee']['value'];
|
579 |
+
// }
|
580 |
+
// }
|
581 |
+
|
582 |
+
if ( $order->meta_exists( '_ppcp_paypal_fees' ) ) {
|
583 |
+
$ppcp_paypal_fees = $order->get_meta( '_ppcp_paypal_fees', true );
|
584 |
+
if ( !empty($ppcp_paypal_fees['paypal_fee']['value']) ) {
|
585 |
+
$order_fees += $ppcp_paypal_fees['paypal_fee']['value'];
|
586 |
+
}
|
587 |
+
}
|
588 |
+
|
589 |
+
return $order_fees;
|
590 |
+
}
|
591 |
+
|
592 |
+
private static function get_fee_by_postmeta_key( $order, $postmeta_key )
|
593 |
+
{
|
594 |
+
$fee = $order->get_meta( $postmeta_key, true );
|
595 |
+
if ( empty($fee) ) {
|
596 |
+
return 0;
|
597 |
+
}
|
598 |
+
return $fee;
|
599 |
+
}
|
600 |
+
|
601 |
+
public static function pmw_get_current_order()
|
602 |
+
{
|
603 |
+
if ( self::$order ) {
|
604 |
+
return self::$order;
|
605 |
+
}
|
606 |
+
self::$order = self::get_order_from_order_received_page();
|
607 |
+
return self::$order;
|
608 |
+
}
|
609 |
+
|
610 |
+
// https://stackoverflow.com/a/49616130/4688612
|
611 |
+
private static function get_order_from_order_received_page()
|
612 |
+
{
|
613 |
+
$order = self::get_order_from_query_vars();
|
614 |
+
if ( !$order ) {
|
615 |
+
$order = self::get_order_with_url_order_key();
|
616 |
+
}
|
617 |
+
return $order;
|
618 |
+
}
|
619 |
+
|
620 |
+
public static function pmw_is_order_received_page()
|
621 |
+
{
|
622 |
+
// Get cached value
|
623 |
+
if ( is_bool( self::$pmw_ist_order_received_page ) ) {
|
624 |
+
return self::$pmw_ist_order_received_page;
|
625 |
+
}
|
626 |
+
/**
|
627 |
+
* If a purchase order was created by a shop manager
|
628 |
+
* and the customer is viewing the PO page
|
629 |
+
* don't fire the conversion pixels
|
630 |
+
**/
|
631 |
+
|
632 |
+
if ( is_checkout_pay_page() ) {
|
633 |
+
self::$pmw_ist_order_received_page = false;
|
634 |
+
return false;
|
635 |
+
}
|
636 |
+
|
637 |
+
// Get value from WC or db
|
638 |
+
self::$pmw_ist_order_received_page = is_order_received_page() || self::is_valid_order_key_in_url();
|
639 |
+
return self::$pmw_ist_order_received_page;
|
640 |
+
}
|
641 |
|
642 |
}
|
classes/pixels/class-pixel-manager.php
CHANGED
@@ -199,15 +199,6 @@ class Pixel_Manager
|
|
199 |
<?php
|
200 |
}
|
201 |
|
202 |
-
protected function pmw_get_current_order()
|
203 |
-
{
|
204 |
-
if ( $this->order ) {
|
205 |
-
return $this->order;
|
206 |
-
}
|
207 |
-
$this->order = $this->get_order_from_order_received_page();
|
208 |
-
return $this->order;
|
209 |
-
}
|
210 |
-
|
211 |
public function get_google_ads_conversion_adjustments_endpoint()
|
212 |
{
|
213 |
return '/wp-json/' . $this->rest_namespace . $this->gads_conversion_adjustments_route;
|
@@ -318,14 +309,14 @@ class Pixel_Manager
|
|
318 |
if ( !wp_verify_nonce( $request->get_header( 'X-WP-Nonce' ), 'wp_rest' ) ) {
|
319 |
wp_send_json_error( 'Invalid nonce' );
|
320 |
}
|
321 |
-
$
|
322 |
-
$
|
323 |
|
324 |
-
if ( $
|
325 |
-
$this->save_conversion_pixels_fired_status( $
|
326 |
wp_send_json_success();
|
327 |
} else {
|
328 |
-
wp_send_json_error( 'No order
|
329 |
}
|
330 |
|
331 |
},
|
@@ -445,9 +436,9 @@ class Pixel_Manager
|
|
445 |
}
|
446 |
}
|
447 |
|
448 |
-
if (
|
449 |
-
if (
|
450 |
-
( new Google_Pixel_Manager( $this->options ) )->save_gclid_in_order__premium_only(
|
451 |
}
|
452 |
}
|
453 |
}
|
@@ -816,16 +807,16 @@ class Pixel_Manager
|
|
816 |
|
817 |
protected function add_order_data( $data )
|
818 |
{
|
819 |
-
if ( !
|
820 |
return array_merge( $data, [] );
|
821 |
}
|
822 |
-
if (
|
823 |
return array_merge( $data, [] );
|
824 |
}
|
825 |
-
if ( !Shop::can_order_confirmation_be_processed(
|
826 |
return array_merge( $data, [] );
|
827 |
}
|
828 |
-
return array_merge( $data, $this->get_order_data(
|
829 |
}
|
830 |
|
831 |
protected function get_order_data( $order )
|
@@ -836,6 +827,7 @@ class Pixel_Manager
|
|
836 |
$data['order'] = [
|
837 |
'id' => (int) $order->get_id(),
|
838 |
'number' => (string) $order->get_order_number(),
|
|
|
839 |
'affiliation' => (string) get_bloginfo( 'name' ),
|
840 |
'currency' => (string) Shop::get_order_currency( $order ),
|
841 |
'value_filtered' => (double) Shop::wpm_get_order_total( $order ),
|
@@ -906,66 +898,144 @@ class Pixel_Manager
|
|
906 |
{
|
907 |
$data = [];
|
908 |
|
909 |
-
if ( is_user_logged_in() ||
|
|
|
|
|
|
|
|
|
910 |
$current_user = wp_get_current_user();
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
$data['
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
|
920 |
-
if (
|
921 |
-
$
|
922 |
-
|
|
|
923 |
}
|
924 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
925 |
|
926 |
-
if (
|
927 |
-
$
|
928 |
-
|
|
|
929 |
}
|
930 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
931 |
|
932 |
-
if (
|
933 |
-
$data['plain']['phone'] = trim( $current_user->billing_phone );
|
934 |
-
$data['facebook']['phone'] = str_replace( '+', '', trim( strtolower( $current_user->billing_phone ) ) );
|
935 |
$data['phone'] = [
|
936 |
-
'raw'
|
937 |
-
'e164'
|
938 |
-
|
939 |
-
|
940 |
-
'raw' => hash( 'sha256', trim( $
|
941 |
-
'e164' => hash( 'sha256', Helpers::get_e164_formatted_phone_number( trim( $
|
|
|
942 |
];
|
943 |
}
|
|
|
|
|
|
|
944 |
|
|
|
|
|
|
|
|
|
|
|
945 |
|
946 |
-
if (
|
947 |
-
$data['
|
948 |
-
|
|
|
|
|
949 |
}
|
|
|
|
|
|
|
950 |
|
|
|
|
|
|
|
|
|
|
|
951 |
|
952 |
-
if (
|
953 |
-
$data['
|
954 |
-
|
|
|
|
|
955 |
}
|
|
|
|
|
|
|
956 |
|
|
|
|
|
|
|
|
|
|
|
957 |
|
958 |
-
if (
|
959 |
-
$data['
|
960 |
-
|
|
|
|
|
961 |
}
|
|
|
|
|
|
|
962 |
|
|
|
|
|
|
|
|
|
|
|
963 |
|
964 |
-
if (
|
965 |
-
$data['
|
966 |
-
|
|
|
|
|
967 |
}
|
968 |
-
|
969 |
}
|
970 |
|
971 |
return $data;
|
@@ -1038,8 +1108,8 @@ class Pixel_Manager
|
|
1038 |
|
1039 |
public function inject_wpm_closing()
|
1040 |
{
|
1041 |
-
if ( Environment_Check::get_instance()->is_woocommerce_active() &&
|
1042 |
-
$this->increase_conversion_count_for_ratings(
|
1043 |
}
|
1044 |
echo PHP_EOL . '<!-- END Pixel Manager for WooCommerce -->' . PHP_EOL ;
|
1045 |
}
|
@@ -1167,18 +1237,20 @@ class Pixel_Manager
|
|
1167 |
wp_send_json_error( 'Invalid nonce' );
|
1168 |
}
|
1169 |
|
1170 |
-
if ( isset( $_post['
|
1171 |
-
$
|
|
|
|
|
1172 |
wp_send_json_success();
|
1173 |
} else {
|
1174 |
-
wp_send_json_error();
|
1175 |
}
|
1176 |
|
1177 |
}
|
1178 |
|
1179 |
-
public function save_conversion_pixels_fired_status( $
|
1180 |
{
|
1181 |
-
$order = wc_get_order( $
|
1182 |
$order->update_meta_data( '_wpm_conversion_pixel_trigger', $source );
|
1183 |
$order->update_meta_data( '_wpm_conversion_pixel_fired', true );
|
1184 |
// Get the time between when the order was created and now and save it in _wpm_conversion_pixel_fired_delay
|
@@ -1274,7 +1346,7 @@ class Pixel_Manager
|
|
1274 |
$data['list_name'] = 'Front Page';
|
1275 |
$data['list_id'] = 'front_page';
|
1276 |
$data['page_type'] = 'front_page';
|
1277 |
-
} elseif (
|
1278 |
$data['list_name'] = 'Order Received Page';
|
1279 |
$data['list_id'] = 'order_received_page';
|
1280 |
$data['page_type'] = 'order_received_page';
|
@@ -1346,38 +1418,31 @@ class Pixel_Manager
|
|
1346 |
|
1347 |
protected function get_user_email( $algo = null )
|
1348 |
{
|
|
|
1349 |
|
1350 |
if ( is_user_logged_in() ) {
|
1351 |
$current_user = wp_get_current_user();
|
1352 |
-
|
1353 |
-
|
1354 |
-
$order = $this->pmw_get_current_order();
|
1355 |
-
|
1356 |
-
if ( $order ) {
|
1357 |
-
$email = $order->get_billing_email();
|
1358 |
-
} else {
|
1359 |
-
$email = '';
|
1360 |
}
|
|
|
1361 |
|
1362 |
-
|
1363 |
-
|
|
|
|
|
|
|
|
|
|
|
1364 |
}
|
1365 |
|
|
|
|
|
1366 |
// encrypt email
|
1367 |
if ( $email && $algo && in_array( $algo, hash_algos(), true ) ) {
|
1368 |
$email = hash( $algo, $email );
|
1369 |
}
|
1370 |
return $email;
|
1371 |
}
|
1372 |
-
|
1373 |
-
// https://stackoverflow.com/a/49616130/4688612
|
1374 |
-
protected function get_order_from_order_received_page()
|
1375 |
-
{
|
1376 |
-
$order = Shop::get_order_from_query_vars();
|
1377 |
-
if ( !$order ) {
|
1378 |
-
$order = Shop::get_order_with_url_order_key();
|
1379 |
-
}
|
1380 |
-
return $order;
|
1381 |
-
}
|
1382 |
|
1383 |
}
|
199 |
<?php
|
200 |
}
|
201 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
public function get_google_ads_conversion_adjustments_endpoint()
|
203 |
{
|
204 |
return '/wp-json/' . $this->rest_namespace . $this->gads_conversion_adjustments_route;
|
309 |
if ( !wp_verify_nonce( $request->get_header( 'X-WP-Nonce' ), 'wp_rest' ) ) {
|
310 |
wp_send_json_error( 'Invalid nonce' );
|
311 |
}
|
312 |
+
$order_key = filter_var( $data['order_key'], FILTER_SANITIZE_STRING );
|
313 |
+
$order_source = filter_var( $data['source'], FILTER_SANITIZE_STRING );
|
314 |
|
315 |
+
if ( $order_key && $order_source ) {
|
316 |
+
$this->save_conversion_pixels_fired_status( $order_key, $order_source );
|
317 |
wp_send_json_success();
|
318 |
} else {
|
319 |
+
wp_send_json_error( 'No order key or order source provided' );
|
320 |
}
|
321 |
|
322 |
},
|
436 |
}
|
437 |
}
|
438 |
|
439 |
+
if ( Shop::pmw_is_order_received_page() ) {
|
440 |
+
if ( Shop::pmw_get_current_order() ) {
|
441 |
+
( new Google_Pixel_Manager( $this->options ) )->save_gclid_in_order__premium_only( Shop::pmw_get_current_order() );
|
442 |
}
|
443 |
}
|
444 |
}
|
807 |
|
808 |
protected function add_order_data( $data )
|
809 |
{
|
810 |
+
if ( !Shop::pmw_is_order_received_page() ) {
|
811 |
return array_merge( $data, [] );
|
812 |
}
|
813 |
+
if ( !Shop::pmw_get_current_order() ) {
|
814 |
return array_merge( $data, [] );
|
815 |
}
|
816 |
+
if ( !Shop::can_order_confirmation_be_processed( Shop::pmw_get_current_order() ) ) {
|
817 |
return array_merge( $data, [] );
|
818 |
}
|
819 |
+
return array_merge( $data, $this->get_order_data( Shop::pmw_get_current_order() ) );
|
820 |
}
|
821 |
|
822 |
protected function get_order_data( $order )
|
827 |
$data['order'] = [
|
828 |
'id' => (int) $order->get_id(),
|
829 |
'number' => (string) $order->get_order_number(),
|
830 |
+
'key' => (string) $order->get_order_key(),
|
831 |
'affiliation' => (string) get_bloginfo( 'name' ),
|
832 |
'currency' => (string) Shop::get_order_currency( $order ),
|
833 |
'value_filtered' => (double) Shop::wpm_get_order_total( $order ),
|
898 |
{
|
899 |
$data = [];
|
900 |
|
901 |
+
if ( is_user_logged_in() || Shop::pmw_is_order_received_page() ) {
|
902 |
+
$order = null;
|
903 |
+
if ( Shop::pmw_is_order_received_page() ) {
|
904 |
+
$order = Shop::pmw_get_current_order();
|
905 |
+
}
|
906 |
$current_user = wp_get_current_user();
|
907 |
+
/**
|
908 |
+
* ID
|
909 |
+
*/
|
910 |
+
$data['id'] = [
|
911 |
+
'raw' => get_current_user_id(),
|
912 |
+
'sha256' => hash( 'sha256', get_current_user_id() ),
|
913 |
+
];
|
914 |
+
/**
|
915 |
+
* Email
|
916 |
+
*/
|
917 |
+
$data['email'] = [
|
918 |
+
'raw' => $this->get_user_email(),
|
919 |
+
'sha256' => $this->get_user_email( 'sha256' ),
|
920 |
+
'facebook' => $this->get_user_email( 'sha256' ),
|
921 |
+
];
|
922 |
+
/**
|
923 |
+
* First name
|
924 |
+
*/
|
925 |
|
926 |
+
if ( $order && $order->get_billing_first_name() ) {
|
927 |
+
$first_name = $order->get_billing_first_name();
|
928 |
+
} else {
|
929 |
+
$first_name = $current_user->user_firstname;
|
930 |
}
|
931 |
|
932 |
+
if ( $first_name ) {
|
933 |
+
$data['first_name'] = [
|
934 |
+
'raw' => trim( $first_name ),
|
935 |
+
'facebook' => trim( strtolower( $first_name ) ),
|
936 |
+
];
|
937 |
+
}
|
938 |
+
/**
|
939 |
+
* Last name
|
940 |
+
*/
|
941 |
|
942 |
+
if ( $order && $order->get_billing_last_name() ) {
|
943 |
+
$last_name = $order->get_billing_last_name();
|
944 |
+
} else {
|
945 |
+
$last_name = $current_user->user_lastname;
|
946 |
}
|
947 |
|
948 |
+
if ( $last_name ) {
|
949 |
+
$data['last_name'] = [
|
950 |
+
'raw' => trim( $last_name ),
|
951 |
+
'facebook' => trim( strtolower( $last_name ) ),
|
952 |
+
];
|
953 |
+
}
|
954 |
+
/**
|
955 |
+
* Phone
|
956 |
+
*/
|
957 |
+
|
958 |
+
if ( $order && $order->get_billing_phone() ) {
|
959 |
+
$phone = $order->get_billing_phone();
|
960 |
+
} else {
|
961 |
+
$phone = get_user_meta( get_current_user_id(), 'billing_phone', true );
|
962 |
+
}
|
963 |
|
964 |
+
if ( $phone ) {
|
|
|
|
|
965 |
$data['phone'] = [
|
966 |
+
'raw' => trim( $phone ),
|
967 |
+
'e164' => Helpers::get_e164_formatted_phone_number( trim( strtolower( $phone ) ), Helpers::get_user_country_code( $current_user ) ),
|
968 |
+
'facebook' => str_replace( '+', '', trim( strtolower( $phone ) ) ),
|
969 |
+
'sha256' => [
|
970 |
+
'raw' => hash( 'sha256', trim( $phone ) ),
|
971 |
+
'e164' => hash( 'sha256', Helpers::get_e164_formatted_phone_number( trim( strtolower( $phone ) ), Helpers::get_user_country_code( $current_user ) ) ),
|
972 |
+
],
|
973 |
];
|
974 |
}
|
975 |
+
/**
|
976 |
+
* Postcode
|
977 |
+
*/
|
978 |
|
979 |
+
if ( $order && $order->get_billing_postcode() ) {
|
980 |
+
$postcode = $order->get_billing_postcode();
|
981 |
+
} else {
|
982 |
+
$postcode = get_user_meta( get_current_user_id(), 'billing_postcode', true );
|
983 |
+
}
|
984 |
|
985 |
+
if ( $postcode ) {
|
986 |
+
$data['postcode'] = [
|
987 |
+
'raw' => trim( $postcode ),
|
988 |
+
'facebook' => trim( strtolower( $postcode ) ),
|
989 |
+
];
|
990 |
}
|
991 |
+
/**
|
992 |
+
* City
|
993 |
+
*/
|
994 |
|
995 |
+
if ( $order && $order->get_billing_city() ) {
|
996 |
+
$city = $order->get_billing_city();
|
997 |
+
} else {
|
998 |
+
$city = get_user_meta( get_current_user_id(), 'billing_city', true );
|
999 |
+
}
|
1000 |
|
1001 |
+
if ( $city ) {
|
1002 |
+
$data['city'] = [
|
1003 |
+
'raw' => trim( $city ),
|
1004 |
+
'facebook' => trim( strtolower( $city ) ),
|
1005 |
+
];
|
1006 |
}
|
1007 |
+
/**
|
1008 |
+
* State
|
1009 |
+
*/
|
1010 |
|
1011 |
+
if ( $order && $order->get_billing_state() ) {
|
1012 |
+
$state = $order->get_billing_state();
|
1013 |
+
} else {
|
1014 |
+
$state = get_user_meta( get_current_user_id(), 'billing_state', true );
|
1015 |
+
}
|
1016 |
|
1017 |
+
if ( $state ) {
|
1018 |
+
$data['state'] = [
|
1019 |
+
'raw' => trim( $state ),
|
1020 |
+
'facebook' => preg_replace( '/[a-zA-Z]{2}-/', '', trim( strtolower( $state ) ) ),
|
1021 |
+
];
|
1022 |
}
|
1023 |
+
/**
|
1024 |
+
* Country
|
1025 |
+
*/
|
1026 |
|
1027 |
+
if ( $order && $order->get_billing_country() ) {
|
1028 |
+
$country = $order->get_billing_country();
|
1029 |
+
} else {
|
1030 |
+
$country = get_user_meta( get_current_user_id(), 'billing_country', true );
|
1031 |
+
}
|
1032 |
|
1033 |
+
if ( $country ) {
|
1034 |
+
$data['country'] = [
|
1035 |
+
'raw' => trim( $country ),
|
1036 |
+
'facebook' => trim( strtolower( $country ) ),
|
1037 |
+
];
|
1038 |
}
|
|
|
1039 |
}
|
1040 |
|
1041 |
return $data;
|
1108 |
|
1109 |
public function inject_wpm_closing()
|
1110 |
{
|
1111 |
+
if ( Environment_Check::get_instance()->is_woocommerce_active() && Shop::pmw_is_order_received_page() && Shop::pmw_get_current_order() ) {
|
1112 |
+
$this->increase_conversion_count_for_ratings( Shop::pmw_get_current_order() );
|
1113 |
}
|
1114 |
echo PHP_EOL . '<!-- END Pixel Manager for WooCommerce -->' . PHP_EOL ;
|
1115 |
}
|
1237 |
wp_send_json_error( 'Invalid nonce' );
|
1238 |
}
|
1239 |
|
1240 |
+
if ( isset( $_post['order_key'] ) && isset( $_post['source'] ) ) {
|
1241 |
+
$order_key = filter_var( $_post['order_key'], FILTER_SANITIZE_STRING );
|
1242 |
+
$order_source = filter_var( $_post['source'], FILTER_SANITIZE_STRING );
|
1243 |
+
$this->save_conversion_pixels_fired_status( $order_key, $order_source );
|
1244 |
wp_send_json_success();
|
1245 |
} else {
|
1246 |
+
wp_send_json_error( 'Invalid data. Missing order_key or source.' );
|
1247 |
}
|
1248 |
|
1249 |
}
|
1250 |
|
1251 |
+
public function save_conversion_pixels_fired_status( $order_key, $source = 'thankyou_page' )
|
1252 |
{
|
1253 |
+
$order = wc_get_order( wc_get_order_id_by_order_key( $order_key ) );
|
1254 |
$order->update_meta_data( '_wpm_conversion_pixel_trigger', $source );
|
1255 |
$order->update_meta_data( '_wpm_conversion_pixel_fired', true );
|
1256 |
// Get the time between when the order was created and now and save it in _wpm_conversion_pixel_fired_delay
|
1346 |
$data['list_name'] = 'Front Page';
|
1347 |
$data['list_id'] = 'front_page';
|
1348 |
$data['page_type'] = 'front_page';
|
1349 |
+
} elseif ( Shop::pmw_is_order_received_page() ) {
|
1350 |
$data['list_name'] = 'Order Received Page';
|
1351 |
$data['list_id'] = 'order_received_page';
|
1352 |
$data['page_type'] = 'order_received_page';
|
1418 |
|
1419 |
protected function get_user_email( $algo = null )
|
1420 |
{
|
1421 |
+
$email = '';
|
1422 |
|
1423 |
if ( is_user_logged_in() ) {
|
1424 |
$current_user = wp_get_current_user();
|
1425 |
+
if ( $current_user->user_email ) {
|
1426 |
+
$email = $current_user->user_email;
|
|
|
|
|
|
|
|
|
|
|
|
|
1427 |
}
|
1428 |
+
}
|
1429 |
|
1430 |
+
// Override email if the order has a billing email
|
1431 |
+
|
1432 |
+
if ( Shop::pmw_is_order_received_page() ) {
|
1433 |
+
$order = Shop::pmw_get_current_order();
|
1434 |
+
if ( $order && $order->get_billing_email() ) {
|
1435 |
+
$email = $order->get_billing_email();
|
1436 |
+
}
|
1437 |
}
|
1438 |
|
1439 |
+
// Clean up formatting
|
1440 |
+
$email = strtolower( trim( $email ) );
|
1441 |
// encrypt email
|
1442 |
if ( $email && $algo && in_array( $algo, hash_algos(), true ) ) {
|
1443 |
$email = hash( $algo, $email );
|
1444 |
}
|
1445 |
return $email;
|
1446 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1447 |
|
1448 |
}
|
classes/pixels/google/class-google.php
CHANGED
@@ -237,7 +237,7 @@ class Google extends Pixel
|
|
237 |
return $verticals[$id];
|
238 |
}
|
239 |
|
240 |
-
public function get_google_ads_conversion_ids(
|
241 |
{
|
242 |
$this->google_ads_conversion_identifiers[$this->options['google']['ads']['conversion_id']] = $this->options['google']['ads']['conversion_label'];
|
243 |
$this->google_ads_conversion_identifiers = apply_filters_deprecated(
|
@@ -254,24 +254,30 @@ class Google extends Pixel
|
|
254 |
);
|
255 |
$this->google_ads_conversion_identifiers = apply_filters( 'wpm_google_ads_conversion_identifiers', $this->google_ads_conversion_identifiers );
|
256 |
$formatted_conversion_ids = [];
|
257 |
-
// if (Environment_Check::get_instance()->is_woocommerce_active() &&
|
258 |
-
|
259 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
foreach ( $this->google_ads_conversion_identifiers as $conversion_id => $conversion_label ) {
|
261 |
$conversion_id = $this->extract_google_ads_id( $conversion_id );
|
262 |
if ( $conversion_id ) {
|
263 |
$formatted_conversion_ids['AW-' . $conversion_id] = $conversion_label;
|
264 |
}
|
265 |
}
|
266 |
-
} else {
|
267 |
-
foreach ( $this->google_ads_conversion_identifiers as $conversion_id => $conversion_label ) {
|
268 |
-
$conversion_id = $this->extract_google_ads_id( $conversion_id );
|
269 |
-
if ( $conversion_id ) {
|
270 |
-
$formatted_conversion_ids['AW-' . $conversion_id] = '';
|
271 |
-
}
|
272 |
-
}
|
273 |
}
|
274 |
-
|
275 |
return $formatted_conversion_ids;
|
276 |
}
|
277 |
|
237 |
return $verticals[$id];
|
238 |
}
|
239 |
|
240 |
+
public function get_google_ads_conversion_ids()
|
241 |
{
|
242 |
$this->google_ads_conversion_identifiers[$this->options['google']['ads']['conversion_id']] = $this->options['google']['ads']['conversion_label'];
|
243 |
$this->google_ads_conversion_identifiers = apply_filters_deprecated(
|
254 |
);
|
255 |
$this->google_ads_conversion_identifiers = apply_filters( 'wpm_google_ads_conversion_identifiers', $this->google_ads_conversion_identifiers );
|
256 |
$formatted_conversion_ids = [];
|
257 |
+
// if (Environment_Check::get_instance()->is_woocommerce_active() && Shop::wpm_is_order_received_page()) {
|
258 |
+
// if (Environment_Check::get_instance()->is_woocommerce_active() && Shop::wpm_is_order_received_page()) {
|
259 |
+
// foreach ($this->google_ads_conversion_identifiers as $conversion_id => $conversion_label) {
|
260 |
+
// $conversion_id = $this->extract_google_ads_id($conversion_id);
|
261 |
+
// if ($conversion_id) {
|
262 |
+
// $formatted_conversion_ids['AW-' . $conversion_id] = $conversion_label;
|
263 |
+
// }
|
264 |
+
// }
|
265 |
+
// } else {
|
266 |
+
// foreach ($this->google_ads_conversion_identifiers as $conversion_id => $conversion_label) {
|
267 |
+
// $conversion_id = $this->extract_google_ads_id($conversion_id);
|
268 |
+
// if ($conversion_id) {
|
269 |
+
// $formatted_conversion_ids['AW-' . $conversion_id] = '';
|
270 |
+
// }
|
271 |
+
// }
|
272 |
+
// }
|
273 |
+
if ( Environment_Check::get_instance()->is_woocommerce_active() ) {
|
274 |
foreach ( $this->google_ads_conversion_identifiers as $conversion_id => $conversion_label ) {
|
275 |
$conversion_id = $this->extract_google_ads_id( $conversion_id );
|
276 |
if ( $conversion_id ) {
|
277 |
$formatted_conversion_ids['AW-' . $conversion_id] = $conversion_label;
|
278 |
}
|
279 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
}
|
|
|
281 |
return $formatted_conversion_ids;
|
282 |
}
|
283 |
|
css/admin.css
CHANGED
@@ -291,10 +291,18 @@ th#pmw-pixels-fired {
|
|
291 |
}
|
292 |
|
293 |
a.pmw-copy-icon.pmwCaTooltip:focus,
|
294 |
-
a.pmw-documentation-icon:focus{
|
295 |
box-shadow: none;
|
296 |
}
|
297 |
|
298 |
-
.pmw-ga4-attr-values{
|
299 |
text-align: right;
|
300 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
}
|
292 |
|
293 |
a.pmw-copy-icon.pmwCaTooltip:focus,
|
294 |
+
a.pmw-documentation-icon:focus {
|
295 |
box-shadow: none;
|
296 |
}
|
297 |
|
298 |
+
.pmw-ga4-attr-values {
|
299 |
text-align: right;
|
300 |
}
|
301 |
+
|
302 |
+
.pmw.mono {
|
303 |
+
font-family: monospace;
|
304 |
+
color: #505050;
|
305 |
+
padding-left: 1ch;
|
306 |
+
padding-right: 1ch;
|
307 |
+
box-sizing: content-box;
|
308 |
+
}
|
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=>{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","X-WP-Nonce":e.nonce_wp_rest},body:JSON.stringify({order_id:t,source:a}),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_ajax:e.nonce_ajax}),keepalive:!0});const r=await o.json();r.success?console.log("wpm.storeOrderIdOnServer success"):(console.log("wpm.storeOrderIdOnServer error"),console.log(r))}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,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,W;let B={};return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.user)&&void 0!==t&&null!==(a=t.id)&&void 0!==a&&a.raw&&(B.external_id=wpmDataLayer.user.id.raw),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.order)&&void 0!==r&&r.user_id&&(B.external_id=wpmDataLayer.order.user_id),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.user)&&void 0!==i&&null!==(l=i.email)&&void 0!==l&&l.facebook&&(B.em=wpmDataLayer.user.email.facebook),null!==(d=wpmDataLayer)&&void 0!==d&&null!==(s=d.order)&&void 0!==s&&s.billing_email_hashed&&(B.em=wpmDataLayer.order.billing_email_hashed),null!==(c=wpmDataLayer)&&void 0!==c&&null!==(u=c.user)&&void 0!==u&&null!==(p=u.first_name)&&void 0!==p&&p.facebook&&(B.fn=wpmDataLayer.user.first_name.facebook),null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.order)&&void 0!==g&&g.billing_first_name&&(B.fn=wpmDataLayer.order.billing_first_name.toLowerCase()),null!==(y=wpmDataLayer)&&void 0!==y&&null!==(w=y.user)&&void 0!==w&&null!==(v=w.last_name)&&void 0!==v&&v.facebook&&(B.ln=wpmDataLayer.user.last_name.facebook),null!==(_=wpmDataLayer)&&void 0!==_&&null!==(f=_.order)&&void 0!==f&&f.billing_last_name&&(B.ln=wpmDataLayer.order.billing_last_name.toLowerCase()),null!==(h=wpmDataLayer)&&void 0!==h&&null!==(L=h.user)&&void 0!==L&&null!==(D=L.phone)&&void 0!==D&&D.facebook&&(B.ph=wpmDataLayer.user.phone.facebook),null!==(k=wpmDataLayer)&&void 0!==k&&null!==(b=k.order)&&void 0!==b&&b.billing_phone&&(B.ph=wpmDataLayer.order.billing_phone.replace("+","")),null!==(C=wpmDataLayer)&&void 0!==C&&null!==(x=C.user)&&void 0!==x&&null!==(j=x.city)&&void 0!==j&&j.facebook&&(B.ct=wpmDataLayer.user.city.facebook),null!==(S=wpmDataLayer)&&void 0!==S&&null!==(I=S.order)&&void 0!==I&&I.billing_city&&(B.ct=wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g,"")),null!==(P=wpmDataLayer)&&void 0!==P&&null!==(Q=P.user)&&void 0!==Q&&null!==(E=Q.state)&&void 0!==E&&E.facebook&&(B.st=wpmDataLayer.user.state.facebook),null!==(O=wpmDataLayer)&&void 0!==O&&null!==(T=O.order)&&void 0!==T&&T.billing_state&&(B.st=wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/,"")),null!==(A=wpmDataLayer)&&void 0!==A&&null!==(F=A.user)&&void 0!==F&&null!==(V=F.postcode)&&void 0!==V&&V.facebook&&(B.zp=wpmDataLayer.user.postcode.facebook),null!==(U=wpmDataLayer)&&void 0!==U&&null!==(R=U.order)&&void 0!==R&&R.billing_postcode&&(B.zp=wpmDataLayer.order.billing_postcode),null!==(G=wpmDataLayer)&&void 0!==G&&null!==(q=G.user)&&void 0!==q&&null!==(M=q.country)&&void 0!==M&&M.facebook&&(B.country=wpmDataLayer.user.country.facebook),null!==(N=wpmDataLayer)&&void 0!==N&&null!==(W=N.order)&&void 0!==W&&W.billing_country&&(B.country=wpmDataLayer.order.billing_country.toLowerCase()),B},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,r;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&&null!==(r=o.id)&&void 0!==r&&r.raw&&(t.external_id=wpmDataLayer.user.id.raw),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,y;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&&null!==(y=g.id)&&void 0!==y&&y.raw&&(e.user_id=wpmDataLayer.user.id.raw),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,m;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&&null!==(m=p.id)&&void 0!==m&&m.raw&&(e.user_id=wpmDataLayer.user.id.raw),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,m;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&&null!==(m=p.id)&&void 0!==m&&m.raw&&(e.user_id=wpmDataLayer.user.id.raw),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,u;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 g=[];for(const[e,t]of Object.entries(wpmDataLayer.products)){var p,m;if(null!==(p=wpmDataLayer)&&void 0!==p&&null!==(m=p.general)&&void 0!==m&&m.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;g.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 y={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:g};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.id)&&void 0!==u&&u.raw&&(y.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_search_results",y)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s,c,u;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 p={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&&null!==(u=c.id)&&void 0!==u&&u.raw&&(p.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","purchase",p)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmLogin",(function(){try{var e,t,a,o,r,n,i,l,d,s,c,u;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 p={send_to:wpm.getGoogleAdsConversionIdentifiers()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.id)&&void 0!==u&&u.raw&&(p.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","login",p)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i;if(jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel()))return;if(!wpm.googleConfigConditionsMet("ads"))return;let l={},d={};l={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&&(l.customer_lifetime_value=wpmDataLayer.order.clv_order_value_filtered),null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&null!==(r=o.id)&&void 0!==r&&r.raw&&(l.user_id=wpmDataLayer.user.id.raw),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.order)&&void 0!==i&&i.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",{...l,...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,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=>{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,wpmDataLayer.order.key),"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:wpmDataLayer.order.id.toString(),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,r){let n=arguments.length>2&&arguments[2]!==a?arguments[2]:"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(r,n)},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","X-WP-Nonce":e.nonce_wp_rest},body:JSON.stringify({order_key:t,source:a}),keepalive:!0,cache:"no-cache"}):await fetch(e.ajax_url,{method:"POST",body:new URLSearchParams({action:"pmw_purchase_pixels_fired",order_key:t,source:a,nonce_ajax:e.nonce_ajax}),keepalive:!0});const r=await o.json();r.success?console.log("wpm.storeOrderIdOnServer success"):console.error("wpm.storeOrderIdOnServer error",r)}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\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_wp_rest,\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\t// nonce : wpm.pmw_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_ajax : wpm.nonce_ajax,\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\tconst responseJson = await response.json()\n\n\t\t\tif (responseJson.success) {\n\t\t\t\tconsole.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"wpm.storeOrderIdOnServer error\")\n\t\t\t\tconsole.log(responseJson)\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","nonce_wp_rest","order_id","nonce_ajax","responseJson","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":""}
|
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?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.email?.facebook) data.em = wpmDataLayer.user.email.facebook\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?.first_name?.facebook) data.fn = wpmDataLayer.user.first_name.facebook\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?.last_name?.facebook) data.ln = wpmDataLayer.user.last_name.facebook\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?.phone?.facebook) data.ph = wpmDataLayer.user.phone.facebook\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.city?.facebook) data.ct = wpmDataLayer.user.city.facebook\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?.state?.facebook) data.st = wpmDataLayer.user.state.facebook\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?.postcode?.facebook) data.zp = wpmDataLayer.user.postcode.facebook\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.country?.facebook) data.country = wpmDataLayer.user.country.facebook\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?.raw) data.external_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\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?.raw) {\n\t\t\tdata_basic.user_id = wpmDataLayer.user.id.raw\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, wpmDataLayer.order.key)\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 : wpmDataLayer.order.id.toString(),\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, orderKey, 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( orderKey, 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 ( orderKey, 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_wp_rest,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key: orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\t// nonce : wpm.pmw_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\t// order_id: orderId,\n\t\t\t\t\t\torder_key: orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce_ajax : wpm.nonce_ajax,\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\tconst responseJson = await response.json()\n\n\t\t\tif (responseJson.success) {\n\t\t\t\tconsole.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.error(\"wpm.storeOrderIdOnServer error\", responseJson)\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","raw","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","orderKey","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","nonce_wp_rest","order_key","nonce_ajax","responseJson","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":""}
|
languages/woocommerce-google-adwords-conversion-tracking-tag.pot
CHANGED
@@ -2,14 +2,14 @@
|
|
2 |
# This file is distributed under the GNU General Public License v3.0.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Pixel Manager for WooCommerce 1.27.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/src\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"POT-Creation-Date: 2022-11-
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"X-Generator: WP-CLI 2.7.1\n"
|
15 |
"X-Domain: woocommerce-google-adwords-conversion-tracking-tag\n"
|
@@ -40,8 +40,8 @@ msgstr ""
|
|
40 |
|
41 |
#: classes/admin/class-admin.php:334
|
42 |
#: classes/admin/class-admin.php:335
|
43 |
-
#: wgact.php:
|
44 |
-
#: wgact.php:
|
45 |
msgid "Pixel Manager"
|
46 |
msgstr ""
|
47 |
|
@@ -262,657 +262,672 @@ msgid "TikTok Events API: token"
|
|
262 |
msgstr ""
|
263 |
|
264 |
#: classes/admin/class-admin.php:1207
|
265 |
-
msgid "TikTok
|
266 |
msgstr ""
|
267 |
|
268 |
#: classes/admin/class-admin.php:1219
|
269 |
-
msgid "TikTok:
|
270 |
msgstr ""
|
271 |
|
272 |
#: classes/admin/class-admin.php:1231
|
273 |
-
|
274 |
-
#: classes/admin/class-admin.php:1255
|
275 |
-
msgid "Dynamic Remarketing"
|
276 |
msgstr ""
|
277 |
|
|
|
|
|
278 |
#: classes/admin/class-admin.php:1267
|
279 |
-
msgid "
|
280 |
msgstr ""
|
281 |
|
282 |
#: classes/admin/class-admin.php:1279
|
|
|
|
|
|
|
|
|
283 |
msgid "Variations output"
|
284 |
msgstr ""
|
285 |
|
286 |
-
#: classes/admin/class-admin.php:
|
287 |
msgid "Google Business Vertical"
|
288 |
msgstr ""
|
289 |
|
290 |
-
#: classes/admin/class-admin.php:
|
291 |
-
#: classes/admin/class-admin.php:
|
292 |
msgid "Diagnostics"
|
293 |
msgstr ""
|
294 |
|
295 |
-
#: classes/admin/class-admin.php:
|
296 |
-
#: classes/admin/class-admin.php:
|
297 |
msgid "Support"
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: classes/admin/class-admin.php:
|
301 |
-
#: classes/admin/class-admin.php:
|
302 |
msgid "Author"
|
303 |
msgstr ""
|
304 |
|
305 |
-
#: classes/admin/class-admin.php:
|
306 |
msgid ""
|
307 |
"It looks like you are using some sort of ad or script blocker which is blocking the script and CSS files of this plugin.\n"
|
308 |
" In order for the plugin to work properly you need to disable the script blocker."
|
309 |
msgstr ""
|
310 |
|
311 |
-
#: classes/admin/class-admin.php:
|
312 |
#: classes/admin/class-notifications.php:96
|
313 |
#: classes/admin/class-notifications.php:146
|
314 |
msgid "Learn more"
|
315 |
msgstr ""
|
316 |
|
317 |
-
#: classes/admin/class-admin.php:
|
318 |
msgid "Profit Driven Marketing by SweetCode"
|
319 |
msgstr ""
|
320 |
|
321 |
-
#: classes/admin/class-admin.php:
|
322 |
msgid "Show Pro version settings"
|
323 |
msgstr ""
|
324 |
|
325 |
-
#: classes/admin/class-admin.php:
|
326 |
msgid "Enabling this will only show you the pro settings in the user interface. It won't actually enable the pro features. If you want to try out the pro features head over to sweetcode.com and sign up for a trial."
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: classes/admin/class-admin.php:
|
330 |
msgid "Visit us here:"
|
331 |
msgstr ""
|
332 |
|
333 |
-
#: classes/admin/class-admin.php:
|
334 |
msgid "Payment Gateway Tracking Accuracy Report"
|
335 |
msgstr ""
|
336 |
|
337 |
-
#: classes/admin/class-admin.php:
|
338 |
-
#: classes/admin/class-admin.php:
|
339 |
-
#: classes/admin/class-admin.php:
|
340 |
msgid "beta"
|
341 |
msgstr ""
|
342 |
|
343 |
-
#: classes/admin/class-admin.php:
|
344 |
msgid "What's this? Follow this link to learn more"
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: classes/admin/class-admin.php:
|
348 |
msgid "Available payment gateways"
|
349 |
msgstr ""
|
350 |
|
351 |
-
#: classes/admin/class-admin.php:
|
352 |
msgid "id"
|
353 |
msgstr ""
|
354 |
|
355 |
-
#: classes/admin/class-admin.php:
|
356 |
msgid "method_title"
|
357 |
msgstr ""
|
358 |
|
359 |
-
#: classes/admin/class-admin.php:
|
360 |
msgid "class"
|
361 |
msgstr ""
|
362 |
|
363 |
-
#: classes/admin/class-admin.php:
|
364 |
msgid "Purchase confirmation page reached per gateway (active and inactive)"
|
365 |
msgstr ""
|
366 |
|
367 |
-
#: classes/admin/class-admin.php:
|
368 |
-
#: classes/admin/class-admin.php:
|
369 |
-
#: classes/admin/class-admin.php:
|
370 |
msgid "The analysis is being generated. Please check back in 5 minutes."
|
371 |
msgstr ""
|
372 |
|
373 |
-
#: classes/admin/class-admin.php:
|
374 |
msgid "Purchase confirmation page reached per gateway (only active), weighted by frequency"
|
375 |
msgstr ""
|
376 |
|
377 |
-
#: classes/admin/class-admin.php:
|
378 |
msgid "Automatic Conversion Recovery (ACR)"
|
379 |
msgstr ""
|
380 |
|
381 |
#. translators: The number and percentage of orders that were recovered by the Automatic Conversion Recovery (ACR).
|
382 |
-
#: classes/admin/class-admin.php:
|
383 |
msgid "ACR recovered %1$s (%2$s%%) out of %3$s missing conversions."
|
384 |
msgstr ""
|
385 |
|
386 |
-
#: classes/admin/class-admin.php:
|
387 |
msgid "This feature is only available in the pro version of the plugin. Follow the link to learn more about it:"
|
388 |
msgstr ""
|
389 |
|
390 |
-
#: classes/admin/class-admin.php:
|
391 |
msgid "Get the pro version of the Pixel Manager for WooCommerce over here"
|
392 |
msgstr ""
|
393 |
|
394 |
-
#: classes/admin/class-admin.php:
|
395 |
msgid "Go Pro"
|
396 |
msgstr ""
|
397 |
|
398 |
-
#: classes/admin/class-admin.php:
|
399 |
msgid "Contacting Support"
|
400 |
msgstr ""
|
401 |
|
402 |
-
#: classes/admin/class-admin.php:
|
403 |
msgid "Debug Information"
|
404 |
msgstr ""
|
405 |
|
406 |
-
#: classes/admin/class-admin.php:
|
407 |
msgid "copy to clipboard"
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: classes/admin/class-admin.php:
|
411 |
msgid "Export settings"
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: classes/admin/class-admin.php:
|
415 |
msgid "Export to disk"
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: classes/admin/class-admin.php:
|
419 |
msgid "Import settings"
|
420 |
msgstr ""
|
421 |
|
422 |
-
#: classes/admin/class-admin.php:
|
423 |
-
#: classes/admin/class-admin.php:
|
424 |
msgid "Settings imported successfully!"
|
425 |
msgstr ""
|
426 |
|
427 |
-
#: classes/admin/class-admin.php:
|
428 |
-
#: classes/admin/class-admin.php:
|
429 |
msgid "Reloading...(in 5 seconds)!"
|
430 |
msgstr ""
|
431 |
|
432 |
-
#: classes/admin/class-admin.php:
|
433 |
-
#: classes/admin/class-admin.php:
|
434 |
msgid "There was an error importing that file! Please try again."
|
435 |
msgstr ""
|
436 |
|
437 |
-
#: classes/admin/class-admin.php:
|
438 |
msgid "Translations"
|
439 |
msgstr ""
|
440 |
|
441 |
-
#: classes/admin/class-admin.php:
|
442 |
msgid "If you want to participate improving the translations of this plugin into your language, please follow this link:"
|
443 |
msgstr ""
|
444 |
|
445 |
-
#: classes/admin/class-admin.php:
|
446 |
msgid "Post a support request in the WordPress support forum here: "
|
447 |
msgstr ""
|
448 |
|
449 |
-
#: classes/admin/class-admin.php:
|
450 |
msgid "Support forum"
|
451 |
msgstr ""
|
452 |
|
453 |
-
#: classes/admin/class-admin.php:
|
454 |
msgid "(Never post the debug or other sensitive information to the support forum. Instead send us the information by email.)"
|
455 |
msgstr ""
|
456 |
|
457 |
-
#: classes/admin/class-admin.php:
|
458 |
msgid "Or send us an email to the following address: "
|
459 |
msgstr ""
|
460 |
|
461 |
-
#: classes/admin/class-admin.php:
|
462 |
msgid "Send us your support request through the WooCommerce.com dashboard: "
|
463 |
msgstr ""
|
464 |
|
465 |
-
#: classes/admin/class-admin.php:
|
466 |
msgid "More details about the developer of this plugin: "
|
467 |
msgstr ""
|
468 |
|
469 |
-
#: classes/admin/class-admin.php:
|
470 |
msgid "Developer: SweetCode"
|
471 |
msgstr ""
|
472 |
|
473 |
-
#: classes/admin/class-admin.php:
|
474 |
msgid "Website: "
|
475 |
msgstr ""
|
476 |
|
477 |
-
#: classes/admin/class-admin.php:
|
478 |
msgid "The Google Analytics Universal property ID looks like this:"
|
479 |
msgstr ""
|
480 |
|
481 |
-
#: classes/admin/class-admin.php:
|
482 |
msgid "The Google Analytics 4 measurement ID looks like this:"
|
483 |
msgstr ""
|
484 |
|
485 |
-
#: classes/admin/class-admin.php:
|
486 |
msgid "The conversion ID looks similar to this:"
|
487 |
msgstr ""
|
488 |
|
489 |
-
#: classes/admin/class-admin.php:
|
490 |
msgid "The purchase conversion label looks similar to this:"
|
491 |
msgstr ""
|
492 |
|
493 |
-
#: classes/admin/class-admin.php:
|
494 |
-
#: classes/admin/class-admin.php:3164
|
495 |
msgid "Requires an active Google Ads Conversion ID"
|
496 |
msgstr ""
|
497 |
|
498 |
-
#: classes/admin/class-admin.php:
|
499 |
msgid "The Google Optimize container ID looks like this:"
|
500 |
msgstr ""
|
501 |
|
502 |
-
#: classes/admin/class-admin.php:
|
503 |
-
#: classes/admin/class-admin.php:
|
504 |
msgid "or"
|
505 |
msgstr ""
|
506 |
|
507 |
-
#: classes/admin/class-admin.php:
|
508 |
msgid "The Meta (Facebook) pixel ID looks similar to this:"
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: classes/admin/class-admin.php:
|
512 |
msgid "The Microsoft Advertising UET tag ID looks similar to this:"
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: classes/admin/class-admin.php:
|
516 |
msgid "The Twitter pixel ID looks similar to this:"
|
517 |
msgstr ""
|
518 |
|
519 |
-
#: classes/admin/class-admin.php:
|
520 |
msgid "The Pinterest pixel ID looks similar to this:"
|
521 |
msgstr ""
|
522 |
|
523 |
-
#: classes/admin/class-admin.php:
|
524 |
msgid "Enable Pinterest enhanced match"
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: classes/admin/class-admin.php:
|
528 |
msgid "The Snapchat pixel ID looks similar to this:"
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: classes/admin/class-admin.php:
|
532 |
msgid "The TikTok pixel ID looks similar to this:"
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: classes/admin/class-admin.php:
|
536 |
msgid "The Hotjar site ID looks similar to this:"
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: classes/admin/class-admin.php:
|
540 |
-
msgid "Order Subtotal: Doesn't include tax and
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: classes/admin/class-admin.php:
|
544 |
msgid "Order Total: Includes tax and shipping"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: classes/admin/class-admin.php:
|
548 |
msgid "Profit Margin: Only reports the profit margin. Excludes tax, shipping, and where possible, gateway fees."
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: classes/admin/class-admin.php:
|
552 |
msgid "This is the order total amount reported back to the paid ads pixels (such as Google Ads, Facebook, etc.)"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: classes/admin/class-admin.php:
|
556 |
msgid "To use the Profit Margin setting you will need to install one of the following two Cost of Goods plugins:"
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: classes/admin/class-admin.php:
|
560 |
-
#: classes/admin/class-admin.php:
|
561 |
msgid "open the documentation"
|
562 |
msgstr ""
|
563 |
|
564 |
-
#: classes/admin/class-admin.php:
|
565 |
msgid "Enable Google consent mode with standard settings"
|
566 |
msgstr ""
|
567 |
|
568 |
-
#: classes/admin/class-admin.php:
|
569 |
msgid "If no region is set, then the restrictions are enabled for all regions. If you specify one or more regions, then the restrictions only apply for the specified regions."
|
570 |
msgstr ""
|
571 |
|
572 |
-
#: classes/admin/class-admin.php:
|
573 |
msgid "Google Analytics Enhanced E-Commerce is "
|
574 |
msgstr ""
|
575 |
|
576 |
-
#: classes/admin/class-admin.php:
|
577 |
msgid "Google Analytics 4 activation required"
|
578 |
msgstr ""
|
579 |
|
580 |
-
#: classes/admin/class-admin.php:
|
581 |
msgid "If enabled, purchase and refund events will be sent to Google through the measurement protocol for increased accuracy."
|
582 |
msgstr ""
|
583 |
|
584 |
-
#: classes/admin/class-admin.php:
|
585 |
-
#: classes/admin/class-admin.php:
|
586 |
msgid "Copied feed URL to clipboard"
|
587 |
msgstr ""
|
588 |
|
589 |
-
#: classes/admin/class-admin.php:
|
590 |
-
#: classes/admin/class-admin.php:
|
591 |
-
#: classes/admin/class-admin.php:
|
592 |
-
#: classes/admin/class-admin.php:
|
593 |
msgid "Copy to clipboard"
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: classes/admin/class-admin.php:
|
597 |
msgid "Import credentials"
|
598 |
msgstr ""
|
599 |
|
600 |
-
#: classes/admin/class-admin.php:
|
601 |
msgid "Delete credentials"
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: classes/admin/class-admin.php:
|
605 |
msgid "The GA4 property ID must be set."
|
606 |
msgstr ""
|
607 |
|
608 |
-
#: classes/admin/class-admin.php:
|
609 |
msgid "Enable Google Analytics enhanced link attribution"
|
610 |
msgstr ""
|
611 |
|
612 |
-
#: classes/admin/class-admin.php:
|
613 |
-
#: classes/admin/class-admin.php:
|
614 |
msgid "You need to activate at least Google Analytics UA or Google Analytics 4"
|
615 |
msgstr ""
|
616 |
|
617 |
-
#: classes/admin/class-admin.php:
|
618 |
msgid "Enable Google user ID"
|
619 |
msgstr ""
|
620 |
|
621 |
-
#: classes/admin/class-admin.php:
|
622 |
msgid "Enable Google Ads Enhanced Conversions"
|
623 |
msgstr ""
|
624 |
|
625 |
-
#: classes/admin/class-admin.php:
|
626 |
msgid "You need to activate Google Ads"
|
627 |
msgstr ""
|
628 |
|
629 |
-
#: classes/admin/class-admin.php:
|
630 |
msgid "The Google Ads phone conversion number must be in the same format as on the website."
|
631 |
msgstr ""
|
632 |
|
633 |
-
#: classes/admin/class-admin.php:
|
634 |
msgid "The conversion name must match the conversion name in Google Ads exactly."
|
635 |
msgstr ""
|
636 |
|
637 |
-
#: classes/admin/class-admin.php:
|
638 |
msgid "Requires an active Google Ads Conversion ID and Conversion Label."
|
639 |
msgstr ""
|
640 |
|
641 |
-
#: classes/admin/class-admin.php:
|
642 |
msgid "The Conversion Name must be set."
|
643 |
msgstr ""
|
644 |
|
645 |
-
#: classes/admin/class-admin.php:
|
646 |
msgid "Borlabs Cookie detected. Automatic support is:"
|
647 |
msgstr ""
|
648 |
|
649 |
-
#: classes/admin/class-admin.php:
|
650 |
msgid "Cookiebot detected. Automatic support is:"
|
651 |
msgstr ""
|
652 |
|
653 |
-
#: classes/admin/class-admin.php:
|
654 |
msgid "Complianz GDPR detected. Automatic support is:"
|
655 |
msgstr ""
|
656 |
|
657 |
-
#: classes/admin/class-admin.php:
|
658 |
msgid "Cookie Notice (by hu-manity.co) detected. Automatic support is:"
|
659 |
msgstr ""
|
660 |
|
661 |
-
#: classes/admin/class-admin.php:
|
662 |
msgid "Cookie Script (by cookie-script.com) detected. Automatic support is:"
|
663 |
msgstr ""
|
664 |
|
665 |
-
#: classes/admin/class-admin.php:
|
666 |
msgid "GDPR Cookie Compliance (by Moove Agency) detected. Automatic support is:"
|
667 |
msgstr ""
|
668 |
|
669 |
-
#: classes/admin/class-admin.php:
|
670 |
msgid "GDPR Cookie Consent (by WebToffee) detected. Automatic support is:"
|
671 |
msgstr ""
|
672 |
|
673 |
-
#: classes/admin/class-admin.php:
|
674 |
msgid "Enable Explicit Consent Mode"
|
675 |
msgstr ""
|
676 |
|
677 |
-
#: classes/admin/class-admin.php:
|
678 |
msgid "Only activate the Explicit Consent Mode if you are also using a Cookie Management Platform (a cookie banner) that is compatible with this plugin. Find a list of compatible plugins in the documentation."
|
679 |
msgstr ""
|
680 |
|
681 |
-
#: classes/admin/class-admin.php:
|
682 |
-
#: classes/admin/class-admin.php:2859
|
683 |
#: classes/admin/class-admin.php:2888
|
684 |
-
#: classes/admin/class-admin.php:
|
|
|
685 |
msgid "You need to activate the Meta (Facebook) pixel"
|
686 |
msgstr ""
|
687 |
|
688 |
-
#: classes/admin/class-admin.php:
|
689 |
msgid "The test event code automatically rotates frequently within Facebook. If you don't see the server events flowing in, first make sure that you've set the latest test event code."
|
690 |
msgstr ""
|
691 |
|
692 |
-
#: classes/admin/class-admin.php:
|
693 |
msgid "Send CAPI hits for anonymous visitors who likely have blocked the Meta (Facebook) pixel."
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: classes/admin/class-admin.php:
|
697 |
-
#: classes/admin/class-admin.php:
|
698 |
msgid "Send events with additional visitor identifiers, such as email and phone number, if available."
|
699 |
msgstr ""
|
700 |
|
701 |
-
#: classes/admin/class-admin.php:
|
702 |
msgid "Enable Meta (Facebook) product microdata output"
|
703 |
msgstr ""
|
704 |
|
705 |
-
#: classes/admin/class-admin.php:
|
706 |
-
#: classes/admin/class-admin.php:
|
707 |
-
#: classes/admin/class-admin.php:
|
708 |
msgid "You need to activate the TikTok pixel"
|
709 |
msgstr ""
|
710 |
|
711 |
-
#: classes/admin/class-admin.php:
|
|
|
|
|
|
|
|
|
712 |
msgid "Send Events API hits for anonymous visitors who likely have blocked the TikTok pixel."
|
713 |
msgstr ""
|
714 |
|
715 |
-
#: classes/admin/class-admin.php:
|
716 |
-
msgid "Only disable order duplication prevention for testing.
|
717 |
msgstr ""
|
718 |
|
719 |
-
#: classes/admin/class-admin.php:
|
|
|
|
|
|
|
|
|
720 |
msgid "Enable the maximum compatibility mode"
|
721 |
msgstr ""
|
722 |
|
723 |
-
#: classes/admin/class-admin.php:
|
724 |
msgid "Automatic Conversion Recovery (ACR) is "
|
725 |
msgstr ""
|
726 |
|
727 |
-
#: classes/admin/class-admin.php:
|
728 |
msgid "Display PMW related information on the order list page"
|
729 |
msgstr ""
|
730 |
|
731 |
-
#: classes/admin/class-admin.php:
|
732 |
msgid "The Scroll Tracker thresholds. A comma separated list of scroll tracking thresholds in percent where the scroll tracker triggers its events."
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: classes/admin/class-admin.php:
|
736 |
msgid "Advanced order duplication prevention is "
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: classes/admin/class-admin.php:
|
740 |
msgid "Basic order duplication prevention is "
|
741 |
msgstr ""
|
742 |
|
743 |
-
#: classes/admin/class-admin.php:
|
744 |
msgid "Enable dynamic remarketing audience collection"
|
745 |
msgstr ""
|
746 |
|
747 |
-
#: classes/admin/class-admin.php:
|
748 |
msgid "You need to choose the correct product identifier setting in order to match the product identifiers in the product feeds."
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: classes/admin/class-admin.php:
|
752 |
msgid "Enable variations output"
|
753 |
msgstr ""
|
754 |
|
755 |
-
#: classes/admin/class-admin.php:
|
756 |
msgid "In order for this to work you need to upload your product feed including product variations and the item_group_id. Disable it, if you choose only to upload the parent product for variable products."
|
757 |
msgstr ""
|
758 |
|
759 |
-
#: classes/admin/class-admin.php:
|
760 |
msgid "Retail"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: classes/admin/class-admin.php:
|
764 |
msgid "Education"
|
765 |
msgstr ""
|
766 |
|
767 |
-
#: classes/admin/class-admin.php:
|
768 |
msgid "Hotels and rentals"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: classes/admin/class-admin.php:
|
772 |
msgid "Jobs"
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: classes/admin/class-admin.php:
|
776 |
msgid "Local deals"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: classes/admin/class-admin.php:
|
780 |
msgid "Real estate"
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: classes/admin/class-admin.php:
|
784 |
msgid "Custom"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: classes/admin/class-admin.php:
|
788 |
msgid "ID of your Google Merchant Center account. It looks like this: 12345678"
|
789 |
msgstr ""
|
790 |
|
791 |
-
#: classes/admin/class-admin.php:
|
792 |
msgid "post ID (default)"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: classes/admin/class-admin.php:
|
796 |
msgid "SKU"
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: classes/admin/class-admin.php:
|
800 |
msgid "ID for the WooCommerce Google Product Feed. Outputs the post ID with woocommerce_gpf_ prefix *"
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: classes/admin/class-admin.php:
|
804 |
msgid "ID for the WooCommerce Google Listings & Ads Plugin. Outputs the post ID with gla_ prefix **"
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: classes/admin/class-admin.php:
|
808 |
msgid "Choose a product identifier."
|
809 |
msgstr ""
|
810 |
|
811 |
-
#: classes/admin/class-admin.php:
|
812 |
msgid "* This is for users of the WooCommerce Google Product Feed Plugin"
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: classes/admin/class-admin.php:
|
816 |
msgid "** This is for users of the WooCommerce Google Listings & Ads Plugin"
|
817 |
msgstr ""
|
818 |
|
819 |
-
#: classes/admin/class-admin.php:
|
820 |
-
#: classes/admin/class-admin.php:
|
821 |
msgid "active"
|
822 |
msgstr ""
|
823 |
|
824 |
-
#: classes/admin/class-admin.php:
|
825 |
-
#: classes/admin/class-admin.php:
|
826 |
msgid "inactive"
|
827 |
msgstr ""
|
828 |
|
829 |
-
#: classes/admin/class-admin.php:
|
830 |
-
#: classes/admin/class-admin.php:
|
831 |
msgid "partially active"
|
832 |
msgstr ""
|
833 |
|
834 |
-
#: classes/admin/class-admin.php:
|
835 |
msgid "Pro Feature"
|
836 |
msgstr ""
|
837 |
|
838 |
-
#: classes/admin/class-admin.php:
|
839 |
msgid "You have entered an invalid Google Analytics Universal property ID."
|
840 |
msgstr ""
|
841 |
|
842 |
-
#: classes/admin/class-admin.php:
|
843 |
msgid "You have entered an invalid Google Analytics 4 measurement ID."
|
844 |
msgstr ""
|
845 |
|
846 |
-
#: classes/admin/class-admin.php:
|
847 |
msgid "You have entered an invalid Google Analytics 4 API key."
|
848 |
msgstr ""
|
849 |
|
850 |
-
#: classes/admin/class-admin.php:
|
851 |
msgid "You have entered an invalid GA4 property ID."
|
852 |
msgstr ""
|
853 |
|
854 |
-
#: classes/admin/class-admin.php:
|
855 |
msgid "You have entered an invalid conversion ID. It only contains 8 to 10 digits."
|
856 |
msgstr ""
|
857 |
|
858 |
-
#: classes/admin/class-admin.php:
|
859 |
-
#: classes/admin/class-admin.php:
|
860 |
msgid "You have entered an invalid conversion label."
|
861 |
msgstr ""
|
862 |
|
863 |
-
#: classes/admin/class-admin.php:
|
864 |
msgid "You have entered an invalid merchant ID. It only contains 6 to 12 digits."
|
865 |
msgstr ""
|
866 |
|
867 |
-
#: classes/admin/class-admin.php:
|
868 |
msgid "You have entered an invalid Google Optimize container ID."
|
869 |
msgstr ""
|
870 |
|
871 |
-
#: classes/admin/class-admin.php:
|
872 |
msgid "You have entered an invalid Meta (Facebook) pixel ID. It only contains 14 to 16 digits."
|
873 |
msgstr ""
|
874 |
|
875 |
-
#: classes/admin/class-admin.php:
|
876 |
msgid "You have entered an invalid Meta (Facebook) CAPI token."
|
877 |
msgstr ""
|
878 |
|
879 |
-
#: classes/admin/class-admin.php:
|
880 |
msgid "You have entered an invalid Meta (Facebook) CAPI test_event_code."
|
881 |
msgstr ""
|
882 |
|
883 |
-
#: classes/admin/class-admin.php:
|
884 |
msgid "You have entered an invalid Bing Ads UET tag ID. It only contains 7 to 9 digits."
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: classes/admin/class-admin.php:
|
888 |
msgid "You have entered an invalid Twitter pixel ID. It only contains 5 to 7 lowercase letters and numbers."
|
889 |
msgstr ""
|
890 |
|
891 |
-
#: classes/admin/class-admin.php:
|
892 |
msgid "You have entered an invalid Pinterest pixel ID. It only contains 13 digits."
|
893 |
msgstr ""
|
894 |
|
895 |
-
#: classes/admin/class-admin.php:
|
896 |
msgid "You have entered an invalid Snapchat pixel ID."
|
897 |
msgstr ""
|
898 |
|
899 |
-
#: classes/admin/class-admin.php:
|
900 |
msgid "You have entered an invalid TikTok pixel ID."
|
901 |
msgstr ""
|
902 |
|
903 |
-
#: classes/admin/class-admin.php:
|
904 |
msgid "You have entered an invalid TikTok Events API access token."
|
905 |
msgstr ""
|
906 |
|
907 |
-
#: classes/admin/class-admin.php:
|
|
|
|
|
|
|
|
|
908 |
msgid "You have entered an invalid Hotjar site ID. It only contains 6 to 9 digits."
|
909 |
msgstr ""
|
910 |
|
911 |
-
#: classes/admin/class-admin.php:
|
912 |
msgid "You have entered the Scroll Tracker thresholds in the wrong format. It must be a list of comma separated percentages, like this \"25,50,75,100\""
|
913 |
msgstr ""
|
914 |
|
915 |
-
#: classes/admin/class-admin.php:
|
916 |
msgid "You have entered an invalid conversion name. Special characters, quotes and single quotes are not allowed due to security reasons."
|
917 |
msgstr ""
|
918 |
|
@@ -1004,14 +1019,14 @@ msgstr ""
|
|
1004 |
msgid "Conversion pixels not fired yet"
|
1005 |
msgstr ""
|
1006 |
|
1007 |
-
#: wgact.php:
|
1008 |
msgid "Pixel Manager for WooCommerce error"
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: wgact.php:
|
1012 |
msgid "Your environment doesn't meet all the system requirements listed below."
|
1013 |
msgstr ""
|
1014 |
|
1015 |
-
#: wgact.php:
|
1016 |
msgid "The WooCommerce plugin needs to be activated"
|
1017 |
msgstr ""
|
2 |
# This file is distributed under the GNU General Public License v3.0.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Pixel Manager for WooCommerce 1.27.5\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/src\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2022-11-23T02:54:27+00:00\n"
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"X-Generator: WP-CLI 2.7.1\n"
|
15 |
"X-Domain: woocommerce-google-adwords-conversion-tracking-tag\n"
|
40 |
|
41 |
#: classes/admin/class-admin.php:334
|
42 |
#: classes/admin/class-admin.php:335
|
43 |
+
#: wgact.php:318
|
44 |
+
#: wgact.php:319
|
45 |
msgid "Pixel Manager"
|
46 |
msgstr ""
|
47 |
|
262 |
msgstr ""
|
263 |
|
264 |
#: classes/admin/class-admin.php:1207
|
265 |
+
msgid "TikTok EAPI: test event code"
|
266 |
msgstr ""
|
267 |
|
268 |
#: classes/admin/class-admin.php:1219
|
269 |
+
msgid "TikTok Events API: process anonymous hits"
|
270 |
msgstr ""
|
271 |
|
272 |
#: classes/admin/class-admin.php:1231
|
273 |
+
msgid "TikTok: Advanced Matching"
|
|
|
|
|
274 |
msgstr ""
|
275 |
|
276 |
+
#: classes/admin/class-admin.php:1243
|
277 |
+
#: classes/admin/class-admin.php:1256
|
278 |
#: classes/admin/class-admin.php:1267
|
279 |
+
msgid "Dynamic Remarketing"
|
280 |
msgstr ""
|
281 |
|
282 |
#: classes/admin/class-admin.php:1279
|
283 |
+
msgid "Product Identifier"
|
284 |
+
msgstr ""
|
285 |
+
|
286 |
+
#: classes/admin/class-admin.php:1291
|
287 |
msgid "Variations output"
|
288 |
msgstr ""
|
289 |
|
290 |
+
#: classes/admin/class-admin.php:1304
|
291 |
msgid "Google Business Vertical"
|
292 |
msgstr ""
|
293 |
|
294 |
+
#: classes/admin/class-admin.php:1317
|
295 |
+
#: classes/admin/class-admin.php:1326
|
296 |
msgid "Diagnostics"
|
297 |
msgstr ""
|
298 |
|
299 |
+
#: classes/admin/class-admin.php:1334
|
300 |
+
#: classes/admin/class-admin.php:1343
|
301 |
msgid "Support"
|
302 |
msgstr ""
|
303 |
|
304 |
+
#: classes/admin/class-admin.php:1351
|
305 |
+
#: classes/admin/class-admin.php:1361
|
306 |
msgid "Author"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: classes/admin/class-admin.php:1408
|
310 |
msgid ""
|
311 |
"It looks like you are using some sort of ad or script blocker which is blocking the script and CSS files of this plugin.\n"
|
312 |
" In order for the plugin to work properly you need to disable the script blocker."
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: classes/admin/class-admin.php:1415
|
316 |
#: classes/admin/class-notifications.php:96
|
317 |
#: classes/admin/class-notifications.php:146
|
318 |
msgid "Learn more"
|
319 |
msgstr ""
|
320 |
|
321 |
+
#: classes/admin/class-admin.php:1458
|
322 |
msgid "Profit Driven Marketing by SweetCode"
|
323 |
msgstr ""
|
324 |
|
325 |
+
#: classes/admin/class-admin.php:1465
|
326 |
msgid "Show Pro version settings"
|
327 |
msgstr ""
|
328 |
|
329 |
+
#: classes/admin/class-admin.php:1478
|
330 |
msgid "Enabling this will only show you the pro settings in the user interface. It won't actually enable the pro features. If you want to try out the pro features head over to sweetcode.com and sign up for a trial."
|
331 |
msgstr ""
|
332 |
|
333 |
+
#: classes/admin/class-admin.php:1484
|
334 |
msgid "Visit us here:"
|
335 |
msgstr ""
|
336 |
|
337 |
+
#: classes/admin/class-admin.php:1530
|
338 |
msgid "Payment Gateway Tracking Accuracy Report"
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: classes/admin/class-admin.php:1531
|
342 |
+
#: classes/admin/class-admin.php:3401
|
343 |
+
#: classes/admin/class-admin.php:3409
|
344 |
msgid "beta"
|
345 |
msgstr ""
|
346 |
|
347 |
+
#: classes/admin/class-admin.php:1535
|
348 |
msgid "What's this? Follow this link to learn more"
|
349 |
msgstr ""
|
350 |
|
351 |
+
#: classes/admin/class-admin.php:1543
|
352 |
msgid "Available payment gateways"
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: classes/admin/class-admin.php:1550
|
356 |
msgid "id"
|
357 |
msgstr ""
|
358 |
|
359 |
+
#: classes/admin/class-admin.php:1551
|
360 |
msgid "method_title"
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: classes/admin/class-admin.php:1552
|
364 |
msgid "class"
|
365 |
msgstr ""
|
366 |
|
367 |
+
#: classes/admin/class-admin.php:1570
|
368 |
msgid "Purchase confirmation page reached per gateway (active and inactive)"
|
369 |
msgstr ""
|
370 |
|
371 |
+
#: classes/admin/class-admin.php:1578
|
372 |
+
#: classes/admin/class-admin.php:1627
|
373 |
+
#: classes/admin/class-admin.php:1702
|
374 |
msgid "The analysis is being generated. Please check back in 5 minutes."
|
375 |
msgstr ""
|
376 |
|
377 |
+
#: classes/admin/class-admin.php:1619
|
378 |
msgid "Purchase confirmation page reached per gateway (only active), weighted by frequency"
|
379 |
msgstr ""
|
380 |
|
381 |
+
#: classes/admin/class-admin.php:1690
|
382 |
msgid "Automatic Conversion Recovery (ACR)"
|
383 |
msgstr ""
|
384 |
|
385 |
#. translators: The number and percentage of orders that were recovered by the Automatic Conversion Recovery (ACR).
|
386 |
+
#: classes/admin/class-admin.php:1778
|
387 |
msgid "ACR recovered %1$s (%2$s%%) out of %3$s missing conversions."
|
388 |
msgstr ""
|
389 |
|
390 |
+
#: classes/admin/class-admin.php:1796
|
391 |
msgid "This feature is only available in the pro version of the plugin. Follow the link to learn more about it:"
|
392 |
msgstr ""
|
393 |
|
394 |
+
#: classes/admin/class-admin.php:1798
|
395 |
msgid "Get the pro version of the Pixel Manager for WooCommerce over here"
|
396 |
msgstr ""
|
397 |
|
398 |
+
#: classes/admin/class-admin.php:1800
|
399 |
msgid "Go Pro"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: classes/admin/class-admin.php:1829
|
403 |
msgid "Contacting Support"
|
404 |
msgstr ""
|
405 |
|
406 |
+
#: classes/admin/class-admin.php:1851
|
407 |
msgid "Debug Information"
|
408 |
msgstr ""
|
409 |
|
410 |
+
#: classes/admin/class-admin.php:1860
|
411 |
msgid "copy to clipboard"
|
412 |
msgstr ""
|
413 |
|
414 |
+
#: classes/admin/class-admin.php:1870
|
415 |
msgid "Export settings"
|
416 |
msgstr ""
|
417 |
|
418 |
+
#: classes/admin/class-admin.php:1882
|
419 |
msgid "Export to disk"
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: classes/admin/class-admin.php:1891
|
423 |
msgid "Import settings"
|
424 |
msgstr ""
|
425 |
|
426 |
+
#: classes/admin/class-admin.php:1896
|
427 |
+
#: classes/admin/class-admin.php:2521
|
428 |
msgid "Settings imported successfully!"
|
429 |
msgstr ""
|
430 |
|
431 |
+
#: classes/admin/class-admin.php:1899
|
432 |
+
#: classes/admin/class-admin.php:2524
|
433 |
msgid "Reloading...(in 5 seconds)!"
|
434 |
msgstr ""
|
435 |
|
436 |
+
#: classes/admin/class-admin.php:1905
|
437 |
+
#: classes/admin/class-admin.php:2530
|
438 |
msgid "There was an error importing that file! Please try again."
|
439 |
msgstr ""
|
440 |
|
441 |
+
#: classes/admin/class-admin.php:1922
|
442 |
msgid "Translations"
|
443 |
msgstr ""
|
444 |
|
445 |
+
#: classes/admin/class-admin.php:1923
|
446 |
msgid "If you want to participate improving the translations of this plugin into your language, please follow this link:"
|
447 |
msgstr ""
|
448 |
|
449 |
+
#: classes/admin/class-admin.php:1941
|
450 |
msgid "Post a support request in the WordPress support forum here: "
|
451 |
msgstr ""
|
452 |
|
453 |
+
#: classes/admin/class-admin.php:1944
|
454 |
msgid "Support forum"
|
455 |
msgstr ""
|
456 |
|
457 |
+
#: classes/admin/class-admin.php:1948
|
458 |
msgid "(Never post the debug or other sensitive information to the support forum. Instead send us the information by email.)"
|
459 |
msgstr ""
|
460 |
|
461 |
+
#: classes/admin/class-admin.php:1951
|
462 |
msgid "Or send us an email to the following address: "
|
463 |
msgstr ""
|
464 |
|
465 |
+
#: classes/admin/class-admin.php:1967
|
466 |
msgid "Send us your support request through the WooCommerce.com dashboard: "
|
467 |
msgstr ""
|
468 |
|
469 |
+
#: classes/admin/class-admin.php:1981
|
470 |
msgid "More details about the developer of this plugin: "
|
471 |
msgstr ""
|
472 |
|
473 |
+
#: classes/admin/class-admin.php:1984
|
474 |
msgid "Developer: SweetCode"
|
475 |
msgstr ""
|
476 |
|
477 |
+
#: classes/admin/class-admin.php:1986
|
478 |
msgid "Website: "
|
479 |
msgstr ""
|
480 |
|
481 |
+
#: classes/admin/class-admin.php:2010
|
482 |
msgid "The Google Analytics Universal property ID looks like this:"
|
483 |
msgstr ""
|
484 |
|
485 |
+
#: classes/admin/class-admin.php:2027
|
486 |
msgid "The Google Analytics 4 measurement ID looks like this:"
|
487 |
msgstr ""
|
488 |
|
489 |
+
#: classes/admin/class-admin.php:2044
|
490 |
msgid "The conversion ID looks similar to this:"
|
491 |
msgstr ""
|
492 |
|
493 |
+
#: classes/admin/class-admin.php:2061
|
494 |
msgid "The purchase conversion label looks similar to this:"
|
495 |
msgstr ""
|
496 |
|
497 |
+
#: classes/admin/class-admin.php:2065
|
|
|
498 |
msgid "Requires an active Google Ads Conversion ID"
|
499 |
msgstr ""
|
500 |
|
501 |
+
#: classes/admin/class-admin.php:2084
|
502 |
msgid "The Google Optimize container ID looks like this:"
|
503 |
msgstr ""
|
504 |
|
505 |
+
#: classes/admin/class-admin.php:2086
|
506 |
+
#: classes/admin/class-admin.php:2289
|
507 |
msgid "or"
|
508 |
msgstr ""
|
509 |
|
510 |
+
#: classes/admin/class-admin.php:2103
|
511 |
msgid "The Meta (Facebook) pixel ID looks similar to this:"
|
512 |
msgstr ""
|
513 |
|
514 |
+
#: classes/admin/class-admin.php:2122
|
515 |
msgid "The Microsoft Advertising UET tag ID looks similar to this:"
|
516 |
msgstr ""
|
517 |
|
518 |
+
#: classes/admin/class-admin.php:2141
|
519 |
msgid "The Twitter pixel ID looks similar to this:"
|
520 |
msgstr ""
|
521 |
|
522 |
+
#: classes/admin/class-admin.php:2160
|
523 |
msgid "The Pinterest pixel ID looks similar to this:"
|
524 |
msgstr ""
|
525 |
|
526 |
+
#: classes/admin/class-admin.php:2176
|
527 |
msgid "Enable Pinterest enhanced match"
|
528 |
msgstr ""
|
529 |
|
530 |
+
#: classes/admin/class-admin.php:2204
|
531 |
msgid "The Snapchat pixel ID looks similar to this:"
|
532 |
msgstr ""
|
533 |
|
534 |
+
#: classes/admin/class-admin.php:2225
|
535 |
msgid "The TikTok pixel ID looks similar to this:"
|
536 |
msgstr ""
|
537 |
|
538 |
+
#: classes/admin/class-admin.php:2241
|
539 |
msgid "The Hotjar site ID looks similar to this:"
|
540 |
msgstr ""
|
541 |
|
542 |
+
#: classes/admin/class-admin.php:2251
|
543 |
+
msgid "Order Subtotal: Doesn't include tax, shipping, and if available, fees like PayPal or Stripe fees (default)"
|
544 |
msgstr ""
|
545 |
|
546 |
+
#: classes/admin/class-admin.php:2259
|
547 |
msgid "Order Total: Includes tax and shipping"
|
548 |
msgstr ""
|
549 |
|
550 |
+
#: classes/admin/class-admin.php:2273
|
551 |
msgid "Profit Margin: Only reports the profit margin. Excludes tax, shipping, and where possible, gateway fees."
|
552 |
msgstr ""
|
553 |
|
554 |
+
#: classes/admin/class-admin.php:2281
|
555 |
msgid "This is the order total amount reported back to the paid ads pixels (such as Google Ads, Facebook, etc.)"
|
556 |
msgstr ""
|
557 |
|
558 |
+
#: classes/admin/class-admin.php:2286
|
559 |
msgid "To use the Profit Margin setting you will need to install one of the following two Cost of Goods plugins:"
|
560 |
msgstr ""
|
561 |
|
562 |
+
#: classes/admin/class-admin.php:2313
|
563 |
+
#: classes/admin/class-admin.php:2323
|
564 |
msgid "open the documentation"
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: classes/admin/class-admin.php:2343
|
568 |
msgid "Enable Google consent mode with standard settings"
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: classes/admin/class-admin.php:2381
|
572 |
msgid "If no region is set, then the restrictions are enabled for all regions. If you specify one or more regions, then the restrictions only apply for the specified regions."
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: classes/admin/class-admin.php:2389
|
576 |
msgid "Google Analytics Enhanced E-Commerce is "
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: classes/admin/class-admin.php:2412
|
580 |
msgid "Google Analytics 4 activation required"
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: classes/admin/class-admin.php:2415
|
584 |
msgid "If enabled, purchase and refund events will be sent to Google through the measurement protocol for increased accuracy."
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: classes/admin/class-admin.php:2465
|
588 |
+
#: classes/admin/class-admin.php:2720
|
589 |
msgid "Copied feed URL to clipboard"
|
590 |
msgstr ""
|
591 |
|
592 |
+
#: classes/admin/class-admin.php:2470
|
593 |
+
#: classes/admin/class-admin.php:2478
|
594 |
+
#: classes/admin/class-admin.php:2725
|
595 |
+
#: classes/admin/class-admin.php:2732
|
596 |
msgid "Copy to clipboard"
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: classes/admin/class-admin.php:2492
|
600 |
msgid "Import credentials"
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: classes/admin/class-admin.php:2503
|
604 |
msgid "Delete credentials"
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: classes/admin/class-admin.php:2514
|
608 |
msgid "The GA4 property ID must be set."
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: classes/admin/class-admin.php:2550
|
612 |
msgid "Enable Google Analytics enhanced link attribution"
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: classes/admin/class-admin.php:2566
|
616 |
+
#: classes/admin/class-admin.php:2596
|
617 |
msgid "You need to activate at least Google Analytics UA or Google Analytics 4"
|
618 |
msgstr ""
|
619 |
|
620 |
+
#: classes/admin/class-admin.php:2585
|
621 |
msgid "Enable Google user ID"
|
622 |
msgstr ""
|
623 |
|
624 |
+
#: classes/admin/class-admin.php:2615
|
625 |
msgid "Enable Google Ads Enhanced Conversions"
|
626 |
msgstr ""
|
627 |
|
628 |
+
#: classes/admin/class-admin.php:2626
|
629 |
msgid "You need to activate Google Ads"
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: classes/admin/class-admin.php:2646
|
633 |
msgid "The Google Ads phone conversion number must be in the same format as on the website."
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: classes/admin/class-admin.php:2682
|
637 |
msgid "The conversion name must match the conversion name in Google Ads exactly."
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: classes/admin/class-admin.php:2690
|
641 |
msgid "Requires an active Google Ads Conversion ID and Conversion Label."
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: classes/admin/class-admin.php:2740
|
645 |
msgid "The Conversion Name must be set."
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: classes/admin/class-admin.php:2748
|
649 |
msgid "Borlabs Cookie detected. Automatic support is:"
|
650 |
msgstr ""
|
651 |
|
652 |
+
#: classes/admin/class-admin.php:2754
|
653 |
msgid "Cookiebot detected. Automatic support is:"
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: classes/admin/class-admin.php:2760
|
657 |
msgid "Complianz GDPR detected. Automatic support is:"
|
658 |
msgstr ""
|
659 |
|
660 |
+
#: classes/admin/class-admin.php:2766
|
661 |
msgid "Cookie Notice (by hu-manity.co) detected. Automatic support is:"
|
662 |
msgstr ""
|
663 |
|
664 |
+
#: classes/admin/class-admin.php:2772
|
665 |
msgid "Cookie Script (by cookie-script.com) detected. Automatic support is:"
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: classes/admin/class-admin.php:2778
|
669 |
msgid "GDPR Cookie Compliance (by Moove Agency) detected. Automatic support is:"
|
670 |
msgstr ""
|
671 |
|
672 |
+
#: classes/admin/class-admin.php:2784
|
673 |
msgid "GDPR Cookie Consent (by WebToffee) detected. Automatic support is:"
|
674 |
msgstr ""
|
675 |
|
676 |
+
#: classes/admin/class-admin.php:2803
|
677 |
msgid "Enable Explicit Consent Mode"
|
678 |
msgstr ""
|
679 |
|
680 |
+
#: classes/admin/class-admin.php:2812
|
681 |
msgid "Only activate the Explicit Consent Mode if you are also using a Cookie Management Platform (a cookie banner) that is compatible with this plugin. Find a list of compatible plugins in the documentation."
|
682 |
msgstr ""
|
683 |
|
684 |
+
#: classes/admin/class-admin.php:2832
|
|
|
685 |
#: classes/admin/class-admin.php:2888
|
686 |
+
#: classes/admin/class-admin.php:2917
|
687 |
+
#: classes/admin/class-admin.php:2945
|
688 |
msgid "You need to activate the Meta (Facebook) pixel"
|
689 |
msgstr ""
|
690 |
|
691 |
+
#: classes/admin/class-admin.php:2859
|
692 |
msgid "The test event code automatically rotates frequently within Facebook. If you don't see the server events flowing in, first make sure that you've set the latest test event code."
|
693 |
msgstr ""
|
694 |
|
695 |
+
#: classes/admin/class-admin.php:2879
|
696 |
msgid "Send CAPI hits for anonymous visitors who likely have blocked the Meta (Facebook) pixel."
|
697 |
msgstr ""
|
698 |
|
699 |
+
#: classes/admin/class-admin.php:2908
|
700 |
+
#: classes/admin/class-admin.php:3048
|
701 |
msgid "Send events with additional visitor identifiers, such as email and phone number, if available."
|
702 |
msgstr ""
|
703 |
|
704 |
+
#: classes/admin/class-admin.php:2936
|
705 |
msgid "Enable Meta (Facebook) product microdata output"
|
706 |
msgstr ""
|
707 |
|
708 |
+
#: classes/admin/class-admin.php:2972
|
709 |
+
#: classes/admin/class-admin.php:3028
|
710 |
+
#: classes/admin/class-admin.php:3057
|
711 |
msgid "You need to activate the TikTok pixel"
|
712 |
msgstr ""
|
713 |
|
714 |
+
#: classes/admin/class-admin.php:2999
|
715 |
+
msgid "The test event code automatically rotates frequently within TikTok. If you don't see the server events flowing in, first make sure that you've set the latest test event code."
|
716 |
+
msgstr ""
|
717 |
+
|
718 |
+
#: classes/admin/class-admin.php:3019
|
719 |
msgid "Send Events API hits for anonymous visitors who likely have blocked the TikTok pixel."
|
720 |
msgstr ""
|
721 |
|
722 |
+
#: classes/admin/class-admin.php:3084
|
723 |
+
msgid "Only disable order duplication prevention for testing."
|
724 |
msgstr ""
|
725 |
|
726 |
+
#: classes/admin/class-admin.php:3090
|
727 |
+
msgid "Automatically reactivates 6 hours after disabling duplication prevention."
|
728 |
+
msgstr ""
|
729 |
+
|
730 |
+
#: classes/admin/class-admin.php:3107
|
731 |
msgid "Enable the maximum compatibility mode"
|
732 |
msgstr ""
|
733 |
|
734 |
+
#: classes/admin/class-admin.php:3142
|
735 |
msgid "Automatic Conversion Recovery (ACR) is "
|
736 |
msgstr ""
|
737 |
|
738 |
+
#: classes/admin/class-admin.php:3160
|
739 |
msgid "Display PMW related information on the order list page"
|
740 |
msgstr ""
|
741 |
|
742 |
+
#: classes/admin/class-admin.php:3183
|
743 |
msgid "The Scroll Tracker thresholds. A comma separated list of scroll tracking thresholds in percent where the scroll tracker triggers its events."
|
744 |
msgstr ""
|
745 |
|
746 |
+
#: classes/admin/class-admin.php:3190
|
747 |
msgid "Advanced order duplication prevention is "
|
748 |
msgstr ""
|
749 |
|
750 |
+
#: classes/admin/class-admin.php:3192
|
751 |
msgid "Basic order duplication prevention is "
|
752 |
msgstr ""
|
753 |
|
754 |
+
#: classes/admin/class-admin.php:3216
|
755 |
msgid "Enable dynamic remarketing audience collection"
|
756 |
msgstr ""
|
757 |
|
758 |
+
#: classes/admin/class-admin.php:3228
|
759 |
msgid "You need to choose the correct product identifier setting in order to match the product identifiers in the product feeds."
|
760 |
msgstr ""
|
761 |
|
762 |
+
#: classes/admin/class-admin.php:3246
|
763 |
msgid "Enable variations output"
|
764 |
msgstr ""
|
765 |
|
766 |
+
#: classes/admin/class-admin.php:3257
|
767 |
msgid "In order for this to work you need to upload your product feed including product variations and the item_group_id. Disable it, if you choose only to upload the parent product for variable products."
|
768 |
msgstr ""
|
769 |
|
770 |
+
#: classes/admin/class-admin.php:3272
|
771 |
msgid "Retail"
|
772 |
msgstr ""
|
773 |
|
774 |
+
#: classes/admin/class-admin.php:3282
|
775 |
msgid "Education"
|
776 |
msgstr ""
|
777 |
|
778 |
+
#: classes/admin/class-admin.php:3292
|
779 |
msgid "Hotels and rentals"
|
780 |
msgstr ""
|
781 |
|
782 |
+
#: classes/admin/class-admin.php:3302
|
783 |
msgid "Jobs"
|
784 |
msgstr ""
|
785 |
|
786 |
+
#: classes/admin/class-admin.php:3312
|
787 |
msgid "Local deals"
|
788 |
msgstr ""
|
789 |
|
790 |
+
#: classes/admin/class-admin.php:3322
|
791 |
msgid "Real estate"
|
792 |
msgstr ""
|
793 |
|
794 |
+
#: classes/admin/class-admin.php:3332
|
795 |
msgid "Custom"
|
796 |
msgstr ""
|
797 |
|
798 |
+
#: classes/admin/class-admin.php:3352
|
799 |
msgid "ID of your Google Merchant Center account. It looks like this: 12345678"
|
800 |
msgstr ""
|
801 |
|
802 |
+
#: classes/admin/class-admin.php:3361
|
803 |
msgid "post ID (default)"
|
804 |
msgstr ""
|
805 |
|
806 |
+
#: classes/admin/class-admin.php:3367
|
807 |
msgid "SKU"
|
808 |
msgstr ""
|
809 |
|
810 |
+
#: classes/admin/class-admin.php:3374
|
811 |
msgid "ID for the WooCommerce Google Product Feed. Outputs the post ID with woocommerce_gpf_ prefix *"
|
812 |
msgstr ""
|
813 |
|
814 |
+
#: classes/admin/class-admin.php:3381
|
815 |
msgid "ID for the WooCommerce Google Listings & Ads Plugin. Outputs the post ID with gla_ prefix **"
|
816 |
msgstr ""
|
817 |
|
818 |
+
#: classes/admin/class-admin.php:3385
|
819 |
msgid "Choose a product identifier."
|
820 |
msgstr ""
|
821 |
|
822 |
+
#: classes/admin/class-admin.php:3388
|
823 |
msgid "* This is for users of the WooCommerce Google Product Feed Plugin"
|
824 |
msgstr ""
|
825 |
|
826 |
+
#: classes/admin/class-admin.php:3392
|
827 |
msgid "** This is for users of the WooCommerce Google Listings & Ads Plugin"
|
828 |
msgstr ""
|
829 |
|
830 |
+
#: classes/admin/class-admin.php:3415
|
831 |
+
#: classes/admin/class-admin.php:3420
|
832 |
msgid "active"
|
833 |
msgstr ""
|
834 |
|
835 |
+
#: classes/admin/class-admin.php:3425
|
836 |
+
#: classes/admin/class-admin.php:3430
|
837 |
msgid "inactive"
|
838 |
msgstr ""
|
839 |
|
840 |
+
#: classes/admin/class-admin.php:3435
|
841 |
+
#: classes/admin/class-admin.php:3440
|
842 |
msgid "partially active"
|
843 |
msgstr ""
|
844 |
|
845 |
+
#: classes/admin/class-admin.php:3451
|
846 |
msgid "Pro Feature"
|
847 |
msgstr ""
|
848 |
|
849 |
+
#: classes/admin/class-admin.php:3483
|
850 |
msgid "You have entered an invalid Google Analytics Universal property ID."
|
851 |
msgstr ""
|
852 |
|
853 |
+
#: classes/admin/class-admin.php:3491
|
854 |
msgid "You have entered an invalid Google Analytics 4 measurement ID."
|
855 |
msgstr ""
|
856 |
|
857 |
+
#: classes/admin/class-admin.php:3499
|
858 |
msgid "You have entered an invalid Google Analytics 4 API key."
|
859 |
msgstr ""
|
860 |
|
861 |
+
#: classes/admin/class-admin.php:3507
|
862 |
msgid "You have entered an invalid GA4 property ID."
|
863 |
msgstr ""
|
864 |
|
865 |
+
#: classes/admin/class-admin.php:3515
|
866 |
msgid "You have entered an invalid conversion ID. It only contains 8 to 10 digits."
|
867 |
msgstr ""
|
868 |
|
869 |
+
#: classes/admin/class-admin.php:3523
|
870 |
+
#: classes/admin/class-admin.php:3531
|
871 |
msgid "You have entered an invalid conversion label."
|
872 |
msgstr ""
|
873 |
|
874 |
+
#: classes/admin/class-admin.php:3539
|
875 |
msgid "You have entered an invalid merchant ID. It only contains 6 to 12 digits."
|
876 |
msgstr ""
|
877 |
|
878 |
+
#: classes/admin/class-admin.php:3547
|
879 |
msgid "You have entered an invalid Google Optimize container ID."
|
880 |
msgstr ""
|
881 |
|
882 |
+
#: classes/admin/class-admin.php:3555
|
883 |
msgid "You have entered an invalid Meta (Facebook) pixel ID. It only contains 14 to 16 digits."
|
884 |
msgstr ""
|
885 |
|
886 |
+
#: classes/admin/class-admin.php:3563
|
887 |
msgid "You have entered an invalid Meta (Facebook) CAPI token."
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: classes/admin/class-admin.php:3571
|
891 |
msgid "You have entered an invalid Meta (Facebook) CAPI test_event_code."
|
892 |
msgstr ""
|
893 |
|
894 |
+
#: classes/admin/class-admin.php:3579
|
895 |
msgid "You have entered an invalid Bing Ads UET tag ID. It only contains 7 to 9 digits."
|
896 |
msgstr ""
|
897 |
|
898 |
+
#: classes/admin/class-admin.php:3587
|
899 |
msgid "You have entered an invalid Twitter pixel ID. It only contains 5 to 7 lowercase letters and numbers."
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: classes/admin/class-admin.php:3595
|
903 |
msgid "You have entered an invalid Pinterest pixel ID. It only contains 13 digits."
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: classes/admin/class-admin.php:3603
|
907 |
msgid "You have entered an invalid Snapchat pixel ID."
|
908 |
msgstr ""
|
909 |
|
910 |
+
#: classes/admin/class-admin.php:3611
|
911 |
msgid "You have entered an invalid TikTok pixel ID."
|
912 |
msgstr ""
|
913 |
|
914 |
+
#: classes/admin/class-admin.php:3619
|
915 |
msgid "You have entered an invalid TikTok Events API access token."
|
916 |
msgstr ""
|
917 |
|
918 |
+
#: classes/admin/class-admin.php:3627
|
919 |
+
msgid "You have entered an invalid TikTok EAPI test_event_code."
|
920 |
+
msgstr ""
|
921 |
+
|
922 |
+
#: classes/admin/class-admin.php:3635
|
923 |
msgid "You have entered an invalid Hotjar site ID. It only contains 6 to 9 digits."
|
924 |
msgstr ""
|
925 |
|
926 |
+
#: classes/admin/class-admin.php:3661
|
927 |
msgid "You have entered the Scroll Tracker thresholds in the wrong format. It must be a list of comma separated percentages, like this \"25,50,75,100\""
|
928 |
msgstr ""
|
929 |
|
930 |
+
#: classes/admin/class-admin.php:3680
|
931 |
msgid "You have entered an invalid conversion name. Special characters, quotes and single quotes are not allowed due to security reasons."
|
932 |
msgstr ""
|
933 |
|
1019 |
msgid "Conversion pixels not fired yet"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
+
#: wgact.php:334
|
1023 |
msgid "Pixel Manager for WooCommerce error"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
+
#: wgact.php:336
|
1027 |
msgid "Your environment doesn't meet all the system requirements listed below."
|
1028 |
msgstr ""
|
1029 |
|
1030 |
+
#: wgact.php:340
|
1031 |
msgid "The WooCommerce plugin needs to be activated"
|
1032 |
msgstr ""
|
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,26 @@ 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.2 = 16.11.2022
|
225 |
|
226 |
* Fix: Fixed saving status after conversion pixels fired.
|
4 |
Requires at least: 3.7
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 7.3
|
7 |
+
Stable tag: 1.27.5
|
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.5 = 23.11.2022
|
225 |
+
|
226 |
+
* Tweak: Prioritize order billing info over logged-in user billing info.
|
227 |
+
* Tweak: If available, also subtract order fees (such as PayPal or Stripe fees) from the subtotal.
|
228 |
+
* Tweak: Various UX improvements.
|
229 |
+
* Tweak: Updated documentation links.
|
230 |
+
|
231 |
+
|
232 |
+
|
233 |
+
= 1.27.4 = 18.11.2022
|
234 |
+
|
235 |
+
* Tweak: Various UX improvements.
|
236 |
+
|
237 |
+
|
238 |
+
= 1.27.3 = 17.11.2022
|
239 |
+
|
240 |
+
* Tweak: Various UX improvements.
|
241 |
+
|
242 |
+
|
243 |
+
|
244 |
= 1.27.2 = 16.11.2022
|
245 |
|
246 |
* Fix: Fixed saving status after conversion pixels fired.
|
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' ) ) {
|
@@ -157,18 +157,27 @@ if ( function_exists( 'wpm_fs' ) ) {
|
|
157 |
|
158 |
if ( $this->is_woocommerce_active() ) {
|
159 |
add_action( 'before_woocommerce_init', function () {
|
|
|
|
|
|
|
160 |
if ( Helpers::is_wc_hpos_enabled() && class_exists( 'Automattic\\WooCommerce\\Utilities\\FeaturesUtil' ) ) {
|
161 |
// TODO: https://app.asana.com/0/1110999795232049/1203086190142026
|
162 |
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', WPM_PLUGIN_BASENAME, true );
|
163 |
}
|
164 |
} );
|
165 |
-
add_action(
|
|
|
|
|
|
|
|
|
|
|
166 |
add_action(
|
167 |
'init',
|
168 |
[ $this, 'run_woocommerce_reports' ],
|
169 |
10,
|
170 |
2
|
171 |
);
|
|
|
172 |
} else {
|
173 |
add_action( 'init', [ $this, 'init' ] );
|
174 |
}
|
@@ -180,8 +189,21 @@ if ( function_exists( 'wpm_fs' ) ) {
|
|
180 |
|
181 |
}
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
public function run_woocommerce_reports()
|
184 |
{
|
|
|
|
|
|
|
185 |
// Register the callback
|
186 |
// Can't be behind is_admin()
|
187 |
add_action( 'pmw_tracking_accuracy_analysis', function () {
|
10 |
* Developer URI: https://sweetcode.com
|
11 |
* Text Domain: woocommerce-google-adwords-conversion-tracking-tag
|
12 |
* Domain path: /languages
|
13 |
+
* * Version: 1.27.5
|
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.5' ;
|
23 |
// TODO add option checkbox on uninstall and ask if user wants to delete options from db
|
24 |
|
25 |
if ( !defined( 'ABSPATH' ) ) {
|
157 |
|
158 |
if ( $this->is_woocommerce_active() ) {
|
159 |
add_action( 'before_woocommerce_init', function () {
|
160 |
+
if ( wp_doing_ajax() ) {
|
161 |
+
return;
|
162 |
+
}
|
163 |
if ( Helpers::is_wc_hpos_enabled() && class_exists( 'Automattic\\WooCommerce\\Utilities\\FeaturesUtil' ) ) {
|
164 |
// TODO: https://app.asana.com/0/1110999795232049/1203086190142026
|
165 |
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', WPM_PLUGIN_BASENAME, true );
|
166 |
}
|
167 |
} );
|
168 |
+
add_action(
|
169 |
+
'init',
|
170 |
+
[ $this, 'register_hooks_for_woocommerce' ],
|
171 |
+
10,
|
172 |
+
2
|
173 |
+
);
|
174 |
add_action(
|
175 |
'init',
|
176 |
[ $this, 'run_woocommerce_reports' ],
|
177 |
10,
|
178 |
2
|
179 |
);
|
180 |
+
add_action( 'woocommerce_init', [ $this, 'init' ] );
|
181 |
} else {
|
182 |
add_action( 'init', [ $this, 'init' ] );
|
183 |
}
|
189 |
|
190 |
}
|
191 |
|
192 |
+
public function register_hooks_for_woocommerce()
|
193 |
+
{
|
194 |
+
if ( wp_doing_ajax() ) {
|
195 |
+
return;
|
196 |
+
}
|
197 |
+
add_action( 'pmw_reactivate_duplication_prevention', function () {
|
198 |
+
Admin::get_instance()->deduper_enable();
|
199 |
+
} );
|
200 |
+
}
|
201 |
+
|
202 |
public function run_woocommerce_reports()
|
203 |
{
|
204 |
+
if ( wp_doing_ajax() ) {
|
205 |
+
return;
|
206 |
+
}
|
207 |
// Register the callback
|
208 |
// Can't be behind is_admin()
|
209 |
add_action( 'pmw_tracking_accuracy_analysis', function () {
|