Add support for CWs in comments
This commit is contained in:
@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Add `title` class for use on `<strong>`.
|
- Add `title` class for use on `<strong>`.
|
||||||
- Add missing translation strings for author separator and conjunctions.
|
- Add missing translation strings for author separator and conjunctions.
|
||||||
- Add shortcode for Mastodon post embedding.
|
- Add shortcode for Mastodon post embedding.
|
||||||
|
- Add support for blurred media in comments.
|
||||||
|
- Add support for content warnings (CWs) in comments.
|
||||||
- Add support for Fuse.js search (#101).
|
- Add support for Fuse.js search (#101).
|
||||||
- Add support for preview cards in comments.
|
- Add support for preview cards in comments.
|
||||||
- Add the ability to set video attributes via shortcode.
|
- Add the ability to set video attributes via shortcode.
|
||||||
|
@ -35,6 +35,7 @@ disclaimer = """
|
|||||||
# host = "mastodon.blaede.family"
|
# host = "mastodon.blaede.family"
|
||||||
# user = "cassidy"
|
# user = "cassidy"
|
||||||
# id = "110669429936617026"
|
# id = "110669429936617026"
|
||||||
|
#
|
||||||
# Post on GoToSocial
|
# Post on GoToSocial
|
||||||
#
|
#
|
||||||
# host = "alpha.polymaths.social"
|
# host = "alpha.polymaths.social"
|
||||||
|
@ -61,6 +61,7 @@ reload = "إعادة التحميل"
|
|||||||
repo = "المستودع"
|
repo = "المستودع"
|
||||||
search = "بحث"
|
search = "بحث"
|
||||||
search_for = "ابحث عن"
|
search_for = "ابحث عن"
|
||||||
|
sensitive = "المحتوى الحساس"
|
||||||
share = "شارك"
|
share = "شارك"
|
||||||
skip_to_content = "تخطي إلى المحتوى الرئيسي"
|
skip_to_content = "تخطي إلى المحتوى الرئيسي"
|
||||||
source = "مصدر الموقع الإلكتروني"
|
source = "مصدر الموقع الإلكتروني"
|
||||||
|
@ -65,6 +65,7 @@ reload = "Reload"
|
|||||||
repo = "Repository"
|
repo = "Repository"
|
||||||
search = "Search"
|
search = "Search"
|
||||||
search_for = "Search for"
|
search_for = "Search for"
|
||||||
|
sensitive = "Sensitive Content"
|
||||||
share = "Share"
|
share = "Share"
|
||||||
skip_to_content = "Skip to Main Content"
|
skip_to_content = "Skip to Main Content"
|
||||||
source = "Website source"
|
source = "Website source"
|
||||||
|
@ -65,6 +65,7 @@ reload = "Recargar"
|
|||||||
repo = "Repositorio"
|
repo = "Repositorio"
|
||||||
search = "Buscar"
|
search = "Buscar"
|
||||||
search_for = "Buscar por"
|
search_for = "Buscar por"
|
||||||
|
sensitive = "Contenido sensible"
|
||||||
share = "Compartir"
|
share = "Compartir"
|
||||||
skip_to_content = "Saltar al contenido principal"
|
skip_to_content = "Saltar al contenido principal"
|
||||||
source = "Fuente del sitio web"
|
source = "Fuente del sitio web"
|
||||||
|
@ -65,6 +65,7 @@ reload = "بارگیری مجدد"
|
|||||||
repo = "مخزن کد"
|
repo = "مخزن کد"
|
||||||
search = "جستجو"
|
search = "جستجو"
|
||||||
search_for = "جستجو برای"
|
search_for = "جستجو برای"
|
||||||
|
sensitive = "محتوای حساس"
|
||||||
share = "اشتراک"
|
share = "اشتراک"
|
||||||
skip_to_content = "برو به اصل مطلب"
|
skip_to_content = "برو به اصل مطلب"
|
||||||
source = "سورس"
|
source = "سورس"
|
||||||
|
@ -65,6 +65,7 @@ reload = "Muat semula"
|
|||||||
repo = "Repositori"
|
repo = "Repositori"
|
||||||
search = "Cari"
|
search = "Cari"
|
||||||
search_for = "Cari untuk"
|
search_for = "Cari untuk"
|
||||||
|
sensitive = "Kandungan Sensitif"
|
||||||
share = "Bagikan"
|
share = "Bagikan"
|
||||||
skip_to_content = "Melompat ke kandungan utama"
|
skip_to_content = "Melompat ke kandungan utama"
|
||||||
source = "Sumber laman web"
|
source = "Sumber laman web"
|
||||||
|
@ -72,6 +72,7 @@ reload = "Перезагрузить"
|
|||||||
repo = "Репозиторий"
|
repo = "Репозиторий"
|
||||||
search = "Поиск"
|
search = "Поиск"
|
||||||
search_for = "Искать"
|
search_for = "Искать"
|
||||||
|
sensitive = "Чувствительный контент"
|
||||||
share = "Поделиться"
|
share = "Поделиться"
|
||||||
skip_to_content = "Перейти к основному содержанию"
|
skip_to_content = "Перейти к основному содержанию"
|
||||||
source = "Исходный код веб-сайта"
|
source = "Исходный код веб-сайта"
|
||||||
|
@ -66,6 +66,7 @@ reload = "重新加载"
|
|||||||
repo = "存储库"
|
repo = "存储库"
|
||||||
search = "搜索"
|
search = "搜索"
|
||||||
search_for = "寻找"
|
search_for = "寻找"
|
||||||
|
sensitive = "敏感内容"
|
||||||
share = "分享"
|
share = "分享"
|
||||||
skip_to_content = "跳转到正文"
|
skip_to_content = "跳转到正文"
|
||||||
source = "网站源码"
|
source = "网站源码"
|
||||||
|
@ -65,7 +65,8 @@
|
|||||||
"avatar name "
|
"avatar name "
|
||||||
"avatar time "
|
"avatar time "
|
||||||
"avatar post "
|
"avatar post "
|
||||||
"avatar media "
|
"...... media "
|
||||||
|
"...... card "
|
||||||
"...... interactions";
|
"...... interactions";
|
||||||
column-gap: 1rem;
|
column-gap: 1rem;
|
||||||
justify-items: start;
|
justify-items: start;
|
||||||
@ -221,9 +222,65 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
details {
|
||||||
|
&[open] {
|
||||||
|
border-radius: var(--rounded-corner-small);
|
||||||
|
background-image:
|
||||||
|
linear-gradient(to right,
|
||||||
|
transparent,
|
||||||
|
transparent 0.5rem,
|
||||||
|
var(--fg-muted-1) 0.5rem,
|
||||||
|
var(--fg-muted-1) calc(100% - 0.5rem),
|
||||||
|
transparent calc(100% - 0.5rem),
|
||||||
|
transparent),
|
||||||
|
linear-gradient(to right,
|
||||||
|
transparent,
|
||||||
|
transparent 0.5rem,
|
||||||
|
var(--bg-color) 0.5rem,
|
||||||
|
var(--bg-color) calc(100% - 0.5rem),
|
||||||
|
transparent calc(100% - 0.5rem),
|
||||||
|
transparent),
|
||||||
|
repeating-linear-gradient(45deg,
|
||||||
|
var(--contrast-color),
|
||||||
|
var(--contrast-color) 0.25rem,
|
||||||
|
var(--accent-color) 0.25rem,
|
||||||
|
var(--accent-color) 0.5rem);
|
||||||
|
|
||||||
|
summary {
|
||||||
|
border-radius: 0;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
border-radius: var(--rounded-corner-small);
|
||||||
|
background-image:
|
||||||
|
linear-gradient(to right,
|
||||||
|
transparent,
|
||||||
|
transparent 0.5rem,
|
||||||
|
var(--fg-muted-1) 0.5rem,
|
||||||
|
var(--fg-muted-1) calc(100% - 0.5rem),
|
||||||
|
transparent calc(100% - 0.5rem),
|
||||||
|
transparent),
|
||||||
|
linear-gradient(to right,
|
||||||
|
transparent,
|
||||||
|
transparent 0.5rem,
|
||||||
|
var(--bg-color) 0.5rem,
|
||||||
|
var(--bg-color) calc(100% - 0.5rem),
|
||||||
|
transparent calc(100% - 0.5rem),
|
||||||
|
transparent),
|
||||||
|
repeating-linear-gradient(45deg,
|
||||||
|
var(--contrast-color),
|
||||||
|
var(--contrast-color) 0.25rem,
|
||||||
|
var(--accent-color) 0.25rem,
|
||||||
|
var(--accent-color) 0.5rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
grid-area: post;
|
grid-area: post;
|
||||||
margin-block-start: 1rem;
|
margin-block-start: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
:first-child {
|
:first-child {
|
||||||
margin-block-start: 0;
|
margin-block-start: 0;
|
||||||
@ -248,6 +305,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
|
grid-area: card;
|
||||||
transition: var(--transition);
|
transition: var(--transition);
|
||||||
margin-block-start: 1rem;
|
margin-block-start: 1rem;
|
||||||
width: min(calc(var(--container-width) / 2), 100%);
|
width: min(calc(var(--container-width) / 2), 100%);
|
||||||
|
@ -79,6 +79,7 @@
|
|||||||
summary {
|
summary {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
transition: var(--transition);
|
transition: var(--transition);
|
||||||
|
box-shadow: none;
|
||||||
border-radius: 999px;
|
border-radius: 999px;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
padding: 0.625rem 0.75rem;
|
padding: 0.625rem 0.75rem;
|
||||||
|
@ -226,13 +226,12 @@ aside {
|
|||||||
}
|
}
|
||||||
|
|
||||||
details {
|
details {
|
||||||
box-shadow: var(--edge-highlight);
|
|
||||||
border-radius: var(--rounded-corner);
|
|
||||||
background-color: var(--fg-muted-1);
|
|
||||||
padding: 1rem;
|
|
||||||
|
|
||||||
summary {
|
summary {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
box-shadow: var(--edge-highlight);
|
||||||
|
border-radius: var(--rounded-corner);
|
||||||
|
background-color: var(--fg-muted-1);
|
||||||
|
padding: 1rem;
|
||||||
color: var(--fg-muted-5);
|
color: var(--fg-muted-5);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
@ -262,18 +261,30 @@ details {
|
|||||||
margin-block-end: 0;
|
margin-block-end: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&[open] summary {
|
&[open] {
|
||||||
&::before {
|
box-shadow: var(--edge-highlight);
|
||||||
transform: scaleY(-1);
|
border-radius: var(--rounded-corner);
|
||||||
}
|
background-color: var(--fg-muted-1);
|
||||||
|
padding: 1rem;
|
||||||
|
|
||||||
& ~ * {
|
summary {
|
||||||
animation: details-open var(--transition);
|
box-shadow: none;
|
||||||
|
border-radius: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
@keyframes details-open {
|
&::before {
|
||||||
from {
|
transform: scaleY(-1);
|
||||||
transform: translateY(-1rem);
|
}
|
||||||
opacity: 0;
|
|
||||||
|
& ~ * {
|
||||||
|
animation: details-open var(--transition);
|
||||||
|
|
||||||
|
@keyframes details-open {
|
||||||
|
from {
|
||||||
|
transform: translateY(-1rem);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
// Taken from https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/
|
// Taken from https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/
|
||||||
// Attachment code taken from https://github.com/cassidyjames/cassidyjames.github.io/blob/99782788a7e3ba3cc52d6803010873abd1b02b9e/_includes/comments.html#L251-L296
|
// Attachment code taken from https://github.com/cassidyjames/cassidyjames.github.io/blob/99782788a7e3ba3cc52d6803010873abd1b02b9e/_includes/comments.html#L251-L296
|
||||||
|
|
||||||
let relAttributes = document.getElementById("rel-attributes").textContent;
|
|
||||||
let host = document.getElementById("host").textContent;
|
|
||||||
let user = document.getElementById("user").textContent;
|
|
||||||
let id = document.getElementById("id").textContent;
|
|
||||||
let dateLocale = document.getElementById("date-locale").textContent;
|
|
||||||
let loadingText = document.getElementById("loading-text").textContent;
|
|
||||||
let reloadText = document.getElementById("reload-text").textContent;
|
|
||||||
let viewProfileText = document.getElementById("view-profile-text").textContent;
|
|
||||||
let viewCommentText = document.getElementById("view-comment-text").textContent;
|
|
||||||
let boostsFromText = document.getElementById("boosts-from-text").textContent;
|
|
||||||
let favesFromText = document.getElementById("faves-from-text").textContent;
|
|
||||||
let blogPostAuthorText = document.getElementById("blog-post-author-text").textContent;
|
let blogPostAuthorText = document.getElementById("blog-post-author-text").textContent;
|
||||||
|
let boostsFromText = document.getElementById("boosts-from-text").textContent;
|
||||||
|
let dateLocale = document.getElementById("date-locale").textContent;
|
||||||
|
let favesFromText = document.getElementById("faves-from-text").textContent;
|
||||||
|
let host = document.getElementById("host").textContent;
|
||||||
|
let id = document.getElementById("id").textContent;
|
||||||
|
let loadingText = document.getElementById("loading-text").textContent;
|
||||||
let noCommentsText = document.getElementById("no-comments-text").textContent;
|
let noCommentsText = document.getElementById("no-comments-text").textContent;
|
||||||
|
let relAttributes = document.getElementById("rel-attributes").textContent;
|
||||||
|
let reloadText = document.getElementById("reload-text").textContent;
|
||||||
|
let sensitiveText = document.getElementById("sensitive-text").textContent;
|
||||||
|
let user = document.getElementById("user").textContent;
|
||||||
|
let viewCommentText = document.getElementById("view-comment-text").textContent;
|
||||||
|
let viewProfileText = document.getElementById("view-profile-text").textContent;
|
||||||
|
|
||||||
document.getElementById("load-comments").addEventListener("click", loadComments);
|
document.getElementById("load-comments").addEventListener("click", loadComments);
|
||||||
|
|
||||||
@ -193,7 +194,22 @@ function loadComments() {
|
|||||||
|
|
||||||
let main = document.createElement("main");
|
let main = document.createElement("main");
|
||||||
main.setAttribute("itemprop", "text");
|
main.setAttribute("itemprop", "text");
|
||||||
main.innerHTML = status.content;
|
|
||||||
|
if (status.sensitive == true || status.spoiler_text != "") {
|
||||||
|
let summary = document.createElement("summary");
|
||||||
|
if (status.spoiler_text == "") {
|
||||||
|
status.spoiler_text == sensitiveText;
|
||||||
|
}
|
||||||
|
summary.innerHTML = status.spoiler_text;
|
||||||
|
|
||||||
|
let spoiler = document.createElement("details");
|
||||||
|
spoiler.appendChild(summary);
|
||||||
|
spoiler.innerHTML += status.content;
|
||||||
|
|
||||||
|
main.appendChild(spoiler);
|
||||||
|
} else {
|
||||||
|
main.innerHTML = status.content;
|
||||||
|
}
|
||||||
comment.appendChild(main);
|
comment.appendChild(main);
|
||||||
|
|
||||||
let attachments = status.media_attachments;
|
let attachments = status.media_attachments;
|
||||||
@ -224,6 +240,10 @@ function loadComments() {
|
|||||||
// mediaElement.setAttribute("loading", "lazy");
|
// mediaElement.setAttribute("loading", "lazy");
|
||||||
// {% - endif -%}
|
// {% - endif -%}
|
||||||
|
|
||||||
|
if (status.sensitive == true) {
|
||||||
|
mediaElement.classList.add("spoiler");
|
||||||
|
}
|
||||||
|
|
||||||
media.appendChild(mediaElement);
|
media.appendChild(mediaElement);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -237,6 +257,10 @@ function loadComments() {
|
|||||||
mediaElement.setAttribute("title", attachment.description);
|
mediaElement.setAttribute("title", attachment.description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status.sensitive == true) {
|
||||||
|
mediaElement.classList.add("spoiler");
|
||||||
|
}
|
||||||
|
|
||||||
media.appendChild(mediaElement);
|
media.appendChild(mediaElement);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -252,6 +276,10 @@ function loadComments() {
|
|||||||
mediaElement.setAttribute("title", attachment.description);
|
mediaElement.setAttribute("title", attachment.description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status.sensitive == true) {
|
||||||
|
mediaElement.classList.add("spoiler");
|
||||||
|
}
|
||||||
|
|
||||||
media.appendChild(mediaElement);
|
media.appendChild(mediaElement);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -14,19 +14,20 @@
|
|||||||
|
|
||||||
{%- set date_locale = macros_translate::translate(key="date_locale", default="en-US", language_strings=language_strings) | replace(from="_", to="-") -%}
|
{%- set date_locale = macros_translate::translate(key="date_locale", default="en-US", language_strings=language_strings) | replace(from="_", to="-") -%}
|
||||||
|
|
||||||
<span id="rel-attributes" class="hidden">{{ rel_attributes }}</span>
|
<span id="blog-post-author-text" class="hidden">{{ macros_translate::translate(key="blog_post_author", default="Blog post author", language_strings=language_strings) }}</span>
|
||||||
<span id="host" class="hidden">{{ host }}</span>
|
|
||||||
<span id="user" class="hidden">{{ user }}</span>
|
|
||||||
<span id="id" class="hidden">{{ id }}</span>
|
|
||||||
<span id="date-locale" class="hidden">{{ date_locale }}</span>
|
|
||||||
<span id="loading-text" class="hidden">{{ macros_translate::translate(key='loading', default='Loading', language_strings=language_strings) }}…</span>
|
|
||||||
<span id="reload-text" class="hidden">{{ macros_translate::translate(key='reload', default='Reload', language_strings=language_strings) }}</span>
|
|
||||||
<span id="view-profile-text" class="hidden">{{ macros_translate::translate(key="view_profile", default="View Profile At", language_strings=language_strings) }}</span>
|
|
||||||
<span id="view-comment-text" class="hidden">{{ macros_translate::translate(key="view_comment", default="View Comment At", language_strings=language_strings) }}</span>
|
|
||||||
<span id="boosts-from-text" class="hidden">{{ macros_translate::translate(key="boosts_from", default="Boosts from $INSTANCE", language_strings=language_strings) }}</span>
|
<span id="boosts-from-text" class="hidden">{{ macros_translate::translate(key="boosts_from", default="Boosts from $INSTANCE", language_strings=language_strings) }}</span>
|
||||||
|
<span id="date-locale" class="hidden">{{ date_locale }}</span>
|
||||||
<span id="faves-from-text" class="hidden">{{ macros_translate::translate(key="faves_from", default="Favorites from $INSTANCE", language_strings=language_strings) }}</span>
|
<span id="faves-from-text" class="hidden">{{ macros_translate::translate(key="faves_from", default="Favorites from $INSTANCE", language_strings=language_strings) }}</span>
|
||||||
<span id="blog-post-author-text" class="hidden">{{ macros_translate::translate(key='blog_post_author', default='Blog post author', language_strings=language_strings) }}</span>
|
<span id="host" class="hidden">{{ host }}</span>
|
||||||
<span id="no-comments-text" class="hidden">{{ macros_translate::translate(key='no_comments', default='No Comments yet :/', language_strings=language_strings) }}</span>
|
<span id="id" class="hidden">{{ id }}</span>
|
||||||
|
<span id="loading-text" class="hidden">{{ macros_translate::translate(key="loading", default="Loading", language_strings=language_strings) }}…</span>
|
||||||
|
<span id="no-comments-text" class="hidden">{{ macros_translate::translate(key="no_comments", default="No Comments yet :/", language_strings=language_strings) }}</span>
|
||||||
|
<span id="rel-attributes" class="hidden">{{ rel_attributes }}</span>
|
||||||
|
<span id="reload-text" class="hidden">{{ macros_translate::translate(key="reload", default="Reload", language_strings=language_strings) }}</span>
|
||||||
|
<span id="sensitive-text" class="hidden">{{ macros_translate::translate(key="sensitive", default="Sensitive Content", language_strings=language_strings) }}</span>
|
||||||
|
<span id="user" class="hidden">{{ user }}</span>
|
||||||
|
<span id="view-comment-text" class="hidden">{{ macros_translate::translate(key="view_comment", default="View Comment At", language_strings=language_strings) }}</span>
|
||||||
|
<span id="view-profile-text" class="hidden">{{ macros_translate::translate(key="view_profile", default="View Profile At", language_strings=language_strings) }}</span>
|
||||||
|
|
||||||
{%- if page.extra.comments.uri -%}
|
{%- if page.extra.comments.uri -%}
|
||||||
{%- set uri = page.extra.comments.uri -%}
|
{%- set uri = page.extra.comments.uri -%}
|
||||||
|
Reference in New Issue
Block a user