1<!DOCTYPE html> 2 3<html id="pt-body" translate="no" style=" overflow-x: hidden !important;"> 4 5<head> 6 7
7<script> 8 (async function () { 9 window.dotNetInCache = false; 10 window.dotNetStarted = false; 11 12 try { 13 if (self.caches && caches.keys) { 14 // Pobierz wszystkie nazwy cache 15 const cacheNames = await caches.keys(); 16 17 for (const name of cacheNames) { 18 if (name.startsWith('dotnet') || name.startsWith('dotnet-resources-')) { 19 window.dotNetInCache = true; 20 break; 21 } 22 } 23 } 24 } 25 catch { 26 console.log("DN1-E: Error checking caches"); 27 } 28 console.log("DN1: dotNetInCache=", window.dotNetInCache); 29 })(); 30 </script>
30 31 32 33
33<script> 34 function LoadCss(filePath) { 35 document.write("<link rel='stylesheet' href='" + filePath + "?fv=1789989030474'><\/link>"); 36 } 37 38 function LoadJs(filePath) { 39 document.write("
39<script type='text/javascript' src='" + filePath + "?fv=1789989030474'><\/script>"); 40 } 41 function LoadModuleJs(filePath) { 42 document.write("
42<script type='module' src='" + filePath + "?fv=1789989030474'><\/script>"); 43 } 44 45 function LoadJsDeferred(filePath) { 46 var s = document.createElement('script'); 47 s.src = filePath + "?fv=1789989030474"; 48 s.type = "text/javascript"; 49 s.defer = true; // nie blokuje parsowania 50 s.async = true; // dodatkowo nie czeka na kolejnoÅÄ, jeÅli Ci to pasuje 51 document.head.appendChild(s); 52 } 53 54 55 function LoadCssDeferred(filePath) { 56 var l = document.createElement('link'); 57 l.rel = 'stylesheet'; 58 l.href = filePath + "?fv=1789989030474"; 59 l.async = true; // dodatkowo nie czeka na kolejnoÅÄ, jeÅli Ci to pasuje 60 // opcjonalnie: l.media = 'print'; l.onload = function(){ this.media='all'; }; 61 document.head.appendChild(l); 62 } 63 64 function LoadModuleJsDeferred(filePath) { 65 var s = document.createElement('script'); 66 s.src = filePath + "?fv=1789989030474"; 67 s.type = "module"; 68 s.async = true; // dodatkowo nie czeka na kolejnoÅÄ, jeÅli Ci to pasuje 69 // dla moduÅów nie ma sensu defer (moduÅy sÄ domyÅlnie defer), 70 // ważne jest tylko, że nie używamy document.write 71 document.head.appendChild(s); 72 } 73 74 window.ScriptLoader = { 75 loadOnceJs: function (url) { 76 return new Promise(function (resolve, reject) { 77 // jeÅli już zaÅadowany â nie Åaduj drugi raz 78 if (document.querySelector('script[data-dynamic-src="' + url + '"]')) { 79 resolve(); 80 return; 81 } 82 83 var s = document.createElement('script'); 84 s.src = url + "?fv=1789989030474"; 85 s.type = 'text/javascript'; 86 s.async = true; 87 s.setAttribute('data-dynamic-src', url); 88 89 s.onload = function () { resolve(); }; 90 s.onerror = function (e) { reject(e); }; 91 92 document.head.appendChild(s); 93 }); 94 }, 95 96 loadOnceCss: function (url) { 97 return new Promise(function (resolve, reject) { 98 // jeÅli już zaÅadowany â nie Åaduj drugi raz 99 if (document.querySelector('link[data-dynamic-href="' + url + '"]')) { 100 resolve(); 101 return; 102 } 103 104 var l = document.createElement('link'); 105 l.rel = 'stylesheet'; 106 l.href = url + "?fv=1789989030474"; 107 l.setAttribute('data-dynamic-href', url); 108 109 l.onload = function () { resolve(); }; 110 l.onerror = function (e) { reject(e); }; 111 112 document.head.appendChild(l); 113 }); 114 }, 115 116 loadOnceModule: function (url) { 117 return new Promise(function (resolve, reject) { 118 if (document.querySelector('script[type="module"][data-dynamic-src="' + url + '"]')) { 119 resolve(); 120 return; 121 } 122 123 var s = document.createElement('script'); 124 s.src = url + "?fv=1789989030474"; 125 s.type = 'module'; 126 s.async = true; 127 s.setAttribute('data-dynamic-src', url); 128 129 s.onload = function () { resolve(); }; 130 s.onerror = function (e) { reject(e); }; 131 132 document.head.appendChild(s); 133 }); 134 }, 135 }; 136 </script>
136 137 138 139 <meta charset="utf-8" /> 140 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover, interactive-widget=pan-viewport" /> 141 <base href="/shop/" /> 142 143
143<script type="text/javascript"> 144 (function () { 145 LoadCss("/shop/css/siteAppSimple.css"); 146 })(); 147 </script>
147 148 149
149<script type="text/javascript"> 150 (function () { 151 LoadJs("/js/HelperScripts.js"); 152 LoadJs("/js/BrandScripts.js"); 153 LoadJs("/js/ScrollBarScripts.js"); 154 LoadJs("/shop/js/MpkWebAppScripts.js"); 155 156 })(); 157 </script>
157 158 159 160</head> 161 162<body> 163 <!-- Loading and app content --> 164 <div id="app"> 165 <div class="ptg-loading ptg-start-loading ptg-loading-2"> 166 <div class="ptg-loading-full-content-image"> 167 <div class="ptg-loading-img ptg-loading-img-init"></div> 168 </div> 169 170 <div class="ptg-loading-full-content-spinner"> 171 <div class="ptg-loading-full-content-spinner-body"></div> 172 </div> 173 174 </div> 175 176 </div> 177 178 179 <!-- Minimal loader --> 180 <div id="ptg-boot" class="ptg-boot" role="status" aria-live="polite"> 181 <div class="ptg-boot__bar"> 182 <div id="bootBar" class="ptg-boot__barFill"></div> 183 </div> 184 <div id="bootText" class="ptg-boot__text">Loading⦠0%</div> 185 186 <div class="ptg-loading-version"> 187 <span id="ptg-loading-version-text">v4.2.1</span> 188 </div> 189 </div> 190 191 192 <div id="blazor-error-ui"> 193 An unhandled error has occurred. 194 <a href="" class="reload">Reload</a> 195 <a class="dismiss">ð</a> 196 </div> 197 198
198<script> 199 (async function () { 200 try { BrandFunctions.InitializeAsync(); } catch (e) { console.warn(e); } 201 })(); 202 </script>
202 203 204 <!-- Clean load --> 205
205<script> 206 document.addEventListener("DOMContentLoaded", function () { 207 const errorUi = document.getElementById("blazor-error-ui"); 208 209 if (errorUi) { 210 console.log("DN2: Setting up error observer"); 211 212 const observer = new MutationObserver(() => { 213 console.log("DN2-E: Trigger"); 214 215 if (errorUi.style.display !== "none") { 216 console.log("DN2-E: Error handling"); 217 218 // Sprawdź warunki i wymuÅ nawigacjÄ do ?clearLoad 219 if (window.dotNetInCache == true && window.dotNetStarted == false) { 220 console.log("DN2-E: Force navigation to ?clearLoad"); 221 222 var elementVersion = document.getElementById("ptg-loading-version-text"); 223 if (elementVersion) { 224 elementVersion.textContent = elementVersion.textContent + " (Clear Load)"; 225 } 226 227 const url = new URL(window.location.href); 228 url.searchParams.set("clearLoad", "1"); 229 window.location.href = url.toString(); 230 } 231 } 232 }); 233 234 observer.observe(errorUi, { attributes: true, attributeFilter: ["style"] }); 235 } 236 }); 237 </script>
237 238 239 240 <!-- BuildIndexVersion --> 241
241<script> 242 (async function () { 243 // === USTAWIENIA === 244 // Zmieniaj tÄ wartoÅÄ przy nowym deployu: 245 const CURRENT_VERSION = "4"; // <- wpisz aktualnÄ wersjÄ 246 const VERSION_KEY = "BuildIndexVersion"; 247 const RELOAD_ON_RESET = true; // ustaw false, jeÅli nie chcesz przeÅadowania po czyszczeniu 248 const RESET_LOOP_FLAG = "app-reset-in-progress"; // flaga anty-pÄtla w sessionStorage 249 250 // Krótka pauza dla domkniÄcia uchwytów (IndexedDB/Cache) 251 const delay = (ms) => new Promise(r => setTimeout(r, ms)); 252 253 async function clearCachesAndStorages() { 254 255 // 2) Cache Storage (Cache API) 256 try { 257 if (self.caches && caches.keys) { 258 const keys = await caches.keys(); 259 await Promise.all(keys.map(k => caches.delete(k).catch(() => { }))); 260 } 261 } catch { } 262 263 // 4) localStorage / sessionStorage 264 // Uwaga: czyÅcimy, a nastÄpnie zaraz zapiszemy NOWÄ wersjÄ do localStorage. 265 try { localStorage.clear(); } catch { } 266 try { sessionStorage.clear(); } catch { } 267 268 await delay(50); 269 } 270 271 async function ensureVersionOrReset() { 272 // Anty-pÄtla: jeÅli już resetowaliÅmy i czekamy na reload, nie rób nic 273 if (sessionStorage.getItem(RESET_LOOP_FLAG) === "1") { 274 sessionStorage.removeItem(RESET_LOOP_FLAG); 275 return; 276 } 277 278 const stored = localStorage.getItem(VERSION_KEY); 279 280 // Zgodna wersja â nic nie rób 281 if (stored === CURRENT_VERSION) { 282 console.log("DN3: Version OK"); 283 return; 284 } 285 console.log("DN3: JS Cache & Storage clear"); 286 287 // Wersja różna/brak â czyÅcimy Årodowisko 288 try { 289 // ustaw flagÄ anty-pÄtla (na wypadek reloadu) 290 sessionStorage.setItem(RESET_LOOP_FLAG, "1"); 291 292 await clearCachesAndStorages(); 293 294 // Po czyszczeniu ZAPISUJEMY nowÄ wersjÄ 295 try { localStorage.setItem(VERSION_KEY, CURRENT_VERSION); } catch { } 296 297 if (RELOAD_ON_RESET) { 298 console.log("Full assembly load"); 299 300 try { BootProgress.setFullLoad(true); } catch { } 301 302 //var elementVersion = document.getElementById("ptg-loading-version-text"); 303 //if (elementVersion) { 304 // elementVersion.textContent = elementVersion.textContent + " Full Load"; 305 //} 306 307 //location.reload(); 308 } else { 309 // JeÅli nie reloadujemy, po prostu zdejmij flagÄ 310 sessionStorage.removeItem(RESET_LOOP_FLAG); 311 } 312 } catch (e) { 313 console.error("DN3-E: Cache & Storage Clear Failed", e); 314 // Spróbuj przynajmniej zapisaÄ wersjÄ, by nie pÄtliÄ 315 try { localStorage.setItem(VERSION_KEY, CURRENT_VERSION); } catch { } 316 sessionStorage.removeItem(RESET_LOOP_FLAG); 317 } 318 } 319 320 await ensureVersionOrReset(); 321 322 })(); 323 </script>
323 324 325 <!--Blazor Init--> 326
326<script src="shop/_framework/blazor.webassembly.js?fv=1789989030474" autostart="false"></script>
326 327 328
328<script> 329 window.BootProgress = window.BootProgress || { 330 init: function () { }, 331 starting: function () { }, 332 appApiInit: function () { }, 333 appApiSet: function () { }, 334 appReady: function () { }, 335 error: function () { }, 336 setFullLoad: function () { }, 337 getBlazorOptions: function () { return {}; } 338 }; 339 </script>
339 340
340<script src="shop/js/boot-progress.js?fv=1789989030474"></script>
340 341 <!--
341<script> 342 BootProgress.init(); 343 BootProgress.starting(); 344 console.log("BootProgress options", BootProgress.getBlazorOptions()); 345 Blazor.start(BootProgress.getBlazorOptions()) 346 .then(function () { 347 // Do not hide here. Wait for BootProgress.appReady() from .NET 348 console.log("DN4: Blazor started"); 349 window.dotNetStarted = true; 350 window.dispatchEvent(new CustomEvent("blazor:started")); 351 }) 352 .catch(function (e) { 353 BootProgress.error(); 354 console.error(e); 355 throw e; 356 }); 357 358 //Blazor.start().then(function () { 359 // console.log("DN4: Blazor started"); 360 // window.dotNetStarted = true; 361 362 //}); 363 </script>
363--> 364 365 366
366<script> 367 function safeBootProgressCall(action, fallbackValue) { 368 try { 369 return action(); 370 } catch (e) { 371 console.warn("BootProgress fallback:", e); 372 return fallbackValue; 373 } 374 } 375 376 const bootProgress = window.BootProgress; 377 const blazorOptions = safeBootProgressCall(function () { 378 if (!bootProgress || typeof bootProgress.getBlazorOptions !== "function") { 379 return {}; 380 } 381 382 const options = bootProgress.getBlazorOptions(); 383 return options || {}; 384 }, {}); 385 386 safeBootProgressCall(function () { 387 if (bootProgress && typeof bootProgress.init === "function") { 388 bootProgress.init(); 389 } 390 }); 391 392 safeBootProgressCall(function () { 393 if (bootProgress && typeof bootProgress.starting === "function") { 394 bootProgress.starting(); 395 } 396 }); 397 398 console.log("BootProgress options", blazorOptions); 399 400 Blazor.start(blazorOptions) 401 .then(function () { 402 console.log("DN4: Blazor started"); 403 window.dotNetStarted = true; 404 window.dispatchEvent(new CustomEvent("blazor:started")); 405 }) 406 .catch(function (e) { 407 safeBootProgressCall(function () { 408 if (bootProgress && typeof bootProgress.error === "function") { 409 bootProgress.error(); 410 } 411 }); 412 413 console.error(e); 414 //throw e; 415 }); 416 417 //Blazor.start().then(function () { 418 // console.log("DN4: Blazor started"); 419 // window.dotNetStarted = true; 420 421 //}); 422 </script>
422 423 424 425 <!--Bootstrap--> 426 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> 427
427<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
427 428 429 <!--CSS after Blazor--> 430
430<script type="text/javascript"> 431 (function () { 432 LoadCssDeferred("/shop/_content/PixelTech.BlazorComponents/css/default.css"); 433 LoadCssDeferred("/shop/_content/Radzen.Blazor/css/default-base.css"); 434 LoadCssDeferred("/shop/MpkWebApp.Client.styles.css"); 435 LoadCss("/shop/css/app.css"); 436 LoadCss("/shop/css/siteApp.css"); 437 })(); 438 </script>
438 439 440 <!--JS after Blazor--> 441
441<script type="text/javascript"> 442 (function () { 443 LoadJsDeferred("/shop/_content/Radzen.Blazor/Radzen.Blazor.js"); 444 LoadJsDeferred("/shop/_content/PixelTech.BlazorComponents/Scripts/PopupObserver.js"); 445 LoadJsDeferred("/shop/_content/PixelTech.BlazorComponents/Scripts/DrawPriceTag.js"); 446 })(); 447 </script>
447 448 449 450 <!--Others--> 451
451<script defer src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
451 452
452<script defer src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
452 453
453<script defer src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.min.js"></script>
453 454 455
455<script> 456 (async function () { 457 try { ScrollBarFunctions.Start(); } catch (e) { console.warn(e); } 458 try { MpkWebAppFunctions.Initialize(); } catch (e) { console.warn(e); } 459 })(); 460 </script>
460 461 462 463 <!--ServiceWorker for NoStore cache control--> 464
464<script> 465 466 async function initServiceWorker() { 467 try { 468 // Wyrejestruj wszystkie istniejÄ ce service workery, z których korzysta skrypt "MpkServiceWorker" 469 const registrations = await navigator.serviceWorker.getRegistrations(); 470 471 for (const registration of registrations) { 472 let unregisterThis = (registration.active && registration.active.scriptURL.includes("MpkServiceWorker")) || 473 (registration.installing && registration.installing.scriptURL.includes("MpkServiceWorker")) || 474 (registration.waiting && registration.waiting.scriptURL.includes("MpkServiceWorker")) || 475 (registration.active && registration.active.scriptURL.includes("FetchNoStore")) || 476 (registration.installing && registration.installing.scriptURL.includes("FetchNoStore")) || 477 (registration.waiting && registration.waiting.scriptURL.includes("FetchNoStore")); 478 479 480 if (unregisterThis) { 481 await registration.unregister(); 482 //console.log('Unregistered ', registration.scope); 483 } 484 } 485 486 // Zarejestruj nowego Service Workera 487 const newRegistration = await navigator.serviceWorker.register('/shop/MpkServiceWorker.js?fv=1789989030474'); 488 //console.log('ServiceWorker success registration: ', newRegistration.scope); 489 490 } catch (err) { 491 console.error('ServiceWorker registration failed', err); 492 } 493 } 494 495 // Clear the session cache 496 function clearSessionCache() { 497 caches.delete('session-cache').then(success => { 498 console.log('session-cache > cleared:', success); 499 }); 500 } 501 502 // Initialize the service worker 503 initServiceWorker(); 504 505 // Use pagehide for most modern browsers 506 window.addEventListener('pagehide', (event) => { clearSessionCache(); }); 507 508 // As a fallback, beforeunload may help in some scenarios. 509 window.addEventListener('beforeunload', (event) => { clearSessionCache(); }); 510 511 // Tylko dla DEBUG - Additionally, listen to visibilitychange to catch cases where the page is no longer visible 512 //window.addEventListener('visibilitychange', () => { 513 // if (document.hidden) { 514 // console.log('document is hidden via visibilitychange'); 515 // clearSessionCache(); 516 // } 517 //}); 518 519 async function removeItemFromServiceWorker(url) { 520 if ('serviceWorker' in navigator && navigator.serviceWorker.controller) { 521 navigator.serviceWorker.controller.postMessage({ 522 type: 'REMOVE_FROM_CACHE', 523 cacheName: 'session-cache', // Nazwa cache 524 url: url // URL do usuniÄcia 525 }); 526 } else { 527 console.warn('Service Worker is not active or not supported.'); 528 } 529 } 530 </script>
530 531 532 <!--Referenced functions--> 533
533<script> 534 (function () { 535 function setVh() { 536 var h = (window.visualViewport && window.visualViewport.height) || window.innerHeight; 537 document.documentElement.style.setProperty('--vh', (h * 0.01) + 'px'); 538 document.documentElement.style.setProperty('--vvh', (h * 0.01) + 'px'); 539 //var kb = Math.max(0, window.innerHeight - window.visualViewport.height - window.visualViewport.offsetTop); 540 if (window.visualViewport.offsetTop > 0) { 541 var kb = Math.max(0, ((window.visualViewport.height - window.visualViewport.offsetTop) / 2)); 542 document.documentElement.style.setProperty('--kb-bottom', kb + 'px'); 543 } 544 else { 545 document.documentElement.style.setProperty('--kb-bottom', 0 + 'px'); 546 } 547 548 } 549 setVh(); 550 window.addEventListener('resize', setVh); 551 window.addEventListener('orientationchange', setVh); 552 })(); 553 554 window.AfterNpmLoad = function () { 555 window.MpkWebAppNpm = MpkWebAppNpm; 556 } 557 558 </script>
558 559 560</body> 561 562</html>
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.