${productsHTML || this.markupSkeleton()}
@@ -1030,16 +1277,13 @@ class IdmHotspot{
`;
}
-
-
-
// SKELETONS MARKUPS
- markupSkeleton(){
+ markupSkeleton() {
let skeletonMarkup = "";
// Tworzenie skeletonow
- for(let i = 0; i <= this.options.limit; i++){
+ for (let i = 0; i <= this.options.limit; i++) {
skeletonMarkup += this.markupSingleSkeleton();
}
@@ -1049,22 +1293,36 @@ class IdmHotspot{
`;
}
- markupSingleSkeleton(){
+ markupSingleSkeleton() {
return `
- ${this.options.showSeries ? `
` : ""}
- ${this.options.showOpinions ? `
` : ""}
+ ${
+ this.options.showSeries
+ ? `
`
+ : ""
+ }
+ ${
+ this.options.showOpinions
+ ? `
`
+ : ""
+ }
- ${this.options.addToBasket ? `
` : ""}
+ ${
+ this.options.addToBasket
+ ? `
`
+ : ""
+ }
- `
+ `;
}
// Banner
- markupBannerContainer({html, position}){
- return `
${html}
`
+ markupBannerContainer({ html, position }) {
+ return `
${html}
`;
}
// ========================================================
@@ -1074,12 +1332,14 @@ class IdmHotspot{
/**
* Obsługuje dodanie produktu do koszyka (GraphQL).
*/
- async handleAddToBasket(e){
- const formEl = e.target.closest(`${this.isClosestForm ? "div" : "form"}.add_to_basket`);
- if(!formEl) return;
- try{
+ async handleAddToBasket(e) {
+ const formEl = e.target.closest(
+ `${this.isClosestForm ? "div" : "form"}.add_to_basket`
+ );
+ if (!formEl) return;
+ try {
// pobieranie danych i elementów
- formEl.classList.add("--loading")
+ formEl.classList.add("--loading");
const buttonEl = formEl.querySelector(".add_to_basket__button");
e.preventDefault();
@@ -1089,65 +1349,76 @@ class IdmHotspot{
// dodanie do koszyka
const res = await fetch(`/graphql/v1/`, {
- method: "POST",
- headers: {
+ method: "POST",
+ headers: {
"Content-Type": "application/json",
- },
- body: IDM_HOTSPOT_ADD_TO_BASKET(id, size, number)
+ },
+ body: IDM_HOTSPOT_ADD_TO_BASKET(id, size, number),
});
const data = await res.json();
// Błąd
- if(data?.data?.addProductsToBasket?.status !== "success") throw new Error(data);
- else{
- localStorage.setItem('addedtoBasket', true);
+ if (data?.data?.addProductsToBasket?.status !== "success")
+ throw new Error(data);
+ else {
+ localStorage.setItem("addedtoBasket", true);
// Obsługiwanie sukcesu
- app_shop.fn?.menu_basket_cache?.();
+ app_shop.fn?.menu_basket_cache();
await app_shop.graphql.trackingEvents(res);
buttonEl.classList.add("--success");
-
+
// STRONA KOSZYKA
- if(typeof app_shop.fn?.basket?.reloadForm === "function"){
- const existingBasketBlockQuantity = document.querySelector(`.basket__block[data-product-id="${id}"][data-product-size="${size}"] input.buy__more_input.quantity__input[type="number"]`);
-
+ if (typeof app_shop.fn?.basket?.reloadForm === "function") {
+ const existingBasketBlockQuantity = document.querySelector(
+ `.basket__block[data-product-id="${id}"][data-product-size="${size}"] input.buy__more_input.quantity__input[type="number"]`
+ );
+
// Dodanie do ilości produktu jeśli już był dodany do koszyka
- if(existingBasketBlockQuantity) existingBasketBlockQuantity.value = +existingBasketBlockQuantity.value + number;
-
+ if (existingBasketBlockQuantity)
+ existingBasketBlockQuantity.value =
+ +existingBasketBlockQuantity.value + number;
+
// Przeładowanie koszyka na stronie basketedit.html
app_shop.fn?.basket?.reloadForm();
}
buttonEl.innerHTML = `
${buttonEl.dataset.success}`;
- setTimeout(()=>{
- buttonEl.innerHTML = `
${buttonEl.dataset.text}`;
- buttonEl.classList.remove("--success");
+ setTimeout(() => {
+ buttonEl.innerHTML = `
${buttonEl.dataset.text}`;
+ buttonEl.classList.remove("--success");
}, 3000);
}
- }catch(err){
- console.error(err);
- Alertek.Error(idmHotspotTextObject["Coś poszło nie tak podczas dodawania do koszyka. Spróbuj ponownie lub odśwież stronę"]);
- buttonEl.innerHTML = `
${buttonEl.dataset.error}`;
- buttonEl.classList.add("--error")
- setTimeout(()=>{
- buttonEl.classList.remove("--error")
- buttonEl.innerHTML = `
${buttonEl.dataset.text}`;
- }, 3000);
- }finally{
- formEl.classList.remove("--loading")
+ } catch (err) {
+ console.error(err);
+ Alertek.Error(
+ idmHotspotTextObject[
+ "Coś poszło nie tak podczas dodawania do koszyka. Spróbuj ponownie lub odśwież stronę"
+ ]
+ );
+ buttonEl.innerHTML = `
${buttonEl.dataset.error}`;
+ buttonEl.classList.add("--error");
+ setTimeout(() => {
+ buttonEl.classList.remove("--error");
+ buttonEl.innerHTML = `
${buttonEl.dataset.text}`;
+ }, 3000);
+ } finally {
+ formEl.classList.remove("--loading");
}
}
- /**
+ /**
* Obsługuje dodanie produktu do Porównania
*/
- async handleAddToCompare(e){
+ async handleAddToCompare(e) {
const compareBtnEl = e.target.closest(".idm-products-banner__compare-btn");
const compareId = compareBtnEl?.dataset?.compareId;
if (!compareBtnEl || !compareId) return;
e.preventDefault();
try {
compareBtnEl.classList.add("--loading");
- const compareUrl = `/${app_shop?.vars?.language?.symbol || "pl"}/settings.html?comparers=add&product=${compareId}`;
+ const compareUrl = `/${
+ app_shop?.vars?.language?.symbol || "pl"
+ }/settings.html?comparers=add&product=${compareId}`;
const res = await fetch(compareUrl);
console.log(res);
@@ -1170,19 +1441,21 @@ class IdmHotspot{
}, 2000);
} catch (err) {
console.error(err);
- Alertek.Error(`${idmHotspotTextObject["Coś poszło nie tak. Spróbuj ponownie później"]}`);
+ Alertek.Error(
+ `${idmHotspotTextObject["Coś poszło nie tak. Spróbuj ponownie później"]}`
+ );
} finally {
compareBtnEl.classList.remove("--loading");
}
}
- /**
+ /**
* Obsługuje dodanie produktu do Listy zakupowej
*/
- handleAddToFav(e){
+ handleAddToFav(e) {
const favEl = e.target.closest(".product__favorite");
- if(!favEl) return;
+ if (!favEl) return;
this.addToFavFn([[favEl.dataset.productId, favEl.dataset.productSize]]);
}
@@ -1190,10 +1463,11 @@ class IdmHotspot{
/**
* Obsługuje kliknięcia w przyciski +/− przy wyborze ilości.
*/
- handleQuantityButtonClick(e){
- if(e.target.classList.contains("idm-products-banner__qty-input")) return e.target.select();
+ handleQuantityButtonClick(e) {
+ if (e.target.classList.contains("idm-products-banner__qty-input"))
+ return e.target.select();
const wrapper = e.target.closest(".idm-products-banner__qty");
-
+
const input = wrapper.querySelector(".idm-products-banner__qty-input");
const step = parseFloat(wrapper.dataset.sellBy || "1");
const precision = parseInt(wrapper.dataset.precision || "0");
@@ -1202,33 +1476,35 @@ class IdmHotspot{
if (e.target.classList.contains("idm-products-banner__qty-increase")) {
current += step;
- if (current > max){
+ if (current > max) {
current = max;
- this.rangeMaxAlert(max)
+ this.rangeMaxAlert(max);
}
- } else if (e.target.classList.contains("idm-products-banner__qty-decrease")) {
+ } else if (
+ e.target.classList.contains("idm-products-banner__qty-decrease")
+ ) {
current -= step;
- if (current < step){
+ if (current < step) {
current = step;
- this.rangeMinAlert(step)
- }
+ this.rangeMinAlert(step);
+ }
}
input.value = current.toFixed(precision);
}
- /**
+ /**
* Obsługuje Pokazywanie zdjęcia na hover
*/
- handleShowSecondImage(e){
+ handleShowSecondImage(e) {
const prodIconEl = e.target.closest(".product__icon");
- if(!prodIconEl) return;
+ if (!prodIconEl) return;
prodIconEl.classList.add("--toggle-icon");
}
- handleHideSecondImage(e){
+ handleHideSecondImage(e) {
const prodIconEl = e.target.closest(".product__icon");
- if(!prodIconEl) return;
+ if (!prodIconEl) return;
prodIconEl.classList.remove("--toggle-icon");
}
@@ -1236,80 +1512,90 @@ class IdmHotspot{
* Walidacja zmian ilości w polu input.
*/
- handleQuantityInputChange(e){
- if(e.target.value > +e.target.max){
- this.rangeMaxAlert(e.target.max)
- e.target.value = +e.target.max
- }else if(e.target.value < +e.target.min){
- this.rangeMinAlert(e.target.min)
+ handleQuantityInputChange(e) {
+ if (e.target.value > +e.target.max) {
+ this.rangeMaxAlert(e.target.max);
+ e.target.value = +e.target.max;
+ } else if (e.target.value < +e.target.min) {
+ this.rangeMinAlert(e.target.min);
e.target.value = +e.target.min;
}
}
-
- handleSelectVersion(e){
- if(e.target.closest(".product__version_more")) return;
+ handleSelectVersion(e) {
+ if (e.target.closest(".product__version_more")) return;
e.preventDefault();
- const closestVersion = e.target.closest(".product__version_single:not(.--active)");
+ const closestVersion = e.target.closest(
+ ".product__version_single:not(.--active)"
+ );
const prodEl = e.target.closest(".product");
- if(!closestVersion || !prodEl) return;
+ if (!closestVersion || !prodEl) return;
this.reloadProduct(prodEl, closestVersion.dataset.productId);
}
- handleSelectSize(e){
+ handleSelectSize(e) {
const inputEl = e.target.closest("input[type='radio']");
- if(!inputEl) return;
+ if (!inputEl) return;
//1. Zmiana Wybranego inputa
const sizeId = inputEl?.dataset?.value;
- const hiddenSizeInputEl = e.target.closest("form.add_to_basket")?.querySelector("input.product__add_size");
+ const hiddenSizeInputEl = e.target
+ .closest("form.add_to_basket")
+ ?.querySelector("input.product__add_size");
- if(!hiddenSizeInputEl || !sizeId) return inputEl.checked = false;
+ if (!hiddenSizeInputEl || !sizeId) return (inputEl.checked = false);
hiddenSizeInputEl.value = sizeId;
// 2. Zmiana ceny
const productEl = e.target.closest(".product.hotspot__product");
- const productData = this.searchForProductData(+productEl?.dataset.id)
- const currSizeData = productData?.sizes.find(size=>size.id === sizeId);
- if(!currSizeData || !productData) return;
+ const productData = this.searchForProductData(+productEl?.dataset.id);
+ const currSizeData = productData?.sizes.find((size) => size.id === sizeId);
+ if (!currSizeData || !productData) return;
const priceEl = productEl.querySelector(".product__prices");
- if(!priceEl) return;
+ if (!priceEl) return;
priceEl.outerHTML = this.markupPrice(productData, sizeId);
this.setHeightDefault();
// 3. Zmiana maksymalnej ilości produktu dozwolonego do kupienia dla range
- if(this.options.addToBasket === "range"){
+ if (this.options.addToBasket === "range") {
const qtyContainer = productEl.querySelector(".idm-products-banner__qty");
- const qtyInput = qtyContainer?.querySelector("input.idm-products-banner__qty-input");
- if(!qtyContainer || !qtyInput) return console.error("Brak elementów qty");
-
+ const qtyInput = qtyContainer?.querySelector(
+ "input.idm-products-banner__qty-input"
+ );
+ if (!qtyContainer || !qtyInput)
+ return console.error("Brak elementów qty");
qtyContainer.dataset.max = currSizeData.amount;
qtyInput.max = currSizeData.amount;
- if(qtyInput.value > currSizeData.amount) qtyInput.value = currSizeData.amount - (currSizeData.amount % +qtyInput.step);
+ if (qtyInput.value > currSizeData.amount)
+ qtyInput.value =
+ currSizeData.amount - (currSizeData.amount % +qtyInput.step);
}
}
- /**
+ /**
* Lazy-load hotspotu – wczytuje dane dopiero, gdy element pojawi się w viewportcie.
*/
handleObserveHotspotOnce() {
if (!this.hotspotEl) return;
- const observer = new IntersectionObserver((entries, obs) => {
- entries.forEach(entry => {
- if (entry.isIntersecting) {
- this.fillHotspot(); // run your callback
- obs.disconnect(); // stop observing after first trigger
- }
- });
- }, { root: null, rootMargin: "0px", threshold: 0.1 });
+ const observer = new IntersectionObserver(
+ (entries, obs) => {
+ entries.forEach((entry) => {
+ if (entry.isIntersecting) {
+ this.fillHotspot(); // run your callback
+ obs.disconnect(); // stop observing after first trigger
+ }
+ });
+ },
+ { root: null, rootMargin: "0px", threshold: 0.1 }
+ );
observer.observe(this.hotspotEl);
}
@@ -1318,30 +1604,40 @@ class IdmHotspot{
// USTAWIANIE ZMIENNYCH CSS DLA RAMKI
// ========================================================
// Ustawia się je w dwa sposoby - jako zmienne css przypisywane do ramki + jako dodaktowy tag style
- cssSetAllVariables(){
+ cssSetAllVariables() {
this.cssVariableVersionColumnCount();
this.cssVariableNameClamp();
}
- cssSetAllTags(){
+ cssSetAllTags() {
this.cssInsertStyleTag();
}
- cssVariableNameClamp(){
- if(this.cssVariables?.nameClamp) this.cssSetVariable("--hotspot-name-clamp", this.cssVariables.nameClamp);
+ cssVariableNameClamp() {
+ if (this.cssVariables?.nameClamp)
+ this.cssSetVariable("--hotspot-name-clamp", this.cssVariables.nameClamp);
}
- cssVariableVersionColumnCount(){
- if(!this.options?.selectVersion) return false;
- this.cssSetVariable("--version-desktop-columns", this.cssVariables?.version?.columnDesktop || 5)
- this.cssSetVariable("--version-tablet-columns", this.cssVariables?.version?.columnTablet || 4)
- this.cssSetVariable("--version-mobile-columns", this.cssVariables?.version?.columnMobile || 4)
+ cssVariableVersionColumnCount() {
+ if (!this.options?.selectVersion) return false;
+ this.cssSetVariable(
+ "--version-desktop-columns",
+ this.cssVariables?.version?.columnDesktop || 5
+ );
+ this.cssSetVariable(
+ "--version-tablet-columns",
+ this.cssVariables?.version?.columnTablet || 4
+ );
+ this.cssSetVariable(
+ "--version-mobile-columns",
+ this.cssVariables?.version?.columnMobile || 4
+ );
}
- cssSetVariable(name, value){
+ cssSetVariable(name, value) {
this.hotspotEl.style.setProperty(name, value);
}
- cssVersionColumnStyle(){
+ cssVersionColumnStyle() {
return `
@media (max-width: 756px){
#${this.hotspotEl.id}.hotspot__wrapper.idm__hotspot .product__version_single:nth-of-type(n + ${this.cssVariables?.version?.columnMobile}){
@@ -1358,53 +1654,61 @@ class IdmHotspot{
display: none;
}
}
- `
+ `;
}
- cssSkeletonStyle(){
+ cssSkeletonStyle() {
let skeletonStyles = "";
const skeletonStylesObj = {};
// Budowanie skeletona w zależności od ustawień hotspota
- if(this.options.swiper){
+ if (this.options.swiper) {
skeletonStylesObj[0] = this.options.swiper?.slidesPerView;
- for (const [key, value] of Object.entries(this.options.swiper.breakpoints)) {
- if(value.slidesPerView) skeletonStylesObj[key] = value.slidesPerView
+ for (const [key, value] of Object.entries(
+ this.options.swiper.breakpoints
+ )) {
+ if (value.slidesPerView) skeletonStylesObj[key] = value.slidesPerView;
}
- }else{
+ } else {
// mobile 2
skeletonStylesObj[0] = 2;
// desktop + tablet 4
skeletonStylesObj[757] = 4;
}
-
for (const [key, value] of Object.entries(skeletonStylesObj)) {
let style = `
- #${this.hotspotEl.id}.hotspot__wrapper.idm__hotspot.--hotspot-loading .idm_hotspot__skeleton_product{
+ #${
+ this.hotspotEl.id
+ }.hotspot__wrapper.idm__hotspot.--hotspot-loading .idm_hotspot__skeleton_product{
width: ${(1 / value) * 100}%
}
- `
- skeletonStyles += key === 0 ? style : `
+ `;
+ skeletonStyles +=
+ key === 0
+ ? style
+ : `
@media (min-width: ${key}px){
${style}
}
- `
+ `;
}
return skeletonStyles;
}
- cssInsertStyleTag(){
- this.hotspotEl.insertAdjacentHTML("beforeend", `
+ cssInsertStyleTag() {
+ this.hotspotEl.insertAdjacentHTML(
+ "beforeend",
+ `
`)
+ `
+ );
}
-
- cssSetAll(){
+ cssSetAll() {
this.cssSetAllVariables();
this.cssSetAllTags();
}
@@ -1412,108 +1716,117 @@ class IdmHotspot{
// FUNKCJE POMOCNICZE
// ========================================================
- getProdTotalAmount(prod){
- return prod.sizes.reduce((acc, val) => val.amount === -1 || acc === -1 ? -1 : acc + val.amount, 0);
+ getProdTotalAmount(prod) {
+ return prod.sizes.reduce(
+ (acc, val) => (val.amount === -1 || acc === -1 ? -1 : acc + val.amount),
+ 0
+ );
}
/**
* Wyświetla alert o maksymalnej ilości produktu.
*/
- rangeMaxAlert(max){
- Alertek.Error(`${idmHotspotTextObject["Maksymalna liczba sztuk tego towaru które możesz dodać do koszyka to:"]} ${max}`)
+ rangeMaxAlert(max) {
+ Alertek.Error(
+ `${idmHotspotTextObject["Maksymalna liczba sztuk tego towaru które możesz dodać do koszyka to:"]} ${max}`
+ );
}
/**
* Wyświetla alert o minimalnej ilości produktu.
*/
- rangeMinAlert(min){
- Alertek.Error(`${idmHotspotTextObject["Minimalna liczba sztuk tego towaru które możesz dodać do koszyka to:"]} ${min}`)
+ rangeMinAlert(min) {
+ Alertek.Error(
+ `${idmHotspotTextObject["Minimalna liczba sztuk tego towaru które możesz dodać do koszyka to:"]} ${min}`
+ );
}
/**
* Ustawia jednakową wysokość elementów (np. nazw lub cen).
*/
-
- setHeight(options){
- const { selector, selectors, container } = options || {}
- if ((!selector && !selectors) || !container) return
- const containerElement = document.querySelector(container)
- if (!containerElement) return
+ setHeight(options) {
+ const { selector, selectors, container } = options || {};
+ if ((!selector && !selectors) || !container) return;
- const adjustAllHeights = itemSelector => {
- const targets = containerElement.querySelectorAll(itemSelector)
- if (!targets.length) return
+ const containerElement = document.querySelector(container);
+ if (!containerElement) return;
- targets.forEach(el => (el.style.minHeight = ''))
+ const adjustAllHeights = (itemSelector) => {
+ const targets = containerElement.querySelectorAll(itemSelector);
+ if (!targets.length) return;
- const max = Math.max(...[...targets].map(el => el.offsetHeight || 0))
+ targets.forEach((el) => (el.style.minHeight = ""));
- targets.forEach(el => (el.style.minHeight = `${max}px`))
- }
+ const max = Math.max(...[...targets].map((el) => el.offsetHeight || 0));
- if (selector) adjustAllHeights(selector)
- if (selectors?.length) selectors.forEach(adjustAllHeights)
+ targets.forEach((el) => (el.style.minHeight = `${max}px`));
+ };
+
+ if (selector) adjustAllHeights(selector);
+ if (selectors?.length) selectors.forEach(adjustAllHeights);
}
- setHeightDefault(){
+ setHeightDefault() {
this.setHeight({
selectors: [
- `#${this.id} .product__prices`,
- `#${this.id} .product__name`,
- `#${this.id} .product__series`,
- `#${this.id} .product__producer`,
+ `#${this.id} .product__prices`,
+ `#${this.id} .product__name`,
+ `#${this.id} .product__series`,
+ `#${this.id} .product__producer`,
],
container: `#${this.id} .products__wrapper`,
});
}
-
/**
* Przeładowanie pojedynczego produktu
*/
- async reloadProduct(prodEl, newProdId){
- try{
+ async reloadProduct(prodEl, newProdId) {
+ try {
prodEl.classList.add("--loading");
let productData = this.searchForProductData(newProdId);
- if(!productData){
+ if (!productData) {
const res = await fetch(`/graphql/v1/`, {
method: "POST",
headers: {
- "Content-Type": "application/json",
+ "Content-Type": "application/json",
},
body: IDM_PRODUCT_GQL(`productId: ${newProdId}`, this.priceType),
});
const data = await res.json();
productData = data?.data?.product?.product;
- if(productData) this.productsVersions.push(productData);
+ if (productData) this.productsVersions.push(productData);
}
- if(!productData) throw new Error("Nie udało się pobrać danych o produkcie");
-
+ if (!productData)
+ throw new Error("Nie udało się pobrać danych o produkcie");
const prodHTML = this.markupProductInnerHTML(productData);
-
+
prodEl.dataset.id = newProdId;
prodEl.innerHTML = prodHTML;
- if(productData.price.price[this.priceType].value === 0) prodEl.classList.add("--phone");
+ if (productData.price.price[this.priceType].value === 0)
+ prodEl.classList.add("--phone");
else prodEl.classList.remove("--phone");
this.initSingleEvent(prodEl);
this.setHeightDefault();
- }catch(err){
+ } catch (err) {
Alertek?.Error(idmHotspotTextObject["Błąd przy pobieraniu danych"]);
console.error(err);
- }finally{
+ } finally {
prodEl.classList.remove("--loading");
}
}
-
- searchForProductData(searchedId){
+ searchForProductData(searchedId) {
let productData;
- productData = this.products.find(prod=>prod.id === +searchedId) || this.productsVersions.find(prod=>prod.id === +searchedId) || null;
+ productData =
+ this.products.find((prod) => prod.id === +searchedId) ||
+ this.productsVersions.find((prod) => prod.id === +searchedId) ||
+ null;
return productData;
}
@@ -1521,335 +1834,463 @@ class IdmHotspot{
// ========================================================
// XML to GraphQL
// ========================================================
- xmlGetGrossNetPrices({priceNode, name}){
+ xmlGetGrossNetPrices({ priceNode, name }) {
return {
- gross: {
- value: priceNode?.getAttribute(`${name}`) !== null ? +priceNode.getAttribute(`${name}`) : undefined,
- formatted: priceNode?.getAttribute(`${name}_formatted`),
- },
- net: {
- value: priceNode?.getAttribute(`${name}_net`) !== null ? +priceNode.getAttribute(`${name}_net`) : undefined,
- formatted: priceNode?.getAttribute(`${name}_net_formatted`),
- }
- }
+ gross: {
+ value:
+ priceNode?.getAttribute(`${name}`) !== null
+ ? +priceNode.getAttribute(`${name}`)
+ : undefined,
+ formatted: priceNode?.getAttribute(`${name}_formatted`),
+ },
+ net: {
+ value:
+ priceNode?.getAttribute(`${name}_net`) !== null
+ ? +priceNode.getAttribute(`${name}_net`)
+ : undefined,
+ formatted: priceNode?.getAttribute(`${name}_net_formatted`),
+ },
+ };
}
- xmlGetPriceFromNode(priceNode){
+ xmlGetPriceFromNode(priceNode) {
const priceObj = {
- price: {
- gross: {
- value: priceNode?.getAttribute("value") !== null ? +priceNode.getAttribute("value") : undefined,
- formatted: priceNode?.getAttribute("price_formatted"),
- },
- net: {
- value: priceNode?.getAttribute("price_net") !== null ? +priceNode.getAttribute("price_net") : undefined,
- formatted: priceNode?.getAttribute("price_net_formatted"),
- }
+ price: {
+ gross: {
+ value:
+ priceNode?.getAttribute("value") !== null
+ ? +priceNode.getAttribute("value")
+ : undefined,
+ formatted: priceNode?.getAttribute("price_formatted"),
},
- rebateCodeActive: priceNode?.getAttribute("rebate_code_active") === "y" ? true : false,
- omnibusPrice: {
- ...this.xmlGetGrossNetPrices({priceNode, name: "omnibus_price"})
+ net: {
+ value:
+ priceNode?.getAttribute("price_net") !== null
+ ? +priceNode.getAttribute("price_net")
+ : undefined,
+ formatted: priceNode?.getAttribute("price_net_formatted"),
},
- // depositPrice: {},
- // depositPriceUnit: {},
- // totalDepositPrice: {},
- // totalDepositPriceUnit: {},
- omnibusPriceDetails: {
- // unit: {},
- youSave: {
- ...this.xmlGetGrossNetPrices({priceNode, name: "omnibus_yousave"})
- },
- youSavePercent: priceNode?.getAttribute("price_net") !== null ? +priceNode.getAttribute("omnibus_yousave_percent") : undefined,
- omnibusPriceIsHigherThanSellingPrice: priceNode?.getAttribute("omnibus_price_is_higher_than_selling_price") === "true" ? true : false,
- // newPriceEffectiveUntil: {},
- },
- tax: {
- // worth: {},
- vatPercent: priceNode?.getAttribute("tax") !== null ? +priceNode.getAttribute("tax") : undefined,
- // vatString: ""
- },
- beforeRebate: {
- ...this.xmlGetGrossNetPrices({priceNode, name: "beforerebate"})
- },
- // beforeRebateDetails: {
- // youSave: {
-
- // },
- // youSavePercent: "",
- // unit: {}
- // },
- // crossedPrice: {},
- youSave: {
- ...this.xmlGetGrossNetPrices({priceNode, name: "yousave"})
- },
- youSavePercent: priceNode?.getAttribute("yousave_percent") !== null ? +priceNode.getAttribute("yousave_percent") : undefined,
+ },
+ rebateCodeActive:
+ priceNode?.getAttribute("rebate_code_active") === "y" ? true : false,
+ omnibusPrice: {
+ ...this.xmlGetGrossNetPrices({ priceNode, name: "omnibus_price" }),
+ },
+ // depositPrice: {},
+ // depositPriceUnit: {},
+ // totalDepositPrice: {},
+ // totalDepositPriceUnit: {},
+ omnibusPriceDetails: {
// unit: {},
- max: {
- ...this.xmlGetGrossNetPrices({priceNode, name: "maxprice"})
+ youSave: {
+ ...this.xmlGetGrossNetPrices({ priceNode, name: "omnibus_yousave" }),
},
- // maxPriceUnit: {},
- // suggested: {},
- unitConvertedPrice: {
- ...this.xmlGetGrossNetPrices({priceNode, name: "unit_converted_price"})
+ youSavePercent:
+ priceNode?.getAttribute("price_net") !== null
+ ? +priceNode.getAttribute("omnibus_yousave_percent")
+ : undefined,
+ omnibusPriceIsHigherThanSellingPrice:
+ priceNode?.getAttribute(
+ "omnibus_price_is_higher_than_selling_price"
+ ) === "true"
+ ? true
+ : false,
+ // newPriceEffectiveUntil: {},
+ },
+ tax: {
+ // worth: {},
+ vatPercent:
+ priceNode?.getAttribute("tax") !== null
+ ? +priceNode.getAttribute("tax")
+ : undefined,
+ // vatString: ""
+ },
+ beforeRebate: {
+ ...this.xmlGetGrossNetPrices({ priceNode, name: "beforerebate" }),
+ },
+ // beforeRebateDetails: {
+ // youSave: {
+
+ // },
+ // youSavePercent: "",
+ // unit: {}
+ // },
+ // crossedPrice: {},
+ youSave: {
+ ...this.xmlGetGrossNetPrices({ priceNode, name: "yousave" }),
+ },
+ youSavePercent:
+ priceNode?.getAttribute("yousave_percent") !== null
+ ? +priceNode.getAttribute("yousave_percent")
+ : undefined,
+ // unit: {},
+ max: {
+ ...this.xmlGetGrossNetPrices({ priceNode, name: "maxprice" }),
+ },
+ // maxPriceUnit: {},
+ // suggested: {},
+ unitConvertedPrice: {
+ ...this.xmlGetGrossNetPrices({
+ priceNode,
+ name: "unit_converted_price",
+ }),
+ },
+ // rebateNumber: {},
+ lastPriceChangeDate: priceNode?.getAttribute("last_price_change_date"),
+ // advancePrice: {},
+ promotionDuration: {
+ promotionTill: {
+ date: {
+ date: priceNode
+ ?.getAttribute("last_price_change_date")
+ ?.split("-")?.[2],
+ month: priceNode
+ ?.getAttribute("last_price_change_date")
+ ?.split("-")?.[1],
+ year: priceNode
+ ?.getAttribute("last_price_change_date")
+ ?.split("-")?.[0],
+ // weekDay: "",
+ // formatted: ""
+ },
+ time: {
+ hour: priceNode?.getAttribute("promotiontillhour")?.split(":")?.[0],
+ minutes: priceNode
+ ?.getAttribute("promotiontillhour")
+ ?.split(":")?.[1],
+ seconds: priceNode
+ ?.getAttribute("promotiontillhour")
+ ?.split(":")?.[2],
+ },
+ // timestamp: ""
},
- // rebateNumber: {},
- lastPriceChangeDate: priceNode?.getAttribute("last_price_change_date"),
- // advancePrice: {},
- promotionDuration: {
- promotionTill: {
- date: {
- date: priceNode?.getAttribute("last_price_change_date")?.split("-")?.[2],
- month: priceNode?.getAttribute("last_price_change_date")?.split("-")?.[1],
- year: priceNode?.getAttribute("last_price_change_date")?.split("-")?.[0],
- // weekDay: "",
- // formatted: ""
- },
- time: {
- hour: priceNode?.getAttribute("promotiontillhour")?.split(":")?.[0],
- minutes: priceNode?.getAttribute("promotiontillhour")?.split(":")?.[1],
- seconds: priceNode?.getAttribute("promotiontillhour")?.split(":")?.[2],
- },
- // timestamp: ""
- },
- // discountTill: {},
- // distinguishedTill: {},
- // specialTill: {},
- },
- // subscriptionPrice: {},
+ // discountTill: {},
+ // distinguishedTill: {},
+ // specialTill: {},
+ },
+ // subscriptionPrice: {},
};
return priceObj;
}
- xmlGetTraitsFromNode(node){
+ xmlGetTraitsFromNode(node) {
const awardedParameters = [];
- node.querySelectorAll(":scope > trait").forEach(trait=>{
- const currParameter = awardedParameters.find(param=>param.id === trait.getAttribute("groupid")) || {
- id: trait.getAttribute("groupid"),
- name: trait.getAttribute("groupdescription"),
- // description: "",
- values: [],
- // contextValue: "",
- // search: {
- // icon: "",
- // },
- }
+ node.querySelectorAll(":scope > trait").forEach((trait) => {
+ const currParameter = awardedParameters.find(
+ (param) => param.id === trait.getAttribute("groupid")
+ ) || {
+ id: trait.getAttribute("groupid"),
+ name: trait.getAttribute("groupdescription"),
+ // description: "",
+ values: [],
+ // contextValue: "",
+ // search: {
+ // icon: "",
+ // },
+ };
- currParameter.values.push({
- id: trait.getAttribute("traitid"),
- name: trait.getAttribute("traitid"),
- link: trait.getAttribute("link"),
- // description: "",
- // search: {
- // icon: ""
- // }
- })
+ currParameter.values.push({
+ id: trait.getAttribute("traitid"),
+ name: trait.getAttribute("traitid"),
+ link: trait.getAttribute("link"),
+ // description: "",
+ // search: {
+ // icon: ""
+ // }
+ });
-
- if(currParameter.values.length === 1) awardedParameters.push(currParameter);
+ if (currParameter.values.length === 1)
+ awardedParameters.push(currParameter);
});
-
return awardedParameters;
}
- async xmlGetData(){
- if(!this.source?.link) return null;
- try{
- const res = await fetch(`${this.source?.link}${this.source?.link.includes("?") ? "&getProductXML=t" : "?getProductXML=t"}`);
+ async xmlGetData() {
+ if (!this.source?.link) return null;
+ try {
+ const res = await fetch(
+ `${this.source?.link}${
+ this.source?.link.includes("?")
+ ? "&getProductXML=t"
+ : "?getProductXML=t"
+ }`
+ );
const str = await res.text();
const xml = new window.DOMParser().parseFromString(str, "text/xml");
const now = new Date();
const allProducts = xml.querySelectorAll("product");
- if(allProducts.length === 0) throw new Error("Nie znaleziono produktów");
-
+ if (allProducts.length === 0) throw new Error("Nie znaleziono produktów");
+
const data = [];
+ allProducts.forEach((prod, index) => {
+ if (this.options.limit <= index) return;
- allProducts.forEach((prod, index)=>{
- if(this.options.limit <= index) return;
+ // NODES
+ const priceNode = prod.querySelector(":scope >price");
+ const firmNode = prod.querySelector(":scope > firm");
+ const categoryNode = prod.querySelector(":scope > category");
+ const seriesNode = prod.querySelector(":scope > series");
+ const commentsNode = prod.querySelector(":scope > comments");
+ const sizesNode = prod.querySelector(":scope > sizes");
+ const versionsNode = prod.querySelector(":scope > versions");
- // NODES
- const priceNode = prod.querySelector(":scope >price");
- const firmNode = prod.querySelector(":scope > firm");
- const categoryNode = prod.querySelector(":scope > category");
- const seriesNode = prod.querySelector(":scope > series");
- const commentsNode = prod.querySelector(":scope > comments");
- const sizesNode = prod.querySelector(":scope > sizes");
- const versionsNode = prod.querySelector(":scope > versions");
+ // STREFY
+ const zones = [];
- // STREFY
- const zones = [];
+ if (prod.getAttribute("promo") === "yes") zones.push("promotion");
+ if (prod.getAttribute("discount") === "yes") zones.push("discount");
+ if (prod.getAttribute("distinguished") === "yes")
+ zones.push("distinguished");
+ if (prod.getAttribute("special") === "yes") zones.push("special");
+ if (prod.getAttribute("new") === "yes") zones.push("new");
+ if (prod.getAttribute("bestseller") === "yes") zones.push("bestseller");
+ if (prod.getAttribute("subscription") === "yes")
+ zones.push("subscription");
- if(prod.getAttribute("promo") === "yes") zones.push("promotion");
- if(prod.getAttribute("discount") === "yes") zones.push("discount");
- if(prod.getAttribute("distinguished") === "yes") zones.push("distinguished");
- if(prod.getAttribute("special") === "yes") zones.push("special");
- if(prod.getAttribute("new") === "yes") zones.push("new");
- if(prod.getAttribute("bestseller") === "yes") zones.push("bestseller");
- if(prod.getAttribute("subscription") === "yes") zones.push("subscription");
-
- // ZDJĘCIA
- const enclosuresImages = [];
- prod.querySelectorAll(":scope > enclosures > images > enclosure").forEach(img=>{
- enclosuresImages.push({
- position: img.getAttribute("position"),
- type: img.getAttribute("type"),
- typeSecond: img.getAttribute("type_second"),
- url: img.getAttribute("url"),
- urlSecond: img.getAttribute("url_second"),
- width: img.getAttribute("width"),
- height: img.getAttribute("height"),
- iconUrl: img.getAttribute("icon"),
- iconUrlSecond: img.getAttribute("icon_second"),
- iconWidth: img.getAttribute("icon_width"),
- iconHeight: img.getAttribute("icon_height"),
- mediumUrl: img.getAttribute("medium"),
- mediumUrlSecond: img.getAttribute("medium_second"),
- mediumWidth: img.getAttribute("medium_width"),
- mediumHeight: img.getAttribute("medium_height"),
- })
- })
-
- // SIZES
- const sizes = [];
- sizesNode.querySelectorAll(":scope > size").forEach(size=>{
- const availabilityNode = size.querySelector(":scope > availability");
- const shippingTimeNode = availabilityNode.querySelector(":scope > shipping_time");
- const sizePriceNode = size.querySelector(":scope > price");
- const weightNode = size.querySelector(":scope > weight");
-
- sizes.push({
- id: size?.getAttribute("type"),
- name: size?.getAttribute("name"),
- code: size?.getAttribute("code"),
- codeProducer: size?.getAttribute("code_producer"),
- codeExtern: size?.getAttribute("code_extern"),
- amount: size?.getAttribute("amount") !== null ? +size.getAttribute("amount") : undefined,
- amount_mo: size?.getAttribute("amount_mo") !== null ? +size.getAttribute("amount_mo") : undefined,
- amount_mw: size?.getAttribute("amount_mw") !== null ? +size.getAttribute("amount_mw") : undefined,
- amount_mp: size?.getAttribute("amount_mp") !== null ? +size.getAttribute("amount_mp") : undefined,
- weight: weightNode?.getAttribute("g") !== null ? +weightNode.getAttribute("g") : undefined,
- availability: {
- visible: availabilityNode?.getAttribute("visible") === "y" ? true : false,
- description: availabilityNode?.getAttribute("status_description"),
- status: availabilityNode?.getAttribute("status"),
- icon: availabilityNode?.getAttribute("status_gfx"),
- deliveryDate: shippingTimeNode?.getAttribute("today") === "true" ? `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate().toString().padStart(2, 0)}` : availabilityNode?.getAttribute("delivery_date"),
- minimumStockOfProduct: availabilityNode?.getAttribute("minimum_stock_of_product"),
- // descriptionTel: "",
- // iconTel: "",
- },
- shipping: {
- today: shippingTimeNode?.getAttribute("today") === "true" ? true : false,
- },
- price: this.xmlGetPriceFromNode(sizePriceNode),
- // amountWholesale: "",
- })
- })
-
- // VERSIONS
- const versions = [];
- versionsNode.querySelectorAll(":scope > version").forEach(ver=>{
- versions.push({
- id: ver?.getAttribute("id") !== null ? +ver?.getAttribute("id") : undefined,
- name: ver?.getAttribute("name"),
- icon: ver?.getAttribute("gfx"),
- iconSecond: ver?.getAttribute("gfx_second"),
- iconSmall: ver?.getAttribute("gfx_small"),
- iconSmallSecond: ver?.getAttribute("gfx_small_second"),
- productIcon: ver?.getAttribute("icon"),
- productIconSecond: ver?.getAttribute("icon_second"),
- productIconSmall: ver?.getAttribute("icon_small"),
- productIconSmallSecond: ver?.getAttribute("icon_small_second"),
- link: ver?.getAttribute("link"),
- // parameterValues: [],
- });
+ // ZDJĘCIA
+ const enclosuresImages = [];
+ prod
+ .querySelectorAll(":scope > enclosures > images > enclosure")
+ .forEach((img) => {
+ enclosuresImages.push({
+ position: img.getAttribute("position"),
+ type: img.getAttribute("type"),
+ typeSecond: img.getAttribute("type_second"),
+ url: img.getAttribute("url"),
+ urlSecond: img.getAttribute("url_second"),
+ width: img.getAttribute("width"),
+ height: img.getAttribute("height"),
+ iconUrl: img.getAttribute("icon"),
+ iconUrlSecond: img.getAttribute("icon_second"),
+ iconWidth: img.getAttribute("icon_width"),
+ iconHeight: img.getAttribute("icon_height"),
+ mediumUrl: img.getAttribute("medium"),
+ mediumUrlSecond: img.getAttribute("medium_second"),
+ mediumWidth: img.getAttribute("medium_width"),
+ mediumHeight: img.getAttribute("medium_height"),
+ });
});
- // DATA
- const typeParts = prod?.getAttribute("product_type").split("_");
- data.push({
- id: prod?.getAttribute("id") !== null ? +prod?.getAttribute("id") : undefined,
- type: typeParts[1] === "item" ? typeParts[0] : typeParts[1],
- code: prod?.getAttribute("code"),
- name: prod.querySelector(":scope > name")?.textContent,
- versionName: prod.querySelector(":scope > versions")?.getAttribute("name"),
- description: prod.querySelector(":scope > description")?.textContent,
- // longDescription: prod.querySelector("vlongdescription")?.textContent,
- // longDescriptionSections: "",
- link: prod?.getAttribute("link"),
- zones,
- icon: prod.querySelector(":scope > icon")?.textContent,
- iconSecond: prod.querySelector(":scope > icon_second")?.textContent,
- iconSmall: prod.querySelector(":scope > icon_small")?.textContent,
- iconSmallSecond: prod.querySelector(":scope > icon_small_second")?.textContent,
- price: this.xmlGetPriceFromNode(priceNode),
- unit: {
- id: sizesNode?.getAttribute("unit_id"),
- name: sizesNode?.getAttribute("unit"),
- singular: sizesNode?.getAttribute("unit_single"),
- plural: sizesNode?.getAttribute("unit_plural"),
- fraction: sizesNode?.getAttribute("unit_fraction"),
- sellBy: sizesNode?.getAttribute("unit_sellby") !== null ? +sizesNode?.getAttribute("unit_sellby") : undefined,
- precision: sizesNode?.getAttribute("unit_precision") !== null ? +sizesNode?.getAttribute("unit_precision") : undefined,
- unitConvertedFormat: sizesNode?.getAttribute("unit_converted_format"),
- },
- producer: {
- id: firmNode?.getAttribute("id") !== null ? +firmNode?.getAttribute("id") : undefined,
- name: firmNode?.getAttribute("name"),
- link: firmNode?.getAttribute("productslink"),
- searchIcons: {
- icon: firmNode?.getAttribute("icon"),
- },
- // projectorIcons: {},
- },
- category: {
- id: categoryNode?.getAttribute("id") !== null ? +categoryNode?.getAttribute("id") : undefined,
- name: categoryNode?.getAttribute("name"),
- link: categoryNode?.getAttribute("productslink")
- },
- group: {
- id: versionsNode?.getAttribute("id") !== null ? +versionsNode?.getAttribute("id") : undefined,
- name: versionsNode?.getAttribute("name"),
- displayAll: versionsNode?.getAttribute("display_all") === "true" ? true : false,
- link: versionsNode?.getAttribute("link"),
- versions,
- groupParameters: this.xmlGetTraitsFromNode(versionsNode.querySelector(":scope > groupParameters"))
- },
- opinion: {
- rating: commentsNode?.getAttribute("avg") !== null ? +commentsNode?.getAttribute("avg") : undefined,
- count: commentsNode?.getAttribute("count") !== null ? +commentsNode?.getAttribute("count") : undefined,
- link: commentsNode?.getAttribute("link")
- },
- enclosuresImages,
- // enclosuresAttachments: [],
- series: {
- id: seriesNode?.getAttribute("id") !== null ? +seriesNode?.getAttribute("id") : undefined,
- name: seriesNode?.getAttribute("name"),
- link: seriesNode?.getAttribute("link")
- },
- awardedParameters: this.xmlGetTraitsFromNode(prod.querySelector(":scope > traits")),
- // parameteresWithContext: [],
- sizes,
- points: priceNode?.getAttribute("points") !== null ? +priceNode?.getAttribute("points") : undefined,
- pointsReceive: priceNode?.getAttribute("points_recive") !== null ? +priceNode?.getAttribute("points_recive") : undefined,
- // subscription: {},
- // bundled: [],
- // responsibleEntity: {},
- })
- })
+ // SIZES
+ const sizes = [];
+ sizesNode.querySelectorAll(":scope > size").forEach((size) => {
+ const availabilityNode = size.querySelector(":scope > availability");
+ const shippingTimeNode = availabilityNode.querySelector(
+ ":scope > shipping_time"
+ );
+ const sizePriceNode = size.querySelector(":scope > price");
+ const weightNode = size.querySelector(":scope > weight");
+
+ sizes.push({
+ id: size?.getAttribute("type"),
+ name: size?.getAttribute("name"),
+ code: size?.getAttribute("code"),
+ codeProducer: size?.getAttribute("code_producer"),
+ codeExtern: size?.getAttribute("code_extern"),
+ amount:
+ size?.getAttribute("amount") !== null
+ ? +size.getAttribute("amount")
+ : undefined,
+ amount_mo:
+ size?.getAttribute("amount_mo") !== null
+ ? +size.getAttribute("amount_mo")
+ : undefined,
+ amount_mw:
+ size?.getAttribute("amount_mw") !== null
+ ? +size.getAttribute("amount_mw")
+ : undefined,
+ amount_mp:
+ size?.getAttribute("amount_mp") !== null
+ ? +size.getAttribute("amount_mp")
+ : undefined,
+ weight:
+ weightNode?.getAttribute("g") !== null
+ ? +weightNode.getAttribute("g")
+ : undefined,
+ availability: {
+ visible:
+ availabilityNode?.getAttribute("visible") === "y"
+ ? true
+ : false,
+ description: availabilityNode?.getAttribute("status_description"),
+ status: availabilityNode?.getAttribute("status"),
+ icon: availabilityNode?.getAttribute("status_gfx"),
+ deliveryDate:
+ shippingTimeNode?.getAttribute("today") === "true"
+ ? `${now.getFullYear()}-${now.getMonth() + 1}-${now
+ .getDate()
+ .toString()
+ .padStart(2, 0)}`
+ : availabilityNode?.getAttribute("delivery_date"),
+ minimumStockOfProduct: availabilityNode?.getAttribute(
+ "minimum_stock_of_product"
+ ),
+ // descriptionTel: "",
+ // iconTel: "",
+ },
+ shipping: {
+ today:
+ shippingTimeNode?.getAttribute("today") === "true"
+ ? true
+ : false,
+ },
+ price: this.xmlGetPriceFromNode(sizePriceNode),
+ // amountWholesale: "",
+ });
+ });
+
+ // VERSIONS
+ const versions = [];
+ versionsNode.querySelectorAll(":scope > version").forEach((ver) => {
+ versions.push({
+ id:
+ ver?.getAttribute("id") !== null
+ ? +ver?.getAttribute("id")
+ : undefined,
+ name: ver?.getAttribute("name"),
+ icon: ver?.getAttribute("gfx"),
+ iconSecond: ver?.getAttribute("gfx_second"),
+ iconSmall: ver?.getAttribute("gfx_small"),
+ iconSmallSecond: ver?.getAttribute("gfx_small_second"),
+ productIcon: ver?.getAttribute("icon"),
+ productIconSecond: ver?.getAttribute("icon_second"),
+ productIconSmall: ver?.getAttribute("icon_small"),
+ productIconSmallSecond: ver?.getAttribute("icon_small_second"),
+ link: ver?.getAttribute("link"),
+ // parameterValues: [],
+ });
+ });
+
+ // DATA
+ const typeParts = prod?.getAttribute("product_type").split("_");
+ data.push({
+ id:
+ prod?.getAttribute("id") !== null
+ ? +prod?.getAttribute("id")
+ : undefined,
+ type: typeParts[1] === "item" ? typeParts[0] : typeParts[1],
+ code: prod?.getAttribute("code"),
+ name: prod.querySelector(":scope > name")?.textContent,
+ versionName: prod
+ .querySelector(":scope > versions")
+ ?.getAttribute("name"),
+ description: prod.querySelector(":scope > description")?.textContent,
+ // longDescription: prod.querySelector("vlongdescription")?.textContent,
+ // longDescriptionSections: "",
+ link: prod?.getAttribute("link"),
+ zones,
+ icon: prod.querySelector(":scope > icon")?.textContent,
+ iconSecond: prod.querySelector(":scope > icon_second")?.textContent,
+ iconSmall: prod.querySelector(":scope > icon_small")?.textContent,
+ iconSmallSecond: prod.querySelector(":scope > icon_small_second")
+ ?.textContent,
+ price: this.xmlGetPriceFromNode(priceNode),
+ unit: {
+ id: sizesNode?.getAttribute("unit_id"),
+ name: sizesNode?.getAttribute("unit"),
+ singular: sizesNode?.getAttribute("unit_single"),
+ plural: sizesNode?.getAttribute("unit_plural"),
+ fraction: sizesNode?.getAttribute("unit_fraction"),
+ sellBy:
+ sizesNode?.getAttribute("unit_sellby") !== null
+ ? +sizesNode?.getAttribute("unit_sellby")
+ : undefined,
+ precision:
+ sizesNode?.getAttribute("unit_precision") !== null
+ ? +sizesNode?.getAttribute("unit_precision")
+ : undefined,
+ unitConvertedFormat: sizesNode?.getAttribute(
+ "unit_converted_format"
+ ),
+ },
+ producer: {
+ id:
+ firmNode?.getAttribute("id") !== null
+ ? +firmNode?.getAttribute("id")
+ : undefined,
+ name: firmNode?.getAttribute("name"),
+ link: firmNode?.getAttribute("productslink"),
+ searchIcons: {
+ icon: firmNode?.getAttribute("icon"),
+ },
+ // projectorIcons: {},
+ },
+ category: {
+ id:
+ categoryNode?.getAttribute("id") !== null
+ ? +categoryNode?.getAttribute("id")
+ : undefined,
+ name: categoryNode?.getAttribute("name"),
+ link: categoryNode?.getAttribute("productslink"),
+ },
+ group: {
+ id:
+ versionsNode?.getAttribute("id") !== null
+ ? +versionsNode?.getAttribute("id")
+ : undefined,
+ name: versionsNode?.getAttribute("name"),
+ displayAll:
+ versionsNode?.getAttribute("display_all") === "true"
+ ? true
+ : false,
+ link: versionsNode?.getAttribute("link"),
+ versions,
+ groupParameters: this.xmlGetTraitsFromNode(
+ versionsNode.querySelector(":scope > groupParameters")
+ ),
+ },
+ opinion: {
+ rating:
+ commentsNode?.getAttribute("avg") !== null
+ ? +commentsNode?.getAttribute("avg")
+ : undefined,
+ count:
+ commentsNode?.getAttribute("count") !== null
+ ? +commentsNode?.getAttribute("count")
+ : undefined,
+ link: commentsNode?.getAttribute("link"),
+ },
+ enclosuresImages,
+ // enclosuresAttachments: [],
+ series: {
+ id:
+ seriesNode?.getAttribute("id") !== null
+ ? +seriesNode?.getAttribute("id")
+ : undefined,
+ name: seriesNode?.getAttribute("name"),
+ link: seriesNode?.getAttribute("link"),
+ },
+ awardedParameters: this.xmlGetTraitsFromNode(
+ prod.querySelector(":scope > traits")
+ ),
+ // parameteresWithContext: [],
+ sizes,
+ points:
+ priceNode?.getAttribute("points") !== null
+ ? +priceNode?.getAttribute("points")
+ : undefined,
+ pointsReceive:
+ priceNode?.getAttribute("points_recive") !== null
+ ? +priceNode?.getAttribute("points_recive")
+ : undefined,
+ // subscription: {},
+ // bundled: [],
+ // responsibleEntity: {},
+ });
+ });
return data;
- }catch(err){
- console.error(err);
- return null;
+ } catch (err) {
+ console.error(err);
+ return null;
}
}
-
// ========================================================
// INICJALIZACJA
// ========================================================
@@ -1857,17 +2298,25 @@ class IdmHotspot{
/**
* Wykonywana po pełnej inicjalizacji hotspotu (Swiper, eventy, wysokości).
*/
- async afterInit(){
- try{
- if(!this.hotspotEl) throw new Error("Nie znaleziono elementu");
+ async afterInit() {
+ try {
+ if (!this.hotspotEl) throw new Error("Nie znaleziono elementu");
- if(this.title && !this.hotspotEl.querySelector(".hotspot__name.headline__wrapper")){
- this.hotspotEl.querySelector(".hotspot.--initialized")?.insertAdjacentHTML("afterbegin", `
+ if (
+ this.title &&
+ !this.hotspotEl.querySelector(".hotspot__name.headline__wrapper")
+ ) {
+ this.hotspotEl
+ .querySelector(".hotspot.--initialized")
+ ?.insertAdjacentHTML(
+ "afterbegin",
+ `
${this.title}
-
`);
+
`
+ );
}
- if(this.banner) this.placeBanners();
+ if (this.banner) this.placeBanners();
await this.initSwiper();
@@ -1877,114 +2326,142 @@ class IdmHotspot{
console.log(`Initialized hotspot #${this.id}`);
// funkcja wykonująca się po ramce rekomendacji
- if(typeof this.options?.callbackFn === "function") this.options?.callbackFn(this);
- }catch(err){
- console.error(idmHotspotTextObject["Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"], err);
+ if (typeof this.options?.callbackFn === "function")
+ this.options?.callbackFn(this);
+ } catch (err) {
+ console.error(
+ idmHotspotTextObject[
+ "Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"
+ ],
+ err
+ );
}
}
- placeBanners(){
- if(!this.placeBanners) return;
-
- const productsWrapperEl = this.hotspotEl.querySelector(".products__wrapper");
- for(let [key, value] of Object.entries(this.banner)){
- const currBannerMarkup = this.markupBannerContainer({html: value?.html || "", position: key.split("-")[0] });
- if(key === "top"){
+ placeBanners() {
+ if (!this.placeBanners) return;
+
+ const productsWrapperEl =
+ this.hotspotEl.querySelector(".products__wrapper");
+ for (let [key, value] of Object.entries(this.banner)) {
+ const currBannerMarkup = this.markupBannerContainer({
+ html: value?.html || "",
+ position: key.split("-")[0],
+ });
+ if (key === "top") {
productsWrapperEl.insertAdjacentHTML("beforebegin", currBannerMarkup);
- }
- else if(key === "left"){
+ } else if (key === "left") {
productsWrapperEl.insertAdjacentHTML("beforebegin", currBannerMarkup);
- }
- else if(key === "right"){
+ } else if (key === "right") {
productsWrapperEl.insertAdjacentHTML("afterend", currBannerMarkup);
- }
- else if(key === "bottom"){
+ } else if (key === "bottom") {
productsWrapperEl.insertAdjacentHTML("afterend", currBannerMarkup);
- }
- else{
+ } else {
const slidePosition = Number(key.split("-")[1]) - 1;
- if(!Number.isInteger(slidePosition)) return;
+ if (!Number.isInteger(slidePosition)) return;
const allProducts = productsWrapperEl.querySelectorAll(".product");
let productIndex = slidePosition;
- if(slidePosition > allProducts.length - 1) productIndex = allProducts.length - 1;
- if(slidePosition < 0) productIndex = 0
+ if (slidePosition > allProducts.length - 1)
+ productIndex = allProducts.length - 1;
+ if (slidePosition < 0) productIndex = 0;
const bannerPosition = slidePosition < 0 ? "beforebegin" : "afterend";
- allProducts[productIndex]?.insertAdjacentHTML(bannerPosition, currBannerMarkup)
+ allProducts[productIndex]?.insertAdjacentHTML(
+ bannerPosition,
+ currBannerMarkup
+ );
}
value?.callbackFn?.(this);
}
}
-
- afterInitOnce(){
- if(this.initialized) return;
+ afterInitOnce() {
+ if (this.initialized) return;
// WCZYTANIE PONOWNIE DLA KOSZYKA
- if(typeof app_shop.fn?.basket?.reloadForm === "function" && this.hotspotEl.closest("#content")){
- app_shop.run(()=>{
- this.init();
- console.log("test", this.hotspotEl)
- }, "all", "#Basket", true)
+ if (
+ typeof app_shop.fn?.basket?.reloadForm === "function" &&
+ this.hotspotEl.closest("#content")
+ ) {
+ app_shop.run(
+ () => {
+ this.init();
+ console.log("test", this.hotspotEl);
+ },
+ "all",
+ "#Basket",
+ true
+ );
}
this.initialized = true;
}
- initExternalFunctions(){
+ initExternalFunctions() {
this.addToFavFn = app_shop.fn?.shoppingList?.addProductToList;
}
- /**
+ /**
* Pobiera dane, wypełnia markup i inicjuje Swipera.
*/
- async fillHotspot(){
+ async fillHotspot() {
// Zdefiniowanie funkcji do dodawania do ulubionych
- try{
- if(!this.products){
- if((!this?.query?.graphFn || !this?.query?.string) && !this.source?.link) this.setQueryData();
-
+ try {
+ if (!this.products) {
+ if (
+ (!this?.query?.graphFn || !this?.query?.string) &&
+ !this.source?.link
+ )
+ this.setQueryData();
+
// pobranie danych o produktach
await this.getHotspotData();
- if(!this.products) throw new Error(idmHotspotTextObject["Nie znaleziono produktów"]);
+ if (!this.products)
+ throw new Error(idmHotspotTextObject["Nie znaleziono produktów"]);
}
// Skeleton
this.hotspotEl.querySelector(".idm_hotspot__skeleton")?.remove();
this.hotspotEl.classList.remove("--hotspot-loading");
-
-
+
this.initExternalFunctions();
// Wstawienie markupa na strone
- if(this.hotspotEl.querySelector(".products.hotspot__products")) this.hotspotEl.querySelector(".products.hotspot__products").insertAdjacentHTML("beforeend", this.markup());
- else if(this.hotspotEl.querySelector(".hotspot")){
- this.hotspotEl.querySelector(".hotspot")?.insertAdjacentHTML("beforeend", this.markupHotspotSwiperContainer(this.markup()));
- }
- else{
- throw new Error("Nie udało się wstawić produktów! Zła struktura HTML")
+ if (this.hotspotEl.querySelector(".products.hotspot__products"))
+ this.hotspotEl
+ .querySelector(".products.hotspot__products")
+ .insertAdjacentHTML("beforeend", this.markup());
+ else if (this.hotspotEl.querySelector(".hotspot")) {
+ this.hotspotEl
+ .querySelector(".hotspot")
+ ?.insertAdjacentHTML(
+ "beforeend",
+ this.markupHotspotSwiperContainer(this.markup())
+ );
+ } else {
+ throw new Error("Nie udało się wstawić produktów! Zła struktura HTML");
}
// init swiper + add to basket
await this.afterInit();
this.afterInitOnce();
- }catch(err){
+ } catch (err) {
console.error(idmHotspotTextObject["Wystąpił błąd"], err);
this.hotspotEl.remove();
}
}
- /**
+ /**
* Inicjuje instancję Swipera dla hotspotu.
*/
- async initSwiper(isReinitialized){
- try{
+ async initSwiper(isReinitialized) {
+ try {
// swiper || slick
- if(this.options?.swiper){
+ if (this.options?.swiper) {
// Wywołanie swipera
this.swiperFn = new HotspotSlider({
selector: `#${this.id} .swiper`,
@@ -2000,107 +2477,157 @@ class IdmHotspot{
// await idmSwiper.init(this.options.swiper);
// if(!this.hotspotEl.querySelector(".swiper")) throw new Error("Brak elementu swipera")
// this.swiperFn = await idmSwiper.setupSlider({ element: this.hotspotEl.querySelector(".swiper") });
-
- if(this.options.swiperScrollbar && !isReinitialized) this.swiperFnProgress = new IdmSwiperProgress(this.swiperFn, `#${this.id} .swiper`);
- else if(this.options.swiperScrollbar && isReinitialized) this.swiperFnProgress.reattachSwiperFn(this.swiperFn);
+
+ if (this.options.swiperScrollbar && !isReinitialized)
+ this.swiperFnProgress = new IdmSwiperProgress(
+ this.swiperFn,
+ `#${this.id} .swiper`
+ );
+ else if (this.options.swiperScrollbar && isReinitialized)
+ this.swiperFnProgress.reattachSwiperFn(this.swiperFn);
}
- }catch(err){
- console.error(idmHotspotTextObject["Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"], err);
+ } catch (err) {
+ console.error(
+ idmHotspotTextObject[
+ "Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"
+ ],
+ err
+ );
}
}
- async reInitSwiper(differentOptions){
- try{
- if(differentOptions) this.options.swiper = differentOptions;
+ async reInitSwiper(differentOptions) {
+ try {
+ if (differentOptions) this.options.swiper = differentOptions;
this.swiperFn?.slider?.slider?.destroy?.();
this.initSwiper(true);
- }catch(err){
- console.error(idmHotspotTextObject["Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"], err);
+ } catch (err) {
+ console.error(
+ idmHotspotTextObject[
+ "Wystąpił błąd z inicjalizacją. Proszę odśwież stronę"
+ ],
+ err
+ );
}
}
/**
* Inicjuje eventy dla produktów w hotspotcie.
*/
- initEvents(){
- this.hotspotEl.querySelectorAll(".product").forEach(prodEl=>{
+ initEvents() {
+ this.hotspotEl.querySelectorAll(".product").forEach((prodEl) => {
this.initSingleEvent(prodEl);
- })
+ });
}
- initSingleEvent(prodEl){
+ initSingleEvent(prodEl) {
// DODAWANIE DO KOSZYKA
- if(this.options?.addToBasket){
-
+ if (this.options?.addToBasket) {
// Warunek this.isClosestForm w przypadku gdy hotspot znajduje się już w środku formularza
- const addToBasketEl = prodEl.querySelector(`${this.isClosestForm ? "button.add_to_basket__button" : "form.add_to_basket"}`);
- addToBasketEl?.addEventListener(`${this.isClosestForm ? "click" : "submit"}`, this.handleAddToBasket);
+ const addToBasketEl = prodEl.querySelector(
+ `${
+ this.isClosestForm
+ ? "button.add_to_basket__button"
+ : "form.add_to_basket"
+ }`
+ );
+ addToBasketEl?.addEventListener(
+ `${this.isClosestForm ? "click" : "submit"}`,
+ this.handleAddToBasket
+ );
// + -
- if(this?.options?.addToBasket === "range"){
- addToBasketEl?.closest(".add_to_basket")?.querySelector(".idm-products-banner__qty")?.addEventListener("click",this.handleQuantityButtonClick);
- addToBasketEl?.closest(".add_to_basket")?.querySelector(".idm-products-banner__qty-input")?.addEventListener("input",this.handleQuantityInputChange);
+ if (this?.options?.addToBasket === "range") {
+ addToBasketEl
+ ?.closest(".add_to_basket")
+ ?.querySelector(".idm-products-banner__qty")
+ ?.addEventListener("click", this.handleQuantityButtonClick);
+ addToBasketEl
+ ?.closest(".add_to_basket")
+ ?.querySelector(".idm-products-banner__qty-input")
+ ?.addEventListener("input", this.handleQuantityInputChange);
}
}
// Dodaj do ulubionych
- if(this.options?.addToFavorites && typeof this.addToFavFn === "function") prodEl.querySelector(".product__favorite")?.addEventListener("click", this.handleAddToFav);
+ if (this.options?.addToFavorites && typeof this.addToFavFn === "function")
+ prodEl
+ .querySelector(".product__favorite")
+ ?.addEventListener("click", this.handleAddToFav);
// Porównanie
- if(this.options?.addToCompare) prodEl.querySelector(".idm-products-banner__compare-btn")?.addEventListener("click", this.handleAddToCompare);
+ if (this.options?.addToCompare)
+ prodEl
+ .querySelector(".idm-products-banner__compare-btn")
+ ?.addEventListener("click", this.handleAddToCompare);
// Hover drugie zdjęcie
- if(this.options?.showSecondImage){
+ if (this.options?.showSecondImage) {
const prodIconEl = prodEl.querySelector(".product__icon");
- if(prodIconEl.querySelector(".product__image.--second")){
+ if (prodIconEl.querySelector(".product__image.--second")) {
prodIconEl?.addEventListener("mouseover", this.handleShowSecondImage);
prodIconEl?.addEventListener("mouseleave", this.handleHideSecondImage);
}
}
// Wybór wersji
- if(this.options?.selectVersion) prodEl.querySelector(".product__versions")?.addEventListener("click", this.handleSelectVersion);
+ if (this.options?.selectVersion)
+ prodEl
+ .querySelector(".product__versions")
+ ?.addEventListener("click", this.handleSelectVersion);
// Wybór rozmiaru
- if(this.options?.selectSize) prodEl.querySelector(".product__select_sizes")?.addEventListener("click", this.handleSelectSize);
+ if (this.options?.selectSize)
+ prodEl
+ .querySelector(".product__select_sizes")
+ ?.addEventListener("click", this.handleSelectSize);
}
/**
* Inicjuje kontener hotspotu w określonym miejscu DOM.
*/
- initHotspotContainer(){
+ initHotspotContainer() {
const selectedEl = document.querySelector(this?.placement.selector);
- if(!selectedEl) throw new Error(idmHotspotTextObject["Nie znaleziono kontenera"]);
+ if (!selectedEl)
+ throw new Error(idmHotspotTextObject["Nie znaleziono kontenera"]);
const markup = this.markupHotspotContainer();
selectedEl.insertAdjacentHTML(this.placement.insert || "afterend", markup);
this.hotspotEl = document.getElementById(this.id);
}
- /**
+ /**
* Główna metoda inicjalizująca hotspot (lazy lub natychmiast).
*/
- init(){
+ init() {
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
- const dev = urlParams.get('dev')
+ const dev = urlParams.get("dev");
- if(this.options?.devMode && dev !== "true") return console.error(`Brak włączonego devMode. Ramka ${this.id} nie mogła zostać utworzona!`);
+ if (this.options?.devMode && dev !== "true")
+ return console.error(
+ `Brak włączonego devMode. Ramka ${this.id} nie mogła zostać utworzona!`
+ );
// Opcje swipera
- if(typeof this?.options?.swiper === "boolean") this.options.swiper = IdmHotspot.idmDefaultSwiperConfig;
+ if (typeof this?.options?.swiper === "boolean")
+ this.options.swiper = this.getDefaultSwiperOptions();
// Wstawienie kontenera
- if(!this.hotspotEl || !document.contains(this.hotspotEl)) this.initHotspotContainer();
- else if(!this.hotspotEl.querySelector(".hotspot")) this.hotspotEl.innerHTML = this.markupHotspotInnerDiv();
- else if(!this.hotspotEl.querySelector(".products__wrapper")) this.hotspotEl.querySelector(".hotspot").insertAdjacentHTML("beforeend", this.markupHotspotSwiperContainer())
+ if (!this.hotspotEl || !document.contains(this.hotspotEl))
+ this.initHotspotContainer();
+ else if (!this.hotspotEl.querySelector(".hotspot"))
+ this.hotspotEl.innerHTML = this.markupHotspotInnerDiv();
+ else if (!this.hotspotEl.querySelector(".products__wrapper"))
+ this.hotspotEl
+ .querySelector(".hotspot")
+ .insertAdjacentHTML("beforeend", this.markupHotspotSwiperContainer());
-
// Ustawienie wszystkich zmiennych CSS
this.cssSetAll();
// Sprawdzenie czy hotspot znajduje się w formularzu(dla doawania do koszyka)
this.isClosestForm = !!this.hotspotEl.closest("form");
- if(this.options?.lazy) this.handleObserveHotspotOnce();
+ if (this.options?.lazy) this.handleObserveHotspotOnce();
else this.fillHotspot();
}
}
@@ -2138,11 +2665,14 @@ class IdmSwiperProgress {
this.addDragTracking();
this.swiper.on("progress", () => this.updateProgress());
- this.swiper.on("breakpoint", () => {this.updateBarWidth()});
+ this.swiper.on("breakpoint", () => {
+ this.updateBarWidth();
+ });
}
- reattachSwiperFn(newSwiperFn){
- this.swiper = newSwiperFn?.slider?.slider ?? newSwiperFn?.slider ?? newSwiperFn;
+ reattachSwiperFn(newSwiperFn) {
+ this.swiper =
+ newSwiperFn?.slider?.slider ?? newSwiperFn?.slider ?? newSwiperFn;
this.progressEl.style.width = "";
this.progressEl.style.left = "";
this.updateBarWidth();
@@ -2152,10 +2682,12 @@ class IdmSwiperProgress {
const { slidesPerGroup, slidesPerView } = this.swiper.params;
const totalSlides = this.swiper.slides.length;
- const progressWidth = 100 / (((totalSlides - slidesPerView) / slidesPerGroup) + 1);
+ const progressWidth =
+ 100 / ((totalSlides - slidesPerView) / slidesPerGroup + 1);
this.progressEl.style.width = `${progressWidth}%`;
- if (progressWidth >= 100 || progressWidth <= 0) this.scrollbarEl.style.display = "none";
+ if (progressWidth >= 100 || progressWidth <= 0)
+ this.scrollbarEl.style.display = "none";
else this.scrollbarEl.style.display = "";
}
@@ -2164,7 +2696,8 @@ class IdmSwiperProgress {
const { slidesPerGroup, slidesPerView } = this.swiper.params;
const totalSlides = this.swiper.slides.length;
- const progressWidth = 100 / (((totalSlides - slidesPerView) / slidesPerGroup) + 1);
+ const progressWidth =
+ 100 / ((totalSlides - slidesPerView) / slidesPerGroup + 1);
const newLeft = (100 - progressWidth) * progress;
this.progressEl.style.left = `${Math.min(
100 - progressWidth,
@@ -2225,15 +2758,15 @@ class IdmSwiperProgress {
// ========================================================
// TOOLTIP
// ========================================================
-function idmShowTooltip(tooltipEl){
+function idmShowTooltip(tooltipEl) {
const tooltipContentEl = tooltipEl.querySelector(".idm_tooltip__content");
- if(!tooltipContentEl) return;
-
+ if (!tooltipContentEl) return;
+
tooltipContentEl.classList.add("--visible");
-
+
// Logika pokazywania się i chowania tooltipa
let timeoutVar;
-
+
function onMouseLeave() {
timeoutVar = idmHideTooltipTimer(tooltipEl);
}
@@ -2256,11 +2789,11 @@ function idmShowTooltip(tooltipEl){
document.addEventListener("scroll", onScroll);
}
-function idmHideTooltipTimer(tooltipEl){
+function idmHideTooltipTimer(tooltipEl) {
return setTimeout(() => idmHideTooltip(tooltipEl), 1500);
}
-function idmHideTooltip(tooltipEl){
+function idmHideTooltip(tooltipEl) {
const tooltipContentEl = tooltipEl.querySelector(".idm_tooltip__content");
if (!tooltipContentEl) return;
@@ -2275,56 +2808,46 @@ function idmHideTooltip(tooltipEl){
delete tooltipEl._onScroll;
}
-document.addEventListener("DOMContentLoaded", ()=>{
- document.body.addEventListener("click", e=>{
+document.addEventListener("DOMContentLoaded", () => {
+ document.body.addEventListener("click", (e) => {
const tooltipEl = e.target.closest(".idm_tooltip");
- if(!e.target.closest(".idm_tooltip__info_icon") || !tooltipEl) return;
-
+ if (!e.target.closest(".idm_tooltip__info_icon") || !tooltipEl) return;
+
e.preventDefault();
idmShowTooltip(tooltipEl);
});
});
-// new IdmHotspot({
-// id: "idmTestHotspot1",
-// title: "tescik",
-// products: [] // Tablica produktów
-// placement: {
-// selector: "#content",
-// insert: "beforeend",
-// },
-// source: {
-// productsMenu: 1649,
-// producersId: [],
-// seriesId: [],
-// parametersId: [],
-// priceRange: {
-// from: 0,
-// to: 150,
-// }
-// }
-// options: {
-// lazy: true,
-// addToBasket: "range",
-// swiper: true,
-// }
-// });
-async function idmPrepareHotspotObject(selectedContainerEl){
+async function idmPrepareHotspotObject(selectedContainerEl) {
selectedContainerEl.classList.add("--init");
const source = {};
- if(selectedContainerEl.dataset?.link) source.link = selectedContainerEl.dataset.link;
- else if(selectedContainerEl.dataset?.hotspotsType) source.hotspotsType = selectedContainerEl.dataset.hotspotsType;
+ if (selectedContainerEl.dataset?.link)
+ source.link = selectedContainerEl.dataset.link;
+ else if (selectedContainerEl.dataset?.hotspotsType)
+ source.hotspotsType = selectedContainerEl.dataset.hotspotsType;
else {
- if(selectedContainerEl.dataset?.productsId) source.productsId = selectedContainerEl.dataset.productsId.split(",");
- if(selectedContainerEl.dataset?.productsMenu) source.productsMenu = selectedContainerEl.dataset.productsMenu;
- if(selectedContainerEl.dataset?.producersId) source.producersId = selectedContainerEl.dataset.producersId;
- if(selectedContainerEl.dataset?.seriesId) source.seriesId = selectedContainerEl.dataset.seriesId;
- if(selectedContainerEl.dataset?.parametersId) source.seriesId = selectedContainerEl.dataset.parametersId;
- if(selectedContainerEl.dataset?.priceFrom && selectedContainerEl.dataset?.priceTo) source.priceRange = {from: +selectedContainerEl.dataset.priceFrom, to: +selectedContainerEl.dataset.priceTo};
+ if (selectedContainerEl.dataset?.productsId)
+ source.productsId = selectedContainerEl.dataset.productsId.split(",");
+ if (selectedContainerEl.dataset?.productsMenu)
+ source.productsMenu = selectedContainerEl.dataset.productsMenu;
+ if (selectedContainerEl.dataset?.producersId)
+ source.producersId = selectedContainerEl.dataset.producersId;
+ if (selectedContainerEl.dataset?.seriesId)
+ source.seriesId = selectedContainerEl.dataset.seriesId;
+ if (selectedContainerEl.dataset?.parametersId)
+ source.seriesId = selectedContainerEl.dataset.parametersId;
+ if (
+ selectedContainerEl.dataset?.priceFrom &&
+ selectedContainerEl.dataset?.priceTo
+ )
+ source.priceRange = {
+ from: +selectedContainerEl.dataset.priceFrom,
+ to: +selectedContainerEl.dataset.priceTo,
+ };
}
- if(Object.keys(source).length === 0){
+ if (Object.keys(source).length === 0) {
console.error("Brak metody pobrania ramek rekomendacji");
selectedContainerEl?.remove();
return;
@@ -2333,16 +2856,20 @@ async function idmPrepareHotspotObject(selectedContainerEl){
const idmHotspotObj = {
id: selectedContainerEl?.id,
source,
- hotspotEl: selectedContainerEl
+ hotspotEl: selectedContainerEl,
};
- if(selectedContainerEl?.dataset?.lazy) idmHotspotObj.options = {lazy: selectedContainerEl?.dataset?.lazy === "true" ? true : false};
+ if (selectedContainerEl?.dataset?.lazy)
+ idmHotspotObj.options = {
+ lazy: selectedContainerEl?.dataset?.lazy === "true" ? true : false,
+ };
new IdmHotspot(idmHotspotObj);
}
-
-document.addEventListener("DOMContentLoaded", ()=>{
- document.querySelectorAll(".hotspot__wrapper.idm__hotspot:not(.--init)").forEach(currentHotspot=>{
- idmPrepareHotspotObject(currentHotspot);
- });
-})
\ No newline at end of file
+document.addEventListener("DOMContentLoaded", () => {
+ document
+ .querySelectorAll(".hotspot__wrapper.idm__hotspot:not(.--init)")
+ .forEach((currentHotspot) => {
+ idmPrepareHotspotObject(currentHotspot);
+ });
+});
diff --git a/przyklady/extends.js b/przyklady/extends.js
index 465f016..aab4186 100644
--- a/przyklady/extends.js
+++ b/przyklady/extends.js
@@ -1,4 +1,10 @@
IdmHotspot = class extends IdmHotspot {
+ getDefaultHotspotOptions() {
+ const defaultOptions = super.getDefaultHotspotOptions();
+ defaultOptions.cssVariables.nameClamp = 2;
+
+ return defaultOptions;
+ }
markupLabel(prod) {
// Standardowe labelki
let labelMarkup = super.markupLabel(prod);
@@ -6,11 +12,13 @@ IdmHotspot = class extends IdmHotspot {
// Customowe labelki
const awards = prod?.awardedParameters;
if (awards?.length) {
- const awardParam = awards.find(award => award.name === "Idm_custom_label");
- const values = awardParam?.values?.map(v => v.name) || [];
+ const awardParam = awards.find(
+ (award) => award.name === "Idm_custom_label"
+ );
+ const values = awardParam?.values?.map((v) => v.name) || [];
const html = values
- .map(label => {
+ .map((label) => {
const [text, bgColor, color] = label.split("||");
return `
${text}`;
})
@@ -21,4 +29,4 @@ IdmHotspot = class extends IdmHotspot {
return labelMarkup;
}
-}
\ No newline at end of file
+};
diff --git a/ramka.txt b/ramka.txt
index 9b474e4..3c85e73 100644
--- a/ramka.txt
+++ b/ramka.txt
@@ -1,7 +1,7 @@
bug - ramka nie działa dla banneru slider-1 itp
problem z funkcją new HotspotSlider i tym że orzekuje tam hotspotów idosellowych!!!!
-
+- przeliczanie ceny
- sprawdzenie zdjęcia producenta
- Wykluczenie powtarzających się wersji
- dodanie efektu 3d