aboutsummaryrefslogtreecommitdiff
path: root/themes/default/layouts/partials/function-generate-feeds.html
diff options
context:
space:
mode:
Diffstat (limited to 'themes/default/layouts/partials/function-generate-feeds.html')
-rw-r--r--themes/default/layouts/partials/function-generate-feeds.html245
1 files changed, 245 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..57789b5
--- /dev/null
+++ b/themes/default/layouts/partials/function-generate-feeds.html
@@ -0,0 +1,245 @@
+{{- $author := partial "function-authors-data.html" . -}}
+
+{{- $feeds := slice -}}
+
+{{- if $author.feeds.rss -}}
+ {{- range $key, $value := (seq 3) -}}
+ {{- range $author.feeds.rss -}}
+
+ {{- $data := split . " " -}}
+ {{- $url := delimit (first 1 $data) "" -}}
+ {{- $retitle := trim (delimit (after 1 $data) " ") " " -}}
+
+ {{- with $fetch := cond (default true $.Site.Params.site.offline) false (resources.GetRemote $url) -}}
+
+ {{- with $error := .Err -}}
+ {{- warnf "Feed fetch %s" $error -}}
+ {{- else -}}
+
+ {{- with $fetch | transform.Unmarshal -}}
+
+ {{- $content := "" -}}
+ {{- $date := now | time.Format "2006-01-02T15:04:05Z" -}}
+ {{- $description := "" -}}
+ {{- $enclosure := "" -}}
+ {{- $imageLink := "" -}}
+ {{- $link := "https://example.com/link/" -}}
+ {{- $sourceDescription := "" -}}
+ {{- $sourceHome := "" -}}
+ {{- $sourceLink := $url -}}
+ {{- $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) -}}
+ {{- $sourceHome = index (last 1 .link) 0 -}}
+ {{- else -}}
+ {{- $sourceHome = index .link 0 -}}
+ {{- end -}}
+ {{- 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 .author -}}
+ {{- if reflect.IsMap . -}}
+ {{- $sourceHome = .uri -}}
+ {{- end -}}
+ {{- 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 | 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 | htmlUnescape)
+ "FeedContentShort" (delimit (first 2 (split ($content | plainify | htmlUnescape) "\n")) " " | truncate 250 "...")
+ "FeedDate" ($date | plainify | htmlUnescape | time.Format "Mon Jan 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)
+ "FeedImageLink" ($imageLink | plainify | htmlUnescape)
+ "FeedLink" ($link | plainify | htmlUnescape)
+ "FeedName" (or $retitle (delimit (first 2 (split ($sourceTitle | plainify | htmlUnescape) " ")) " "))
+ "FeedSourceDescription" ($sourceDescription | plainify | htmlUnescape)
+ "FeedSourceDomain" ($sourceDomain | plainify | htmlUnescape)
+ "FeedSourceLink" ($sourceLink | plainify | htmlUnescape)
+ "FeedSourceHome" ($sourceHome | plainify | htmlUnescape)
+ "FeedSourceTitle" ($sourceTitle | plainify | htmlUnescape)
+ "FeedTitle" ($title | plainify | htmlUnescape)
+ )
+ -}}
+
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{- range $feeds -}}
+
+ {{- $name := .FeedName -}}
+ {{- $domain := .FeedSourceDomain -}}
+
+ {{- $favicon := partial "function-favicon-domain.html" $domain -}}
+
+ {{- with .FeedImageLink -}}
+ {{- $favicon = . -}}
+ {{- end -}}
+
+ {{- $imageSource := partial "function-fetch-favicons.html"
+ (dict
+ "Context" $.Page
+ "Source" $favicon
+ "Infix" (.FeedSourceLink | anchorize)
+ )
+ -}}
+
+ {{- $template := resources.Get "templates/markdown-feed.yaml" -}}
+ {{- $alias := truncate 255 "" (delimit (first 8 (split (.FeedTitle | urlize) "-")) "-" | humanize | urlize) -}}
+ {{- $hash := .FeedLink | sha256 | truncate 8 "" -}}
+ {{- $file := print $alias "-" $hash -}}
+ {{- $file = partial "function-strip-filechars.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" (strings.TrimPrefix ("" | absURL) $imageSource.Permalink)
+ "home" .FeedSourceHome
+ "link" .FeedLink
+ "name" .FeedName
+ "source" .FeedSourceLink
+ "tags" "[feeds]"
+ )
+ $template
+ -}}
+ {{- $writeToFile := $markdown.Permalink -}}
+ {{- end -}}
+{{- end -}}
+
+{{- return $feeds -}}