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