Quellcode durchsuchen

Handle situation where a bad default causes default theme to fail to load. (#3332)

Afshin Darian vor 7 Jahren
Ursprung
Commit
93875cf98d
2 geänderte Dateien mit 16 neuen und 6 gelöschten Zeilen
  1. 12 4
      packages/apputils-extension/src/index.ts
  2. 4 2
      packages/apputils/src/thememanager.ts

+ 12 - 4
packages/apputils-extension/src/index.ts

@@ -8,8 +8,8 @@ import {
 } from '@jupyterlab/application';
 
 import {
-  ICommandPalette, IThemeManager, ThemeManager,
-  ISplashScreen
+  Dialog, ICommandPalette, IThemeManager, ThemeManager, ISplashScreen,
+  showDialog
 } from '@jupyterlab/apputils';
 
 import {
@@ -139,9 +139,17 @@ const themes: JupyterLabPlugin<IThemeManager> = {
       host, settingRegistry, when
     });
     const disposable = splash.show();
-    const dispose = () => { disposable.dispose(); };
+    const success = () => { disposable.dispose(); };
+    const failure = (reason: string) => {
+      disposable.dispose();
+      showDialog({
+        title: 'Error Loading Theme',
+        body: reason,
+        buttons: [Dialog.okButton({ label: 'OK' })]
+      });
+    };
 
-    manager.ready.then(dispose, dispose);
+    manager.ready.then(success).catch(failure);
 
     return manager;
   },

+ 4 - 2
packages/apputils/src/thememanager.ts

@@ -60,6 +60,8 @@ class ThemeManager {
       this._settings.changed.connect(this._onSettingsChanged, this);
 
       return this._handleSettings();
+    }).catch(reason => {
+      throw `Theme manager is ready but failed at runtime: ${reason}`;
     });
   }
 
@@ -166,9 +168,9 @@ class ThemeManager {
 
       theme = settings.default('theme') as string;
       if (!this._themes[theme]) {
-        return Promise.reject('No default theme to load');
+        return Promise.reject(`Default theme "${theme}" did not load.`);
       }
-      console.warn(`Could not find theme "${old}", loading default "${theme}"`);
+      console.warn(`Could not load theme "${old}", using default "${theme}".`);
     }
     this._pendingTheme = theme;