PageSourceSearch

https://pupwife.com/scripts/dependencies/resolveSiteAssetUrl.js

js pupwife.com collected 2026-09-30 15:05:57 UTC 2,460 bytes, 70 lines download raw bytes

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.