Gisle Aune
3 years ago
8 changed files with 209 additions and 7 deletions
-
11src/app.d.ts
-
2src/lib/components/frontpage/RequirementLink.svelte
-
3src/lib/components/frontpage/SprintLink.svelte
-
62src/lib/components/layout/EntryStatusLine.svelte
-
2src/lib/models/scope.ts
-
78src/routes/[scope].json.ts
-
32src/routes/[scope]/__layout.svelte
-
20src/routes/[scope]/index.svelte
@ -1,10 +1,15 @@ |
|||
/// <reference types="@sveltejs/kit" />
|
|||
|
|||
import type Scope from "$lib/models/scope"; |
|||
|
|||
// See https://kit.svelte.dev/docs/types#the-app-namespace
|
|||
// for information about these interfaces
|
|||
declare namespace App { |
|||
// interface Locals {}
|
|||
declare global { |
|||
declare namespace App { |
|||
// interface Platform {}
|
|||
// interface Session {}
|
|||
// interface Stuff {}
|
|||
interface Stuff { |
|||
scope?: Scope |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,62 @@ |
|||
<script lang="ts"> |
|||
import type Status from "$lib/models/status"; |
|||
import type { IconName } from "./Icon.svelte"; |
|||
import Icon from "./Icon.svelte"; |
|||
import StatusColor from "./StatusColor.svelte"; |
|||
export let status: Status |
|||
|
|||
let statusText: string = "Unknown"; |
|||
let statusIcon: IconName = "question"; |
|||
|
|||
$: switch (status) { |
|||
case 0: |
|||
statusIcon = "hourglass"; |
|||
statusText = "Blocked"; |
|||
break; |
|||
case 1: |
|||
statusIcon = "lightbulb"; |
|||
statusText = "Available"; |
|||
break; |
|||
case 2: |
|||
statusIcon = "calendar"; |
|||
statusText = "Background"; |
|||
break; |
|||
case 3: |
|||
statusIcon = "spinner"; |
|||
statusText = "Active"; |
|||
break; |
|||
case 4: |
|||
statusIcon = "check"; |
|||
statusText = "Completed"; |
|||
break; |
|||
case 5: |
|||
statusIcon = "times"; |
|||
statusText = "Failed"; |
|||
break; |
|||
case 6: |
|||
statusIcon = "times"; |
|||
statusText = "Dropped"; |
|||
break; |
|||
} |
|||
</script> |
|||
|
|||
<div class="entry-status"> |
|||
<StatusColor status={status}> |
|||
<Icon name={statusIcon} /> |
|||
<span>{statusText}</span> |
|||
</StatusColor> |
|||
</div> |
|||
|
|||
<style lang="scss"> |
|||
@import "../colors.sass"; |
|||
|
|||
div.entry-status { |
|||
font-size: 0.75em; |
|||
font-weight: 600; |
|||
opacity: $opacity-entry5; |
|||
|
|||
:global(.icon) { |
|||
font-size: 0.75em; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,78 @@ |
|||
import type { RequestHandler } from "@sveltejs/kit" |
|||
import Status from "$lib/models/status" |
|||
import type Scope from "$lib/models/scope" |
|||
|
|||
export const get: RequestHandler = async({params}) => { |
|||
const scopeId = parseInt(params.scope); |
|||
const scope = scopes.find(s => s.id === scopeId); |
|||
if (scope === null) { |
|||
return { |
|||
status: 404, |
|||
headers: { |
|||
"Content-Type": "application/json" |
|||
}, |
|||
body: JSON.stringify({ |
|||
message: "Scope not found", |
|||
}), |
|||
} |
|||
} |
|||
|
|||
return { |
|||
status: 200, |
|||
headers: { |
|||
"Content-Type": "application/json" |
|||
}, |
|||
body: JSON.stringify({ |
|||
scope |
|||
}), |
|||
} |
|||
} |
|||
|
|||
const scopes: Scope[] = [ |
|||
{ |
|||
id: 1, name: "3D Modeling", abbreviation: "3D", |
|||
stats: [ |
|||
{id: 101, name: "Asset", weight: 0.1, description: "Some description"}, |
|||
{id: 102, name: "Tweak", weight: 0.2, description: "Some description"}, |
|||
{ |
|||
id: 103, name: "Complexity", weight: 1, description: "Some description", |
|||
allowedAmounts: { |
|||
"Basic": 1, |
|||
"Medium": 3, |
|||
"Complex": 6, |
|||
"Excessive": 12, |
|||
} |
|||
}, |
|||
{id: 104, name: "Hard Surface", weight: 0.4, description: "Some description"}, |
|||
{id: 105, name: "UV Mapping", weight: 0.2, description: "Some description"}, |
|||
{id: 106, name: "Third-Party Asset", weight: 0.1, description: "Some description"}, |
|||
{id: 107, name: "Material", weight: 0.1, description: "Some description"}, |
|||
], |
|||
activeProjects: [ |
|||
{id: 1001, name: "3D Maps: Proving the Concept", status: Status.Active}, |
|||
{id: 1002, name: "Redrock HQ", status: Status.Active}, |
|||
{id: 1003, name: "Tutorial: Realistic Environments", status: Status.Background}, |
|||
] |
|||
}, |
|||
{ |
|||
id: 2, name: "Roleplay", abbreviation: "RP", |
|||
stats: [ |
|||
{id: 201, name: "Story", weight: 3, description: "Some description"}, |
|||
{id: 202, name: "Story Word", weight: 0.002, description: "Some description"}, |
|||
{id: 203, name: "Worldbuilding", weight: 0.50, description: "Some description"}, |
|||
{id: 204, name: "Characterbuilding", weight: 0.50, description: "Some description"}, |
|||
{id: 205, name: "Note", weight: 1, description: "Some description"}, |
|||
{id: 206, name: "Wiki Section", weight: 1, description: "Some description"}, |
|||
{id: 207, name: "Wiki Research", weight: 0.5, description: "Some description"}, |
|||
{id: 208, name: "Wiki Complexity", weight: 0.5, description: "Some description"}, |
|||
], |
|||
activeProjects: [ |
|||
{id: 2001, name: "Ilyna T'Rea", status: Status.Active}, |
|||
{id: 2002, name: "Renala T'Iavay", status: Status.Active}, |
|||
{id: 2003, name: "Background Stories", status: Status.Background}, |
|||
] |
|||
}, |
|||
//{id: 3, name: "Minecraft", abbreviation: "MC"},
|
|||
//{id: 4, name: "Coding", abbreviation: "CODE"},
|
|||
//{id: 5, name: "System Administration", abbreviation: "SA"},
|
|||
] |
@ -0,0 +1,32 @@ |
|||
<script lang="ts" context="module"> |
|||
import type { Load } from "@sveltejs/kit/types/internal"; |
|||
|
|||
export const load: Load = async({ fetch, params }) => { |
|||
const res = await fetch(`/${params.scope}.json`); |
|||
|
|||
if (res.ok) { |
|||
const data = await res.json(); |
|||
|
|||
return { |
|||
props: { |
|||
...data, |
|||
}, |
|||
stuff: { |
|||
scope: data.scope, |
|||
} |
|||
}; |
|||
} |
|||
|
|||
return; |
|||
} |
|||
</script> |
|||
|
|||
<script lang="ts"> |
|||
import type Scope from "$lib/models/scope"; |
|||
|
|||
export let scope: Scope; |
|||
</script> |
|||
|
|||
<h1>{scope.name}</h1> |
|||
|
|||
<slot></slot> |
@ -0,0 +1,20 @@ |
|||
<script lang="ts" context="module"> |
|||
import type { Load, LoadInput } from "@sveltejs/kit/types/internal"; |
|||
|
|||
export const load: Load = async({ stuff }) => { |
|||
return { |
|||
props: { |
|||
scope: stuff.scope, |
|||
} |
|||
}; |
|||
} |
|||
</script> |
|||
|
|||
<script lang="ts"> |
|||
import type Scope from "$lib/models/scope"; |
|||
import { page } from "$app/stores"; |
|||
|
|||
export let scope: Scope; |
|||
</script> |
|||
|
|||
<h1>{$page.stuff.scope.name}</h1> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue