diff options
author | Kuuuube <61125188+Kuuuube@users.noreply.github.com> | 2024-06-19 12:57:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 16:57:21 +0000 |
commit | d9521c58bf9b9fef0c8b1248bf6ce8c69351fc16 (patch) | |
tree | d21a6833422d87f0c0e4b83d2dbbd1dae092dd24 /ext/js | |
parent | 451bcab01fd591ec54b63af0fc7084dc9f37928b (diff) |
Remove flickering on page loads, reduce flashbangs, fix settings and popup themes applying correctly (#1088)
* Pull theme from settings on page load
* Make dark mode default
* Fix flickering on load
* Invert shadow for auto shadow theme
* Revert "Make dark mode default"
This reverts commit 4cdfc39686a9faa3ce7a620be23025f97816f5f9.
* Improve page load times
* Fix flicker on load for popup preview without breaking theming when auto is selected
* Revert shadow invert
Diffstat (limited to 'ext/js')
-rw-r--r-- | ext/js/display/display.js | 12 | ||||
-rw-r--r-- | ext/js/display/search-main.js | 2 | ||||
-rw-r--r-- | ext/js/pages/action-popup-main.js | 2 | ||||
-rw-r--r-- | ext/js/pages/info-main.js | 32 | ||||
-rw-r--r-- | ext/js/pages/permissions-main.js | 20 | ||||
-rw-r--r-- | ext/js/pages/quick-start-guide-main.js | 1 | ||||
-rw-r--r-- | ext/js/pages/settings/settings-display-controller.js | 11 | ||||
-rw-r--r-- | ext/js/pages/settings/settings-main.js | 13 | ||||
-rw-r--r-- | ext/js/pages/welcome-main.js | 20 |
9 files changed, 71 insertions, 42 deletions
diff --git a/ext/js/display/display.js b/ext/js/display/display.js index 386f456b..33ab44e4 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -1152,16 +1152,24 @@ export class Display extends EventDispatcher { _setTheme(options) { const {general} = options; const {popupTheme} = general; + /** @type {string} */ + let pageType = this._pageType; try { // eslint-disable-next-line no-underscore-dangle - const pageTheme = this._history._current.state?.pageTheme; + const historyState = this._history._current.state; + + const pageTheme = historyState?.pageTheme; this._themeController.siteTheme = pageTheme ?? null; + + if (historyState?.url?.includes('popup-preview.html')) { + pageType = 'popupPreview'; + } } catch (e) { log.error(e); } this._themeController.theme = popupTheme; this._themeController.outerTheme = general.popupOuterTheme; - this._themeController.siteOverride = this._pageType === 'search'; + this._themeController.siteOverride = pageType === 'search' || pageType === 'popupPreview'; this._themeController.updateTheme(); this.setCustomCss(general.customPopupCss); } diff --git a/ext/js/display/search-main.js b/ext/js/display/search-main.js index c3c292a1..d3ef2539 100644 --- a/ext/js/display/search-main.js +++ b/ext/js/display/search-main.js @@ -51,6 +51,8 @@ await Application.main(true, async (application) => { const searchDisplayController = new SearchDisplayController(display, displayAudio, searchPersistentStateController); await searchDisplayController.prepare(); + document.body.hidden = false; + display.initializeState(); document.documentElement.dataset.loaded = 'true'; diff --git a/ext/js/pages/action-popup-main.js b/ext/js/pages/action-popup-main.js index 4137d5c3..d8eb87bc 100644 --- a/ext/js/pages/action-popup-main.js +++ b/ext/js/pages/action-popup-main.js @@ -328,4 +328,6 @@ await Application.main(true, async (application) => { const displayController = new DisplayController(application.api); await displayController.prepare(); + + document.body.hidden = false; }); diff --git a/ext/js/pages/info-main.js b/ext/js/pages/info-main.js index 079a8c3a..08abc12b 100644 --- a/ext/js/pages/info-main.js +++ b/ext/js/pages/info-main.js @@ -117,6 +117,23 @@ async function showDictionaryInfo(api) { } await Application.main(true, async (application) => { + const settingsController = new SettingsController(application); + await settingsController.prepare(); + + /** @type {ThemeController} */ + const themeController = new ThemeController(document.documentElement); + themeController.prepare(); + const optionsFull = await application.api.optionsGetFull(); + const {profiles, profileCurrent} = optionsFull; + const primaryProfile = (profileCurrent >= 0 && profileCurrent < profiles.length) ? profiles[profileCurrent] : null; + if (primaryProfile !== null) { + themeController.theme = primaryProfile.options.general.popupTheme; + themeController.siteOverride = true; + themeController.updateTheme(); + } + + document.body.hidden = false; + const documentFocusController = new DocumentFocusController(); documentFocusController.prepare(); @@ -152,21 +169,6 @@ await Application.main(true, async (application) => { void showAnkiConnectInfo(application.api); void showDictionaryInfo(application.api); - const settingsController = new SettingsController(application); - await settingsController.prepare(); - - /** @type {ThemeController} */ - const themeController = new ThemeController(document.documentElement); - themeController.prepare(); - const optionsFull = await application.api.optionsGetFull(); - const {profiles, profileCurrent} = optionsFull; - const primaryProfile = (profileCurrent >= 0 && profileCurrent < profiles.length) ? profiles[profileCurrent] : null; - if (primaryProfile !== null) { - themeController.theme = primaryProfile.options.general.popupTheme; - themeController.siteOverride = true; - themeController.updateTheme(); - } - const backupController = new BackupController(settingsController, null); await backupController.prepare(); diff --git a/ext/js/pages/permissions-main.js b/ext/js/pages/permissions-main.js index d27f2d79..9f37f11b 100644 --- a/ext/js/pages/permissions-main.js +++ b/ext/js/pages/permissions-main.js @@ -87,6 +87,17 @@ function setupPermissionsToggles() { } await Application.main(true, async (application) => { + const modalController = new ModalController(); + modalController.prepare(); + + const settingsController = new SettingsController(application); + await settingsController.prepare(); + + const settingsDisplayController = new SettingsDisplayController(settingsController, modalController); + await settingsDisplayController.prepare(); + + document.body.hidden = false; + const documentFocusController = new DocumentFocusController(); documentFocusController.prepare(); @@ -115,12 +126,6 @@ await Application.main(true, async (application) => { permissionsCheckboxes[i].checked = permissions[i]; } - const modalController = new ModalController(); - modalController.prepare(); - - const settingsController = new SettingsController(application); - await settingsController.prepare(); - const permissionsToggleController = new PermissionsToggleController(settingsController); void permissionsToggleController.prepare(); @@ -130,9 +135,6 @@ await Application.main(true, async (application) => { const persistentStorageController = new PersistentStorageController(application); void persistentStorageController.prepare(); - const settingsDisplayController = new SettingsDisplayController(settingsController, modalController); - settingsDisplayController.prepare(); - await promiseTimeout(100); document.documentElement.dataset.loaded = 'true'; diff --git a/ext/js/pages/quick-start-guide-main.js b/ext/js/pages/quick-start-guide-main.js index 6a3cd39b..1ddce2f6 100644 --- a/ext/js/pages/quick-start-guide-main.js +++ b/ext/js/pages/quick-start-guide-main.js @@ -33,4 +33,5 @@ await Application.main(true, async (application) => { themeController.siteOverride = true; themeController.updateTheme(); } + document.body.hidden = false; }); diff --git a/ext/js/pages/settings/settings-display-controller.js b/ext/js/pages/settings/settings-display-controller.js index e179b835..a2150a15 100644 --- a/ext/js/pages/settings/settings-display-controller.js +++ b/ext/js/pages/settings/settings-display-controller.js @@ -47,9 +47,9 @@ export class SettingsDisplayController { } /** */ - prepare() { + async prepare() { this._themeController.prepare(); - void this._updateTheme(); + await this._setTheme(); const onFabButtonClick = this._onFabButtonClick.bind(this); for (const fabButton of /** @type {NodeListOf<HTMLElement>} */ (document.querySelectorAll('.fab-button'))) { @@ -99,6 +99,13 @@ export class SettingsDisplayController { } /** */ + async _setTheme() { + this._themeController.theme = (await this._settingsController.getOptions()).general.popupTheme; + this._themeController.siteOverride = true; + this._themeController.updateTheme(); + } + + /** */ async _updateTheme() { const theme = this._themeDropdown?.value; if (theme === 'site' || theme === 'light' || theme === 'dark' || theme === 'browser') { diff --git a/ext/js/pages/settings/settings-main.js b/ext/js/pages/settings/settings-main.js index a315eac4..ebb51276 100644 --- a/ext/js/pages/settings/settings-main.js +++ b/ext/js/pages/settings/settings-main.js @@ -91,6 +91,14 @@ await Application.main(true, async (application) => { const settingsController = new SettingsController(application); await settingsController.prepare(); + const settingsDisplayController = new SettingsDisplayController(settingsController, modalController); + await settingsDisplayController.prepare(); + + document.body.hidden = false; + + const popupPreviewController = new PopupPreviewController(settingsController); + popupPreviewController.prepare(); + const persistentStorageController = new PersistentStorageController(application); preparePromises.push(persistentStorageController.prepare()); @@ -124,9 +132,6 @@ await Application.main(true, async (application) => { const ankiTemplatesController = new AnkiTemplatesController(application, settingsController, modalController, ankiController); preparePromises.push(ankiTemplatesController.prepare()); - const popupPreviewController = new PopupPreviewController(settingsController); - popupPreviewController.prepare(); - const scanInputsController = new ScanInputsController(settingsController); preparePromises.push(scanInputsController.prepare()); @@ -169,8 +174,6 @@ await Application.main(true, async (application) => { const sortFrequencyDictionaryController = new SortFrequencyDictionaryController(settingsController); preparePromises.push(sortFrequencyDictionaryController.prepare()); - const settingsDisplayController = new SettingsDisplayController(settingsController, modalController); - settingsDisplayController.prepare(); await Promise.all(preparePromises); diff --git a/ext/js/pages/welcome-main.js b/ext/js/pages/welcome-main.js index 56a7e7d8..6771b31e 100644 --- a/ext/js/pages/welcome-main.js +++ b/ext/js/pages/welcome-main.js @@ -58,6 +58,17 @@ async function checkNeedsCustomTemplatesWarning() { } await Application.main(true, async (application) => { + const modalController = new ModalController(); + modalController.prepare(); + + const settingsController = new SettingsController(application); + await settingsController.prepare(); + + const settingsDisplayController = new SettingsDisplayController(settingsController, modalController); + await settingsDisplayController.prepare(); + + document.body.hidden = false; + const documentFocusController = new DocumentFocusController(); documentFocusController.prepare(); @@ -74,12 +85,6 @@ await Application.main(true, async (application) => { const preparePromises = []; - const modalController = new ModalController(); - modalController.prepare(); - - const settingsController = new SettingsController(application); - await settingsController.prepare(); - const genericSettingController = new GenericSettingController(settingsController); preparePromises.push(setupGenericSettingsController(genericSettingController)); @@ -92,9 +97,6 @@ await Application.main(true, async (application) => { const languagesController = new LanguagesController(settingsController); preparePromises.push(languagesController.prepare()); - const settingsDisplayController = new SettingsDisplayController(settingsController, modalController); - settingsDisplayController.prepare(); - await Promise.all(preparePromises); document.documentElement.dataset.loaded = 'true'; |