106 lines
4.0 KiB
JavaScript
106 lines
4.0 KiB
JavaScript
( () => {
|
|
const header = document.querySelector("#header");
|
|
|
|
const basketInfo = document.querySelector("#basketinfo");
|
|
const basketContent = document.querySelector(".vc-basketinfoextended-content");
|
|
const itemCountBasket = parseInt(document.querySelector(".vc-basketinfoextended-numberofitems")?.textContent) || 0;
|
|
|
|
if (basketInfo && basketContent && basketContent.children.length === 0 && itemCountBasket > 0) {
|
|
const headerLink = basketInfo.querySelector('.vc-basketinfoextended-header');
|
|
if (headerLink) {
|
|
headerLink.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
|
headerLink.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
|
|
}
|
|
}
|
|
|
|
const logoEl = header.querySelector(".vc-headerlogo img");
|
|
const logo = {
|
|
src: logoEl ? logoEl.getAttribute("src") : '',
|
|
alt: logoEl ? logoEl.getAttribute("alt") : '',
|
|
};
|
|
|
|
const customContentBlock = header.querySelector(".custom-content-block.custom-content-header-1 > .content");
|
|
const customContentHeader = customContentBlock ? customContentBlock.innerHTML : '';
|
|
|
|
function extractMenuTree(ulElement) {
|
|
if (!ulElement) return [];
|
|
const listItems = Array.from(ulElement.children).filter(el => el.tagName === 'LI');
|
|
return listItems.map(li => {
|
|
const link = li.querySelector(":scope > a");
|
|
const itemData = {
|
|
text: link ? link.textContent.trim() : '',
|
|
href: link ? link.getAttribute("href") : ''
|
|
};
|
|
const subMenu = li.querySelector(":scope > ul[role='menu']");
|
|
if (subMenu) {
|
|
itemData.sublinks = extractMenuTree(subMenu);
|
|
}
|
|
return itemData;
|
|
});
|
|
}
|
|
|
|
const rootMenu = header.querySelector("#menu #menucategories nav ul[role='menu']");
|
|
const menuData = extractMenuTree(rootMenu);
|
|
|
|
const menuTop = header.querySelector("#menutop ul[role='menu']");
|
|
const menuTopData = menuTop ? Array.from(menuTop.querySelectorAll("li > a")).map(link => ({
|
|
text: link.textContent.trim(),
|
|
href: link.getAttribute("href")
|
|
})) : [];
|
|
|
|
const searchForm = header.querySelector("#frm-searchbox");
|
|
const searchAction = searchForm ? searchForm.getAttribute("action") : "/hledani";
|
|
|
|
const userMenuNodes = header.querySelectorAll("#menuuser .content ul li a");
|
|
const userMenu = Array.from(userMenuNodes).map(a => ({
|
|
text: a.textContent.trim(),
|
|
href: a.getAttribute("href")
|
|
}));
|
|
|
|
const basketPrice = header.querySelector("#basketinfo .vc-basketinfoextended-price")?.textContent.trim() || '';
|
|
const basketLink = header.querySelector("#basketinfo .vc-basketinfoextended-header")?.getAttribute("href") || '/kosik';
|
|
|
|
// Extract the newly populated items
|
|
const basketItemsNodes = header.querySelectorAll(".vc-basketinfoextended-item");
|
|
const basketItems = Array.from(basketItemsNodes).map(item => {
|
|
const img = item.querySelector("img");
|
|
const link = item.querySelector(".vc-basketinfoextended-item-namewrapper p a");
|
|
const qty = item.querySelector(".quantity");
|
|
const price = item.querySelector(".vc-basketinfoextended-item-price");
|
|
const remove = item.querySelector(".removeBasketItemLink");
|
|
|
|
return {
|
|
imgSrc: img ? (img.getAttribute("data-src") || img.getAttribute("src")) : "",
|
|
imgAlt: img ? img.getAttribute("alt") : "",
|
|
name: link ? link.textContent.trim() : "",
|
|
href: link ? link.getAttribute("href") : "",
|
|
qty: qty ? qty.textContent.trim() : "",
|
|
price: price ? price.textContent.trim() : "",
|
|
removeLink: remove ? remove.getAttribute("href") : ""
|
|
};
|
|
});
|
|
|
|
const freeDeliveryNode = header.querySelector(".ndBasketFreeDelivery_basketpopup p");
|
|
const freeDeliveryText = freeDeliveryNode ? freeDeliveryNode.textContent.trim() : "";
|
|
|
|
const finalData = {
|
|
logo,
|
|
customContentHeader,
|
|
searchAction,
|
|
userMenu,
|
|
menu: {
|
|
top: menuTopData,
|
|
main: menuData
|
|
},
|
|
basket: {
|
|
itemCount: itemCountBasket,
|
|
price: basketPrice,
|
|
link: basketLink,
|
|
items: basketItems,
|
|
freeDelivery: freeDeliveryText
|
|
}
|
|
};
|
|
|
|
return finalData;
|
|
})();
|