add moderator list, create guild link

This commit is contained in:
Yusur 2026-06-04 11:16:55 +02:00
parent 50c0c7d865
commit 047fc545ae
6 changed files with 57 additions and 7 deletions

View file

@ -1,7 +1,7 @@
{
"name": "@yusurko/vigil",
"private": true,
"version": "0.1.0-dev62",
"version": "0.1.0-dev74",
"type": "module",
"scripts": {
"dev": "vite dev",

View file

@ -4,7 +4,7 @@ let { narrow = false, small = false, children } : { narrow?: boolean, small ?: b
</script>
<div class="centered" class:narrow={narrow} class:small={small}>
{@render children () }
{@render children() }
</div>
<style>

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { RiCompassLine, RiHome2Line, RiSettings2Line, RiShieldStarLine, RiUserLine } from 'svelte-remixicon';
import { RiCompassLine, RiHome2Line, RiSettings2Line, RiShieldStarLine, RiAddBoxLine, RiUserLine } from 'svelte-remixicon';
import MenuLink from './MenuLink.svelte';
let { user = null } = $props();
@ -11,6 +11,9 @@
<MenuLink href="/settings" icon={RiSettings2Line} label="Settings" />
{#if user}
<MenuLink href="/@{user.username}" icon={RiUserLine} label="My profile" />
{#if true}
<MenuLink href="/createguild" icon={RiAddBoxLine} label="Create guild" />
{/if}
{#if user.badges && user.badges.indexOf('administrator') >= 0}
<MenuLink href="/admin/" icon={RiShieldStarLine} label="Administration" />
{/if}

View file

@ -0,0 +1,33 @@
<script lang="ts">
import { RiShieldStarLine } from "svelte-remixicon";
import AsideCard from "./AsideCard.svelte";
import Centered from "./Centered.svelte";
import { getMe } from "./globals.svelte";
import Wip from "./Wip.svelte";
let { guildName, mods } = $props();
let me = getMe();
</script>
{#if me && mods}
{#if mods.banned}
<Centered>Moderator list is hidden because you are banned.</Centered>
{:else if mods.unmoderated}
<Centered>+{guildName} is currently unmoderated</Centered>
{:else}
<AsideCard title={`Moderators of +${guildName}`}>
<ul>
{#each mods.has as mod}
<li>
@{mod.username}
{#if mod.is_owner}
<span><RiShieldStarLine/> <small>Owner</small></span>
{/if}
</li>
{/each}
</ul>
</AsideCard>
{/if}
{/if}

View file

@ -1,12 +1,15 @@
<script lang="ts">
import type { GuildEntry, PostEntry } from "$lib/backend";
import Feed from "$lib/Feed.svelte";
import { getMe } from "$lib/globals.svelte";
import GuildAbout from "$lib/GuildAbout.svelte";
import GuildMenu from "$lib/GuildMenu.svelte";
import ModeratorList from "$lib/ModeratorList.svelte";
import SLayout from "$lib/SLayout.svelte";
let { data } : { data: { guild: GuildEntry , feed: PostEntry[] } } = $props();
let { guild, feed = [] } = $derived(data);
let { data } : { data: { guild: GuildEntry , feed: PostEntry[], mods: any } } = $props();
let { guild, feed = [], mods = null } = $derived(data);
let me = getMe();
</script>
@ -19,5 +22,9 @@
{#snippet right()}
<GuildAbout {guild} />
{#if me}
<ModeratorList guildName={guild.name} {mods} />
{/if}
{/snippet}
</SLayout>

View file

@ -21,11 +21,18 @@ export async function load(event) {
if (guilds[g].name === name) {
guild = guilds[g];
}
}
}
if (!guild) error(404);
return { guild, feed };
let mods = null;
const respMods = await backend.withEvent(event).fetch('guild/@' + encodeURIComponent(name) + '/mods');
if (respMods.status === 200) {
const respModsJ = await respMods.json();
mods = respModsJ;
}
return { guild, feed, mods };
}
catch (e) {
console.error(e);