1const ebutikHotspot={getProducts:async function(n){for(const[t,c]of Object.entries(n)){if(!c||0===c.length)continue;const n=document.querySelector(`.nav-item[data-id="${t}"] .navbar-banner`);n&&await this.fetchProductsForCategory(c,n)}},fetchProductsForCategory:async function(n,t){const c=`query{\n products(searchInput: {productsId: [${n.join(",")}]},settingsInput: {limit: 48}){\n products {\n id\n link\n name\n icon\n iconSmall\n enclosuresImages {\n url\n }\n sizes {\n id\n name\n amount_mw\n }\n price{\n price\n {\n gross{\n value\n formatted\n }\n }\n }\n }\n }\n }`;try{const n=await fetch("https://ebutik.pl/graphql/v1/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:c})}),e=await n.json();if(e.data&&e.data.products&&e.data.products.products){e.data.products.products.forEach(((n,c)=>{const e=this.createProductHtml(n,c);t&&t.insertAdjacentHTML("beforeend",e)}))}}catch(n){}},createProductHtml:function(n,t){const c=n.icon||n.iconSmall||"",e=n.iconSmall||n.icon||"",a=n.name||"",o=n.link||"#",r=n.price?.price?.gross?.formatted||"",i=n.id||"";e.split("/").pop(),c.split("/").pop();return`\n<div class="product" data-product_id="${i}" data-product_page="${t}">\n <a class="product__icon d-flex justify-content-center align-items-center" tabindex="-1" data-product-id="${i}"\n href="${o}"\n title="${a}">\n <picture>\n <source media="(max-width: 420px)"\n srcset="${e}">\n <img alt="${a}"\n src="${c}"\n width="" height="">\n </picture>\n </a>\n <div class="product__content_wrapper">\n <h2><a class="product__name" tabindex="0"\n href="${o}"\n title="${a}">${a}</a></h2>\n <div class="product__prices">\n <strong class="price --main">${r}<span class="price_vat"> brutto</span></strong>\n </div>\n </div>\n <div class="product__compare"></div>\n</div>`}};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.