nicco.io/src/routes/__layout.svelte

83 lines
1.7 KiB
Svelte
Raw Normal View History

2021-08-02 09:53:08 +02:00
<script lang="ts">
2020-09-28 16:17:53 +02:00
import { onMount } from 'svelte'
2021-08-02 09:53:08 +02:00
import { page } from '$app/stores'
2020-09-28 16:17:53 +02:00
2021-08-02 09:53:08 +02:00
import '../app.css'
2020-07-23 20:30:57 +02:00
2021-08-02 09:53:08 +02:00
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat.js'
dayjs.extend(customParseFormat)
import { scroll } from '$lib/stores'
import Nav from '$lib/components/Nav.svelte'
import Progress from '$lib/components/Progress.svelte'
let wrapper: HTMLDivElement
let main: HTMLDivElement
2020-09-28 16:17:53 +02:00
2020-09-28 16:25:46 +02:00
function resize() {
2020-09-28 16:17:53 +02:00
wrapper.style.height = `${window.innerHeight}px`
2020-09-28 16:25:46 +02:00
}
2020-11-11 22:25:30 +01:00
let last = ''
$: {
const { host, path } = $page
const full = host + path
if (last !== full) {
last = full
if (main) setTimeout(() => (main.scrollTop = 0), 150)
}
}
2021-08-02 09:53:08 +02:00
function updateScroll(e: any) {
2021-02-08 10:56:38 +01:00
const el = e.target
const percentage = el.scrollTop / (el.scrollHeight - el.offsetHeight)
2021-02-08 11:24:03 +01:00
scroll.set(isNaN(percentage) ? 0 : percentage)
2021-02-08 10:56:38 +01:00
}
2020-09-28 16:25:46 +02:00
onMount(() => {
2021-08-02 09:53:08 +02:00
window.addEventListener('resize', resize, false)
main.addEventListener('scroll', updateScroll, false)
2020-09-28 16:25:46 +02:00
resize()
2021-02-08 10:56:38 +01:00
return () => {
2021-08-02 09:53:08 +02:00
window.removeEventListener('resize', resize)
main.removeEventListener('scroll', updateScroll)
2021-02-08 10:56:38 +01:00
}
2020-09-28 16:17:53 +02:00
})
2020-07-23 20:30:57 +02:00
</script>
2021-02-08 10:56:38 +01:00
<div bind:this={wrapper}>
2021-08-02 09:53:08 +02:00
<Nav />
2021-02-08 10:56:38 +01:00
<main bind:this={main}>
<slot />
</main>
2021-02-09 13:54:56 +01:00
{#if $page.path !== '/'}
2021-02-10 11:23:38 +01:00
<Progress />
2021-02-09 13:54:56 +01:00
{/if}
2021-02-08 10:56:38 +01:00
</div>
2020-07-23 20:30:57 +02:00
<style>
2020-07-24 11:10:01 +02:00
div {
display: flex;
flex-direction: row;
2020-09-28 16:17:53 +02:00
height: 100vh;
2020-07-24 11:10:01 +02:00
}
main {
position: relative;
padding: 3em;
margin: 0 auto;
box-sizing: border-box;
flex: 1 0 auto;
overflow: auto;
max-width: calc(100% - 4em);
2020-09-28 16:17:53 +02:00
height: 100%;
2020-07-24 11:10:01 +02:00
}
@media (max-width: 30em) {
main {
2020-09-28 15:24:50 +02:00
padding: 1em;
2020-07-24 11:10:01 +02:00
}
}
2020-07-23 20:30:57 +02:00
</style>