Skip to content

Commit 9c7c3d5

Browse files
authored
Merge pull request #85 from DenisaCG/driveBrowserToolbar
Update drive browser commands visbility
2 parents a19127b + bd3e468 commit 9c7c3d5

File tree

5 files changed

+108
-16
lines changed

5 files changed

+108
-16
lines changed

schema/drives-file-browser.json

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
},
1212
{
1313
"name": "new-directory",
14-
"command": "filebrowser:create-new-directory",
15-
"label": "",
14+
"command": "drives:create-new-directory",
1615
"rank": 10
1716
},
1817
{ "name": "uploader", "label": "", "rank": 20 },
@@ -32,7 +31,46 @@
3231
"name": "new-drive",
3332
"command": "drives:create-new-drive",
3433
"label": "",
35-
"rank": 50
34+
"rank": 5
35+
}
36+
]
37+
},
38+
"jupyter.lab.menus": {
39+
"context": [
40+
{
41+
"command": "filebrowser:create-new-file",
42+
"selector": ".jp-DirListing-content",
43+
"rank": 51,
44+
"disabled": true
45+
},
46+
{
47+
"command": "drives:create-new-file",
48+
"selector": ".jp-DirListing-content",
49+
"rank": 51
50+
},
51+
{
52+
"command": "filebrowser:create-new-directory",
53+
"selector": ".jp-DirListing-content",
54+
"rank": 55,
55+
"disabled": true
56+
},
57+
{
58+
"command": "drives:create-new-directory",
59+
"selector": ".jp-DirListing-content",
60+
"rank": 55
61+
},
62+
{
63+
"command": "notebook:create-new",
64+
"selector": ".jp-DirListing-content",
65+
"args": {
66+
"isContextMenu": true
67+
},
68+
"disabled": true
69+
},
70+
{
71+
"command": "drives:create-new-notebook",
72+
"selector": ".jp-DirListing-content",
73+
"rank": 54
3674
}
3775
]
3876
},

src/plugins/driveBrowserPlugin.ts

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ import { ISettingRegistry } from '@jupyterlab/settingregistry';
2222
import {
2323
filterIcon,
2424
FilenameSearcher,
25-
IScore
25+
IScore,
26+
newFolderIcon,
27+
fileIcon,
28+
notebookIcon
2629
} from '@jupyterlab/ui-components';
2730
import { CommandRegistry } from '@lumino/commands';
2831
import { 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
}

src/plugins/launcherPlugin.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ function activate(
4444
commands.addCommand(CommandIDs.launcher, {
4545
label: trans.__('New Launcher'),
4646
icon: args => (args.toolbar ? addIcon : undefined),
47+
isEnabled: () => {
48+
const currentBrowser = factory?.tracker.currentWidget;
49+
return currentBrowser?.model.path !== 's3:';
50+
},
4751
execute: (args: ReadonlyPartialJSONObject) => {
4852
// get current file browser used
4953
const currentBrowser = factory?.tracker.currentWidget;

src/token.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ export namespace CommandIDs {
1010
export const createNewDrive = 'drives:create-new-drive';
1111
export const launcher = 'launcher:create';
1212
export const toggleFileFilter = 'drives:toggle-file-filter';
13+
export const createNewDirectory = 'drives:create-new-directory';
14+
export const createNewFile = 'drives:create-new-file';
15+
export const createNewNotebook = 'drives:create-new-notebook';
1316
}
1417

1518
/**

style/base.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
44
https://jupyterlab.readthedocs.io/en/stable/developer/css.html
55
*/
6+
.drive-browser {
7+
min-width: 285px !important;
8+
}
9+
610
li {
711
list-style-type: none;
812
}

0 commit comments

Comments
 (0)