Index: chrome/browser/resources/file_manager/js/file_manager.js |
diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js |
index b8f62c1dbd0d6ae5bd95c10d7ec3a4ccac5aeb2d..52e80c05e96ab73b46468f03746f6dcb781c819f 100644 |
--- a/chrome/browser/resources/file_manager/js/file_manager.js |
+++ b/chrome/browser/resources/file_manager/js/file_manager.js |
@@ -522,7 +522,8 @@ DialogType.isModal = function(type) { |
controller.attachDropTarget(this.table_.list); |
controller.attachDragSource(this.grid_); |
controller.attachDropTarget(this.grid_); |
- controller.attachDropTarget(this.rootsList_, true); |
+ controller.attachDropTarget(this.directoryTree_, |
+ true /* onlyIntoDirectories */); |
controller.attachBreadcrumbsDropTarget(this.breadcrumbs_); |
controller.attachCopyPasteHandlers(); |
controller.addEventListener('selection-copied', |
@@ -549,6 +550,8 @@ DialogType.isModal = function(type) { |
this.dialogDom_.querySelector('#roots-context-menu'); |
cr.ui.Menu.decorate(this.rootsContextMenu_); |
+ this.directoryTree_.setContextMenu(this.rootsContextMenu_); |
+ |
this.textContextMenu_ = |
this.dialogDom_.querySelector('#text-context-menu'); |
cr.ui.Menu.decorate(this.textContextMenu_); |
@@ -589,14 +592,15 @@ DialogType.isModal = function(type) { |
CommandUtil.registerCommand(doc, 'newwindow', |
Commands.newWindowCommand, this); |
- CommandUtil.registerCommand(this.rootsList_, 'unmount', |
- Commands.unmountCommand, this.rootsList_, this); |
+ CommandUtil.registerCommand(this.directoryTree_, 'unmount', |
+ Commands.unmountCommand, this.directoryTree_, this); |
CommandUtil.registerCommand(doc, 'format', |
- Commands.formatCommand, this.rootsList_, this, this.directoryModel_); |
+ Commands.formatCommand, this.directoryTree_, this, |
+ this.directoryModel_); |
- CommandUtil.registerCommand(this.rootsList_, 'import-photos', |
- Commands.importCommand, this.rootsList_); |
+ CommandUtil.registerCommand(this.directoryTree_, 'import-photos', |
+ Commands.importCommand, this.directoryTree_); |
CommandUtil.registerCommand(doc, 'delete', |
Commands.deleteFileCommand, this); |
@@ -914,7 +918,7 @@ DialogType.isModal = function(type) { |
this.table_.list.addEventListener('blur', fileListBlurBound); |
this.grid_.addEventListener('blur', fileListBlurBound); |
- this.initRootsList_(); |
+ this.initSidebar_(); |
this.table_.addEventListener('column-resize-end', |
this.updateStartupPrefs_.bind(this)); |
@@ -947,24 +951,15 @@ DialogType.isModal = function(type) { |
today.getTime() + MILLISECONDS_IN_DAY - Date.now() + 1000); |
}; |
- FileManager.prototype.initRootsList_ = function() { |
- this.rootsList_ = this.dialogDom_.querySelector('#roots-list'); |
- cr.ui.List.decorate(this.rootsList_); |
- |
- // Overriding default role 'list' set by cr.ui.List.decorate() to 'listbox' |
- // role for better accessibility on ChromeOS. |
- this.rootsList_.setAttribute('role', 'listbox'); |
- |
- var self = this; |
- this.rootsList_.itemConstructor = function(entry) { |
- return self.renderRoot_(entry.fullPath); |
- }; |
- |
- this.rootsList_.selectionModel = |
- this.directoryModel_.getRootsListSelectionModel(); |
+ FileManager.prototype.initSidebar_ = function() { |
+ this.directoryTree_ = this.dialogDom_.querySelector('#directory-tree'); |
+ DirectoryTree.decorate(this.directoryTree_, this.directoryModel_); |
- // TODO(dgozman): add "Add a drive" item. |
- this.rootsList_.dataModel = this.directoryModel_.getRootsList(); |
+ this.directoryTree_.addEventListener('change', function() { |
+ var currentPath = this.directoryTree_.getCurrentPath() || |
+ this.directoryModel_.getDefaultDirectory(); |
+ this.directoryModel_.changeDirectory(currentPath); |
+ }.bind(this)); |
}; |
FileManager.prototype.updateStartupPrefs_ = function() { |
@@ -1033,13 +1028,6 @@ DialogType.isModal = function(type) { |
return index + 1; // Convert to 1-based; |
}; |
- FileManager.prototype.getRootEntry_ = function(index) { |
- if (index == -1) |
- return null; |
- |
- return this.rootsList_.dataModel.item(index); |
- }; |
- |
FileManager.prototype.setListType = function(type) { |
if (type && type == this.listType_) |
return; |
@@ -1247,7 +1235,6 @@ DialogType.isModal = function(type) { |
this.table_.redraw(); |
} |
- this.rootsList_.redraw(); |
this.breadcrumbs_.truncate(); |
this.searchBreadcrumbs_.truncate(); |
@@ -1464,74 +1451,12 @@ DialogType.isModal = function(type) { |
this.dialogDom_.setAttribute('type', this.dialogType); |
}; |
- FileManager.prototype.renderRoot_ = function(path) { |
- var li = this.document_.createElement('li'); |
- li.className = 'root-item'; |
- li.setAttribute('role', 'option'); |
- var dm = this.directoryModel_; |
- var handleClick = function() { |
- if (li.selected && path !== dm.getCurrentDirPath()) { |
- dm.changeDirectory(path); |
- } |
- }; |
- li.addEventListener('mousedown', handleClick); |
- li.addEventListener(cr.ui.TouchHandler.EventType.TOUCH_START, handleClick); |
- |
- var rootType = PathUtil.getRootType(path); |
- |
- var iconDiv = this.document_.createElement('div'); |
- iconDiv.className = 'volume-icon'; |
- iconDiv.setAttribute('volume-type-icon', rootType); |
- if (rootType === RootType.REMOVABLE) { |
- iconDiv.setAttribute('volume-subtype', |
- this.volumeManager_.getDeviceType(path)); |
- } |
- li.appendChild(iconDiv); |
- |
- var div = this.document_.createElement('div'); |
- div.className = 'root-label'; |
- |
- div.textContent = PathUtil.getRootLabel(path); |
- li.appendChild(div); |
- |
- if (rootType === RootType.ARCHIVE || rootType === RootType.REMOVABLE) { |
- var eject = this.document_.createElement('div'); |
- eject.className = 'root-eject'; |
- eject.addEventListener('click', function(event) { |
- event.stopPropagation(); |
- var unmountCommand = this.dialogDom_.querySelector('command#unmount'); |
- // Let's make sure 'canExecute' state of the command is properly set for |
- // the root before executing it. |
- unmountCommand.canExecuteChange(li); |
- unmountCommand.execute(li); |
- }.bind(this)); |
- // Block other mouse handlers. |
- eject.addEventListener('mouseup', function(e) { e.stopPropagation() }); |
- eject.addEventListener('mousedown', function(e) { e.stopPropagation() }); |
- li.appendChild(eject); |
- } |
- |
- if (rootType != RootType.DRIVE && rootType != RootType.DOWNLOADS) |
- cr.ui.contextMenuHandler.setContextMenu(li, this.rootsContextMenu_); |
- |
- cr.defineProperty(li, 'lead', cr.PropertyKind.BOOL_ATTR); |
- cr.defineProperty(li, 'selected', cr.PropertyKind.BOOL_ATTR); |
- |
- return li; |
- }; |
- |
/** |
* Unmounts device. |
* @param {string} path Path to a volume to unmount. |
*/ |
FileManager.prototype.unmountVolume = function(path) { |
- var listItem = this.rootsList_.getListItemByIndex( |
- this.directoryModel_.findRootsListIndex(path)); |
- if (listItem) |
- listItem.setAttribute('disabled', ''); |
var onError = function(error) { |
- if (listItem) |
- listItem.removeAttribute('disabled'); |
this.alert.showHtml('', str('UNMOUNT_FAILED')); |
}; |
this.volumeManager_.unmount(path, function() {}, onError.bind(this)); |