From c2f382aba86aaebb9806ff1b43c1af69992e9a10 Mon Sep 17 00:00:00 2001 From: Evgeny Zinoviev Date: Mon, 11 Jul 2022 15:01:02 +0300 Subject: support dark mode for images with alpha channel --- htdocs/js/common/35-theme-switcher.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'htdocs/js') diff --git a/htdocs/js/common/35-theme-switcher.js b/htdocs/js/common/35-theme-switcher.js index e716e4b..c612152 100644 --- a/htdocs/js/common/35-theme-switcher.js +++ b/htdocs/js/common/35-theme-switcher.js @@ -14,6 +14,11 @@ var ThemeSwitcher = (function() { */ var systemState = null; + /** + * @type {function[]} + */ + var changeListeners = []; + /** * @returns {boolean} */ @@ -71,6 +76,13 @@ var ThemeSwitcher = (function() { var onDone = function() { window.requestAnimationFrame(function() { removeClass(document.body, 'theme-changing'); + changeListeners.forEach(function(f) { + try { + f(dark) + } catch (e) { + console.error('[ThemeSwitcher->changeTheme->onDone] error while calling user callback:', e) + } + }) }) }; @@ -171,7 +183,7 @@ var ThemeSwitcher = (function() { currentModeIndex = (currentModeIndex + 1) % modes.length; switch (modes[currentModeIndex]) { case 'auto': - if (systemState !== null) + if (systemState !== null && systemState !== isDarkModeApplied()) changeTheme(systemState); break; @@ -190,6 +202,13 @@ var ThemeSwitcher = (function() { setCookie('theme', modes[currentModeIndex]); return cancelEvent(e); + }, + + /** + * @param {function} f + */ + addOnChangeListener: function(f) { + changeListeners.push(f); } }; })(); \ No newline at end of file -- cgit v1.2.3