|
@@ -29,6 +29,14 @@ import {
|
|
|
Menu, MenuItem, IMenuItemOptions, MenuItemType
|
|
|
} from 'phosphor-menus';
|
|
|
|
|
|
+import {
|
|
|
+ IChangedArgs
|
|
|
+} from 'phosphor-properties';
|
|
|
+
|
|
|
+import {
|
|
|
+ ISignal, Signal
|
|
|
+} from 'phosphor-signaling';
|
|
|
+
|
|
|
import {
|
|
|
Widget
|
|
|
} from 'phosphor-widget';
|
|
@@ -42,6 +50,43 @@ import {
|
|
|
} from '../mainmenu/plugin';
|
|
|
|
|
|
|
|
|
+/**
|
|
|
+ * A class that tracks the current path of the file browser.
|
|
|
+ */
|
|
|
+export
|
|
|
+class PathTracker {
|
|
|
+ /**
|
|
|
+ * A signal emitted when the current path changes.
|
|
|
+ */
|
|
|
+ get pathChanged(): ISignal<PathTracker, IChangedArgs<string>> {
|
|
|
+ return Private.pathChangedSignal.bind(this);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * The current path of the filebrowser.
|
|
|
+ *
|
|
|
+ * #### Notes
|
|
|
+ * This is a read-only property.
|
|
|
+ */
|
|
|
+ get path(): string {
|
|
|
+ return Private.fbWidget ? Private.fbWidget.model.path : '';
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * The default file browser provider.
|
|
|
+ */
|
|
|
+export
|
|
|
+const fileBrowserProvider = {
|
|
|
+ id: 'jupyter.services.fileBrowser',
|
|
|
+ provides: PathTracker,
|
|
|
+ resolve: () => {
|
|
|
+ return Private.pathTracker;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* The default file browser extension.
|
|
|
*/
|
|
@@ -52,6 +97,7 @@ const fileBrowserExtension = {
|
|
|
activate: activateFileBrowser
|
|
|
};
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* The class name for all main area portrait tab icons.
|
|
|
*/
|
|
@@ -98,12 +144,16 @@ function activateFileBrowser(app: Application, manager: ServiceManager, registry
|
|
|
opener
|
|
|
});
|
|
|
let fbModel = new FileBrowserModel({ manager });
|
|
|
- let fbWidget = new FileBrowserWidget({
|
|
|
+ let fbWidget = Private.fbWidget = new FileBrowserWidget({
|
|
|
model: fbModel,
|
|
|
manager: docManager,
|
|
|
opener
|
|
|
});
|
|
|
|
|
|
+ fbModel.pathChanged.connect((sender, args) => {
|
|
|
+ Private.pathTracker.pathChanged.emit(args);
|
|
|
+ });
|
|
|
+
|
|
|
// Add a context menu to the dir listing.
|
|
|
let node = fbWidget.node.getElementsByClassName('jp-DirListing-content')[0];
|
|
|
node.addEventListener('contextmenu', (event: MouseEvent) => {
|
|
@@ -430,3 +480,21 @@ function createMenu(fbWidget: FileBrowserWidget, openWith: MenuItem[]): Menu {
|
|
|
);
|
|
|
return new Menu(items);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * A namespace for private data.
|
|
|
+ */
|
|
|
+namespace Private {
|
|
|
+ export
|
|
|
+ var fbWidget: FileBrowserWidget;
|
|
|
+
|
|
|
+ export
|
|
|
+ const pathTracker = new PathTracker();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * A signal emitted when the current working directory changes.
|
|
|
+ */
|
|
|
+ export
|
|
|
+ const pathChangedSignal = new Signal<PathTracker, IChangedArgs<string>>();
|
|
|
+}
|