فهرست منبع

Update example app and add theme and tree handling (#3492)

Steven Silvester 7 سال پیش
والد
کامیت
7a2965138e
7فایلهای تغییر یافته به همراه82 افزوده شده و 89 حذف شده
  1. 0 32
      dev_mode/index.js
  2. 2 2
      examples/app/index.html
  3. 32 31
      examples/app/index.js
  4. 21 7
      examples/app/main.py
  5. 4 0
      examples/app/package.json
  6. 1 1
      examples/app/webpack.config.js
  7. 22 16
      packages/application/src/index.ts

+ 0 - 32
dev_mode/index.js

@@ -61,33 +61,8 @@ function main() {
     });
   }
 
-  var version = PageConfig.getOption('appVersion') || 'unknown';
-  var name = PageConfig.getOption('appName') || 'JupyterLab';
-  var namespace = PageConfig.getOption('appNamespace') || 'jupyterlab';
-  var devMode = PageConfig.getOption('devMode') || 'false';
-
-  // Get the lab config data.
-  var urls = Object.create(null);
-  [
-    'pageUrl', 'publicUrl', 'settingsUrl', 'userSettingsUrl', 'themesUrl'
-  ].forEach(function (key) {
-    urls[key.replace('Url', '')] = PageConfig.getOption(key);
-  });
-
-  var directories = Object.create(null);
-  [
-    'appSettingsDir', 'templatesDir', 'staticDir', 'schemasDir', 'themesDir'
-  ].forEach(function (key) {
-    directories[key.replace('Dir', '')] = PageConfig.getOption(key);
-  });
-  directories['serverRoot'] = PageConfig.getOption('serverRoot');
-
   var register = [];
 
-  if (version[0] === 'v') {
-    version = version.slice(1);
-  }
-
   // Handle the registered mime extensions.
   var mimeExtensions = [];
   // eslint-disable-next-line semi
@@ -172,16 +147,9 @@ function main() {
   {{/each}}
 
   var lab = new app({
-    name: name,
-    namespace: namespace,
-    version: version,
-    devMode: devMode.toLowerCase() === 'true',
     mimeExtensions: mimeExtensions,
     disabled: disabled,
     deferred: deferred,
-    urls: urls,
-    directories: directories,
-    filesCached: PageConfig.getOption('cacheFiles').toLowerCase() == true
   });
   register.forEach(function(item) { lab.registerPluginModule(item); });
   lab.start({ ignorePlugins: ignorePlugins });

+ 2 - 2
examples/app/index.html

@@ -5,7 +5,7 @@
   <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_CHTML-full,Safe&amp;delayStartupUntil=configured"></script>
 </head>
 <body>
-  <script id='jupyter-config-data' type="application/json">{ 
+  <script id='jupyter-config-data' type="application/json">{
   {% for key, value in page_config.items() -%}
   "{{ key }}": "{{ value }}",
   {% endfor -%}
@@ -13,6 +13,6 @@
   "wsUrl": "{{ws_url}}",
   "terminalsAvailable": "{{terminals_available}}"
  }</script>
-  <script src="example/bundle.js" main="index"></script>
+  <script src="/example/static/bundle.js" main="index"></script>
 </body>
 </html>

+ 32 - 31
examples/app/index.js

@@ -4,39 +4,40 @@
 // ES6 Promise polyfill
 require('es6-promise/auto');
 
-// Load the core theming before any other package.
-require('@jupyterlab/theme-light-extension/style/embed.css');
-
-var JupyterLab = require('@jupyterlab/application').JupyterLab;
-
-
-var mods = [
-  require('@jupyterlab/application-extension'),
-  require('@jupyterlab/apputils-extension'),
-  require('@jupyterlab/codemirror-extension'),
-  require('@jupyterlab/completer-extension'),
-  require('@jupyterlab/console-extension'),
-  require('@jupyterlab/csvviewer-extension'),
-  require('@jupyterlab/docmanager-extension'),
-  require('@jupyterlab/fileeditor-extension'),
-  require('@jupyterlab/faq-extension'),
-  require('@jupyterlab/filebrowser-extension'),
-  require('@jupyterlab/help-extension'),
-  require('@jupyterlab/imageviewer-extension'),
-  require('@jupyterlab/inspector-extension'),
-  require('@jupyterlab/launcher-extension'),
-  require('@jupyterlab/markdownviewer-extension'),
-  require('@jupyterlab/notebook-extension'),
-  require('@jupyterlab/running-extension'),
-  require('@jupyterlab/settingeditor-extension'),
-  require('@jupyterlab/shortcuts-extension'),
-  require('@jupyterlab/tabmanager-extension'),
-  require('@jupyterlab/terminal-extension'),
-  require('@jupyterlab/tooltip-extension')
-];
-
 
 window.addEventListener('load', function() {
+  require('font-awesome/css/font-awesome.min.css');
+  var JupyterLab = require('@jupyterlab/application').JupyterLab;
+
+  var mods = [
+    require('@jupyterlab/application-extension'),
+    require('@jupyterlab/apputils-extension'),
+    require('@jupyterlab/codemirror-extension'),
+    require('@jupyterlab/completer-extension'),
+    require('@jupyterlab/console-extension'),
+    require('@jupyterlab/csvviewer-extension'),
+    require('@jupyterlab/docmanager-extension'),
+    require('@jupyterlab/fileeditor-extension'),
+    require('@jupyterlab/faq-extension'),
+    require('@jupyterlab/filebrowser-extension'),
+    require('@jupyterlab/help-extension'),
+    require('@jupyterlab/imageviewer-extension'),
+    require('@jupyterlab/inspector-extension'),
+    require('@jupyterlab/launcher-extension'),
+    require('@jupyterlab/mainmenu-extension'),
+    require('@jupyterlab/markdownviewer-extension'),
+    require('@jupyterlab/mathjax2-extension'),
+    require('@jupyterlab/notebook-extension'),
+    require('@jupyterlab/rendermime-extension'),
+    require('@jupyterlab/running-extension'),
+    require('@jupyterlab/settingeditor-extension'),
+    require('@jupyterlab/shortcuts-extension'),
+    require('@jupyterlab/tabmanager-extension'),
+    require('@jupyterlab/terminal-extension'),
+    require('@jupyterlab/theme-dark-extension'),
+    require('@jupyterlab/theme-light-extension'),
+    require('@jupyterlab/tooltip-extension')
+  ];
   var lab = new JupyterLab({
     name: 'JupyterLab Example',
     namespace: 'lab-example',

+ 21 - 7
examples/app/main.py

@@ -9,7 +9,7 @@ from notebook.base.handlers import IPythonHandler, FileFindHandler
 from notebook.utils import url_path_join as ujoin
 from notebook.notebookapp import NotebookApp
 from traitlets import Unicode
-from jupyterlab_launcher.handlers import default_settings_path, SettingsHandler
+from jupyterlab_launcher.handlers import SettingsHandler, ThemesHandler
 
 HERE = os.path.dirname(__file__)
 
@@ -39,23 +39,37 @@ class ExampleApp(NotebookApp):
         super(ExampleApp, self).init_webapp()
         wsettings = self.web_app.settings
         base_url = wsettings['base_url']
+        page_url = self.default_url
         settings_path = ujoin(
-            base_url, default_settings_path + '(?P<section_name>.+)'
+            base_url, page_url, 'api', 'settings', '(?P<section_name>.+)'
+        )
+        themes_path = ujoin(
+            base_url, page_url, 'api', 'themes'
         )
 
         wsettings.setdefault('page_config_data', dict())
         wsettings['page_config_data']['token'] = self.token
+        wsettings['page_config_data']['pageUrl'] = page_url
+        wsettings['page_config_data']['themesUrl'] = themes_path
 
         default_handlers = [
             (ujoin(base_url, '/example?'), ExampleHandler),
-            (ujoin(base_url, '/example/(.*)'), FileFindHandler,
-                {'path': 'build'}),
             ((settings_path, SettingsHandler, {
                 'schemas_dir': os.path.join(HERE, 'build', 'schemas'),
-                'settings_dir': ''
-                })
-            )
+                'settings_dir': '',
+                'app_settings_dir': ''
+            })),
+            ((ujoin(themes_path, "(.*)"), ThemesHandler, {
+                'themes_url': themes_path,
+                'path': os.path.join(HERE, 'build', 'themes')
+            })),
+            (ujoin(base_url, '/example/static/(.*)'), FileFindHandler,
+                {'path': 'build'}),
+            # Let the lab handler act as the fallthrough option instead
+            # of a 404.
+            (ujoin(base_url, page_url, r'/?.*'), ExampleHandler)
         ]
+
         self.web_app.add_handlers(".*$", default_handlers)
 
 

+ 4 - 0
examples/app/package.json

@@ -24,13 +24,17 @@
     "@jupyterlab/imageviewer-extension": "^0.14.1",
     "@jupyterlab/inspector-extension": "^0.14.1",
     "@jupyterlab/launcher-extension": "^0.14.1",
+    "@jupyterlab/mainmenu-extension": "^0.3.1",
     "@jupyterlab/markdownviewer-extension": "^0.14.1",
+    "@jupyterlab/mathjax2-extension": "^0.2.1",
     "@jupyterlab/notebook-extension": "^0.14.1",
+    "@jupyterlab/rendermime-extension": "^0.8.1",
     "@jupyterlab/running-extension": "^0.14.1",
     "@jupyterlab/settingeditor-extension": "^0.9.1",
     "@jupyterlab/shortcuts-extension": "^0.14.1",
     "@jupyterlab/tabmanager-extension": "^0.14.1",
     "@jupyterlab/terminal-extension": "^0.14.1",
+    "@jupyterlab/theme-dark-extension": "^0.14.1",
     "@jupyterlab/theme-light-extension": "^0.14.1",
     "@jupyterlab/tooltip-extension": "^0.14.1",
     "es6-promise": "~4.1.1"

+ 1 - 1
examples/app/webpack.config.js

@@ -10,7 +10,7 @@ module.exports = {
   output: {
     path: __dirname + '/build',
     filename: 'bundle.js',
-    publicPath: 'lab/'
+    publicPath: 'example/static'
   },
   node: {
     fs: 'empty'

+ 22 - 16
packages/application/src/index.ts

@@ -4,6 +4,10 @@
 // Local CSS must be loaded prior to loading other libs.
 import '../style/index.css';
 
+import {
+  PageConfig
+} from '@jupyterlab/coreutils';
+
 import {
   CommandLinker
 } from '@jupyterlab/apputils';
@@ -228,8 +232,9 @@ namespace JupyterLab {
       readonly schemas: string,
       readonly static: string,
       readonly templates: string,
-      readonly themes: string
+      readonly themes: string,
       readonly userSettings: string,
+      readonly serverRoot: string
     };
 
     /**
@@ -243,28 +248,29 @@ namespace JupyterLab {
    */
   export
   const defaultInfo: IInfo = {
-    name: 'JupyterLab',
-    namespace: 'jupyterlab',
-    version: 'unknown',
-    devMode: false,
+    name: PageConfig.getOption('appName') || 'JupyterLab',
+    namespace: PageConfig.getOption('appNamespace'),
+    version: PageConfig.getOption('appVersion') || 'unknown',
+    devMode: PageConfig.getOption('devMode').toLowerCase() === 'true',
     deferred: { patterns: [], matches: [] },
     disabled: { patterns: [], matches: [] },
     mimeExtensions: [],
     urls: {
-      page: 'unknown',
-      public: 'unknown',
-      settings: 'unknown',
-      themes: 'unknown'
+      page: PageConfig.getOption('pageUrl'),
+      public: PageConfig.getOption('publicUrl'),
+      settings: PageConfig.getOption('settingsUrl'),
+      themes: PageConfig.getOption('themesUrl')
     },
     directories: {
-      appSettings: 'unknown',
-      schemas: 'unknown',
-      static: 'unknown',
-      templates: 'unknown',
-      themes: 'unknown',
-      userSettings: 'unknown'
+      appSettings: PageConfig.getOption('appSettingsDir'),
+      schemas: PageConfig.getOption('schemasDir'),
+      static: PageConfig.getOption('staticDir'),
+      templates: PageConfig.getOption('templatesDir'),
+      themes: PageConfig.getOption('themesDir'),
+      userSettings: PageConfig.getOption('userSettingsDir'),
+      serverRoot: PageConfig.getOption('serverRoot')
     },
-    filesCached: true
+    filesCached: PageConfig.getOption('cacheFiles').toLowerCase() === 'true'
   };
 
   /**