Index: ui/file_manager/file_manager/foreground/js/file_manager.js |
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager.js b/ui/file_manager/file_manager/foreground/js/file_manager.js |
index aab79ab90632b7915373e14ecc87621e8f46ba43..3d4812c965281aed43d59367e35e7d0ad8a4bc1e 100644 |
--- a/ui/file_manager/file_manager/foreground/js/file_manager.js |
+++ b/ui/file_manager/file_manager/foreground/js/file_manager.js |
@@ -38,13 +38,6 @@ function FileManager() { |
this.fileOperationManager_ = null; |
/** |
- * File transfer controller. |
- * @type {FileTransferController} |
- * @private |
- */ |
- this.fileTransferController_ = null; |
- |
- /** |
* File filter. |
* @type {FileFilter} |
* @private |
@@ -99,6 +92,13 @@ function FileManager() { |
*/ |
this.dialogActionController_ = null; |
+ /** |
+ * UI management class of file manager. |
+ * @type {FileManagerUI} |
+ * @private |
+ */ |
+ this.ui_ = null; |
+ |
// -------------------------------------------------------------------------- |
// Parameters determining the type of file manager. |
@@ -130,28 +130,14 @@ function FileManager() { |
this.preferences_ = null; |
// -------------------------------------------------------------------------- |
- // UI components. |
- |
- /** |
- * UI management class of file manager. |
- * @type {FileManagerUI} |
- * @private |
- */ |
- this.ui_ = null; |
- |
- /** |
- * Progress center panel. |
- * @type {ProgressCenterPanel} |
- * @private |
- */ |
- this.progressCenterPanel_ = null; |
+ // Controllers. |
/** |
- * Directory tree. |
- * @type {DirectoryTree} |
+ * File transfer controller. |
+ * @type {FileTransferController} |
* @private |
*/ |
- this.directoryTree_ = null; |
+ this.fileTransferController_ = null; |
/** |
* Naming controller. |
@@ -288,20 +274,6 @@ function FileManager() { |
this.actionMenuItem_ = null; |
/** |
- * The button to open gear menu. |
- * @type {cr.ui.MenuButton} |
- * @private |
- */ |
- this.gearButton_ = null; |
- |
- /** |
- * The combo button to specify the task. |
- * @type {cr.ui.ComboButton} |
- * @private |
- */ |
- this.taskItems_ = null; |
- |
- /** |
* The container element of the dialog. |
* @type {HTMLDivElement} |
* @private |
@@ -411,7 +383,7 @@ FileManager.prototype = /** @struct */ { |
* @return {DirectoryTree} |
*/ |
get directoryTree() { |
- return this.directoryTree_; |
+ return this.ui_.directoryTree; |
}, |
/** |
* @return {HTMLDocument} |
@@ -632,8 +604,8 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
self.bannersController_ = new FileListBannerController( |
self.directoryModel_, self.volumeManager_, self.document_, |
showOffers); |
- self.bannersController_.addEventListener('relayout', |
- self.onResize_.bind(self)); |
+ self.bannersController_.addEventListener( |
+ 'relayout', self.ui_.relayout.bind(self.ui_)); |
}); |
var dm = this.directoryModel_; |
@@ -666,7 +638,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
this.commandHandler, |
this.selectionHandler_); |
- this.directoryTree_.addEventListener('change', function() { |
+ this.ui_.directoryTree.addEventListener('change', function() { |
this.ensureDirectoryTreeItemNotBehindPreviewPanel_(); |
}.bind(this)); |
@@ -711,11 +683,11 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
*/ |
FileManager.prototype.ensureDirectoryTreeItemNotBehindPreviewPanel_ = |
function() { |
- var selectedSubTree = this.directoryTree_.selectedItem; |
+ var selectedSubTree = this.ui_.directoryTree.selectedItem; |
if (!selectedSubTree) |
return; |
var item = selectedSubTree.rowElement; |
- var parentView = this.directoryTree_; |
+ var parentView = this.ui_.directoryTree; |
var itemRect = item.getBoundingClientRect(); |
if (!itemRect) |
@@ -774,7 +746,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
controller.attachFileListDropTarget(this.ui_.listContainer.table.list); |
controller.attachDragSource(this.ui_.listContainer.grid); |
controller.attachFileListDropTarget(this.ui_.listContainer.grid); |
- controller.attachTreeDropTarget(this.directoryTree_); |
+ controller.attachTreeDropTarget(this.ui_.directoryTree); |
controller.attachCopyPasteHandlers(); |
controller.addEventListener('selection-copied', |
this.blinkSelection.bind(this)); |
@@ -830,7 +802,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
cr.ui.Menu.decorate(rootsContextMenu); |
rootsContextMenu = /** @type {!cr.ui.Menu} */ (rootsContextMenu); |
- this.directoryTree_.contextMenuForRootItems = rootsContextMenu; |
+ this.ui_.directoryTree.contextMenuForRootItems = rootsContextMenu; |
// Set up the context menu for the folder items in directory tree. |
var directoryTreeContextMenu = queryRequiredElement( |
@@ -839,7 +811,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
directoryTreeContextMenu = |
/** @type {!cr.ui.Menu} */ (directoryTreeContextMenu); |
- this.directoryTree_.contextMenuForSubitems = directoryTreeContextMenu; |
+ this.ui_.directoryTree.contextMenuForSubitems = directoryTreeContextMenu; |
// Set up the context menu for the text editing. |
var textContextMenu = queryRequiredElement( |
@@ -847,12 +819,10 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
cr.ui.Menu.decorate(textContextMenu); |
this.textContextMenu_ = /** @type {!cr.ui.Menu} */ (textContextMenu); |
- var gearButton = queryRequiredElement(this.dialogDom_, '#gear-button'); |
- gearButton.addEventListener('menushow', this.onShowGearMenu_.bind(this)); |
+ this.ui_.gearButton.addEventListener( |
+ 'menushow', this.onShowGearMenu_.bind(this)); |
this.dialogDom_.querySelector('#gear-menu').menuItemSelector = |
'menuitem, hr'; |
- cr.ui.decorate(gearButton, cr.ui.MenuButton); |
- this.gearButton_ = /** @type {!cr.ui.MenuButton} */ (gearButton); |
this.syncButton.checkable = true; |
this.hostedButton.checkable = true; |
@@ -1147,43 +1117,36 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
PreviewPanel.VisibilityType.ALWAYS_VISIBLE : |
PreviewPanel.VisibilityType.AUTO, |
this.metadataCache_, |
+ this.volumeManager_), |
+ new LocationLine( |
+ queryRequiredElement(dom, '#location-breadcrumbs'), |
+ queryRequiredElement(dom, '#location-volume-icon'), |
+ this.metadataCache_, |
this.volumeManager_)); |
+ // Handle document event. |
this.dialogDom_.addEventListener('click', |
this.onExternalLinkClick_.bind(this)); |
- |
- this.ui_.locationLine = new LocationLine( |
- queryRequiredElement(dom, '#location-breadcrumbs'), |
- queryRequiredElement(dom, '#location-volume-icon'), |
- this.metadataCache_, |
- this.volumeManager_); |
- this.ui_.locationLine.addEventListener( |
- 'pathclick', this.onBreadcrumbClick_.bind(this)); |
- |
- // Initialize progress center panel. |
- this.progressCenterPanel_ = new ProgressCenterPanel( |
- queryRequiredElement(dom, '#progress-center')); |
- this.backgroundPage_.background.progressCenter.addPanel( |
- this.progressCenterPanel_); |
- |
this.document_.addEventListener('keydown', this.onKeyDown_.bind(this)); |
this.document_.addEventListener('keyup', this.onKeyUp_.bind(this)); |
+ // Handle UI events. |
this.ui_.listContainer.element.addEventListener( |
'keydown', this.onListKeyDown_.bind(this)); |
this.ui_.listContainer.element.addEventListener( |
ListContainer.EventType.TEXT_SEARCH, this.onTextSearch_.bind(this)); |
- |
- // TODO(hirono): Rename the handler after creating the DialogFooter class. |
+ this.ui_.locationLine.addEventListener( |
+ 'pathclick', this.onBreadcrumbClick_.bind(this)); |
+ this.backgroundPage_.background.progressCenter.addPanel( |
+ this.ui_.progressCenterPanel); |
this.ui_.dialogFooter.filenameInput.addEventListener( |
'input', this.onFilenameInputInput_.bind(this)); |
this.ui_.dialogFooter.filenameInput.addEventListener( |
'keydown', this.onFilenameInputKeyDown_.bind(this)); |
this.ui_.dialogFooter.filenameInput.addEventListener( |
'focus', this.onFilenameInputFocus_.bind(this)); |
- |
- this.decorateSplitter( |
- this.dialogDom_.querySelector('#navigation-list-splitter')); |
+ this.ui_.toggleViewButton.addEventListener('click', |
+ this.onToggleViewButtonClick_.bind(this)); |
this.dialogContainer_ = /** @type {!HTMLDivElement} */ |
(this.dialogDom_.querySelector('.dialog-container')); |
@@ -1195,24 +1158,16 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
(queryRequiredElement(this.dialogDom_, |
'#gear-menu-drive-hosted-settings')); |
- this.ui_.toggleViewButton.addEventListener('click', |
- this.onToggleViewButtonClick_.bind(this)); |
- var taskItems = queryRequiredElement(dom, '#tasks'); |
- cr.ui.ComboButton.decorate(taskItems); |
- this.taskItems_ = assertInstanceof(taskItems, cr.ui.ComboButton); |
- this.taskItems_.showMenu = function(shouldSetFocus) { |
+ this.ui_.taskMenuButton.showMenu = function(shouldSetFocus) { |
// Prevent the empty menu from opening. |
if (!this.menu.length) |
return; |
cr.ui.ComboButton.prototype.showMenu.call(this, shouldSetFocus); |
}; |
- this.taskItems_.addEventListener('select', |
+ this.ui_.taskMenuButton.addEventListener('select', |
this.onTaskItemClicked_.bind(this)); |
- this.dialogDom_.ownerDocument.defaultView.addEventListener( |
- 'resize', this.onResize_.bind(this)); |
- |
this.actionMenuItem_ = /** @type {!HTMLMenuItemElement} */ |
(queryRequiredElement(this.dialogDom_, '#default-action')); |
@@ -1377,26 +1332,19 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
* @private |
*/ |
FileManager.prototype.initDirectoryTree_ = function() { |
+ var directoryTree = /** @type {DirectoryTree} */ |
+ (this.dialogDom_.querySelector('#directory-tree')); |
var fakeEntriesVisible = |
this.dialogType !== DialogType.SELECT_SAVEAS_FILE; |
- this.directoryTree_ = /** @type {DirectoryTree} */ |
- (this.dialogDom_.querySelector('#directory-tree')); |
- DirectoryTree.decorate(this.directoryTree_, |
+ DirectoryTree.decorate(directoryTree, |
this.directoryModel_, |
this.volumeManager_, |
this.metadataCache_, |
fakeEntriesVisible); |
- this.directoryTree_.dataModel = new NavigationListModel( |
+ directoryTree.dataModel = new NavigationListModel( |
this.volumeManager_, this.folderShortcutsModel_); |
- // Visible height of the directory tree depends on the size of progress |
- // center panel. When the size of progress center panel changes, directory |
- // tree has to be notified to adjust its components (e.g. progress bar). |
- var observer = new MutationObserver( |
- this.directoryTree_.relayout.bind(this.directoryTree_)); |
- observer.observe(this.progressCenterPanel_.element, |
- /** @type {MutationObserverInit} */ |
- ({subtree: true, attributes: true, childList: true})); |
+ this.ui_.initDirectoryTree(directoryTree); |
}; |
/** |
@@ -1469,7 +1417,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
this.ui_.setCurrentListType(type); |
this.updateStartupPrefs_(); |
- this.onResize_(); |
}; |
/** |
@@ -1519,18 +1466,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
}; |
/** |
- * Resize details and thumb views to fit the new window size. |
- * @private |
- */ |
- FileManager.prototype.onResize_ = function() { |
- // May not be available during initialization. |
- if (this.directoryTree_) |
- this.directoryTree_.relayout(); |
- |
- this.ui_.relayout(); |
- }; |
- |
- /** |
* Handles local metadata changes in the currect directory. |
* @param {Event} event Change event. |
* @this {FileManager} |
@@ -1930,7 +1865,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
selection.mimeTypes); |
selection.tasks = new FileTasks(this); |
selection.tasks.init(selection.entries, selection.mimeTypes); |
- selection.tasks.display(this.taskItems_); |
+ selection.tasks.display(this.ui_.taskMenuButton); |
this.refreshCurrentDirectoryMetadata_(); |
this.selectionHandler_.onFileSelectionChanged(); |
}; |
@@ -2385,10 +2320,8 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
this.backgroundPage_.background.progressCenter.updateItem(item); |
} |
} |
- if (this.progressCenterPanel_) { |
- this.backgroundPage_.background.progressCenter.removePanel( |
- this.progressCenterPanel_); |
- } |
+ this.backgroundPage_.background.progressCenter.removePanel( |
+ this.ui_.progressCenterPanel); |
if (this.fileOperationManager_) { |
if (this.onEntriesChangedBound_) { |
this.fileOperationManager_.removeEventListener( |
@@ -2652,35 +2585,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; |
chrome.fileManagerPrivate.setPreferences(changeInfo); |
}; |
- FileManager.prototype.decorateSplitter = function(splitterElement) { |
- var self = this; |
- |
- var Splitter = cr.ui.Splitter; |
- |
- var customSplitter = cr.ui.define('div'); |
- |
- customSplitter.prototype = { |
- __proto__: Splitter.prototype, |
- |
- handleSplitterDragStart: function(e) { |
- Splitter.prototype.handleSplitterDragStart.apply(this, arguments); |
- this.ownerDocument.documentElement.classList.add('col-resize'); |
- }, |
- |
- handleSplitterDragMove: function(deltaX) { |
- Splitter.prototype.handleSplitterDragMove.apply(this, arguments); |
- self.onResize_(); |
- }, |
- |
- handleSplitterDragEnd: function(e) { |
- Splitter.prototype.handleSplitterDragEnd.apply(this, arguments); |
- this.ownerDocument.documentElement.classList.remove('col-resize'); |
- } |
- }; |
- |
- customSplitter.decorate(splitterElement); |
- }; |
- |
/** |
* Updates action menu item to match passed task items. |
* |