
The latest update has been completed
66%
HTML , CSS , javascript , bootstrap 5.3
<header class="di-container-header">
<div id="di-header-hr1">
<div class="di-top-link-top">
<p>Welcome to Martfury Online Store !</p>Thank you for reading this post, don't forget to subscribe!
<ul class="di-cont-link">
<li class="di-top-link"><a href="#">Track Order</a></li>
<li class="di-top-link"><a href="">Track Order</a></li>
<li>
<div class="dropdown">
<button class="dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fi fi-rr-world"></i>
language
</button>
<ul class="dropdown-menu slideup-to-down">
<li><button class="dropdown-item" type="button" onclick="changeLanguage('en')"> English</button>
</li>
<li><button class="dropdown-item" type="button" onclick="changeLanguage('ar')">sa العربية</button>
</li>
</ul>
</div>
</li>
<li>
<div class="dropdown">
<button class="dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fi fi-rr-usd-circle"></i>
Currency
</button>
<ul class="dropdown-menu slideup-to-down">
<li><button class="dropdown-item" type="button" onclick="changeCurrency('USD')"> US Dollar
(USD)</button></li>
<li><button class="dropdown-item" type="button" onclick="changeCurrency('EUR')"> Euro (EUR)</button>
</li>
<li><button class="dropdown-item" type="button" onclick="changeCurrency('GBP')"> British Pound
(GBP)</button></li>
<li><button class="dropdown-item" type="button" onclick="changeCurrency('JPY')"> Japanese Yen
(JPY)</button></li>
<li><button class="dropdown-item" type="button" onclick="changeCurrency('CHF')"> Swiss Franc
(CHF)</button></li>
<li><button class="dropdown-item" type="button" onclick="changeCurrency('CNY')"> Chinese Yuan
(CNY)</button></li>
</ul>
</div>
</li>
</ul>
</div>
<div class="di-middle-link">
<div class="logo"><img alt="" height="80px" id="header-logo"></div>
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username"
aria-describedby="button-addon2">
<button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
</div>
<div class="di-container-link-profile">
<a href=""><i class="fi fi-rr-comment"></i></a>
<a href=""><i class="fi fi-rr-shopping-cart"></i></a>
<a href=""><i class="fi fi-rr-comment-heart"></i></a>
<a href="/login.php"><i class="fi fi-rr-user">Login</a></i>
<a href=""><i class="fi fi-rr-exit"></i></a>
</div>
</div>
<div class="di-lowest-link">
<nav class="navbar navbar-expand-lg navbar-dark">
<div class="container di-container-link-profile-mobile">
<div class="di-col">
<div class="di-menu-mobile-block">
<button class="btn btn-outline-light d-lg-none" type="button" data-bs-toggle="offcanvas"
data-bs-target="#offcanvasMenu">
<i class="fi fi-rr-apps"></i>
</button>
<a href=""><i class="fi fi-rr-comment"></i></a>
<a href=""><i class="fi fi-rr-shopping-cart"></i></a>
<a href=""><i class="fi fi-rr-comment-heart"></i></a>
<a href="/login.php"><i class="fi fi-rr-user">Login</a></i>
</div>
<div class="collapse navbar-collapse">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="categories">Categories</a>
<ul class="dropdown-menu" id="navbarMenu"></ul>
</li>
</ul>
</div>
</div>
<ul class="di-menu-pag-disktop">
<li><a href="#">Home</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Special</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">About us</a></li>
<li><a href="/contact-us.php">Contact us</a></li>
</ul>
<a class="phone-number" href="#">Hotline : 1-800-234-5678</a>
</div>
</nav>
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasMenu">
<div class="offcanvas-header">
<h5 class="offcanvas-title">Gaming Store</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas"></button>
</div>
<div class="offcanvas-body">
<ul class="di-menu-pag">
<li><a href="#">Home</a></li>
<li><a href="#">Categories</a></li>
<li><a href="#">Special</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Contact us</a></li>
</ul>
<hr>
<ul class="list-group" id="offcanvasMenuList"></ul>
</div>
</div>
</div>
</div>
</header>
import { EVENTS, waitForEvents } from "/js/utils/events.js";
import { uiBuilder } from "./header-builder.js";
waitForEvents([EVENTS.CONFIG_LOADED], async function () {
await uiBuilder();
await onInit();
document.dispatchEvent(new Event(EVENTS.HEADER_LOADED));
});
async function onInit() {
generateMenu();
initHeaderStoreInformation();
}
function initHeaderStoreInformation() {
const storeInformation = SiteConfig.store_information;
const logo = storeInformation.logo;
const logoElement = document.getElementById("header-logo");
if (logoElement) {
logoElement.src = logo;
}
}
const menuData = [
{
title: 'Xbox <span class="badge text-bg-info">Info</span>',
// icon: '<i class="fi fi-rr-joystick"></i>',
icon: '<img decoding="async" src="/img/1234.png" width="30px"></img>',
subMenus: [
{
title: "",
items: [{ image: "../img/m6.jpg" }],
},
{
title: "",
items: [{ image: "../img/s1.jpg" }],
},
{
title: "",
items: [{ image: "../img/t1.jpg" }],
},
{
title: "",
items: [{ image: "../img/m5.webp" }],
},
{
title: "",
items: [{ image: "../img/m5.webp" }],
},
{
title: "",
items: [{ image: "../img/m2.avif" }],
},
{
title: "",
items: [{ image: "../img/132456.jpg" }],
},
{
title: "",
items: [{ image: "../img/321465798789879.jpg" }],
},
{
title: "",
items: [{ image: "../img/123456789456123.png" }],
},
{
title: "Upcoming Releases",
items: [
"Avowed",
"Starfield",
"Hellblade 2",
"The Outer Worlds 2",
"Perfect Dark",
"Indiana Jones",
"Everwild",
],
},
{
title: "Upcoming Releases",
items: [
"Avowed",
"Starfield",
"Hellblade 2",
"The Outer Worlds 2",
"Perfect Dark",
"Indiana Jones",
"Everwild",
],
},
],
},
{
title: "Gaming Merchandise",
icon: '<i class="fi fi-rr-dice-d6"></i>',
subMenus: [
{
title: "Clothing",
items: [
"Gaming Hoodies",
"T-Shirts",
"Hats",
"Socks",
"Jackets",
"Sweatpants",
"Sneakers",
],
},
{
title: "Decor",
items: [
"Wall Posters",
"LED Light Strips",
"Game-Themed Rugs",
"Desk Mats",
"Gaming Wall Art",
"Themed Neon Signs",
],
},
{
title: "",
items: [{ image: "../img/321465798789879.jpg" }],
},
{
title: "",
items: [{ image: "../img/1234.png" }],
},
],
},
{
title: 'PC Gaming <span class="badge text-bg-danger">Danger</span>',
icon: '<i class="fi fi-rr-computer"></i>',
subMenus: [
{
title: "Gaming Hardware",
items: [
"High-Performance Graphics Cards",
"Overclocked Processors",
"RGB Motherboards",
"Ultra-Fast RAM Modules",
"Platinum Certified Power Supplies",
],
},
{
title: "Gaming Peripherals",
items: [
"Mechanical RGB Keyboards",
"Wireless Gaming Mice",
"Professional Streaming Microphones",
"High-Resolution Gaming Monitors",
"Adjustable Ergonomic Gaming Chairs",
],
},
],
},
{
title: "Streaming Gear",
icon: '<i class="fi fi-rr-live-alt"></i>',
subMenus: [
{
title: "Capture Devices",
items: [
"Elgato 4K60 Pro",
"AverMedia Live Gamer Duo",
"Razer Ripsaw HD",
"Blackmagic ATEM Mini Pro",
],
},
{
title: "Lighting & Green Screens",
items: [
"Elgato Key Light",
"Neewer Softbox Studio Lights",
"Foldable Green Screens",
"RGB LED Smart Panels",
],
},
],
},
{
title: 'VR Gaming <span class="attention-blink">Discounts 30%</span>',
icon: '<i class="fi fi-rr-vr-cardboard"></i>',
subMenus: [
{
title: "VR Headsets",
items: [
"Oculus Quest Pro",
"HTC Vive Pro 2",
"Valve Index Full Kit",
"Pimax 8K VR Headset",
],
},
{
title: "VR Accessories",
items: [
"360° Motion Tracking Sensors",
"Haptic Feedback VR Gloves",
"Omnidirectional VR Treadmills",
"High-Resolution VR Lenses",
],
},
],
},
{
title: "Gaming Accessories",
icon: '<i class="fi fi-rr-dice-alt"></i>',
subMenus: [
{
title: "High-End Gaming Controllers",
items: [
"Elite Series 2 Controllers",
"SCUF Customizable Controllers",
"Arcade Fight Sticks",
"Adaptive Gaming Controllers",
],
},
{
title: "Headsets & Audio Gear",
items: [
"Wireless Surround Sound Gaming Headsets",
"Studio-Quality Gaming Microphones",
"Noise-Canceling Streaming Headphones",
],
},
],
},
{
title: 'Mobile Gaming <span class="badge text-bg-info">Info</span>',
icon: '<i class="fi fi-rr-mobile-hand"></i>',
subMenus: [
{
title: "Mobile Devices",
items: [
"Razer Phone",
"ASUS ROG Phone",
"Black Shark",
"iPhone Gaming Accessories",
],
},
{
title: "Mobile Accessories",
items: [
"Mobile Controllers",
"Cooling Fans",
"Gaming Earbuds",
"Power Banks",
],
},
],
},
{
title: "Esports & Competitive Gaming",
icon: '<i class="fi fi-rr-dice-d10"></i>',
subMenus: [
{
title: "Popular Esports Games",
items: [
"League of Legends",
'Dota 2 <span class="badge text-bg-warning">Warning</span>',
"CS:GO",
"Valorant",
"Overwatch",
],
},
{
title: "Esports Gear",
items: [
"High-Refresh Monitors",
"Pro Gaming Mice",
"Noise-Canceling Headsets",
"Esports Jerseys",
],
},
],
},
{
title: "Board Games & Tabletop",
icon: "<i class='fi fi-rr-dice'></i>",
subMenus: [
{
title: "Popular Board Games",
items: ["Catan", "Risk", "Gloomhaven", "Monopoly", "Ticket to Ride"],
},
{
title: "Tabletop RPGs",
items: ["Dungeons & Dragons", "Pathfinder", "Warhammer 40K"],
},
],
},
{
title: 'Racing Games <span class="badge text-bg-warning">Warning</span>',
icon: "<i class='fi fi-rr-flag'></i>",
subMenus: [
{
title: "Popular Racing Games",
items: [
'Forza Horizon 5 <span class="badge text-bg-warning">Warning</span>',
"Gran Turismo 7",
"Need for Speed Heat",
"Assetto Corsa",
"F1 2023",
],
},
{
title: "Racing Accessories",
items: [
"Racing Wheels",
"Pedals",
"VR Racing Seats",
"Motion Simulators",
],
},
],
},
];
function generateMenu() {
const navbarMenu = document.getElementById("navbarMenu");
const offcanvasMenu = document.getElementById("offcanvasMenuList");
menuData.forEach((menu, index) => {
let dropdownItem = document.createElement("li");
dropdownItem.className = "dropdown-item hover-bg-color";
dropdownItem.innerHTML = `
<div class="di-menu-desk-top-col"><a href="#" class="di-bg-hover-color">${
menu.icon ? menu.icon + " " : ""
}${
menu.title
}</a><i class="fi di-fi fi-rr-arrow-small-right"></i></div>
<ul class="submenu">
${menu.subMenus
.map(
(subMenu) => `
<li>
<a href="#"><strong>${subMenu.title}</strong></a>
<ul>
${subMenu.items
.map((item) => {
let content = "";
if (typeof item === "object" && item.image) {
content = `<a href="#"><img decoding="async" src="${item.image}" alt="Image" width="50"></a>`;
} else {
content = `<a href="#">${item}</a>`;
}
return `<li>${content}</li>`;
})
.join("")}
</ul>
</li>
`
)
.join("")}
</ul>
`;
navbarMenu.appendChild(dropdownItem);
let offcanvasItem = document.createElement("li");
offcanvasItem.className = "list-group-item";
offcanvasItem.innerHTML = `
<a href="#" class="d-flex justify-content-between" onclick="toggleDropdown(event, 'offcanvasMenu${index}')">
<div>${menu.icon ? menu.icon + " " : ""}${menu.title}</div>
<div class="di-icons-mobile-col"><i class="fi fi-rr-angle-small-down"></i></div>
</a>
<ul id="offcanvasMenu${index}" class="submenu list-group">
${menu.subMenus
.map(
(subMenu) => `
<li>
<a href="#"><strong>${subMenu.title}</strong></a>
<ul class="list-group">
${subMenu.items
.map((item) => {
let content = "";
if (typeof item === "object" && item.image) {
content = `<a href="#"><img decoding="async" src="${item.image}" alt="Image" width="50"></a>`;
} else {
content = `<a href="#">${item}</a>`;
}
return `<li class="list-group-item">${content}</li>`;
})
.join("")}
</ul>
</li>
`
)
.join("")}
</ul>
`;
offcanvasMenu.appendChild(offcanvasItem);
});
}