Skip to content

Commit cb820bc

Browse files
authored
Fix Dark Mode Toggle (#174)
1 parent 73b5b80 commit cb820bc

2 files changed

Lines changed: 21 additions & 6 deletions

File tree

src/TryMudBlazor.Client/Pages/Repl.razor.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,9 @@ private async void UpdateTheme()
282282
await LayoutService.ToggleDarkMode();
283283
string theme = LayoutService.IsDarkMode ? "vs-dark" : "default";
284284
this.JsRuntime.InvokeVoid(Try.Editor.SetTheme, theme);
285+
// LayoutService calls StateHasChanged, we need the updated <style> tags for updateIframeTheme to work
286+
await Task.Yield();
287+
await JsRuntime.InvokeVoidAsync("updateIframeTheme");
285288
}
286289
}
287290
}

src/TryMudBlazor.Client/wwwroot/index.html

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,25 @@
6161
<script src="_content/MudBlazor/MudBlazor.min.js?v=#{CACHE_TOKEN}#"></script>
6262
<script src="editor/main.js?v=#{CACHE_TOKEN}#"></script>
6363
<script type="text/javascript">
64-
window.addEventListener('storage', (e) => {
65-
if (e.key == "userPreferences") {
66-
const mudblazorTheme = parent.document.getElementsByTagName('style')[4];
67-
const iFrameTheme = document.getElementsByTagName('style')[3];
68-
iFrameTheme.innerHTML = mudblazorTheme.innerHTML;
64+
function updateIframeTheme() {
65+
const mudblazorTheme = parent.document.querySelector('.mud-theme-provider') || parent.document.getElementsByTagName('style')[3];
66+
67+
if (mudblazorTheme) {
68+
// Find the iframe
69+
const userPageIframe = parent.document.getElementById('user-page-window');
70+
71+
if (userPageIframe && userPageIframe.contentDocument) {
72+
const iframeDoc = userPageIframe.contentDocument;
73+
const iFrameTheme = iframeDoc.querySelector('.mud-theme-provider') || iframeDoc.getElementsByTagName('style')[2];
74+
75+
if (iFrameTheme) {
76+
iFrameTheme.innerHTML = mudblazorTheme.innerHTML;
77+
}
78+
}
79+
} else {
80+
console.error('Could not find the parent theme element.');
6981
}
70-
});
82+
}
7183
</script>
7284
</body>
7385

0 commit comments

Comments
 (0)