Files
drmaterac.pl/modules/pdgoogleanalytycs4pro/views/js/scripts_17.js

702 lines
26 KiB
JavaScript

/*
* 2012-2022 Patryk Marek PrestaDev.pl
*
* Patryk Marek PrestaDev.pl - PD Google Analytycs 4.0 Pro 1.6.x and 1.7.x Module © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at info@prestadev.pl.
*
* @author Patryk Marek <info@prestadev.pl>
* @copyright 2012-2022 Patryk Marek @ PrestaDev.pl
* @license Do not edit, modify or copy this file, if you wish to customize it, contact us at info@prestadev.pl.
* @link http://prestadev.pl
* @package PD Google Analytycs 4.0 Pro 1.6.x and 1.7.x Module
* @version 1.0.2
* @date 01-05-2021
*/
$(document).ready(function() {
function pdGa4StorageKey(eventName, eventKey) {
return 'pdga4_' + eventName + '_' + eventKey;
}
function pdGa4WasSent(eventName, eventKey) {
try {
return sessionStorage.getItem(pdGa4StorageKey(eventName, eventKey)) === '1';
} catch (e) {
return false;
}
}
function pdGa4MarkSent(eventName, eventKey) {
try {
sessionStorage.setItem(pdGa4StorageKey(eventName, eventKey), '1');
} catch (e) {}
}
function pdGa4PayloadSignature(payload) {
if (!payload || !payload.items) {
return 'empty';
}
return $.map(payload.items, function(item) {
return [item.item_id, item.quantity, item.price].join(':');
}).join('|') + ':' + payload.value;
}
function pdGa4CurrentCartSignature() {
if (typeof prestashop === 'undefined' || !prestashop.cart || !prestashop.cart.products) {
return 'cart';
}
return $.map(prestashop.cart.products, function(product) {
return [product.id_product, product.id_product_attribute, product.quantity].join(':');
}).join('|') || 'cart';
}
function pdGa4InsertEventHtml(data) {
if (!data) {
return;
}
let eventContainer = $('#hook-display-before-carrier');
if (!eventContainer.length) {
eventContainer = $('#pdga4-checkout-event-container');
}
if (!eventContainer.length) {
eventContainer = $('<div id="pdga4-checkout-event-container"></div>');
$('body').append(eventContainer);
}
eventContainer.empty();
eventContainer[0].innerHTML = data;
eventContainer.find('script').each(function() {
if (this.src) {
$.getScript(this.src);
} else {
$.globalEval(this.text || this.textContent || this.innerHTML || '');
}
});
}
function pdGa4GetCarrierId(deliveryOption) {
if (typeof deliveryOption === 'undefined' || deliveryOption === null) {
return 0;
}
return parseInt(deliveryOption, 10);
}
function pdGa4SendDeliveryInfo(idCarrier) {
idCarrier = pdGa4GetCarrierId(idCarrier);
if (!idCarrier) {
return;
}
let eventKey = pdGa4CurrentCartSignature() + '_' + idCarrier;
if (pdGa4WasSent('add_shipping_info', eventKey)) {
return;
}
pdGa4MarkSent('add_shipping_info', eventKey);
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'addDeliveryInfo', 'id_carrier': idCarrier, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax: true},
dataType: "json",
success: function(data) {
pdGa4InsertEventHtml(data);
}
});
}
function pdGa4SendPaymentInfo(paymentModule) {
if (!paymentModule) {
return;
}
let eventKey = pdGa4CurrentCartSignature() + '_' + paymentModule;
if (pdGa4WasSent('add_payment_info', eventKey)) {
return;
}
pdGa4MarkSent('add_payment_info', eventKey);
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'addPaymentInfo', 'payment_module': paymentModule, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax: true},
dataType: "json",
success: function(data) {
pdGa4InsertEventHtml(data);
}
});
}
function pdGa4SendSelectedDeliveryInfo() {
let selectedDeliveryOption = $('.delivery-options input[type="radio"]:checked, input[type=radio][name^=delivery_option]:checked').first();
if (!selectedDeliveryOption.length) {
return;
}
pdGa4SendDeliveryInfo(selectedDeliveryOption.val());
}
function pdGa4SendBeginCheckout() {
if (typeof window.pdGa4BeginCheckoutPayload === 'undefined' || typeof gtag === 'undefined') {
return;
}
let payload = window.pdGa4BeginCheckoutPayload,
eventKey = pdGa4PayloadSignature(payload);
if (pdGa4WasSent('begin_checkout', eventKey)) {
return;
}
pdGa4MarkSent('begin_checkout', eventKey);
console.log('Fired up event GA4: begin_checkout');
if (window.location.hostname === "lulandia.pl") {
gtag('event', 'conversion', {
'send_to': 'AW-11243281264/Gs-KCNqSsesYEPC2m_Ep',
'value': payload.value,
'currency': 'PLN'
});
console.log('Fired up event GADS begin_checkout conversion lulandia.pl');
}
gtag('event', 'begin_checkout', payload);
}
$('body#cart').on('click', '.cart-detailed-actions a[href], a[href*="order"]', function() {
window.pdGa4CheckoutIntent = true;
});
$("body#module-thecheckout-order, body#checkout, body.module-steasycheckout-default").on("change click", "input[type=radio][name^=delivery_option]:checked, .delivery-options input[type='radio']:checked", function() {
pdGa4SendDeliveryInfo($(this).val());
});
$("body#checkout").on("submit", "#checkout-addresses-step form, form:has(button[name='confirm-addresses'])", function() {
window.setTimeout(pdGa4SendSelectedDeliveryInfo, 1200);
});
$("body#checkout").on("click", "button[name='confirmDeliveryOption'], #checkout-delivery-step button.continue", function() {
window.setTimeout(pdGa4SendSelectedDeliveryInfo, 50);
});
$("body#module-thecheckout-order, body#checkout, body.module-steasycheckout-default").on("change click", 'input[name="payment-option"]:checked', function() {
let paymentModule = $(this).data('module-name');
pdGa4SendPaymentInfo(paymentModule);
});
if (typeof(prestashop) !== 'undefined') {
prestashop.on('updatedDeliveryForm', function() {
window.setTimeout(pdGa4SendSelectedDeliveryInfo, 200);
});
prestashop.on('changedCheckoutStep', function(params) {
if (params && params.event && params.event.currentTarget && params.event.currentTarget.id === 'checkout-delivery-step') {
window.setTimeout(pdGa4SendSelectedDeliveryInfo, 200);
}
});
}
if (typeof(prestashop) !== 'undefined') {
//prestashop.on('changedCheckoutStep', function(params) {
// if (typeof(params.event.currentTarget.id) !== 'undefined') {
// let step = params.event.currentTarget.id,
// step_call_elm = params.event.target.id;
// if (step == 'checkout-payment-step' && step_call_elm != 'conditions_to_approve[terms-and-conditions]') {
// let payment_module = $('input[name="payment-option"]:checked').data('module-name');
// $.ajax({
// type: "POST",
// url: pdgoogleanalytycs4pro_ajax_link,
// data: {'action': 'addPaymentInfo', 'payment_module': payment_module, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax: true},
// dataType: "json",
// success: function(data) {
// if (data) {
// $('#hook-display-before-carrier').html(data);
// }
// }
// });
// }
// }
//});
// qty up > thecheckout module opc
$('body').on("click", "a.cart-line-product-quantity-up", function(e) {
let qty_input = $(this).parent().find('input.cart-line-product-quantity'),
updat_url = qty_input.attr('data-update-url'),
url_params = parseQuery(updat_url),
iso_code = prestashop.currency.iso_code;
if (typeof(url_params.id_product) !== 'undefined' && typeof(url_params.id_product_attribute) !== 'undefined') {
var product_id_product = url_params.id_product;
var product_id_product_attribute = url_params.id_product_attribute;
}
if (typeof(product_id_product) !== 'undefined' && typeof(product_id_product_attribute) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'updateCart', 'product_id': product_id_product, 'product_id_product_attribute' : product_id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: add_to_cart');
if (window.location.hostname === "lulandia.pl") {
gtag('event', 'conversion', {
'send_to': 'AW-11243281264/WgG_CN2SsesYEPC2m_Ep',
'value': data.content_value,
'currency': 'PLN'
});
console.log( 'Fired up event GADS add_to_cart conversion lulandia.pl' );
}
gtag('event', 'add_to_cart', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value,
currency: iso_code,
quantity: 1
}],
value: data.content_value
});
}
});
}
});
// down qty > thecheckout module opc
$('body').on("click", "a.cart-line-product-quantity-down", function(e) {
let qty_input = $(this).parent().find('input.cart-line-product-quantity'),
updat_url = qty_input.attr('data-update-url'),
url_params = parseQuery(updat_url),
iso_code = prestashop.currency.iso_code;
if (typeof(url_params.id_product) !== 'undefined' && typeof(url_params.id_product_attribute) !== 'undefined') {
var product_id_product = url_params.id_product;
var product_id_product_attribute = url_params.id_product_attribute;
}
if (typeof(product_id_product) !== 'undefined' && typeof(product_id_product_attribute) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'updateCart', 'product_id': product_id_product, 'product_id_product_attribute' : product_id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: remove_to_cart');
gtag('event', 'remove_to_cart', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: 1
}],
value: data.content_value
});
}
});
}
});
// qty up > stadard theme ps 17
$('body').on("click", "button.bootstrap-touchspin-up", function(e) {
let qty_input = $(this).parent().parent().find('input.js-cart-line-product-quantity'),
updat_url = qty_input.attr('data-update-url'),
url_params = parseQuery(updat_url),
iso_code = prestashop.currency.iso_code;
if (typeof(url_params.id_product) !== 'undefined' && typeof(url_params.id_product_attribute) !== 'undefined') {
var product_id_product = url_params.id_product;
var product_id_product_attribute = url_params.id_product_attribute;
}
if (typeof(product_id_product) !== 'undefined' && typeof(product_id_product_attribute) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'updateCart', 'product_id': product_id_product, 'product_id_product_attribute' : product_id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: add_to_cart');
if (window.location.hostname === "lulandia.pl") {
gtag('event', 'conversion', {
'send_to': 'AW-11243281264/WgG_CN2SsesYEPC2m_Ep',
'value': data.content_value,
'currency': 'PLN'
});
console.log( 'Fired up event GADS add_to_cart conversion lulandia.pl' );
}
gtag('event', 'add_to_cart', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: 1
}],
value: data.content_value
});
}
});
}
});
// qty down > stadard theme ps 17
$('body').on("click", "button.bootstrap-touchspin-down", function(e) {
let qty_input = $(this).parent().parent().find('input.js-cart-line-product-quantity'),
updat_url = qty_input.attr('data-update-url'),
url_params = parseQuery(updat_url),
iso_code = prestashop.currency.iso_code;
if (typeof(url_params.id_product) !== 'undefined' && typeof(url_params.id_product_attribute) !== 'undefined') {
var product_id_product = url_params.id_product;
var product_id_product_attribute = url_params.id_product_attribute;
}
if (typeof(product_id_product) !== 'undefined' && typeof(product_id_product_attribute) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'productClick', 'product_id': product_id_product, 'product_id_product_attribute' : product_id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: remove_to_cart');
gtag('event', 'remove_to_cart', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: 1
}],
value: data.content_value
});
}
});
}
});
// standard theme ps 1.7 select item
$('body').on("click", ".product-miniature", function(e) {
e.preventDefault();
let product_container = $(this),
product_url = $(this).find('a').attr('href').trim(),
product_id = product_container.attr('data-id-product'),
product_id_product_attribute = product_container.attr('data-id-product-attribute');
iso_code = prestashop.currency.iso_code;
setTimeout(function () {
document.location = product_url;
}, 500);
if (typeof(product_id) !== 'undefined' && typeof(product_id_product_attribute) !== 'undefined' && typeof(product_url) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'productClick', 'product_id': product_id, 'product_id_product_attribute' : product_id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: select_item');
gtag('event', 'select_item', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: 1
}],
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller
});
}
});
}
});
// Transformer theme ps 1.7 select item
$('body').on("click", "article.js-product-miniature", function(e) {
e.preventDefault();
let product_container = $(this),
product_url = $(this).find('a').attr('href').trim(),
product_id = product_container.attr('data-id-product'),
product_id_product_attribute = product_container.attr('data-id-product-attribute');
iso_code = prestashop.currency.iso_code;
setTimeout(function () {
document.location = product_url;
}, 500);
if (typeof(product_id) !== 'undefined' && typeof(product_id_product_attribute) !== 'undefined' && typeof(product_url) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'productClick', 'product_id': product_id, 'product_id_product_attribute' : product_id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: select_item');
gtag('event', 'select_item', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: 1
}],
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller
});
}
});
}
});
// Transformer theme add to cart butons on product lists
$('body').on("click", ".product-add-to-cart .add-to-cart", function(e) {
let a_button = $(this),
id_product = parseInt( $('.product-actions .leo-wishlist-button').attr('data-id-product')),
id_product_attribute = parseInt( $('.product-actions .leo-wishlist-button').attr('data-id-product-attribute')),
iso_code = prestashop.currency.iso_code;
if (typeof(id_product) !== 'undefined' && typeof(id_product_attribute) !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'updateCart', 'product_id': id_product, 'product_id_product_attribute' : id_product_attribute, 'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
gtag('event', 'add_to_cart', {
currency: iso_code,
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: '',
discount: data.content_discount,
index: '1',
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: $( '#quantity_wanted' ).val()
}],
item_list_name: pd_google_analitycs_controller,
item_list_id: pd_google_analitycs_controller
});
}
});
} else {
console.log( 'Cannot fire up Transformer select_item event - missing data' );
}
});
prestashop.on('updateProduct', function(params) {
if (typeof(params) !== 'undefined' && params.eventType == 'updatedProductCombination') {
let iso_code = prestashop.currency.iso_code,
product_id = parseInt(document.getElementsByName('id_product')[0].value),
groups = [],
select_groups = document.getElementsByClassName('form-control-select'),
input_color_group = document.getElementsByClassName('input-color'),
input_radio_group = document.querySelector('.input-radio:checked');
if (typeof(select_groups) != 'undefined' && select_groups != null) {
for (select_count = 0; select_count < select_groups.length; select_count++) {
groups.push(select_groups[select_count].value);
}
}
if (typeof(input_color_group) != 'undefined' && input_color_group != null) {
for (color_count = 0; color_count < input_color_group.length; color_count++) {
if (input_color_group[color_count].checked) {
groups.push(input_color_group[color_count].value);
}
}
}
if (typeof(input_radio_group) != 'undefined' && input_radio_group != null) {
for (radio_count = 0; radio_count < input_radio_group.length; radio_count++) {
if (input_radio_group[radio_count].checked) {
groups.push(input_radio_group[radio_count].value);
}
}
}
if (typeof groups !== 'undefined' && groups.length > 0 && typeof product_id !== 'undefined') {
$.ajax({
type: "POST",
url: pdgoogleanalytycs4pro_ajax_link,
data: {'action': 'updateProduct', 'product_id': product_id, 'attributes_groups': groups,'secure_key': pdgoogleanalytycs4pro_secure_key, ajax : true},
dataType: "json",
success: function(data) {
console.log('Fired up event GA4: view_item on combination change');
setEventFireUpDelay(250);
gtag('event', 'view_item', {
items: [{
item_id: data.content_ids,
item_name: data.content_name,
coupon: "",
discount: data.content_discount,
affiliation: data.http_referer,
item_brand: data.content_manufacturer,
item_category: data.content_category,
item_category2: (data.content_category2.length) ? data.content_category2 : '',
item_category3: (data.content_category3.length) ? data.content_category3 : '',
item_category4: (data.content_category4.length) ? data.content_category4 : '',
item_category5: (data.content_category5.length) ? data.content_category5 : '',
item_variant: data.content_variant,
price: data.content_value_old,
currency: iso_code,
quantity: 1
}],
value: data.content_value
});
}
});
}
}
});
}
function setEventFireUpDelay(ms) {
var cur_d = new Date();
var cur_ticks = cur_d.getTime();
var ms_passed = 0;
while(ms_passed < ms) {
var d = new Date();
var ticks = d.getTime();
ms_passed = ticks - cur_ticks;
}
}
function parseQuery(str) {
if(typeof str != "string" || str.length == 0) return {};
var s = str.split("&");
var s_length = s.length;
var bit, query = {}, first, second;
for(var i = 0; i < s_length; i++) {
bit = s[i].split("=");
first = decodeURIComponent(bit[0]);
if(first.length == 0) continue;
second = decodeURIComponent(bit[1]);
if(typeof query[first] == "undefined") query[first] = second;
else if(query[first] instanceof Array) query[first].push(second);
else query[first] = [query[first], second];
}
return query;
}
});