Simon Späti
2023-02-07 bde44fadf20a1f91a466653f9552ce8bd658e2f9
layouts/partials/head.html
@@ -1,6 +1,7 @@
<!-- set data/config yaml file based on website language -->
{{ $config := cond (eq $.Site.Language.Lang "en") "config" (printf "config.%s" $.Site.Language.Lang) }}
{{ $data := index $.Site.Data $config }}
{{.Site.BaseURL}}icon.png
<head>
  <!-- Meta tags -->
  <meta charset="UTF-8" />
@@ -8,6 +9,23 @@
    name="description"
    content="{{if .IsHome}}{{$data.description | default $.Site.Data.config.description}}{{else}}{{.Summary}}{{end}}"
  />
  <meta property="og:title" content="{{ .Title }}">
  <meta property="og:type" content="website">
  <meta property="og:image" content="{{.Site.BaseURL}}icon.png">
  <meta property="og:url" content="{{ .Permalink }}">
  <meta property="og:width" content="200">
  <meta property="og:height" content="200">
  <meta name="twitter:card" content="summary" />
  <meta name="twitter:title" content="{{ .Title }}" />
  <meta name="twitter:description" content="{{if .IsHome}}{{$data.description | default $.Site.Data.config.description}}{{else}}{{.Summary}}{{end}}" />
  <meta name="twitter:image" content="{{.Site.BaseURL}}icon.png">
  {{ range $data.links }}
    {{ if strings.Contains .link "twitter.com" }}
      {{ $twitter_handle := index (split .link "/") (sub (len (split .link "/")) 1) }}
      <meta name="twitter:site" content="{{ $twitter_handle }}" />
    {{ end }}
  {{ end }}
  <title>
    {{ if .Title }}{{ .Title }}{{ else }}{{ $data.page_title | default $.Site.Data.config.page_title }}{{
    end }}
@@ -50,27 +68,29 @@
  <script src="{{$s.Permalink}}"></script>
  {{end}}
  {{partial "katex.html" .}}
  <script src="https://unpkg.com/@floating-ui/core@0.7.3"></script>
  <script src="https://unpkg.com/@floating-ui/dom@0.5.4"></script>
  {{partial "mermaid.html" .}}
  <script async src="https://unpkg.com/@floating-ui/core@0.7.3"></script>
  <script async src="https://unpkg.com/@floating-ui/dom@0.5.4"></script>
  {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" |
  resources.Minify }}
  <script src="{{$popover.Permalink}}"></script>
  <script async src="{{$popover.Permalink}}"></script>
  <!-- Optional scripts -->
  {{ if $data.enableCodeBlockTitle | default $.Site.Data.config.enableCallouts }}
  {{ $codeTitle := resources.Get "js/code-title.js" | resources.Fingerprint "md5" | resources.Minify }}
  <script src="{{$codeTitle.Permalink}}"></script>
  <script defer src="{{$codeTitle.Permalink}}"></script>
  {{end}}
  {{ if $data.enableCodeBlockCopy | default $.Site.Data.config.enableCodeBlockCopy }}
  {{ $clipboard := resources.Get "js/clipboard.js" | resources.Fingerprint "md5" | resources.Minify }}
  <script src="{{$clipboard.Permalink}}"></script>
  <script defer src="{{$clipboard.Permalink}}"></script>
  {{ end }}
  {{ if $data.enableCallouts | default $.Site.Data.config.enableCallouts }}
  {{ $callouts := resources.Get "js/callouts.js" | resources.Fingerprint "md5" | resources.Minify }}
  <script src="{{$callouts.Permalink}}"></script>
  <script defer src="{{$callouts.Permalink}}"></script>
  {{ end }}
  <!--  Preload page vars  -->
@@ -79,6 +99,9 @@
  "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify
  }}
  <script>
    const SEARCH_ENABLED = {{.Site.Data.config.search.enableSemanticSearch}}
    const LATEX_ENABLED = {{.Site.Data.config.enableLatex}}
    const PRODUCTION = {{ hugo.IsProduction }}
    const BASE_URL = {{.Site.BaseURL}}
    const fetchData = Promise.all([
          fetch("{{ $linkIndex.Permalink }}")
@@ -115,12 +138,11 @@
      {{if $data.enableCallouts | default $.Site.Data.config.enableCallouts -}}
      addCollapsibleCallouts();
      {{ end }}
      {{if $data.enableLinkPreview | default $.Site.Data.config.enableLinkPreview}}
      initPopover(
        {{strings.TrimRight "/" .Site.BaseURL }},
        {{$data.enableContextualBacklinks | default $.Site.Data.config.enableContextualBacklinks}},
        {{$data.enableLatex | default $.Site.Data.config.enableLatex}}
        {{$data.enableContextualBacklinks | default $.Site.Data.config.enableContextualBacklinks}}
      )
      {{end}}
@@ -143,6 +165,42 @@
        }
      {{end}}
      {{if $data.enableMermaid | default $.Site.Data.config.enableMermaid}}
        var els = document.getElementsByClassName("mermaid");
        if (els.length > 0) {
          import('https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs').then(
            (obj) => {
              // init forces mermaid to render mermaid markdown without waiting
              // for DOMContentLoaded event
              obj.default.init();
            }
          )
        }
      {{end}}
      // analytics
      function clickHandler(evt) {
        const target = evt.target
        const classNames = target.className.split(" ")
        const broken = classNames.includes("broken")
        const internal = classNames.includes("internal-link")
        plausible("Link Click", {
          props: {
            href: target.href,
            broken,
            internal,
            graph: false,
          }
        })
      }
      const links = document.querySelectorAll("a")
      for (link of links) {
        if (link.className.includes("root-title")) {
          link.addEventListener('click', clickHandler, {once: true})
        }
      }
    }
    const init = (doc = document) => {
@@ -188,5 +246,7 @@
    })
  </script>
  {{end}}
  {{ $trimmedURL := trim (index (split .Site.BaseURL "://") 1) "/" }}
  <script defer data-domain="{{$trimmedURL}}" src="https://plausible.io/js/script.js"></script>
  <script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
{{ template "_internal/google_analytics.html" . }}