{{ $scr := .Scratch }}
{{ $is_sponsor := site.Params.i_am_a_sponsor | default false }} {{ $hide_generator := site.Params.power_ups.hide_generator | default false }} {{ if not (and $is_sponsor $hide_generator) }} {{ end }} {{ if .Params.private }} {{- end -}} {{/* Parse theme and font */}} {{ partial "functions/parse_theme" . }} {{/* Pre-connect to Google Fonts if the site's Font Theme uses them. */}} {{ with ($scr.Get "google_fonts") }} {{ end }} {{/* Load Google Fonts if the site's Font Theme uses them. */}} {{/* Note: we cannot use SRI with Google Fonts because the CSS is dynamically generated according to the user agent. */}} {{ with ($scr.Get "google_fonts") }} {{ if hasPrefix . "family=" }} {{/* If `google_fonts` starts with "family=", use API v2 (https://developers.google.com/fonts/docs/css2) */}} {{ else }} {{ errorf "There is a new version of Google Fonts. Learn how to upgrade your font pack at https://wowchemy.com/docs/customization/#custom-font" }} {{ end }} {{ end }} {{ if site.Params.marketing.analytics.google_optimize | and hugo.IsProduction }} {{- end -}} {{ with site.Params.marketing.verification.google }} {{- end -}} {{ with site.Params.marketing.verification.baidu }} {{- end -}} {{ with site.Params.marketing.verification.bing }} {{- end -}} {{/* Attempt to load superuser. */}} {{ $superuser_name := "" }} {{ $superuser_username := "" }} {{ $superuser_role := "" }} {{ range first 1 (where (where site.Pages "Section" "authors") "Params.superuser" true) }} {{ $superuser_name = .Title }} {{ $superuser_username = path.Base (path.Split .Path).Dir }} {{ $superuser_role = .Params.role }} {{ end }} {{ $scr.Set "superuser_username" $superuser_username }}{{/* Set superuser globally for page_author.html. */}} {{ with $superuser_name }}{{ end }} {{/* Generate page description. */}} {{ $desc := "" }} {{ if .Params.summary }} {{ $desc = .Params.summary }} {{ else if .Params.abstract }} {{ $desc = .Params.abstract }} {{ else if .IsPage }} {{ $desc = .Summary }} {{ else if site.Params.marketing.seo.org_name }} {{ $desc = site.Params.marketing.seo.org_name }} {{ else }} {{ $desc = $superuser_role }} {{ end }} {{ range .Translations }} {{ end }} {{ $css := site.Data.assets.css }} {{ $js := site.Data.assets.js }} {{ if ne ($scr.Get "primary") "#fff" }} {{ end }} {{/* Config LaTeX math rendering. */}} {{ if or .Params.math site.Params.features.math.enable }} {{ $mathjax_config := resources.Get "js/mathjax-config.js" }} {{ end }} {{/* Attempt to load local vendor CSS, otherwise load from CDN. */}} {{/* Only load non-essential CSS in this media-swapping way */}} {{- $stylesheets := slice -}} {{- $lib_names := slice "fontawesome/all.min" -}} {{- range $lib_names -}} {{- $stylesheets = $stylesheets | append (resources.Get (printf "css/libs/%s.css" . ) ) -}} {{- end -}} {{ $stylesheets = $stylesheets | resources.Concat "css/vendor-bundle.css" | minify }} {{- if hugo.IsProduction -}} {{- $stylesheets = $stylesheets | fingerprint "md5" -}} {{- end -}} {{ $scr.Set "vendor_css_filename" "main.min.css" }} {{ $scr.Set "vendor_js_filename" "main.min.js" }} {{ if and (fileExists (printf "static/css/vendor/%s" ($scr.Get "vendor_css_filename"))) (fileExists (printf "static/js/vendor/%s" ($scr.Get "vendor_js_filename"))) }} {{ $scr.Set "use_cdn" 0 }} {{ else }} {{ $scr.Set "use_cdn" 1 }} {{ if site.Params.extensions.academicons.enable }} {{ printf "" (printf $css.academicons.url $css.academicons.version) $css.academicons.sri | safeHTML }} {{ end }} {{/* Workaround `.HasShortcode "gallery"` not parsing page resources (widget page sections) */}} {{ $has_gallery := false }} {{/* Note: unless there is a root `/index.md` with `type: widget_page`, Hugo treats homepage as `page` type. */}} {{ if (eq .Type "widget_page") | or (and .IsHome (eq .Type "page")) }} {{/* Check if widget page sections use a gallery */}} {{ $page := "/home/index.md" }} {{ $context := cond .IsHome (site.GetPage $page) . }} {{ range $context.Resources.ByType "page" }} {{ if .HasShortcode "gallery" }} {{ $has_gallery = true }} {{ end }} {{ end }} {{ else }} {{/* Single page */}} {{ if .HasShortcode "gallery" }} {{ $has_gallery = true }} {{ end }} {{ end }} {{ $scr.Set "HasNestedGalleryShortcode" $has_gallery }} {{ if $has_gallery | or site.Params.require_fancybox }} {{ printf "" (printf $css.fancybox.url $css.fancybox.version) $css.fancybox.sri | safeHTML }} {{ end }} {{/* Default to disabling highlighting, but allow the user to override it in .Params or site.Params. Use $scr to store "highlight_enabled", so that we can read it again in footer.html. */}} {{ $scr.Set "highlight_enabled" false }} {{ if isset .Params "highlight" }} {{ $scr.Set "highlight_enabled" .Params.highlight }} {{ else if isset site.Params.features.syntax_highlighter "enable" }} {{ $scr.Set "highlight_enabled" site.Params.features.syntax_highlighter.enable }} {{ end }} {{ if ($scr.Get "highlight_enabled") }} {{ $v := $css.highlight.version }} {{ with site.Params.features.syntax_highlighter.theme }} {{ printf "" (printf $css.highlight.url $css.highlight.version .) | safeHTML }} {{ printf "" (printf $css.highlight.url $css.highlight.version .) | safeHTML }} {{ else }} {{ if eq ($scr.Get "light") true }} {{ printf "" (printf $css.highlight.url $css.highlight.version "github") | safeHTML }} {{ printf "" (printf $css.highlight.url $css.highlight.version "dracula") | safeHTML }} {{ else }} {{ printf "" (printf $css.highlight.url $css.highlight.version "github") | safeHTML }} {{ printf "" (printf $css.highlight.url $css.highlight.version "dracula") | safeHTML }} {{ end }} {{ end }} {{ end }} {{/* Maps CSS. */}} {{ $map_provider := lower site.Params.features.map.provider }} {{ if in (slice "mapnik" "mapbox") $map_provider }} {{ printf "" (printf $css.leaflet.url $css.leaflet.version) $css.leaflet.sri | safeHTML }} {{ end }} {{ if eq (lower site.Params.features.search.provider) "algolia" }} {{ printf "" (printf $css.instantsearch.url $css.instantsearch.version) $css.instantsearch.sri | safeHTML }} {{ end }} {{/* Load async scripts. */}} {{ range $k, $v := site.Data.assets.js }} {{/* TODO: investigate why `where ... "async" true` does not work. */}} {{ $load := $v.async }} {{/* Only load MathJax if required. */}} {{ if (eq $k "mathJax") | and (not (or $.Params.math site.Params.features.math.enable)) }} {{ $load = false }} {{ end }} {{ if $load }} {{ printf "" (printf $v.url $v.version) $v.sri | safeHTML }} {{ end }} {{ end }} {{ end }} {{ $license := printf "/*! Wowchemy v%s | https://wowchemy.com/ */\n" site.Data.wowchemy.version }} {{ $license := $license | printf "%s/*! Copyright 2016-present George Cushen (https://georgecushen.com/) */\n" }} {{ $license := $license | printf "%s/*! License: https://github.com/wowchemy/wowchemy-hugo-themes/blob/main/LICENSE.md */\n" }} {{ $css_bundle_head := $license | resources.FromString "css/bundle-head.css" }} {{ $css_options := dict "targetPath" "css/wowchemy.css" }} {{- if hugo.IsProduction -}} {{- $css_options = merge $css_options (dict "outputStyle" "compressed") -}} {{- end -}} {{ $sass_template := resources.Get "scss/main.scss" }} {{ $style := $sass_template | resources.ExecuteAsTemplate "main_parsed.scss" . | toCSS $css_options }} {{- if hugo.IsProduction -}} {{- $style = $style | minify -}} {{- end -}} {{ $style := slice $css_bundle_head $style | resources.Concat "css/wowchemy.css" }} {{- if eq (getenv "HUGO_WC_POST_CSS") "true" -}} {{- $style = $style | postCSS -}} {{- end -}} {{- if hugo.IsProduction -}} {{- $style = $style | fingerprint "md5" -}} {{- end -}} {{- if eq (getenv "HUGO_WC_POST_CSS") "true" -}} {{/* PostProcess must be last action in the pipeline */}} {{- $style = $style | resources.PostProcess -}} {{- end -}} {{ partial "marketing/google_analytics" . }} {{ partial "marketing/google_tag_manager" . }} {{ partial "marketing/microsoft_clarity" . }} {{ partial "marketing/baidu_tongji" . }} {{/* Netlify Identity integration. */}} {{ $use_cms := templates.Exists "wowchemycms/single.wowchemycms_config.yml" | default (site.Params.extensions.cms.netlify_cms | default false) }} {{ if .IsHome | and $use_cms }} {{ end }} {{ with .OutputFormats.Get "RSS" }} {{ end }} {{ with site.Home.OutputFormats.Get "WebAppManifest" }} {{ end }} {{/* Get page image for sharing. */}} {{ $sharing_image := resources.GetMatch (path.Join "media" "sharing.*") }} {{ $featured_image := (.Resources.ByType "image").GetMatch "*featured*" }} {{ $avatar_image := (.Resources.ByType "image").GetMatch "avatar*" }} {{ $has_logo := fileExists "assets/media/logo.png" | or (fileExists "assets/media/logo.svg") }} {{ $og_image := "" }} {{ $twitter_card := "summary_large_image" }} {{ if (and (eq .Kind "term") $avatar_image) }} {{/* Match image processing in About widget to prevent generating more images than necessary. */}} {{ $og_image = ($avatar_image.Fill "270x270 Center").Permalink }} {{ $twitter_card = "summary" }} {{ else if $featured_image }} {{ $og_image = $featured_image.Permalink }} {{ else if $sharing_image }} {{ $og_image = $sharing_image.Permalink }} {{ else if $has_logo }} {{ $og_image = (partial "functions/get_logo" (dict "constraint" "fit" "size" 300)).Permalink }} {{ $twitter_card = "summary" }} {{ else }} {{ $og_image = (partial "functions/get_icon" 512).Permalink }} {{ $twitter_card = "summary" }} {{ end }} {{ $scr.Set "og_image" $og_image }}{{/* Set `og_image` globally for `rss.xml`. */}} {{ $title := "" }} {{ with .Params.seo.title }} {{ $title = replace . "{brand}" site.Title }} {{ else }} {{ $title = .Title | default site.Title }} {{ if ne $title site.Title }}{{ $title = printf "%s | %s" $title site.Title }}{{ end }} {{ end }} {{ with site.Params.marketing.seo.twitter }} {{ end }} {{- with $og_image -}} {{- end -}} {{ if .IsPage }} {{ if not .PublishDate.IsZero }} {{ else if not .Date.IsZero }} {{ end }} {{ if not .Lastmod.IsZero }}{{ end }} {{ else }} {{ if not .Date.IsZero }} {{ end }} {{ end }} {{ partial "jsonld/main" (dict "page" . "summary" $desc) }} {{ partial "cookie_consent" . }} {{ partial "custom_head" . }}