Closed Pistonight closed 3 weeks ago
If mdbook-theme in localStorage contains a theme id that's not in the book, an uncaught exception causes theme popup to not function properly
mdbook-theme
--theme
theme/index.hbs
<ul id="theme-list"
id
The root cause is updateThemeSelected() throws if the selected theme is not in the DOM
updateThemeSelected()
I think the cleanest fix is to update get_theme() to return default_theme if the saved theme is invalid
get_theme()
default_theme
// cache the valid theme ids var themeIds = []; themePopup.querySelectorAll('button.theme').forEach(function (el) { themeIds.push(el.id); }); // ... function get_theme() { var theme; try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { } if (theme === null || theme === undefined || !themeIds.includes(theme)) { // <- add this check return default_theme; } else { return theme; } }
Verified that the solution works
No response
mdbook v0.4.40
@ehuss pinging according to the contribution guide. Should I open a PR for this fix?
Seems like a reasonable fix to me, would appreciate a PR!
Problem
If
mdbook-theme
in localStorage contains a theme id that's not in the book, an uncaught exception causes theme popup to not function properlySteps
--theme
, build and serve the bookmdbook-theme
gets set in localStorage (may not be needed?)theme/index.hbs
, find<ul id="theme-list"
and remove/change theid
of the button so that the saved theme is no longer in the listPossible Solution(s)
The root cause is
updateThemeSelected()
throws if the selected theme is not in the DOMI think the cleanest fix is to update
get_theme()
to returndefault_theme
if the saved theme is invalidVerified that the solution works
Notes
No response
Version
mdbook v0.4.40