diff --git a/src/app.d.ts b/src/app.d.ts index 9cbf1c5..2adaf08 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,10 +1,15 @@ /// +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 {} - // interface Platform {} - // interface Session {} - // interface Stuff {} +declare global { + declare namespace App { + // interface Platform {} + // interface Session {} + interface Stuff { + scope?: Scope + } + } } diff --git a/src/lib/components/frontpage/RequirementLink.svelte b/src/lib/components/frontpage/RequirementLink.svelte index ef64a08..8c8904d 100644 --- a/src/lib/components/frontpage/RequirementLink.svelte +++ b/src/lib/components/frontpage/RequirementLink.svelte @@ -9,6 +9,7 @@ import EntryProgress from "../layout/EntryProgress.svelte"; import EntryProgressRow from "../layout/EntryProgressRow.svelte"; import EntryStatusIcon from "../layout/EntryStatusIcon.svelte"; +import EntryStatusLine from "../layout/EntryStatusLine.svelte"; import Icon from "../layout/Icon.svelte"; export let requirement: StandaloneRequirement @@ -26,6 +27,7 @@ {requirement.name} {#if !compact} + {requirement.description} {/if} diff --git a/src/lib/components/frontpage/SprintLink.svelte b/src/lib/components/frontpage/SprintLink.svelte index 5b7a2ba..5212ae4 100644 --- a/src/lib/components/frontpage/SprintLink.svelte +++ b/src/lib/components/frontpage/SprintLink.svelte @@ -50,9 +50,10 @@ import Status from "$lib/models/status"; break; } case "requirements": { + // Completed, failed or dropped should fix. aggregate = calculateAggregate(sprint.requirements.map(r => ( - r.status >= Status.Completed - ? r.stats.map(s => ({...s, acquired: s.required})) + r.status >= Status.Completed + ? r.stats.map(s => ({...s, acquired: Math.max(s.required, s.acquired)})) : r.stats )).flat()); break; diff --git a/src/lib/components/layout/EntryStatusLine.svelte b/src/lib/components/layout/EntryStatusLine.svelte new file mode 100644 index 0000000..749eb63 --- /dev/null +++ b/src/lib/components/layout/EntryStatusLine.svelte @@ -0,0 +1,62 @@ + + +
+ + + {statusText} + +
+ + diff --git a/src/lib/models/scope.ts b/src/lib/models/scope.ts index 9182423..2cf073c 100644 --- a/src/lib/models/scope.ts +++ b/src/lib/models/scope.ts @@ -1,7 +1,9 @@ import type { ProjectEntry } from "./project"; +import type Stat from "./stat"; export default interface Scope extends ScopeEntry { activeProjects: ProjectEntry[] + stats: Stat[] } export interface ScopeEntry { diff --git a/src/routes/[scope].json.ts b/src/routes/[scope].json.ts new file mode 100644 index 0000000..ba0e393 --- /dev/null +++ b/src/routes/[scope].json.ts @@ -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"}, +] \ No newline at end of file diff --git a/src/routes/[scope]/__layout.svelte b/src/routes/[scope]/__layout.svelte new file mode 100644 index 0000000..d707e8f --- /dev/null +++ b/src/routes/[scope]/__layout.svelte @@ -0,0 +1,32 @@ + + + + +

{scope.name}

+ + \ No newline at end of file diff --git a/src/routes/[scope]/index.svelte b/src/routes/[scope]/index.svelte new file mode 100644 index 0000000..8848950 --- /dev/null +++ b/src/routes/[scope]/index.svelte @@ -0,0 +1,20 @@ + + + + +

{$page.stuff.scope.name}

\ No newline at end of file