diff options
Diffstat (limited to 'themes/default/layouts/partials/generate-feeds.html')
-rw-r--r-- | themes/default/layouts/partials/generate-feeds.html | 282 |
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 -}} |