themes/hugo-coder/layouts/_default/baseof.html

8a208e81377eba5f1b636902925306c66f6fbdd4 · 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>