Bladeren bron

WIP adding palette keyboard shortcuts, adding method to externalize shortcuts

A. Darian 9 jaren geleden
bovenliggende
commit
22b115656f
5 gewijzigde bestanden met toevoegingen van 60 en 8 verwijderingen
  1. 1 1
      examples/lab/package.json
  2. 1 1
      package.json
  3. 34 6
      src/application/plugin.ts
  4. 1 0
      src/index.ts
  5. 23 0
      src/shortcuts.ts

+ 1 - 1
examples/lab/package.json

@@ -3,7 +3,7 @@
   "name": "jupyter-js-plugins-example",
   "dependencies": {
     "jupyter-js-plugins": "file:..",
-    "phosphide": "^0.5.3",
+    "phosphide": "^0.8.0",
     "phosphor-di": "^0.9.0"
   },
   "scripts": {

+ 1 - 1
package.json

@@ -15,7 +15,7 @@
     "jupyter-js-terminal": "^0.1.15",
     "jupyter-js-utils": "^0.3.0",
     "jupyter-js-widgets": "^0.0.6",
-    "phosphide": "^0.5.3",
+    "phosphide": "^0.8.0",
     "phosphor-codemirror": "^0.0.1",
     "phosphor-di": "^0.9.0",
     "phosphor-menus": "^1.0.0-rc.1",

+ 34 - 6
src/application/plugin.ts

@@ -1,5 +1,5 @@
 import {
-  IAppShell, ICommandPalette, ICommandRegistry
+  IAppShell, ICommandPalette, ICommandRegistry, IShortcutManager
 } from 'phosphide';
 
 import {
@@ -15,7 +15,7 @@ import {
 } from 'phosphor-widget';
 
 import {
-  IFileBrowserWidget
+  IFileBrowserWidget, SHORTCUTS
 } from '../index';
 
 /**
@@ -29,14 +29,42 @@ import {
 export
 function resolve(container: Container): Promise<void> {
   return container.resolve({
-    requires: [IAppShell, ICommandPalette, IFileBrowserWidget],
-    create: (shell: IAppShell, palette: ICommandPalette, browser: IFileBrowserWidget) => {
+    requires: [IAppShell, ICommandPalette, IFileBrowserWidget, IShortcutManager, ICommandRegistry],
+    create: (shell: IAppShell, palette: ICommandPalette, browser: IFileBrowserWidget, shortcutManager: IShortcutManager, commandRegistry: ICommandRegistry) => {
+      // Set up the command palette.
       palette.widget.title.text = 'Commands';
+      palette.widget.id = 'command-palette';
+      commandRegistry.add([
+        {
+          id: 'command-palette:activate',
+          handler: () => {
+            let id = palette.widget.id;
+            commandRegistry.execute('appshell:activate-left', { id });
+            commandRegistry.execute('command-palette:focus-input');
+          }
+        },
+        {
+          id: 'command-palette:deactivate',
+          handler: () => {
+            if (palette.widget.isAttached && palette.widget.isVisible) {
+              commandRegistry.execute('appshell:collapse-left');
+            }
+          }
+        }
+      ]);
+      palette.commandTriggered.connect(() => {
+        commandRegistry.execute('command-palette:deactivate');
+      });
       shell.addToLeftArea(palette.widget, { rank: 40 });
-      shell.attach(document.body);
-      window.addEventListener('resize', () => { shell.update(); });
+      // Set up the file browser.
       browser.title.text = 'Files';
+      browser.id = 'file-browser';
       shell.addToLeftArea(browser, { rank: 40 });
+      // Add the application keyboard shortcuts.
+      shortcutManager.add(SHORTCUTS);
+      // Attach the app shell to the DOM.
+      shell.attach(document.body);
+      window.addEventListener('resize', () => { shell.update(); });
     }
   });
 }

+ 1 - 0
src/index.ts

@@ -6,3 +6,4 @@ export * from './filebrowser/index';
 export * from './documentmanager/index';
 export * from './services/index';
 export * from './terminal/index';
+export * from './shortcuts';

+ 23 - 0
src/shortcuts.ts

@@ -0,0 +1,23 @@
+// Copyright (c) Jupyter Development Team.
+// Distributed under the terms of the Modified BSD License.
+'use strict';
+
+import {
+  IShortcutItem
+} from 'phosphide';
+
+export
+const SHORTCUTS: IShortcutItem[] = [
+  {
+    'command': 'command-palette:activate',
+    'args': void 0,
+    'selector': '*',
+    'sequence': ['Alt Space']
+  },
+  {
+    'command': 'command-palette:deactivate',
+    'args': void 0,
+    'selector': '*',
+    'sequence': ['Escape']
+  }
+];