diff --git a/assets/set-theme.js b/assets/set-theme.js new file mode 100644 index 00000000..d07d135b --- /dev/null +++ b/assets/set-theme.js @@ -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(); + } +} \ No newline at end of file diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 95d2182a..d110ffd2 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -1,6 +1,7 @@ - + + @@ -35,69 +36,30 @@ {{- template "_internal/opengraph.html" . }} {{- end }} + {{ $settheme := resources.Get "set-theme.js" | minify }} + + + + - - -
- +
-
+
\ No newline at end of file