UNPKG

jupyterlab-emrys

Version:

A computational environment for Jupyter. Powered by Emrys

215 lines (214 loc) 7.61 kB
// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. "use strict"; var jupyter_js_services_1 = require('jupyter-js-services'); var phosphor_menus_1 = require('phosphor-menus'); var docregistry_1 = require('../docregistry'); var inspector_1 = require('../inspector'); var plugin_1 = require('../mainmenu/plugin'); var rendermime_1 = require('../rendermime'); var widgettracker_1 = require('../widgettracker'); var _1 = require('./'); /** * The console extension. */ exports.consoleExtension = { id: 'jupyter.extensions.console', requires: [jupyter_js_services_1.ServiceManager, rendermime_1.RenderMime, plugin_1.MainMenu, inspector_1.Inspector], activate: activateConsole }; /** * The class name for all main area landscape tab icons. */ var LANDSCAPE_ICON_CLASS = 'jp-MainAreaLandscapeIcon'; /** * The class name for the console icon from the default theme. */ var CONSOLE_ICON_CLASS = 'jp-ImageConsole'; /** * Activate the console extension. */ function activateConsole(app, services, rendermime, mainMenu, inspector) { var tracker = new widgettracker_1.WidgetTracker(); var manager = services.sessions; // Set the source of the code inspector to the current console. tracker.activeWidgetChanged.connect(function (sender, panel) { inspector.source = panel.content.inspectionHandler; }); var newSubmenuItems = []; // Add the ability to create new consoles for each kernel. var specs = services.kernelspecs; var displayNameMap = Object.create(null); for (var kernelName in specs.kernelspecs) { var displayName = specs.kernelspecs[kernelName].spec.display_name; displayNameMap[displayName] = kernelName; } var displayNames = Object.keys(displayNameMap).sort(function (a, b) { return a.localeCompare(b); }); var count = 0; var _loop_1 = function(displayName) { var id = "console:create-" + displayNameMap[displayName]; app.commands.add([{ id: id, handler: function () { manager.startNew({ path: "Console-" + count++, kernelName: "" + displayNameMap[displayName] }).then(function (session) { var panel = new _1.ConsolePanel({ session: session, rendermime: rendermime.clone() }); panel.id = "console-" + count; panel.title.text = displayName + " (" + count + ")"; panel.title.icon = LANDSCAPE_ICON_CLASS + " " + CONSOLE_ICON_CLASS; panel.title.closable = true; app.shell.addToMainArea(panel); tracker.addWidget(panel); }); } }]); app.palette.add([{ command: id, category: 'Console', text: "New " + displayName + " console" }]); newSubmenuItems.push(new phosphor_menus_1.MenuItem({ text: displayName + " console", handler: function () { app.commands.execute(id); } })); }; for (var _i = 0, displayNames_1 = displayNames; _i < displayNames_1.length; _i++) { var displayName = displayNames_1[_i]; _loop_1(displayName); } app.commands.add([ { id: 'console:clear', handler: function () { if (tracker.activeWidget) { tracker.activeWidget.content.clear(); } } }, { id: 'console:dismiss-completion', handler: function () { if (tracker.activeWidget) { tracker.activeWidget.content.dismissCompletion(); } } }, { id: 'console:execute', handler: function () { if (tracker.activeWidget) { tracker.activeWidget.content.execute(); } } }, { id: 'console:interrupt-kernel', handler: function () { if (tracker.activeWidget) { var kernel = tracker.activeWidget.content.session.kernel; if (kernel) { kernel.interrupt(); } } } }, { id: 'console:switch-kernel', handler: function () { if (tracker.activeWidget) { var widget_1 = tracker.activeWidget.content; var session_1 = widget_1.session; var lang_1 = ''; if (session_1.kernel) { lang_1 = specs.kernelspecs[session_1.kernel.name].spec.language; } manager.listRunning().then(function (sessions) { var options = { name: widget_1.parent.title.text, specs: specs, sessions: sessions, preferredLanguage: lang_1, kernel: session_1.kernel.model, host: widget_1.parent.node }; return docregistry_1.selectKernel(options); }).then(function (kernelId) { if (kernelId) { session_1.changeKernel(kernelId); } else { session_1.kernel.shutdown(); } }); } } } ]); app.palette.add([ { command: 'console:clear', category: 'Console', text: 'Clear Cells' }, { command: 'console:execute', category: 'Console', text: 'Execute Cell' }, { command: 'console:interrupt-kernel', category: 'Console', text: 'Interrupt Kernel' }, { command: 'console:switch-kernel', category: 'Console', text: 'Switch Kernel' } ]); var newSubmenu = new phosphor_menus_1.Menu(newSubmenuItems); var menu = new phosphor_menus_1.Menu([ new phosphor_menus_1.MenuItem({ text: 'New', submenu: newSubmenu }), new phosphor_menus_1.MenuItem({ text: 'Clear Cells', handler: function () { app.commands.execute('console:clear'); } }), new phosphor_menus_1.MenuItem({ text: 'Execute Cell', handler: function () { app.commands.execute('console:execute'); } }), new phosphor_menus_1.MenuItem({ text: 'Interrupt Kernel', handler: function () { app.commands.execute('console:interrupt-kernel'); } }), new phosphor_menus_1.MenuItem({ text: 'Switch Kernel', handler: function () { app.commands.execute('console:switch-kernel'); } }) ]); var consoleMenu = new phosphor_menus_1.MenuItem({ text: 'Console', submenu: menu }); mainMenu.addItem(consoleMenu, { rank: 50 }); return Promise.resolve(void 0); }