mirror of
https://git.sr.ht/~seirdy/seirdy.one
synced 2024-11-30 15:22:09 +00:00
19d5fe2b00
Use partialCached to avoid any perf penalty. TODO: limit the scope I pass to them. I noticed a teeny tiny perf improvement after doing this, probably because now some giant data structures only need to be generated once.
115 lines
6.4 KiB
HTML
115 lines
6.4 KiB
HTML
<h3 id="webmentions" tabindex="-1">Web­mentions</h3>
|
||
<p>This site supports <a href="https://indieweb.org/Webmention">Webmentions</a>, a backlink-based alternative to traditional comment forms.</p>
|
||
<details><summary>Send a Webmention</summary>{{ partial "webmentions/webmention-form.html" . }}</details>
|
||
{{- /* Filter webmentions to just the ones for the current targets */ -}}
|
||
{{- $canonicalRelPermalink := .RelPermalink | replaceRE "^/~seirdy/" "/" -}}
|
||
{{- $target := printf "%s%s" .Site.Params.CanonicalBaseURL $canonicalRelPermalink -}}
|
||
{{- $targets := (slice $target) -}}
|
||
{{- /* commit c84c8d4 changed my URL schemes, so fetch menchies for the legacy scheme on old posts. */ -}}
|
||
{{- if lt .Date.Unix 1653616670 -}}
|
||
{{- $oldTarget := $target | replaceRE "/posts" "" | replaceRE "/$" ".html" -}}
|
||
{{ $targets = (slice $target $oldTarget) }}
|
||
{{- end -}}
|
||
{{- /* We can't just use a simple "where" function because we need to ignore URL anchors/query-params when making a comparison: https://discourse.gohugo.io/t/add-like-comparison-operator-to-the-where-function/42013/4 */ -}}
|
||
{{- $webmentions := slice -}}
|
||
{{- range partialCached "webmentions/all-webmentions.html" . -}}
|
||
{{- if in $targets .target -}}
|
||
{{ $webmentions = $webmentions | append . }}
|
||
{{- else -}}
|
||
{{- $u := urls.Parse .target -}}
|
||
{{- $trimmedTarget := printf `https://%s%s` $u.Hostname $u.Path -}}
|
||
{{- if in $targets $trimmedTarget -}}
|
||
{{ $webmentions = $webmentions | append . }}
|
||
{{- end -}}
|
||
{{- end -}}
|
||
{{- end -}}
|
||
{{- /* Render webmentions if they exist */ -}}
|
||
{{- $count := (len $webmentions) -}}
|
||
{{- if gt $count 0 -}}
|
||
<details>
|
||
<summary>Toggle {{ $count }} Webmentions</summary>
|
||
<p>Webmentions received for this post appear in the following list after I approve them. I sometimes send Webmentions to myself on behalf of linking sites that don’t support them. I auto-replace broken links with <a href="https://web.archive.org/">Wayback Machine</a> snapshots, if they exist.</p>
|
||
<dl>
|
||
{{ range sort $webmentions "created_at" -}}
|
||
{{ $webmention := . -}}
|
||
{{- /* Boolean: should we should handle this webmention like a comment or a linkback? */ -}}
|
||
{{- $hasContent := and (isset $webmention "content") (gt (countrunes $webmention.content) 50) -}}
|
||
{{- $title := $webmention.title -}}
|
||
{{- /* Remove extraneous crap from Fediverse webmentions */ -}}
|
||
{{- if findRE "@Seirdy" $webmention.title -}}
|
||
{{- $title = $title | replaceRE `^@Seirdy@pleroma.envs.net(\n| )?` "" -}}
|
||
{{- /* Mastodon webmentions may include the author in the title followed by a colon; this is redundant. */ -}}
|
||
{{- if and (isset $webmention "author_name") (findRE `@` $webmention.source) (not (findRE "^https://bridg.gy" $webmention.source)) -}}
|
||
{{ $title = $title | replaceRE `^[^:]{0,20}: ?` "" | replaceRE `^"@Seirdy@pleroma.envs.net ?` `"` }}
|
||
{{- end -}}
|
||
{{- end -}}
|
||
{{- if and ($hasContent) (gt (countrunes $webmention.title) 128) -}}
|
||
{{- $title = $webmention.title | strings.TrimSuffix "…" | truncate 128 -}}
|
||
{{- end -}}
|
||
{{- $src := $webmention.source -}}
|
||
{{- with index (partialCached "webmentions/rewrites.html" .) $src -}}
|
||
{{- $src = . -}}
|
||
{{- end -}}
|
||
{{- if in (partialCached "webmentions/wbm-links.html" .) $src -}}
|
||
{{- $src = printf "https://web.archive.org/web/0/%s" $src -}}
|
||
{{- end -}}
|
||
{{ if (eq $webmention.type "like") -}}
|
||
<div itemprop="potentialAction" itemscope="" itemtype="https://schema.org/LikeAction" class="u-like h-cite">
|
||
{{- else -}}
|
||
<div itemprop="comment" itemscope="" itemtype="https://schema.org/Comment" class="u-comment h-cite">
|
||
{{- end -}}
|
||
<!--Will eventually add role="comment" once WAI-ARIA 1.3 starts seeing some adoption.-->
|
||
<dt>
|
||
<time
|
||
class="dt-published"
|
||
itemprop="{{ if (eq $webmention.type "like") -}}startTime{{ else }}datePublished{{ end }}"
|
||
datetime="{{ dateFormat "2006-01-02 15:04:05Z07:00" $webmention.created_at }}">
|
||
{{ dateFormat "2006-01-02" $webmention.created_at }}
|
||
</time>
|
||
</dt>
|
||
<dd>
|
||
{{ if (eq $webmention.type "like") -}}
|
||
{{ if $webmention.author_name -}}
|
||
<span itemprop="agent" itemscope="" itemtype="https://schema.org/Person" class="h-card p-author vcard"><span itemprop="name" class="p-name fn n">{{ $webmention.author_name }}</span></span>
|
||
{{ else if $webmention.title -}}
|
||
<span itemprop="name" class="p-name">{{ $webmention.title | replaceRE ` \n` `
|
||
` -}}</span>
|
||
{{ else -}}
|
||
{{ $webmention.source | strings.TrimPrefix "https://" | strings.TrimPrefix "www." | strings.TrimRight "/" | truncate 35 -}}
|
||
{{ end -}}
|
||
<a class="u-url" itemprop="url" href="{{ $src }}" rel="nofollow ugc">liked</a> this
|
||
{{- else -}}
|
||
{{- if findRE `^https://brid.gy/[^/]*/mastodon` $webmention.source -}}
|
||
{{- $canonicalSrc := replaceRE "https://brid.gy/.*mastodon/@Seirdy@pleroma.envs.net/([^/]*)(.*)?" `https://pleroma.envs.net/notice/$1` $src -}}
|
||
<a class="u-url" itemprop="url" href="{{ $canonicalSrc }}" rel="nofollow ugc">
|
||
{{- else -}}
|
||
<a class="u-url" itemprop="url" href="{{ $src }}" rel="nofollow ugc">
|
||
{{- end -}}
|
||
<span itemprop="name" class="p-name">
|
||
{{ if $webmention.title -}}
|
||
{{ $title | truncate 200 | replaceRE ` *\n` `
|
||
` | safeHTML -}}
|
||
{{ else -}}
|
||
{{- $webmention.source | strings.TrimPrefix "https://" | strings.TrimPrefix "www." | strings.TrimRight "/" | replaceRE ` *\n` "\n" | truncate 35 -}}
|
||
{{ end -}}
|
||
</span
|
||
></a>
|
||
{{- if $webmention.author_name }}
|
||
by <span itemprop="author" itemscope="" itemtype="https://schema.org/Person" class="h-card p-author vcard"><span itemprop="name" class="p-name fn n">{{ $webmention.author_name }}</span></span>
|
||
{{- end -}}
|
||
{{- if $hasContent -}}
|
||
{{- if findRE `^https://brid.gy/[^/]*/mastodon` $webmention.source -}}
|
||
<p role="doc-tip" itemprop="accessibilitySummary">This comment may have major formatting errors that could impact screen reader comprehension.</p>
|
||
{{- end -}}
|
||
<p><q itemprop="text" class="p-content">{{ $webmention.content | replaceRE `^@Seirdy(@pleroma.envs.net)? ?` "" | chomp}}</q></p>
|
||
{{- end -}}
|
||
{{- end }}
|
||
</dd>
|
||
</div>
|
||
{{- end -}}
|
||
</dl>
|
||
</details>
|
||
{{ else -}}
|
||
<p>This post does not have any approved Webmentions yet.</p>
|
||
{{- end }}
|
||
<p>Feel free to contact me directly with feedback; <a href="{{ .Site.BaseURL }}about/#location-seirdy-online">here’s my contact info</a></p>
|