themes/hugo-coder/layouts/_default/baseof.html
564f36e0fffbe296c499cb33322d59b49ead4913
· 9.2 KB · 240 lines
raw
| 1 | <!DOCTYPE html> |
| 2 | <html lang="{{ .Site.Language.Lang }}"> |
| 3 | |
| 4 | <head> |
| 5 | <meta charset="utf-8"> |
| 6 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 7 | <meta http-equiv="Content-Language" content="{{ .Site.Language.Lang }}"> |
| 8 | <meta name="color-scheme" content="light dark"> |
| 9 | |
| 10 | {{ if .Site.Params.csp }} |
| 11 | {{ partial "csp.html" . }} |
| 12 | {{ end }} |
| 13 | |
| 14 | <style> |
| 15 | @keyframes snow { |
| 16 | 0% { |
| 17 | transform: translate(var(--x), var(--y)); |
| 18 | } |
| 19 | 50% { |
| 20 | transform: translate(calc(var(--x) - var(--w)), calc(100vh - 5px)); |
| 21 | } |
| 22 | 100% { |
| 23 | transform: translate(calc(var(--x) - var(--w)), calc(100vh - 5px)) scale(0); |
| 24 | } |
| 25 | } |
| 26 | |
| 27 | .snow { |
| 28 | width: 5px; |
| 29 | height: 5px; |
| 30 | border-radius: 50%; |
| 31 | background-color: white; |
| 32 | position: absolute; |
| 33 | transform: translate(var(--x), var(--y)); |
| 34 | animation: snow var(--s) linear var(--d) infinite; |
| 35 | } |
| 36 | |
| 37 | /** |
| 38 | body { |
| 39 | overflow: hidden; |
| 40 | } |
| 41 | **/ |
| 42 | |
| 43 | </style> |
| 44 | |
| 45 | {{ with .Site.Params.author }}<meta name="author" content="{{ . }}">{{ end }} |
| 46 | <meta name="description" content="{{ .Description | default (.Summary | default .Site.Params.description ) }}"> |
| 47 | <meta name="keywords" content="{{ (delimit .Keywords ",") | default .Site.Params.keywords }}"> |
| 48 | |
| 49 | {{ template "_internal/twitter_cards.html" . }} |
| 50 | {{ template "_internal/opengraph.html" . }} |
| 51 | |
| 52 | <title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title> |
| 53 | |
| 54 | {{ if .Permalink }} |
| 55 | <link rel="canonical" href="{{ .Permalink }}"> |
| 56 | {{ end }} |
| 57 | |
| 58 | <link rel="preload" href="/fonts/forkawesome-webfont.woff2?v=1.2.0" as="font" type="font/woff2" crossorigin> |
| 59 | |
| 60 | {{ if .Site.IsServer }} |
| 61 | {{ $cssOpts := (dict "targetPath" "css/coder.css" "enableSourceMap" true ) }} |
| 62 | {{ $styles := resources.Get "scss/coder.scss" | resources.ExecuteAsTemplate "style.coder.css" . | toCSS $cssOpts }} |
| 63 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" media="screen"> |
| 64 | {{ else }} |
| 65 | {{ $cssOpts := (dict "targetPath" "css/coder.css" ) }} |
| 66 | {{ $styles := resources.Get "scss/coder.scss" | resources.ExecuteAsTemplate "style.coder.css" . | toCSS $cssOpts | minify | fingerprint }} |
| 67 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" integrity="{{ $styles.Data.Integrity }}" crossorigin="anonymous" media="screen" /> |
| 68 | {{ end }} |
| 69 | |
| 70 | {{ if .Site.Params.rtl }} |
| 71 | {{ if .Site.IsServer }} |
| 72 | {{ $cssOpts := (dict "targetPath" "css/coder-rtl.css" "enableSourceMap" true ) }} |
| 73 | {{ $styles := resources.Get "scss/coder-rtl.scss" | resources.ExecuteAsTemplate "style.coder-rtl.css" . | toCSS $cssOpts }} |
| 74 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" media="screen"> |
| 75 | {{ else }} |
| 76 | {{ $cssOpts := (dict "targetPath" "css/coder-rtl.css" ) }} |
| 77 | {{ $styles := resources.Get "scss/coder-rtl.scss" | resources.ExecuteAsTemplate "style.coder-rtl.css" . | toCSS $cssOpts | minify | fingerprint }} |
| 78 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" integrity="{{ $styles.Data.Integrity }}" crossorigin="anonymous" media="screen" /> |
| 79 | {{ end }} |
| 80 | {{ end }} |
| 81 | |
| 82 | {{ if or (eq .Site.Params.colorScheme "auto") (eq .Site.Params.colorScheme "dark") }} |
| 83 | {{ if .Site.IsServer }} |
| 84 | {{ $cssOpts := (dict "targetPath" "css/coder-dark.css" "enableSourceMap" true ) }} |
| 85 | {{ $styles := resources.Get "scss/coder-dark.scss" | resources.ExecuteAsTemplate "style.coder-dark.css" . | toCSS $cssOpts }} |
| 86 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" media="screen"> |
| 87 | {{ else }} |
| 88 | {{ $cssOpts := (dict "targetPath" "css/coder-dark.css" ) }} |
| 89 | {{ $styles := resources.Get "scss/coder-dark.scss" | resources.ExecuteAsTemplate "style.coder-dark.css" . | toCSS $cssOpts | minify | fingerprint }} |
| 90 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" integrity="{{ $styles.Data.Integrity }}" crossorigin="anonymous" media="screen" /> |
| 91 | {{ end }} |
| 92 | {{ end }} |
| 93 | |
| 94 | {{ range .Site.Params.customCSS }} |
| 95 | <link rel="stylesheet" href="{{ . | relURL }}" /> |
| 96 | {{ end }} |
| 97 | |
| 98 | {{ range .Site.Params.customSCSS }} |
| 99 | {{/* We don't change the targetPath to because it's transparent to users */}} |
| 100 | {{ if $.Site.IsServer }} |
| 101 | {{ $cssOpts := (dict "enableSourceMap" true ) }} |
| 102 | {{ $styles := resources.Get . | toCSS $cssOpts }} |
| 103 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" media="screen"> |
| 104 | {{ else }} |
| 105 | {{ $styles := resources.Get . | toCSS | minify | fingerprint }} |
| 106 | <link rel="stylesheet" href="{{ $styles.RelPermalink }}" integrity="{{ $styles.Data.Integrity }}" crossorigin="anonymous" media="screen" /> |
| 107 | {{ end }} |
| 108 | {{ end }} |
| 109 | |
| 110 | <link rel="icon" type="image/png" href="{{ .Site.Params.favicon_32 | default "/images/favicon-32x32.png" | relURL }}" sizes="32x32"> |
| 111 | <link rel="icon" type="image/png" href="{{ .Site.Params.favicon_16 | default "/images/favicon-16x16.png" | relURL }}" sizes="16x16"> |
| 112 | |
| 113 | <link rel="apple-touch-icon" href="{{ .Site.Params.touchicon | default "/images/apple-touch-icon.png" | relURL }}"> |
| 114 | <link rel="apple-touch-icon" sizes="180x180" href="{{ .Site.Params.touchicon | default "/images/apple-touch-icon.png" | relURL }}"> |
| 115 | |
| 116 | {{ range .AlternativeOutputFormats -}} |
| 117 | {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .RelPermalink $.Site.Title | safeHTML }} |
| 118 | {{ end -}} |
| 119 | |
| 120 | {{ if .Site.Params.enableTwemoji }} |
| 121 | <script defer src="https://twemoji.maxcdn.com/v/13.0.2/twemoji.min.js" |
| 122 | integrity="sha384-wyB/MspSJ/r2bT2kCj44qtsYRYlpzO2oAPhRj5myrWD63dt6qWv4x8AZe7Fl3K3b" crossorigin="anonymous"></script> |
| 123 | {{ end }} |
| 124 | |
| 125 | {{ hugo.Generator }} |
| 126 | </head> |
| 127 | |
| 128 | {{ $csClass := "colorscheme-light" }} |
| 129 | {{ if eq .Site.Params.colorScheme "dark" }} |
| 130 | {{ $csClass = "colorscheme-dark" }} |
| 131 | {{ else if eq .Site.Params.colorScheme "auto" }} |
| 132 | {{ $csClass = "colorscheme-auto" }} |
| 133 | {{ end }} |
| 134 | <body class="preload-transitions {{ $csClass }}{{ if .Site.Params.rtl }} rtl{{ end }}" |
| 135 | onload="{{ if .Site.Params.enableTwemoji }} twemoji.parse(document.body); {{ end }}" |
| 136 | > |
| 137 | <!-- <div id=fireworksContainer style="position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 2; pointer-events: none;"></div> --> |
| 138 | <!-- |
| 139 | <div id="snow" style="position: absolute; top: 0; left: 0; height: 100vh; width: 100vw; --s: 10s; --w: 50vw; --d: 0s;"></div> |
| 140 | --> |
| 141 | {{ partial "float" . }} |
| 142 | <main class="wrapper"> |
| 143 | {{ partial "header.html" . }} |
| 144 | |
| 145 | <div class="content" style="z-index: 3;"> |
| 146 | {{ block "content" . }}{{ end }} |
| 147 | </div> |
| 148 | |
| 149 | {{ partial "footer.html" . }} |
| 150 | </main> |
| 151 | |
| 152 | {{ if .Site.IsServer }} |
| 153 | {{ $script := resources.Get "js/coder.js" }} |
| 154 | <script src="{{ $script.RelPermalink }}"></script> |
| 155 | {{ else }} |
| 156 | {{ $script := resources.Get "js/coder.js" | minify | fingerprint }} |
| 157 | <script src="{{ $script.RelPermalink }}" integrity="{{ $script.Data.Integrity }}"></script> |
| 158 | {{ end }} |
| 159 | |
| 160 | {{ range .Site.Params.customJS }} |
| 161 | <script src="{{ . | relURL }}"></script> |
| 162 | {{ end }} |
| 163 | |
| 164 | {{ template "_internal/google_analytics.html" . }} |
| 165 | |
| 166 | {{ if and .Site.Params.fathomAnalytics .Site.Params.fathomAnalytics.siteID }} |
| 167 | {{- partial "analytics/fathom" . -}} |
| 168 | {{ end }} |
| 169 | |
| 170 | {{ if and .Site.Params.plausibleAnalytics .Site.Params.plausibleAnalytics.domain }} |
| 171 | {{- partial "analytics/plausible" . -}} |
| 172 | {{ end }} |
| 173 | |
| 174 | {{ if and .Site.Params.goatCounter .Site.Params.goatCounter.code }} |
| 175 | {{- partial "analytics/goatcounter" . -}} |
| 176 | {{ end }} |
| 177 | |
| 178 | {{ if and .Site.Params.cloudflare .Site.Params.cloudflare.token }} |
| 179 | {{- partial "analytics/cloudflare" . -}} |
| 180 | {{ end }} |
| 181 | |
| 182 | {{ if and .Site.Params.matomo .Site.Params.matomo.serverURL }} |
| 183 | {{- partial "analytics/matomo" . -}} |
| 184 | {{ end }} |
| 185 | |
| 186 | {{ if and .Site.Params.googleTagManager .Site.Params.googleTagManager.id }} |
| 187 | {{- partial "analytics/googletagmanager" . -}} |
| 188 | {{ end }} |
| 189 | <!-- {{ if eq .RelPermalink "/" }} |
| 190 | <script src="https://cdn.jsdelivr.net/npm/fireworks-js@latest/dist/fireworks.js"></script> |
| 191 | <script> |
| 192 | const c = document.querySelector("#fireworksContainer") |
| 193 | const f = new Fireworks(c, { |
| 194 | "hue": { |
| 195 | "min": 0, |
| 196 | "max": 345 |
| 197 | }, |
| 198 | "delay": { |
| 199 | "min": 45, |
| 200 | "max": 60 |
| 201 | }, |
| 202 | "rocketsPoint": 27, |
| 203 | "opacity": 0.5, |
| 204 | "speed": 15, |
| 205 | "acceleration": 1.1, |
| 206 | "friction": 0.97, |
| 207 | "gravity": 1.5, |
| 208 | "particles": 150, |
| 209 | "trace": 6, |
| 210 | "explosion": 7, |
| 211 | "autoresize": true, |
| 212 | "brightness": { |
| 213 | "min": 50, |
| 214 | "max": 80, |
| 215 | "decay": { |
| 216 | "min": 0.015, |
| 217 | "max": 0.03 |
| 218 | } |
| 219 | }, |
| 220 | }) |
| 221 | f._randomRocketsPoint = true |
| 222 | f.start() |
| 223 | </script> |
| 224 | {{ end }} --> |
| 225 | <!-- |
| 226 | <script> |
| 227 | function r(min, max) { |
| 228 | return Math.random() * (max - min) + min; |
| 229 | } |
| 230 | |
| 231 | for(const _ of Array(250).fill(0)) { |
| 232 | const el = document.createElement("div"); |
| 233 | el.className = "snow"; |
| 234 | el.style = `--x: ${r(0, 200)}vw; --y: -${r(0, 100)}vh; --d: ${r(-20, 20)}s; --w: ${r(40, 70)}vw; --s: ${r(12, 20)}s;`; |
| 235 | snow.appendChild(el); |
| 236 | } |
| 237 | </script> |
| 238 | --> |
| 239 | </body> |
| 240 | </html> |