Sfoglia il codice sorgente

Simplify docmanager functions by using higher-order iterator functions rather than loop primitives.

Jason Grout 6 anni fa
parent
commit
512f00983d
1 ha cambiato i file con 7 aggiunte e 22 eliminazioni
  1. 7 22
      packages/docmanager-extension/src/index.ts

+ 7 - 22
packages/docmanager-extension/src/index.ts

@@ -1,7 +1,7 @@
 // Copyright (c) Jupyter Development Team.
 // Distributed under the terms of the Modified BSD License.
 
-import { toArray, iter } from '@phosphor/algorithm';
+import { toArray, iter, some, map, each } from '@phosphor/algorithm';
 
 import { Widget, DockLayout } from '@phosphor/widgets';
 
@@ -520,36 +520,21 @@ function addCommands(
     label: () => 'Save All',
     caption: 'Save all open documents',
     isEnabled: () => {
-      const iterator = shell.widgets('main');
-      let widget = iterator.next();
-      while (widget) {
-        let context = docManager.contextForWidget(widget);
-        if (
-          context &&
-          context.contentsModel &&
-          context.contentsModel.writable
-        ) {
-          return true;
-        }
-        widget = iterator.next();
-      }
-      // disable saveAll if all of the widgets models
-      // have writable === false
-      return false;
+      return some(
+        map(shell.widgets('main'), w => docManager.contextForWidget(w)),
+        c => c && c.contentsModel && c.contentsModel.writable
+      );
     },
     execute: () => {
-      const iterator = shell.widgets('main');
       const promises: Promise<void>[] = [];
       const paths = new Set<string>(); // Cache so we don't double save files.
-      let widget = iterator.next();
-      while (widget) {
+      each(shell.widgets('main'), widget => {
         const context = docManager.contextForWidget(widget);
         if (context && !context.model.readOnly && !paths.has(context.path)) {
           paths.add(context.path);
           promises.push(context.save());
         }
-        widget = iterator.next();
-      }
+      });
       return Promise.all(promises);
     }
   });