Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
it('should save data', async () => {
const ready = new PromiseDelegate();
const restorer = new LayoutRestorer({
connector: new StateDB(),
first: ready.promise,
registry: new CommandRegistry()
});
const currentWidget = new Widget();
// The `fresh` attribute is only here to check against the return value.
const dehydrated: ILabShell.ILayout = {
fresh: false,
mainArea: { currentWidget: null, dock: null, mode: null },
leftArea: {
currentWidget,
collapsed: true,
widgets: [currentWidget]
},
rightArea: { collapsed: true, currentWidget: null, widgets: null }
};
require('@jupyterlab/markdownviewer-extension'),
require('@jupyterlab/mathjax2-extension'),
require('@jupyterlab/notebook-extension'),
require('@jupyterlab/rendermime-extension'),
require('@jupyterlab/running-extension'),
require('@jupyterlab/settingeditor-extension'),
require('@jupyterlab/shortcuts-extension'),
require('@jupyterlab/statusbar-extension'),
require('@jupyterlab/tabmanager-extension'),
require('@jupyterlab/terminal-extension'),
require('@jupyterlab/theme-dark-extension'),
require('@jupyterlab/theme-light-extension'),
require('@jupyterlab/tooltip-extension'),
require('@jupyterlab/ui-components-extension')
];
var lab = new JupyterLab();
lab.registerPluginModules(mods);
/* eslint-disable no-console */
console.log('Starting app');
await lab.start();
console.log('App started, waiting for restore');
await lab.restored;
console.log('Example started!');
});
require('@jupyterlab/markdownviewer-extension'),
require('@jupyterlab/mathjax2-extension'),
require('@jupyterlab/notebook-extension'),
require('@jupyterlab/rendermime-extension'),
require('@jupyterlab/running-extension'),
require('@jupyterlab/settingeditor-extension'),
require('@jupyterlab/shortcuts-extension'),
require('@jupyterlab/statusbar-extension'),
require('@jupyterlab/tabmanager-extension'),
require('@jupyterlab/terminal-extension'),
require('@jupyterlab/theme-dark-extension'),
require('@jupyterlab/theme-light-extension'),
require('@jupyterlab/tooltip-extension'),
require('@jupyterlab/ui-components-extension')
];
var lab = new JupyterLab();
lab.registerPluginModules(mods);
/* eslint-disable no-console */
console.log('Starting app');
await lab.start();
console.log('App started, waiting for restore');
await lab.restored;
console.log('Example started!');
});
id: 'jupyter.extensions.hub-extension',
requires: [JupyterFrontEnd.IPaths, ICommandPalette, IMainMenu],
autoStart: true
};
/**
* The default JupyterLab connection lost provider. This may be overridden
* to provide custom behavior when a connection to the server is lost.
*
* If the application is being deployed within a JupyterHub context,
* this will provide a dialog that prompts the user to restart the server.
* Otherwise, it shows an error dialog.
*/
const connectionlost: JupyterFrontEndPlugin = {
id: '@jupyterlab/apputils-extension:connectionlost',
requires: [JupyterFrontEnd.IPaths],
activate: (
app: JupyterFrontEnd,
paths: JupyterFrontEnd.IPaths
): IConnectionLost => {
const hubPrefix = paths.urls.hubPrefix || '';
const baseUrl = paths.urls.base;
// Return the default error message if not running on JupyterHub.
if (!hubPrefix) {
return ConnectionLost;
}
// If we are running on JupyterHub, return a dialog
// that prompts the user to restart their server.
let showingError = false;
const onConnectionLost: IConnectionLost = async (
activate: async (app: JupyterFrontEnd): Promise => {
const connector = app.serviceManager.settings;
const plugins = (await connector.list()).values;
return new SettingRegistry({ connector, plugins });
},
autoStart: true,
provides: ISettingRegistry
};
/**
* The default theme manager provider.
*/
const themes: JupyterFrontEndPlugin = {
id: '@jupyterlab/apputils-extension:themes',
requires: [ISettingRegistry, JupyterFrontEnd.IPaths],
optional: [ISplashScreen],
activate: (
app: JupyterFrontEnd,
settings: ISettingRegistry,
paths: JupyterFrontEnd.IPaths,
splash: ISplashScreen | null
): IThemeManager => {
const host = app.shell;
const commands = app.commands;
const url = URLExt.join(paths.urls.base, paths.urls.themes);
const key = themes.id;
const manager = new ThemeManager({ key, host, settings, splash, url });
// Keep a synchronously set reference to the current theme,
// since the asynchronous setting of the theme in `changeTheme`
// can lead to an incorrect toggle on the currently used theme.
namespace CommandIDs {
export const changeTheme = 'apputils:change-theme';
export const themeScrollbars = 'apputils:theme-scrollbars';
export const incrFontSize = 'apputils:incr-font-size';
export const decrFontSize = 'apputils:decr-font-size';
}
/**
* The default theme manager provider.
*/
export const themesPlugin: JupyterFrontEndPlugin = {
id: '@jupyterlab/apputils-extension:themes',
requires: [ISettingRegistry, JupyterFrontEnd.IPaths],
optional: [ISplashScreen],
activate: (
app: JupyterFrontEnd,
settings: ISettingRegistry,
paths: JupyterFrontEnd.IPaths,
splash: ISplashScreen | null
): IThemeManager => {
const host = app.shell;
const commands = app.commands;
const url = URLExt.join(paths.urls.base, paths.urls.themes);
const key = themesPlugin.id;
const manager = new ThemeManager({ key, host, settings, splash, url });
// Keep a synchronously set reference to the current theme,
// since the asynchronous setting of the theme in `changeTheme`
// can lead to an incorrect toggle on the currently used theme.
restorer.save(labShell.saveLayout());
});
});
return restorer;
},
autoStart: true,
provides: ILayoutRestorer
};
/**
* The default URL router provider.
*/
const router: JupyterFrontEndPlugin = {
id: '@jupyterlab/application-extension:router',
requires: [JupyterFrontEnd.IPaths],
activate: (app: JupyterFrontEnd, paths: JupyterFrontEnd.IPaths) => {
const { commands } = app;
const base = paths.urls.base;
const router = new Router({ base, commands });
app.started.then(() => {
// Route the very first request on load.
router.route();
// Route all pop state events.
window.addEventListener('popstate', () => {
router.route();
});
});
return router;
activate: (app: JupyterLab) => {
const { commands } = app;
const base = PageConfig.getOption('pageUrl');
const router = new Router({ base, commands });
commands.addCommand(CommandIDs.tree, {
execute: (args: IRouter.ILocation) => {
const path = decodeURIComponent((args.path.match(Patterns.tree)[1]));
// File browser navigation waits for the application to be restored.
// As a result, this command cannot return a promise because it would
// create a circular dependency on the restored promise that would
// cause the application to never restore.
const opened = commands.execute('filebrowser:navigate-main', { path });
// Change the URL back to the base application URL without adding the
// URL change to the browser history.
opened.then(() => { router.navigate('', { silent: true }); });
}
});
activate: (app: JupyterFrontEnd, paths: JupyterFrontEnd.IPaths) => {
const { commands } = app;
const base = paths.urls.base;
const router = new Router({ base, commands });
app.started.then(() => {
// Route the very first request on load.
router.route();
// Route all pop state events.
window.addEventListener('popstate', () => {
router.route();
});
});
return router;
},
autoStart: true,
activate: (app: JupyterLab) => {
const { commands } = app;
const base = PageConfig.getOption('pageUrl');
const router = new Router({ base, commands });
commands.addCommand(CommandIDs.tree, {
execute: (args: IRouter.ILocation) => {
const path = decodeURIComponent((args.path.match(Patterns.tree)[1]));
// File browser navigation waits for the application to be restored.
// As a result, this command cannot return a promise because it would
// create a circular dependency on the restored promise that would
// cause the application to never restore.
const opened = commands.execute('filebrowser:navigate-main', { path });
// Change the URL back to the base application URL without adding the
// URL change to the browser history.
opened.then(() => { router.navigate('', { silent: true }); });
}
});