Files
HugoBlox-kit/modules/blox-bootstrap/layouts/_partials/site_head.html
T

223 lines
11 KiB
HTML

{{ $scr := .Scratch }}
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
{{ $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) }}
<meta name="generator" content="Hugo Blox Builder {{ site.Data.hugoblox.version }}" />
{{ end }}
{{/* EXTENSIBILITY HOOK: HEAD-START */}}
{{ partial "blox-core/functions/get_hook" (dict "hook" "head-start" "context" .) }}
{{/* 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") }}
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
{{ 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) */}}
<link rel="preload" as="style" {{ printf "href=\"https://fonts.googleapis.com/css2?%s&display=swap\"" . | safeHTMLAttr }}>
<link rel="stylesheet" {{ printf "href=\"https://fonts.googleapis.com/css2?%s&display=swap\"" . | safeHTMLAttr }} media="print" onload="this.media='all'">
{{ else }}
{{ errorf "There is a new version of Google Fonts. Learn how to upgrade your font pack at https://docs.hugoblox.com/customization/#custom-font" }}
{{ end }}
{{ end }}
{{ if site.Params.marketing.analytics.google_optimize | and hugo.IsProduction }}
<script src="https://www.googleoptimize.com/optimize.js?id={{ site.Params.marketing.analytics.google_optimize }}"></script>
{{- end -}}
{{ $css := site.Data.assets.css }}
{{ $js := site.Data.assets.js }}
{{/* Config LaTeX math rendering. */}}
{{ if or .Params.math site.Params.features.math.enable }}
{{ $mathjax_config := resources.Get "js/mathjax-config.js" }}
<script src="{{ $mathjax_config.RelPermalink }}"></script>
{{ 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 eq (getenv "WC_POST_CSS") "true" -}}
{{- $stylesheets = $stylesheets | postCSS -}}
{{- end -}}
{{- if hugo.IsProduction -}}
{{- $stylesheets = $stylesheets | fingerprint "md5" -}}
{{- end -}}
{{- if eq (getenv "WC_POST_CSS") "true" -}}
{{/* PostProcess must be last action in the pipeline */}}
{{- $stylesheets = $stylesheets | resources.PostProcess -}}
{{- end -}}
<link rel="stylesheet" href="{{$stylesheets.RelPermalink}}" media="print" onload="this.media='all'">
{{ $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 }}
<link rel="stylesheet" href="{{ printf "/css/vendor/%s" ($scr.Get "vendor_css_filename") | relURL }}" />
{{ else }}
{{ $scr.Set "use_cdn" 1 }}
{{ if site.Params.extensions.academicons.enable }}
{{ printf "<link rel=\"stylesheet\" href=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" media=\"print\" onload=\"this.media='all'\">" (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" | or ($.Page.Store.Get "has_gallery") }}
{{ $has_gallery = true }}
{{ end }}
{{ end }}
{{ if (eq .Type "landing") }}
{{ range $index, $block := .Params.sections }}
{{ if (gt (len (findRE `\{\{< gallery` $block.content.text 1)) 0) }}
{{ $.Page.Store.Set "has_gallery" true }}
{{ $has_gallery = true }}
{{ end }}
{{ end }}
{{ end }}
{{ if $has_gallery | or site.Params.require_fancybox }}
{{ printf "<link rel=\"stylesheet\" href=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" media=\"print\" onload=\"this.media='all'\">" (printf $css.fancybox.url $css.fancybox.version) $css.fancybox.sri | safeHTML }}
{{ end }}
{{/* Maps CSS. */}}
{{ $map_provider := lower site.Params.features.map.provider }}
{{ if in (slice "mapnik" "mapbox") $map_provider }}
{{ printf "<link rel=\"stylesheet\" href=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" media=\"print\" onload=\"this.media='all'\">" (printf $css.leaflet.url $css.leaflet.version) $css.leaflet.sri | safeHTML }}
{{ end }}
{{ if eq (lower site.Params.features.search.provider) "algolia" }}
{{ printf "<link rel=\"stylesheet\" href=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\">" (printf $css.instantsearch.url $css.instantsearch.version) $css.instantsearch.sri | safeHTML }}
{{ else if eq (lower site.Params.features.search.provider) "docsearch" }}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3" />
{{ 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 "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" async></script>" (printf $v.url $v.version) $v.sri | safeHTML }}
{{ end }}
{{ end }}
{{ end }}
{{/* Load WC style */}}
{{ $license := printf "/*! Hugo Blox Builder v%s | https://hugoblox.com/ */\n" site.Data.hugoblox.version }}
{{ $license := $license | printf "%s/*! Copyright 2016-present George Cushen (https://georgecushen.com/) */\n" }}
{{ $license := $license | printf "%s/*! License: https://github.com/HugoBlox/hugo-blox-builder/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 "WC_POST_CSS") "true" -}}
{{- $style = $style | postCSS -}}
{{- end -}}
{{- if hugo.IsProduction -}}
{{- $style = $style | fingerprint "md5" -}}
{{- end -}}
{{- if eq (getenv "WC_POST_CSS") "true" -}}
{{/* PostProcess must be last action in the pipeline */}}
{{- $style = $style | resources.PostProcess -}}
{{- end -}}
<link rel="stylesheet" href="{{ $style.RelPermalink }}" />
{{/* Load WC community block styles */}}
{{ $wc_block_styles := resources.Match "scss/blocks/**.scss" }}
{{ with $wc_block_styles }}
{{ $wc_block_styles = $wc_block_styles | resources.Concat "css/wowchemy-blocks.scss" | resources.ToCSS }}
{{- if eq (getenv "WC_POST_CSS") "true" -}}
{{- $wc_block_styles = $wc_block_styles | postCSS -}}
{{- end -}}
{{- if hugo.IsProduction -}}
{{- $wc_block_styles = $wc_block_styles | minify | fingerprint "md5" -}}
{{- end -}}
{{- if eq (getenv "WC_POST_CSS") "true" -}}
{{/* PostProcess must be last action in the pipeline */}}
{{- $wc_block_styles = $wc_block_styles | resources.PostProcess -}}
{{- end -}}
<link rel="stylesheet" href="{{ $wc_block_styles.RelPermalink }}" />
{{ end }}
{{/* Hugo Chroma Syntax Highlighter Initialization */}}
{{/* TODO: optimize to only include the Chroma CSS themes when the page has code blocks. */}}
{{ $hl_theme_light := site.Params.features.syntax_highlighter.theme_light | default "github-light" }}
{{ $hl_theme_dark := site.Params.features.syntax_highlighter.theme_dark | default "dracula" }}
{{ $hl_theme_light_path := printf "css/libs/chroma/%s.css" $hl_theme_light }}
{{ $hl_theme_dark_path := printf "css/libs/chroma/%s.css" $hl_theme_dark }}
{{ if not (fileExists (printf "assets/%s" $hl_theme_light_path)) | or (not (fileExists (printf "assets/%s" $hl_theme_dark_path))) }}
{{ errorf "Hugo Chroma themes %s.css and %s.css not found in `css/libs/chroma/`. See https://gohugo.io/commands/hugo_gen_chromastyles/" $hl_theme_light $hl_theme_dark }}
{{ else }}
{{ $hl_theme_light_css := resources.Get $hl_theme_light_path | minify }}
{{ $hl_theme_dark_css := resources.Get $hl_theme_dark_path | minify }}
<link rel="stylesheet" href="{{ $hl_theme_light_css.RelPermalink }}" title="hl-light" media="print" onload="this.media='all'" {{ if ne ($scr.Get "light") true }}disabled{{end}}>
<link rel="stylesheet" href="{{ $hl_theme_dark_css.RelPermalink }}" title="hl-dark" media="print" onload="this.media='all'" {{ if eq ($scr.Get "light") true }}disabled{{end}}>
{{ end }}
{{/* Load SEO module */}}
{{ partial "blox_seo" . }}
{{/* Netlify Identity integration. */}}
{{ $use_cms := templates.Exists "decap_cms/single.decap_cms_config.yml" | default (site.Params.extensions.decap_cms.enable | default false) }}
{{ if .IsHome | and $use_cms }}
<script src="https://identity.netlify.com/v1/netlify-identity-widget.js"></script>
{{ end }}
{{/* RSS Feed */}}
{{ with .OutputFormats.Get "RSS" }}
<link rel="alternate" href="{{ .RelPermalink }}" type="application/rss+xml" title="{{ site.Title }}" />
{{ end }}
{{ partial "cookie_consent" . }}
{{ $title := partial "blox-core/functions/get_page_title" . }}
<title>{{$title}}</title>
{{/* EXTENSIBILITY HOOK: HEAD-END */}}
{{/* Deprecated custom_head hook */}}
{{ if templates.Exists "_partials/custom_head.html" }}
{{ partial "custom_head" . }}
{{ end }}
{{ partial "blox-core/functions/get_hook" (dict "hook" "head-end" "context" .) }}
</head>