summaryrefslogtreecommitdiff
path: root/layouts/partials/templates
diff options
context:
space:
mode:
Diffstat (limited to 'layouts/partials/templates')
-rw-r--r--layouts/partials/templates/_funcs/get-page-images.html47
-rw-r--r--layouts/partials/templates/opengraph.html86
-rw-r--r--layouts/partials/templates/schema_json.html128
-rw-r--r--layouts/partials/templates/twitter_cards.html31
4 files changed, 292 insertions, 0 deletions
diff --git a/layouts/partials/templates/_funcs/get-page-images.html b/layouts/partials/templates/_funcs/get-page-images.html
new file mode 100644
index 0000000..268ceb4
--- /dev/null
+++ b/layouts/partials/templates/_funcs/get-page-images.html
@@ -0,0 +1,47 @@
+{{- $imgs := slice }}
+{{- $imgParams := .Params.images }}
+{{- $resources := .Resources.ByType "image" -}}
+{{/* Find featured image resources if the images parameter is empty. */}}
+{{- if not $imgParams }}
+ {{- $featured := $resources.GetMatch "*feature*" -}}
+ {{- if not $featured }}{{ $featured = $resources.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
+ {{- with $featured }}
+ {{- $imgs = $imgs | append (dict
+ "Image" .
+ "RelPermalink" .RelPermalink
+ "Permalink" .Permalink) }}
+ {{- end }}
+{{- end }}
+{{/* Use the first one of site images as the fallback. */}}
+{{- if and (not $imgParams) (not $imgs) }}
+ {{- with site.Params.images }}
+ {{- $imgParams = first 1 . }}
+ {{- end }}
+{{- end }}
+{{/* Parse page's images parameter. */}}
+{{- range $imgParams }}
+ {{- $img := . }}
+ {{- $url := urls.Parse $img }}
+ {{- if eq $url.Scheme "" }}
+ {{/* Internal image. */}}
+ {{- with $resources.GetMatch $img -}}
+ {{/* Image resource. */}}
+ {{- $imgs = $imgs | append (dict
+ "Image" .
+ "RelPermalink" .RelPermalink
+ "Permalink" .Permalink) }}
+ {{- else }}
+ {{- $imgs = $imgs | append (dict
+ "RelPermalink" (relURL $img)
+ "Permalink" (absURL $img)
+ ) }}
+ {{- end }}
+ {{- else }}
+ {{/* External image */}}
+ {{- $imgs = $imgs | append (dict
+ "RelPermalink" $img
+ "Permalink" $img
+ ) }}
+ {{- end }}
+{{- end }}
+{{- return $imgs }}
diff --git a/layouts/partials/templates/opengraph.html b/layouts/partials/templates/opengraph.html
new file mode 100644
index 0000000..fe5bf53
--- /dev/null
+++ b/layouts/partials/templates/opengraph.html
@@ -0,0 +1,86 @@
+<meta property="og:url" content="{{ .Permalink }}">
+
+{{- with or site.Title site.Params.title | plainify }}
+ <meta property="og:site_name" content="{{ . }}">
+{{- end }}
+
+{{- with or .Title site.Title site.Params.title | plainify }}
+ <meta property="og:title" content="{{ . }}">
+{{- end }}
+
+{{- with or .Description .Summary site.Params.description | plainify | htmlUnescape | chomp }}
+ <meta property="og:description" content="{{ . }}">
+{{- end }}
+
+{{- with or .Params.locale site.Language.LanguageCode site.Language.Lang }}
+ <meta property="og:locale" content="{{ . }}">
+{{- end }}
+
+{{- if .IsPage }}
+ <meta property="og:type" content="article">
+ {{- with .Section }}
+ <meta property="article:section" content="{{ . }}">
+ {{- end }}
+ {{- $ISO8601 := "2006-01-02T15:04:05-07:00" }}
+ {{- with .PublishDate }}
+ <meta property="article:published_time" {{ .Format $ISO8601 | printf "content=%q" | safeHTMLAttr }}>
+ {{- end }}
+ {{- with .Lastmod }}
+ <meta property="article:modified_time" {{ .Format $ISO8601 | printf "content=%q" | safeHTMLAttr }}>
+ {{- end }}
+ {{- range .GetTerms "tags" | first 6 }}
+ <meta property="article:tag" content="{{ .Page.Title | plainify }}">
+ {{- end }}
+{{- else }}
+ <meta property="og:type" content="website">
+{{- end }}
+
+{{- if .Params.cover.image -}}
+ {{- if (ne .Params.cover.relative true) }}
+ <meta property="og:image" content="{{ .Params.cover.image | absURL }}">
+ {{- else}}
+ <meta property="og:image" content="{{ (path.Join .RelPermalink .Params.cover.image ) | absURL }}">
+ {{- end}}
+{{- else }}
+ {{- with partial "_funcs/get-page-images" . }}
+ {{- range . | first 6 }}
+ <meta property="og:image" content="{{ .Permalink }}">
+ {{- end }}
+ {{- end }}
+{{- end }}
+
+{{- with .Params.audio }}
+ {{- range . | first 6 }}
+ <meta property="og:audio" content="{{ . | absURL }}">
+ {{- end }}
+{{- end }}
+
+{{- with .Params.videos }}
+ {{- range . | first 6 }}
+ <meta property="og:video" content="{{ . | absURL }}">
+ {{- end }}
+{{- end }}
+
+{{- range .GetTerms "series" }}
+ {{- range .Pages | first 7 }}
+ {{- if ne $ . }}
+ <meta property="og:see_also" content="{{ .Permalink }}">
+ {{- end }}
+ {{- end }}
+{{- end }}
+
+{{- with site.Params.social }}
+ {{- if reflect.IsMap . }}
+ {{- with .facebook_app_id }}
+ <meta property="fb:app_id" content="{{ . }}">
+ {{- else }}
+ {{- with .facebook_admin }}
+ <meta property="fb:admins" content="{{ . }}">
+ {{- end }}
+ {{- end }}
+ {{- end }}
+{{- end }}
+
+{{- with (.Param "social.fediverse_creator") }}
+ <meta name="fediverse:creator" content="{{ . }}">
+{{- end }}
diff --git a/layouts/partials/templates/schema_json.html b/layouts/partials/templates/schema_json.html
new file mode 100644
index 0000000..8a4efb4
--- /dev/null
+++ b/layouts/partials/templates/schema_json.html
@@ -0,0 +1,128 @@
+{{ if .IsHome }}
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "{{- ( site.Params.schema.publisherType | default "Organization") | title -}}",
+ "name": {{ site.Title }},
+ "url": {{ site.Home.Permalink }},
+ "description": {{ site.Params.description | plainify | truncate 180 | safeHTML }},
+ {{- if (eq site.Params.schema.publisherType "Person") }}
+ "image": {{ site.Params.assets.favicon | default "favicon.ico" | absURL }},
+ {{- else }}
+ "logo": {{ site.Params.assets.favicon | default "favicon.ico" | absURL }},
+ {{- end }}
+ "sameAs": [
+ {{- if site.Params.schema.sameAs }}
+ {{ range $i, $e := site.Params.schema.sameAs }}{{ if $i }}, {{ end }}{{ trim $e " " }}{{ end }}
+ {{- else}}
+ {{ range $i, $e := site.Params.SocialIcons }}{{ if $i }}, {{ end }}{{ trim $e.url " " | safeURL }}{{ end }}
+ {{- end}}
+ ]
+}
+</script>
+{{- else if (or .IsPage .IsSection) }}
+{{/* BreadcrumbList */}}
+{{- $url := replace .Parent.Permalink ( printf "%s" site.Home.Permalink) "" }}
+{{- $lang_url := strings.TrimPrefix ( printf "%s/" .Lang) $url }}
+{{- $bc_list := (split $lang_url "/")}}
+
+{{- $scratch := newScratch }}
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "BreadcrumbList",
+ "itemListElement": [
+ {{- range $index, $element := $bc_list }}
+
+ {{- $scratch.Add "path" (printf "%s/" $element ) | safeJS }}
+ {{- $bc_pg := site.GetPage ($scratch.Get "path") -}}
+
+ {{- if (and ($bc_pg) (gt (len . ) 0))}}
+ {{- if (and $index)}}, {{end }}
+ {
+ "@type": "ListItem",
+ "position": {{ add 1 $index }},
+ "name": {{ $bc_pg.Name }},
+ "item": {{ $bc_pg.Permalink | safeHTML }}
+ }
+ {{- end }}
+
+ {{- end }}
+ {{- /* self-page addition */ -}}
+ {{- if (ge (len $bc_list) 2) }}, {{end }}
+ {
+ "@type": "ListItem",
+ "position": {{len $bc_list}},
+ "name": {{ .Name }},
+ "item": {{ .Permalink | safeHTML }}
+ }
+ ]
+}
+</script>
+{{- if .IsPage }}
+<script type="application/ld+json">
+{
+ "@context": "https://schema.org",
+ "@type": "BlogPosting",
+ "headline": {{ .Title | plainify}},
+ "name": "{{ .Title | plainify }}",
+ "description": {{ with .Description | plainify }}{{ . }}{{ else }}{{ .Summary | plainify }}{{ end -}},
+ "keywords": [
+ {{- if .Params.keywords }}
+ {{ range $i, $e := .Params.keywords }}{{ if $i }}, {{ end }}{{ $e }}{{ end }}
+ {{- else }}
+ {{ range $i, $e := .Params.tags }}{{ if $i }}, {{ end }}{{ $e }}{{ end }}
+ {{- end }}
+ ],
+ "articleBody": {{ .Content | safeJS | htmlUnescape | plainify }},
+ "wordCount" : "{{ .WordCount }}",
+ "inLanguage": {{ .Language.Lang | default "en-us" }},
+ {{ if .Params.cover.image -}}
+ "image":
+ {{- if (ne .Params.cover.relative true) -}}
+ {{ .Params.cover.image | absURL }},
+ {{- else -}}
+ {{ (path.Join .RelPermalink .Params.cover.image ) | absURL }},
+ {{- end}}
+ {{- else }}
+ {{- $images := partial "templates/_funcs/get-page-images" . -}}
+ {{- with index $images 0 -}}
+ "image": {{ .Permalink }},
+ {{- end }}
+ {{- end -}}
+ "datePublished": {{ .PublishDate }},
+ "dateModified": {{ .Lastmod }},
+ {{- with (.Params.author | default site.Params.author) }}
+ "author":
+ {{- if (or (eq (printf "%T" .) "[]string") (eq (printf "%T" .) "[]interface {}")) -}}
+ [{{- range $i, $v := . -}}
+ {{- if $i }}, {{end -}}
+ {
+ "@type": "Person",
+ "name": {{ $v }}
+ }
+ {{- end }}],
+ {{- else -}}
+ {
+ "@type": "Person",
+ "name": {{ . }}
+ },
+ {{- end -}}
+ {{- end }}
+ "mainEntityOfPage": {
+ "@type": "WebPage",
+ "@id": {{ .Permalink | safeHTML }}
+ },
+ "publisher": {
+ "@type": "{{- ( site.Params.schema.publisherType | default "Organization") | title -}}",
+ "name": {{ site.Title }},
+ "logo": {
+ "@type": "ImageObject",
+ "url": {{ site.Params.assets.favicon | default "favicon.ico" | absURL }}
+ }
+ }
+}
+</script>
+{{- end }}{{/* .IsPage end */}}
+
+{{- end -}}
diff --git a/layouts/partials/templates/twitter_cards.html b/layouts/partials/templates/twitter_cards.html
new file mode 100644
index 0000000..a6e1d05
--- /dev/null
+++ b/layouts/partials/templates/twitter_cards.html
@@ -0,0 +1,31 @@
+{{- if .Params.cover.image -}}
+<meta name="twitter:card" content="summary_large_image">
+{{- if (ne $.Params.cover.relative true) }}
+<meta name="twitter:image" content="{{ .Params.cover.image | absURL }}">
+{{- else }}
+<meta name="twitter:image" content="{{ (path.Join .RelPermalink .Params.cover.image ) | absURL }}">
+{{- end}}
+{{- else }}
+{{- $images := partial "templates/_funcs/get-page-images" . -}}
+{{- with index $images 0 -}}
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:image" content="{{ .Permalink }}">
+{{- else -}}
+<meta name="twitter:card" content="summary">
+{{- end -}}
+{{- end }}
+<meta name="twitter:title" content="{{ .Title }}">
+<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}">
+
+{{- $twitterSite := "" }}
+{{- with site.Params.social }}
+ {{- if reflect.IsMap . }}
+ {{- with .twitter }}
+ {{- $content := . }}
+ {{- if not (strings.HasPrefix . "@") }}
+ {{- $content = printf "@%v" . }}
+ {{- end }}
+ <meta name="twitter:site" content="{{ $content }}">
+ {{- end }}
+ {{- end }}
+{{- end }}