vigil/src/lib/MetaNav.svelte

116 lines
2.8 KiB
Svelte
Raw Normal View History

2025-09-12 19:20:30 +02:00
<script lang="ts">
2025-10-23 09:59:18 +02:00
import { RiLoginBoxLine, RiLogoutBoxLine, RiSearch2Line, RiSearchLine, RiSettings3Line, RiShieldStarLine, RiUserLine } from "svelte-remixicon";
2025-09-12 19:20:30 +02:00
import { activePostCount } from "./globals.svelte";
import type { UserEntry } from "./backend";
let { user } : {user: UserEntry} = $props();
2025-10-21 12:07:49 +02:00
let enable_search = $derived(user !== null);
2025-09-12 19:20:30 +02:00
</script>
<div class="metanav">
<ul>
<li>
2025-09-17 14:00:59 +02:00
{#if enable_search}
2025-09-12 19:20:30 +02:00
<form action="/search"
method="POST"
class="mini-search-bar nomobile">
<!-- csrf_token() -->
2025-10-21 12:07:49 +02:00
<input type="search" name="q" placeholder="Search among {activePostCount()} posts" />
2025-09-12 19:20:30 +02:00
<button type="submit">Search</button>
</form>
<a href="/search" aria-label="Search" title="Search" class="mobileonly">
<RiSearchLine />
</a>
2025-09-17 14:00:59 +02:00
{:else}
<div style="flex:1"></div>
{/if}
2025-09-12 19:20:30 +02:00
</li>
{#if user}
<li>
<div class="header-username nomobile">
2025-09-14 16:05:35 +02:00
<span><a href="/@{user.username}">@{user.username}</a></span>
<span>{user.karma || 0} karma</span>
2025-09-12 19:20:30 +02:00
</div>
2025-10-23 09:59:18 +02:00
<a class="mobileonly" href="/@{user.username}">
<RiUserLine />
</a>
</li>
{#if user.badges && user.badges.indexOf("administrator") >= 0}
<li>
<a href="/admin/">
<RiShieldStarLine />
</a>
2025-09-12 19:20:30 +02:00
</li>
2025-10-23 09:59:18 +02:00
{/if}
2025-09-12 19:20:30 +02:00
<li><a href="/logout" aria-label="Log out" title="Log out"><RiLogoutBoxLine /></a></li>
{:else}
<li><a href="/login" aria-label="Log in" title="Log in"><RiLoginBoxLine /></a></li>
{/if}
</ul>
</div>
<style>
.metanav {
align-self: flex-end;
font-size: 1.5em;
margin: auto;
margin-inline-start: 2em;
}
.metanav ul {
list-style: none;
padding: 0;
margin: 0;
}
.metanav ul > li {
margin: 0 6px;
}
.metanav ul,.metanav ul > li {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
}
.metanav, .metanav > ul,.metanav > ul > li:has(.mini-search-bar) {
flex: 1;
}
.metanav .header-username {
display: flex;
flex-direction: column;
color: var(--text-primary);
font-size: .6em;
justify-content: flex-start;
}
.mini-search-bar {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
flex: 1;
font-size: 1.2rem;
}.mini-search-bar [type="search"] {
flex: 1;
}
.mini-search-bar [type="submit"]{
height: 0;
width: 0;
padding: 0;
margin: 0;
border-radius: 0;
opacity: 0;
overflow: hidden;
}
2025-10-21 12:07:49 +02:00
2025-09-12 19:20:30 +02:00
</style>