feat: Refreshing header state
This commit is contained in:
@@ -1,11 +1,22 @@
|
||||
(() => {
|
||||
( () => {
|
||||
const header = document.querySelector("#header");
|
||||
|
||||
// Extract Logo
|
||||
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.src : '',
|
||||
alt: logoEl ? logoEl.alt : '',
|
||||
src: logoEl ? logoEl.getAttribute("src") : '',
|
||||
alt: logoEl ? logoEl.getAttribute("alt") : '',
|
||||
};
|
||||
|
||||
const customContentBlock = header.querySelector(".custom-content-block.custom-content-header-1 > .content");
|
||||
@@ -13,22 +24,17 @@
|
||||
|
||||
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.href : ''
|
||||
href: link ? link.getAttribute("href") : ''
|
||||
};
|
||||
|
||||
const subMenu = li.querySelector(":scope > ul[role='menu']");
|
||||
if (subMenu) {
|
||||
itemData.sublinks = extractMenuTree(subMenu);
|
||||
}
|
||||
|
||||
return itemData;
|
||||
});
|
||||
}
|
||||
@@ -37,26 +43,63 @@
|
||||
const menuData = extractMenuTree(rootMenu);
|
||||
|
||||
const menuTop = header.querySelector("#menutop ul[role='menu']");
|
||||
const menuTopLinks = menuTop.querySelectorAll("li > a");
|
||||
const menuTopData = Array.from(menuTopLinks).map(link => ({
|
||||
const menuTopData = menuTop ? Array.from(menuTop.querySelectorAll("li > a")).map(link => ({
|
||||
text: link.textContent.trim(),
|
||||
href: link.href
|
||||
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 itemCountBasket = parseInt(header.querySelector("#basketinfo .vc-basketinfoextended-numberofitems").textContent) || 0;
|
||||
const basketPrice = header.querySelector("#basketinfo .vc-basketinfoextended-price")?.textContent.trim() || '';
|
||||
const basketLink = header.querySelector("#basketinfo .vc-basketinfoextended-header")?.getAttribute("href") || '/kosik';
|
||||
|
||||
const basket = {
|
||||
itemCount: itemCountBasket,
|
||||
link: header.querySelector("#basketinfo .vc-basketinfoextended-header").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 {
|
||||
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,
|
||||
basket: {
|
||||
itemCount: itemCountBasket,
|
||||
price: basketPrice,
|
||||
link: basketLink,
|
||||
items: basketItems,
|
||||
freeDelivery: freeDeliveryText
|
||||
}
|
||||
};
|
||||
|
||||
return finalData;
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user