本文整理匯總了TypeScript中@jupyterlab/apputils.IMainMenu類的典型用法代碼示例。如果您正苦於以下問題:TypeScript IMainMenu類的具體用法?TypeScript IMainMenu怎麽用?TypeScript IMainMenu使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了IMainMenu類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: DocumentManager
activate: (app: JupyterLab, manager: IServiceManager, registry: IDocumentRegistry, palette: ICommandPalette, mainMenu: IMainMenu): IDocumentManager => {
const opener: DocumentManager.IWidgetOpener = {
open: widget => {
if (!widget.id) {
widget.id = `document-manager-${++Private.id}`;
}
if (!widget.isAttached) {
app.shell.addToMainArea(widget);
}
app.shell.activateById(widget.id);
}
};
const docManager = new DocumentManager({ registry, manager, opener });
let menu = createMenu(app, docManager, registry);
populateCreators(app, docManager, registry, palette, menu);
mainMenu.addMenu(menu, { rank: 1 });
// Register the file operations commands.
addCommands(app, docManager, registry, palette);
// Handle fileCreator items as they are added.
registry.changed.connect((sender, args) => {
if (args.type === 'fileCreator') {
menu.dispose();
menu = createMenu(app, docManager, registry);
populateCreators(app, docManager, registry, palette, menu);
mainMenu.addMenu(menu, { rank: 1 });
}
});
return docManager;
}
示例2: activateFileBrowser
/**
* Activate the default file browser in the sidebar.
*/
function activateFileBrowser(app: JupyterLab, factory: IFileBrowserFactory, docManager: IDocumentManager, mainMenu: IMainMenu, palette: ICommandPalette, restorer: ILayoutRestorer): void {
const fbWidget = factory.defaultBrowser;
// Let the application restorer track the primary file browser (that is
// automatically created) for restoration of application state (e.g. setting
// the file browser as the current side bar widget).
//
// All other file browsers created by using the factory function are
// responsible for their own restoration behavior, if any.
restorer.add(fbWidget, namespace);
addCommands(app, factory.tracker, fbWidget);
fbWidget.title.label = 'Files';
app.shell.addToLeftArea(fbWidget, { rank: 100 });
// If the layout is a fresh session without saved data, open file browser.
app.restored.then(layout => {
if (layout.fresh) {
app.commands.execute(CommandIDs.showBrowser, void 0);
}
});
// Create a launcher if there are no open items.
app.shell.layoutModified.connect(() => {
if (app.shell.isEmpty('main')) {
// Make sure the model is restored.
fbWidget.model.restored.then(() => {
app.commands.execute('launcher:create', {
cwd: fbWidget.model.path
});
});
}
});
let menu = createMenu(app);
mainMenu.addMenu(menu, { rank: 1 });
}
示例3: activateConsole
/**
* Activate the console extension.
*/
function activateConsole(app: JupyterLab, manager: IServiceManager, rendermime: IRenderMime, mainMenu: IMainMenu, palette: ICommandPalette, contentFactory: ConsolePanel.IContentFactory, editorServices: IEditorServices, restorer: ILayoutRestorer, launcher: ILauncher | null): IConsoleTracker {
let { commands, shell } = app;
let category = 'Console';
let command: string;
let menu = new Menu({ commands });
// Create an instance tracker for all console panels.
const tracker = new InstanceTracker<ConsolePanel>({
namespace: 'console',
shell
});
// Handle state restoration.
restorer.restore(tracker, {
command: CommandIDs.open,
args: panel => ({
path: panel.console.session.path,
name: panel.console.session.name
}),
name: panel => panel.console.session.path,
when: manager.ready
});
// Add a launcher item if the launcher is available.
if (launcher) {
launcher.add({
name: 'Code Console',
command: CommandIDs.create
});
}
// Set the main menu title.
menu.title.label = category;
/**
* Create a console for a given path.
*/
function createConsole(options: Partial<ConsolePanel.IOptions>): Promise<void> {
return manager.ready.then(() => {
let panel = new ConsolePanel({
manager,
rendermime: rendermime.clone(),
contentFactory,
mimeTypeService: editorServices.mimeTypeService,
...options
});
// Add the console panel to the tracker.
tracker.add(panel);
shell.addToMainArea(panel);
tracker.activate(panel);
});
}
command = CommandIDs.open;
commands.addCommand(command, {
execute: (args: Partial<ConsolePanel.IOptions>) => {
let path = args['path'];
let widget = tracker.find(value => {
if (value.console.session.path === path) {
return true;
}
});
if (widget) {
tracker.activate(widget);
} else {
return manager.ready.then(() => {
let model = find(manager.sessions.running(), item => {
return item.path === path;
});
if (model) {
return createConsole(args);
}
});
}
}
});
command = CommandIDs.create;
commands.addCommand(command, {
label: 'Start New Console',
execute: (args: Partial<ConsolePanel.IOptions>) => {
let basePath = args.basePath || '.';
return createConsole({ basePath, ...args });
}
});
palette.addItem({ command, category });
// Get the current widget and activate unless the args specify otherwise.
function getCurrent(args: JSONObject): ConsolePanel | null {
let widget = tracker.currentWidget;
let activate = args['activate'] !== false;
if (activate && widget) {
tracker.activate(widget);
}
return widget;
}
//.........這裏部分代碼省略.........
示例4: activate
/**
* Activate the help handler extension.
*
* @param app - The phosphide application object.
*
* returns A promise that resolves when the extension is activated.
*/
function activate(app: JupyterLab, mainMenu: IMainMenu, palette: ICommandPalette, restorer: ILayoutRestorer): void {
let counter = 0;
const category = 'Help';
const namespace = 'help-doc';
const command = CommandIDs.open;
const menu = createMenu();
const { commands, shell } = app;
const tracker = new InstanceTracker<ClosableIFrame>({ namespace, shell });
// Handle state restoration.
restorer.restore(tracker, {
command,
args: widget => ({ url: widget.url, text: widget.title.label }),
name: widget => widget.url
});
/**
* Create a new ClosableIFrame widget.
*/
function newClosableIFrame(url: string, text: string): ClosableIFrame {
let iframe = new ClosableIFrame();
iframe.addClass(HELP_CLASS);
iframe.title.label = text;
iframe.title.closable = true;
iframe.id = `${namespace}-${++counter}`;
iframe.url = url;
tracker.add(iframe);
return iframe;
}
/**
* Create a menu for the help plugin.
*/
function createMenu(): Menu {
let { commands } = app;
let menu = new Menu({ commands });
menu.title.label = category;
menu.addItem({ command: 'about-jupyterlab:open' });
menu.addItem({ command: 'faq-jupyterlab:open' });
menu.addItem({ command: CommandIDs.launchClassic });
menu.addItem({ type: 'separator' });
RESOURCES.forEach(args => { menu.addItem({ args, command }); });
menu.addItem({ type: 'separator' });
menu.addItem({ command: 'statedb:clear' });
return menu;
}
commands.addCommand(command, {
label: args => args['text'] as string,
execute: args => {
const url = args['url'] as string;
const text = args['text'] as string;
// If help resource will generate a mixed content error, load externally.
if (LAB_IS_SECURE && URLExt.parse(url).protocol !== 'https:') {
window.open(url);
return;
}
let iframe = newClosableIFrame(url, text);
shell.addToMainArea(iframe);
tracker.activate(iframe);
}
});
commands.addCommand(CommandIDs.launchClassic, {
label: 'Launch Classic Notebook',
execute: () => { window.open(PageConfig.getBaseUrl() + 'tree'); }
});
RESOURCES.forEach(args => { palette.addItem({ args, command, category }); });
palette.addItem({ command: 'statedb:clear', category });
palette.addItem({ command: CommandIDs.launchClassic, category });
mainMenu.addMenu(menu);
}
示例5: activate
/**
* Activate the terminal plugin.
*/
function activate(app: JupyterLab, mainMenu: IMainMenu, palette: ICommandPalette, restorer: ILayoutRestorer, launcher: ILauncher | null): ITerminalTracker {
const { commands, serviceManager } = app;
const category = 'Terminal';
const namespace = 'terminal';
const tracker = new InstanceTracker<Terminal>({ namespace });
// Bail if there are no terminals available.
if (!serviceManager.terminals.isAvailable()) {
console.log('Disabling terminals plugin because they are not available on the server');
return tracker;
}
// Handle state restoration.
restorer.restore(tracker, {
command: CommandIDs.createNew,
args: widget => ({ name: widget.session.name }),
name: widget => widget.session && widget.session.name
});
// Update the command registry when the terminal state changes.
tracker.currentChanged.connect(() => {
if (tracker.size <= 1) {
commands.notifyCommandChanged(CommandIDs.refresh);
}
});
addCommands(app, serviceManager, tracker);
// Add command palette and menu items.
let menu = new Menu({ commands });
menu.title.label = category;
[
CommandIDs.createNew,
CommandIDs.refresh,
CommandIDs.increaseFont,
CommandIDs.decreaseFont,
CommandIDs.toggleTheme
].forEach(command => {
palette.addItem({ command, category });
if (command !== CommandIDs.createNew) {
menu.addItem({ command });
}
});
mainMenu.addMenu(menu, {rank: 40});
// Add a launcher item if the launcher is available.
if (launcher) {
launcher.add({
displayName: 'Terminal',
category: 'Other',
rank: 0,
iconClass: TERMINAL_ICON_CLASS,
callback: () => {
return commands.execute(CommandIDs.createNew);
}
});
}
app.contextMenu.addItem({command: CommandIDs.refresh, selector: '.jp-Terminal', rank: 1});
return tracker;
}
示例6: activateEditorCommands
/**
* Set up the editor widget menu and commands.
*/
function activateEditorCommands(app: JupyterLab, tracker: IEditorTracker, mainMenu: IMainMenu, palette: ICommandPalette): void {
let { commands } = app;
/**
* Toggle editor matching brackets
*/
function toggleMatchBrackets(): void {
if (tracker.currentWidget) {
let editor = tracker.currentWidget.editor;
if (editor instanceof CodeMirrorEditor) {
let cm = editor.editor;
cm.setOption('matchBrackets', !cm.getOption('matchBrackets'));
}
}
}
/**
* Toggle the editor's vim mode
*/
function toggleVim(): void {
tracker.forEach(widget => {
if (widget.editor instanceof CodeMirrorEditor) {
let cm = widget.editor.editor;
let keymap = cm.getOption('keyMap') === 'vim' ? 'default'
: 'vim';
cm.setOption('keyMap', keymap);
}
});
}
/**
* Create a menu for the editor.
*/
function createMenu(): Menu {
let theme = new Menu({ commands });
let menu = new Menu({ commands });
menu.title.label = 'Editor';
theme.title.label = 'Theme';
commands.addCommand(CommandIDs.changeTheme, {
label: args => args['theme'] as string,
execute: args => {
let name = args['theme'] as string || CodeMirrorEditor.DEFAULT_THEME;
tracker.forEach(widget => {
if (widget.editor instanceof CodeMirrorEditor) {
let cm = widget.editor.editor;
cm.setOption('theme', name);
}
});
}
});
[
'jupyter', 'default', 'abcdef', 'base16-dark', 'base16-light',
'hopscotch', 'material', 'mbo', 'mdn-like', 'seti', 'the-matrix',
'xq-light', 'zenburn'
].forEach(name => theme.addItem({
command: 'codemirror:change-theme',
args: { theme: name }
}));
menu.addItem({ command: 'editor:line-numbers' });
menu.addItem({ command: 'editor:line-wrap' });
menu.addItem({ command: CommandIDs.matchBrackets });
menu.addItem({ command: CommandIDs.vimMode });
menu.addItem({ type: 'separator' });
menu.addItem({ type: 'submenu', submenu: theme });
return menu;
}
mainMenu.addMenu(createMenu(), { rank: 30 });
commands.addCommand(CommandIDs.matchBrackets, {
execute: () => { toggleMatchBrackets(); },
label: 'Toggle Match Brackets',
});
commands.addCommand(CommandIDs.vimMode, {
execute: () => { toggleVim(); },
label: 'Toggle Vim Mode'
});
[
'editor:line-numbers',
'editor:line-wrap',
CommandIDs.matchBrackets,
CommandIDs.vimMode,
'editor:create-console',
'editor:run-code'
].forEach(command => palette.addItem({ command, category: 'Editor' }));
}
示例7: activateEditorCommands
/**
* Set up the editor widget menu and commands.
*/
function activateEditorCommands(app: JupyterLab, tracker: IEditorTracker, mainMenu: IMainMenu, palette: ICommandPalette, state: IStateDB, settingRegistry: ISettingRegistry): void {
const { commands, restored } = app;
const { id } = commandsPlugin;
let { theme, keyMap } = CodeMirrorEditor.defaultConfig;
/**
* Update the setting values.
*/
function updateSettings(settings: ISettingRegistry.ISettings): void {
keyMap = settings.get('keyMap').composite as string | null || keyMap;
theme = settings.get('theme').composite as string | null || theme;
}
/**
* Update the settings of the current tracker instances.
*/
function updateTracker(): void {
tracker.forEach(widget => {
if (widget.editor instanceof CodeMirrorEditor) {
let cm = widget.editor.editor;
cm.setOption('keyMap', keyMap);
cm.setOption('theme', theme);
}
});
}
// Fetch the initial state of the settings.
Promise.all([settingRegistry.load(id), restored]).then(([settings]) => {
updateSettings(settings);
updateTracker();
settings.changed.connect(() => {
updateSettings(settings);
updateTracker();
});
}).catch((reason: Error) => {
console.error(reason.message);
updateTracker();
});
/**
* Handle the settings of new widgets.
*/
tracker.widgetAdded.connect((sender, widget) => {
if (widget.editor instanceof CodeMirrorEditor) {
let cm = widget.editor.editor;
cm.setOption('keyMap', keyMap);
cm.setOption('theme', theme);
}
});
// Update the command registry when the codemirror state changes.
tracker.currentChanged.connect(() => {
if (tracker.size <= 1) {
commands.notifyCommandChanged(CommandIDs.changeKeyMap);
}
});
/**
* A test for whether the tracker has an active widget.
*/
function hasWidget(): boolean {
return tracker.currentWidget !== null;
}
/**
* Create a menu for the editor.
*/
function createMenu(): Menu {
const menu = new Menu({ commands });
const themeMenu = new Menu({ commands });
const keyMapMenu = new Menu({ commands });
const modeMenu = new Menu({ commands });
const tabMenu = new Menu({ commands });
menu.title.label = 'Editor';
themeMenu.title.label = 'Theme';
keyMapMenu.title.label = 'Key Map';
modeMenu.title.label = 'Language';
tabMenu.title.label = 'Tabs';
commands.addCommand(CommandIDs.changeTheme, {
label: args => args['theme'] as string,
execute: args => {
const key = 'theme';
const value = theme = args['theme'] as string || theme;
updateTracker();
return settingRegistry.set(id, key, value).catch((reason: Error) => {
console.error(`Failed to set ${id}:${key} - ${reason.message}`);
});
},
isEnabled: hasWidget,
isToggled: args => args['theme'] === theme
});
commands.addCommand(CommandIDs.changeKeyMap, {
label: args => {
//.........這裏部分代碼省略.........
示例8: activateFileBrowserMenu
/**
* Activate the default file browser menu in the main menu.
*/
function activateFileBrowserMenu(app: JupyterLab, mainMenu: IMainMenu): void {
let menu = createMenu(app);
mainMenu.addMenu(menu, { rank: 1 });
}
示例9: activateFileBrowser
/**
* Activate the file browser in the sidebar.
*/
function activateFileBrowser(app: JupyterLab, factory: IFileBrowserFactory, manager: IServiceManager, documentManager: IDocumentManager, registry: IDocumentRegistry, mainMenu: IMainMenu, palette: ICommandPalette, restorer: ILayoutRestorer): void {
const { commands } = app;
const category = 'File Operations';
const fbWidget = factory.createFileBrowser('filebrowser', {
commands: commands,
documentManager: documentManager,
serviceManager: manager
});
// Let the application restorer track the primary file browser (that is
// automatically created) for restoration of application state (e.g. setting
// the file browser as the current side bar widget).
//
// All other file browsers created by using the factory function are
// responsible for their own restoration behavior, if any.
restorer.add(fbWidget, namespace);
let creatorCmds: { [key: string]: DisposableSet } = Object.create(null);
let addCreator = (name: string) => {
let disposables = creatorCmds[name] = new DisposableSet();
let command = Private.commandForName(name);
disposables.add(commands.addCommand(command, {
execute: () => fbWidget.createFrom(name),
label: `New ${name}`
}));
disposables.add(palette.addItem({ command, category }));
};
each(registry.creators(), creator => { addCreator(creator.name); });
// Add a context menu to the dir listing.
let node = fbWidget.node.getElementsByClassName('jp-DirListing-content')[0];
node.addEventListener('contextmenu', (event: MouseEvent) => {
event.preventDefault();
let path = fbWidget.pathForClick(event) || '';
let ext = DocumentRegistry.extname(path);
let factories = registry.preferredWidgetFactories(ext);
let widgetNames = toArray(map(factories, factory => factory.name));
let prefix = `${namespace}-contextmenu-${++Private.id}`;
let openWith: Menu = null;
if (path && widgetNames.length > 1) {
let disposables = new DisposableSet();
let command: string;
openWith = new Menu({ commands });
openWith.title.label = 'Open With...';
openWith.disposed.connect(() => { disposables.dispose(); });
for (let widgetName of widgetNames) {
command = `${prefix}:${widgetName}`;
disposables.add(commands.addCommand(command, {
execute: () => fbWidget.openPath(path, widgetName),
label: widgetName
}));
openWith.addItem({ command });
}
}
let menu = createContextMenu(fbWidget, openWith);
menu.open(event.clientX, event.clientY);
});
addCommands(app, fbWidget);
let menu = createMenu(app, Object.keys(creatorCmds));
mainMenu.addMenu(menu, { rank: 1 });
fbWidget.title.label = 'Files';
app.shell.addToLeftArea(fbWidget, { rank: 100 });
// If the layout is a fresh session without saved data, open file browser.
app.restored.then(layout => {
if (layout.fresh) {
app.commands.execute(CommandIDs.showBrowser, void 0);
}
});
// Handle fileCreator items as they are added.
registry.changed.connect((sender, args) => {
if (args.type === 'fileCreator') {
menu.dispose();
let name = args.name;
if (args.change === 'added') {
addCreator(name);
} else {
creatorCmds[name].dispose();
delete creatorCmds[name];
}
menu = createMenu(app, Object.keys(creatorCmds));
mainMenu.addMenu(menu, { rank: 1 });
}
});
}
示例10: activateConsole
/**
* Activate the console extension.
*/
function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommandPalette, contentFactory: ConsolePanel.IContentFactory, editorServices: IEditorServices, restorer: ILayoutRestorer, launcher: ILauncher | null): IConsoleTracker {
let manager = app.serviceManager;
let { commands, shell } = app;
let category = 'Console';
let command: string;
let menu = new Menu({ commands });
// Create an instance tracker for all console panels.
const tracker = new InstanceTracker<ConsolePanel>({ namespace: 'console' });
// Handle state restoration.
restorer.restore(tracker, {
command: CommandIDs.open,
args: panel => ({
path: panel.console.session.path,
name: panel.console.session.name
}),
name: panel => panel.console.session.path,
when: manager.ready
});
// Update the command registry when the console state changes.
tracker.currentChanged.connect(() => {
if (tracker.size <= 1) {
commands.notifyCommandChanged(CommandIDs.interrupt);
}
});
// The launcher callback.
let callback = (cwd: string, name: string) => {
return createConsole({ basePath: cwd, kernelPreference: { name } });
};
// Add a launcher item if the launcher is available.
if (launcher) {
manager.ready.then(() => {
const specs = manager.specs;
if (!specs) {
return;
}
let baseUrl = PageConfig.getBaseUrl();
for (let name in specs.kernelspecs) {
let displayName = specs.kernelspecs[name].display_name;
let rank = name === specs.default ? 0 : Infinity;
let kernelIconUrl = specs.kernelspecs[name].resources['logo-64x64'];
if (kernelIconUrl) {
let index = kernelIconUrl.indexOf('kernelspecs');
kernelIconUrl = baseUrl + kernelIconUrl.slice(index);
}
launcher.add({
displayName,
category: 'Console',
name,
iconClass: 'jp-CodeConsoleIcon',
callback,
rank,
kernelIconUrl
});
}
});
}
// Set the main menu title.
menu.title.label = category;
/**
* Create a console for a given path.
*/
function createConsole(options: Partial<ConsolePanel.IOptions>): Promise<ConsolePanel> {
return manager.ready.then(() => {
let panel = new ConsolePanel({
manager,
rendermime: app.rendermime.clone(),
contentFactory,
mimeTypeService: editorServices.mimeTypeService,
...options
});
// Add the console panel to the tracker.
tracker.add(panel);
shell.addToMainArea(panel);
shell.activateById(panel.id);
return panel;
});
}
/**
* Whether there is an active console.
*/
function hasWidget(): boolean {
return tracker.currentWidget !== null;
}
command = CommandIDs.open;
commands.addCommand(command, {
execute: (args: Partial<ConsolePanel.IOptions>) => {
let path = args['path'];
//.........這裏部分代碼省略.........
示例11: activateNotebookHandler
/**
* Activate the notebook handler extension.
*/
function activateNotebookHandler(app: JupyterLab, mainMenu: IMainMenu, palette: ICommandPalette, contentFactory: NotebookPanel.IContentFactory, editorServices: IEditorServices, restorer: ILayoutRestorer, launcher: ILauncher | null): INotebookTracker {
const services = app.serviceManager;
const factory = new NotebookWidgetFactory({
name: FACTORY,
fileTypes: ['notebook'],
modelName: 'notebook',
defaultFor: ['notebook'],
preferKernel: true,
canStartKernel: true,
rendermime: app.rendermime,
contentFactory,
mimeTypeService: editorServices.mimeTypeService
});
const { commands } = app;
const tracker = new NotebookTracker({ namespace: 'notebook' });
// Handle state restoration.
restorer.restore(tracker, {
command: 'docmanager:open',
args: panel => ({ path: panel.context.path, factory: FACTORY }),
name: panel => panel.context.path,
when: services.ready
});
// Update the command registry when the notebook state changes.
tracker.currentChanged.connect(() => {
if (tracker.size <= 1) {
commands.notifyCommandChanged(CommandIDs.interrupt);
}
});
let registry = app.docRegistry;
registry.addModelFactory(new NotebookModelFactory({}));
registry.addWidgetFactory(factory);
registry.addCreator({
name: 'Notebook',
fileType: 'Notebook',
widgetName: 'Notebook'
});
addCommands(app, services, tracker);
populatePalette(palette);
let id = 0; // The ID counter for notebook panels.
factory.widgetCreated.connect((sender, widget) => {
// If the notebook panel does not have an ID, assign it one.
widget.id = widget.id || `notebook-${++id}`;
widget.title.icon = NOTEBOOK_ICON_CLASS;
// Notify the instance tracker if restore data needs to update.
widget.context.pathChanged.connect(() => { tracker.save(widget); });
// Add the notebook panel to the tracker.
tracker.add(widget);
});
// Add main menu notebook menu.
mainMenu.addMenu(createMenu(app), { rank: 20 });
// The launcher callback.
let callback = (cwd: string, name: string) => {
return commands.execute(
'docmanager:new-untitled', { path: cwd, type: 'notebook' }
).then(model => {
return commands.execute('docmanager:open', {
path: model.path, factory: FACTORY,
kernel: { name }
});
});
};
// Add a launcher item if the launcher is available.
if (launcher) {
services.ready.then(() => {
let specs = services.specs;
let baseUrl = PageConfig.getBaseUrl();
for (let name in specs.kernelspecs) {
let displayName = specs.kernelspecs[name].display_name;
let rank = name === specs.default ? 0 : Infinity;
let kernelIconUrl = specs.kernelspecs[name].resources['logo-64x64'];
if (kernelIconUrl) {
let index = kernelIconUrl.indexOf('kernelspecs');
kernelIconUrl = baseUrl + kernelIconUrl.slice(index);
}
launcher.add({
displayName,
category: 'Notebook',
name,
iconClass: 'jp-NotebookRunningIcon',
callback,
rank,
kernelIconUrl
});
}
});
}
app.contextMenu.addItem({command: CommandIDs.clearOutputs, selector: '.jp-Notebook .jp-Cell'});
//.........這裏部分代碼省略.........
示例12: activateEditorCommands
/**
* Set up the editor widget menu and commands.
*/
function activateEditorCommands(app: JupyterLab, tracker: IEditorTracker, mainMenu: IMainMenu, palette: ICommandPalette, state: IStateDB): void {
let { commands } = app;
let theme: string = CodeMirrorEditor.DEFAULT_THEME;
let keyMap: string = 'default';
let matchBrackets = false;
let id = 'codemirror:settings';
// Fetch the initial state of the settings.
state.fetch(id).then(settings => {
if (!settings) {
return;
}
if (typeof settings['theme'] === 'string') {
commands.execute(CommandIDs.changeTheme, settings);
}
if (typeof settings['keyMap'] === 'string') {
commands.execute(CommandIDs.changeKeyMap, settings);
}
if (typeof settings['matchBrackets'] === 'boolean') {
if (settings['matchBrackets'] !== matchBrackets) {
commands.execute(CommandIDs.matchBrackets);
}
}
});
/**
* Save the codemirror settings state.
*/
function saveState(): Promise<void> {
return state.save(id, { theme, keyMap, matchBrackets });
}
/**
* Handle the settings of new widgets.
*/
tracker.widgetAdded.connect((sender, widget) => {
if (widget.editor instanceof CodeMirrorEditor) {
let cm = widget.editor.editor;
cm.setOption('keyMap', keyMap);
cm.setOption('theme', theme);
cm.setOption('matchBrackets', matchBrackets);
}
});
/**
* A test for whether the tracker has an active widget.
*/
function hasWidget(): boolean {
return tracker.currentWidget !== null;
}
/**
* Toggle editor matching brackets
*/
function toggleMatchBrackets(): Promise<void> {
matchBrackets = !matchBrackets;
tracker.forEach(widget => {
let editor = widget.editor;
if (editor instanceof CodeMirrorEditor) {
let cm = editor.editor;
cm.setOption('matchBrackets', matchBrackets);
}
});
return saveState();
}
/**
* Create a menu for the editor.
*/
function createMenu(): Menu {
let menu = new Menu({ commands });
let themeMenu = new Menu({ commands });
let keyMapMenu = new Menu({ commands });
menu.title.label = 'Editor';
themeMenu.title.label = 'Theme';
keyMapMenu.title.label = 'Key Map';
commands.addCommand(CommandIDs.changeTheme, {
label: args => args['theme'] as string,
execute: args => {
theme = args['theme'] as string || CodeMirrorEditor.DEFAULT_THEME;
tracker.forEach(widget => {
if (widget.editor instanceof CodeMirrorEditor) {
let cm = widget.editor.editor;
cm.setOption('theme', theme);
}
});
return saveState();
},
isEnabled: hasWidget,
isToggled: args => { return args['theme'] === theme; }
});
commands.addCommand(CommandIDs.changeKeyMap, {
label: args => {
//.........這裏部分代碼省略.........
示例13: activate
/**
* Activate the terminal plugin.
*/
function activate(app: JupyterLab, services: IServiceManager, mainMenu: IMainMenu, palette: ICommandPalette, restorer: ILayoutRestorer, launcher: ILauncher | null): ITerminalTracker {
// Bail if there are no terminals available.
if (!services.terminals.isAvailable()) {
console.log('Disabling terminals plugin because they are not available on the server');
return;
}
const { commands, shell } = app;
const category = 'Terminal';
const namespace = 'terminal';
const tracker = new InstanceTracker<TerminalWidget>({ namespace, shell });
// Handle state restoration.
restorer.restore(tracker, {
command: CommandIDs.createNew,
args: widget => ({ name: widget.session.name }),
name: widget => widget.session && widget.session.name
});
addDefaultCommands(tracker, commands);
// Add terminal commands.
commands.addCommand(CommandIDs.createNew, {
label: 'New Terminal',
caption: 'Start a new terminal session',
execute: args => {
let name = args ? args['name'] as string : '';
let term = new TerminalWidget();
term.title.closable = true;
term.title.icon = TERMINAL_ICON_CLASS;
term.title.label = '...';
shell.addToMainArea(term);
let promise = name ?
services.terminals.connectTo(name)
: services.terminals.startNew();
return promise.then(session => {
term.session = session;
tracker.add(term);
tracker.activate(term);
}).catch(() => { term.dispose(); });
}
});
commands.addCommand(CommandIDs.open, {
execute: args => {
let name = args['name'] as string;
// Check for a running terminal with the given name.
let widget = tracker.find(value => value.session.name === name);
if (widget) {
tracker.activate(widget);
} else {
// Otherwise, create a new terminal with a given name.
return commands.execute(CommandIDs.createNew, { name });
}
}
});
commands.addCommand(CommandIDs.refresh, {
label: 'Refresh Terminal',
caption: 'Refresh the current terminal session',
execute: () => {
let current = tracker.currentWidget;
if (!current) {
return;
}
tracker.activate(current);
return current.refresh().then(() => {
current.activate();
});
},
isEnabled: () => { return tracker.currentWidget !== null; }
});
// Add command palette and menu items.
let menu = new Menu({ commands });
menu.title.label = category;
[
CommandIDs.createNew,
CommandIDs.refresh,
CommandIDs.increaseFont,
CommandIDs.decreaseFont,
CommandIDs.toggleTheme
].forEach(command => {
palette.addItem({ command, category });
menu.addItem({ command });
});
mainMenu.addMenu(menu, {rank: 40});
// Add a launcher item if the launcher is available.
if (launcher) {
launcher.add({
name: 'Terminal',
command: CommandIDs.createNew
});
}
//.........這裏部分代碼省略.........
示例14: activateNotebookHandler
/**
* Activate the notebook handler extension.
*/
function activateNotebookHandler(app: JupyterLab, registry: IDocumentRegistry, services: IServiceManager, rendermime: IRenderMime, mainMenu: IMainMenu, palette: ICommandPalette, contentFactory: NotebookPanel.IContentFactory, editorServices: IEditorServices, restorer: ILayoutRestorer, launcher: ILauncher | null): INotebookTracker {
const factory = new NotebookWidgetFactory({
name: FACTORY,
fileExtensions: ['.ipynb'],
modelName: 'notebook',
defaultFor: ['.ipynb'],
preferKernel: true,
canStartKernel: true,
rendermime,
contentFactory,
mimeTypeService: editorServices.mimeTypeService
});
const shell = app.shell;
const tracker = new NotebookTracker({ namespace: 'notebook', shell });
// Handle state restoration.
restorer.restore(tracker, {
command: 'file-operations:open',
args: panel => ({ path: panel.context.path, factory: FACTORY }),
name: panel => panel.context.path,
when: services.ready
});
registry.addModelFactory(new NotebookModelFactory({}));
registry.addWidgetFactory(factory);
registry.addFileType({
name: 'Notebook',
extension: '.ipynb',
contentType: 'notebook',
fileFormat: 'json'
});
registry.addCreator({
name: 'Notebook',
fileType: 'Notebook',
widgetName: 'Notebook'
});
addCommands(app, services, tracker);
populatePalette(palette);
let id = 0; // The ID counter for notebook panels.
factory.widgetCreated.connect((sender, widget) => {
// If the notebook panel does not have an ID, assign it one.
widget.id = widget.id || `notebook-${++id}`;
widget.title.icon = NOTEBOOK_ICON_CLASS;
// Notify the instance tracker if restore data needs to update.
widget.context.pathChanged.connect(() => { tracker.save(widget); });
// Add the notebook panel to the tracker.
tracker.add(widget);
});
// Add main menu notebook menu.
mainMenu.addMenu(createMenu(app), { rank: 20 });
// Add a launcher item if the launcher is available.
if (launcher) {
launcher.add({
args: { creatorName: 'Notebook' },
command: 'file-operations:create-from',
name: 'Notebook'
});
}
app.contextMenu.addItem({command: CommandIDs.clearOutputs, selector: '.jp-Notebook .jp-Cell'});
app.contextMenu.addItem({command: CommandIDs.split, selector: '.jp-Notebook .jp-Cell'});
app.contextMenu.addItem({ type: 'separator', selector: '.jp-Notebook', rank: 0 });
app.contextMenu.addItem({command: CommandIDs.undo, selector: '.jp-Notebook', rank: 1});
app.contextMenu.addItem({command: CommandIDs.redo, selector: '.jp-Notebook', rank: 2});
app.contextMenu.addItem({ type: 'separator', selector: '.jp-Notebook', rank: 0 });
app.contextMenu.addItem({command: CommandIDs.createConsole, selector: '.jp-Notebook', rank: 3});
return tracker;
}
示例15: activate
/**
* Activate the help handler extension.
*
* @param app - The phosphide application object.
*
* returns A promise that resolves when the extension is activated.
*/
function activate(app: JupyterLab, mainMenu: IMainMenu, palette: ICommandPalette, restorer: ILayoutRestorer): void {
let counter = 0;
const category = 'Help';
const namespace = 'help-doc';
const menu = createMenu();
const { commands, shell, info} = app;
const tracker = new InstanceTracker<HelpWidget>({ namespace });
// Handle state restoration.
restorer.restore(tracker, {
command: CommandIDs.open,
args: widget => ({ url: widget.url, text: widget.title.label }),
name: widget => widget.url
});
/**
* Create a new HelpWidget widget.
*/
function newClosableIFrame(url: string, text: string): HelpWidget {
let iframe = new HelpWidget(url);
iframe.addClass(HELP_CLASS);
iframe.title.label = text;
iframe.title.closable = true;
iframe.id = `${namespace}-${++counter}`;
tracker.add(iframe);
return iframe;
}
/**
* Create a menu for the help plugin.
*/
function createMenu(): Menu {
let { commands } = app;
let menu = new Menu({ commands });
menu.title.label = category;
menu.addItem({ command: CommandIDs.about });
menu.addItem({ command: 'faq-jupyterlab:open' });
menu.addItem({ command: CommandIDs.launchClassic });
menu.addItem({ type: 'separator' });
RESOURCES.forEach(args => {
menu.addItem({ args, command: CommandIDs.open });
});
menu.addItem({ type: 'separator' });
menu.addItem({ command: 'apputils:clear-statedb' });
return menu;
}
commands.addCommand(CommandIDs.about, {
label: `About ${info.name}`,
execute: () => {
// Create the header of the about dialog
let headerLogo = h.div({className: 'jp-About-header-logo'});
let headerWordmark = h.div({className: 'jp-About-header-wordmark'});
let release = 'alpha release';
let versionNumber = `version: ${info.version}`;
let versionInfo = h.span({className: 'jp-About-version-info'},
h.span({className: 'jp-About-release'}, release),
h.span({className: 'jp-About-version'}, versionNumber)
);
let title = h.span({className: 'jp-About-header'},
headerLogo,
h.div({className: 'jp-About-header-info'},
headerWordmark,
versionInfo
)
);
// Create the body of the about dialog
let jupyterURL = 'https://jupyter.org/about.html';
let contributorsURL = 'https://github.com/jupyterlab/jupyterlab/graphs/contributors';
let externalLinks = h.span({className: 'jp-About-externalLinks'},
h.a({href: contributorsURL, target: '_blank', className: 'jp-Button-flat'}, 'CONTRIBUTOR LIST'),
h.a({href: jupyterURL, target: '_blank', className: 'jp-Button-flat'}, 'ABOUT PROJECT JUPYTER')
);
let copyright = h.span({className: 'jp-About-copyright'}, 'Š 2017 Project Jupyter');
let body = h.div({ className: 'jp-About-body' },
externalLinks,
copyright
);
showDialog({
title,
body,
buttons: [Dialog.createButton({label: 'DISMISS', className: 'jp-About-button jp-mod-reject jp-mod-styled'})]
});
}
});
commands.addCommand(CommandIDs.open, {
label: args => args['text'] as string,
//.........這裏部分代碼省略.........