PageSourceSearch

https://slowtwitch.com/wp-content/themes/slowtwitch-news/assets/js/advertserve-ads.js?ver=2.4.0

js slowtwitch.com collected 2026-09-24 08:52:45 UTC 4,360 bytes, 120 lines download raw bytes

1(function () {
2    function injectHtmlAd(container, rawHtml) {
3        container.innerHTML = "";
4
5        const temp = document.createElement("div");
6        temp.innerHTML = rawHtml;
7
8        Array.from(temp.childNodes).forEach((node) => {
9            if (node.nodeName === "SCRIPT") {
10                const script = document.createElement("script");
11
12                Array.from(node.attributes).forEach((attr) => {
13                    script.setAttribute(attr.name, attr.value);
14                });
15
16                if (node.textContent) {
17                    if (node.textContent.includes("adsbygoogle") && node.textContent.includes("push")) {
18                        script.textContent = `try { ${node.textContent} } catch(e) {}`;
19                    } else {
20                        script.textContent = node.textContent;
21                    }
22                }
23
24                container.appendChild(script);
25            } else if (node.nodeType === 1 && node.classList?.contains("adsbygoogle")) {
26                const clone = node.cloneNode(true);
27
28                clone.style.opacity = "0";
29                clone.style.transition = "opacity 0.3s ease";
30
31                container.appendChild(clone);
32
33                const adObserver = new MutationObserver(() => {
34                    if (clone.dataset.adStatus === "filled" || clone.querySelector("iframe")) {
35                        clone.style.opacity = "1";
36                        adObserver.disconnect();
37                    }
38                });
39
40                adObserver.observe(clone, {
41                    childList: true,
42                    subtree: true,
43                    attributes: true,
44                    attributeFilter: ["data-ad-status"],
45                });
46
47                setTimeout(() => {
48                    clone.style.opacity = "1";
49                    adObserver.disconnect();
50                }, 3000);
51            } else {
52                container.appendChild(node.cloneNode(true));
53            }
54        });
55    }
56
57    function createAdvertServeLoader({ selector, adUrl }) {
58        const processedAds = new WeakSet();
59
60        function loadAd(container) {
61            if (processedAds.has(container)) return;
62            processedAds.add(container);
63
64            fetch(adUrl)
65                .then((response) => response.text())
66                .then((html) => {
67                    if (!container.isConnected) return;
68
69                    const isAdSense = /adsbygoogle/i.test(html);
70
71                    if (isAdSense) {
72                        injectHtmlAd(container, html);
73                    } else {
74                        const parser = new DOMParser();
75                        const doc = parser.parseFromString(html, "text/html");
76                        const adElement = doc.body.firstElementChild || doc.querySelector("a, img, div");
77                        if (!adElement) return;
78
79                        adElement.querySelectorAll("img").forEach((img) => {
80                            img.removeAttribute("width");
81                            img.removeAttribute("height");
82                            img.style.width = "100%";
83                            img.style.height = "auto";
84                        });
85
86                        container.innerHTML = "";
87                        container.appendChild(adElement);
88                    }
89                })
90                .catch((err) => {
91                    console.error("AdvertServe ad failed:", selector, err);
92                });
93        }
94
95        function injectAds() {
96            document.querySelectorAll(selector).forEach(loadAd);
97        }
98
99        injectAds();
100
101        const observer = new MutationObserver(injectAds);
102        observer.observe(document.body, {
103            childList: true,
104            subtree: true,
105        });
106    }
107
108    createAdvertServeLoader({
109        selector: ".advertserve-long",
110        adUrl: "https://slowtwitch2.advertserve.com/servlet/view/banner/url/zone?zid=5&pid=0",
111    });
112    createAdvertServeLoader({
113        selector: ".advertserve-sidebar-small",
114        adUrl: "https://slowtwitch2.advertserve.com/servlet/view/banner/url/zone?zid=6&pid=0",
115    });
116    createAdvertServeLoader({
117        selector: ".advertserve-sidebar-tall",
118        adUrl: "https://slowtwitch2.advertserve.com/servlet/view/banner/url/zone?zid=7&pid=0",
119    });
120})();

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.