function main(): void { let baseUrl = getConfigOption('baseUrl'); let contentsManager = new ContentsManager(baseUrl); let sessionsManager = new NotebookSessionManager({ baseUrl: baseUrl }); let fbModel = new FileBrowserModel(contentsManager, sessionsManager); let fbWidget = new FileBrowserWidget(fbModel) let fileHandler = new FileHandler(contentsManager); let docManager = new DocumentManager(); docManager.registerDefault(fileHandler); let panel = new SplitPanel(); panel.id = 'main'; panel.addChild(fbWidget); SplitPanel.setStretch(fbWidget, 0); let dock = new DockPanel(); panel.addChild(dock); SplitPanel.setStretch(dock, 1); dock.spacing = 8; fbWidget.widgetFactory = model => { return docManager.open(model); }; fbModel.openRequested.connect((fbModel, model) => { let editor = docManager.open(model); dock.insertTabAfter(editor); }); fbModel.fileChanged.connect((fbModel, args) => { docManager.rename(args.oldValue, args.newValue); }); let keymapManager = new KeymapManager(); keymapManager.add([{ sequence: ['Enter'], selector: '.jp-DirListing', handler: () => { fbWidget.open(); return true; } }, { sequence: ['Ctrl N'], // Add emacs keybinding for select next. selector: '.jp-DirListing', handler: () => { fbWidget.selectNext(); return true; } }, { sequence: ['Ctrl P'], // Add emacs keybinding for select previous. selector: '.jp-DirListing', handler: () => { fbWidget.selectPrevious(); return true; } }, { sequence: ['Accel S'], selector: '.jp-CodeMirrorWidget', handler: () => { docManager.save(); return true; } }]); window.addEventListener('keydown', (event) => { keymapManager.processKeydownEvent(event); }); let contextMenu = new Menu([ new MenuItem({ text: '&Open', icon: 'fa fa-folder-open-o', shortcut: 'Ctrl+O', handler: () => { fbWidget.open(); } }), new MenuItem({ text: '&Rename', icon: 'fa fa-edit', shortcut: 'Ctrl+R', handler: () => { fbWidget.rename(); } }), new MenuItem({ text: '&Delete', icon: 'fa fa-remove', shortcut: 'Ctrl+D', handler: () => { fbWidget.delete(); } }), new MenuItem({ text: 'Duplicate', icon: 'fa fa-copy', handler: () => { fbWidget.duplicate(); } }), new MenuItem({ text: 'Cut', icon: 'fa fa-cut', shortcut: 'Ctrl+X', handler: () => { fbWidget.cut(); } }), new MenuItem({ text: '&Copy', icon: 'fa fa-copy', shortcut: 'Ctrl+C', handler: () => { fbWidget.copy(); } }), new MenuItem({ text: '&Paste', icon: 'fa fa-paste', shortcut: 'Ctrl+V', handler: () => { fbWidget.paste(); } }), new MenuItem({ text: 'Download', icon: 'fa fa-download', handler: () => { fbWidget.download(); } }), new MenuItem({ text: 'Revert', handler: () => { docManager.revert(); } }), new MenuItem({ text: 'Shutdown Kernel', icon: 'fa fa-stop-circle-o', handler: () => { fbWidget.shutdownKernels(); } }), ]); // 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 x = event.clientX; let y = event.clientY; contextMenu.popup(x, y); }); panel.attach(document.body); window.onresize = () => panel.update(); }
function main(): void { let baseUrl = getConfigOption('baseUrl'); let contentsManager = new ContentsManager(baseUrl); let sessionsManager = new NotebookSessionManager({ baseUrl: baseUrl }); let fbModel = new FileBrowserModel(contentsManager, sessionsManager); let registry = new FileHandlerRegistry(); let fileHandler = new FileHandler(contentsManager); registry.addDefaultHandler(fileHandler); let fbWidget = new FileBrowserWidget(fbModel, registry); let dirCreator = new FileCreator(contentsManager, 'directory'); let fileCreator = new FileCreator(contentsManager, 'file'); registry.addCreator( 'New Directory', dirCreator.createNew.bind(dirCreator)); registry.addCreator('New File', fileCreator.createNew.bind(fileCreator)); let widgets: CodeMirrorWidget[] = []; registry.opened.connect((r, widget) => { dock.insertTabAfter(widget); widgets.push(widget as CodeMirrorWidget); }); let panel = new SplitPanel(); panel.id = 'main'; panel.addChild(fbWidget); SplitPanel.setStretch(fbWidget, 0); let dock = new DockPanel(); panel.addChild(dock); SplitPanel.setStretch(dock, 1); dock.spacing = 8; let activeWidget: CodeMirrorWidget; document.addEventListener('focus', event => { for (let i = 0; i < widgets.length; i++) { let widget = widgets[i]; if (widget.node.contains(event.target as HTMLElement)) { activeWidget = widget; break; } } }); let keymapManager = new KeymapManager(); keymapManager.add([{ sequence: ['Enter'], selector: '.jp-DirListing', handler: () => { fbWidget.open(); return true; } }, { sequence: ['Ctrl N'], // Add emacs keybinding for select next. selector: '.jp-DirListing', handler: () => { fbWidget.selectNext(); return true; } }, { sequence: ['Ctrl P'], // Add emacs keybinding for select previous. selector: '.jp-DirListing', handler: () => { fbWidget.selectPrevious(); return true; } }, { sequence: ['Accel S'], selector: '.jp-CodeMirrorWidget', handler: () => { let path = fileHandler.findModel(activeWidget).path; fileHandler.save(path); return true; } }]); window.addEventListener('keydown', (event) => { keymapManager.processKeydownEvent(event); }); let contextMenu = new Menu([ new MenuItem({ text: '&Open', icon: 'fa fa-folder-open-o', shortcut: 'Ctrl+O', handler: () => { fbWidget.open(); } }), new MenuItem({ text: '&Rename', icon: 'fa fa-edit', shortcut: 'Ctrl+R', handler: () => { fbWidget.rename(); } }), new MenuItem({ text: '&Delete', icon: 'fa fa-remove', shortcut: 'Ctrl+D', handler: () => { fbWidget.delete(); } }), new MenuItem({ text: 'Duplicate', icon: 'fa fa-copy', handler: () => { fbWidget.duplicate(); } }), new MenuItem({ text: 'Cut', icon: 'fa fa-cut', shortcut: 'Ctrl+X', handler: () => { fbWidget.cut(); } }), new MenuItem({ text: '&Copy', icon: 'fa fa-copy', shortcut: 'Ctrl+C', handler: () => { fbWidget.copy(); } }), new MenuItem({ text: '&Paste', icon: 'fa fa-paste', shortcut: 'Ctrl+V', handler: () => { fbWidget.paste(); } }), new MenuItem({ text: 'Download', icon: 'fa fa-download', handler: () => { fbWidget.download(); } }), new MenuItem({ text: 'Revert', handler: () => { fbWidget.revert(); } }), new MenuItem({ text: 'Shutdown Kernel', icon: 'fa fa-stop-circle-o', handler: () => { fbWidget.shutdownKernels(); } }), new MenuItem({ text: 'Dialog Demo', handler: () => { dialogDemo(); } }), new MenuItem({ text: 'Info Demo', handler: () => { let msg = 'The quick brown fox jumped over the lazy dog' showDialog({ title: 'Cool Title', body: msg, buttons: [okButton] }); } }) ]); // 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 x = event.clientX; let y = event.clientY; contextMenu.popup(x, y); }); panel.attach(document.body); window.onresize = () => panel.update(); }