diff --git a/layouts/_default/index.rss.xml b/layouts/_default/index.rss.xml new file mode 100644 index 0000000..7e84c40 --- /dev/null +++ b/layouts/_default/index.rss.xml @@ -0,0 +1,47 @@ +{{- $pctx := . -}} +{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}} +{{- $pages := slice -}} +{{- if or $.IsHome $.IsSection -}} +{{- $pages = $pctx.RegularPages -}} +{{- else -}} +{{- $pages = $pctx.Pages -}} +{{- end -}} +{{- $limit := .Site.Config.Services.RSS.Limit -}} +{{- if ge $limit 1 -}} +{{- $pages = $pages | first $limit -}} +{{- end -}} +{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }} +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> + <channel> + <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title> + <link>{{ .Permalink }}</link> + <description>Recent newsletters {{ if ne .Title .Site.Title }}{{ with .Title }}of {{.}} {{ end }}{{ end }}at {{ .Site.Title }}</description> + <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }} + <language>{{.}}</language>{{end}}{{ with .Site.Author.email }} + <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }} + <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }} + <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }} + <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }} + {{- with .OutputFormats.Get "RSS" -}} + {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }} + {{- end -}} + {{ range $pages }} + <item> + <title>{{ .Title }}</title> + <link>{{ .Permalink }}</link> + <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> + {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}} + <guid>{{ .Permalink }}</guid> + <description>{{ .Content | safeHTML }}</description> + {{ range ( where .Site.RegularPages ".RelPermalink" .RelPermalink | first 1 ) }} + {{- $images := .Resources.ByType "image" -}} + {{- $featured := $images.GetMatch "*feature*" -}} + {{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} + {{- with $featured -}} + <media:content xmlns:media="http://search.yahoo.com/mrss/" url="{{ $featured.Permalink }}" /> + {{- end -}} + {{ end }} + </item> + {{ end }} + </channel> +</rss> diff --git a/layouts/partials/article-meta/basic.html b/layouts/partials/article-meta/basic.html new file mode 100644 index 0000000..0cd6229 --- /dev/null +++ b/layouts/partials/article-meta/basic.html @@ -0,0 +1,93 @@ +{{/* Determine the correct context and scope */}} +{{/* This allows for different logic depending on where the partial is called */}} +{{ $context := . }} +{{ $scope := default nil }} + +{{ if (reflect.IsMap . ) }} +{{ $context = .context }} +{{ $scope = cond (not .scope) nil .scope }} +{{ end }} + +{{ with $context }} +{{ $meta := newScratch }} + +{{/* Gather partials for this context */}} +{{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }} +{{ $meta.Add "partials" (slice (partial "meta/date.html" .Date)) }} +{{ end }} + +{{ if and (.Params.showDateUpdated | default (.Site.Params.article.showDateUpdated | default false)) (ne (partial +"functions/date.html" .Date) (partial "functions/date.html" .Lastmod)) }} +{{ $meta.Add "partials" (slice (partial "meta/date-updated.html" .Lastmod)) }} +{{ end }} + +{{ if and (.Params.showWordCount | default (.Site.Params.article.showWordCount | default false)) (ne .WordCount 0) }} +{{ $meta.Add "partials" (slice (partial "meta/word-count.html" .)) }} +{{ end }} + +{{ if and (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0) +}} +{{ $meta.Add "partials" (slice (partial "meta/reading-time.html" .)) }} +{{ end }} + +{{ if and (not .Params.externalURL) (.Params.showViews | default (.Site.Params.article.showViews | default false)) }} +{{ $meta.Add "partials" (slice (partial "meta/views.html" .)) }} +{{ end }} + +{{ if and (not .Params.externalURL) (.Params.showLikes | default (.Site.Params.article.showLikes | default false)) }} +{{ $meta.Add "partials" (slice (partial "meta/likes.html" .)) }} +{{ end }} + +{{ if and (eq $scope "single") (not .Params.externalURL) (.Params.showLikes | default (.Site.Params.article.showLikes | default false)) }} +{{ $meta.Add "partials" (slice (partial "meta/likes_button.html" .)) }} +{{ end }} + +{{ if and (eq $scope "single") (.Params.showEdit | default (.Site.Params.article.showEdit | default false)) }} +{{ $meta.Add "partials" (slice (partial "meta/edit.html" .)) }} +{{ end }} + + +<div class="flex flex-row flex-wrap items-center"> + {{/* Output partials */}} + {{ with ($meta.Get "partials") }} + {{ delimit . "<span class=\"px-2 text-primary-500\">·</span>" }} + {{ end }} + + {{/* Output draft label */}} + {{ if and (eq $scope "single") (and .Draft .Site.Params.article.showDraftLabel) }} + <span class="pl-2">{{ partial "badge.html" (i18n "article.draft" | emojify) }}</span> + {{ end }} +</div> + +{{ if .Params.showAuthorsBadges | default (.Site.Params.article.showAuthorsBadges | default false) }} +<div class="flex flex-row flex-wrap items-center"> + {{ range $taxonomy, $terms := .Site.Taxonomies }} + {{ if (eq $taxonomy "authors")}} + {{ if (gt (len ($context.GetTerms $taxonomy)) 0) }} + {{ range $i, $a := $context.GetTerms $taxonomy }} + {{ if not (eq $i 0) }} , {{ end }} <div style="cursor: pointer;" onclick="window.open({{ $a.RelPermalink }},'_self')">{{ $a.LinkTitle }}</div> + {{ end }} + {{ end }} + {{ end }} + {{ end }} +</div> +{{ end }} + +{{/* Output taxonomies */}} +{{ if .Params.showTaxonomies | default (.Site.Params.article.showTaxonomies | default false) }} +<div class="flex flex-row flex-wrap items-center"> + {{ range $taxonomy, $terms := .Site.Taxonomies }} + {{ if and (not (eq $taxonomy "authors")) (not (eq $taxonomy "series"))}} + {{ if (gt (len ($context.GetTerms $taxonomy)) 0) }} + {{ range $context.GetTerms $taxonomy }} + <span style="margin-top:0.5rem" class="mr-2" onclick="window.open({{ .RelPermalink }},'_self');"> + {{ partial "badge.html" .LinkTitle }} + </span> + {{ end }} + {{ end }} + {{ end }} + {{ end }} +</div> +{{ end }} + +{{ end }} diff --git a/layouts/partials/author-extra.html b/layouts/partials/author-extra.html new file mode 100644 index 0000000..8f8cf04 --- /dev/null +++ b/layouts/partials/author-extra.html @@ -0,0 +1,34 @@ +<div class="flex mt-4"> + {{ with .data.image }} + {{ $authorImage := resources.Get . }} + {{ if $authorImage }} + {{ $authorImage := $authorImage.Fill "192x192" }} + <img class="!mt-0 !mb-0 h-24 w-24 rounded-full ltr:mr-4 rtl:ml-4" width="96" height="96" + src="{{ $authorImage.RelPermalink }}" /> + {{ end }} + {{ end }} + <div class="place-self-center"> + {{ $link := .link}} + {{ with .data.name | markdownify | emojify }} + <div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400"> + {{ i18n "author.byline_title" | markdownify | emojify }} + </div> + <a {{ if $link }} href="{{ $link }}" {{ end }} class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300"> + {{ . }} + </a> + {{ end }} + {{ with .data.bio | markdownify | emojify }} + <div class="text-sm text-neutral-700 dark:text-neutral-400">{{ . }}</div> + {{ end }} + <div class="text-2xl sm:text-lg"> + <div class="flex flex-wrap text-neutral-400 dark:text-neutral-500"> + {{ range .data.social }} + {{ range $name, $link := . }} + <a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="{{ $link }}" target="_blank" + aria-label="{{ $name | title }}" rel="me noopener noreferrer"><span class="inline-block align-text-bottom">{{ partial "icon.html" $name }}</span></a> + {{ end }} + {{ end }} + </div> + </div> + </div> +</div> diff --git a/layouts/partials/functions/warnings.html b/layouts/partials/functions/warnings.html new file mode 100644 index 0000000..7f7fc01 --- /dev/null +++ b/layouts/partials/functions/warnings.html @@ -0,0 +1,6 @@ +<!-- {{ if ne .Site.Params.showAppearanceSwitcher nil }} + {{ warnf "[BLOWFISH] Theme parameter `showAppearanceSwitcher` has been renamed to `footer.showAppearanceSwitcher`. Please update your site configuration." }} + {{ end }} + {{ if ne .Site.Params.showScrollToTop nil }} + {{ warnf "[BLOWFISH] Theme parameter `showScrollToTop` has been renamed to `footer.showScrollToTop`. Please update your site configuration." }} + {{ end }} -->