diff options
Diffstat (limited to 'layouts/partials/templates')
| -rw-r--r-- | layouts/partials/templates/_funcs/get-page-images.html | 47 | ||||
| -rw-r--r-- | layouts/partials/templates/opengraph.html | 86 | ||||
| -rw-r--r-- | layouts/partials/templates/schema_json.html | 128 | ||||
| -rw-r--r-- | layouts/partials/templates/twitter_cards.html | 31 |
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 }} |
