Scratch Comment emulatorを作ってみた!
2024/07/02

Scratchでコメントをした際にどのように表示されるのかをエミュレートするプログラムを作りました。ご自由にお使いください。

for users

alert("Scratch comment emulator");
if (window.location.href.startsWith("https://scratch.mit.edu/users/")) {
  var comment_box = document.createElement("div");
  comment_box.id = Math.floor(Math.random() * 10 ** 10);
  comment_box.className = "comment";
  var actions_warp = document.createElement("div");
  actions_warp.className = "actions-wrap";
  actions_warp.innerHTML = '<span data-control="delete" class="actions report">Delete</span>\n<span data-control="report" class="actions report"> 報告 </span>';
  comment_box.append(actions_warp);
  const comment_user_a = document.createElement("a");
  const comment_username = prompt("user: ");
  comment_user_a.href = "/users/" + comment_username;
  const comment_image = document.createElement("img");
  comment_image.className = "avatar";
  fetch("https://api.scratch.mit.edu/users/" + comment_username)
    .then(res => res.json())
    .then(data => {
      comment_image.src = data.profile.images["60x60"];
      comment_image.alt = comment_username;
    })
    .catch(err => alert("error: " + err));
  comment_image.width = 45;
  comment_image.height = 45;
  comment_user_a.append(comment_image);
  comment_box.append(comment_user_a);
  const comment_info = document.createElement("div");
  comment_info.className = "info";
  comment_info.innerHTML = '<div class="name">\n<a href="/users/' + comment_username + '">' + comment_username + '</a>\n</div>';
  comment_content = document.createElement("div");
  comment_content.className = "content";
  comment_content.innerHTML = prompt("text: ");
  comment_info.append(comment_content);
  const comment_info_other = document.createElement("div");
  comment_info_other.innerHTML = `
<div>
<span class="time" title="made by The Infinity's">1 minute ago</span>
<a
  class="reply"
  style="display: inline;"
  data-comment-id="1234567890"
  data-parent-thread="1234567890"
  data-commentee-id="1234567890"
  data-control="reply-to">
  <span>Reply</span>
</a>
</div>
<div data-content="reply-form"></div>
`;
  comment_info.append(comment_info_other);
  comment_box.append(comment_info);
  const comment_li = document.createElement("li");
  comment_li.className = "top-level-reply";
  comment_li.append(comment_box);
  const comment_ul = document.createElement("ul");
  comment_ul.className = "replies";
  comment_li.append(comment_ul);
  document.querySelector("ul.comments").prepend(comment_li);
  /*
  <div id="comments-1234567890" class="comment" data-comment-id="335898053">
    <div class="actions-wrap">
      <span data-control="delete" class="actions report">Delete</span>
      <span data-control="report" class="actions report"> 報告 </span>
    </div>
    <a href="/users/michinsk" id="comment-user" data-comment-user="michinsk"
      ><img
        class="avatar"
        src="//cdn2.scratch.mit.edu/get_image/user/89663687_60x60.png"
        width="45"
        height="45"
    /></a>
    <div class="info">
      <div class="name">
        <a href="/users/michinsk">michinsk</a>
      </div>
      <div class="content">icon変わりましたね。このアイコン不思議です</div>
      <div>
        <span class="time" title="June 23, 2024">about 5 hours ago</span>

        <a
          class="reply"
          style="display: inline;"
          data-comment-id="335898053"
          data-parent-thread="335898053"
          data-commentee-id="89663687"
          data-control="reply-to">
          <span>Reply</span>
        </a>
      </div>
      <div data-content="reply-form"></div>
    </div>
  </div>
  */
} else if (
  window.location.href.startsWith("https://scratch.mit.edu/projects/")
) {
  var comment_box = document.createElement("div");
  comment_box.id = Math.floor(Math.random() * 10 ** 10);
  comment_box.className = "flex-row comment";
  const comment_user_a = document.createElement("a");
  const comment_username = prompt("user: ");
  comment_user_a.href = "/users/" + comment_username;
  const comment_image = document.createElement("img");
  comment_image.className = "avatar";
  fetch("https://api.scratch.mit.edu/users/" + comment_username)
    .then(res => res.json())
    .then(data => {
      comment_image.src = data.profile.images["60x60"];
      comment_image.alt = comment_username;
    })
    .catch(err => alert("error: " + err));
  comment_image.width = 45;
  comment_image.height = 45;
  comment_user_a.append(comment_image);
  comment_box.append(comment_user_a);
  const comment_bubble = document.createElement("div");
  comment_bubble.className = "comment-bubble";
  const comment_content = document.createElement("span");
  comment_content.innerHTML = '<span class="emoji-text">' + prompt("text") + '</span>';
  const comment_bottom = document.createElement("div");
  comment_bottom.className="flex-row comment-bottom-row";
  comment_bottom.innerHTML = '<span class="comment-time"><span>' + prompt("date(examples 「4 時間前」、「1 分前」...): ") + '</span></span><span class="comment-reply"><span>返信</span></span>';
  comment_bubble.append(comment_content);
  comment_bubble.append(comment_bottom);
  const comment_body = document.createElement("div");
  comment_body.className = "flex-row comment-body column";
  comment_body.innerHTML = '<div class="flex-row comment-top-row"><a class="username" href="/users/' + comment_username + '">' + comment_username + '</a><div class="action-list"></div></div>';
  comment_body.append(comment_bubble);
  comment_box.append(comment_body);
  const comment_container = document.createElement("div");
  comment_container.className = "flex-row comment-container";
  comment_container.append(comment_box);
  document.querySelector(".comments-list").prepend(comment_container);

  /*
  <div class="flex-row comment-container">
    <div class="flex-row comment" id="comments-411231997">
      <a href="/users/Nhienzcute"
        ><img
          class="avatar"
          src="https://cdn2.scratch.mit.edu/get_image/user/133904533_60x60.png"
      /></a>
      <div class="flex-row comment-body column">
        <div class="flex-row comment-top-row">
          <a class="username" href="/users/Nhienzcute"
            >Nhienzcute</a
          >
          <div class="action-list"></div>
        </div>
        <div class="comment-bubble">
          <span class="comment-content"
            ><span class="emoji-text"
              >dare you search "nhienzcute" on google</span
            ></span
          >
          <div class="flex-row comment-bottom-row">
            <span class="comment-time"
              ><span>4 時間前</span></span
            >
          </div>
        </div>
      </div>
    </div>
  </div>
  */
} else {
  alert("対応していません")
}
          
Copy To ClipBoard
Share On X