2022-08-06 18:34:03 +05:30
|
|
|
<script lang="ts">
|
2022-08-06 13:26:25 +05:30
|
|
|
import ThemeToggle from "./ThemeToggle.svelte";
|
2022-08-06 18:34:03 +05:30
|
|
|
import { page } from "$app/stores";
|
2023-01-05 22:42:43 +05:30
|
|
|
import { slide } from "svelte/transition";
|
|
|
|
import { quintOut } from 'svelte/easing';
|
2022-08-06 18:34:03 +05:30
|
|
|
|
|
|
|
$: currentPage = $page.url.pathname;
|
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
let showMenuButton = false;
|
|
|
|
|
|
|
|
let innerWidth: number = 0;
|
|
|
|
|
|
|
|
$: showMenuButton = innerWidth < 1030;
|
|
|
|
|
|
|
|
let menuOpen = false;
|
|
|
|
|
|
|
|
$: menuOpen = innerWidth > 1030;
|
|
|
|
|
2023-01-05 22:42:43 +05:30
|
|
|
$: menuOpenMobile = innerWidth < 1030 && menuOpen;
|
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
let showThemeToggle: boolean = true;
|
|
|
|
|
|
|
|
const toggleMenu = () => {
|
|
|
|
menuOpen = !menuOpen;
|
|
|
|
};
|
|
|
|
|
|
|
|
const handleNavigation = () => {
|
|
|
|
if (showMenuButton) {
|
|
|
|
menuOpen = false;
|
|
|
|
} else {
|
|
|
|
menuOpen = true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2022-08-06 18:34:03 +05:30
|
|
|
const menus = [
|
2022-09-10 21:28:19 +05:30
|
|
|
{ name: "Instances", url: "/instances" },
|
2022-08-08 10:50:03 +05:30
|
|
|
{ name: "Donate", url: "/donate" },
|
|
|
|
{ name: "Contact us", url: "/contact" },
|
|
|
|
{ name: "Our team", url: "/team" },
|
|
|
|
{ name: "Timeline", url: "/timeline" },
|
2022-12-30 22:32:49 +05:30
|
|
|
{ name: "Blog", url: "/blog" },
|
2022-08-08 10:50:03 +05:30
|
|
|
{ name: "Legal", url: "/legal" },
|
2022-12-27 20:58:47 +05:30
|
|
|
{
|
|
|
|
name: "Status",
|
|
|
|
url: "https://status.projectsegfau.lt/",
|
|
|
|
external: true
|
|
|
|
}
|
2022-08-08 10:50:03 +05:30
|
|
|
];
|
2022-07-27 22:15:53 +05:30
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
$: if (typeof Window === "undefined") {
|
|
|
|
menuOpen = true;
|
|
|
|
showMenuButton = false;
|
|
|
|
showThemeToggle = false;
|
|
|
|
}
|
|
|
|
</script>
|
2022-07-27 22:20:48 +05:30
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
<svelte:window bind:innerWidth />
|
2022-07-27 22:20:48 +05:30
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
<nav
|
2023-01-05 22:42:43 +05:30
|
|
|
class="bg-primary {menuOpenMobile ? "" : "border-b border-b-solid border-b-grey"} flex p-2 flex-col justify-between nav:(flex-row items-center)"
|
|
|
|
class:hasJSNav={typeof Window !== "undefined"}
|
2022-12-27 20:58:47 +05:30
|
|
|
>
|
|
|
|
<div class="flex flex-row items-center justify-between">
|
2022-10-01 18:41:54 +05:30
|
|
|
<a
|
2022-12-27 20:58:47 +05:30
|
|
|
class="flex items-center decoration-none text-text gap-2 transition-opacity duration-250 hover:opacity-80"
|
|
|
|
href="/"
|
2022-10-01 18:41:54 +05:30
|
|
|
>
|
2022-12-27 20:58:47 +05:30
|
|
|
<img
|
|
|
|
src="/logo.png"
|
|
|
|
alt="Project Segfault logo"
|
|
|
|
class="h-7"
|
|
|
|
/>
|
|
|
|
<span>Project Segfault</span>
|
2022-08-04 21:20:02 +05:30
|
|
|
</a>
|
2022-12-27 20:58:47 +05:30
|
|
|
|
|
|
|
{#if showMenuButton}
|
|
|
|
<button
|
|
|
|
on:click={toggleMenu}
|
2023-01-05 22:42:43 +05:30
|
|
|
class="{menuOpen ? "i-ic:outline-close" : "i-ic:outline-menu"} h-4 w-4 cursor-pointer mr-2"
|
2022-12-27 20:58:47 +05:30
|
|
|
/>
|
|
|
|
{/if}
|
2022-07-27 22:20:48 +05:30
|
|
|
</div>
|
2022-06-18 00:22:07 +05:30
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
{#if menuOpen}
|
|
|
|
<div
|
2023-01-01 00:54:03 +05:30
|
|
|
class="links"
|
|
|
|
class:hasJS={typeof Window !== "undefined"}
|
|
|
|
class:noJS={typeof Window === "undefined"}
|
2023-01-05 22:42:43 +05:30
|
|
|
transition:slide="{{duration: 300, easing: quintOut }}"
|
2022-12-27 20:58:47 +05:30
|
|
|
>
|
|
|
|
{#each menus as { url, name, external }}
|
|
|
|
<a
|
|
|
|
class:active={url !== "/"
|
|
|
|
? currentPage.match(url)
|
|
|
|
: url === currentPage}
|
|
|
|
href={url}
|
|
|
|
on:click={handleNavigation}
|
|
|
|
>{#if external}
|
|
|
|
<div
|
2023-01-05 22:42:43 +05:30
|
|
|
class="i-ic:outline-open-in-new mr-2 h-4 w-4"
|
2022-12-27 20:58:47 +05:30
|
|
|
/>
|
|
|
|
{/if}
|
|
|
|
{name}
|
|
|
|
</a>
|
|
|
|
{/each}
|
|
|
|
<a
|
|
|
|
href="https://matrix.to/#/#project-segfault:projectsegfau.lt/"
|
|
|
|
class="icon"
|
|
|
|
>
|
|
|
|
<div class="i-simple-icons:matrix" />
|
|
|
|
<span>Matrix</span>
|
|
|
|
</a>
|
|
|
|
<a
|
|
|
|
href="https://github.com/ProjectSegfault/"
|
|
|
|
class="icon"
|
|
|
|
>
|
|
|
|
<div class="i-simple-icons:github" />
|
|
|
|
<span>GitHub</span>
|
|
|
|
</a>
|
|
|
|
{#if showThemeToggle}
|
|
|
|
<div class="icon">
|
|
|
|
<ThemeToggle />
|
|
|
|
</div>
|
|
|
|
{/if}
|
|
|
|
</div>
|
|
|
|
{/if}
|
|
|
|
</nav>
|
2022-08-24 21:37:30 +05:30
|
|
|
|
2022-06-18 00:22:07 +05:30
|
|
|
<style>
|
2022-08-06 18:34:03 +05:30
|
|
|
a.active {
|
2022-12-27 20:58:47 +05:30
|
|
|
@apply text-accent;
|
2022-07-27 22:15:53 +05:30
|
|
|
}
|
2022-06-18 00:22:07 +05:30
|
|
|
|
2022-06-18 21:56:58 +05:30
|
|
|
.links > * {
|
2023-01-05 18:09:42 +05:30
|
|
|
@apply p-2 cursor-pointer text-text decoration-none transition-color duration-250 text-sm font-500 flex items-center hover\:text-accent;
|
2022-06-18 21:56:58 +05:30
|
|
|
}
|
2022-06-18 14:47:19 +05:30
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
.icon > span {
|
|
|
|
@apply flex nav\:hidden;
|
2022-07-27 22:15:53 +05:30
|
|
|
}
|
|
|
|
|
2022-12-27 20:58:47 +05:30
|
|
|
.icon {
|
|
|
|
@apply flex flex-row items-center gap-2;
|
2022-06-18 21:56:58 +05:30
|
|
|
}
|
2022-06-18 00:22:07 +05:30
|
|
|
|
2023-01-01 00:54:03 +05:30
|
|
|
.hasJS {
|
2023-01-05 22:42:43 +05:30
|
|
|
@apply flex flex-col pt-2 gap-2 fixed bg-primary w-full left-0 top-[2.8rem] p-2 z-50 border-b-solid border-b border-b-grey shadow shadow-secondary;
|
2023-01-01 00:54:03 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
.noJS {
|
|
|
|
@apply grid grid-cols-2 gap-2 pt-2 w-fit;
|
2022-09-10 21:28:19 +05:30
|
|
|
}
|
|
|
|
|
2023-01-05 22:42:43 +05:30
|
|
|
.hasJSNav {
|
|
|
|
@apply sticky top-0 z-50;
|
|
|
|
}
|
|
|
|
|
2023-01-01 00:54:03 +05:30
|
|
|
@media (min-width: 1030px) {
|
|
|
|
.hasJS {
|
|
|
|
flex-direction: row;
|
|
|
|
padding-top: 0;
|
2023-01-05 22:42:43 +05:30
|
|
|
position: initial;
|
|
|
|
background-color: initial;
|
|
|
|
width: initial;
|
|
|
|
left: initial;
|
|
|
|
top: initial;
|
|
|
|
padding: initial;
|
|
|
|
z-index: initial;
|
|
|
|
border-bottom: initial;
|
|
|
|
box-shadow: initial;
|
2023-01-01 00:54:03 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
.noJS {
|
2022-07-27 22:15:53 +05:30
|
|
|
display: flex;
|
2022-09-10 21:28:19 +05:30
|
|
|
flex-direction: row;
|
2022-12-27 20:58:47 +05:30
|
|
|
padding-top: 0;
|
2022-09-10 21:28:19 +05:30
|
|
|
}
|
2022-06-18 21:56:58 +05:30
|
|
|
}
|
2022-07-27 22:20:48 +05:30
|
|
|
</style>
|