Skip to content

Commit 7aba414

Browse files
committed
feat: Add error page
1 parent 52e5a08 commit 7aba414

4 files changed

Lines changed: 54 additions & 15 deletions

File tree

src/lib/utils/setTheme.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@ export function setTheme(theme: "light" | "dark") {
22
const cards = document.getElementsByClassName("card");
33
const listGroups = document.getElementsByClassName("list-group");
44
const listGroupAnchors = document.getElementsByClassName("list-group-anchor");
5+
const error = document.getElementsByClassName("error")[0];
6+
const action = theme === "light" ? "remove" : "add";
57

6-
if (theme === "light") {
7-
document.body.classList.remove("dark-mode");
8-
9-
for (const card of cards) card.classList.remove("dark-mode-card");
10-
for (const listGroup of listGroups) listGroup.classList.remove("dark-mode-list-group");
11-
for (const listGroupAnchor of listGroupAnchors) listGroupAnchor.classList.remove("dark-mode-list-group-anchor");
12-
} else {
13-
document.body.classList.add("dark-mode");
8+
document.body.classList[action]("dark-mode");
149

15-
for (const card of cards) card.classList.add("dark-mode-card");
16-
for (const listGroup of listGroups) listGroup.classList.add("dark-mode-list-group");
17-
for (const listGroupAnchor of listGroupAnchors) listGroupAnchor.classList.add("dark-mode-list-group-anchor");
18-
}
10+
for (const card of cards) card.classList[action]("dark-mode-card");
11+
for (const listGroup of listGroups) listGroup.classList[action]("dark-mode-list-group");
12+
for (const listGroupAnchor of listGroupAnchors) listGroupAnchor.classList[action]("dark-mode-list-group-anchor");
13+
14+
error?.classList[action]("dark-mode-error");
1915

2016
localStorage.setItem("theme", theme);
2117
}

src/routes/+error.svelte

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<script lang="ts">
2+
import { page } from "$app/state";
3+
import Header from "../components/Header.svelte";
4+
import Main from "../components/Main.svelte";
5+
</script>
6+
7+
<svelte:head>
8+
<title>{page.status.toString()} | IRT Livemap</title>
9+
</svelte:head>
10+
11+
<Header name="Error" />
12+
<Main>
13+
<div class="error">
14+
<img class="d-inline-block align-center flipped" src="/favicon.png" height="256" alt="Main icon" />
15+
<span class="list-group float-end">{page.error?.message || "Unknown error"}</span>
16+
</div>
17+
</Main>

src/routes/servers/[serverAcro]/+page.server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ export async function load({ fetch, params: { serverAcro }, request: { headers }
1919

2020
console.log(`[${(new Date()).toLocaleString("en-GB")}] ${address} - ${serverAcro}`);
2121

22-
if (!serverObj) return error(404, `Unknown server key "/servers/${serverAcro}"`);
22+
if (!serverObj) return error(404, `Unknown server "${serverAcro}"`);
2323

2424
const dss = await (async () => {
2525
const res = await fetch(
2626
serverObj.url + Feeds.dedicatedServerStats(serverObj.code, DSSExtension.JSON),
2727
{
28-
signal: AbortSignal.timeout(5_000),
28+
signal: AbortSignal.timeout(3_000),
2929
headers: { "User-Agent": USER_AGENT_TEXT }
3030
}
3131
).catch(err => console.log("DSS Fetch error:", err.message));
@@ -45,7 +45,7 @@ export async function load({ fetch, params: { serverAcro }, request: { headers }
4545
const res = await fetch(
4646
serverObj.url + Feeds.dedicatedServerSavegame(serverObj.code, DSSFile.CareerSavegame),
4747
{
48-
signal: AbortSignal.timeout(5_000),
48+
signal: AbortSignal.timeout(3_000),
4949
headers: { "User-Agent": USER_AGENT_TEXT }
5050
}
5151
).catch(err => console.log("CSG Fetch error:", err.message));

static/style.css

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ body {
2424
--bs-list-group-border-color: rgba(255, 255, 255, 0.13);
2525
}
2626

27+
.dark-mode-error > span {
28+
--bs-list-group-color: #fff;
29+
}
30+
2731
.dark-mode-list-group-anchor {
2832
color: #06860a;
2933
}
@@ -108,6 +112,28 @@ main > .container {
108112
height: calc(95vh - 80px);
109113
}
110114

115+
.error {
116+
display: flex;
117+
flex-direction: column;
118+
align-items: center;
119+
}
120+
121+
.error > * {
122+
margin-top: 50px;
123+
margin-bottom: 50px;
124+
}
125+
126+
.error > span {
127+
font-size: x-large;
128+
color: var(--bs-list-group-color);
129+
}
130+
131+
.error > img {
132+
filter: grayscale(100%);
133+
transform: scaleY(-1);
134+
aspect-ratio: 1 / 1;
135+
}
136+
111137
button {
112138
border: none;
113139
background-color: transparent;

0 commit comments

Comments
 (0)