PageSourceSearch

https://pupwife.com/scripts/effects/ensureSiteFontAwesome.js

js pupwife.com collected 2026-09-30 15:05:59 UTC 3,613 bytes, 97 lines download raw bytes

1/**
2 * Single Font Awesome 7 (CSS/webfont) loader for the dashboard SPA shell.
3 * Use CSS + fa-solid / fa-brands markup — not legacy fas/fab or the FA JS bundle.
4 */
5(function (global) {
6    'use strict';
7
8    var FA_HREF = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css';
9    var readyPromise = null;
10
11    function isValidSiteLink(link) {
12        if (!link) return false;
13        var href = link.getAttribute('href') || link.href || '';
14        return href.indexOf('font-awesome/7.') !== -1;
15    }
16
17    function findSiteLink() {
18        var tagged = document.querySelector('link[data-site-fontawesome="7"]');
19        if (isValidSiteLink(tagged)) return tagged;
20        if (tagged && tagged.parentNode) tagged.parentNode.removeChild(tagged);
21        return null;
22    }
23
24    function removeStaleFontAwesome() {
25        var links = document.querySelectorAll('link[href*="font-awesome"], link[href*="fontawesome"]');
26        var i;
27        for (i = 0; i < links.length; i++) {
28            if (links[i].getAttribute('data-site-fontawesome') === '7' && isValidSiteLink(links[i])) continue;
29            if (links[i].parentNode) links[i].parentNode.removeChild(links[i]);
30        }
31        var scripts = document.querySelectorAll('script[src*="font-awesome"][src*="/js/"]');
32        for (i = 0; i < scripts.length; i++) {
33            if (scripts[i].dataset && scripts[i].dataset.spaLoaded === '1') {
34                scripts[i].parentNode.removeChild(scripts[i]);
35            }
36        }
37    }
38
39    function waitForLink(link) {
40        if (!link) return Promise.resolve(null);
41        if (link.dataset.faReady === '1') return Promise.resolve(link);
42        if (link.sheet) {
43            link.dataset.faReady = '1';
44            return Promise.resolve(link);
45        }
46        return new Promise(function (resolve) {
47            function done() {
48                link.removeEventListener('load', done);
49                link.removeEventListener('error', onError);
50                link.dataset.faReady = '1';
51                resolve(link);
52            }
53            function onError() {
54                link.removeEventListener('load', done);
55                link.removeEventListener('error', onError);
56                console.warn('[ensureSiteFontAwesome] Font Awesome 7 stylesheet failed to load');
57                resolve(link);
58            }
59            link.addEventListener('load', done);
60            link.addEventListener('error', onError);
61        });
62    }
63
64    function ensureSiteFontAwesome() {
65        if (readyPromise) return readyPromise;
66
67        readyPromise = new Promise(function (resolve) {
68            removeStaleFontAwesome();
69            var existing = findSiteLink();
70            if (existing) {
71                waitForLink(existing).then(resolve);
72                return;
73            }
74
75            var link = document.createElement('link');
76            link.rel = 'stylesheet';
77            link.href = FA_HREF;
78            link.crossOrigin = 'anonymous';
79            link.referrerPolicy = 'no-referrer';
80            link.setAttribute('data-site-fontawesome', '7');
81            document.head.appendChild(link);
82            waitForLink(link).then(resolve);
83        });
84
85        return readyPromise;
86    }
87
88    global.ensureSiteFontAwesome = ensureSiteFontAwesome;
89    global.SiteFontAwesome = {
90        HREF: FA_HREF,
91        ensure: ensureSiteFontAwesome,
92        isReady: function () {
93            var link = findSiteLink();
94            return !!(link && (link.dataset.faReady === '1' || link.sheet));
95        }
96    };
97})(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.