aboutsummaryrefslogtreecommitdiff
path: root/themes/default/layouts/partials/generate-feeds.html
diff options
context:
space:
mode:
Diffstat (limited to 'themes/default/layouts/partials/generate-feeds.html')
-rw-r--r--themes/default/layouts/partials/generate-feeds.html282
1 files changed, 282 insertions, 0 deletions
diff --git a/themes/default/layouts/partials/generate-feeds.html b/themes/default/layouts/partials/generate-feeds.html
new file mode 100644
index 0000000..c582d02
--- /dev/null
+++ b/themes/default/layouts/partials/generate-feeds.html
@@ -0,0 +1,282 @@
+{{- $author := index .Site.Data.authors ((or .Params.author .Site.Author.default.user) | default "default") -}}
+
+{{- $feeds := slice -}}
+
+{{- if $author.webring.rss -}}
+ {{- range $key, $value := (seq 3) -}}
+ {{- range $author.webring.rss -}}
+
+ {{- with resources.GetRemote . -}}
+ {{- with .Err -}}
+ {{- warnf "Feed fetch %s" . -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- with resources.GetRemote . | transform.Unmarshal -}}
+
+ {{- $title := "No Title Found" -}}
+ {{- $link := "https://example.com/link" -}}
+ {{- $description := "No description found." -}}
+ {{- $content := "No content found." -}}
+ {{- $sourceTitle := "No source title found" -}}
+ {{- $sourceLink := "https://example.com/" -}}
+ {{- $sourceDescription := "No source description found." -}}
+ {{- $date := now.Format "2006-01-02T15:04:05Z" -}}
+ {{- $enclosure := "" -}}
+
+ {{- with .channel -}}
+
+ {{- $sourceTitle = .title -}}
+ {{- $sourceDescription = .description -}}
+
+ {{- if reflect.IsSlice .link -}}
+ {{- if reflect.IsMap (index .link 0) -}}
+ {{- $sourceLink = index (index .link 0) "-href" -}}
+ {{- else -}}
+ {{- $sourceLink = index .link 0 -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $sourceLink = .link -}}
+ {{- end -}}
+
+ {{- with .item -}}
+ {{- if reflect.IsMap . -}}
+ {{- $title = index . "title" -}}
+ {{- $link = index . "link" -}}
+ {{- $date = index . "pubDate" -}}
+ {{- else -}}
+ {{- range first $value . -}}
+ {{- $description = .description -}}
+ {{- $content = .description -}}
+ {{- $title = .title -}}
+ {{- $link = .link -}}
+ {{- $date = .pubDate -}}
+ {{- with .enclosure -}}
+ {{- $enclosure = index . "-url" -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- if not $date -}}
+ {{- $date = .lastBuildDate -}}
+ {{- end -}}
+
+ {{- else -}}
+
+ {{- with .link -}}
+ {{- $sourceLink = index (index . 0) "-href" -}}
+ {{- end -}}
+
+ {{- with .subtitle -}}
+ {{- if reflect.IsMap . -}}
+ {{- $sourceDescription = index . "#text" -}}
+ {{- else -}}
+ {{- $sourceDescription = . -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- with .title -}}
+ {{- if reflect.IsMap . -}}
+ {{- $sourceTitle = index . "#text" -}}
+ {{- else -}}
+ {{- $sourceTitle = . -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- with .entry -}}
+ {{- range first $value . -}}
+ {{- $date = .updated -}}
+
+ {{- with .link -}}
+ {{- if reflect.IsMap . -}}
+ {{- $link = index . "-href" -}}
+ {{- else -}}
+ {{- if reflect.IsMap (index . 0) -}}
+ {{- $link = index (index . 0) "-href" -}}
+ {{- else -}}
+ {{- $link = . -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- with .title -}}
+ {{- if reflect.IsMap . -}}
+ {{- $title = index . "#text" -}}
+ {{- else -}}
+ {{- $title = . -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- with .content -}}
+ {{- $content = index . "#text" -}}
+ {{- end -}}
+
+ {{- with .summary -}}
+ {{- $description = index . "#text" -}}
+ {{- end -}}
+
+ {{- with .group -}}
+ {{- $description = .description -}}
+ {{- $content = index .content "#text" -}}
+ {{- $enclosure = index .thumbnail "-url" -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- end -}}
+
+ {{- /* Common time zone typos. */ -}}
+ {{- $date = strings.Replace $date "G6T" "GST" -}}
+
+ {{- /* If missing seconds split and try again. */ -}}
+ {{- if lt (len (split $date ":")) 3 -}}
+ {{- $date = delimit (first 3 (after 1 (split $date " "))) " " -}}
+ {{- end -}}
+
+ {{
+ $feeds = $feeds | append (dict
+ "FeedContent" ($content | plainify | htmlUnescape)
+ "FeedContentShort" (delimit (first 2 (split ($content | plainify | htmlUnescape) "\n")) " " | truncate 250)
+ "FeedDate" ($date | plainify | htmlUnescape | time.Format "January 2, 2006")
+ "FeedDateTime" ($date | plainify | htmlUnescape | time.Format "2006-01-02T15:04:05Z")
+ "FeedDateTitle" ($date | plainify | htmlUnescape | time.Format "Monday, January 2 2006 at 15:04:05 MST")
+ "FeedDescription" ($description | plainify | htmlUnescape)
+ "FeedDescriptionShort" (delimit (first 2 (split ($description | plainify | htmlUnescape) "\n")) " " | truncate 250)
+ "FeedEnclosure" ($enclosure | plainify | htmlUnescape)
+ "FeedLink" ($link | plainify | htmlUnescape)
+ "FeedName" (delimit ((delimit (first 2 (split ($sourceTitle | plainify | htmlUnescape) " ")) " ") | findRE "^([^.|?|!|\n|\"|]+)") " " | replaceRE "[^a-zA-Z ]" "")
+ "FeedSourceDescription" ($sourceDescription | plainify | htmlUnescape)
+ "FeedSourceDomain" (($sourceLink | plainify | htmlUnescape | urls.Parse).Host)
+ "FeedSourceLink" ($sourceLink | plainify | htmlUnescape)
+ "FeedSourceTitle" ($sourceTitle | plainify | htmlUnescape)
+ "FeedTitle" ($title | plainify | htmlUnescape)
+ )
+ -}}
+
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- range $feeds -}}
+
+ {{- $imageCanonicalURL :=
+ (print
+ "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url="
+ "http://"
+ .FeedSourceDomain
+ "&size=64"
+ )
+ -}}
+
+ {{- $imageSource := "/images/404.png" -}}
+ {{- $imageTitle := "No image found" -}}
+
+ {{- with $image := resources.GetRemote $imageCanonicalURL -}}
+ {{- with .Err -}}
+ {{- warnf "%s" . -}}
+ {{- $fallbackImage := imageConfig (print "static/images/404.png") -}}
+ {{- with $fallbackImage -}}
+ {{- $fallbackWidth := .Width -}}
+ {{- $fallbackHeight := .Height -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $imageContent := $image.Content | resources.FromString (print "/data/static/images/" ($image | urlize)) -}}
+ {{- $imageSource = $imageContent.RelPermalink -}}
+ {{- $imageTitle = $imageCanonicalURL -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- $template := resources.Get "templates/markdown-feed.yaml" -}}
+ {{- $name := print (delimit (first 8 (split (.FeedTitle | urlize) "-")) "-" | humanize | urlize) "-" (.FeedLink | sha256 | truncate 8 "") | humanize | urlize -}}
+ {{- $path := print "/data/generates/content/" $author.user "/feeds/" $name ".md" -}}
+
+ {{- $description := .FeedDescriptionShort -}}
+ {{- if gt (len .FeedTitle) (len .FeedDescriptionShort) -}}
+ {{- $description = .FeedTitle -}}
+ {{- end -}}
+
+ {{- $content := .FeedContentShort -}}
+ {{- if gt (len .FeedTitle) (len .FeedContentShort) -}}
+ {{- $content = .FeedTitle -}}
+ {{- end -}}
+
+ {{- $link := .FeedLink -}}
+ {{- $enclosure := .FeedEnclosure -}}
+ {{- if or
+ (in .FeedLink ".apng")
+ (in .FeedLink ".avif")
+ (in .FeedLink ".gif")
+ (in .FeedLink ".jfif")
+ (in .FeedLink ".jpeg")
+ (in .FeedLink ".jpg")
+ (in .FeedLink ".pjp")
+ (in .FeedLink ".pjpeg")
+ (in .FeedLink ".png")
+ (in .FeedLink ".svg")
+ (in .FeedLink ".webp")
+ -}}
+ {{- if (.Feedlink | urls.Parse).Host -}}
+ {{- else -}}
+ {{- $enclosure = print "http://" .FeedSourceDomain .FeedLink -}}
+ {{- $link = $enclosure -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- $markdown := resources.ExecuteAsTemplate
+ $path
+ (dict
+ "author" $author.user
+ "content" $content
+ "date" .FeedDateTime
+ "description" .FeedSourceTitle
+ "domain" .FeedSourceDomain
+ "enclosure" $enclosure
+ "image" $imageSource
+ "link" $link
+ "name" .FeedName
+ "raw" (strings.TrimLeft "/" $path)
+ "self" (print $author.user "/feeds/" $name "/")
+ "tags" "[rss]"
+ )
+ $template
+ -}}
+ {{- $writeToFile := $markdown.RelPermalink -}}
+ {{ end }}
+
+ <web-ring>
+ <h1>Web Ring</h1>
+ <aside>
+ {{ range first 3 (uniq (sort $feeds "FeedDateTime" "desc")) }}
+ <web-ring-item>
+ <header>
+ <a
+ title="{{ .FeedLink }}"
+ href="{{ .FeedLink }}">
+ {{ .FeedTitle }}
+ </a>
+ </header>
+
+ <p>
+ <time
+ title="{{ .FeedDateTitle }}"
+ datetime="{{ .FeedDateTime }}">
+ {{ .FeedDate }}
+ </time>
+ {{ if gt (len .FeedDescriptionShort) (len .FeedContentShort) -}}
+ {{ "--" | markdownify }} {{ .FeedDescriptionShort }}
+ {{- else -}}
+ {{ "--" | markdownify }} {{ .FeedContentShort }}
+ {{- end }}
+ </p>
+
+ <a
+ title="{{ .FeedSourceDescription }}"
+ href="{{ .FeedSourceLink }}">
+ {{ .FeedSourceTitle }}
+ </a>
+ </web-ring-item>
+ {{ end }}
+ </aside>
+ </web-ring>
+{{- end -}}