theme: don't include set-theme inline

This commit is contained in:
Aditya Telange 2020-07-20 19:46:12 +05:30
parent d7d5a15da7
commit e6f516da62
2 changed files with 65 additions and 63 deletions

40
assets/set-theme.js Normal file
View File

@ -0,0 +1,40 @@
function setTheme() {
const time = new Date();
const prev = localStorage.getItem('date');
const date = String(time.getMonth() + 1) + '.' + String(time.getDate());
const now = time.getTime();
let sunrise;
let sunset;
function setBodyClass() {
if (now > sunrise && now < sunset) return;
document.body.classList.add('dark');
}
if (date !== prev) {
fetch('https://api.ipgeolocation.io/astronomy?apiKey=5ed37d85103e4defa5df4c5298ed5215')
.then(res => res.json())
.then(data => {
sunrise = data.sunrise.split(':').map(Number);
sunset = data.sunset.split(':').map(Number);
})
.catch(() => {
sunrise = [7, 0];
sunset = [19, 0];
})
.finally(() => {
sunrise = time.setHours(sunrise[0], sunrise[1], 0);
sunset = time.setHours(sunset[0], sunset[1], 0);
setBodyClass();
localStorage.setItem('sunrise', sunrise);
localStorage.setItem('sunset', sunset);
});
localStorage.setItem('date', date);
} else {
sunrise = Number(localStorage.getItem('sunrise'));
sunset = Number(localStorage.getItem('sunset'));
setBodyClass();
}
}

View File

@ -1,6 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{ .Site.LanguageCode }}"> <html lang="{{ .Site.LanguageCode }}">
<head>
<head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@ -35,50 +36,11 @@
{{- template "_internal/opengraph.html" . }} {{- template "_internal/opengraph.html" . }}
{{- end }} {{- end }}
<!-- Script --> <!-- Script -->
<script> {{ $settheme := resources.Get "set-theme.js" | minify }}
function setTheme() { <script src="{{ $settheme.Permalink }}"></script>
const time = new Date(); </head>
const prev = localStorage.getItem('date'); <body class="{{ if eq .Kind `page` }}single{{ else }}list{{ if .IsHome }} home{{ end }}{{ end }}">
const date = String(time.getMonth() + 1) + '.' + String(time.getDate());
const now = time.getTime();
let sunrise;
let sunset;
function setBodyClass() {
if (now > sunrise && now < sunset) return;
document.body.classList.add('dark');
}
if (date !== prev) {
fetch('https://api.ipgeolocation.io/astronomy?apiKey=5ed37d85103e4defa5df4c5298ed5215')
.then(res => res.json())
.then(data => {
sunrise = data.sunrise.split(':').map(Number);
sunset = data.sunset.split(':').map(Number);
})
.catch(() => {
sunrise = [7, 0];
sunset = [19, 0];
})
.finally(() => {
sunrise = time.setHours(sunrise[0], sunrise[1], 0);
sunset = time.setHours(sunset[0], sunset[1], 0);
setBodyClass();
localStorage.setItem('sunrise', sunrise);
localStorage.setItem('sunset', sunset);
});
localStorage.setItem('date', date);
} else {
sunrise = Number(localStorage.getItem('sunrise'));
sunset = Number(localStorage.getItem('sunset'));
setBodyClass();
}
}
</script>
</head>
<body class="{{ if eq .Kind `page` }}single{{ else }}list{{ if .IsHome }} home{{ end }}{{ end }}">
<script> <script>
setTheme(); setTheme();
</script> </script>