PageSourceSearch

https://www.finlandiatalo.fi/wp-content/themes/finlandiatalo/block…?ver=3be55b05081a63d8f9d0ecb466c42cfd

js finlandiatalo.fi collected 2026-09-24 20:06:34 UTC 2,884 bytes, 88 lines download raw bytes

1document.addEventListener("DOMContentLoaded", function () {
2
3  // 🔥 hae kaikki feed-blokit
4  const feedcontents = document.querySelectorAll("#feedcontent");
5
6  if (!feedcontents.length) return;
7
8  feedcontents.forEach((feedcontent) => {
9
10    const feedurl = feedcontent.dataset.feedurl;
11    const nop = parseInt(feedcontent.dataset.nop);
12    const fallbackimageurl = feedcontent.dataset.fbackimage;
13    const useProxy = feedcontent.dataset.useproxy === "1";
14
15    const proxyUrl = `/wp-admin/admin-ajax.php?action=finlandiatalo_rss_proxy&url=${encodeURIComponent(feedurl)}`;
16
17    fetch(useProxy ? proxyUrl : feedurl)
18      .then((response) => response.text())
19      .then((str) => new window.DOMParser().parseFromString(str, "text/xml"))
20      .then((data) => {
21
22        const items = data.getElementsByTagName("item");
23
24        console.log("📰 Items in feed:", items.length, feedurl);
25
26        let html = "";
27
28        for (let i = 0; i < nop; i++) {
29          if (!items[i]) continue;
30
31          const item = items[i];
32
33          const title = item.getElementsByTagName("title")[0]?.textContent || "No title";
34          const link = item.getElementsByTagName("link")[0]?.textContent || "#";
35
36          let source = "STT Info";
37          let sourceurl = "https://www.sttinfo.fi";
38
39          const sourceNode = item.getElementsByTagName("source")[0];
40          if (sourceNode) {
41            source = sourceNode.textContent;
42            sourceurl = sourceNode.getAttribute("url") || "#";
43          }
44
45          let thumburl = fallbackimageurl;
46
47          const thumbs = item.getElementsByTagName("media:thumbnail");
48          if (thumbs.length > 0) {
49            thumburl = thumbs[0].getAttribute("url");
50          } else {
51            const desc = item.getElementsByTagName("description")[0]?.textContent || "";
52            const match = desc.match(/<img.*?src="(.*?)"/);
53            if (match && match[1]) {
54              thumburl = match[1];
55            }
56          }
57
58          html += `
59            <div class="entry-content d-flex justify-content-start">
60              <div class="entry-img">
61                <p>
62                  <img class="square-img" src="${thumburl}" alt="${title}" 
63                  onerror="this.src='${fallbackimageurl}'">
64                </p>
65              </div>
66              <div class="entry-text ms-4">
67                <div class="entry-meta">
68                  <p class="entry-time mb-1 text-uppercase">
69                    <a href="${sourceurl}" target="_blank">${source}</a>
70                  </p>
71                </div>
72                <h3>
73                  <a href="${link}" target="_blank">${title}</a>
74                </h3>
75              </div>
76            </div>
77          `;
78        }
79
80        feedcontent.innerHTML = html;
81      })
82      .catch((err) => {
83        console.error("❌ RSS error:", err, feedurl);
84      });
85
86  });
87
88});

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.