Skip to content

Commit e0375fa

Browse files
committed
Add themeManager and replace eval-based theme access
Introduce a small JS themeManager in App.razor that bootstraps theme on page load (reads localStorage, parses JSON, and sets documentElement data-theme for dark mode) and exposes save/load helpers. Replace prior eval-based localStorage/document access in NavBar.razor and Home.razor with calls to themeManager.load, and update component logic to derive UI mode/accent color from the returned value. This centralizes theme persistence, avoids using eval, and provides safer parsing and fallbacks.
1 parent 658020f commit e0375fa

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

src/MaIN.InferPage/Components/App.razor

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,39 @@
99
<link href="_content/Microsoft.FluentUI.AspNetCore.Components/css/reboot.css" rel="stylesheet" />
1010
<link rel="stylesheet" href="MaIN.InferPage.styles.css"/>
1111
<HeadOutlet/>
12+
<script>
13+
(function () {
14+
try {
15+
var raw = localStorage.getItem('theme');
16+
if (raw) {
17+
var mode = JSON.parse(raw).mode;
18+
if (mode === 'dark') document.documentElement.setAttribute('data-theme', 'dark');
19+
}
20+
} catch (e) {}
21+
})();
22+
</script>
1223
</head>
1324

1425
<body>
1526
<Routes/>
1627
<script src="_framework/blazor.web.js"></script>
1728
<script src="scroll.js"></script>
1829
<script src="editor.js"></script>
30+
<script>
31+
window.themeManager = {
32+
save: function (theme) { localStorage.setItem('theme', theme); },
33+
load: function () {
34+
try {
35+
var raw = localStorage.getItem('theme');
36+
if (!raw) return '';
37+
var parsed = JSON.parse(raw);
38+
return parsed.mode ? parsed.mode.toLowerCase() : raw.toLowerCase();
39+
} catch (e) {
40+
return '';
41+
}
42+
}
43+
};
44+
</script>
1945
</body>
2046

2147
</html>

src/MaIN.InferPage/Components/Layout/NavBar.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
{
5353
if (firstRender)
5454
{
55-
var stored = await JS.InvokeAsync<string>("eval", "localStorage.getItem('theme') ?? ''");
55+
var stored = await JS.InvokeAsync<string>("themeManager.load");
5656
Mode = stored == "dark" ? DesignThemeModes.Dark : DesignThemeModes.Light;
5757
StateHasChanged();
5858
}

src/MaIN.InferPage/Components/Pages/Home.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@
211211
{
212212
if (firstRender)
213213
{
214-
var theme = await JS.InvokeAsync<string>("eval", "document.body.dataset.theme ?? ''");
214+
var theme = await JS.InvokeAsync<string>("themeManager.load");
215215
_accentColor = (theme == "dark" || theme == "system-dark") ? "#00ffcc" : "#00cca3";
216216
StateHasChanged();
217217
}

0 commit comments

Comments
 (0)