aboutsummaryrefslogtreecommitdiff
path: root/themes/default/layouts/partials/function-generate-feeds.html
diff options
context:
space:
mode:
authortdro <tdro@noreply.example.com>2022-10-20 22:05:41 -0400
committertdro <tdro@noreply.example.com>2022-10-20 22:05:41 -0400
commitf804191de73059f7112764af0b8c625d06fec61a (patch)
tree79e96feac4c3db35b22ae6451a2e4eb0f6f00d54 /themes/default/layouts/partials/function-generate-feeds.html
parent5537b61e597dba47b5cd69c28268612e7eb6deb5 (diff)
downloadcanory-f804191de73059f7112764af0b8c625d06fec61a.tar.gz
canory-f804191de73059f7112764af0b8c625d06fec61a.tar.bz2
canory-f804191de73059f7112764af0b8c625d06fec61a.zip
themes/default/layouts/partials/web-ring: Avoid extra markup with feed function return
Diffstat (limited to 'themes/default/layouts/partials/function-generate-feeds.html')
-rw-r--r--themes/default/layouts/partials/function-generate-feeds.html248
1 files changed, 248 insertions, 0 deletions
diff --git a/themes/default/layouts/partials/function-generate-feeds.html b/themes/default/layouts/partials/function-generate-feeds.html
new file mode 100644
index 0000000..e494596
--- /dev/null
+++ b/themes/default/layouts/partials/function-generate-feeds.html
@@ -0,0 +1,248 @@
+{{- $author := partial "function-authors-data.html" . -}}
+
+{{- $feeds := slice -}}
+
+{{- if $author.feeds.rss -}}
+ {{- range $key, $value := (seq 3) -}}
+ {{- range $author.feeds.rss -}}
+
+ {{- with resources.GetRemote . -}}
+ {{- with .Err -}}
+ {{- warnf "Feed fetch %s" . -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- with resources.GetRemote . | transform.Unmarshal -}}
+
+ {{- $content := "" -}}
+ {{- $date := now.Format "2006-01-02T15:04:05Z" -}}
+ {{- $description := "No description found." -}}
+ {{- $enclosure := "" -}}
+ {{- $imageLink := "" -}}
+ {{- $link := "https://example.com/link/" -}}
+ {{- $sourceDescription := "" -}}
+ {{- $sourceHome := "" -}}
+ {{- $sourceLink := "https://example.com/rss/" -}}
+ {{- $sourceTitle := "No source title found" -}}
+ {{- $title := "No Title Found" -}}
+
+ {{- with .channel -}}
+
+ {{- $sourceTitle = .title -}}
+ {{- $sourceDescription = .description -}}
+
+ {{- if reflect.IsSlice .link -}}
+ {{- if reflect.IsMap (index .link 0) -}}
+ {{- $sourceLink = index (first 1 .link) 0 "-href" -}}
+ {{- $sourceHome = index (last 1 .link) 0 -}}
+ {{- else -}}
+ {{- $sourceLink = index .link 0 -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $sourceLink = .link -}}
+ {{- end -}}
+
+ {{- with .image -}}
+ {{- $imageLink = .url -}}
+ {{- 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 -}}
+
+ {{- $sourceDomain := ($sourceLink | plainify | html | htmlUnescape | urls.Parse).Host -}}
+
+ {{- /* Replace invalid time zones. */ -}}
+ {{- $date = replaceRE "G[0-9]+T" "UTC" $date -}}
+
+ {{- /* If missing seconds split and try again. */ -}}
+ {{- if lt (len (split $date ":")) 3 -}}
+ {{- $date = delimit (first 3 (after 1 (split $date " "))) " " -}}
+ {{- end -}}
+
+ {{- /* Try to complete enclosure relative links. */ -}}
+ {{- if and (not ($enclosure | urls.Parse).Host) (not ($link | urls.Parse).Host) -}}
+ {{- $enclosure = print "http://" $sourceDomain $link -}}
+ {{- end -}}
+
+ {{- /* Try to complete link relative links. */ -}}
+ {{- if not ($link | urls.Parse).Host -}}
+ {{- $link = print "http://" $sourceDomain $link -}}
+ {{- end -}}
+
+ {{-
+ $feeds = $feeds | append (dict
+ "FeedContent" ($content | plainify | html | htmlUnescape)
+ "FeedContentShort" (delimit (first 2 (split ($content | plainify | html | htmlUnescape) "\n")) " " | truncate 250)
+ "FeedDate" ($date | plainify | html | htmlUnescape | time.Format "January 2, 2006")
+ "FeedDateTime" ($date | plainify | html | htmlUnescape | time.Format "2006-01-02T15:04:05Z")
+ "FeedDateTitle" ($date | plainify | html | htmlUnescape | time.Format "Monday, January 2 2006 at 15:04:05 MST")
+ "FeedDescription" ($description | plainify | html | htmlUnescape)
+ "FeedDescriptionShort" (delimit (first 2 (split ($description | plainify | html | htmlUnescape) "\n")) " " | truncate 250)
+ "FeedEnclosure" ($enclosure | plainify | html | htmlUnescape)
+ "FeedImageLink" ($imageLink | plainify | html | htmlUnescape)
+ "FeedLink" ($link | plainify | html | htmlUnescape)
+ "FeedName" (delimit ((delimit (first 2 (split ($sourceTitle | plainify | html | htmlUnescape) " ")) " ") | findRE "^([^.|?|!|\n|\"|]+)") " " | replaceRE "[^a-zA-Z ]" "")
+ "FeedSourceDescription" ($sourceDescription | plainify | html | htmlUnescape)
+ "FeedSourceDomain" ($sourceDomain | plainify | html | htmlUnescape)
+ "FeedSourceLink" ($sourceLink | plainify | html | htmlUnescape)
+ "FeedSourceHome" ($sourceHome | plainify | html | htmlUnescape)
+ "FeedSourceTitle" ($sourceTitle | plainify | html | htmlUnescape)
+ "FeedTitle" ($title | plainify | html | htmlUnescape)
+ )
+ -}}
+
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- range $feeds -}}
+
+ {{- $name := .FeedName -}}
+ {{- $domain := .FeedSourceDomain -}}
+
+ {{- $faviconDomain :=
+ (print
+ "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url="
+ "http://"
+ .FeedSourceDomain
+ "&size=64"
+ )
+ -}}
+
+ {{- with .FeedImageLink -}}
+ {{- $faviconDomain = . -}}
+ {{- $domain = $name | humanize | urlize -}}
+ {{- end -}}
+
+ {{- $imageSource := partial "function-caches-images.html"
+ (dict
+ "Source" $faviconDomain
+ "Fit" "160x160"
+ "Target" (print (partial "function-paths.html" "media") "/")
+ "Copy" (print (partial "function-paths.html" "media") "/favicon." $domain ".png")
+ )
+ -}}
+
+ {{- $template := resources.Get "templates/markdown-feed.yaml" -}}
+ {{- $file := print (delimit (first 8 (split (.FeedTitle | urlize) "-")) "-" | humanize | urlize) "-" (.FeedLink | sha256 | truncate 8 "") -}}
+ {{- $file = partial "function-strip-urlchars.html" $file -}}
+ {{- $path := print "/data/generates/content/" $author.user "/feeds/" $file ".md" -}}
+
+ {{- $content := .FeedContentShort -}}
+
+ {{- if (gt (len .FeedTitle) (len $content)) -}}
+ {{- $content = .FeedTitle -}}
+ {{- end -}}
+
+ {{- if (gt (len .FeedDescriptionShort) (len .FeedTitle)) -}}
+ {{- $content = .FeedDescriptionShort -}}
+ {{- end -}}
+
+ {{- $markdown := resources.ExecuteAsTemplate
+ $path
+ (dict
+ "author" $author.user
+ "content" (or $content "No content found.")
+ "date" .FeedDateTime
+ "description" (or .FeedSourceDescription .FeedSourceTitle "No source description found.")
+ "domain" .FeedSourceDomain
+ "enclosure" .FeedEnclosure
+ "favicon" $imageSource.RelPermalink
+ "home" .FeedSourceHome
+ "link" .FeedLink
+ "markdown" (strings.TrimLeft "/" $path)
+ "name" .FeedName
+ "self" (print $author.user "/feeds/" $file "/")
+ "tags" "[rss]"
+ )
+ $template
+ -}}
+ {{- $writeToFile := $markdown.Permalink -}}
+ {{- end -}}
+{{- end -}}
+
+{{- return $feeds -}}