@jupyterlab/filebrowser 0.15.4 → 0.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/listing.js +38 -34
- package/lib/listing.js.map +1 -1
- package/lib/model.d.ts +4 -0
- package/lib/model.js +26 -15
- package/lib/model.js.map +1 -1
- package/package.json +6 -6
- package/style/index.css +0 -5
package/lib/listing.js
CHANGED
|
@@ -397,15 +397,12 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
397
397
|
DirListing.prototype.shutdownKernels = function () {
|
|
398
398
|
var _this = this;
|
|
399
399
|
var model = this._model;
|
|
400
|
-
var promises = [];
|
|
401
400
|
var items = this._sortedItems;
|
|
402
401
|
var paths = items.map(function (item) { return item.path; });
|
|
403
|
-
algorithm_1.
|
|
402
|
+
var promises = algorithm_1.toArray(this._model.sessions()).filter(function (session) {
|
|
404
403
|
var index = algorithm_1.ArrayExt.firstIndexOf(paths, session.path);
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
});
|
|
404
|
+
return _this._selection[items[index].name];
|
|
405
|
+
}).map(function (session) { return model.manager.services.sessions.shutdown(session.id); });
|
|
409
406
|
return Promise.all(promises).then(function () {
|
|
410
407
|
return undefined;
|
|
411
408
|
}).catch(function (error) {
|
|
@@ -529,12 +526,12 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
529
526
|
// Make sure the file is available.
|
|
530
527
|
return this.model.refresh().then(function () {
|
|
531
528
|
if (_this.isDisposed) {
|
|
532
|
-
|
|
529
|
+
throw new Error('File browser is disposed.');
|
|
533
530
|
}
|
|
534
531
|
var items = _this._sortedItems;
|
|
535
532
|
var index = algorithm_1.ArrayExt.findFirstIndex(items, function (value) { return value.name === name; });
|
|
536
533
|
if (index === -1) {
|
|
537
|
-
|
|
534
|
+
throw new Error('Item does not exist.');
|
|
538
535
|
}
|
|
539
536
|
_this._selectItem(index, false);
|
|
540
537
|
messaging_1.MessageLoop.sendMessage(_this, widgets_1.Widget.Msg.UpdateRequest);
|
|
@@ -674,8 +671,7 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
674
671
|
this.removeClass(SELECTED_CLASS);
|
|
675
672
|
// Remove any excess item nodes.
|
|
676
673
|
while (nodes.length > items.length) {
|
|
677
|
-
|
|
678
|
-
content.removeChild(node);
|
|
674
|
+
content.removeChild(nodes.pop());
|
|
679
675
|
}
|
|
680
676
|
// Add any missing item nodes.
|
|
681
677
|
while (nodes.length < items.length) {
|
|
@@ -685,40 +681,39 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
685
681
|
content.appendChild(node);
|
|
686
682
|
}
|
|
687
683
|
// Remove extra classes from the nodes.
|
|
688
|
-
|
|
684
|
+
nodes.forEach(function (item) {
|
|
689
685
|
item.classList.remove(SELECTED_CLASS);
|
|
690
686
|
item.classList.remove(RUNNING_CLASS);
|
|
691
687
|
item.classList.remove(CUT_CLASS);
|
|
692
688
|
});
|
|
693
689
|
// Add extra classes to item nodes based on widget state.
|
|
694
|
-
|
|
690
|
+
items.forEach(function (item, i) {
|
|
695
691
|
var node = nodes[i];
|
|
696
|
-
var
|
|
697
|
-
var ft = this._manager.registry.getFileTypeForModel(item);
|
|
692
|
+
var ft = _this._manager.registry.getFileTypeForModel(item);
|
|
698
693
|
renderer.updateItemNode(node, item, ft);
|
|
699
|
-
if (
|
|
694
|
+
if (_this._selection[item.name]) {
|
|
700
695
|
node.classList.add(SELECTED_CLASS);
|
|
701
|
-
if (
|
|
696
|
+
if (_this._isCut && _this._model.path === _this._prevPath) {
|
|
702
697
|
node.classList.add(CUT_CLASS);
|
|
703
698
|
}
|
|
704
699
|
}
|
|
705
|
-
}
|
|
700
|
+
});
|
|
706
701
|
// Handle the selectors on the widget node.
|
|
707
|
-
var
|
|
708
|
-
if (
|
|
709
|
-
this.addClass(MULTI_SELECTED_CLASS);
|
|
710
|
-
}
|
|
711
|
-
if (selectedNames.length) {
|
|
702
|
+
var selected = Object.keys(this._selection).length;
|
|
703
|
+
if (selected) {
|
|
712
704
|
this.addClass(SELECTED_CLASS);
|
|
705
|
+
if (selected > 1) {
|
|
706
|
+
this.addClass(MULTI_SELECTED_CLASS);
|
|
707
|
+
}
|
|
713
708
|
}
|
|
714
709
|
// Handle file session statuses.
|
|
715
|
-
var paths =
|
|
710
|
+
var paths = items.map(function (item) { return item.path; });
|
|
716
711
|
algorithm_1.each(this._model.sessions(), function (session) {
|
|
717
712
|
var index = algorithm_1.ArrayExt.firstIndexOf(paths, session.path);
|
|
718
713
|
var node = nodes[index];
|
|
719
|
-
node.classList.add(RUNNING_CLASS);
|
|
720
714
|
var name = session.kernel.name;
|
|
721
715
|
var specs = _this._model.specs;
|
|
716
|
+
node.classList.add(RUNNING_CLASS);
|
|
722
717
|
if (specs) {
|
|
723
718
|
name = specs.kernelspecs[name].display_name;
|
|
724
719
|
}
|
|
@@ -1239,9 +1234,16 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
1239
1234
|
_this._inRename = false;
|
|
1240
1235
|
return original;
|
|
1241
1236
|
}
|
|
1237
|
+
if (!docmanager_1.isValidFileName(newName)) {
|
|
1238
|
+
apputils_1.showErrorMessage('Rename Error', Error("\"" + newName + "\" is not a valid name for a file. " +
|
|
1239
|
+
"Names must have nonzero length, " +
|
|
1240
|
+
"and cannot include \"/\", \"\\\", or \":\""));
|
|
1241
|
+
_this._inRename = false;
|
|
1242
|
+
return original;
|
|
1243
|
+
}
|
|
1242
1244
|
if (_this.isDisposed) {
|
|
1243
1245
|
_this._inRename = false;
|
|
1244
|
-
|
|
1246
|
+
throw new Error('File browser is disposed.');
|
|
1245
1247
|
}
|
|
1246
1248
|
var manager = _this._manager;
|
|
1247
1249
|
var oldPath = coreutils_1.PathExt.join(_this._model.path, original);
|
|
@@ -1256,9 +1258,10 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
1256
1258
|
}).then(function () {
|
|
1257
1259
|
if (_this.isDisposed) {
|
|
1258
1260
|
_this._inRename = false;
|
|
1259
|
-
|
|
1261
|
+
throw new Error('File browser is disposed.');
|
|
1260
1262
|
}
|
|
1261
1263
|
if (_this._inRename) {
|
|
1264
|
+
// No need to catch because `newName` will always exit.
|
|
1262
1265
|
_this.selectItemByName(newName);
|
|
1263
1266
|
}
|
|
1264
1267
|
_this._inRename = false;
|
|
@@ -1319,14 +1322,14 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
1319
1322
|
if (!newValue) {
|
|
1320
1323
|
return;
|
|
1321
1324
|
}
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
this.selectItemByName(name).then(function () {
|
|
1325
|
-
if (!_this.isDisposed && newValue.type === 'directory') {
|
|
1326
|
-
_this._doRename();
|
|
1327
|
-
}
|
|
1328
|
-
});
|
|
1325
|
+
if (args.type !== 'new' || !name) {
|
|
1326
|
+
return;
|
|
1329
1327
|
}
|
|
1328
|
+
this.selectItemByName(name).then(function () {
|
|
1329
|
+
if (!_this.isDisposed && newValue.type === 'directory') {
|
|
1330
|
+
_this._doRename();
|
|
1331
|
+
}
|
|
1332
|
+
}).catch(function () { });
|
|
1330
1333
|
};
|
|
1331
1334
|
/**
|
|
1332
1335
|
* Handle an `activateRequested` signal from the manager.
|
|
@@ -1337,7 +1340,8 @@ var DirListing = /** @class */ (function (_super) {
|
|
|
1337
1340
|
return;
|
|
1338
1341
|
}
|
|
1339
1342
|
var basename = coreutils_1.PathExt.basename(args);
|
|
1340
|
-
this.selectItemByName(basename)
|
|
1343
|
+
this.selectItemByName(basename)
|
|
1344
|
+
.catch(function () { });
|
|
1341
1345
|
};
|
|
1342
1346
|
return DirListing;
|
|
1343
1347
|
}(widgets_1.Widget));
|
package/lib/listing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listing.js","sourceRoot":"","sources":["../../../../filebrowser/src/listing.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport {\n Dialog, DOMUtils, showDialog, showErrorMessage\n} from '@jupyterlab/apputils';\n\nimport {\n PathExt, Time\n} from '@jupyterlab/coreutils';\n\nimport {\n DocumentRegistry\n} from '@jupyterlab/docregistry';\n\nimport {\n IDocumentManager, renameFile\n} from '@jupyterlab/docmanager';\n\nimport {\n Contents\n} from '@jupyterlab/services';\n\nimport {\n ArrayExt, ArrayIterator, IIterator, each, filter, find, map, toArray\n} from '@phosphor/algorithm';\n\nimport {\n MimeData, PromiseDelegate\n} from '@phosphor/coreutils';\n\nimport {\n Drag, IDragEvent\n} from '@phosphor/dragdrop';\n\nimport {\n ElementExt\n} from '@phosphor/domutils';\n\nimport {\n Message, MessageLoop\n} from '@phosphor/messaging';\n\nimport {\n Widget\n} from '@phosphor/widgets';\n\nimport {\n FileBrowserModel\n} from './model';\n\n\n/**\n * The class name added to DirListing widget.\n */\nconst DIR_LISTING_CLASS = 'jp-DirListing';\n\n/**\n * The class name added to a dir listing header node.\n */\nconst HEADER_CLASS = 'jp-DirListing-header';\n\n/**\n * The class name added to a dir listing list header cell.\n */\nconst HEADER_ITEM_CLASS = 'jp-DirListing-headerItem';\n\n/**\n * The class name added to a header cell text node.\n */\nconst HEADER_ITEM_TEXT_CLASS = 'jp-DirListing-headerItemText';\n\n/**\n * The class name added to a header cell icon node.\n */\nconst HEADER_ITEM_ICON_CLASS = 'jp-DirListing-headerItemIcon';\n\n/**\n * The class name added to the dir listing content node.\n */\nconst CONTENT_CLASS = 'jp-DirListing-content';\n\n/**\n * The class name added to dir listing content item.\n */\nconst ITEM_CLASS = 'jp-DirListing-item';\n\n/**\n * The class name added to the listing item text cell.\n */\nconst ITEM_TEXT_CLASS = 'jp-DirListing-itemText';\n\n/**\n * The class name added to the listing item icon cell.\n */\nconst ITEM_ICON_CLASS = 'jp-DirListing-itemIcon';\n\n/**\n * The class name added to the listing item modified cell.\n */\nconst ITEM_MODIFIED_CLASS = 'jp-DirListing-itemModified';\n\n/**\n * The class name added to the dir listing editor node.\n */\nconst EDITOR_CLASS = 'jp-DirListing-editor';\n\n/**\n * The class name added to the name column header cell.\n */\nconst NAME_ID_CLASS = 'jp-id-name';\n\n/**\n * The class name added to the modified column header cell.\n */\nconst MODIFIED_ID_CLASS = 'jp-id-modified';\n\n/**\n * The mime type for a con tents drag object.\n */\nconst CONTENTS_MIME = 'application/x-jupyter-icontents';\n\n/**\n * The class name added to drop targets.\n */\nconst DROP_TARGET_CLASS = 'jp-mod-dropTarget';\n\n/**\n * The class name added to selected rows.\n */\nconst SELECTED_CLASS = 'jp-mod-selected';\n\n/**\n * The class name added to drag state icons to add space between the icon and the file name\n */\nconst DRAG_ICON_CLASS = 'jp-DragIcon';\n\n/**\n * The class name added to the widget when there are items on the clipboard.\n */\nconst CLIPBOARD_CLASS = 'jp-mod-clipboard';\n\n/**\n * The class name added to cut rows.\n */\nconst CUT_CLASS = 'jp-mod-cut';\n\n/**\n * The class name added when there are more than one selected rows.\n */\nconst MULTI_SELECTED_CLASS = 'jp-mod-multiSelected';\n\n/**\n * The class name added to indicate running notebook.\n */\nconst RUNNING_CLASS = 'jp-mod-running';\n\n/**\n * The class name added for a decending sort.\n */\nconst DESCENDING_CLASS = 'jp-mod-descending';\n\n/**\n * The minimum duration for a rename select in ms.\n */\nconst RENAME_DURATION = 1000;\n\n/**\n * The maximum duration between two key presses when selecting files by prefix.\n */\nconst PREFIX_APPEND_DURATION = 1000;\n\n/**\n * The threshold in pixels to start a drag event.\n */\nconst DRAG_THRESHOLD = 5;\n\n/**\n * A boolean indicating whether the platform is Mac.\n */\nconst IS_MAC = !!navigator.platform.match(/Mac/i);\n\n/**\n * The factory MIME type supported by phosphor dock panels.\n */\nconst FACTORY_MIME = 'application/vnd.phosphor.widget-factory';\n\n\n/**\n * A widget which hosts a file list area.\n */\nexport\nclass DirListing extends Widget {\n /**\n * Construct a new file browser directory listing widget.\n *\n * @param model - The file browser view model.\n */\n constructor(options: DirListing.IOptions) {\n super({\n node: (options.renderer || DirListing.defaultRenderer).createNode()\n });\n this.addClass(DIR_LISTING_CLASS);\n this._model = options.model;\n this._model.fileChanged.connect(this._onFileChanged, this);\n this._model.refreshed.connect(this._onModelRefreshed, this);\n this._model.pathChanged.connect(this._onPathChanged, this);\n this._editNode = document.createElement('input');\n this._editNode.className = EDITOR_CLASS;\n this._manager = this._model.manager;\n this._renderer = options.renderer || DirListing.defaultRenderer;\n\n const headerNode = DOMUtils.findElement(this.node, HEADER_CLASS);\n this._renderer.populateHeaderNode(headerNode);\n this._manager.activateRequested.connect(this._onActivateRequested, this);\n }\n\n /**\n * Dispose of the resources held by the directory listing.\n */\n dispose(): void {\n this._items.length = 0;\n this._sortedItems.length = 0;\n this._clipboard.length = 0;\n super.dispose();\n }\n\n /**\n * Get the model used by the listing.\n */\n get model(): FileBrowserModel {\n return this._model;\n }\n\n /**\n * Get the dir listing header node.\n *\n * #### Notes\n * This is the node which holds the header cells.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get headerNode(): HTMLElement {\n return DOMUtils.findElement(this.node, HEADER_CLASS);\n }\n\n /**\n * Get the dir listing content node.\n *\n * #### Notes\n * This is the node which holds the item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode(): HTMLElement {\n return DOMUtils.findElement(this.node, CONTENT_CLASS);\n }\n\n /**\n * The renderer instance used by the directory listing.\n */\n get renderer(): DirListing.IRenderer {\n return this._renderer;\n }\n\n /**\n * The current sort state.\n */\n get sortState(): DirListing.ISortState {\n return this._sortState;\n }\n\n /**\n * Create an iterator over the listing's selected items.\n *\n * @returns A new iterator over the listing's selected items.\n */\n selectedItems(): IIterator<Contents.IModel> {\n let items = this._sortedItems;\n return filter(items, item => this._selection[item.name]);\n }\n\n /**\n * Create an iterator over the listing's sorted items.\n *\n * @returns A new iterator over the listing's sorted items.\n */\n sortedItems(): IIterator<Contents.IModel> {\n return new ArrayIterator(this._sortedItems);\n }\n\n /**\n * Sort the items using a sort condition.\n */\n sort(state: DirListing.ISortState): void {\n this._sortedItems = Private.sort(this.model.items(), state);\n this._sortState = state;\n this.update();\n }\n\n /**\n * Rename the first currently selected item.\n *\n * @returns A promise that resolves with the new name of the item.\n */\n rename(): Promise<string> {\n return this._doRename();\n }\n\n /**\n * Cut the selected items.\n */\n cut(): void {\n this._isCut = true;\n this._copy();\n this.update();\n }\n\n /**\n * Copy the selected items.\n */\n copy(): void {\n this._copy();\n }\n\n /**\n * Paste the items from the clipboard.\n *\n * @returns A promise that resolves when the operation is complete.\n */\n paste(): Promise<void> {\n if (!this._clipboard.length) {\n this._isCut = false;\n return Promise.resolve(undefined);\n }\n\n const basePath = this._model.path;\n let promises: Promise<Contents.IModel>[] = [];\n\n each(this._clipboard, path => {\n if (this._isCut) {\n const parts = path.split('/');\n const name = parts[parts.length - 1];\n const newPath = PathExt.join(basePath, name);\n promises.push(this._model.manager.rename(path, newPath));\n } else {\n promises.push(this._model.manager.copy(path, basePath));\n }\n });\n\n // Remove any cut modifiers.\n each(this._items, item => {\n item.classList.remove(CUT_CLASS);\n });\n\n this._clipboard.length = 0;\n this._isCut = false;\n this.removeClass(CLIPBOARD_CLASS);\n return Promise.all(promises).then(() => {\n return undefined;\n }).catch(error => {\n showErrorMessage('Paste Error', error);\n });\n }\n\n /**\n * Delete the currently selected item(s).\n *\n * @returns A promise that resolves when the operation is complete.\n */\n delete(): Promise<void> {\n let names: string[] = [];\n each(this._sortedItems, item => {\n if (this._selection[item.name]) {\n names.push(item.name);\n }\n });\n let message = `Are you sure you want to permanently delete the ${names.length} files/folders selected?`;\n if (names.length === 1) {\n message = `Are you sure you want to permanently delete: ${names[0]}?`;\n }\n if (names.length) {\n return showDialog({\n title: 'Delete',\n body: message,\n buttons: [Dialog.cancelButton(), Dialog.warnButton({ label: 'DELETE'})]\n }).then(result => {\n if (!this.isDisposed && result.button.accept) {\n return this._delete(names);\n }\n });\n }\n return Promise.resolve(void 0);\n }\n\n /**\n * Duplicate the currently selected item(s).\n *\n * @returns A promise that resolves when the operation is complete.\n */\n duplicate(): Promise<void> {\n const basePath = this._model.path;\n let promises: Promise<Contents.IModel>[] = [];\n\n each(this.selectedItems(), item => {\n if (item.type !== 'directory') {\n let oldPath = PathExt.join(basePath, item.name);\n promises.push(this._model.manager.copy(oldPath, basePath));\n }\n });\n return Promise.all(promises).then(() => {\n return undefined;\n }).catch(error => {\n showErrorMessage('Duplicate file', error);\n });\n }\n\n /**\n * Download the currently selected item(s).\n */\n download(): void {\n each(this.selectedItems(), item => {\n if (item.type !== 'directory') {\n this._model.download(item.path);\n }\n });\n }\n\n /**\n * Shut down kernels on the applicable currently selected items.\n *\n * @returns A promise that resolves when the operation is complete.\n */\n shutdownKernels(): Promise<void> {\n const model = this._model;\n const promises: Promise<void>[] = [];\n const items = this._sortedItems;\n const paths = items.map(item => item.path);\n each(this._model.sessions(), session => {\n let index = ArrayExt.firstIndexOf(paths, session.path);\n if (this._selection[items[index].name]) {\n promises.push(model.manager.services.sessions.shutdown(session.id));\n }\n });\n return Promise.all(promises).then(() => {\n return undefined;\n }).catch(error => {\n showErrorMessage('Shutdown kernel', error);\n });\n }\n\n /**\n * Select next item.\n *\n * @param keepExisting - Whether to keep the current selection and add to it.\n */\n selectNext(keepExisting = false): void {\n let index = -1;\n let selected = Object.keys(this._selection);\n let items = this._sortedItems;\n if (selected.length === 1 || keepExisting) {\n // Select the next item.\n let name = selected[selected.length - 1];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n index += 1;\n if (index === this._items.length) {\n index = 0;\n }\n } else if (selected.length === 0) {\n // Select the first item.\n index = 0;\n } else {\n // Select the last selected item.\n let name = selected[selected.length - 1];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n }\n if (index !== -1) {\n this._selectItem(index, keepExisting);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n }\n }\n\n /**\n * Select previous item.\n *\n * @param keepExisting - Whether to keep the current selection and add to it.\n */\n selectPrevious(keepExisting = false): void {\n let index = -1;\n let selected = Object.keys(this._selection);\n let items = this._sortedItems;\n if (selected.length === 1 || keepExisting) {\n // Select the previous item.\n let name = selected[0];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n index -= 1;\n if (index === -1) {\n index = this._items.length - 1;\n }\n } else if (selected.length === 0) {\n // Select the last item.\n index = this._items.length - 1;\n } else {\n // Select the first selected item.\n let name = selected[0];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n }\n if (index !== -1) {\n this._selectItem(index, keepExisting);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n }\n }\n\n /**\n * Select the first item that starts with prefix being typed.\n */\n selectByPrefix(): void {\n const prefix = this._searchPrefix;\n let items = this._sortedItems;\n\n let index = ArrayExt.findFirstIndex(items, value => {\n return value.name.toLowerCase().substr(0, prefix.length) === prefix;\n });\n\n if (index !== -1) {\n this._selectItem(index, false);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n }\n }\n\n /**\n * Get whether an item is selected by name.\n *\n * @param name - The name of of the item.\n *\n * @returns Whether the item is selected.\n */\n isSelected(name: string): boolean {\n return this._selection[name] === true;\n }\n\n /**\n * Find a model given a click.\n *\n * @param event - The mouse event.\n *\n * @returns The model for the selected file.\n */\n modelForClick(event: MouseEvent): Contents.IModel | undefined {\n let items = this._sortedItems;\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n if (index !== -1) {\n return items[index];\n }\n return undefined;\n }\n\n /**\n * Select an item by name.\n *\n * @parem name - The name of the item to select.\n *\n * @returns A promise that resolves when the name is selected.\n */\n selectItemByName(name: string): Promise<void> {\n // Make sure the file is available.\n return this.model.refresh().then(() => {\n if (this.isDisposed) {\n return;\n }\n let items = this._sortedItems;\n let index = ArrayExt.findFirstIndex(items, value => value.name === name);\n if (index === -1) {\n return;\n }\n this._selectItem(index, false);\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n });\n }\n\n /**\n * Handle the DOM events for the directory listing.\n *\n * @param event - The DOM event sent to the widget.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event: Event): void {\n switch (event.type) {\n case 'mousedown':\n this._evtMousedown(event as MouseEvent);\n break;\n case 'mouseup':\n this._evtMouseup(event as MouseEvent);\n break;\n case 'mousemove':\n this._evtMousemove(event as MouseEvent);\n break;\n case 'keydown':\n this._evtKeydown(event as KeyboardEvent);\n break;\n case 'click':\n this._evtClick(event as MouseEvent);\n break;\n case 'dblclick':\n this._evtDblClick(event as MouseEvent);\n break;\n case 'dragenter':\n case 'dragover':\n this.addClass('jp-mod-native-drop');\n event.preventDefault();\n break;\n case 'dragleave':\n case 'dragend':\n this.removeClass('jp-mod-native-drop');\n break;\n case 'drop':\n this.removeClass('jp-mod-native-drop');\n this._evtNativeDrop(event as DragEvent);\n break;\n case 'scroll':\n this._evtScroll(event as MouseEvent);\n break;\n case 'p-dragenter':\n this._evtDragEnter(event as IDragEvent);\n break;\n case 'p-dragleave':\n this._evtDragLeave(event as IDragEvent);\n break;\n case 'p-dragover':\n this._evtDragOver(event as IDragEvent);\n break;\n case 'p-drop':\n this._evtDrop(event as IDragEvent);\n break;\n default:\n break;\n }\n }\n\n /**\n * A message handler invoked on an `'after-attach'` message.\n */\n protected onAfterAttach(msg: Message): void {\n super.onAfterAttach(msg);\n let node = this.node;\n let content = DOMUtils.findElement(node, CONTENT_CLASS);\n node.addEventListener('mousedown', this);\n node.addEventListener('keydown', this);\n node.addEventListener('click', this);\n node.addEventListener('dblclick', this);\n content.addEventListener('dragenter', this);\n content.addEventListener('dragover', this);\n content.addEventListener('dragleave', this);\n content.addEventListener('dragend', this);\n content.addEventListener('drop', this);\n content.addEventListener('scroll', this);\n content.addEventListener('p-dragenter', this);\n content.addEventListener('p-dragleave', this);\n content.addEventListener('p-dragover', this);\n content.addEventListener('p-drop', this);\n }\n\n /**\n * A message handler invoked on a `'before-detach'` message.\n */\n protected onBeforeDetach(msg: Message): void {\n super.onBeforeDetach(msg);\n let node = this.node;\n let content = DOMUtils.findElement(node, CONTENT_CLASS);\n node.removeEventListener('mousedown', this);\n node.removeEventListener('keydown', this);\n node.removeEventListener('click', this);\n node.removeEventListener('dblclick', this);\n content.removeEventListener('scroll', this);\n content.removeEventListener('dragover', this);\n content.removeEventListener('dragover', this);\n content.removeEventListener('dragleave', this);\n content.removeEventListener('dragend', this);\n content.removeEventListener('drop', this);\n content.removeEventListener('p-dragenter', this);\n content.removeEventListener('p-dragleave', this);\n content.removeEventListener('p-dragover', this);\n content.removeEventListener('p-drop', this);\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n }\n\n /**\n * A message handler invoked on an `'after-show'` message.\n */\n protected onAfterShow(msg: Message): void {\n if (this._isDirty) {\n // Update the sorted items.\n this.sort(this.sortState);\n this.update();\n }\n }\n\n /**\n * A handler invoked on an `'update-request'` message.\n */\n protected onUpdateRequest(msg: Message): void {\n this._isDirty = false;\n\n // Fetch common variables.\n let items = this._sortedItems;\n let nodes = this._items;\n let content = DOMUtils.findElement(this.node, CONTENT_CLASS);\n let renderer = this._renderer;\n\n this.removeClass(MULTI_SELECTED_CLASS);\n this.removeClass(SELECTED_CLASS);\n\n // Remove any excess item nodes.\n while (nodes.length > items.length) {\n let node = nodes.pop();\n content.removeChild(node!);\n }\n\n // Add any missing item nodes.\n while (nodes.length < items.length) {\n let node = renderer.createItemNode();\n node.classList.add(ITEM_CLASS);\n nodes.push(node);\n content.appendChild(node);\n }\n\n // Remove extra classes from the nodes.\n each(nodes, item => {\n item.classList.remove(SELECTED_CLASS);\n item.classList.remove(RUNNING_CLASS);\n item.classList.remove(CUT_CLASS);\n });\n\n // Add extra classes to item nodes based on widget state.\n for (let i = 0, n = items.length; i < n; ++i) {\n let node = nodes[i];\n let item = items[i];\n let ft = this._manager.registry.getFileTypeForModel(item);\n renderer.updateItemNode(node, item, ft);\n if (this._selection[item.name]) {\n node.classList.add(SELECTED_CLASS);\n if (this._isCut && this._model.path === this._prevPath) {\n node.classList.add(CUT_CLASS);\n }\n }\n }\n\n // Handle the selectors on the widget node.\n let selectedNames = Object.keys(this._selection);\n if (selectedNames.length > 1) {\n this.addClass(MULTI_SELECTED_CLASS);\n }\n if (selectedNames.length) {\n this.addClass(SELECTED_CLASS);\n }\n\n // Handle file session statuses.\n let paths = toArray(map(items, item => item.path));\n each(this._model.sessions(), session => {\n let index = ArrayExt.firstIndexOf(paths, session.path);\n let node = nodes[index];\n node.classList.add(RUNNING_CLASS);\n let name = session.kernel.name;\n let specs = this._model.specs;\n if (specs) {\n name = specs.kernelspecs[name].display_name;\n }\n node.title = `${node.title}\\nKernel: ${name}`;\n });\n\n this._prevPath = this._model.path;\n }\n\n /**\n * Handle the `'click'` event for the widget.\n */\n private _evtClick(event: MouseEvent) {\n let target = event.target as HTMLElement;\n\n let header = this.headerNode;\n if (header.contains(target)) {\n let state = this.renderer.handleHeaderClick(header, event);\n if (state) {\n this.sort(state);\n }\n return;\n }\n }\n\n /**\n * Handle the `'scroll'` event for the widget.\n */\n private _evtScroll(event: MouseEvent): void {\n this.headerNode.scrollLeft = this.contentNode.scrollLeft;\n }\n\n /**\n * Handle the `'mousedown'` event for the widget.\n */\n private _evtMousedown(event: MouseEvent): void {\n // Bail if clicking within the edit node\n if (event.target === this._editNode) {\n return;\n }\n\n // Blur the edit node if necessary.\n if (this._editNode.parentNode) {\n if (this._editNode !== event.target as HTMLElement) {\n this._editNode.focus();\n this._editNode.blur();\n clearTimeout(this._selectTimer);\n } else {\n return;\n }\n }\n\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n if (index === -1) {\n return;\n }\n this._handleFileSelect(event);\n\n if (event.button !== 0) {\n clearTimeout(this._selectTimer);\n }\n\n // Check for clearing a context menu.\n let newContext = (IS_MAC && event.ctrlKey) || (event.button === 2);\n if (newContext) {\n return;\n }\n\n // Left mouse press for drag start.\n if (event.button === 0) {\n this._dragData = { pressX: event.clientX, pressY: event.clientY,\n index: index };\n document.addEventListener('mouseup', this, true);\n document.addEventListener('mousemove', this, true);\n }\n }\n\n /**\n * Handle the `'mouseup'` event for the widget.\n */\n private _evtMouseup(event: MouseEvent): void {\n // Handle any soft selection from the previous mouse down.\n if (this._softSelection) {\n let altered = event.metaKey || event.shiftKey || event.ctrlKey;\n // See if we need to clear the other selection.\n if (!altered && event.button === 0) {\n this._selection = Object.create(null);\n this._selection[this._softSelection] = true;\n this.update();\n }\n this._softSelection = '';\n }\n // Remove the drag listeners if necessary.\n if (event.button !== 0 || !this._drag) {\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Handle the `'mousemove'` event for the widget.\n */\n private _evtMousemove(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n // Bail if we are the one dragging.\n if (this._drag || !this._dragData) {\n return;\n }\n\n // Check for a drag initialization.\n let data = this._dragData;\n let dx = Math.abs(event.clientX - data.pressX);\n let dy = Math.abs(event.clientY - data.pressY);\n if (dx < DRAG_THRESHOLD && dy < DRAG_THRESHOLD) {\n return;\n }\n\n this._startDrag(data.index, event.clientX, event.clientY);\n }\n\n /**\n * Handle the `'keydown'` event for the widget.\n */\n private _evtKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case 13: // Enter\n // Do nothing if any modifier keys are pressed.\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n let selected = Object.keys(this._selection);\n let name = selected[0];\n let items = this._sortedItems;\n let i = ArrayExt.findFirstIndex(items, value => value.name === name);\n if (i === -1) {\n return;\n }\n\n let model = this._model;\n let item = this._sortedItems[i];\n if (item.type === 'directory') {\n model.cd(item.name).catch(error =>\n showErrorMessage('Open directory', error)\n );\n } else {\n let path = item.path;\n this._manager.openOrReveal(path);\n }\n\n break;\n case 38: // Up arrow\n this.selectPrevious(event.shiftKey);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 40: // Down arrow\n this.selectNext(event.shiftKey);\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n break;\n }\n\n // Detects printable characters typed by the user.\n // Not all browsers support .key, but it discharges us from reconstructing\n // characters from key codes.\n if (!this._inRename && event.key !== undefined && event.key.length === 1) {\n this._searchPrefix += event.key;\n\n clearTimeout(this._searchPrefixTimer);\n this._searchPrefixTimer = window.setTimeout(() => {\n this._searchPrefix = '';\n }, PREFIX_APPEND_DURATION);\n\n this.selectByPrefix();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle the `'dblclick'` event for the widget.\n */\n private _evtDblClick(event: MouseEvent): void {\n // Do nothing if it's not a left mouse press.\n if (event.button !== 0) {\n return;\n }\n\n // Do nothing if any modifier keys are pressed.\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n\n clearTimeout(this._selectTimer);\n this._noSelectTimer = window.setTimeout(() => {\n this._noSelectTimer = -1;\n }, RENAME_DURATION);\n\n this._editNode.blur();\n\n // Find a valid double click target.\n let target = event.target as HTMLElement;\n let i = ArrayExt.findFirstIndex(this._items, node => node.contains(target));\n if (i === -1) {\n return;\n }\n\n let model = this._model;\n let item = this._sortedItems[i];\n if (item.type === 'directory') {\n model.cd(item.name).catch(error =>\n showErrorMessage('Open directory', error)\n );\n } else {\n let path = item.path;\n this._manager.openOrReveal(path);\n }\n }\n\n /**\n * Handle the `drop` event for the widget.\n */\n private _evtNativeDrop(event: DragEvent): void {\n let files = event.dataTransfer.files;\n if (files.length === 0) {\n return;\n }\n event.preventDefault();\n for (let i = 0; i < files.length; i++) {\n this._model.upload(files[i]);\n }\n }\n\n /**\n * Handle the `'p-dragenter'` event for the widget.\n */\n private _evtDragEnter(event: IDragEvent): void {\n if (event.mimeData.hasData(CONTENTS_MIME)) {\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n if (index === -1) {\n return;\n }\n let item = this._sortedItems[index];\n if (item.type !== 'directory' || this._selection[item.name]) {\n return;\n }\n let target = event.target as HTMLElement;\n target.classList.add(DROP_TARGET_CLASS);\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Handle the `'p-dragleave'` event for the widget.\n */\n private _evtDragLeave(event: IDragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n let dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n if (dropTarget) {\n dropTarget.classList.remove(DROP_TARGET_CLASS);\n }\n }\n\n /**\n * Handle the `'p-dragover'` event for the widget.\n */\n private _evtDragOver(event: IDragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n event.dropAction = event.proposedAction;\n let dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n if (dropTarget) {\n dropTarget.classList.remove(DROP_TARGET_CLASS);\n }\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n this._items[index].classList.add(DROP_TARGET_CLASS);\n }\n\n /**\n * Handle the `'p-drop'` event for the widget.\n */\n private _evtDrop(event: IDragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(this._selectTimer);\n if (event.proposedAction === 'none') {\n event.dropAction = 'none';\n return;\n }\n if (!event.mimeData.hasData(CONTENTS_MIME)) {\n return;\n }\n event.dropAction = event.proposedAction;\n\n let target = event.target as HTMLElement;\n while (target && target.parentElement) {\n if (target.classList.contains(DROP_TARGET_CLASS)) {\n target.classList.remove(DROP_TARGET_CLASS);\n break;\n }\n target = target.parentElement;\n }\n\n // Get the path based on the target node.\n const index = ArrayExt.firstIndexOf(this._items, target);\n const items = this._sortedItems;\n let basePath = this._model.path;\n if (items[index].type === 'directory') {\n basePath = PathExt.join(basePath, items[index].name);\n }\n const manager = this._manager;\n\n // Handle the items.\n const promises: Promise<Contents.IModel | null>[] = [];\n const paths = event.mimeData.getData(CONTENTS_MIME) as string[];\n for (let path of paths) {\n let localPath = manager.services.contents.localPath(path);\n let name = PathExt.basename(localPath);\n let newPath = PathExt.join(basePath, name);\n // Skip files that are not moving.\n if (newPath === path) {\n continue;\n }\n promises.push(renameFile(manager, path, newPath));\n }\n Promise.all(promises).catch(error => {\n showErrorMessage('Move Error', error);\n });\n }\n\n /**\n * Start a drag event.\n */\n private _startDrag(index: number, clientX: number, clientY: number): void {\n let selectedNames = Object.keys(this._selection);\n let source = this._items[index];\n let items = this._sortedItems;\n let item: Contents.IModel | undefined;\n\n // If the source node is not selected, use just that node.\n if (!source.classList.contains(SELECTED_CLASS)) {\n item = items[index];\n selectedNames = [item.name];\n } else {\n let name = selectedNames[0];\n item = find(items, value => value.name === name);\n }\n\n if (!item) {\n return;\n }\n\n // Create the drag image.\n let ft = this._manager.registry.getFileTypeForModel(item);\n let dragImage = this.renderer.createDragImage(source, selectedNames.length, ft);\n\n // Set up the drag event.\n this._drag = new Drag({\n dragImage,\n mimeData: new MimeData(),\n supportedActions: 'move',\n proposedAction: 'move'\n });\n let basePath = this._model.path;\n let paths = toArray(map(selectedNames, name => {\n return PathExt.join(basePath, name);\n }));\n this._drag.mimeData.setData(CONTENTS_MIME, paths);\n if (item && item.type !== 'directory') {\n const otherPaths = paths.slice(1).reverse();\n this._drag.mimeData.setData(FACTORY_MIME, () => {\n if (!item) {\n return;\n }\n let path = item.path;\n let widget = this._manager.findWidget(path);\n if (!widget) {\n widget = this._manager.open(item.path);\n }\n if (otherPaths.length) {\n const firstWidgetPlaced = new PromiseDelegate<void>();\n firstWidgetPlaced.promise.then(() => {\n let prevWidget = widget;\n otherPaths.forEach(path => {\n const options: DocumentRegistry.IOpenOptions = {\n ref: prevWidget.id,\n mode: 'tab-after'\n };\n prevWidget = this._manager.openOrReveal(path, void 0, void 0, options);\n this._manager.openOrReveal(item.path);\n });\n });\n firstWidgetPlaced.resolve(void 0);\n }\n return widget;\n });\n }\n\n // Start the drag and remove the mousemove and mouseup listeners.\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n clearTimeout(this._selectTimer);\n this._drag.start(clientX, clientY).then(action => {\n this._drag = null;\n clearTimeout(this._selectTimer);\n });\n }\n\n /**\n * Handle selection on a file node.\n */\n private _handleFileSelect(event: MouseEvent): void {\n // Fetch common variables.\n let items = this._sortedItems;\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n let target = event.target as HTMLElement;\n let inText = target.classList.contains(ITEM_TEXT_CLASS);\n\n clearTimeout(this._selectTimer);\n\n if (index === -1) {\n return;\n }\n\n // Clear any existing soft selection.\n this._softSelection = '';\n\n let name = items[index].name;\n let selected = Object.keys(this._selection);\n\n // Handle toggling.\n if ((IS_MAC && event.metaKey) || (!IS_MAC && event.ctrlKey)) {\n if (this._selection[name]) {\n delete this._selection[name];\n } else {\n this._selection[name] = true;\n }\n\n // Handle multiple select.\n } else if (event.shiftKey) {\n this._handleMultiSelect(selected, index);\n\n // Handle a 'soft' selection\n } else if (name in this._selection && selected.length > 1) {\n this._softSelection = name;\n\n // Default to selecting the only the item.\n } else {\n // Handle a rename.\n if (inText && selected.length === 1 && selected[0] === name) {\n this._selectTimer = window.setTimeout(() => {\n if (this._noSelectTimer === -1) {\n this._doRename();\n }\n }, RENAME_DURATION);\n }\n // Select only the given item.\n this._selection = Object.create(null);\n this._selection[name] = true;\n }\n this.update();\n }\n\n /**\n * Handle a multiple select on a file item node.\n */\n private _handleMultiSelect(selected: string[], index: number): void {\n // Find the \"nearest selected\".\n let items = this._sortedItems;\n let nearestIndex = -1;\n for (let i = 0; i < this._items.length; i++) {\n if (i === index) {\n continue;\n }\n let name = items[i].name;\n if (selected.indexOf(name) !== -1) {\n if (nearestIndex === -1) {\n nearestIndex = i;\n } else {\n if (Math.abs(index - i) < Math.abs(nearestIndex - i)) {\n nearestIndex = i;\n }\n }\n }\n }\n\n // Default to the first element (and fill down).\n if (nearestIndex === -1) {\n nearestIndex = 0;\n }\n\n // Select the rows between the current and the nearest selected.\n for (let i = 0; i < this._items.length; i++) {\n if (nearestIndex >= i && index <= i ||\n nearestIndex <= i && index >= i) {\n this._selection[items[i].name] = true;\n }\n }\n }\n\n\n /**\n * Copy the selected items, and optionally cut as well.\n */\n private _copy(): void {\n this._clipboard.length = 0;\n each(this.selectedItems(), item => {\n this._clipboard.push(item.path);\n });\n }\n\n /**\n * Delete the files with the given names.\n */\n private _delete(names: string[]): Promise<void> {\n const promises: Promise<void>[] = [];\n const basePath = this._model.path;\n for (let name of names) {\n let newPath = PathExt.join(basePath, name);\n let promise = this._model.manager.deleteFile(newPath).catch(err => {\n showErrorMessage('Delete Failed', err);\n });\n promises.push(promise);\n }\n return Promise.all(promises).then(() => undefined);\n }\n\n /**\n * Allow the user to rename item on a given row.\n */\n private _doRename(): Promise<string> {\n this._inRename = true;\n let items = this._sortedItems;\n let name = Object.keys(this._selection)[0];\n let index = ArrayExt.findFirstIndex(items, value => value.name === name);\n let row = this._items[index];\n let item = items[index];\n let nameNode = this.renderer.getNameNode(row);\n let original = item.name;\n this._editNode.value = original;\n this._selectItem(index, false);\n\n return Private.doRename(nameNode, this._editNode).then(newName => {\n if (!newName || newName === original) {\n this._inRename = false;\n return original;\n }\n if (this.isDisposed) {\n this._inRename = false;\n return Promise.reject('Disposed') as Promise<string>;\n }\n\n const manager = this._manager;\n const oldPath = PathExt.join(this._model.path, original);\n const newPath = PathExt.join(this._model.path, newName);\n const promise = renameFile(manager, oldPath, newPath);\n return promise.catch(error => {\n if (error !== 'File not renamed') {\n showErrorMessage('Rename Error', error);\n }\n this._inRename = false;\n return original;\n }).then(() => {\n if (this.isDisposed) {\n this._inRename = false;\n return Promise.reject('Disposed') as Promise<string>;\n }\n if (this._inRename) {\n this.selectItemByName(newName);\n }\n this._inRename = false;\n return newName;\n });\n });\n }\n\n /**\n * Select a given item.\n */\n private _selectItem(index: number, keepExisting: boolean) {\n // Selected the given row(s)\n let items = this._sortedItems;\n if (!keepExisting) {\n this._selection = Object.create(null);\n }\n let name = items[index].name;\n this._selection[name] = true;\n this.update();\n }\n\n /**\n * Handle the `refreshed` signal from the model.\n */\n private _onModelRefreshed(): void {\n // Update the selection.\n let existing = Object.keys(this._selection);\n this._selection = Object.create(null);\n each(this._model.items(), item => {\n let name = item.name;\n if (existing.indexOf(name) !== -1) {\n this._selection[name] = true;\n }\n });\n if (this.isVisible) {\n // Update the sorted items.\n this.sort(this.sortState);\n } else {\n this._isDirty = true;\n }\n }\n\n /**\n * Handle a `pathChanged` signal from the model.\n */\n private _onPathChanged(): void {\n // Reset the selection.\n this._selection = Object.create(null);\n // Update the sorted items.\n this.sort(this.sortState);\n }\n\n /**\n * Handle a `fileChanged` signal from the model.\n */\n private _onFileChanged(sender: FileBrowserModel, args: Contents.IChangedArgs) {\n let newValue = args.newValue;\n if (!newValue) {\n return;\n }\n let name = args.newValue.name;\n if (args.type === 'new' && name) {\n this.selectItemByName(name).then(() => {\n if (!this.isDisposed && newValue.type === 'directory') {\n this._doRename();\n }\n });\n }\n }\n\n /**\n * Handle an `activateRequested` signal from the manager.\n */\n private _onActivateRequested(sender: IDocumentManager, args: string): void {\n let dirname = PathExt.dirname(args);\n if (dirname !== this._model.path) {\n return;\n }\n let basename = PathExt.basename(args);\n this.selectItemByName(basename);\n }\n\n private _model: FileBrowserModel;\n private _editNode: HTMLInputElement;\n private _items: HTMLElement[] = [];\n private _sortedItems: Contents.IModel[] = [];\n private _sortState: DirListing.ISortState = { direction: 'ascending', key: 'name' };\n private _drag: Drag | null = null;\n private _dragData: { pressX: number, pressY: number, index: number } | null = null;\n private _selectTimer = -1;\n private _noSelectTimer = -1;\n private _isCut = false;\n private _prevPath = '';\n private _clipboard: string[] = [];\n private _manager: IDocumentManager;\n private _softSelection = '';\n private _selection: { [key: string]: boolean; } = Object.create(null);\n private _renderer: DirListing.IRenderer;\n private _searchPrefix: string = '';\n private _searchPrefixTimer = -1;\n private _inRename = false;\n private _isDirty = false;\n}\n\n\n/**\n * The namespace for the `DirListing` class statics.\n */\nexport\nnamespace DirListing {\n /**\n * An options object for initializing a file browser directory listing.\n */\n export\n interface IOptions {\n /**\n * A file browser model instance.\n */\n model: FileBrowserModel;\n\n /**\n * A renderer for file items.\n *\n * The default is a shared `Renderer` instance.\n */\n renderer?: IRenderer;\n }\n\n /**\n * A sort state.\n */\n export\n interface ISortState {\n /**\n * The direction of sort.\n */\n direction: 'ascending' | 'descending';\n\n /**\n * The sort key.\n */\n key: 'name' | 'last_modified';\n }\n\n /**\n * The render interface for file browser listing options.\n */\n export\n interface IRenderer {\n /**\n * Create the DOM node for a dir listing.\n */\n createNode(): HTMLElement;\n\n /**\n * Populate and empty header node for a dir listing.\n *\n * @param node - The header node to populate.\n */\n populateHeaderNode(node: HTMLElement): void;\n\n /**\n * Handle a header click.\n *\n * @param node - A node populated by [[populateHeaderNode]].\n *\n * @param event - A click event on the node.\n *\n * @returns The sort state of the header after the click event.\n */\n handleHeaderClick(node: HTMLElement, event: MouseEvent): ISortState;\n\n /**\n * Create a new item node for a dir listing.\n *\n * @returns A new DOM node to use as a content item.\n */\n createItemNode(): HTMLElement;\n\n /**\n * Update an item node to reflect the current state of a model.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param model - The model object to use for the item state.\n *\n * @param fileType - The file type of the item, if applicable.\n */\n updateItemNode(node: HTMLElement, model: Contents.IModel, fileType?: DocumentRegistry.IFileType): void;\n\n /**\n * Get the node containing the file name.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @returns The node containing the file name.\n */\n getNameNode(node: HTMLElement): HTMLElement;\n\n /**\n * Create an appropriate drag image for an item.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param count - The number of items being dragged.\n *\n * @param fileType - The file type of the item, if applicable.\n *\n * @returns An element to use as the drag image.\n */\n createDragImage(node: HTMLElement, count: number, fileType?: DocumentRegistry.IFileType): HTMLElement;\n }\n\n /**\n * The default implementation of an `IRenderer`.\n */\n export\n class Renderer implements IRenderer {\n /**\n * Create the DOM node for a dir listing.\n */\n createNode(): HTMLElement {\n let node = document.createElement('div');\n let header = document.createElement('div');\n let content = document.createElement('ul');\n content.className = CONTENT_CLASS;\n header.className = HEADER_CLASS;\n node.appendChild(header);\n node.appendChild(content);\n node.tabIndex = 1;\n return node;\n }\n\n /**\n * Populate and empty header node for a dir listing.\n *\n * @param node - The header node to populate.\n */\n populateHeaderNode(node: HTMLElement): void {\n let name = this._createHeaderItemNode('Name');\n let modified = this._createHeaderItemNode('Last Modified');\n name.classList.add(NAME_ID_CLASS);\n name.classList.add(SELECTED_CLASS);\n modified.classList.add(MODIFIED_ID_CLASS);\n node.appendChild(name);\n node.appendChild(modified);\n }\n\n /**\n * Handle a header click.\n *\n * @param node - A node populated by [[populateHeaderNode]].\n *\n * @param event - A click event on the node.\n *\n * @returns The sort state of the header after the click event.\n */\n handleHeaderClick(node: HTMLElement, event: MouseEvent): ISortState {\n let name = DOMUtils.findElement(node, NAME_ID_CLASS);\n let modified = DOMUtils.findElement(node, MODIFIED_ID_CLASS);\n let state: ISortState = { direction: 'ascending', key: 'name' };\n let target = event.target as HTMLElement;\n if (name.contains(target)) {\n if (name.classList.contains(SELECTED_CLASS)) {\n if (!name.classList.contains(DESCENDING_CLASS)) {\n state.direction = 'descending';\n name.classList.add(DESCENDING_CLASS);\n } else {\n name.classList.remove(DESCENDING_CLASS);\n }\n } else {\n name.classList.remove(DESCENDING_CLASS);\n }\n name.classList.add(SELECTED_CLASS);\n modified.classList.remove(SELECTED_CLASS);\n modified.classList.remove(DESCENDING_CLASS);\n return state;\n }\n if (modified.contains(target)) {\n state.key = 'last_modified';\n if (modified.classList.contains(SELECTED_CLASS)) {\n if (!modified.classList.contains(DESCENDING_CLASS)) {\n state.direction = 'descending';\n modified.classList.add(DESCENDING_CLASS);\n } else {\n modified.classList.remove(DESCENDING_CLASS);\n }\n } else {\n modified.classList.remove(DESCENDING_CLASS);\n }\n modified.classList.add(SELECTED_CLASS);\n name.classList.remove(SELECTED_CLASS);\n name.classList.remove(DESCENDING_CLASS);\n return state;\n }\n return state;\n }\n\n /**\n * Create a new item node for a dir listing.\n *\n * @returns A new DOM node to use as a content item.\n */\n createItemNode(): HTMLElement {\n let node = document.createElement('li');\n let icon = document.createElement('span');\n let text = document.createElement('span');\n let modified = document.createElement('span');\n icon.className = ITEM_ICON_CLASS;\n text.className = ITEM_TEXT_CLASS;\n modified.className = ITEM_MODIFIED_CLASS;\n node.appendChild(icon);\n node.appendChild(text);\n node.appendChild(modified);\n return node;\n }\n\n /**\n * Update an item node to reflect the current state of a model.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param model - The model object to use for the item state.\n *\n * @param fileType - The file type of the item, if applicable.\n *\n */\n updateItemNode(node: HTMLElement, model: Contents.IModel, fileType?: DocumentRegistry.IFileType): void {\n let icon = DOMUtils.findElement(node, ITEM_ICON_CLASS);\n let text = DOMUtils.findElement(node, ITEM_TEXT_CLASS);\n let modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS);\n\n if (fileType) {\n icon.textContent = fileType.iconLabel || '';\n icon.className = `${ITEM_ICON_CLASS} ${fileType.iconClass || ''}`;\n } else {\n icon.textContent = '';\n icon.className = ITEM_ICON_CLASS;\n }\n\n node.title = model.name;\n // If an item is being edited currently, its text node is unavailable.\n if (text) {\n text.textContent = model.name;\n }\n\n let modText = '';\n let modTitle = '';\n if (model.last_modified) {\n modText = Time.formatHuman(new Date(model.last_modified));\n modTitle = Time.format(new Date(model.last_modified));\n }\n modified.textContent = modText;\n modified.title = modTitle;\n }\n\n /**\n * Get the node containing the file name.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @returns The node containing the file name.\n */\n getNameNode(node: HTMLElement): HTMLElement {\n return DOMUtils.findElement(node, ITEM_TEXT_CLASS);\n }\n\n /**\n * Create a drag image for an item.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param count - The number of items being dragged.\n *\n * @param fileType - The file type of the item, if applicable.\n *\n * @returns An element to use as the drag image.\n */\n createDragImage(node: HTMLElement, count: number, fileType?: DocumentRegistry.IFileType): HTMLElement {\n let dragImage = node.cloneNode(true) as HTMLElement;\n let modified = DOMUtils.findElement(dragImage, ITEM_MODIFIED_CLASS);\n let icon = DOMUtils.findElement(dragImage, ITEM_ICON_CLASS);\n dragImage.removeChild(modified as HTMLElement);\n\n if (!fileType) {\n icon.textContent = '';\n icon.className = '';\n } else {\n icon.textContent = fileType.iconLabel || '';\n icon.className = fileType.iconClass || '';\n }\n icon.classList.add(DRAG_ICON_CLASS);\n\n if (count > 1) {\n let nameNode = DOMUtils.findElement(dragImage, ITEM_TEXT_CLASS);\n nameNode.textContent = count + ' Items';\n }\n return dragImage;\n }\n\n /**\n * Create a node for a header item.\n */\n private _createHeaderItemNode(label: string): HTMLElement {\n let node = document.createElement('div');\n let text = document.createElement('span');\n let icon = document.createElement('span');\n node.className = HEADER_ITEM_CLASS;\n text.className = HEADER_ITEM_TEXT_CLASS;\n icon.className = HEADER_ITEM_ICON_CLASS;\n text.textContent = label;\n node.appendChild(text);\n node.appendChild(icon);\n return node;\n }\n }\n\n /**\n * The default `IRenderer` instance.\n */\n export\n const defaultRenderer = new Renderer();\n}\n\n\n/**\n * The namespace for the listing private data.\n */\nnamespace Private {\n /**\n * Handle editing text on a node.\n *\n * @returns Boolean indicating whether the name changed.\n */\n export\n function doRename(text: HTMLElement, edit: HTMLInputElement): Promise<string> {\n let parent = text.parentElement as HTMLElement;\n parent.replaceChild(edit, text);\n edit.focus();\n let index = edit.value.lastIndexOf('.');\n if (index === -1) {\n edit.setSelectionRange(0, edit.value.length);\n } else {\n edit.setSelectionRange(0, index);\n }\n\n return new Promise<string>((resolve, reject) => {\n edit.onblur = () => {\n parent.replaceChild(text, edit);\n resolve(edit.value);\n };\n edit.onkeydown = (event: KeyboardEvent) => {\n switch (event.keyCode) {\n case 13: // Enter\n event.stopPropagation();\n event.preventDefault();\n edit.blur();\n break;\n case 27: // Escape\n event.stopPropagation();\n event.preventDefault();\n edit.blur();\n break;\n case 38: // Up arrow\n event.stopPropagation();\n event.preventDefault();\n if (edit.selectionStart !== edit.selectionEnd) {\n edit.selectionStart = edit.selectionEnd = 0;\n }\n break;\n case 40: // Down arrow\n event.stopPropagation();\n event.preventDefault();\n if (edit.selectionStart !== edit.selectionEnd) {\n edit.selectionStart = edit.selectionEnd = edit.value.length;\n }\n break;\n default:\n break;\n }\n };\n });\n }\n\n /**\n * Sort a list of items by sort state as a new array.\n */\n export\n function sort(items: IIterator<Contents.IModel>, state: DirListing.ISortState) : Contents.IModel[] {\n\n let copy = toArray(items);\n\n if (state.key === 'last_modified') {\n // Sort by type and then by last modified.\n copy.sort((a, b) => {\n // Compare based on type.\n let t1 = typeWeight(a);\n let t2 = typeWeight(b);\n if (t1 !== t2) {\n return t1 < t2 ? -1 : 1; // Infinity safe\n }\n\n let valA = new Date(a.last_modified).getTime();\n let valB = new Date(b.last_modified).getTime();\n\n if (state.direction === 'descending') {\n return valA - valB;\n }\n return valB - valA;\n });\n } else {\n // Sort by type and then by name.\n copy.sort((a, b) => {\n // Compare based on type.\n let t1 = typeWeight(a);\n let t2 = typeWeight(b);\n if (t1 !== t2) {\n return t1 < t2 ? -1 : 1; // Infinity safe\n }\n\n // Compare by display name.\n if (state.direction === 'descending') {\n return b.name.localeCompare(a.name);\n }\n return a.name.localeCompare(b.name);\n });\n }\n\n return copy;\n }\n\n /**\n * Get the index of the node at a client position, or `-1`.\n */\n export\n function hitTestNodes(nodes: HTMLElement[], x: number, y: number): number {\n return ArrayExt.findFirstIndex(nodes, node => ElementExt.hitTest(node, x, y));\n }\n\n /**\n * Weight a contents model by type.\n */\n function typeWeight(model: Contents.IModel): number {\n switch (model.type) {\n case 'directory':\n return 0;\n case 'notebook':\n return 1;\n case 'file':\n return 2;\n default:\n return Infinity;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"listing.js","sourceRoot":"","sources":["../../../../filebrowser/src/listing.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport {\n Dialog, DOMUtils, showDialog, showErrorMessage\n} from '@jupyterlab/apputils';\n\nimport {\n PathExt, Time\n} from '@jupyterlab/coreutils';\n\nimport {\n DocumentRegistry\n} from '@jupyterlab/docregistry';\n\nimport {\n IDocumentManager, isValidFileName, renameFile\n} from '@jupyterlab/docmanager';\n\nimport {\n Contents\n} from '@jupyterlab/services';\n\nimport {\n ArrayExt, ArrayIterator, IIterator, each, filter, find, map, toArray\n} from '@phosphor/algorithm';\n\nimport {\n MimeData, PromiseDelegate\n} from '@phosphor/coreutils';\n\nimport {\n Drag, IDragEvent\n} from '@phosphor/dragdrop';\n\nimport {\n ElementExt\n} from '@phosphor/domutils';\n\nimport {\n Message, MessageLoop\n} from '@phosphor/messaging';\n\nimport {\n Widget\n} from '@phosphor/widgets';\n\nimport {\n FileBrowserModel\n} from './model';\n\n\n/**\n * The class name added to DirListing widget.\n */\nconst DIR_LISTING_CLASS = 'jp-DirListing';\n\n/**\n * The class name added to a dir listing header node.\n */\nconst HEADER_CLASS = 'jp-DirListing-header';\n\n/**\n * The class name added to a dir listing list header cell.\n */\nconst HEADER_ITEM_CLASS = 'jp-DirListing-headerItem';\n\n/**\n * The class name added to a header cell text node.\n */\nconst HEADER_ITEM_TEXT_CLASS = 'jp-DirListing-headerItemText';\n\n/**\n * The class name added to a header cell icon node.\n */\nconst HEADER_ITEM_ICON_CLASS = 'jp-DirListing-headerItemIcon';\n\n/**\n * The class name added to the dir listing content node.\n */\nconst CONTENT_CLASS = 'jp-DirListing-content';\n\n/**\n * The class name added to dir listing content item.\n */\nconst ITEM_CLASS = 'jp-DirListing-item';\n\n/**\n * The class name added to the listing item text cell.\n */\nconst ITEM_TEXT_CLASS = 'jp-DirListing-itemText';\n\n/**\n * The class name added to the listing item icon cell.\n */\nconst ITEM_ICON_CLASS = 'jp-DirListing-itemIcon';\n\n/**\n * The class name added to the listing item modified cell.\n */\nconst ITEM_MODIFIED_CLASS = 'jp-DirListing-itemModified';\n\n/**\n * The class name added to the dir listing editor node.\n */\nconst EDITOR_CLASS = 'jp-DirListing-editor';\n\n/**\n * The class name added to the name column header cell.\n */\nconst NAME_ID_CLASS = 'jp-id-name';\n\n/**\n * The class name added to the modified column header cell.\n */\nconst MODIFIED_ID_CLASS = 'jp-id-modified';\n\n/**\n * The mime type for a con tents drag object.\n */\nconst CONTENTS_MIME = 'application/x-jupyter-icontents';\n\n/**\n * The class name added to drop targets.\n */\nconst DROP_TARGET_CLASS = 'jp-mod-dropTarget';\n\n/**\n * The class name added to selected rows.\n */\nconst SELECTED_CLASS = 'jp-mod-selected';\n\n/**\n * The class name added to drag state icons to add space between the icon and the file name\n */\nconst DRAG_ICON_CLASS = 'jp-DragIcon';\n\n/**\n * The class name added to the widget when there are items on the clipboard.\n */\nconst CLIPBOARD_CLASS = 'jp-mod-clipboard';\n\n/**\n * The class name added to cut rows.\n */\nconst CUT_CLASS = 'jp-mod-cut';\n\n/**\n * The class name added when there are more than one selected rows.\n */\nconst MULTI_SELECTED_CLASS = 'jp-mod-multiSelected';\n\n/**\n * The class name added to indicate running notebook.\n */\nconst RUNNING_CLASS = 'jp-mod-running';\n\n/**\n * The class name added for a decending sort.\n */\nconst DESCENDING_CLASS = 'jp-mod-descending';\n\n/**\n * The minimum duration for a rename select in ms.\n */\nconst RENAME_DURATION = 1000;\n\n/**\n * The maximum duration between two key presses when selecting files by prefix.\n */\nconst PREFIX_APPEND_DURATION = 1000;\n\n/**\n * The threshold in pixels to start a drag event.\n */\nconst DRAG_THRESHOLD = 5;\n\n/**\n * A boolean indicating whether the platform is Mac.\n */\nconst IS_MAC = !!navigator.platform.match(/Mac/i);\n\n/**\n * The factory MIME type supported by phosphor dock panels.\n */\nconst FACTORY_MIME = 'application/vnd.phosphor.widget-factory';\n\n\n/**\n * A widget which hosts a file list area.\n */\nexport\nclass DirListing extends Widget {\n /**\n * Construct a new file browser directory listing widget.\n *\n * @param model - The file browser view model.\n */\n constructor(options: DirListing.IOptions) {\n super({\n node: (options.renderer || DirListing.defaultRenderer).createNode()\n });\n this.addClass(DIR_LISTING_CLASS);\n this._model = options.model;\n this._model.fileChanged.connect(this._onFileChanged, this);\n this._model.refreshed.connect(this._onModelRefreshed, this);\n this._model.pathChanged.connect(this._onPathChanged, this);\n this._editNode = document.createElement('input');\n this._editNode.className = EDITOR_CLASS;\n this._manager = this._model.manager;\n this._renderer = options.renderer || DirListing.defaultRenderer;\n\n const headerNode = DOMUtils.findElement(this.node, HEADER_CLASS);\n this._renderer.populateHeaderNode(headerNode);\n this._manager.activateRequested.connect(this._onActivateRequested, this);\n }\n\n /**\n * Dispose of the resources held by the directory listing.\n */\n dispose(): void {\n this._items.length = 0;\n this._sortedItems.length = 0;\n this._clipboard.length = 0;\n super.dispose();\n }\n\n /**\n * Get the model used by the listing.\n */\n get model(): FileBrowserModel {\n return this._model;\n }\n\n /**\n * Get the dir listing header node.\n *\n * #### Notes\n * This is the node which holds the header cells.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get headerNode(): HTMLElement {\n return DOMUtils.findElement(this.node, HEADER_CLASS);\n }\n\n /**\n * Get the dir listing content node.\n *\n * #### Notes\n * This is the node which holds the item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode(): HTMLElement {\n return DOMUtils.findElement(this.node, CONTENT_CLASS);\n }\n\n /**\n * The renderer instance used by the directory listing.\n */\n get renderer(): DirListing.IRenderer {\n return this._renderer;\n }\n\n /**\n * The current sort state.\n */\n get sortState(): DirListing.ISortState {\n return this._sortState;\n }\n\n /**\n * Create an iterator over the listing's selected items.\n *\n * @returns A new iterator over the listing's selected items.\n */\n selectedItems(): IIterator<Contents.IModel> {\n let items = this._sortedItems;\n return filter(items, item => this._selection[item.name]);\n }\n\n /**\n * Create an iterator over the listing's sorted items.\n *\n * @returns A new iterator over the listing's sorted items.\n */\n sortedItems(): IIterator<Contents.IModel> {\n return new ArrayIterator(this._sortedItems);\n }\n\n /**\n * Sort the items using a sort condition.\n */\n sort(state: DirListing.ISortState): void {\n this._sortedItems = Private.sort(this.model.items(), state);\n this._sortState = state;\n this.update();\n }\n\n /**\n * Rename the first currently selected item.\n *\n * @returns A promise that resolves with the new name of the item.\n */\n rename(): Promise<string> {\n return this._doRename();\n }\n\n /**\n * Cut the selected items.\n */\n cut(): void {\n this._isCut = true;\n this._copy();\n this.update();\n }\n\n /**\n * Copy the selected items.\n */\n copy(): void {\n this._copy();\n }\n\n /**\n * Paste the items from the clipboard.\n *\n * @returns A promise that resolves when the operation is complete.\n */\n paste(): Promise<void> {\n if (!this._clipboard.length) {\n this._isCut = false;\n return Promise.resolve(undefined);\n }\n\n const basePath = this._model.path;\n let promises: Promise<Contents.IModel>[] = [];\n\n each(this._clipboard, path => {\n if (this._isCut) {\n const parts = path.split('/');\n const name = parts[parts.length - 1];\n const newPath = PathExt.join(basePath, name);\n promises.push(this._model.manager.rename(path, newPath));\n } else {\n promises.push(this._model.manager.copy(path, basePath));\n }\n });\n\n // Remove any cut modifiers.\n each(this._items, item => {\n item.classList.remove(CUT_CLASS);\n });\n\n this._clipboard.length = 0;\n this._isCut = false;\n this.removeClass(CLIPBOARD_CLASS);\n return Promise.all(promises).then(() => {\n return undefined;\n }).catch(error => {\n showErrorMessage('Paste Error', error);\n });\n }\n\n /**\n * Delete the currently selected item(s).\n *\n * @returns A promise that resolves when the operation is complete.\n */\n delete(): Promise<void> {\n let names: string[] = [];\n each(this._sortedItems, item => {\n if (this._selection[item.name]) {\n names.push(item.name);\n }\n });\n let message = `Are you sure you want to permanently delete the ${names.length} files/folders selected?`;\n if (names.length === 1) {\n message = `Are you sure you want to permanently delete: ${names[0]}?`;\n }\n if (names.length) {\n return showDialog({\n title: 'Delete',\n body: message,\n buttons: [Dialog.cancelButton(), Dialog.warnButton({ label: 'DELETE'})]\n }).then(result => {\n if (!this.isDisposed && result.button.accept) {\n return this._delete(names);\n }\n });\n }\n return Promise.resolve(void 0);\n }\n\n /**\n * Duplicate the currently selected item(s).\n *\n * @returns A promise that resolves when the operation is complete.\n */\n duplicate(): Promise<void> {\n const basePath = this._model.path;\n let promises: Promise<Contents.IModel>[] = [];\n\n each(this.selectedItems(), item => {\n if (item.type !== 'directory') {\n let oldPath = PathExt.join(basePath, item.name);\n promises.push(this._model.manager.copy(oldPath, basePath));\n }\n });\n return Promise.all(promises).then(() => {\n return undefined;\n }).catch(error => {\n showErrorMessage('Duplicate file', error);\n });\n }\n\n /**\n * Download the currently selected item(s).\n */\n download(): void {\n each(this.selectedItems(), item => {\n if (item.type !== 'directory') {\n this._model.download(item.path);\n }\n });\n }\n\n /**\n * Shut down kernels on the applicable currently selected items.\n *\n * @returns A promise that resolves when the operation is complete.\n */\n shutdownKernels(): Promise<void> {\n const model = this._model;\n const items = this._sortedItems;\n const paths = items.map(item => item.path);\n\n const promises = toArray(this._model.sessions()).filter(session => {\n let index = ArrayExt.firstIndexOf(paths, session.path);\n return this._selection[items[index].name];\n }).map(session => model.manager.services.sessions.shutdown(session.id));\n\n return Promise.all(promises).then(() => {\n return undefined;\n }).catch(error => {\n showErrorMessage('Shutdown kernel', error);\n });\n }\n\n /**\n * Select next item.\n *\n * @param keepExisting - Whether to keep the current selection and add to it.\n */\n selectNext(keepExisting = false): void {\n let index = -1;\n let selected = Object.keys(this._selection);\n let items = this._sortedItems;\n if (selected.length === 1 || keepExisting) {\n // Select the next item.\n let name = selected[selected.length - 1];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n index += 1;\n if (index === this._items.length) {\n index = 0;\n }\n } else if (selected.length === 0) {\n // Select the first item.\n index = 0;\n } else {\n // Select the last selected item.\n let name = selected[selected.length - 1];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n }\n if (index !== -1) {\n this._selectItem(index, keepExisting);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n }\n }\n\n /**\n * Select previous item.\n *\n * @param keepExisting - Whether to keep the current selection and add to it.\n */\n selectPrevious(keepExisting = false): void {\n let index = -1;\n let selected = Object.keys(this._selection);\n let items = this._sortedItems;\n if (selected.length === 1 || keepExisting) {\n // Select the previous item.\n let name = selected[0];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n index -= 1;\n if (index === -1) {\n index = this._items.length - 1;\n }\n } else if (selected.length === 0) {\n // Select the last item.\n index = this._items.length - 1;\n } else {\n // Select the first selected item.\n let name = selected[0];\n index = ArrayExt.findFirstIndex(items, value => value.name === name);\n }\n if (index !== -1) {\n this._selectItem(index, keepExisting);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n }\n }\n\n /**\n * Select the first item that starts with prefix being typed.\n */\n selectByPrefix(): void {\n const prefix = this._searchPrefix;\n let items = this._sortedItems;\n\n let index = ArrayExt.findFirstIndex(items, value => {\n return value.name.toLowerCase().substr(0, prefix.length) === prefix;\n });\n\n if (index !== -1) {\n this._selectItem(index, false);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n }\n }\n\n /**\n * Get whether an item is selected by name.\n *\n * @param name - The name of of the item.\n *\n * @returns Whether the item is selected.\n */\n isSelected(name: string): boolean {\n return this._selection[name] === true;\n }\n\n /**\n * Find a model given a click.\n *\n * @param event - The mouse event.\n *\n * @returns The model for the selected file.\n */\n modelForClick(event: MouseEvent): Contents.IModel | undefined {\n let items = this._sortedItems;\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n if (index !== -1) {\n return items[index];\n }\n return undefined;\n }\n\n /**\n * Select an item by name.\n *\n * @parem name - The name of the item to select.\n *\n * @returns A promise that resolves when the name is selected.\n */\n selectItemByName(name: string): Promise<void> {\n // Make sure the file is available.\n return this.model.refresh().then(() => {\n if (this.isDisposed) {\n throw new Error('File browser is disposed.');\n }\n let items = this._sortedItems;\n let index = ArrayExt.findFirstIndex(items, value => value.name === name);\n if (index === -1) {\n throw new Error('Item does not exist.');\n }\n this._selectItem(index, false);\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n });\n }\n\n /**\n * Handle the DOM events for the directory listing.\n *\n * @param event - The DOM event sent to the widget.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event: Event): void {\n switch (event.type) {\n case 'mousedown':\n this._evtMousedown(event as MouseEvent);\n break;\n case 'mouseup':\n this._evtMouseup(event as MouseEvent);\n break;\n case 'mousemove':\n this._evtMousemove(event as MouseEvent);\n break;\n case 'keydown':\n this._evtKeydown(event as KeyboardEvent);\n break;\n case 'click':\n this._evtClick(event as MouseEvent);\n break;\n case 'dblclick':\n this._evtDblClick(event as MouseEvent);\n break;\n case 'dragenter':\n case 'dragover':\n this.addClass('jp-mod-native-drop');\n event.preventDefault();\n break;\n case 'dragleave':\n case 'dragend':\n this.removeClass('jp-mod-native-drop');\n break;\n case 'drop':\n this.removeClass('jp-mod-native-drop');\n this._evtNativeDrop(event as DragEvent);\n break;\n case 'scroll':\n this._evtScroll(event as MouseEvent);\n break;\n case 'p-dragenter':\n this._evtDragEnter(event as IDragEvent);\n break;\n case 'p-dragleave':\n this._evtDragLeave(event as IDragEvent);\n break;\n case 'p-dragover':\n this._evtDragOver(event as IDragEvent);\n break;\n case 'p-drop':\n this._evtDrop(event as IDragEvent);\n break;\n default:\n break;\n }\n }\n\n /**\n * A message handler invoked on an `'after-attach'` message.\n */\n protected onAfterAttach(msg: Message): void {\n super.onAfterAttach(msg);\n let node = this.node;\n let content = DOMUtils.findElement(node, CONTENT_CLASS);\n node.addEventListener('mousedown', this);\n node.addEventListener('keydown', this);\n node.addEventListener('click', this);\n node.addEventListener('dblclick', this);\n content.addEventListener('dragenter', this);\n content.addEventListener('dragover', this);\n content.addEventListener('dragleave', this);\n content.addEventListener('dragend', this);\n content.addEventListener('drop', this);\n content.addEventListener('scroll', this);\n content.addEventListener('p-dragenter', this);\n content.addEventListener('p-dragleave', this);\n content.addEventListener('p-dragover', this);\n content.addEventListener('p-drop', this);\n }\n\n /**\n * A message handler invoked on a `'before-detach'` message.\n */\n protected onBeforeDetach(msg: Message): void {\n super.onBeforeDetach(msg);\n let node = this.node;\n let content = DOMUtils.findElement(node, CONTENT_CLASS);\n node.removeEventListener('mousedown', this);\n node.removeEventListener('keydown', this);\n node.removeEventListener('click', this);\n node.removeEventListener('dblclick', this);\n content.removeEventListener('scroll', this);\n content.removeEventListener('dragover', this);\n content.removeEventListener('dragover', this);\n content.removeEventListener('dragleave', this);\n content.removeEventListener('dragend', this);\n content.removeEventListener('drop', this);\n content.removeEventListener('p-dragenter', this);\n content.removeEventListener('p-dragleave', this);\n content.removeEventListener('p-dragover', this);\n content.removeEventListener('p-drop', this);\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n }\n\n /**\n * A message handler invoked on an `'after-show'` message.\n */\n protected onAfterShow(msg: Message): void {\n if (this._isDirty) {\n // Update the sorted items.\n this.sort(this.sortState);\n this.update();\n }\n }\n\n /**\n * A handler invoked on an `'update-request'` message.\n */\n protected onUpdateRequest(msg: Message): void {\n this._isDirty = false;\n\n // Fetch common variables.\n let items = this._sortedItems;\n let nodes = this._items;\n let content = DOMUtils.findElement(this.node, CONTENT_CLASS);\n let renderer = this._renderer;\n\n this.removeClass(MULTI_SELECTED_CLASS);\n this.removeClass(SELECTED_CLASS);\n\n // Remove any excess item nodes.\n while (nodes.length > items.length) {\n content.removeChild(nodes.pop());\n }\n\n // Add any missing item nodes.\n while (nodes.length < items.length) {\n let node = renderer.createItemNode();\n node.classList.add(ITEM_CLASS);\n nodes.push(node);\n content.appendChild(node);\n }\n\n // Remove extra classes from the nodes.\n nodes.forEach(item => {\n item.classList.remove(SELECTED_CLASS);\n item.classList.remove(RUNNING_CLASS);\n item.classList.remove(CUT_CLASS);\n });\n\n // Add extra classes to item nodes based on widget state.\n items.forEach((item, i) => {\n let node = nodes[i];\n let ft = this._manager.registry.getFileTypeForModel(item);\n renderer.updateItemNode(node, item, ft);\n if (this._selection[item.name]) {\n node.classList.add(SELECTED_CLASS);\n if (this._isCut && this._model.path === this._prevPath) {\n node.classList.add(CUT_CLASS);\n }\n }\n });\n\n // Handle the selectors on the widget node.\n let selected = Object.keys(this._selection).length;\n if (selected) {\n this.addClass(SELECTED_CLASS);\n if (selected > 1) {\n this.addClass(MULTI_SELECTED_CLASS);\n }\n }\n\n // Handle file session statuses.\n let paths = items.map(item => item.path);\n each(this._model.sessions(), session => {\n let index = ArrayExt.firstIndexOf(paths, session.path);\n let node = nodes[index];\n let name = session.kernel.name;\n let specs = this._model.specs;\n\n node.classList.add(RUNNING_CLASS);\n if (specs) {\n name = specs.kernelspecs[name].display_name;\n }\n node.title = `${node.title}\\nKernel: ${name}`;\n });\n\n this._prevPath = this._model.path;\n }\n\n /**\n * Handle the `'click'` event for the widget.\n */\n private _evtClick(event: MouseEvent) {\n let target = event.target as HTMLElement;\n\n let header = this.headerNode;\n if (header.contains(target)) {\n let state = this.renderer.handleHeaderClick(header, event);\n if (state) {\n this.sort(state);\n }\n return;\n }\n }\n\n /**\n * Handle the `'scroll'` event for the widget.\n */\n private _evtScroll(event: MouseEvent): void {\n this.headerNode.scrollLeft = this.contentNode.scrollLeft;\n }\n\n /**\n * Handle the `'mousedown'` event for the widget.\n */\n private _evtMousedown(event: MouseEvent): void {\n // Bail if clicking within the edit node\n if (event.target === this._editNode) {\n return;\n }\n\n // Blur the edit node if necessary.\n if (this._editNode.parentNode) {\n if (this._editNode !== event.target as HTMLElement) {\n this._editNode.focus();\n this._editNode.blur();\n clearTimeout(this._selectTimer);\n } else {\n return;\n }\n }\n\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n if (index === -1) {\n return;\n }\n this._handleFileSelect(event);\n\n if (event.button !== 0) {\n clearTimeout(this._selectTimer);\n }\n\n // Check for clearing a context menu.\n let newContext = (IS_MAC && event.ctrlKey) || (event.button === 2);\n if (newContext) {\n return;\n }\n\n // Left mouse press for drag start.\n if (event.button === 0) {\n this._dragData = { pressX: event.clientX, pressY: event.clientY,\n index: index };\n document.addEventListener('mouseup', this, true);\n document.addEventListener('mousemove', this, true);\n }\n }\n\n /**\n * Handle the `'mouseup'` event for the widget.\n */\n private _evtMouseup(event: MouseEvent): void {\n // Handle any soft selection from the previous mouse down.\n if (this._softSelection) {\n let altered = event.metaKey || event.shiftKey || event.ctrlKey;\n // See if we need to clear the other selection.\n if (!altered && event.button === 0) {\n this._selection = Object.create(null);\n this._selection[this._softSelection] = true;\n this.update();\n }\n this._softSelection = '';\n }\n // Remove the drag listeners if necessary.\n if (event.button !== 0 || !this._drag) {\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Handle the `'mousemove'` event for the widget.\n */\n private _evtMousemove(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n // Bail if we are the one dragging.\n if (this._drag || !this._dragData) {\n return;\n }\n\n // Check for a drag initialization.\n let data = this._dragData;\n let dx = Math.abs(event.clientX - data.pressX);\n let dy = Math.abs(event.clientY - data.pressY);\n if (dx < DRAG_THRESHOLD && dy < DRAG_THRESHOLD) {\n return;\n }\n\n this._startDrag(data.index, event.clientX, event.clientY);\n }\n\n /**\n * Handle the `'keydown'` event for the widget.\n */\n private _evtKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case 13: // Enter\n // Do nothing if any modifier keys are pressed.\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n let selected = Object.keys(this._selection);\n let name = selected[0];\n let items = this._sortedItems;\n let i = ArrayExt.findFirstIndex(items, value => value.name === name);\n if (i === -1) {\n return;\n }\n\n let model = this._model;\n let item = this._sortedItems[i];\n if (item.type === 'directory') {\n model.cd(item.name).catch(error =>\n showErrorMessage('Open directory', error)\n );\n } else {\n let path = item.path;\n this._manager.openOrReveal(path);\n }\n\n break;\n case 38: // Up arrow\n this.selectPrevious(event.shiftKey);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 40: // Down arrow\n this.selectNext(event.shiftKey);\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n break;\n }\n\n // Detects printable characters typed by the user.\n // Not all browsers support .key, but it discharges us from reconstructing\n // characters from key codes.\n if (!this._inRename && event.key !== undefined && event.key.length === 1) {\n this._searchPrefix += event.key;\n\n clearTimeout(this._searchPrefixTimer);\n this._searchPrefixTimer = window.setTimeout(() => {\n this._searchPrefix = '';\n }, PREFIX_APPEND_DURATION);\n\n this.selectByPrefix();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle the `'dblclick'` event for the widget.\n */\n private _evtDblClick(event: MouseEvent): void {\n // Do nothing if it's not a left mouse press.\n if (event.button !== 0) {\n return;\n }\n\n // Do nothing if any modifier keys are pressed.\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n\n clearTimeout(this._selectTimer);\n this._noSelectTimer = window.setTimeout(() => {\n this._noSelectTimer = -1;\n }, RENAME_DURATION);\n\n this._editNode.blur();\n\n // Find a valid double click target.\n let target = event.target as HTMLElement;\n let i = ArrayExt.findFirstIndex(this._items, node => node.contains(target));\n if (i === -1) {\n return;\n }\n\n let model = this._model;\n let item = this._sortedItems[i];\n if (item.type === 'directory') {\n model.cd(item.name).catch(error =>\n showErrorMessage('Open directory', error)\n );\n } else {\n let path = item.path;\n this._manager.openOrReveal(path);\n }\n }\n\n /**\n * Handle the `drop` event for the widget.\n */\n private _evtNativeDrop(event: DragEvent): void {\n let files = event.dataTransfer.files;\n if (files.length === 0) {\n return;\n }\n event.preventDefault();\n for (let i = 0; i < files.length; i++) {\n this._model.upload(files[i]);\n }\n }\n\n /**\n * Handle the `'p-dragenter'` event for the widget.\n */\n private _evtDragEnter(event: IDragEvent): void {\n if (event.mimeData.hasData(CONTENTS_MIME)) {\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n if (index === -1) {\n return;\n }\n let item = this._sortedItems[index];\n if (item.type !== 'directory' || this._selection[item.name]) {\n return;\n }\n let target = event.target as HTMLElement;\n target.classList.add(DROP_TARGET_CLASS);\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Handle the `'p-dragleave'` event for the widget.\n */\n private _evtDragLeave(event: IDragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n let dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n if (dropTarget) {\n dropTarget.classList.remove(DROP_TARGET_CLASS);\n }\n }\n\n /**\n * Handle the `'p-dragover'` event for the widget.\n */\n private _evtDragOver(event: IDragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n event.dropAction = event.proposedAction;\n let dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n if (dropTarget) {\n dropTarget.classList.remove(DROP_TARGET_CLASS);\n }\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n this._items[index].classList.add(DROP_TARGET_CLASS);\n }\n\n /**\n * Handle the `'p-drop'` event for the widget.\n */\n private _evtDrop(event: IDragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(this._selectTimer);\n if (event.proposedAction === 'none') {\n event.dropAction = 'none';\n return;\n }\n if (!event.mimeData.hasData(CONTENTS_MIME)) {\n return;\n }\n event.dropAction = event.proposedAction;\n\n let target = event.target as HTMLElement;\n while (target && target.parentElement) {\n if (target.classList.contains(DROP_TARGET_CLASS)) {\n target.classList.remove(DROP_TARGET_CLASS);\n break;\n }\n target = target.parentElement;\n }\n\n // Get the path based on the target node.\n const index = ArrayExt.firstIndexOf(this._items, target);\n const items = this._sortedItems;\n let basePath = this._model.path;\n if (items[index].type === 'directory') {\n basePath = PathExt.join(basePath, items[index].name);\n }\n const manager = this._manager;\n\n // Handle the items.\n const promises: Promise<Contents.IModel | null>[] = [];\n const paths = event.mimeData.getData(CONTENTS_MIME) as string[];\n for (let path of paths) {\n let localPath = manager.services.contents.localPath(path);\n let name = PathExt.basename(localPath);\n let newPath = PathExt.join(basePath, name);\n // Skip files that are not moving.\n if (newPath === path) {\n continue;\n }\n promises.push(renameFile(manager, path, newPath));\n }\n Promise.all(promises).catch(error => {\n showErrorMessage('Move Error', error);\n });\n }\n\n /**\n * Start a drag event.\n */\n private _startDrag(index: number, clientX: number, clientY: number): void {\n let selectedNames = Object.keys(this._selection);\n let source = this._items[index];\n let items = this._sortedItems;\n let item: Contents.IModel | undefined;\n\n // If the source node is not selected, use just that node.\n if (!source.classList.contains(SELECTED_CLASS)) {\n item = items[index];\n selectedNames = [item.name];\n } else {\n let name = selectedNames[0];\n item = find(items, value => value.name === name);\n }\n\n if (!item) {\n return;\n }\n\n // Create the drag image.\n let ft = this._manager.registry.getFileTypeForModel(item);\n let dragImage = this.renderer.createDragImage(source, selectedNames.length, ft);\n\n // Set up the drag event.\n this._drag = new Drag({\n dragImage,\n mimeData: new MimeData(),\n supportedActions: 'move',\n proposedAction: 'move'\n });\n let basePath = this._model.path;\n let paths = toArray(map(selectedNames, name => {\n return PathExt.join(basePath, name);\n }));\n this._drag.mimeData.setData(CONTENTS_MIME, paths);\n if (item && item.type !== 'directory') {\n const otherPaths = paths.slice(1).reverse();\n this._drag.mimeData.setData(FACTORY_MIME, () => {\n if (!item) {\n return;\n }\n let path = item.path;\n let widget = this._manager.findWidget(path);\n if (!widget) {\n widget = this._manager.open(item.path);\n }\n if (otherPaths.length) {\n const firstWidgetPlaced = new PromiseDelegate<void>();\n firstWidgetPlaced.promise.then(() => {\n let prevWidget = widget;\n otherPaths.forEach(path => {\n const options: DocumentRegistry.IOpenOptions = {\n ref: prevWidget.id,\n mode: 'tab-after'\n };\n prevWidget = this._manager.openOrReveal(path, void 0, void 0, options);\n this._manager.openOrReveal(item.path);\n });\n });\n firstWidgetPlaced.resolve(void 0);\n }\n return widget;\n });\n }\n\n // Start the drag and remove the mousemove and mouseup listeners.\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n clearTimeout(this._selectTimer);\n this._drag.start(clientX, clientY).then(action => {\n this._drag = null;\n clearTimeout(this._selectTimer);\n });\n }\n\n /**\n * Handle selection on a file node.\n */\n private _handleFileSelect(event: MouseEvent): void {\n // Fetch common variables.\n let items = this._sortedItems;\n let index = Private.hitTestNodes(this._items, event.clientX, event.clientY);\n let target = event.target as HTMLElement;\n let inText = target.classList.contains(ITEM_TEXT_CLASS);\n\n clearTimeout(this._selectTimer);\n\n if (index === -1) {\n return;\n }\n\n // Clear any existing soft selection.\n this._softSelection = '';\n\n let name = items[index].name;\n let selected = Object.keys(this._selection);\n\n // Handle toggling.\n if ((IS_MAC && event.metaKey) || (!IS_MAC && event.ctrlKey)) {\n if (this._selection[name]) {\n delete this._selection[name];\n } else {\n this._selection[name] = true;\n }\n\n // Handle multiple select.\n } else if (event.shiftKey) {\n this._handleMultiSelect(selected, index);\n\n // Handle a 'soft' selection\n } else if (name in this._selection && selected.length > 1) {\n this._softSelection = name;\n\n // Default to selecting the only the item.\n } else {\n // Handle a rename.\n if (inText && selected.length === 1 && selected[0] === name) {\n this._selectTimer = window.setTimeout(() => {\n if (this._noSelectTimer === -1) {\n this._doRename();\n }\n }, RENAME_DURATION);\n }\n // Select only the given item.\n this._selection = Object.create(null);\n this._selection[name] = true;\n }\n this.update();\n }\n\n /**\n * Handle a multiple select on a file item node.\n */\n private _handleMultiSelect(selected: string[], index: number): void {\n // Find the \"nearest selected\".\n let items = this._sortedItems;\n let nearestIndex = -1;\n for (let i = 0; i < this._items.length; i++) {\n if (i === index) {\n continue;\n }\n let name = items[i].name;\n if (selected.indexOf(name) !== -1) {\n if (nearestIndex === -1) {\n nearestIndex = i;\n } else {\n if (Math.abs(index - i) < Math.abs(nearestIndex - i)) {\n nearestIndex = i;\n }\n }\n }\n }\n\n // Default to the first element (and fill down).\n if (nearestIndex === -1) {\n nearestIndex = 0;\n }\n\n // Select the rows between the current and the nearest selected.\n for (let i = 0; i < this._items.length; i++) {\n if (nearestIndex >= i && index <= i ||\n nearestIndex <= i && index >= i) {\n this._selection[items[i].name] = true;\n }\n }\n }\n\n\n /**\n * Copy the selected items, and optionally cut as well.\n */\n private _copy(): void {\n this._clipboard.length = 0;\n each(this.selectedItems(), item => {\n this._clipboard.push(item.path);\n });\n }\n\n /**\n * Delete the files with the given names.\n */\n private _delete(names: string[]): Promise<void> {\n const promises: Promise<void>[] = [];\n const basePath = this._model.path;\n for (let name of names) {\n let newPath = PathExt.join(basePath, name);\n let promise = this._model.manager.deleteFile(newPath).catch(err => {\n showErrorMessage('Delete Failed', err);\n });\n promises.push(promise);\n }\n return Promise.all(promises).then(() => undefined);\n }\n\n /**\n * Allow the user to rename item on a given row.\n */\n private _doRename(): Promise<string> {\n this._inRename = true;\n let items = this._sortedItems;\n let name = Object.keys(this._selection)[0];\n let index = ArrayExt.findFirstIndex(items, value => value.name === name);\n let row = this._items[index];\n let item = items[index];\n let nameNode = this.renderer.getNameNode(row);\n let original = item.name;\n this._editNode.value = original;\n this._selectItem(index, false);\n\n return Private.doRename(nameNode, this._editNode).then(newName => {\n if (!newName || newName === original) {\n this._inRename = false;\n return original;\n }\n if (!isValidFileName(newName)) {\n showErrorMessage('Rename Error', Error(\n `\"${newName}\" is not a valid name for a file. ` +\n `Names must have nonzero length, ` +\n `and cannot include \"/\", \"\\\\\", or \":\"`\n ));\n this._inRename = false;\n return original;\n }\n\n if (this.isDisposed) {\n this._inRename = false;\n throw new Error('File browser is disposed.');\n }\n\n const manager = this._manager;\n const oldPath = PathExt.join(this._model.path, original);\n const newPath = PathExt.join(this._model.path, newName);\n const promise = renameFile(manager, oldPath, newPath);\n return promise.catch(error => {\n if (error !== 'File not renamed') {\n showErrorMessage('Rename Error', error);\n }\n this._inRename = false;\n return original;\n }).then(() => {\n if (this.isDisposed) {\n this._inRename = false;\n throw new Error('File browser is disposed.');\n }\n if (this._inRename) {\n // No need to catch because `newName` will always exit.\n this.selectItemByName(newName);\n }\n this._inRename = false;\n return newName;\n });\n });\n }\n\n /**\n * Select a given item.\n */\n private _selectItem(index: number, keepExisting: boolean) {\n // Selected the given row(s)\n let items = this._sortedItems;\n if (!keepExisting) {\n this._selection = Object.create(null);\n }\n let name = items[index].name;\n this._selection[name] = true;\n this.update();\n }\n\n /**\n * Handle the `refreshed` signal from the model.\n */\n private _onModelRefreshed(): void {\n // Update the selection.\n let existing = Object.keys(this._selection);\n this._selection = Object.create(null);\n each(this._model.items(), item => {\n let name = item.name;\n if (existing.indexOf(name) !== -1) {\n this._selection[name] = true;\n }\n });\n if (this.isVisible) {\n // Update the sorted items.\n this.sort(this.sortState);\n } else {\n this._isDirty = true;\n }\n }\n\n /**\n * Handle a `pathChanged` signal from the model.\n */\n private _onPathChanged(): void {\n // Reset the selection.\n this._selection = Object.create(null);\n // Update the sorted items.\n this.sort(this.sortState);\n }\n\n /**\n * Handle a `fileChanged` signal from the model.\n */\n private _onFileChanged(sender: FileBrowserModel, args: Contents.IChangedArgs) {\n let newValue = args.newValue;\n if (!newValue) {\n return;\n }\n\n if (args.type !== 'new' || !name) {\n return;\n }\n\n this.selectItemByName(name).then(() => {\n if (!this.isDisposed && newValue.type === 'directory') {\n this._doRename();\n }\n }).catch(() => { /* Ignore if file does not exist. */ });\n }\n\n /**\n * Handle an `activateRequested` signal from the manager.\n */\n private _onActivateRequested(sender: IDocumentManager, args: string): void {\n let dirname = PathExt.dirname(args);\n if (dirname !== this._model.path) {\n return;\n }\n let basename = PathExt.basename(args);\n this.selectItemByName(basename)\n .catch(() => { /* Ignore if file does not exist. */ });\n }\n\n private _model: FileBrowserModel;\n private _editNode: HTMLInputElement;\n private _items: HTMLElement[] = [];\n private _sortedItems: Contents.IModel[] = [];\n private _sortState: DirListing.ISortState = { direction: 'ascending', key: 'name' };\n private _drag: Drag | null = null;\n private _dragData: { pressX: number, pressY: number, index: number } | null = null;\n private _selectTimer = -1;\n private _noSelectTimer = -1;\n private _isCut = false;\n private _prevPath = '';\n private _clipboard: string[] = [];\n private _manager: IDocumentManager;\n private _softSelection = '';\n private _selection: { [key: string]: boolean; } = Object.create(null);\n private _renderer: DirListing.IRenderer;\n private _searchPrefix: string = '';\n private _searchPrefixTimer = -1;\n private _inRename = false;\n private _isDirty = false;\n}\n\n\n/**\n * The namespace for the `DirListing` class statics.\n */\nexport\nnamespace DirListing {\n /**\n * An options object for initializing a file browser directory listing.\n */\n export\n interface IOptions {\n /**\n * A file browser model instance.\n */\n model: FileBrowserModel;\n\n /**\n * A renderer for file items.\n *\n * The default is a shared `Renderer` instance.\n */\n renderer?: IRenderer;\n }\n\n /**\n * A sort state.\n */\n export\n interface ISortState {\n /**\n * The direction of sort.\n */\n direction: 'ascending' | 'descending';\n\n /**\n * The sort key.\n */\n key: 'name' | 'last_modified';\n }\n\n /**\n * The render interface for file browser listing options.\n */\n export\n interface IRenderer {\n /**\n * Create the DOM node for a dir listing.\n */\n createNode(): HTMLElement;\n\n /**\n * Populate and empty header node for a dir listing.\n *\n * @param node - The header node to populate.\n */\n populateHeaderNode(node: HTMLElement): void;\n\n /**\n * Handle a header click.\n *\n * @param node - A node populated by [[populateHeaderNode]].\n *\n * @param event - A click event on the node.\n *\n * @returns The sort state of the header after the click event.\n */\n handleHeaderClick(node: HTMLElement, event: MouseEvent): ISortState;\n\n /**\n * Create a new item node for a dir listing.\n *\n * @returns A new DOM node to use as a content item.\n */\n createItemNode(): HTMLElement;\n\n /**\n * Update an item node to reflect the current state of a model.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param model - The model object to use for the item state.\n *\n * @param fileType - The file type of the item, if applicable.\n */\n updateItemNode(node: HTMLElement, model: Contents.IModel, fileType?: DocumentRegistry.IFileType): void;\n\n /**\n * Get the node containing the file name.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @returns The node containing the file name.\n */\n getNameNode(node: HTMLElement): HTMLElement;\n\n /**\n * Create an appropriate drag image for an item.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param count - The number of items being dragged.\n *\n * @param fileType - The file type of the item, if applicable.\n *\n * @returns An element to use as the drag image.\n */\n createDragImage(node: HTMLElement, count: number, fileType?: DocumentRegistry.IFileType): HTMLElement;\n }\n\n /**\n * The default implementation of an `IRenderer`.\n */\n export\n class Renderer implements IRenderer {\n /**\n * Create the DOM node for a dir listing.\n */\n createNode(): HTMLElement {\n let node = document.createElement('div');\n let header = document.createElement('div');\n let content = document.createElement('ul');\n content.className = CONTENT_CLASS;\n header.className = HEADER_CLASS;\n node.appendChild(header);\n node.appendChild(content);\n node.tabIndex = 1;\n return node;\n }\n\n /**\n * Populate and empty header node for a dir listing.\n *\n * @param node - The header node to populate.\n */\n populateHeaderNode(node: HTMLElement): void {\n let name = this._createHeaderItemNode('Name');\n let modified = this._createHeaderItemNode('Last Modified');\n name.classList.add(NAME_ID_CLASS);\n name.classList.add(SELECTED_CLASS);\n modified.classList.add(MODIFIED_ID_CLASS);\n node.appendChild(name);\n node.appendChild(modified);\n }\n\n /**\n * Handle a header click.\n *\n * @param node - A node populated by [[populateHeaderNode]].\n *\n * @param event - A click event on the node.\n *\n * @returns The sort state of the header after the click event.\n */\n handleHeaderClick(node: HTMLElement, event: MouseEvent): ISortState {\n let name = DOMUtils.findElement(node, NAME_ID_CLASS);\n let modified = DOMUtils.findElement(node, MODIFIED_ID_CLASS);\n let state: ISortState = { direction: 'ascending', key: 'name' };\n let target = event.target as HTMLElement;\n if (name.contains(target)) {\n if (name.classList.contains(SELECTED_CLASS)) {\n if (!name.classList.contains(DESCENDING_CLASS)) {\n state.direction = 'descending';\n name.classList.add(DESCENDING_CLASS);\n } else {\n name.classList.remove(DESCENDING_CLASS);\n }\n } else {\n name.classList.remove(DESCENDING_CLASS);\n }\n name.classList.add(SELECTED_CLASS);\n modified.classList.remove(SELECTED_CLASS);\n modified.classList.remove(DESCENDING_CLASS);\n return state;\n }\n if (modified.contains(target)) {\n state.key = 'last_modified';\n if (modified.classList.contains(SELECTED_CLASS)) {\n if (!modified.classList.contains(DESCENDING_CLASS)) {\n state.direction = 'descending';\n modified.classList.add(DESCENDING_CLASS);\n } else {\n modified.classList.remove(DESCENDING_CLASS);\n }\n } else {\n modified.classList.remove(DESCENDING_CLASS);\n }\n modified.classList.add(SELECTED_CLASS);\n name.classList.remove(SELECTED_CLASS);\n name.classList.remove(DESCENDING_CLASS);\n return state;\n }\n return state;\n }\n\n /**\n * Create a new item node for a dir listing.\n *\n * @returns A new DOM node to use as a content item.\n */\n createItemNode(): HTMLElement {\n let node = document.createElement('li');\n let icon = document.createElement('span');\n let text = document.createElement('span');\n let modified = document.createElement('span');\n icon.className = ITEM_ICON_CLASS;\n text.className = ITEM_TEXT_CLASS;\n modified.className = ITEM_MODIFIED_CLASS;\n node.appendChild(icon);\n node.appendChild(text);\n node.appendChild(modified);\n return node;\n }\n\n /**\n * Update an item node to reflect the current state of a model.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param model - The model object to use for the item state.\n *\n * @param fileType - The file type of the item, if applicable.\n *\n */\n updateItemNode(node: HTMLElement, model: Contents.IModel, fileType?: DocumentRegistry.IFileType): void {\n let icon = DOMUtils.findElement(node, ITEM_ICON_CLASS);\n let text = DOMUtils.findElement(node, ITEM_TEXT_CLASS);\n let modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS);\n\n if (fileType) {\n icon.textContent = fileType.iconLabel || '';\n icon.className = `${ITEM_ICON_CLASS} ${fileType.iconClass || ''}`;\n } else {\n icon.textContent = '';\n icon.className = ITEM_ICON_CLASS;\n }\n\n node.title = model.name;\n // If an item is being edited currently, its text node is unavailable.\n if (text) {\n text.textContent = model.name;\n }\n\n let modText = '';\n let modTitle = '';\n if (model.last_modified) {\n modText = Time.formatHuman(new Date(model.last_modified));\n modTitle = Time.format(new Date(model.last_modified));\n }\n modified.textContent = modText;\n modified.title = modTitle;\n }\n\n /**\n * Get the node containing the file name.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @returns The node containing the file name.\n */\n getNameNode(node: HTMLElement): HTMLElement {\n return DOMUtils.findElement(node, ITEM_TEXT_CLASS);\n }\n\n /**\n * Create a drag image for an item.\n *\n * @param node - A node created by [[createItemNode]].\n *\n * @param count - The number of items being dragged.\n *\n * @param fileType - The file type of the item, if applicable.\n *\n * @returns An element to use as the drag image.\n */\n createDragImage(node: HTMLElement, count: number, fileType?: DocumentRegistry.IFileType): HTMLElement {\n let dragImage = node.cloneNode(true) as HTMLElement;\n let modified = DOMUtils.findElement(dragImage, ITEM_MODIFIED_CLASS);\n let icon = DOMUtils.findElement(dragImage, ITEM_ICON_CLASS);\n dragImage.removeChild(modified as HTMLElement);\n\n if (!fileType) {\n icon.textContent = '';\n icon.className = '';\n } else {\n icon.textContent = fileType.iconLabel || '';\n icon.className = fileType.iconClass || '';\n }\n icon.classList.add(DRAG_ICON_CLASS);\n\n if (count > 1) {\n let nameNode = DOMUtils.findElement(dragImage, ITEM_TEXT_CLASS);\n nameNode.textContent = count + ' Items';\n }\n return dragImage;\n }\n\n /**\n * Create a node for a header item.\n */\n private _createHeaderItemNode(label: string): HTMLElement {\n let node = document.createElement('div');\n let text = document.createElement('span');\n let icon = document.createElement('span');\n node.className = HEADER_ITEM_CLASS;\n text.className = HEADER_ITEM_TEXT_CLASS;\n icon.className = HEADER_ITEM_ICON_CLASS;\n text.textContent = label;\n node.appendChild(text);\n node.appendChild(icon);\n return node;\n }\n }\n\n /**\n * The default `IRenderer` instance.\n */\n export\n const defaultRenderer = new Renderer();\n}\n\n\n/**\n * The namespace for the listing private data.\n */\nnamespace Private {\n /**\n * Handle editing text on a node.\n *\n * @returns Boolean indicating whether the name changed.\n */\n export\n function doRename(text: HTMLElement, edit: HTMLInputElement): Promise<string> {\n let parent = text.parentElement as HTMLElement;\n parent.replaceChild(edit, text);\n edit.focus();\n let index = edit.value.lastIndexOf('.');\n if (index === -1) {\n edit.setSelectionRange(0, edit.value.length);\n } else {\n edit.setSelectionRange(0, index);\n }\n\n return new Promise<string>((resolve, reject) => {\n edit.onblur = () => {\n parent.replaceChild(text, edit);\n resolve(edit.value);\n };\n edit.onkeydown = (event: KeyboardEvent) => {\n switch (event.keyCode) {\n case 13: // Enter\n event.stopPropagation();\n event.preventDefault();\n edit.blur();\n break;\n case 27: // Escape\n event.stopPropagation();\n event.preventDefault();\n edit.blur();\n break;\n case 38: // Up arrow\n event.stopPropagation();\n event.preventDefault();\n if (edit.selectionStart !== edit.selectionEnd) {\n edit.selectionStart = edit.selectionEnd = 0;\n }\n break;\n case 40: // Down arrow\n event.stopPropagation();\n event.preventDefault();\n if (edit.selectionStart !== edit.selectionEnd) {\n edit.selectionStart = edit.selectionEnd = edit.value.length;\n }\n break;\n default:\n break;\n }\n };\n });\n }\n\n /**\n * Sort a list of items by sort state as a new array.\n */\n export\n function sort(items: IIterator<Contents.IModel>, state: DirListing.ISortState) : Contents.IModel[] {\n\n let copy = toArray(items);\n\n if (state.key === 'last_modified') {\n // Sort by type and then by last modified.\n copy.sort((a, b) => {\n // Compare based on type.\n let t1 = typeWeight(a);\n let t2 = typeWeight(b);\n if (t1 !== t2) {\n return t1 < t2 ? -1 : 1; // Infinity safe\n }\n\n let valA = new Date(a.last_modified).getTime();\n let valB = new Date(b.last_modified).getTime();\n\n if (state.direction === 'descending') {\n return valA - valB;\n }\n return valB - valA;\n });\n } else {\n // Sort by type and then by name.\n copy.sort((a, b) => {\n // Compare based on type.\n let t1 = typeWeight(a);\n let t2 = typeWeight(b);\n if (t1 !== t2) {\n return t1 < t2 ? -1 : 1; // Infinity safe\n }\n\n // Compare by display name.\n if (state.direction === 'descending') {\n return b.name.localeCompare(a.name);\n }\n return a.name.localeCompare(b.name);\n });\n }\n\n return copy;\n }\n\n /**\n * Get the index of the node at a client position, or `-1`.\n */\n export\n function hitTestNodes(nodes: HTMLElement[], x: number, y: number): number {\n return ArrayExt.findFirstIndex(nodes, node => ElementExt.hitTest(node, x, y));\n }\n\n /**\n * Weight a contents model by type.\n */\n function typeWeight(model: Contents.IModel): number {\n switch (model.type) {\n case 'directory':\n return 0;\n case 'notebook':\n return 1;\n case 'file':\n return 2;\n default:\n return Infinity;\n }\n }\n}\n"]}
|
package/lib/model.d.ts
CHANGED
|
@@ -129,6 +129,10 @@ export declare class FileBrowserModel implements IDisposable {
|
|
|
129
129
|
* Handle a change on the contents manager.
|
|
130
130
|
*/
|
|
131
131
|
private _onFileChanged(sender, change);
|
|
132
|
+
/**
|
|
133
|
+
* Populate the model's sessions collection.
|
|
134
|
+
*/
|
|
135
|
+
private _populateSessions(models);
|
|
132
136
|
/**
|
|
133
137
|
* Start the internal refresh timer.
|
|
134
138
|
*/
|
package/lib/model.js
CHANGED
|
@@ -402,13 +402,7 @@ var FileBrowserModel = /** @class */ (function () {
|
|
|
402
402
|
* Handle a change to the running sessions.
|
|
403
403
|
*/
|
|
404
404
|
FileBrowserModel.prototype._onRunningChanged = function (sender, models) {
|
|
405
|
-
|
|
406
|
-
this._sessions.length = 0;
|
|
407
|
-
algorithm_1.each(models, function (model) {
|
|
408
|
-
if (_this._paths.has(model.path)) {
|
|
409
|
-
_this._sessions.push(model);
|
|
410
|
-
}
|
|
411
|
-
});
|
|
405
|
+
this._populateSessions(models);
|
|
412
406
|
this._refreshed.emit(void 0);
|
|
413
407
|
};
|
|
414
408
|
/**
|
|
@@ -416,19 +410,32 @@ var FileBrowserModel = /** @class */ (function () {
|
|
|
416
410
|
*/
|
|
417
411
|
FileBrowserModel.prototype._onFileChanged = function (sender, change) {
|
|
418
412
|
var path = this._model.path;
|
|
419
|
-
var
|
|
420
|
-
|
|
421
|
-
|
|
413
|
+
var sessions = this.manager.services.sessions;
|
|
414
|
+
var oldValue = change.oldValue, newValue = change.newValue;
|
|
415
|
+
var value = oldValue && oldValue.path &&
|
|
416
|
+
coreutils_1.PathExt.dirname(oldValue.path) === path ? oldValue
|
|
417
|
+
: newValue && newValue.path && coreutils_1.PathExt.dirname(newValue.path) === path
|
|
418
|
+
? newValue : undefined;
|
|
419
|
+
// If either the old value or the new value is in the current path, update.
|
|
420
|
+
if (value) {
|
|
422
421
|
this._scheduleUpdate();
|
|
423
|
-
|
|
424
|
-
}
|
|
425
|
-
value = change.newValue;
|
|
426
|
-
if (value && value.path && coreutils_1.PathExt.dirname(value.path) === path) {
|
|
422
|
+
this._populateSessions(sessions.running());
|
|
427
423
|
this._fileChanged.emit(change);
|
|
428
|
-
this._scheduleUpdate();
|
|
429
424
|
return;
|
|
430
425
|
}
|
|
431
426
|
};
|
|
427
|
+
/**
|
|
428
|
+
* Populate the model's sessions collection.
|
|
429
|
+
*/
|
|
430
|
+
FileBrowserModel.prototype._populateSessions = function (models) {
|
|
431
|
+
var _this = this;
|
|
432
|
+
this._sessions.length = 0;
|
|
433
|
+
algorithm_1.each(models, function (model) {
|
|
434
|
+
if (_this._paths.has(model.path)) {
|
|
435
|
+
_this._sessions.push(model);
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
};
|
|
432
439
|
/**
|
|
433
440
|
* Start the internal refresh timer.
|
|
434
441
|
*/
|
|
@@ -439,6 +446,10 @@ var FileBrowserModel = /** @class */ (function () {
|
|
|
439
446
|
_this.refresh();
|
|
440
447
|
return;
|
|
441
448
|
}
|
|
449
|
+
if (document.hidden) {
|
|
450
|
+
// Don't poll when nobody's looking.
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
442
453
|
var date = new Date().getTime();
|
|
443
454
|
if ((date - _this._lastRefresh) > _this._refreshDuration) {
|
|
444
455
|
_this.refresh();
|
package/lib/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../filebrowser/src/model.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport {\n IChangedArgs, IStateDB, PathExt\n} from '@jupyterlab/coreutils';\n\nimport {\n IDocumentManager, shouldOverwrite\n} from '@jupyterlab/docmanager';\n\nimport {\n Contents, Kernel, Session\n} from '@jupyterlab/services';\n\nimport {\n ArrayIterator, each, find, IIterator, IterableOrArrayLike\n} from '@phosphor/algorithm';\n\nimport {\n PromiseDelegate, ReadonlyJSONObject\n} from '@phosphor/coreutils';\n\nimport {\n IDisposable\n} from '@phosphor/disposable';\n\nimport {\n ISignal, Signal\n} from '@phosphor/signaling';\n\n\n/**\n * The duration of auto-refresh in ms.\n */\nconst REFRESH_DURATION = 10000;\n\n/**\n * The enforced time between refreshes in ms.\n */\nconst MIN_REFRESH = 1000;\n\n\n/**\n * An implementation of a file browser model.\n *\n * #### Notes\n * All paths parameters without a leading `'/'` are interpreted as relative to\n * the current directory. Supports `'../'` syntax.\n */\nexport\nclass FileBrowserModel implements IDisposable {\n /**\n * Construct a new file browser model.\n */\n constructor(options: FileBrowserModel.IOptions) {\n this.manager = options.manager;\n this._driveName = options.driveName || '';\n let rootPath = this._driveName ? this._driveName + ':' : '';\n this._model = {\n path: rootPath,\n name: PathExt.basename(rootPath),\n type: 'directory',\n content: undefined,\n writable: false,\n created: 'unknown',\n last_modified: 'unknown',\n mimetype: 'text/plain',\n format: 'text'\n };\n this._state = options.state || null;\n\n const { services } = options.manager;\n services.contents.fileChanged.connect(this._onFileChanged, this);\n services.sessions.runningChanged.connect(this._onRunningChanged, this);\n\n this._scheduleUpdate();\n this._startTimer();\n }\n\n /**\n * The document manager instance used by the file browser model.\n */\n readonly manager: IDocumentManager;\n\n /**\n * A signal emitted when the file browser model loses connection.\n */\n get connectionFailure(): ISignal<this, Error> {\n return this._connectionFailure;\n }\n\n /**\n * A promise that resolves when the model is first restored.\n */\n get restored(): Promise<void> {\n return this._restored.promise;\n }\n\n /**\n * Get the file path changed signal.\n */\n get fileChanged(): ISignal<this, Contents.IChangedArgs> {\n return this._fileChanged;\n }\n\n /**\n * Get the current path.\n */\n get path(): string {\n return this._model ? this._model.path : '';\n }\n\n /**\n * A signal emitted when the path changes.\n */\n get pathChanged(): ISignal<this, IChangedArgs<string>> {\n return this._pathChanged;\n }\n\n /**\n * A signal emitted when the directory listing is refreshed.\n */\n get refreshed(): ISignal<this, void> {\n return this._refreshed;\n }\n\n /**\n * Get the kernel spec models.\n */\n get specs(): Kernel.ISpecModels | null {\n return this.manager.services.sessions.specs;\n }\n\n /**\n * Get whether the model is disposed.\n */\n get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n /**\n * Dispose of the resources held by the model.\n */\n dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n clearTimeout(this._timeoutId);\n this._sessions.length = 0;\n this._items.length = 0;\n Signal.clearData(this);\n }\n\n /**\n * Create an iterator over the model's items.\n *\n * @returns A new iterator over the model's items.\n */\n items(): IIterator<Contents.IModel> {\n return new ArrayIterator(this._items);\n }\n\n /**\n * Create an iterator over the active sessions in the directory.\n *\n * @returns A new iterator over the model's active sessions.\n */\n sessions(): IIterator<Session.IModel> {\n return new ArrayIterator(this._sessions);\n }\n\n /**\n * Force a refresh of the directory contents.\n */\n refresh(): Promise<void> {\n this._lastRefresh = new Date().getTime();\n this._requested = false;\n return this.cd('.');\n }\n\n /**\n * Change directory.\n *\n * @param path - The path to the file or directory.\n *\n * @returns A promise with the contents of the directory.\n */\n cd(newValue = '.'): Promise<void> {\n if (newValue !== '.') {\n newValue = Private.normalizePath(this.manager.services.contents,\n this._model.path, newValue);\n } else {\n newValue = this._pendingPath || this._model.path;\n }\n // Collapse requests to the same directory.\n if (newValue === this._pendingPath && this._pending) {\n return this._pending;\n }\n let oldValue = this.path;\n let options: Contents.IFetchOptions = { content: true };\n this._pendingPath = newValue;\n if (oldValue !== newValue) {\n this._sessions.length = 0;\n }\n let services = this.manager.services;\n this._pending = services.contents.get(newValue, options).then(contents => {\n if (this.isDisposed) {\n return;\n }\n this._refreshDuration = REFRESH_DURATION;\n this._handleContents(contents);\n this._pendingPath = null;\n if (oldValue !== newValue) {\n // If there is a state database and a unique key, save the new path.\n if (this._state && this._key) {\n this._state.save(this._key, { path: newValue });\n }\n\n this._pathChanged.emit({\n name: 'path',\n oldValue,\n newValue\n });\n }\n this._onRunningChanged(services.sessions, services.sessions.running());\n this._refreshed.emit(void 0);\n }).catch(error => {\n this._pendingPath = null;\n if (error.message === 'Not Found') {\n error.message = `Directory not found: \"${this._model.path}\"`;\n console.error(error);\n this._connectionFailure.emit(error);\n this.cd('/');\n } else {\n this._refreshDuration = REFRESH_DURATION * 10;\n this._connectionFailure.emit(error);\n }\n });\n return this._pending;\n }\n\n /**\n * Download a file.\n *\n * @param path - The path of the file to be downloaded.\n *\n * @returns A promise which resolves when the file has begun\n * downloading.\n */\n download(path: string): Promise<void> {\n return this.manager.services.contents.getDownloadUrl(path).then(url => {\n let element = document.createElement('a');\n document.body.appendChild(element);\n element.setAttribute('href', url);\n element.setAttribute('download', '');\n element.click();\n document.body.removeChild(element);\n return void 0;\n });\n }\n\n /**\n * Restore the state of the file browser.\n *\n * @param id - The unique ID that is used to construct a state database key.\n *\n * @returns A promise when restoration is complete.\n *\n * #### Notes\n * This function will only restore the model *once*. If it is called multiple\n * times, all subsequent invocations are no-ops.\n */\n restore(id: string): Promise<void> {\n const state = this._state;\n const restored = !!this._key;\n if (!state || restored) {\n return Promise.resolve(void 0);\n }\n\n const manager = this.manager;\n const key = `file-browser-${id}:cwd`;\n const ready = manager.services.ready;\n return Promise.all([state.fetch(key), ready]).then(([cwd]) => {\n if (!cwd) {\n this._restored.resolve(void 0);\n return;\n }\n\n const path = (cwd as ReadonlyJSONObject)['path'] as string;\n const localPath = manager.services.contents.localPath(path);\n return manager.services.contents.get(path)\n .then(() => this.cd(localPath))\n .catch(() => state.remove(key));\n }).catch(() => state.remove(key))\n .then(() => {\n this._key = key;\n this._restored.resolve(void 0);\n }); // Set key after restoration is done.\n }\n\n /**\n * Upload a `File` object.\n *\n * @param file - The `File` object to upload.\n *\n * @returns A promise containing the new file contents model.\n *\n * #### Notes\n * This will fail to upload files that are too big to be sent in one\n * request to the server.\n */\n upload(file: File): Promise<Contents.IModel> {\n // Skip large files with a warning.\n if (file.size > this._maxUploadSizeMb * 1024 * 1024) {\n let msg = `Cannot upload file (>${this._maxUploadSizeMb} MB) `;\n msg += `\"${file.name}\"`;\n console.warn(msg);\n return Promise.reject<Contents.IModel>(new Error(msg));\n }\n\n return this.refresh().then(() => {\n if (this.isDisposed) {\n return Promise.resolve(false);\n }\n let item = find(this._items, i => i.name === file.name);\n if (item) {\n return shouldOverwrite(file.name);\n }\n return Promise.resolve(true);\n }).then(value => {\n if (value) {\n return this._upload(file);\n }\n return Promise.reject('File not uploaded');\n });\n }\n\n /**\n * Perform the actual upload.\n */\n private _upload(file: File): Promise<Contents.IModel> {\n // Gather the file model parameters.\n let path = this._model.path;\n path = path ? path + '/' + file.name : file.name;\n let name = file.name;\n let isNotebook = file.name.indexOf('.ipynb') !== -1;\n let type: Contents.ContentType = isNotebook ? 'notebook' : 'file';\n let format: Contents.FileFormat = isNotebook ? 'json' : 'base64';\n\n // Get the file content.\n let reader = new FileReader();\n if (isNotebook) {\n reader.readAsText(file);\n } else {\n reader.readAsArrayBuffer(file);\n }\n\n return new Promise<Contents.IModel>((resolve, reject) => {\n reader.onload = (event: Event) => {\n let model: Partial<Contents.IModel> = {\n type: type,\n format,\n name,\n content: Private.getContent(reader)\n };\n\n this.manager.services.contents.save(path, model).then(contents => {\n resolve(contents);\n }).catch(reject);\n };\n\n reader.onerror = (event: Event) => {\n reject(Error(`Failed to upload \"${file.name}\":` + event));\n };\n });\n\n }\n\n /**\n * Handle an updated contents model.\n */\n private _handleContents(contents: Contents.IModel): void {\n // Update our internal data.\n this._model = {\n name: contents.name,\n path: contents.path,\n type: contents.type,\n content: undefined,\n writable: contents.writable,\n created: contents.created,\n last_modified: contents.last_modified,\n mimetype: contents.mimetype,\n format: contents.format\n };\n this._items = contents.content;\n this._paths.clear();\n contents.content.forEach((model: Contents.IModel) => {\n this._paths.add(model.path);\n });\n }\n\n /**\n * Handle a change to the running sessions.\n */\n private _onRunningChanged(sender: Session.IManager, models: IterableOrArrayLike<Session.IModel>): void {\n this._sessions.length = 0;\n each(models, model => {\n if (this._paths.has(model.path)) {\n this._sessions.push(model);\n }\n });\n this._refreshed.emit(void 0);\n }\n\n /**\n * Handle a change on the contents manager.\n */\n private _onFileChanged(sender: Contents.IManager, change: Contents.IChangedArgs): void {\n let path = this._model.path;\n let value = change.oldValue;\n if (value && value.path && PathExt.dirname(value.path) === path) {\n this._fileChanged.emit(change);\n this._scheduleUpdate();\n return;\n }\n value = change.newValue;\n if (value && value.path && PathExt.dirname(value.path) === path) {\n this._fileChanged.emit(change);\n this._scheduleUpdate();\n return;\n }\n }\n\n /**\n * Start the internal refresh timer.\n */\n private _startTimer(): void {\n this._timeoutId = window.setInterval(() => {\n if (this._requested) {\n this.refresh();\n return;\n }\n let date = new Date().getTime();\n if ((date - this._lastRefresh) > this._refreshDuration) {\n this.refresh();\n }\n }, MIN_REFRESH);\n }\n\n /**\n * Handle internal model refresh logic.\n */\n private _scheduleUpdate(): void {\n let date = new Date().getTime();\n if ((date - this._lastRefresh) > MIN_REFRESH) {\n this.refresh();\n } else {\n this._requested = true;\n }\n }\n\n private _connectionFailure = new Signal<this, Error>(this);\n private _fileChanged = new Signal<this, Contents.IChangedArgs>(this);\n private _items: Contents.IModel[] = [];\n private _key: string = '';\n private _maxUploadSizeMb = 15;\n private _model: Contents.IModel;\n private _pathChanged = new Signal<this, IChangedArgs<string>>(this);\n private _paths = new Set<string>();\n private _pending: Promise<void> | null = null;\n private _pendingPath: string | null = null;\n private _refreshed = new Signal<this, void>(this);\n private _lastRefresh = -1;\n private _requested = false;\n private _sessions: Session.IModel[] = [];\n private _state: IStateDB | null = null;\n private _timeoutId = -1;\n private _refreshDuration = REFRESH_DURATION;\n private _driveName: string;\n private _isDisposed = false;\n private _restored = new PromiseDelegate<void>();\n}\n\n\n/**\n * The namespace for the `FileBrowserModel` class statics.\n */\nexport\nnamespace FileBrowserModel {\n /**\n * An options object for initializing a file browser.\n */\n export\n interface IOptions {\n /**\n * A document manager instance.\n */\n manager: IDocumentManager;\n\n /**\n * An optional `Contents.IDrive` name for the model.\n * If given, the model will prepend `driveName:` to\n * all paths used in file operations.\n */\n driveName?: string;\n\n /**\n * An optional state database. If provided, the model will restore which\n * folder was last opened when it is restored.\n */\n state?: IStateDB;\n }\n}\n\n\n/**\n * The namespace for the file browser model private data.\n */\nnamespace Private {\n /**\n * Parse the content of a `FileReader`.\n *\n * If the result is an `ArrayBuffer`, return a Base64-encoded string.\n * Otherwise, return the JSON parsed result.\n */\n export\n function getContent(reader: FileReader): any {\n if (reader.result instanceof ArrayBuffer) {\n // Base64-encode binary file data.\n let bytes = '';\n let buf = new Uint8Array(reader.result);\n let nbytes = buf.byteLength;\n for (let i = 0; i < nbytes; i++) {\n bytes += String.fromCharCode(buf[i]);\n }\n return btoa(bytes);\n } else {\n return JSON.parse(reader.result);\n }\n }\n\n /**\n * Normalize a path based on a root directory, accounting for relative paths.\n */\n export\n function normalizePath(contents: Contents.IManager, root: string, path: string): string {\n const driveName = contents.driveName(root);\n const localPath = contents.localPath(root);\n const resolved = PathExt.resolve(localPath, path);\n return driveName ? `${driveName}:${resolved}` : resolved;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../filebrowser/src/model.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n\nimport {\n IChangedArgs, IStateDB, PathExt\n} from '@jupyterlab/coreutils';\n\nimport {\n IDocumentManager, shouldOverwrite\n} from '@jupyterlab/docmanager';\n\nimport {\n Contents, Kernel, Session\n} from '@jupyterlab/services';\n\nimport {\n ArrayIterator, each, find, IIterator, IterableOrArrayLike\n} from '@phosphor/algorithm';\n\nimport {\n PromiseDelegate, ReadonlyJSONObject\n} from '@phosphor/coreutils';\n\nimport {\n IDisposable\n} from '@phosphor/disposable';\n\nimport {\n ISignal, Signal\n} from '@phosphor/signaling';\n\n\n/**\n * The duration of auto-refresh in ms.\n */\nconst REFRESH_DURATION = 10000;\n\n/**\n * The enforced time between refreshes in ms.\n */\nconst MIN_REFRESH = 1000;\n\n\n/**\n * An implementation of a file browser model.\n *\n * #### Notes\n * All paths parameters without a leading `'/'` are interpreted as relative to\n * the current directory. Supports `'../'` syntax.\n */\nexport\nclass FileBrowserModel implements IDisposable {\n /**\n * Construct a new file browser model.\n */\n constructor(options: FileBrowserModel.IOptions) {\n this.manager = options.manager;\n this._driveName = options.driveName || '';\n let rootPath = this._driveName ? this._driveName + ':' : '';\n this._model = {\n path: rootPath,\n name: PathExt.basename(rootPath),\n type: 'directory',\n content: undefined,\n writable: false,\n created: 'unknown',\n last_modified: 'unknown',\n mimetype: 'text/plain',\n format: 'text'\n };\n this._state = options.state || null;\n\n const { services } = options.manager;\n services.contents.fileChanged.connect(this._onFileChanged, this);\n services.sessions.runningChanged.connect(this._onRunningChanged, this);\n\n this._scheduleUpdate();\n this._startTimer();\n }\n\n /**\n * The document manager instance used by the file browser model.\n */\n readonly manager: IDocumentManager;\n\n /**\n * A signal emitted when the file browser model loses connection.\n */\n get connectionFailure(): ISignal<this, Error> {\n return this._connectionFailure;\n }\n\n /**\n * A promise that resolves when the model is first restored.\n */\n get restored(): Promise<void> {\n return this._restored.promise;\n }\n\n /**\n * Get the file path changed signal.\n */\n get fileChanged(): ISignal<this, Contents.IChangedArgs> {\n return this._fileChanged;\n }\n\n /**\n * Get the current path.\n */\n get path(): string {\n return this._model ? this._model.path : '';\n }\n\n /**\n * A signal emitted when the path changes.\n */\n get pathChanged(): ISignal<this, IChangedArgs<string>> {\n return this._pathChanged;\n }\n\n /**\n * A signal emitted when the directory listing is refreshed.\n */\n get refreshed(): ISignal<this, void> {\n return this._refreshed;\n }\n\n /**\n * Get the kernel spec models.\n */\n get specs(): Kernel.ISpecModels | null {\n return this.manager.services.sessions.specs;\n }\n\n /**\n * Get whether the model is disposed.\n */\n get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n /**\n * Dispose of the resources held by the model.\n */\n dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n clearTimeout(this._timeoutId);\n this._sessions.length = 0;\n this._items.length = 0;\n Signal.clearData(this);\n }\n\n /**\n * Create an iterator over the model's items.\n *\n * @returns A new iterator over the model's items.\n */\n items(): IIterator<Contents.IModel> {\n return new ArrayIterator(this._items);\n }\n\n /**\n * Create an iterator over the active sessions in the directory.\n *\n * @returns A new iterator over the model's active sessions.\n */\n sessions(): IIterator<Session.IModel> {\n return new ArrayIterator(this._sessions);\n }\n\n /**\n * Force a refresh of the directory contents.\n */\n refresh(): Promise<void> {\n this._lastRefresh = new Date().getTime();\n this._requested = false;\n return this.cd('.');\n }\n\n /**\n * Change directory.\n *\n * @param path - The path to the file or directory.\n *\n * @returns A promise with the contents of the directory.\n */\n cd(newValue = '.'): Promise<void> {\n if (newValue !== '.') {\n newValue = Private.normalizePath(this.manager.services.contents,\n this._model.path, newValue);\n } else {\n newValue = this._pendingPath || this._model.path;\n }\n // Collapse requests to the same directory.\n if (newValue === this._pendingPath && this._pending) {\n return this._pending;\n }\n let oldValue = this.path;\n let options: Contents.IFetchOptions = { content: true };\n this._pendingPath = newValue;\n if (oldValue !== newValue) {\n this._sessions.length = 0;\n }\n let services = this.manager.services;\n this._pending = services.contents.get(newValue, options).then(contents => {\n if (this.isDisposed) {\n return;\n }\n this._refreshDuration = REFRESH_DURATION;\n this._handleContents(contents);\n this._pendingPath = null;\n if (oldValue !== newValue) {\n // If there is a state database and a unique key, save the new path.\n if (this._state && this._key) {\n this._state.save(this._key, { path: newValue });\n }\n\n this._pathChanged.emit({\n name: 'path',\n oldValue,\n newValue\n });\n }\n this._onRunningChanged(services.sessions, services.sessions.running());\n this._refreshed.emit(void 0);\n }).catch(error => {\n this._pendingPath = null;\n if (error.message === 'Not Found') {\n error.message = `Directory not found: \"${this._model.path}\"`;\n console.error(error);\n this._connectionFailure.emit(error);\n this.cd('/');\n } else {\n this._refreshDuration = REFRESH_DURATION * 10;\n this._connectionFailure.emit(error);\n }\n });\n return this._pending;\n }\n\n /**\n * Download a file.\n *\n * @param path - The path of the file to be downloaded.\n *\n * @returns A promise which resolves when the file has begun\n * downloading.\n */\n download(path: string): Promise<void> {\n return this.manager.services.contents.getDownloadUrl(path).then(url => {\n let element = document.createElement('a');\n document.body.appendChild(element);\n element.setAttribute('href', url);\n element.setAttribute('download', '');\n element.click();\n document.body.removeChild(element);\n return void 0;\n });\n }\n\n /**\n * Restore the state of the file browser.\n *\n * @param id - The unique ID that is used to construct a state database key.\n *\n * @returns A promise when restoration is complete.\n *\n * #### Notes\n * This function will only restore the model *once*. If it is called multiple\n * times, all subsequent invocations are no-ops.\n */\n restore(id: string): Promise<void> {\n const state = this._state;\n const restored = !!this._key;\n if (!state || restored) {\n return Promise.resolve(void 0);\n }\n\n const manager = this.manager;\n const key = `file-browser-${id}:cwd`;\n const ready = manager.services.ready;\n return Promise.all([state.fetch(key), ready]).then(([cwd]) => {\n if (!cwd) {\n this._restored.resolve(void 0);\n return;\n }\n\n const path = (cwd as ReadonlyJSONObject)['path'] as string;\n const localPath = manager.services.contents.localPath(path);\n return manager.services.contents.get(path)\n .then(() => this.cd(localPath))\n .catch(() => state.remove(key));\n }).catch(() => state.remove(key))\n .then(() => {\n this._key = key;\n this._restored.resolve(void 0);\n }); // Set key after restoration is done.\n }\n\n /**\n * Upload a `File` object.\n *\n * @param file - The `File` object to upload.\n *\n * @returns A promise containing the new file contents model.\n *\n * #### Notes\n * This will fail to upload files that are too big to be sent in one\n * request to the server.\n */\n upload(file: File): Promise<Contents.IModel> {\n // Skip large files with a warning.\n if (file.size > this._maxUploadSizeMb * 1024 * 1024) {\n let msg = `Cannot upload file (>${this._maxUploadSizeMb} MB) `;\n msg += `\"${file.name}\"`;\n console.warn(msg);\n return Promise.reject<Contents.IModel>(new Error(msg));\n }\n\n return this.refresh().then(() => {\n if (this.isDisposed) {\n return Promise.resolve(false);\n }\n let item = find(this._items, i => i.name === file.name);\n if (item) {\n return shouldOverwrite(file.name);\n }\n return Promise.resolve(true);\n }).then(value => {\n if (value) {\n return this._upload(file);\n }\n return Promise.reject('File not uploaded');\n });\n }\n\n /**\n * Perform the actual upload.\n */\n private _upload(file: File): Promise<Contents.IModel> {\n // Gather the file model parameters.\n let path = this._model.path;\n path = path ? path + '/' + file.name : file.name;\n let name = file.name;\n let isNotebook = file.name.indexOf('.ipynb') !== -1;\n let type: Contents.ContentType = isNotebook ? 'notebook' : 'file';\n let format: Contents.FileFormat = isNotebook ? 'json' : 'base64';\n\n // Get the file content.\n let reader = new FileReader();\n if (isNotebook) {\n reader.readAsText(file);\n } else {\n reader.readAsArrayBuffer(file);\n }\n\n return new Promise<Contents.IModel>((resolve, reject) => {\n reader.onload = (event: Event) => {\n let model: Partial<Contents.IModel> = {\n type: type,\n format,\n name,\n content: Private.getContent(reader)\n };\n\n this.manager.services.contents.save(path, model).then(contents => {\n resolve(contents);\n }).catch(reject);\n };\n\n reader.onerror = (event: Event) => {\n reject(Error(`Failed to upload \"${file.name}\":` + event));\n };\n });\n\n }\n\n /**\n * Handle an updated contents model.\n */\n private _handleContents(contents: Contents.IModel): void {\n // Update our internal data.\n this._model = {\n name: contents.name,\n path: contents.path,\n type: contents.type,\n content: undefined,\n writable: contents.writable,\n created: contents.created,\n last_modified: contents.last_modified,\n mimetype: contents.mimetype,\n format: contents.format\n };\n this._items = contents.content;\n this._paths.clear();\n contents.content.forEach((model: Contents.IModel) => {\n this._paths.add(model.path);\n });\n }\n\n /**\n * Handle a change to the running sessions.\n */\n private _onRunningChanged(sender: Session.IManager, models: IterableOrArrayLike<Session.IModel>): void {\n this._populateSessions(models);\n this._refreshed.emit(void 0);\n }\n\n /**\n * Handle a change on the contents manager.\n */\n private _onFileChanged(sender: Contents.IManager, change: Contents.IChangedArgs): void {\n let path = this._model.path;\n let { sessions } = this.manager.services;\n let { oldValue, newValue } = change;\n let value = oldValue && oldValue.path &&\n PathExt.dirname(oldValue.path) === path ? oldValue\n : newValue && newValue.path && PathExt.dirname(newValue.path) === path\n ? newValue : undefined;\n\n // If either the old value or the new value is in the current path, update.\n if (value) {\n this._scheduleUpdate();\n this._populateSessions(sessions.running());\n this._fileChanged.emit(change);\n return;\n }\n }\n\n /**\n * Populate the model's sessions collection.\n */\n private _populateSessions(models: IterableOrArrayLike<Session.IModel>): void {\n this._sessions.length = 0;\n each(models, model => {\n if (this._paths.has(model.path)) {\n this._sessions.push(model);\n }\n });\n }\n\n /**\n * Start the internal refresh timer.\n */\n private _startTimer(): void {\n this._timeoutId = window.setInterval(() => {\n if (this._requested) {\n this.refresh();\n return;\n }\n if (document.hidden) {\n // Don't poll when nobody's looking.\n return;\n }\n let date = new Date().getTime();\n if ((date - this._lastRefresh) > this._refreshDuration) {\n this.refresh();\n }\n }, MIN_REFRESH);\n }\n\n /**\n * Handle internal model refresh logic.\n */\n private _scheduleUpdate(): void {\n let date = new Date().getTime();\n if ((date - this._lastRefresh) > MIN_REFRESH) {\n this.refresh();\n } else {\n this._requested = true;\n }\n }\n\n private _connectionFailure = new Signal<this, Error>(this);\n private _fileChanged = new Signal<this, Contents.IChangedArgs>(this);\n private _items: Contents.IModel[] = [];\n private _key: string = '';\n private _maxUploadSizeMb = 15;\n private _model: Contents.IModel;\n private _pathChanged = new Signal<this, IChangedArgs<string>>(this);\n private _paths = new Set<string>();\n private _pending: Promise<void> | null = null;\n private _pendingPath: string | null = null;\n private _refreshed = new Signal<this, void>(this);\n private _lastRefresh = -1;\n private _requested = false;\n private _sessions: Session.IModel[] = [];\n private _state: IStateDB | null = null;\n private _timeoutId = -1;\n private _refreshDuration = REFRESH_DURATION;\n private _driveName: string;\n private _isDisposed = false;\n private _restored = new PromiseDelegate<void>();\n}\n\n\n/**\n * The namespace for the `FileBrowserModel` class statics.\n */\nexport\nnamespace FileBrowserModel {\n /**\n * An options object for initializing a file browser.\n */\n export\n interface IOptions {\n /**\n * A document manager instance.\n */\n manager: IDocumentManager;\n\n /**\n * An optional `Contents.IDrive` name for the model.\n * If given, the model will prepend `driveName:` to\n * all paths used in file operations.\n */\n driveName?: string;\n\n /**\n * An optional state database. If provided, the model will restore which\n * folder was last opened when it is restored.\n */\n state?: IStateDB;\n }\n}\n\n\n/**\n * The namespace for the file browser model private data.\n */\nnamespace Private {\n /**\n * Parse the content of a `FileReader`.\n *\n * If the result is an `ArrayBuffer`, return a Base64-encoded string.\n * Otherwise, return the JSON parsed result.\n */\n export\n function getContent(reader: FileReader): any {\n if (reader.result instanceof ArrayBuffer) {\n // Base64-encode binary file data.\n let bytes = '';\n let buf = new Uint8Array(reader.result);\n let nbytes = buf.byteLength;\n for (let i = 0; i < nbytes; i++) {\n bytes += String.fromCharCode(buf[i]);\n }\n return btoa(bytes);\n } else {\n return JSON.parse(reader.result);\n }\n }\n\n /**\n * Normalize a path based on a root directory, accounting for relative paths.\n */\n export\n function normalizePath(contents: Contents.IManager, root: string, path: string): string {\n const driveName = contents.driveName(root);\n const localPath = contents.localPath(root);\n const resolved = PathExt.resolve(localPath, path);\n return driveName ? `${driveName}:${resolved}` : resolved;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/filebrowser",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.3",
|
|
4
4
|
"description": "JupyterLab - FileBrowser Widget",
|
|
5
5
|
"homepage": "https://github.com/jupyterlab/jupyterlab",
|
|
6
6
|
"bugs": {
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"watch": "tsc -w"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@jupyterlab/apputils": "^0.
|
|
34
|
-
"@jupyterlab/coreutils": "^1.
|
|
35
|
-
"@jupyterlab/docmanager": "^0.
|
|
36
|
-
"@jupyterlab/docregistry": "^0.
|
|
37
|
-
"@jupyterlab/services": "^
|
|
33
|
+
"@jupyterlab/apputils": "^0.16.4",
|
|
34
|
+
"@jupyterlab/coreutils": "^1.1.3",
|
|
35
|
+
"@jupyterlab/docmanager": "^0.16.3",
|
|
36
|
+
"@jupyterlab/docregistry": "^0.16.3",
|
|
37
|
+
"@jupyterlab/services": "^2.0.3",
|
|
38
38
|
"@phosphor/algorithm": "^1.1.2",
|
|
39
39
|
"@phosphor/commands": "^1.4.0",
|
|
40
40
|
"@phosphor/coreutils": "^1.3.0",
|
package/style/index.css
CHANGED
|
@@ -76,11 +76,6 @@
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
.jp-FileBrowser-toolbar.jp-Toolbar > .jp-Toolbar-button:focus {
|
|
80
|
-
box-shadow: var(--jp-toolbar-box-shadow);
|
|
81
|
-
border-color: var(--jp-toolbar-border-color);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
79
|
/*-----------------------------------------------------------------------------
|
|
85
80
|
| DirListing
|
|
86
81
|
|----------------------------------------------------------------------------*/
|