9 changed files with 173 additions and 76 deletions
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 12 KiB |
@ -1,41 +1,85 @@ |
|||||||
<!-- https://github.com/barelyhuman/snips/blob/dev/pages/css-loader.md --> |
<!-- https://github.com/barelyhuman/snips/blob/dev/pages/css-loader.md --> |
||||||
<div class="loader"></div> |
<!DOCTYPE html> |
||||||
<style> |
<html lang="en"> |
||||||
.loader { |
<head> |
||||||
display: block; |
<style> |
||||||
position: fixed; |
body { |
||||||
z-index: 1031; |
background-color: #fff; |
||||||
top: 50%; |
} |
||||||
left: 50%; |
|
||||||
transform: translate(-50%, -50%); |
.dark { |
||||||
width: 36px; |
background-color: #1a1d20; |
||||||
height: 36px; |
} |
||||||
box-sizing: border-box; |
|
||||||
border: solid 2px transparent; |
.loader { |
||||||
border-top-color: #000; |
display: block; |
||||||
border-left-color: #000; |
position: fixed; |
||||||
border-bottom-color: #efefef; |
z-index: 1031; |
||||||
border-right-color: #efefef; |
top: 50%; |
||||||
border-radius: 50%; |
left: 50%; |
||||||
-webkit-animation: loader 400ms linear infinite; |
transform: translate(-50%, -50%); |
||||||
animation: loader 400ms linear infinite; |
width: 36px; |
||||||
} |
height: 36px; |
||||||
|
box-sizing: border-box; |
||||||
@-webkit-keyframes loader { |
border: solid 2px transparent; |
||||||
0% { |
border-top-color: #000; |
||||||
-webkit-transform: translate(-50%, -50%) rotate(0deg); |
border-left-color: #000; |
||||||
} |
border-bottom-color: #efefef; |
||||||
100% { |
border-right-color: #efefef; |
||||||
-webkit-transform: translate(-50%, -50%) rotate(360deg); |
border-radius: 50%; |
||||||
} |
-webkit-animation: loader 400ms linear infinite; |
||||||
} |
animation: loader 400ms linear infinite; |
||||||
|
} |
||||||
@keyframes loader { |
|
||||||
0% { |
.dark .loader { |
||||||
transform: translate(-50%, -50%) rotate(0deg); |
border-top-color: #fff !important; |
||||||
} |
border-left-color: #fff !important; |
||||||
100% { |
border-bottom-color: #444 !important; |
||||||
transform: translate(-50%, -50%) rotate(360deg); |
border-right-color: #444 !important; |
||||||
} |
} |
||||||
} |
|
||||||
</style> |
@-webkit-keyframes loader { |
||||||
|
0% { |
||||||
|
-webkit-transform: translate(-50%, -50%) rotate(0deg); |
||||||
|
} |
||||||
|
100% { |
||||||
|
-webkit-transform: translate(-50%, -50%) rotate(360deg); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@keyframes loader { |
||||||
|
0% { |
||||||
|
transform: translate(-50%, -50%) rotate(0deg); |
||||||
|
} |
||||||
|
100% { |
||||||
|
transform: translate(-50%, -50%) rotate(360deg); |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div class="loader"></div> |
||||||
|
<script> |
||||||
|
let css = "light"; |
||||||
|
let state = null; |
||||||
|
|
||||||
|
const json = localStorage.getItem("state"); |
||||||
|
if (json !== null) { |
||||||
|
state = JSON.parse(json).colorMode; |
||||||
|
} |
||||||
|
|
||||||
|
if (state === null || state === "auto") { |
||||||
|
const preferDark = window.matchMedia('(prefers-color-scheme: dark)').matches; |
||||||
|
if (preferDark) { |
||||||
|
css = "dark"; |
||||||
|
} |
||||||
|
} |
||||||
|
else if (state === "dark") { |
||||||
|
css = "dark"; |
||||||
|
} |
||||||
|
|
||||||
|
const element = document.querySelector("html"); |
||||||
|
element.classList.add(css); |
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
@ -0,0 +1,56 @@ |
|||||||
|
<template> |
||||||
|
<div class="dropup position-fixed corner"> |
||||||
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> |
||||||
|
<template v-if="store.colorMode === 'light'"> |
||||||
|
<IFaSolidSun /> |
||||||
|
</template> |
||||||
|
<template v-else-if="store.colorMode === 'dark'"> |
||||||
|
<IFaSolidMoon /> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<IFaAdjust /> |
||||||
|
</template> |
||||||
|
</a> |
||||||
|
<ul class="dropdown-menu"> |
||||||
|
<li> |
||||||
|
<a class="dropdown-item" :class="store.colorMode === 'light' ? 'active' : ''" @click="store.setColorMode('light')"> |
||||||
|
<IFaSolidSun /> Light |
||||||
|
<IFaCheck v-if="store.colorMode === 'light'" class="font-smaller float-right" /> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a class="dropdown-item" :class="store.colorMode === 'dark' ? 'active' : ''" @click="store.setColorMode('dark')"> |
||||||
|
<IFaSolidMoon /> Dark |
||||||
|
<IFaCheck v-if="store.colorMode === 'dark'" class="font-smaller float-right" /> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<a class="dropdown-item" :class="store.colorMode === 'auto' ? 'active' : ''" @click="store.setColorMode('auto')"> |
||||||
|
<IFaAdjust width="1.3em" /> Auto |
||||||
|
<IFaCheck v-if="store.colorMode === 'auto'" class="font-smaller float-right" /> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.corner { |
||||||
|
right: 10px; |
||||||
|
bottom: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.dropdown-menu { |
||||||
|
min-width: 125px; |
||||||
|
} |
||||||
|
|
||||||
|
.font-smaller { |
||||||
|
font-size: .6rem; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { useStateStore } from "@/stores/stateStore"; |
||||||
|
|
||||||
|
const store = useStateStore(); |
||||||
|
</script> |
@ -1,23 +0,0 @@ |
|||||||
<template> |
|
||||||
<div class="position-fixed corner"> |
|
||||||
<template v-if="store.colorMode === 'dark'"> |
|
||||||
<IFaSolidSun @click="store.toggleColorMode" /> |
|
||||||
</template> |
|
||||||
<template v-else> |
|
||||||
<IFaMoonO @click="store.toggleColorMode" /> |
|
||||||
</template> |
|
||||||
</div> |
|
||||||
</template> |
|
||||||
|
|
||||||
<style scoped> |
|
||||||
.corner { |
|
||||||
right: 10px; |
|
||||||
bottom: 10px; |
|
||||||
} |
|
||||||
</style> |
|
||||||
|
|
||||||
<script setup lang="ts"> |
|
||||||
import { useStateStore } from "@/stores/stateStore"; |
|
||||||
|
|
||||||
const store = useStateStore(); |
|
||||||
</script> |
|
Loading…
Reference in new issue