Skip to content

Commit 82186aa

Browse files
committed
Add theme customizer
1 parent 8fba6dc commit 82186aa

3 files changed

Lines changed: 27 additions & 8 deletions

File tree

src/components/Navbar.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable jsx-a11y/anchor-is-valid */
2-
import React, { useState, useEffect } from "react";
2+
import React, { useState, useEffect, Suspense, lazy } from "react";
33
import { useTranslation } from "react-i18next";
44
import { Link } from "react-router-dom";
55
import { addResource } from "@abstractplay/gameslib";
@@ -9,6 +9,9 @@ import logoDark from "../assets/AbstractPlayLogo-dark.svg";
99
import LogInOutButton from "./LogInOutButton";
1010
import { useStorageState } from "react-use-storage-state";
1111
import { useStore } from "../stores";
12+
import Spinner from "./Spinner";
13+
14+
const ThemeCustomizer = lazy(() => import("./ThemeCustomizer"));
1215

1316
function Navbar(props) {
1417
const [loggedin, loggedinSetter] = useState(false);
@@ -21,6 +24,7 @@ function Navbar(props) {
2124
const [colorMode, colorModeSetter] = useStorageState("color-mode", "light");
2225
const [storedInvis, setStoredInvis] = useStorageState("invisible", false);
2326
const { t, i18n } = useTranslation();
27+
const [showThemeModal, setShowThemeModal] = useState(false);
2428
addResource(i18n.language);
2529

2630
const closeBurger = () => {
@@ -304,12 +308,24 @@ function Navbar(props) {
304308
>
305309
Toggle Dark Mode
306310
</button>
311+
<button
312+
className="button is-small apButtonNeutral ml-2"
313+
aria-label="Customize Theme"
314+
onClick={() => setShowThemeModal(true)}
315+
>
316+
Customize Theme
317+
</button>
307318
</div>
308319
<div className="navbar-item tourSettings">
309320
<LogInOutButton closeBurger={closeBurger} />
310321
</div>
311322
</div>
312323
</div>
324+
<Suspense fallback={<Spinner />}>
325+
{showThemeModal ? (
326+
<ThemeCustomizer show={showThemeModal} handleClose={() => setShowThemeModal(false)} />
327+
) : null}
328+
</Suspense>
313329
</nav>
314330
);
315331
}

src/index.css

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
--tag-background-color: #f5f5f5;
1717
--dropshadow-target-start: rgba(10,10,10,0.1);
1818
--dropshadow-target-end: rgba(10,10,10,0.02);
19-
--svg-label-color: black;
20-
--svg-annotation-color: black;
21-
--svg-gridline-color: black;
2219
--svg-default-fill: black;
2320
--svg-volcano-caps: black;
2421

2522
/* Currently unused */
2623
/* --main-fg-color-lighter: #c3d6f1; */
2724
/* --secondary-color-1-bg: #ffe8e0; */
2825
/* --secondary-color-2-lighter: #e6f2f2; */
26+
/* --svg-label-color: black; */
27+
/* --svg-annotation-color: black; */
28+
/* --svg-gridline-color: black; */
2929
}
3030

3131
:root[color-mode="dark"] {
@@ -43,13 +43,15 @@
4343
--secondary-color-3-lighter: #009fbf;
4444
--secondary-color-3-bg: #333;
4545
--tag-background-color: #444;
46-
--svg-label-color: var(--main-fg-color);
47-
--svg-annotation-color: var(--secondary-color-2);
48-
--svg-gridline-color: var(--main-font-color);
4946
--svg-default-fill: var(--main-font-color);
5047
--svg-volcano-caps: #888;
5148
--dropshadow-target-start: rgba(245,245,245,0.1);
5249
--dropshadow-target-end: rgba(245,245,245,0.02);
50+
51+
/* Currently unused */
52+
/* --svg-label-color: var(--main-fg-color); */
53+
/* --svg-annotation-color: var(--secondary-color-2); */
54+
/* --svg-gridline-color: var(--main-font-color); */
5355
}
5456

5557
/* Any element with the class "light--hidden" will be hidden when the site is set to Light Mode */
@@ -1196,4 +1198,3 @@ span.hardTime::after {
11961198
:root[color-mode="dark"] svg#_btnBar symbol.aprender-button-0ca07818d5ffc > rect {
11971199
fill: #999999;
11981200
}
1199-

src/pages/Skeleton.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import en from "javascript-time-ago/locale/en.json";
3939
import TimeAgo from "javascript-time-ago";
4040
import { useStorageState } from "react-use-storage-state";
4141
import newsData from "../assets/news.json";
42+
import ThemeApplicator from "../components/ThemeApplicator";
4243
import MyWebSocket from "../components/MyWebSocket";
4344
import { useStore } from "../stores";
4445

@@ -222,6 +223,7 @@ function Bones(props) {
222223
</Helmet>
223224
<ToastContainer />
224225
<Router>
226+
<ThemeApplicator />
225227
<MyWebSocket />
226228
<Navbar />
227229
<section className="section" id="main">

0 commit comments

Comments
 (0)