header.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <!DOCTYPE html>
  2. <html lang="{{ .Site.LanguageCode | default "en-us" }}">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="theme" content="hugo-academic">
  8. {{ .Hugo.Generator }}
  9. {{ with .Site.Params.name }}<meta name="author" content="{{ . }}">{{ end }}
  10. {{ with .Site.Params.role }}<meta name="description" content="{{ . }}">{{ end }}
  11. {{ range .Translations }}
  12. <link rel="alternate" hreflang="{{ .Lang }}" href="{{ .Permalink }}">
  13. {{ end }}
  14. <link rel="alternate" hreflang="{{ .Site.LanguageCode | default "en-us" }}" href="{{ .Permalink }}">
  15. {{ $scr := .Scratch }}
  16. {{ partial "css/parse_theme.css" . }}
  17. {{ $sri := .Site.Data.sri }}
  18. {{/* Default to enabling highlighting, but allow the user to override it in .Params or .Site.Params.
  19. Use $scr to store "highlight_enabled", so that we can read it again in footer.html. */}}
  20. {{ $scr.Set "highlight_enabled" true }}
  21. {{ if isset .Params "highlight" }}
  22. {{ $scr.Set "highlight_enabled" .Params.highlight }}
  23. {{ else if isset .Site.Params "highlight" }}
  24. {{ $scr.Set "highlight_enabled" .Site.Params.highlight }}
  25. {{ end }}
  26. {{ if $scr.Get "highlight_enabled" }}
  27. {{ $v := $sri.js.highlight.version }}
  28. {{ with .Site.Params.highlight_style }}
  29. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ $v }}/styles/{{ . }}.min.css">
  30. {{ else }}
  31. {{ if eq ($scr.Get "light") true }}
  32. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ $v }}/styles/github.min.css">
  33. {{ else }}
  34. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ $v }}/styles/dracula.min.css">
  35. {{ end }}
  36. {{ end }}
  37. {{ end }}
  38. {{ if not .Site.Params.disable_sri }}
  39. {{ printf "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/%s/css/bootstrap.min.css\" integrity=\"%s\" crossorigin=\"anonymous\">" $sri.css.bootstrap.version $sri.css.bootstrap.sri | safeHTML }}
  40. {{ printf "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/academicons/%s/css/academicons.min.css\" integrity=\"%s\" crossorigin=\"anonymous\">" $sri.css.academicons.version $sri.css.academicons.sri | safeHTML }}
  41. {{ printf "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/%s/css/font-awesome.min.css\" integrity=\"%s\" crossorigin=\"anonymous\">" $sri.css.fontAwesome.version $sri.css.fontAwesome.sri | safeHTML }}
  42. {{ if or (eq .Site.Params.map 2) (eq .Site.Params.map 3) }}
  43. {{ printf "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/leaflet/%s/leaflet.css\" integrity=\"%s\" crossorigin=\"anonymous\">" $sri.css.leaflet.version $sri.css.leaflet.sri | safeHTML }}
  44. {{ end }}
  45. {{ else }}
  46. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/{{- $sri.css.bootstrap.version -}}/css/bootstrap.min.css">
  47. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/academicons/{{- $sri.css.academicons.version -}}/css/academicons.min.css">
  48. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/{{- $sri.css.fontAwesome.version -}}/css/font-awesome.min.css">
  49. {{ if or (eq .Site.Params.map 2) (eq .Site.Params.map 3) }}
  50. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/leaflet/{{- $sri.css.leaflet.version -}}/leaflet.css">
  51. {{ end }}
  52. {{ end }}
  53. {{/* We cannot use SRI with Google Fonts because the CSS is dynamically generated according to the user agent */}}
  54. {{ with ($scr.Get "google_fonts") }}
  55. <link rel="stylesheet" href="{{ printf "//fonts.googleapis.com/css?family=%s" . }}">
  56. {{ end }}
  57. <link rel="stylesheet" href="{{ "styles.css" | relURL }}">
  58. {{ range .Site.Params.custom_css }}
  59. <link rel="stylesheet" href="{{ "/css/" | relURL }}{{ . }}">
  60. {{ end }}
  61. {{ if .Site.GoogleAnalytics }}
  62. <script>
  63. window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
  64. ga('create', '{{ .Site.GoogleAnalytics }}', 'auto');
  65. ga('require', 'eventTracker');
  66. ga('require', 'outboundLinkTracker');
  67. ga('require', 'urlChangeTracker');
  68. ga('send', 'pageview');
  69. </script>
  70. <script async src="//www.google-analytics.com/analytics.js"></script>
  71. {{ if not .Site.Params.disable_sri }}
  72. {{ printf "<script async src=\"https://cdnjs.cloudflare.com/ajax/libs/autotrack/%s/autotrack.js\" integrity=\"%s\" crossorigin=\"anonymous\"></script>" $sri.js.autotrack.version $sri.js.autotrack.sri | safeHTML }}
  73. {{ else }}
  74. <script async src="//cdnjs.cloudflare.com/ajax/libs/autotrack/{{- $sri.js.autotrack.version -}}/autotrack.js"></script>
  75. {{ end }}
  76. {{ end }}
  77. {{ if or .Site.RSSLink .RSSLink }}
  78. <link rel="alternate" href="{{ .RSSLink | default .Site.RSSLink }}" type="application/rss+xml" title="{{ .Site.Title }}">
  79. <link rel="feed" href="{{ .RSSLink | default .Site.RSSLink }}" type="application/rss+xml" title="{{ .Site.Title }}">
  80. {{ end }}
  81. <link rel="icon" type="image/png" href="{{ "/img/icon.png" | relURL }}">
  82. <link rel="apple-touch-icon" type="image/png" href="{{ "/img/apple-touch-icon.png" | relURL }}">
  83. <link rel="canonical" href="{{ .Permalink }}">
  84. <meta property="twitter:card" content="summary_large_image">
  85. {{ range where $.Site.Params.social ".icon" "twitter" }}
  86. <meta property="twitter:site" content="@{{ replaceRE "^//twitter.com/([^/]+)" "$1" .link }}">
  87. <meta property="twitter:creator" content="@{{ replaceRE "^//twitter.com/([^/]+)" "$1" .link }}">
  88. {{ end }}
  89. <meta property="og:site_name" content="{{ .Site.Title }}">
  90. <meta property="og:url" content="{{ .Permalink }}">
  91. <meta property="og:title" content="{{ if not .IsHome }}{{ .Title }} | {{ end }}{{ .Site.Title }}">
  92. <meta property="og:description" content="{{- if .IsPage -}}
  93. {{- if or .Type "publication" .Type "talk" -}}
  94. {{- with .Params.abstract -}}{{- . -}}{{- end -}}
  95. {{- else -}}
  96. {{- .Summary -}}
  97. {{- end -}}
  98. {{- else -}}
  99. {{- with .Site.Params.role -}}{{- . -}}{{- end -}}
  100. {{- end -}}">
  101. {{- with .Params.header.image }}<meta property="og:image" content="{{ printf "/img/%s" . | absURL }}">{{end}}
  102. <meta property="og:locale" content="{{ .Site.LanguageCode | default "en-us" }}">
  103. {{ if .IsPage }}
  104. {{ if not .PublishDate.IsZero }}<meta property="article:published_time" content="{{ .PublishDate.Format "2006-01-02T15:04:05-07:00" | safeHTML }}">
  105. {{ else if not .Date.IsZero }}<meta property="article:published_time" content="{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}">{{ end }}
  106. {{ if not .Lastmod.IsZero }}<meta property="article:modified_time" content="{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}">{{ end }}
  107. {{ else }}
  108. {{ if not .Date.IsZero }}<meta property="og:updated_time" content="{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}">{{ end }}
  109. {{ end }}
  110. {{ partial "head_custom" . }}
  111. <title>{{ if not .IsHome }}{{ .Title }} | {{ end }}{{ .Site.Title }}</title>
  112. </head>
  113. <body id="top" data-spy="scroll" data-target="#navbar-main" data-offset="71" {{ if not ($scr.Get "light") }}class="dark"{{ end }}>