이 게시물은 Webmention.io API를 사용하여 사람들이 블로그 게시물과 나눈 모든 상호 작용을 표시하는 방법을 보여줍니다.
이 작업을 수행하려면 두 가지가 필요합니다.
Webmention.io 자체 설정은 이 웹사이트에서 이미 자세한 지침을 제공하므로 이 게시물의 범위를 벗어납니다.
이제 필요한 맞춤 JavaScript로 넘어가겠습니다.
아래는 전체 JavaScript 코드입니다. 코드 다음에 각 부분이 어떻게 작동하는지 설명하겠습니다.
if (document.querySelector("body").classList.contains("post")) { function setContent(child) { switch (child["wm-property"]) { case "in-reply-to": return child.content?.text; case "like-of": return "liked this"; case "repost-of": return "reposted this"; default: return "interacted with this post in an unknown way"; } } async function fetchInteractions(headerTitle) { const response = await fetch("https://webmention.io/api/mentions.jf2?target=" + document.URL); const data = await response.json(); if (data && data.children.length > 0) { const interactions = document.createElement("div"); interactions.innerHTML = `<h3>${headerTitle ?? "Interactions"}</h3>`; for (const child of data.children) { const interaction = document.createElement("div"); interaction.innerHTML = ` <p> <strong><a href="${child.author.url}" target="_blank">${child.author.name}</a></strong> <small> - ${new Date(child["wm-received"]).toLocaleString("en-US", { month: "short", day: "numeric", year: "numeric", })}</small> </p> <blockquote>${setContent(child)}</blockquote> `; interactions.appendChild(interaction); } const upvoteForm = document.getElementById("upvote-form"); upvoteForm.parentNode.insertBefore(interactions, upvoteForm.nextSibling); } } fetchInteractions(document.currentScript.getAttribute("data-interactions")); }
기본 로직은 fetchInteractions() 함수에 있으며, 이 함수는 하나의 매개변수, 즉 모든 상호작용의 헤더로 표시할 텍스트를 허용합니다. 기본적으로 헤더 텍스트는 'Interactions'이지만