Widget:CommentsRSS

From Jcastle.info

<script> function truncate(text, limit) {

 if (text.length <= limit) return text;
 return text.slice(0, text.lastIndexOf(" ", limit)) + "…";

}

fetch('/view/Special:CommentsRSS')

 .then(res => res.text())
 .then(str => (new window.DOMParser()).parseFromString(str, "text/xml"))
 .then(data => {
   const items = data.querySelectorAll("item");
   const container = document.getElementById("recent-comments");
   if (items.length === 0) {

container.innerHTML = "

No recent comments.

";

     return;
   }
   const maxItems = 5;

// container.innerHTML = "Recent Comments";

   Array.from(items).slice(0, maxItems).forEach(item => {
     const titleText = item.querySelector("title").textContent;
     const link = item.querySelector("link").textContent;
     const rawDesc = item.querySelector("description").textContent;
     const commentText = rawDesc.replace(/<br\s*\/?>/gi, '\n').replace(/<[^>]+>/g, ).trim();
     const pubDate = new Date(item.querySelector("pubDate").textContent);
     const match = titleText.match(/^(.+?) commented on (.+)$/);
     const actor = match ? match[1] : "Anonymous";
     const pageTitle = match ? match[2] : "(unknown)";
     const entry = document.createElement("div");
     entry.style.marginBottom = "1em";
     entry.innerHTML = `
${actor} commented on
         <a href="${link}" target="_blank">${pageTitle}</a>
         (${pubDate.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' })})
${truncate(commentText, 200)}
     `;
     container.appendChild(entry);
   });
   const moreLink = document.createElement("div");
   moreLink.innerHTML = `<a href='/view/Special:RecentComments'> More comments...</a>`;
   moreLink.style.marginTop = "0.5em";
   container.appendChild(moreLink);
   const subscribeLink = document.createElement("div");
   subscribeLink.innerHTML = `<a href='/view/Subscribe_To_Comments' target='_blank'> Subscribe to comments by email</a>`;
   subscribeLink.style.marginTop = "0.25em";
   container.appendChild(subscribeLink);
 })
 .catch(error => {

document.getElementById("recent-comments").innerHTML = "

Error loading comments.

";

   console.error("RSS Load Error:", error);
 });

</script>