@@ -22,7 +22,10 @@ import { ISettingRegistry } from '@jupyterlab/settingregistry';
2222import {
2323 filterIcon ,
2424 FilenameSearcher ,
25- IScore
25+ IScore ,
26+ newFolderIcon ,
27+ fileIcon ,
28+ notebookIcon
2629} from '@jupyterlab/ui-components' ;
2730import { CommandRegistry } from '@lumino/commands' ;
2831import { Widget } from '@lumino/widgets' ;
@@ -110,6 +113,7 @@ export const driveFileBrowser: JupyterFrontEndPlugin<void> = {
110113 driveBrowser . title . icon = driveBrowserIcon ;
111114 driveBrowser . title . caption = 'Drive File Browser' ;
112115 driveBrowser . id = 'drive-file-browser' ;
116+ driveBrowser . addClass ( 'drive-browser' ) ;
113117
114118 void Private . restoreBrowser ( driveBrowser , commands , router , tree , labShell ) ;
115119
@@ -118,12 +122,10 @@ export const driveFileBrowser: JupyterFrontEndPlugin<void> = {
118122 restorer . add ( driveBrowser , 'drive-file-browser' ) ;
119123 }
120124
121- toolbarRegistry . addFactory (
122- FILE_BROWSER_FACTORY ,
123- 'uploader' ,
124- ( fileBrowser : FileBrowser ) =>
125- new Uploader ( { model : fileBrowser . model , translator } )
126- ) ;
125+ const uploader = new Uploader ( { model : driveBrowser . model , translator } ) ;
126+ toolbarRegistry . addFactory ( FILE_BROWSER_FACTORY , 'uploader' , ( ) => {
127+ return uploader ;
128+ } ) ;
127129
128130 toolbarRegistry . addFactory (
129131 FILE_BROWSER_FACTORY ,
@@ -147,16 +149,24 @@ export const driveFileBrowser: JupyterFrontEndPlugin<void> = {
147149 }
148150 ) ;
149151
152+ // Add commands
153+ Private . addCommands ( app , drive , driveBrowser ) ;
154+
150155 const updateVisibility = ( ) => {
151- // Visibility of command changed.
156+ // Visibility of context menu and toolbar commands changed.
157+ if ( driveBrowser . model . path !== 's3:' ) {
158+ uploader . enabled = true ;
159+ } else {
160+ uploader . enabled = false ;
161+ }
152162 app . commands . notifyCommandChanged ( CommandIDs . createNewDrive ) ;
163+ app . commands . notifyCommandChanged ( CommandIDs . createNewDirectory ) ;
164+ app . commands . notifyCommandChanged ( CommandIDs . launcher ) ;
153165 } ;
154166
155167 // Listen for path changes.
156168 driveBrowser . model . pathChanged . connect ( updateVisibility ) ;
157-
158- // Add commands
159- Private . addCommands ( app , drive , driveBrowser ) ;
169+ updateVisibility ( ) ;
160170
161171 // Connect the filebrowser toolbar to the settings registry for the plugin.
162172 setToolbar (
@@ -326,7 +336,7 @@ namespace Private {
326336 browser : FileBrowser
327337 ) : void {
328338 app . commands . addCommand ( CommandIDs . createNewDrive , {
329- isVisible : ( ) => {
339+ isEnabled : ( ) => {
330340 return browser . model . path === 's3:' ;
331341 } ,
332342 execute : async ( ) => {
@@ -354,7 +364,7 @@ namespace Private {
354364 app . contextMenu . addItem ( {
355365 command : CommandIDs . createNewDrive ,
356366 selector : '#drive-file-browser.jp-SidePanel .jp-DirListing-content' ,
357- rank : 100
367+ rank : 105
358368 } ) ;
359369
360370 app . commands . addCommand ( CommandIDs . toggleFileFilter , {
@@ -370,5 +380,38 @@ namespace Private {
370380 icon : filterIcon . bindprops ( { stylesheet : 'menuItem' } ) ,
371381 label : 'Toggle File Filter'
372382 } ) ;
383+
384+ app . commands . addCommand ( CommandIDs . createNewDirectory , {
385+ isEnabled : ( ) => {
386+ return browser . model . path !== 's3:' ;
387+ } ,
388+ execute : ( ) => {
389+ app . commands . execute ( 'filebrowser:create-new-directory' ) ;
390+ } ,
391+ icon : newFolderIcon . bindprops ( { stylesheet : 'menuItem' } ) ,
392+ label : 'New Folder'
393+ } ) ;
394+
395+ app . commands . addCommand ( CommandIDs . createNewFile , {
396+ isEnabled : ( ) => {
397+ return browser . model . path !== 's3:' ;
398+ } ,
399+ execute : ( ) => {
400+ app . commands . execute ( 'filebrowser:create-new-file' ) ;
401+ } ,
402+ icon : fileIcon . bindprops ( { stylesheet : 'menuItem' } ) ,
403+ label : 'New File'
404+ } ) ;
405+
406+ app . commands . addCommand ( CommandIDs . createNewNotebook , {
407+ isEnabled : ( ) => {
408+ return browser . model . path !== 's3:' ;
409+ } ,
410+ execute : ( ) => {
411+ app . commands . execute ( 'notebook:create-new' ) ;
412+ } ,
413+ icon : notebookIcon . bindprops ( { stylesheet : 'menuItem' } ) ,
414+ label : 'New Notebook'
415+ } ) ;
373416 }
374417}
0 commit comments