style: avatars and web mentions
This commit is contained in:
parent
9a7a1b0671
commit
e6917a15f1
3 changed files with 73 additions and 55 deletions
|
@ -103,42 +103,77 @@
|
||||||
const replies = mentions.filter(
|
const replies = mentions.filter(
|
||||||
(m) => m["wm-property"] === "in-reply-to"
|
(m) => m["wm-property"] === "in-reply-to"
|
||||||
);
|
);
|
||||||
const clearDiv = document.createElement("div");
|
|
||||||
clearDiv.style.clear = "both";
|
|
||||||
|
|
||||||
if (likes.length || reposts.length || replies.length)
|
if (likes.length) {
|
||||||
webMentionsSection.insertAdjacentHTML = "<h3>Web Mentions</h3>";
|
// render on meta header
|
||||||
|
|
||||||
if (likes.length)
|
|
||||||
document.getElementById(
|
document.getElementById(
|
||||||
"page-likes"
|
"page-likes"
|
||||||
).innerHTML = `👍 ${likes.length}`;
|
).innerHTML = `• 👍 ${likes.length} Likes`;
|
||||||
|
|
||||||
if (reposts.length)
|
// render on webmentions section
|
||||||
|
const clearLikes = document.createElement("div");
|
||||||
|
clearLikes.style.clear = "both";
|
||||||
|
const likesWrapper = document.createElement("div");
|
||||||
|
likesWrapper.append(clearLikes);
|
||||||
|
const likesHeader = document.createElement("h2");
|
||||||
|
likesHeader.innerHTML = `👍 ${likes.length} Likes`;
|
||||||
|
likesWrapper.append(likesHeader);
|
||||||
|
const likesAvatars = document.createElement("div");
|
||||||
|
likesAvatars.className = "avatar-block";
|
||||||
|
likes.forEach((like) => {
|
||||||
|
const image = document.createElement("img");
|
||||||
|
image.src = like.author.photo;
|
||||||
|
image.alt = `Avatar for ${like.author.name}`;
|
||||||
|
likesAvatars.append(image);
|
||||||
|
});
|
||||||
|
likesWrapper.append(likesAvatars);
|
||||||
|
|
||||||
|
webMentionsSection.append(likesWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reposts.length) {
|
||||||
|
// render on meta header
|
||||||
document.getElementById(
|
document.getElementById(
|
||||||
"page-reposts"
|
"page-reposts"
|
||||||
).innerHTML = `🔁 ${reposts.length}`;
|
).innerHTML = `• 🔁 ${reposts.length} Reposts`;
|
||||||
|
|
||||||
if (likes.length || reposts.length) {
|
// render on webmentions section
|
||||||
const avatars = document.createElement("div");
|
const repostsWrapper = document.createElement("div");
|
||||||
avatars.className = "avatar-block";
|
const clearReposts = document.createElement("div");
|
||||||
[...reposts, ...likes].forEach((mention) => {
|
clearReposts.style.clear = "both";
|
||||||
|
repostsWrapper.append(clearReposts);
|
||||||
|
const repostsHeader = document.createElement("h2");
|
||||||
|
repostsHeader.innerHTML = `🔁 ${reposts.length} Reposts`;
|
||||||
|
repostsWrapper.append(repostsHeader);
|
||||||
|
|
||||||
|
const repostsAvatars = document.createElement("div");
|
||||||
|
repostsAvatars.className = "avatar-block";
|
||||||
|
reposts.forEach((repost) => {
|
||||||
const image = document.createElement("img");
|
const image = document.createElement("img");
|
||||||
image.src = mention.author.photo;
|
image.src = repost.author.photo;
|
||||||
image.alt = `Avatar for ${mention.author.name}`;
|
image.alt = `Avatar for ${repost.author.name}`;
|
||||||
avatars.append(image);
|
repostsAvatars.append(image);
|
||||||
});
|
});
|
||||||
avatars.append(clearDiv);
|
repostsWrapper.append(repostsAvatars);
|
||||||
webMentionsSection.append(avatars);
|
|
||||||
|
webMentionsSection.append(repostsWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (replies.length) {
|
if (replies.length) {
|
||||||
// render to post header meta
|
// render on meta header
|
||||||
document.getElementById(
|
document.getElementById(
|
||||||
"page-replies"
|
"page-replies"
|
||||||
).innerHTML = `💬 ${replies.length}`;
|
).innerHTML = `• 💬 ${replies.length} Replies`;
|
||||||
|
|
||||||
|
// render on webmentions section
|
||||||
|
const repliesWrapper = document.createElement("div");
|
||||||
|
const clearReplies = document.createElement("div");
|
||||||
|
clearReplies.style.clear = "both";
|
||||||
|
repliesWrapper.append(clearReplies);
|
||||||
|
const repliesHeader = document.createElement("h2");
|
||||||
|
repliesHeader.innerHTML = `💬 ${replies.length} Replies`;
|
||||||
|
repliesWrapper.append(repliesHeader);
|
||||||
|
|
||||||
// render to replies section
|
|
||||||
const repliesTable = document.createElement("table");
|
const repliesTable = document.createElement("table");
|
||||||
replies.forEach((reply) => {
|
replies.forEach((reply) => {
|
||||||
const row = document.createElement("tr");
|
const row = document.createElement("tr");
|
||||||
|
@ -162,22 +197,8 @@
|
||||||
cell.appendChild(card);
|
cell.appendChild(card);
|
||||||
repliesTable.append(row);
|
repliesTable.append(row);
|
||||||
});
|
});
|
||||||
repliesTable.style.display = "none";
|
repliesWrapper.append(repliesTable);
|
||||||
const button = document.createElement("button");
|
webMentionsSection.append(repliesWrapper);
|
||||||
const text = `Show ${replies.length} replies`;
|
|
||||||
button.innerHTML = text;
|
|
||||||
button.onclick = () => {
|
|
||||||
if (repliesTable.style.display === "none") {
|
|
||||||
repliesTable.style.display = "block";
|
|
||||||
button.innerHTML = "Hide replies";
|
|
||||||
} else {
|
|
||||||
repliesTable.style.display = "none";
|
|
||||||
button.innerHTML = text;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
webMentionsSection.append(button);
|
|
||||||
webMentionsSection.append(repliesTable);
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((err) => console.log("err", err));
|
.catch((err) => console.log("err", err));
|
||||||
|
|
|
@ -30,6 +30,9 @@ layout: default
|
||||||
default: "%b %-d, %Y" %} {{ page.date | date: date_format }}
|
default: "%b %-d, %Y" %} {{ page.date | date: date_format }}
|
||||||
</span>
|
</span>
|
||||||
</time>
|
</time>
|
||||||
|
<span id="page-replies"></span>
|
||||||
|
<span id="page-likes"></span>
|
||||||
|
<span id="page-reposts"></span>
|
||||||
</div>
|
</div>
|
||||||
{% if page.image %}
|
{% if page.image %}
|
||||||
<img
|
<img
|
||||||
|
@ -81,10 +84,6 @@ layout: default
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="blog-post__web-mentions">
|
<div class="blog-post__web-mentions"></div>
|
||||||
<span class="blog-post__header__meta__engagement" id="page-replies"></span>
|
|
||||||
<span class="blog-post__header__meta__engagement" id="page-likes"></span>
|
|
||||||
<span class="blog-post__header__meta__engagement" id="page-reposts"></span>
|
|
||||||
</div>
|
|
||||||
<a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
|
<a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
|
||||||
</article>
|
</article>
|
||||||
|
|
|
@ -438,20 +438,16 @@ table.image caption {
|
||||||
&__web-mentions {
|
&__web-mentions {
|
||||||
margin: 2em 0;
|
margin: 2em 0;
|
||||||
max-width: fit-content;
|
max-width: fit-content;
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
.avatar-block {
|
.avatar-block {
|
||||||
display: block;
|
display: inline-block;
|
||||||
margin: 1em auto;
|
margin-bottom: 1.5em;
|
||||||
padding: 0 1em;
|
padding-left: 1.5em;
|
||||||
max-width: fit-content;
|
max-width: fit-content;
|
||||||
|
border-left: 3px solid rgba(34, 34, 34, 0.15);
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 2em;
|
margin-left: -1em;
|
||||||
height: 2em;
|
|
||||||
border-radius: 50%;
|
|
||||||
border: 1px solid #80ae3c;
|
|
||||||
margin-left: -0.7em;
|
|
||||||
float: left;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,10 +459,12 @@ table.image caption {
|
||||||
border-left: 3px solid rgba(34, 34, 34, 0.15);
|
border-left: 3px solid rgba(34, 34, 34, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
.reply-photo {
|
.reply-photo,
|
||||||
width: 2em;
|
.avatar-block img {
|
||||||
height: 2em;
|
width: 3em;
|
||||||
|
height: 3em;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
border: 3px solid white;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue