From 10bb2e57ffed15ddfaea57a7a24609abe09565d2 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Fri, 31 Jul 2020 20:12:34 +0200
Subject: [PATCH] Make Theming framework more robust

---
 src/gui/theming.js      | 34 ++++++++++++++++------------------
 src/js/eventHandlers.js |  1 +
 2 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/src/gui/theming.js b/src/gui/theming.js
index ceb8e641d96..6b0a083578c 100644
--- a/src/gui/theming.js
+++ b/src/gui/theming.js
@@ -5,19 +5,10 @@ App.UI.Theme = (function() {
 	let currentThemeElement = null;
 	let devTheme = null;
 
-	// reload theme on page reload
-	$(document).on(":storyready", () => {
-		if (currentThemeElement === null) {
-			const file = SugarCube.storage.get("theme");
-			if (file !== null) {
-				load(file);
-			}
-		}
-	});
-
 	return {
 		selector: selector,
 		devTheme: reloadDevTheme,
+		init: loadFromStorage,
 	};
 
 	/**
@@ -31,13 +22,13 @@ App.UI.Theme = (function() {
 		selector.accept = ".css";
 		div.append(selector);
 
-		div.append(App.UI.DOM.link("Apply", () => {
-			unload();
+		div.append(" ", App.UI.DOM.link("Apply", () => {
+			unset();
 			if (selector.files.length > 0) {
 				const themeFile = selector.files[0];
-				load(themeFile.name);
+				set(themeFile.name);
 			}
-		}), " ", App.UI.DOM.link("Unload", unload));
+		}), " ", App.UI.DOM.link("Unload", unset));
 
 		return div;
 	}
@@ -45,12 +36,12 @@ App.UI.Theme = (function() {
 	/**
 	 * @param {string} filename or filepath relative to the HTML file.
 	 */
-	function load(filename) {
+	function set(filename) {
 		SugarCube.storage.set("theme", filename);
 		currentThemeElement = newTheme(filename);
 	}
 
-	function unload() {
+	function unset() {
 		if (currentThemeElement !== null) {
 			document.head.removeChild(currentThemeElement);
 			currentThemeElement = null;
@@ -58,6 +49,13 @@ App.UI.Theme = (function() {
 		}
 	}
 
+	function loadFromStorage() {
+		const file = SugarCube.storage.get("theme");
+		if (file !== null) {
+			set(file);
+		}
+	}
+
 	/**
 	 * Unloads current dev theme and loads new theme if specified.
 	 * @param {string} [filename]
@@ -70,8 +68,6 @@ App.UI.Theme = (function() {
 
 		if (filename !== undefined) {
 			devTheme = newTheme(filename);
-			// make it unique to force reloading instead of using the cached version
-			devTheme.href += `?id=${Date.now()}`;
 		}
 	}
 
@@ -85,6 +81,8 @@ App.UI.Theme = (function() {
 		theme.setAttribute("rel", "stylesheet");
 		theme.setAttribute("type", "text/css");
 		theme.setAttribute("href", `./${filename}`);
+		// make it unique to force reloading instead of using the cached version
+		devTheme.href += `?id=${Date.now()}`;
 		document.head.appendChild(theme);
 		return theme;
 	}
diff --git a/src/js/eventHandlers.js b/src/js/eventHandlers.js
index 9942b621297..b3dc43b08a8 100644
--- a/src/js/eventHandlers.js
+++ b/src/js/eventHandlers.js
@@ -22,6 +22,7 @@ App.EventHandlers = function() {
 	}
 
 	function storyReady() {
+		App.UI.Theme.init();
 		App.UI.Hotkeys.init();
 	}
 
-- 
GitLab