Преглед изворни кода

Update filebrowser model consumers

Steven Silvester пре 8 година
родитељ
комит
4bc9c06dc8
3 измењених фајлова са 39 додато и 22 уклоњено
  1. 7 4
      src/filebrowser/browser.ts
  2. 8 4
      src/filebrowser/dialogs.ts
  3. 24 14
      src/filebrowser/listing.ts

+ 7 - 4
src/filebrowser/browser.ts

@@ -5,6 +5,10 @@ import {
   Contents
 } from 'jupyter-js-services';
 
+import {
+  each
+} from 'phosphor/lib/algorithm/iteration';
+
 import {
   Message
 } from 'phosphor/lib/core/messaging';
@@ -189,10 +193,9 @@ class FileBrowserWidget extends Widget {
    */
   open(): void {
     let foundDir = false;
-    let items = this._model.items;
-    for (let item of items) {
+    each(this._model.items, item => {
       if (!this._listing.isSelected(item.name)) {
-        continue;
+        return;
       }
       if (item.type === 'directory') {
         if (!foundDir) {
@@ -204,7 +207,7 @@ class FileBrowserWidget extends Widget {
       } else {
         this.openPath(item.path);
       }
-    }
+    });
   }
 
   /**

+ 8 - 4
src/filebrowser/dialogs.ts

@@ -5,6 +5,10 @@ import {
   Contents, Kernel, Session
 } from 'jupyter-js-services';
 
+import {
+  each
+} from 'phosphor/lib/algorithm/iteration';
+
 import {
   Widget
 } from 'phosphor/lib/ui/widget';
@@ -240,12 +244,12 @@ class CreateFromHandler extends Widget {
     this.inputNode.addEventListener('input', () => {
       let value = this.inputNode.value;
       if (value !== this._orig) {
-        for (let item of this._model.items) {
+        each(this._model.items, item => {
           if (item.name === value) {
             this.addClass(FILE_CONFLICT_CLASS);
             return;
           }
-        }
+        });
       }
       this.removeClass(FILE_CONFLICT_CLASS);
     });
@@ -473,12 +477,12 @@ class CreateNewHandler extends Widget {
    */
   protected inputNodeChanged(): void {
     let path = this.inputNode.value;
-    for (let item of this._model.items) {
+    each(this._model.items, item => {
       if (item.path === path) {
         this.addClass(FILE_CONFLICT_CLASS);
         return;
       }
-    }
+    });
     let ext = this.ext;
     if (ext === this._prevExt) {
       return;

+ 24 - 14
src/filebrowser/listing.ts

@@ -5,10 +5,18 @@ import {
   Contents
 } from 'jupyter-js-services';
 
+import {
+  each
+} from 'phosphor/lib/algorithm/iteration';
+
 import {
   find, findIndex
 } from 'phosphor/lib/algorithm/searching';
 
+import {
+  ISequence
+} from 'phosphor/lib/algorithm/sequence';
+
 import {
   Message
 } from 'phosphor/lib/core/messaging';
@@ -360,12 +368,11 @@ class DirListing extends Widget {
    */
   delete(): Promise<void> {
     let names: string[] = [];
-    let items = this._model.items;
-    for (let item of items) {
+    each(this._model.items, item => {
       if (this._selection[item.name]) {
         names.push(item.name);
       }
-    }
+    });
     let message = `Permanently delete these ${names.length} files?`;
     if (names.length === 1) {
       message = `Permanently delete file "${names[0]}"?`;
@@ -418,12 +425,12 @@ class DirListing extends Widget {
     let promises: Promise<void>[] = [];
     let items = this.sortedItems;
     let paths = items.map(item => item.path);
-    for (let session of this._model.sessions) {
+    each(this._model.sessions, session => {
       let index = paths.indexOf(session.notebook.path);
       if (this._selection[items[index].name]) {
         promises.push(this._model.shutdown(session.id));
       }
-    }
+    });
     return Promise.all(promises).then(
       () => this._model.refresh(),
       error => utils.showErrorMessage(this, 'Shutdown kernel', error)
@@ -658,12 +665,12 @@ class DirListing extends Widget {
     // Handle notebook session statuses.
     let paths = items.map(item => item.path);
     let specs = this._model.kernelspecs;
-    for (let session of this._model.sessions) {
+    each(this._model.sessions, session => {
       let index = paths.indexOf(session.notebook.path);
       let node = this._items[index];
       node.classList.add(RUNNING_CLASS);
       node.title = specs.kernelspecs[session.kernel.name].spec.display_name;
-    }
+    });
 
     this._prevPath = this._model.path;
   }
@@ -1186,12 +1193,12 @@ class DirListing extends Widget {
     // Update the selection.
     let existing = Object.keys(this._selection);
     this._selection = Object.create(null);
-    for (let item of this._model.items) {
+    each(this._model.items, item => {
       let name = item.name;
       if (existing.indexOf(name) !== -1) {
         this._selection[name] = true;
       }
-    }
+    });
     // Update the sorted items.
     this.sort(this.sortState);
   }
@@ -1595,10 +1602,13 @@ namespace Private {
    * Sort a list of items by sort state as a new array.
    */
   export
-  function sort(items: Contents.IModel[], state: DirListing.ISortState) : Contents.IModel[] {
-    let output = items.slice();
+  function sort(items: ISequence<Contents.IModel>, state: DirListing.ISortState) : Contents.IModel[] {
+    let copy: Contents.IModel[] = [];
+    each(items, item => {
+      copy.push(item);
+    });
     if (state.key === 'last_modified') {
-      output.sort((a, b) => {
+      copy.sort((a, b) => {
         let valA = new Date(a.last_modified).getTime();
         let valB = new Date(b.last_modified).getTime();
         return valB - valA;
@@ -1607,8 +1617,8 @@ namespace Private {
 
     // Reverse the order if descending.
     if (state.direction === 'descending') {
-      output.reverse();
+      copy.reverse();
     }
-    return output;
+    return copy;
   }
 }