Files
kupshop/web/common/static/wpj/wpj.incomaker.js
2025-08-02 16:30:27 +02:00

145 lines
4.5 KiB
JavaScript

export class WpjIncomaker {
constructor() {
this.column_count = 4;
this.product_count = 4;
}
loadRelatedProducts(element, id_product) {
this.fetchProduts({productId: id_product}, (products) => {
const filter = {products:products.map(function(product){return product.id})};
const data = {
column_count: this.column_count,
count: products.length,
products_filter: JSON.stringify(filter)
}
window.wpj.blocekRuntime.insertProducts(JSON.stringify(data), function(data) {
element.innerHTML = data.html;
// Trigger imagesLoaded event to notify lazy load
element.dispatchEvent(new CustomEvent('imagesLoaded', { bubbles: true }));
});
})
}
fetchProduts(params, callback) {
const incoData = this.getIncomakerVariables();
const data = {
"engineParams": {
"engineType": "PRODUCT",
"pluginUuid": "a74c8ced-44b9-4485-a6b6-aaa09206e67d",
"permId": incoData.p,
"productFeedType": "TAG",
"currency": "CZK",
"itemCount": this.product_count,
"language": "cs",
...params
}
};
if (incoData.k) {
data.cId = incoData.k;
}
fetch('https://dg5.incomaker.com/tracking/rest/content/engine', {
method: 'POST',
headers: {
'Content-Type': 'text/plain;charset=UTF-8'
},
redirect: 'follow',
body: JSON.stringify(data)
}).then(function(response) {
response.json().then(function(data) {
const products = [];
const productIdRegexp = /_z(\d+)/;
for (const [index, product] of Object.entries(data)) {
products.push({id: product.url.match(productIdRegexp)[1]});
}
callback(products);
});
});
}
getIncomakerVariables() {
let cookies = this.getClientCookies();
let data = {};
if (cookies && cookies['incomaker_k']) {
data.k = cookies['incomaker_k']
}
if (cookies && cookies['incomaker_c']) {
data.c = cookies['incomaker_c']
}
if (cookies && cookies['incomaker_p']) {
data.p = cookies['incomaker_p']
}
this.getSessionKey();
if (!data.p) {
data.p = this.getSessionKey();
}
return data;
}
// Incomaker support functions
fixCookieSameSite(key, val) {
let cdate = new Date;
cdate.setFullYear(cdate.getFullYear() + 3);
document.cookie = key + '=' + val + '; path=/; expires=' + cdate.toUTCString() + ';SameSite=None; Secure;'
}
getClientCookies() {
let urlS = new URL(location.href);
let incoK = null;
try {
incoK = urlS.searchParams.get('incoK');
if (incoK) {
let cdate = new Date;
cdate.setFullYear(cdate.getFullYear() + 3);
document.cookie = 'incomaker_k=' + incoK + '; path=/; expires=' + cdate.toUTCString() + ';SameSite=None; Secure;'
}
} catch (e) {
console.log(e)
}
try {
let c = urlS.searchParams.get('incoCampId');
if (c) {
let cdate = new Date;
cdate.setDate(cdate.getDate() + 1);
document.cookie = 'incomaker_c=' + c + '; path=/; expires=' + cdate.toUTCString() + ';SameSite=None; Secure;'
}
} catch (e) {
console.log(e)
}
return document.cookie.split(';').map((function (x) {
return x.trim().split('=')
})).reduce((function (key, val) {
let innerVal = val[1];
if (typeof innerVal === 'string') {
innerVal = innerVal.replace(/"/g, '\'')
}
key[val[0]] = innerVal;
if ((val[0].indexOf('##') !== - 1 || val[0] === 'permId') && innerVal.toLowerCase().indexOf('samesite') === - 1) {
fixCookieSameSite(val[0], innerVal)
}
return key
}), {
})
}
getSessionKey() {
let cookies = this.getClientCookies();
let sessionKey;
if (cookies['_____tempSessionKey_____'] === undefined) {
sessionKey = 'e719b1c0-e884-11eb-8083-71fd1566d158';
} else {
sessionKey = cookies['_____tempSessionKey_____']
}
let cdate = new Date;
cdate.setFullYear(cdate.getFullYear() + 3);
document.cookie = '_____tempSessionKey_____=' + sessionKey + '; path=/; expires=' + cdate.toUTCString() + ';SameSite=None; Secure;';
return sessionKey
}
}
window.wpj.Incomaker = WpjIncomaker;