diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 40965c04..50a06183 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -27,7 +27,7 @@
{{ block "main" . }}{{ end }} - {{ if and (site.Params.footer.showScrollToTop | default true) (gt .WordCount 1) }} + {{ if and (site.Params.footer.showScrollToTop | default true) }} {{- partial "scroll-to-top.html" . -}} {{ end }}
diff --git a/layouts/partials/analytics/main.html b/layouts/partials/analytics/main.html index 2b3bd197..0736dd17 100644 --- a/layouts/partials/analytics/main.html +++ b/layouts/partials/analytics/main.html @@ -1,12 +1,12 @@ -{{ with site.Params.fathomAnalytics.site }} - {{ partial "analytics/fathom.html" }} +{{ if site.Params.fathomAnalytics.site }} + {{ partial "analytics/fathom.html" . }} {{ end }} -{{ with site.Config.Services.GoogleAnalytics.ID }} - {{ partial "analytics/ga.html" }} +{{ if site.Config.Services.GoogleAnalytics.ID }} + {{ partial "analytics/ga.html" . }} {{ end }} -{{ with site.Params.umamiAnalytics.websiteid }} - {{ partial "analytics/umami.html" }} +{{ if site.Params.umamiAnalytics.websiteid }} + {{ partial "analytics/umami.html" . }} {{ end }} -{{ with site.Params.selineAnalytics.token }} - {{ partial "analytics/seline.html" }} +{{ if site.Params.selineAnalytics.token }} + {{ partial "analytics/seline.html" . }} {{ end }} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index e12a7bf4..e0e3c316 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -8,21 +8,21 @@ {{/* Title */}} - {{ if .IsHome -}} + {{ if .IsHome }} {{ .Site.Title | emojify }} - {{- else -}} + {{ else }} {{ .Title | emojify }} · {{ .Site.Title | emojify }} - {{- end }} + {{ end }} {{/* Metadata */}} - {{ with (.Params.Summary | default .Params.Description) | default .Site.Params.description -}} + {{ with (.Params.Summary | default .Params.Description) | default .Site.Params.description }} - {{- end }} - {{ with .Params.Tags | default .Site.Params.keywords -}} - - {{- end }} + {{ end }} + {{ with .Params.Tags | default .Site.Params.keywords }} + + {{ end }} {{ with .Site.Params.robots }} {{ end }} @@ -30,112 +30,51 @@ {{ end }} - {{ range .AlternativeOutputFormats -}} + {{ range .AlternativeOutputFormats }} {{ printf ` ` .Rel .MediaType.Type .RelPermalink ($.Site.Title | emojify) | safeHTML }} - {{ end -}} - - {{/* Asset bundles */}} - {{ $assets := newScratch }} - {{ $cssScheme := resources.Get (printf "css/schemes/%s.css" (.Site.Params.colorScheme | default "blowfish")) }} - {{ if not $cssScheme }} - {{ $cssScheme = resources.Get "css/schemes/blowfish.css" }} - {{ end }} - {{ $assets.Add "css" (slice $cssScheme) }} - {{ $cssMain := resources.Get "css/compiled/main.css" }} - {{ $assets.Add "css" (slice $cssMain) }} - {{ $cssCustom := resources.Get "css/custom.css" }} - {{ if $cssCustom }} - {{ $assets.Add "css" (slice $cssCustom) }} - {{ end }} - {{ if not .Site.Params.disableImageZoom | default true }} - {{ $cssZoom := resources.Get "lib/zoom/style.css" }} - {{ $assets.Add "css" (slice $cssZoom) }} - {{ end }} - {{ $bundleCSS := $assets.Get "css" | resources.Concat "css/main.bundle.css" | resources.Minify | resources.Fingerprint - (.Site.Params.fingerprintAlgorithm | default "sha512") - }} - - - {{ $jsAppearance := resources.Get "js/appearance.js" }} - {{ $jsAppearance = $jsAppearance | resources.ExecuteAsTemplate "js/appearance.js" . | resources.Minify | resources.Fingerprint (.Site.Params.fingerprintAlgorithm | default "sha512") }} - - {{ if site.Params.footer.showScrollToTop | default true }} - {{ $jsToTop := resources.Get "js/scroll-to-top.js" }} - {{ $assets.Add "js" (slice $jsToTop) }} - {{ end }} - {{ if .Site.Params.enableA11y | default false }} - {{ $jsA11y := resources.Get "js/a11y.js" }} - {{ $jsA11y = $jsA11y | resources.Minify | resources.Fingerprint (site.Params.fingerprintAlgorithm | default "sha512") }} - - {{ end }} - {{ $shouldIncludeZenMode := or (.Site.Params.enableA11y | default false) (.Params.showZenMode | default (.Site.Params.article.showZenMode | default false)) }} - {{ if and .IsPage $shouldIncludeZenMode }} - {{ $jsZenMode := resources.Get "js/zen-mode.js" }} - {{ $jsZenMode = $jsZenMode | resources.Minify | resources.Fingerprint (.Site.Params.fingerprintAlgorithm | default "sha512") }} - - {{ end }} - {{ if site.Params.footer.showScrollToTop | default true }} - {{ $jsToTop := resources.Get "js/scroll-to-top.js" }} - {{ $assets.Add "js" (slice $jsToTop) }} - {{ end }} - {{ if .Site.Params.enableSearch | default false }} - {{ $jsFuse := resources.Get "lib/fuse/fuse.min.js" }} - {{ $jsSearch := resources.Get "js/search.js" }} - {{ $assets.Add "js" (slice $jsFuse $jsSearch) }} - {{ end }} - {{ if .Site.Params.enableCodeCopy | default false }} - {{ $jsCode := resources.Get "js/code.js" }} - {{ $assets.Add "js" (slice $jsCode) }} - {{ end }} - {{ if .Site.Params.rtl | default false }} - {{ $jsRTL := resources.Get "js/rtl.js" }} - {{ $assets.Add "js" (slice $jsRTL) }} - {{ end }} - {{ $jsMobileMenu := resources.Get "js/mobilemenu.js" }} - {{ $assets.Add "js" (slice $jsMobileMenu) }} - {{ $buttonLikes := resources.Get "js/button-likes.js" }} - {{ $assets.Add "js" (slice $buttonLikes) }} - {{ $katexRender := resources.Get "js/katex-render.js" }} - {{ $assets.Add "js" (slice $katexRender) }} - {{ if $assets.Get "js" }} - {{ $bundleJS := $assets.Get "js" | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint - (.Site.Params.fingerprintAlgorithm | default "sha512") - }} - - {{ end }} - {{ if not .Site.Params.disableImageZoom | default true }} - {{ $zoomJS := resources.Get "lib/zoom/zoom.min.umd.js" | resources.Fingerprint (.Site.Params.fingerprintAlgorithm | default "sha512") }} - {{ end }} - {{/* Icons */}} - {{ if templates.Exists "partials/favicons.html" }} - {{ partialCached "favicons.html" .Site }} - {{ else }} - - - - + {{/* Me */}} + {{ with .Site.Params.Author.name }} + + {{ end }} + {{ with .Site.Params.Author.links }} + {{ range $links := . }} + {{ range $name, $url := $links }} + {{ if not (strings.HasPrefix $url "mailto:") }} + + {{ end }} + {{ end }} + {{ end }} + {{ end }} + + {{/* Social */}} + {{ template "_internal/opengraph.html" . }} + {{ template "_internal/twitter_cards.html" . }} + {{/* Use defaultSocialImage if feature image does not exist */}} + {{ $featureImage := "" }} + {{ $pageImages := .Resources.ByType "image" }} + {{ range slice "*featured*" "*cover*" "*thumbnail*" }} + {{ if not $featureImage }} + {{ $featureImage = $pageImages.GetMatch . }} + {{ end }} + {{ end }} + {{ if not $featureImage }} + {{ with .Site.Params.defaultSocialImage }} + {{ $socialImage := "" }} + {{ if or (strings.HasPrefix . "http:") (strings.HasPrefix . "https:") }} + {{ $socialImage = resources.GetRemote . }} + {{ else }} + {{ $socialImage = resources.Get . }} + {{ end }} + {{ with $socialImage }} + + + {{ end }} + {{ end }} {{ end }} {{/* Site Verification */}} @@ -155,52 +94,101 @@ {{ end }} - {{/* Social */}} - {{ template "_internal/opengraph.html" . }} - {{ template "_internal/twitter_cards.html" . }} + {{ $alg := .Site.Params.fingerprintAlgorithm | default "sha512" }} - {{- /* Main page always uses this; fallback elsewhere if no feature image */ -}} - {{- /* See https://gohugo.io/templates/embedded/#open-graph */ -}} - {{- $images := .Resources.ByType "image" -}} - {{- $socialImage := $images.GetMatch "*feature*" -}} + {{/* CSS */}} + {{ $cssResources := slice }} + {{ $schemeName := .Site.Params.colorScheme | default "blowfish" }} + {{ $cssScheme := resources.Get (printf "css/schemes/%s.css" $schemeName) | default (resources.Get "css/schemes/blowfish.css") }} + {{ $cssResources = $cssResources | append $cssScheme }} + {{ $cssResources = $cssResources | append (resources.Get "css/compiled/main.css") }} + {{ with resources.Get "css/custom.css" }} + {{ $cssResources = $cssResources | append . }} + {{ end }} + {{ if not .Site.Params.disableImageZoom | default true }} + {{ $cssResources = $cssResources | append (resources.Get "lib/zoom/style.css") }} + {{ end }} + {{ $bundleCSS := $cssResources | resources.Concat "css/main.bundle.css" | resources.Minify | resources.Fingerprint $alg }} + - {{- if not $socialImage -}} - {{- with .Site.Params.defaultSocialImage -}} - {{- if or (strings.HasPrefix . "http:") (strings.HasPrefix . "https:") -}} - {{- $socialImage = resources.GetRemote . -}} - {{- else -}} - {{- $socialImage = resources.Get . -}} - {{- end -}} - {{- end -}} - {{- end -}} + {{/* JS loaded immediately */}} + {{ $jsAppearance := resources.Get "js/appearance.js" | resources.ExecuteAsTemplate "js/appearance.js" . | resources.Minify | resources.Fingerprint $alg }} + + {{ $enableA11y := .Site.Params.enableA11y | default false }} + {{ if $enableA11y }} + {{ $jsA11y := resources.Get "js/a11y.js" | resources.Minify | resources.Fingerprint $alg }} + + {{ end }} + {{ $showZenMode := .Params.showZenMode | default (.Site.Params.article.showZenMode | default false) }} + {{ $shouldIncludeZenMode := or $enableA11y $showZenMode }} + {{ if and .IsPage $shouldIncludeZenMode }} + {{ $jsZenMode := resources.Get "js/zen-mode.js" | resources.Minify | resources.Fingerprint $alg }} + + {{ end }} + {{ if not .Site.Params.disableImageZoom | default true }} + {{ $zoomJS := resources.Get "lib/zoom/zoom.min.umd.js" | resources.Fingerprint $alg }} + + {{ end }} - {{- with $socialImage -}} - - - {{- end -}} + {{/* JS deferred */}} + {{ $jsResources := slice }} + {{ if site.Params.footer.showScrollToTop | default true }} + {{ $jsResources = $jsResources | append (resources.Get "js/scroll-to-top.js") }} + {{ end }} + {{ if .Site.Params.enableSearch | default false }} + {{ $jsResources = $jsResources | append (resources.Get "lib/fuse/fuse.min.js") | append (resources.Get "js/search.js") }} + {{ end }} + {{ if .Site.Params.enableCodeCopy | default false }} + {{ $jsResources = $jsResources | append (resources.Get "js/code.js") }} + {{ end }} + {{ if .Site.Params.rtl | default false }} + {{ $jsResources = $jsResources | append (resources.Get "js/rtl.js") }} + {{ end }} + {{ $jsResources = $jsResources | append (resources.Get "js/mobilemenu.js") }} + {{ $jsResources = $jsResources | append (resources.Get "js/button-likes.js") }} + {{ $jsResources = $jsResources | append (resources.Get "js/katex-render.js") }} + {{ if $jsResources }} + {{ $bundleJS := $jsResources | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint $alg }} + + {{ end }} + + {{/* Conditional loaded resources */}} + {{ partial "vendor.html" . }} + + {{/* Icons */}} + {{ if templates.Exists "partials/favicons.html" }} + {{ partialCached "favicons.html" .Site }} + {{ else }} + + + + + {{ end }} {{/* Schema */}} {{ partial "schema.html" . }} - {{/* Me */}} - {{ with .Site.Params.Author.name }} - - {{ end }} - {{ with .Site.Params.Author.links }} - {{ range $links := . }} - {{ range $name, $url := $links }} - {{ if not (strings.HasPrefix $url "mailto:") }} - - {{ end }} - {{ end }} - {{ end }} - {{ end }} - - {{/* Vendor */}} - {{ partial "vendor.html" . }} - {{/* Analytics */}} - {{ partial "analytics/main.html" .Site }} + {{ if hugo.IsProduction }} + {{ partial "analytics/main.html" . }} + {{ end }} {{/* Extend head - eg. for custom analytics scripts, etc. */}} {{ if templates.Exists "partials/extend-head.html" }} @@ -218,7 +206,7 @@ - + {{ end }} {{ end }} {{/* Advertisement */}} {{ with .Site.Params.advertisement.adsense }} - + {{ end }}