1/** 2 * Resolve site-root asset URLs so nested routes (/casino/slots.html) and SPA swaps 3 * (before history.pushState) do not 404 on paths like images/foo.webp. 4 */ 5(function (global) { 6 'use strict'; 7 8 function resolveSiteAssetUrl(url) { 9 if (!url || typeof url !== 'string') return url; 10 if (/^(https?:)?\/\//i.test(url) || url.indexOf('data:') === 0 || url.indexOf('blob:') === 0) { 11 return url; 12 } 13 if (url.charAt(0) === '/') return url; 14 return '/' + url.replace(/^\.\//, ''); 15 } 16 17 function resolveInlineStyleAssetUrls(style) { 18 if (!style || style.indexOf('url(') === -1) return style; 19 return style.replace( 20 /url\(\s*(['"]?)(?!https?:|\/\/|\/|data:|blob:)([^'")]+)\1\s*\)/gi, 21 function (_, quote, path) { 22 return 'url(' + quote + resolveSiteAssetUrl(path) + quote + ')'; 23 } 24 ); 25 } 26 27 function resolveSrcset(value) { 28 if (!value) return value; 29 return value.split(',').map(function (part) { 30 part = part.trim(); 31 if (!part) return part; 32 var bits = part.split(/\s+/); 33 bits[0] = resolveSiteAssetUrl(bits[0]); 34 return bits.join(' '); 35 }).join(', '); 36 } 37 38 function fixElementAssetUrls(el) { 39 if (!el || el.nodeType !== 1) return; 40 41 var src = el.getAttribute('src'); 42 if (src) el.setAttribute('src', resolveSiteAssetUrl(src)); 43 44 var poster = el.getAttribute('poster'); 45 if (poster) el.setAttribute('poster', resolveSiteAssetUrl(poster)); 46 47 var srcset = el.getAttribute('srcset'); 48 if (srcset) el.setAttribute('srcset', resolveSrcset(srcset)); 49 50 var style = el.getAttribute('style');
51 if (style && style.indexOf('url(') !== -1) { 52 el.setAttribute('style', resolveInlineStyleAssetUrls(style)); 53 } 54 } 55 56 function fixRelativeSiteAssets(root) { 57 if (!root) return root; 58 fixElementAssetUrls(root); 59 if (!root.querySelectorAll) return root; 60 61 var nodes = root.querySelectorAll('img[src], video[src], video[poster], audio[src], source[src]'); 62 for (var i = 0; i < nodes.length; i++) { 63 fixElementAssetUrls(nodes[i]); 64 } 65 return root; 66 } 67 68 global.resolveSiteAssetUrl = resolveSiteAssetUrl; 69 global.fixRelativeSiteAssets = fixRelativeSiteAssets; 70})(typeof window !== 'undefined' ? window : this);
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.