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