>웹 프론트엔드 >JS 튜토리얼 >Bear 블로그에 웹멘션 상호 작용을 표시하는 단계별 가이드

Bear 블로그에 웹멘션 상호 작용을 표시하는 단계별 가이드

Barbara Streisand
Barbara Streisand원래의
2024-11-03 15:15:02643검색

Step-by-Step Guide to Show Webmention Interactions on Bear Blog

이 게시물은 Webmention.io API를 사용하여 사람들이 블로그 게시물과 나눈 모든 상호 작용을 표시하는 방법을 보여줍니다.

이 작업을 수행하려면 두 가지가 필요합니다.

  1. Webmention.io 서비스를 이용하려면 홈페이지가 설정되어 있어야 합니다.
  2. 각 블로그 게시물 아래에 상호 작용을 표시하려면 약간의 맞춤 JavaScript가 필요합니다.

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'이지만