UNPKG

@jupyter-notebook/application

Version:

Jupyter Notebook - Application

162 lines (161 loc) 5.83 kB
// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { JupyterLab, JupyterFrontEnd, } from '@jupyterlab/application'; import { Base64ModelFactory } from '@jupyterlab/docregistry'; import { createRendermimePlugins } from '@jupyterlab/application/lib/mimerenderers'; import { LabStatus } from '@jupyterlab/application/lib/status'; import { PageConfig } from '@jupyterlab/coreutils'; import { Throttler } from '@lumino/polling'; import { NotebookShell } from './shell'; /** * App is the main application class. It is instantiated once and shared. */ export class NotebookApp extends JupyterFrontEnd { /** * Construct a new NotebookApp object. * * @param options The instantiation options for an application. */ constructor(options = { shell: new NotebookShell() }) { var _a, _b; super({ ...options, shell: (_a = options.shell) !== null && _a !== void 0 ? _a : new NotebookShell() }); /** * The name of the application. */ this.name = 'Jupyter Notebook'; /** * A namespace/prefix plugins may use to denote their provenance. */ this.namespace = this.name; /** * The application busy and dirty status signals and flags. */ this.status = new LabStatus(this); /** * The version of the application. */ this.version = (_b = PageConfig.getOption('appVersion')) !== null && _b !== void 0 ? _b : 'unknown'; this._info = JupyterLab.defaultInfo; this._formatter = new Throttler(() => { Private.setFormat(this); }, 250); // Add initial model factory. this.docRegistry.addModelFactory(new Base64ModelFactory()); if (options.mimeExtensions) { for (const plugin of createRendermimePlugins(options.mimeExtensions)) { this.registerPlugin(plugin); } } // Create an IInfo dictionary from the options to override the defaults. const info = Object.keys(JupyterLab.defaultInfo).reduce((acc, val) => { if (val in options) { acc[val] = JSON.parse(JSON.stringify(options[val])); } return acc; }, {}); // Populate application info. this._info = { ...JupyterLab.defaultInfo, ...info }; this.restored = this.shell.restored; this.restored.then(() => this._formatter.invoke()); } /** * The NotebookApp application information dictionary. */ get info() { return this._info; } /** * The JupyterLab application paths dictionary. */ get paths() { return { urls: { base: PageConfig.getOption('baseUrl'), notFound: PageConfig.getOption('notFoundUrl'), app: PageConfig.getOption('appUrl'), static: PageConfig.getOption('staticUrl'), settings: PageConfig.getOption('settingsUrl'), themes: PageConfig.getOption('themesUrl'), doc: PageConfig.getOption('docUrl'), translations: PageConfig.getOption('translationsApiUrl'), hubHost: PageConfig.getOption('hubHost') || undefined, hubPrefix: PageConfig.getOption('hubPrefix') || undefined, hubUser: PageConfig.getOption('hubUser') || undefined, hubServerName: PageConfig.getOption('hubServerName') || undefined, }, directories: { 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'), workspaces: PageConfig.getOption('workspacesDir'), }, }; } /** * Handle the DOM events for the application. * * @param event - The DOM event sent to the application. */ handleEvent(event) { super.handleEvent(event); if (event.type === 'resize') { void this._formatter.invoke(); } } /** * Register plugins from a plugin module. * * @param mod - The plugin module to register. */ registerPluginModule(mod) { let data = mod.default; // Handle commonjs exports. if (!Object.prototype.hasOwnProperty.call(mod, '__esModule')) { data = mod; } if (!Array.isArray(data)) { data = [data]; } data.forEach((item) => { try { this.registerPlugin(item); } catch (error) { console.error(error); } }); } /** * Register the plugins from multiple plugin modules. * * @param mods - The plugin modules to register. */ registerPluginModules(mods) { mods.forEach((mod) => { this.registerPluginModule(mod); }); } } /** * A namespace for module-private functionality. */ var Private; (function (Private) { /** * Media query for mobile devices. */ const MOBILE_QUERY = 'only screen and (max-width: 760px)'; /** * Sets the `format` of a Jupyter front-end application. * * @param app The front-end application whose format is set. */ function setFormat(app) { app.format = window.matchMedia(MOBILE_QUERY).matches ? 'mobile' : 'desktop'; } Private.setFormat = setFormat; })(Private || (Private = {}));