4 const document = window.document;
5 const shop = window.dbxShop = window.dbxShop || {};
7 shop.version = "0.2.1";
9 shop.syncCartMenu = function (count) {
10 count = Math.max(0, parseInt(count, 10) || 0);
11 const language = String(document.documentElement.lang || "de").toLowerCase().slice(0, 2);
15 one: "1 Artikel im Warenkorb",
16 many: count + " Artikel im Warenkorb"
20 one: "1 item in cart",
21 many: count + " items in cart"
25 one: "1 artículo en el carrito",
26 many: count + " artículos en el carrito"
29 const text = labels[language] || labels.de;
30 const label = count === 1 ? text.one : text.many;
32 document.querySelectorAll(".dbx-shop-cart-menu-link").forEach(link => {
33 const icon = link.querySelector(".dbx-shop-cart-menu-icon");
36 let badge = icon.querySelector(".dbx-shop-cart-menu-badge");
38 if (badge) badge.remove();
39 link.setAttribute("title", text.empty);
44 badge = document.createElement("span");
45 badge.className = "dbx-shop-cart-menu-badge";
46 icon.appendChild(badge);
49 badge.textContent = String(count);
50 badge.setAttribute("aria-label", label);
51 link.setAttribute("title", label);
55 shop.syncCartMarker = function (root) {
56 if (!root || !root.querySelector) return;
58 const marker = root.matches && root.matches("[data-dbx-shop-cart-count]")
60 : root.querySelector("[data-dbx-shop-cart-count]");
63 shop.syncCartMenu(marker.getAttribute("data-dbx-shop-cart-count"));
66 shop.syncCartMarker(document);
68 function bindAjaxSync() {
69 if (shop.__ajaxSyncBound) return true;
70 if (!window.dbx || !window.dbx.event || typeof window.dbx.event.on !== "function") {
74 shop.__ajaxSyncBound = true;
75 window.dbx.event.on("ajax:after", data => {
76 shop.syncCartMarker((data && data.targetElement) || document);
81 if (!bindAjaxSync()) {
83 const wait = window.setInterval(() => {
84 if (bindAjaxSync() || ++attempts > 80) {
85 window.clearInterval(wait);