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

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