瀏覽代碼

add 'New Folder' to filebrowser context menu

James Reeve 6 年之前
父節點
當前提交
05ef15a9bf
共有 2 個文件被更改,包括 53 次插入25 次删除
  1. 28 8
      packages/filebrowser-extension/src/index.ts
  2. 25 17
      packages/filebrowser/src/browser.ts

+ 28 - 8
packages/filebrowser-extension/src/index.ts

@@ -67,6 +67,8 @@ namespace CommandIDs {
 
   export const paste = 'filebrowser:paste';
 
+  export const createNewDirectory = 'filebrowser:create-new-directory';
+
   export const rename = 'filebrowser:rename';
 
   // For main browser only.
@@ -437,6 +439,18 @@ function addCommands(
     mnemonic: 0
   });
 
+  commands.addCommand(CommandIDs.createNewDirectory, {
+    execute: () => {
+      const widget = tracker.currentWidget;
+
+      if (widget) {
+        return widget.createNewDirectory();
+      }
+    },
+    iconClass: 'jp-MaterialIcon jp-NewFolderIcon',
+    label: 'New Folder'
+  });
+
   commands.addCommand(CommandIDs.rename, {
     execute: args => {
       const widget = tracker.currentWidget;
@@ -620,14 +634,20 @@ function addCommands(
   // matches only non-directory items
   const selectorNotDir = '.jp-DirListing-item[data-isdir="false"]';
 
-  // If the user did not click on any file, we still want to show paste,
+  // If the user did not click on any file, we still want to show paste and new folder,
   // so target the content rather than an item.
   app.contextMenu.addItem({
-    command: CommandIDs.paste,
+    command: CommandIDs.createNewDirectory,
     selector: selectorContent,
     rank: 1
   });
 
+  app.contextMenu.addItem({
+    command: CommandIDs.paste,
+    selector: selectorContent,
+    rank: 2
+  });
+
   app.contextMenu.addItem({
     command: CommandIDs.open,
     selector: selectorItem,
@@ -674,33 +694,33 @@ function addCommands(
   app.contextMenu.addItem({
     command: CommandIDs.duplicate,
     selector: selectorNotDir,
-    rank: 9
+    rank: 8
   });
   app.contextMenu.addItem({
     command: CommandIDs.download,
     selector: selectorNotDir,
-    rank: 10
+    rank: 9
   });
   app.contextMenu.addItem({
     command: CommandIDs.shutdown,
     selector: selectorNotDir,
-    rank: 11
+    rank: 10
   });
 
   app.contextMenu.addItem({
     command: CommandIDs.share,
     selector: selectorItem,
-    rank: 12
+    rank: 11
   });
   app.contextMenu.addItem({
     command: CommandIDs.copyPath,
     selector: selectorItem,
-    rank: 13
+    rank: 12
   });
   app.contextMenu.addItem({
     command: CommandIDs.copyDownloadLink,
     selector: selectorItem,
-    rank: 14
+    rank: 13
   });
 }
 

+ 25 - 17
packages/filebrowser/src/browser.ts

@@ -70,26 +70,11 @@ export class FileBrowser extends Widget {
     this._crumbs = new BreadCrumbs({ model });
     this.toolbar = new Toolbar<Widget>();
 
-    let directoryPending = false;
+    this._directoryPending = false;
     let newFolder = new ToolbarButton({
       iconClassName: 'jp-NewFolderIcon jp-Icon jp-Icon-16',
       onClick: () => {
-        if (directoryPending === true) {
-          return;
-        }
-        directoryPending = true;
-        this._manager
-          .newUntitled({
-            path: model.path,
-            type: 'directory'
-          })
-          .then(model => {
-            this._listing.selectItemByName(model.name);
-            directoryPending = false;
-          })
-          .catch(err => {
-            directoryPending = false;
-          });
+        this.createNewDirectory();
       },
       tooltip: 'New Folder'
     });
@@ -174,6 +159,28 @@ export class FileBrowser extends Widget {
     return this._listing.paste();
   }
 
+  /**
+   * Create a new directory
+   */
+  createNewDirectory(): void {
+    if (this._directoryPending === true) {
+      return;
+    }
+    this._directoryPending = true;
+    this._manager
+      .newUntitled({
+        path: this.model.path,
+        type: 'directory'
+      })
+      .then(model => {
+        this._listing.selectItemByName(model.name);
+        this._directoryPending = false;
+      })
+      .catch(err => {
+        this._directoryPending = false;
+      });
+  }
+
   /**
    * Delete the currently selected item(s).
    *
@@ -267,6 +274,7 @@ export class FileBrowser extends Widget {
   private _listing: DirListing;
   private _manager: DocumentManager;
   private _showingError = false;
+  private _directoryPending: boolean;
 }
 
 /**