add color theme
This commit is contained in:
parent
c33ab48225
commit
ddb07a651e
6 changed files with 40 additions and 22 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@yusurko/vigil",
|
"name": "@yusurko/vigil",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.1.0-dev40",
|
"version": "0.1.0-dev41",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RiHome2Line } from 'svelte-remixicon';
|
import { RiHome2Line, RiSettings2Line, RiSettingsLine } from 'svelte-remixicon';
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -7,4 +7,7 @@
|
||||||
<li>
|
<li>
|
||||||
<a href="/"><RiHome2Line /> Home</a>
|
<a href="/"><RiHome2Line /> Home</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/settings"><RiSettings2Line /> Settings</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,8 @@ export type ServerHealth = {
|
||||||
post_count: number,
|
post_count: number,
|
||||||
user_count: number,
|
user_count: number,
|
||||||
me: string | null,
|
me: string | null,
|
||||||
csrf_token?: string
|
csrf_token?: string,
|
||||||
|
color_theme?: number
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,21 +3,23 @@ import type { ServerHealth, UserEntry } from "$lib/backend";
|
||||||
|
|
||||||
let health : {
|
let health : {
|
||||||
app_name: string, version: string, post_count: number,
|
app_name: string, version: string, post_count: number,
|
||||||
user_count: number, me: null | UserEntry
|
user_count: number, me: null | UserEntry, color_theme: number
|
||||||
} = $state({
|
} = $state({
|
||||||
app_name: 'app_name',
|
app_name: 'app_name',
|
||||||
version: "?.?",
|
version: "?.?",
|
||||||
post_count: NaN,
|
post_count: NaN,
|
||||||
user_count: NaN,
|
user_count: NaN,
|
||||||
me: null
|
me: null,
|
||||||
|
color_theme: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
export function setHealth ({ name, version, post_count, user_count }: ServerHealth) {
|
export function setHealth ({ name, version, post_count, user_count, color_theme = 0 }: ServerHealth) {
|
||||||
health.app_name = name;
|
health.app_name = name;
|
||||||
health.version = version;
|
health.version = version;
|
||||||
health.post_count = post_count;
|
health.post_count = post_count;
|
||||||
health.user_count = user_count;
|
health.user_count = user_count;
|
||||||
|
health.color_theme = color_theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -50,3 +52,7 @@ export function activeUserCount (): number{
|
||||||
export async function sleep (ms: number): Promise<void> {
|
export async function sleep (ms: number): Promise<void> {
|
||||||
return new Promise(resolve => setTimeout(resolve, ms));
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getColorThemeCode (): number {
|
||||||
|
return health.color_theme;
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { getColorThemeCode } from '$lib/globals.svelte';
|
||||||
import { version } from '$app/environment';
|
import { version } from '$app/environment';
|
||||||
import type { Snippet } from 'svelte';
|
import type { Snippet } from 'svelte';
|
||||||
import type { ServerHealth, UserEntry } from '$lib/backend';
|
import type { ServerHealth, UserEntry } from '$lib/backend';
|
||||||
|
|
@ -17,6 +18,11 @@ let { data, children } : {
|
||||||
let {me} = $derived(data);
|
let {me} = $derived(data);
|
||||||
|
|
||||||
const flash = getFlash(page);
|
const flash = getFlash(page);
|
||||||
|
|
||||||
|
let colorThemeCode = $derived(getColorThemeCode());
|
||||||
|
let colorSchemeCode = $derived(Math.floor(colorThemeCode / 256));
|
||||||
|
let colorScheme = $derived(colorSchemeCode == 1? 'dark': colorSchemeCode == 2? 'light': 'system');
|
||||||
|
let colorThemeCls = $derived(`color-scheme-${colorScheme} color-theme-${colorThemeCode % 256}`);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
|
|
@ -30,23 +36,26 @@ const flash = getFlash(page);
|
||||||
<!-- end SEO tags -->
|
<!-- end SEO tags -->
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<header>
|
<global-wrapper class={colorThemeCls}>
|
||||||
<h1>
|
<header>
|
||||||
<a href="/">{appName()}</a>
|
<h1>
|
||||||
</h1>
|
<a href="/">{appName()}</a>
|
||||||
<!-- .metanav -->
|
</h1>
|
||||||
<MetaNav user={me} />
|
<!-- .metanav -->
|
||||||
</header>
|
<MetaNav user={me} />
|
||||||
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
{#if $flash}
|
{#if $flash}
|
||||||
<FlashMessage message={$flash?.message}/>
|
<FlashMessage message={$flash?.message}/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{@render children()}
|
{@render children()}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<MobileFooter />
|
||||||
|
</global-wrapper>
|
||||||
|
|
||||||
<MobileFooter />
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
header {
|
header {
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ async function loadTopGuilds (event: LoadEvent): Promise<GuildEntry[] | null> {
|
||||||
const respJ = await resp.json();
|
const respJ = await resp.json();
|
||||||
|
|
||||||
const { has: top_guilds } : { has: GuildEntry[] } = respJ;
|
const { has: top_guilds } : { has: GuildEntry[] } = respJ;
|
||||||
console.log('top_guilds is', top_guilds);
|
|
||||||
return top_guilds;
|
return top_guilds;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue