123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- // Copyright (c) Jupyter Development Team.
- // Distributed under the terms of the Modified BSD License.
- import 'es6-promise/auto'; // polyfill Promise on IE
- import {
- CommandRegistry
- } from '@phosphor/commands';
- import {
- CommandPalette, SplitPanel, Widget
- } from '@phosphor/widgets';
- import {
- ServiceManager
- } from '@jupyterlab/services';
- import {
- NotebookPanel, NotebookWidgetFactory,
- NotebookModelFactory, NotebookActions
- } from '@jupyterlab/notebook';
- import {
- CompleterModel, Completer, CompletionHandler
- } from '@jupyterlab/completer';
- import {
- editorServices
- } from '@jupyterlab/codemirror';
- import {
- DocumentManager
- } from '@jupyterlab/docmanager';
- import {
- DocumentRegistry
- } from '@jupyterlab/docregistry';
- import {
- RenderMime
- } from '@jupyterlab/rendermime';
- import '@jupyterlab/theming/style/index.css';
- import '@jupyterlab/theming/style/variables-light.css';
- import '../index.css';
- let NOTEBOOK = 'test.ipynb';
- /**
- * The map of command ids used by the notebook.
- */
- const cmdIds = {
- invoke: 'completer:invoke',
- select: 'completer:select',
- invokeNotebook: 'completer:invoke-notebook',
- selectNotebook: 'completer:select-notebook',
- save: 'notebook:save',
- interrupt: 'notebook:interrupt-kernel',
- restart: 'notebook:restart-kernel',
- switchKernel: 'notebook:switch-kernel',
- runAndAdvance: 'notebook-cells:run-and-advance',
- deleteCell: 'notebook-cells:delete',
- selectAbove: 'notebook-cells:select-above',
- selectBelow: 'notebook-cells:select-below',
- extendAbove: 'notebook-cells:extend-above',
- extendBelow: 'notebook-cells:extend-below',
- editMode: 'notebook:edit-mode',
- merge: 'notebook-cells:merge',
- split: 'notebook-cells:split',
- commandMode: 'notebook:command-mode',
- undo: 'notebook-cells:undo',
- redo: 'notebook-cells:redo'
- };
- function main(): void {
- let manager = new ServiceManager();
- manager.ready.then(() => {
- createApp(manager);
- });
- }
- function createApp(manager: ServiceManager.IManager): void {
- // Initialize the command registry with the bindings.
- let commands = new CommandRegistry();
- let useCapture = true;
- // Setup the keydown listener for the document.
- document.addEventListener('keydown', event => {
- commands.processKeydownEvent(event);
- }, useCapture);
- let initialFactories = RenderMime.getDefaultFactories();
- let rendermime = new RenderMime({ initialFactories });
- let opener = {
- open: (widget: Widget) => {
- // Do nothing for sibling widgets for now.
- }
- };
- let docRegistry = new DocumentRegistry();
- let docManager = new DocumentManager({
- registry: docRegistry,
- manager,
- opener
- });
- let mFactory = new NotebookModelFactory({});
- let editorFactory = editorServices.factoryService.newInlineEditor.bind(
- editorServices.factoryService);
- let contentFactory = new NotebookPanel.ContentFactory({ editorFactory });
- let wFactory = new NotebookWidgetFactory({
- name: 'Notebook',
- modelName: 'notebook',
- fileExtensions: ['.ipynb'],
- defaultFor: ['.ipynb'],
- preferKernel: true,
- canStartKernel: true,
- rendermime, contentFactory,
- mimeTypeService: editorServices.mimeTypeService
- });
- docRegistry.addModelFactory(mFactory);
- docRegistry.addWidgetFactory(wFactory);
- let nbWidget = docManager.open(NOTEBOOK) as NotebookPanel;
- let palette = new CommandPalette({ commands });
- const editor = nbWidget.notebook.activeCell && nbWidget.notebook.activeCell.editor;
- const model = new CompleterModel();
- const completer = new Completer({ editor, model });
- const handler = new CompletionHandler({ completer, session: nbWidget.session });
- // Set the handler's editor.
- handler.editor = editor;
- // Listen for active cell changes.
- nbWidget.notebook.activeCellChanged.connect((sender, cell) => {
- handler.editor = cell && cell.editor;
- });
- // Hide the widget when it first loads.
- completer.hide();
- let panel = new SplitPanel();
- panel.id = 'main';
- panel.orientation = 'horizontal';
- panel.spacing = 0;
- SplitPanel.setStretch(palette, 0);
- panel.addWidget(completer);
- panel.addWidget(palette);
- panel.addWidget(nbWidget);
- Widget.attach(panel, document.body);
- SplitPanel.setStretch(nbWidget, 1);
- window.onresize = () => panel.update();
- commands.addCommand(cmdIds.invoke, {
- label: 'Completer: Invoke',
- execute: () => handler.invoke()
- });
- commands.addCommand(cmdIds.select, {
- label: 'Completer: Select',
- execute: () => handler.completer.selectActive()
- });
- commands.addCommand(cmdIds.invokeNotebook, {
- label: 'Invoke Notebook',
- execute: () => {
- if (nbWidget.notebook.activeCell.model.type === 'code') {
- return commands.execute(cmdIds.invoke);
- }
- }
- });
- commands.addCommand(cmdIds.selectNotebook, {
- label: 'Select Notebook',
- execute: () => {
- if (nbWidget.notebook.activeCell.model.type === 'code') {
- return commands.execute(cmdIds.select);
- }
- }
- });
- commands.addCommand(cmdIds.save, {
- label: 'Save',
- execute: () => nbWidget.context.save()
- });
- commands.addCommand(cmdIds.interrupt, {
- label: 'Interrupt',
- execute: () => {
- if (nbWidget.context.session.kernel) {
- nbWidget.context.session.kernel.interrupt();
- }
- }
- });
- commands.addCommand(cmdIds.restart, {
- label: 'Restart Kernel',
- execute: () => nbWidget.context.session.restart()
- });
- commands.addCommand(cmdIds.switchKernel, {
- label: 'Switch Kernel',
- execute: () => nbWidget.context.session.selectKernel()
- });
- commands.addCommand(cmdIds.runAndAdvance, {
- label: 'Run and Advance',
- execute: () => {
- NotebookActions.runAndAdvance(nbWidget.notebook, nbWidget.context.session);
- }
- });
- commands.addCommand(cmdIds.editMode, {
- label: 'Edit Mode',
- execute: () => { nbWidget.notebook.mode = 'edit'; }
- });
- commands.addCommand(cmdIds.commandMode, {
- label: 'Command Mode',
- execute: () => { nbWidget.notebook.mode = 'command'; }
- });
- commands.addCommand(cmdIds.selectBelow, {
- label: 'Select Below',
- execute: () => NotebookActions.selectBelow(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.selectAbove, {
- label: 'Select Above',
- execute: () => NotebookActions.selectAbove(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.extendAbove, {
- label: 'Extend Above',
- execute: () => NotebookActions.extendSelectionAbove(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.extendBelow, {
- label: 'Extend Below',
- execute: () => NotebookActions.extendSelectionBelow(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.merge, {
- label: 'Merge Cells',
- execute: () => NotebookActions.mergeCells(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.split, {
- label: 'Split Cell',
- execute: () => NotebookActions.splitCell(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.undo, {
- label: 'Undo',
- execute: () => NotebookActions.undo(nbWidget.notebook)
- });
- commands.addCommand(cmdIds.redo, {
- label: 'Redo',
- execute: () => NotebookActions.redo(nbWidget.notebook)
- });
- let category = 'Notebook Operations';
- [
- cmdIds.interrupt,
- cmdIds.restart,
- cmdIds.editMode,
- cmdIds.commandMode,
- cmdIds.switchKernel
- ].forEach(command => palette.addItem({ command, category }));
- category = 'Notebook Cell Operations';
- [
- cmdIds.runAndAdvance,
- cmdIds.split,
- cmdIds.merge,
- cmdIds.selectAbove,
- cmdIds.selectBelow,
- cmdIds.extendAbove,
- cmdIds.extendBelow,
- cmdIds.undo,
- cmdIds.redo
- ].forEach(command => palette.addItem({ command, category }));
- let bindings = [
- {
- selector: '.jp-Notebook.jp-mod-editMode .jp-mod-completer-enabled',
- keys: ['Tab'],
- command: cmdIds.invokeNotebook
- },
- {
- selector: `.jp-mod-completer-enabled`,
- keys: ['Enter'],
- command: cmdIds.selectNotebook
- },
- {
- selector: '.jp-Notebook',
- keys: ['Shift Enter'],
- command: cmdIds.runAndAdvance
- },
- {
- selector: '.jp-Notebook',
- keys: ['Accel S'],
- command: cmdIds.save
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['I', 'I'],
- command: cmdIds.interrupt
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['0', '0'],
- command: cmdIds.restart
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['Enter'],
- command: cmdIds.editMode
- },
- {
- selector: '.jp-Notebook.jp-mod-editMode',
- keys: ['Escape'],
- command: cmdIds.commandMode
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['Shift M'],
- command: cmdIds.merge
- },
- {
- selector: '.jp-Notebook.jp-mod-editMode',
- keys: ['Ctrl Shift -'],
- command: cmdIds.split
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['J'],
- command: cmdIds.selectBelow
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['ArrowDown'],
- command: cmdIds.selectBelow
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['K'],
- command: cmdIds.selectAbove
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['ArrowUp'],
- command: cmdIds.selectAbove
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['Shift K'],
- command: cmdIds.extendAbove
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['Shift J'],
- command: cmdIds.extendBelow
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['Z'],
- command: cmdIds.undo
- },
- {
- selector: '.jp-Notebook.jp-mod-commandMode:focus',
- keys: ['Y'],
- command: cmdIds.redo
- }
- ];
- bindings.map(binding => commands.addKeyBinding(binding));
- }
- window.onload = main;
|