Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1644)

Unified Diff: ui/file_manager/file_manager/foreground/js/file_manager.js

Issue 555403003: Define FileManager's properties in the constructor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove one more unnecessary empty line. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3f4ff1fd6cf3a9fda0812264d110706532b53cfe..0d0fdf33b820555c75327c1c30118e27310becf1 100644
--- a/ui/file_manager/file_manager/foreground/js/file_manager.js
+++ b/ui/file_manager/file_manager/foreground/js/file_manager.js
@@ -14,7 +14,93 @@
* @constructor
*/
function FileManager() {
- this.initializeQueue_ = new AsyncUtil.Group();
+ // --------------------------------------------------------------------------
+ // Services FileManager depends on.
+
+ /**
+ * Volume manager.
+ * @type {VolumeManager}
+ * @private
+ */
+ this.volumeManager_ = null;
+
+ /**
+ * Metadata cache.
+ * @type {MetadataCache}
+ * @private
+ */
+ this.metadataCache_ = null;
+
+ /**
+ * File operation manager.
+ * @type {FileOperationManager}
+ * @private
+ */
+ this.fileOperationManager_ = null;
+
+ /**
+ * File transfer controller.
+ * @type {FileTransferController}
+ * @private
+ */
+ this.fileTransferController_ = null;
+
+ /**
+ * File filter.
+ * @type {FileFilter}
+ * @private
+ */
+ this.fileFilter_ = null;
+
+ /**
+ * File watcher.
+ * @type {FileWatcher}
+ * @private
+ */
+ this.fileWatcher_ = null;
+
+ /**
+ * Model of current directory.
+ * @type {DirectoryModel}
+ * @private
+ */
+ this.directoryModel_ = null;
+
+ /**
+ * Model of folder shortcuts.
+ * @type {FolderShortcutsDataModel}
+ * @private
+ */
+ this.folderShortcutsModel_ = null;
+
+ /**
+ * VolumeInfo of the current volume.
+ * @type {VolumeInfo}
+ * @private
+ */
+ this.currentVolumeInfo_ = null;
+
+ /**
+ * Handler for command events.
+ * @type {CommandHandler}
+ */
+ this.commandHandler = null;
+
+ /**
+ * Handler for the change of file selection.
+ * @type {SelectionHandler}
+ * @private
+ */
+ this.selectionHandler_ = null;
+
+ // --------------------------------------------------------------------------
+ // Parameters determining the type of file manager.
+
+ /**
+ * Dialog type of this window.
+ * @type {DialogType}
+ */
+ this.dialogType = DialogType.FULL_PAGE;
/**
* Current list type.
@@ -24,6 +110,407 @@ function FileManager() {
this.listType_ = null;
/**
+ * List of acceptable file types for open dialog.
+ * @type {Array.<Object>}
+ * @private
+ */
+ this.fileTypes_ = [];
+
+ /**
+ * Startup parameters for this application.
+ * @type {Object}
+ * @private
+ */
+ this.params_ = null;
+
+ /**
+ * Startup preference about the view.
+ * @type {Object}
+ * @private
+ */
+ this.viewOptions_ = {};
+
+ /**
+ * The user preference.
+ * @type {Object}
+ * @private
+ */
+ this.preferences_ = null;
+
+ // --------------------------------------------------------------------------
+ // UI components.
+
+ /**
+ * UI management class of file manager.
+ * @type {FileManagerUI}
+ * @private
+ */
+ this.ui_ = null;
+
+ /**
+ * Preview panel.
+ * @type {PreviewPanel}
+ * @private
+ */
+ this.previewPanel_ = null;
+
+ /**
+ * Progress center panel.
+ * @type {ProgressCenterPanel}
+ * @private
+ */
+ this.progressCenterPanel_ = null;
+
+ /**
+ * Directory tree.
+ * @type {DirectoryTree}
+ * @private
+ */
+ this.directoryTree_ = null;
+
+ /**
+ * Auto-complete list.
+ * @type {AutocompleteList}
+ * @private
+ */
+ this.autocompleteList_ = null;
+
+ /**
+ * Banners in the file list.
+ * @type {FileListBannerController}
+ * @private
+ */
+ this.bannersController_ = null;
+
+ // --------------------------------------------------------------------------
+ // Dialogs.
+
+ /**
+ * Error dialog.
+ * @type {ErrorDialog}
+ */
+ this.error = null;
+
+ /**
+ * Alert dialog.
+ * @type {cr.ui.dialogs.AlertDialog}
+ */
+ this.alert = null;
+
+ /**
+ * Confirm dialog.
+ * @type {cr.ui.dialogs.ConfirmDialog}
+ */
+ this.confirm = null;
+
+ /**
+ * Prompt dialog.
+ * @type {cr.ui.dialogs.PromptDialog}
+ */
+ this.prompt = null;
+
+ /**
+ * Share dialog.
+ * @type {ShareDialog}
+ * @private
+ */
+ this.shareDialog_ = null;
+
+ /**
+ * Default task picker.
+ * @type {DefaultActionDialog}
+ */
+ this.defaultTaskPicker = null;
+
+ /**
+ * Suggest apps dialog.
+ * @type {SuggestAppsDialog}
+ */
+ this.suggestAppsDialog = null;
+
+ // --------------------------------------------------------------------------
+ // Menus.
+
+ /**
+ * Context menu for files.
+ * @type {HTMLMenuElement}
+ * @private
+ */
+ this.fileContextMenu_ = null;
+
+ /**
+ * Context menu for volumes or shortcuts displayed on left pane.
+ * @type {HTMLMenuElement}
+ * @private
+ */
+ this.rootsContextMenu_ = null;
+
+ /**
+ * Context menu for directory tree items.
+ * @type {HTMLMenuElement}
+ * @private
+ */
+ this.directoryTreeContextMenu_ = null;
+
+ /**
+ * Context menu for texts.
+ * @type {HTMLMenuElement}
+ * @private
+ */
+ this.textContextMenu_ = null;
+
+ // --------------------------------------------------------------------------
+ // DOM elements.
+
+ /**
+ * Background page.
+ * @type {Window}
+ * @private
+ */
+ this.backgroundPage_ = null;
+
+ /**
+ * The root DOM element of this app.
+ * @type {HTMLBodyElement}
+ * @private
+ */
+ this.dialogDom_ = null;
+
+ /**
+ * The document object of this app.
+ * @type {HTMLDocument}
+ * @private
+ */
+ this.document_ = null;
+
+ /**
+ * The menu item to toggle "Do not use mobile data for sync".
+ * @type {HTMLMenuItemElement}
+ */
+ this.syncButton = null;
+
+ /**
+ * The menu item to toggle "Show Google Docs files".
+ * @type {HTMLMenuItemElement}
+ */
+ this.hostedButton = null;
+
+ /**
+ * The menu item for doing default action.
+ * @type {HTMLMenuItemElement}
+ * @private
+ */
+ this.defaultActionMenuItem_ = null;
+
+ /**
+ * The button to open gear menu.
+ * @type {HTMLButtonElement}
+ * @private
+ */
+ this.gearButton_ = null;
+
+ /**
+ * The OK button.
+ * @type {HTMLButtonElement}
+ * @private
+ */
+ this.okButton_ = null;
+
+ /**
+ * The cancel button.
+ * @type {HTMLButtonElement}
+ * @private
+ */
+ this.cancelButton_ = null;
+
+ /**
+ * The combo button to specify the task.
+ * @type {HTMLButtonElement}
+ * @private
+ */
+ this.taskItems_ = null;
+
+ /**
+ * The input element to rename entry.
+ * @type {HTMLInputElement}
+ * @private
+ */
+ this.renameInput_ = null;
+
+ /**
+ * The input element to specify file name.
+ * @type {HTMLInputElement}
+ * @private
+ */
+ this.filenameInput_ = null;
+
+ /**
+ * The file table.
+ * @type {FileTable}
+ * @private
+ */
+ this.table_ = null;
+
+ /**
+ * The file grid.
+ * @type {FileGrid}
+ * @private
+ */
+ this.grid_ = null;
+
+ /**
+ * Current file list.
+ * @type {cr.ui.List}
+ * @private
+ */
+ this.currentList_ = null;
+
+ /**
+ * Spinner on file list which is shown while loading.
+ * @type {HTMLDivElement}
+ * @private
+ */
+ this.spinner_ = null;
+
+ /**
+ * The container element of the dialog.
+ * @type {HTMLDivElement}
+ * @private
+ */
+ this.dialogContainer_ = null;
+
+ /**
+ * The container element of the file list.
+ * @type {HTMLDivElement}
+ * @private
+ */
+ this.listContainer_ = null;
+
+ /**
+ * The input element in the search box.
+ * @type {HTMLInputElement}
+ * @private
+ */
+ this.searchBox_ = null;
+
+ /**
+ * The file type selector.
+ * @type {HTMLSelectElement}
+ * @private
+ */
+ this.fileTypeSelector_ = null;
+
+ /**
+ * Open-with command in the context menu.
+ * @type {cr.ui.Command}
+ * @private
+ */
+ this.openWithCommand_ = null;
+
+ // --------------------------------------------------------------------------
+ // Bound functions.
+
+ /**
+ * Bound function for onCopyProgress_.
+ * @type {this:FileManager, function(Event)}
+ * @private
+ */
+ this.onCopyProgressBound_ = null;
+
+ /**
+ * Bound function for onEntriesChanged_.
+ * @type {this:FileManager, function(Event)}
+ * @private
+ */
+ this.onEntriesChangedBound_ = null;
+
+ /**
+ * Bound function for onCancel_.
+ * @type {this:FileManager, function(Event)}
+ * @private
+ */
+ this.onCancelBound_ = null;
+
+ // --------------------------------------------------------------------------
+ // Scan state.
+
+ /**
+ * Whether a scan is in progress.
+ * @type {boolean}
+ * @private
+ */
+ this.scanInProgress_ = false;
+
+ /**
+ * Whether a scan is updated at least once. If true, spinner should disappear.
+ * @type {boolean}
+ * @private
+ */
+ this.scanUpdatedAtLeastOnceOrCompleted_ = false;
+
+ /**
+ * Timer ID to delay UI refresh after a scan is completed.
+ * @type {number}
+ * @private
+ */
+ this.scanCompletedTimer_ = 0;
+
+ /**
+ * Timer ID to delay UI refresh after a scan is updated.
+ * @type {number}
+ * @private
+ */
+ this.scanUpdatedTimer_ = 0;
+
+ /**
+ * Timer ID to delay showing spinner after a scan starts.
+ * @type {number}
+ * @private
+ */
+ this.showSpinnerTimeout_ = 0;
+
+ // --------------------------------------------------------------------------
+ // Search states.
+
+ /**
+ * The last search query.
+ * @type {string}
+ * @private
+ */
+ this.lastSearchQuery_ = '';
+
+ /**
+ * The last auto-complete query.
+ * @type {string}
+ * @private
+ */
+ this.lastAutocompleteQuery_ = '';
+
+ /**
+ * Whether auto-complete suggestion is busy to respond previous request.
+ * @type {boolean}
+ * @private
+ */
+ this.autocompleteSuggestionsBusy_ = false;
+
+ /**
+ * State of text-search, which is triggerd by keyboard input on file list.
+ * @type {Object}
+ * @private
+ */
+ this.textSearchState_ = {text: '', date: new Date()};
+
+ // --------------------------------------------------------------------------
+ // Miscellaneous FileManager's states.
+
+ /**
+ * Queue for ordering FileManager's initialization process.
+ * @type {AsyncUtil.Group}
+ * @private
+ */
+ this.initializeQueue_ = new AsyncUtil.Group();
+
+ /**
* True while a user is pressing <Tab>.
* This is used for identifying the trigger causing the filelist to
* be focused.
@@ -55,18 +542,71 @@ function FileManager() {
this.isSecretGearMenuShown_ = false;
/**
- * SelectionHandler.
- * @type {SelectionHandler}
+ * The last clicked item in the file list.
+ * @type {HTMLLIElement}
* @private
*/
- this.selectionHandler_ = null;
+ this.lastClickedItem_ = null;
/**
- * VolumeInfo of the current volume.
- * @type {VolumeInfo}
+ * Count of the SourceNotFound error.
+ * @type {number}
* @private
*/
- this.currentVolumeInfo_ = null;
+ this.sourceNotFoundErrorCount_ = 0;
+
+ /**
+ * Whether the app should be closed on unmount.
+ * @type {boolean}
+ * @private
+ */
+ this.closeOnUnmount_ = false;
+
+ /**
+ * The key for storing startup preference.
+ * @type {string}
+ * @private
+ */
+ this.startupPrefName_ = '';
+
+ /**
+ * URL of directory which should be initial current directory.
+ * @type {string}
+ * @private
+ */
+ this.initCurrentDirectoryURL_ = '';
+
+ /**
+ * URL of entry which should be initially selected.
+ * @type {string}
+ * @private
+ */
+ this.initSelectionURL_ = '';
+
+ /**
+ * The name of target entry (not URL).
+ * @type {string}
+ * @private
+ */
+ this.initTargetName_ = '';
+
+ /**
+ * Data model which is used as a placefolder in inactive file list.
+ * @type {cr.ui.ArrayDataModel}
+ * @private
+ */
+ this.emptyDataModel_ = null;
+
+ /**
+ * Selection model which is used as a placefolder in inactive file list.
+ * @type {cr.ui.ListSelectionModel}
+ * @private
+ */
+ this.emptySelectionModel_ = null;
+
+ // Object.seal() has big performance/memory overhead for now, so we use
+ // Object.preventExtensions() here. crbug.com/412239.
+ Object.preventExtensions(this);
}
FileManager.prototype = {
@@ -226,7 +766,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
group.add(this.getPreferences_.bind(this));
// Get startup preferences.
- this.viewOptions_ = {};
group.add(function(done) {
util.platform.getPreference(this.startupPrefName_, function(value) {
// Load the global default options.
@@ -433,8 +972,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
* @private
*/
FileManager.prototype.onSourceNotFound_ = function(event) {
- // Ensure this.sourceNotFoundErrorCount_ is integer.
- this.sourceNotFoundErrorCount_ = ~~this.sourceNotFoundErrorCount_;
var item = new ProgressCenterItem();
item.id = 'source-not-found-' + this.sourceNotFoundErrorCount_;
if (event.progressType === ProgressItemType.COPY)
@@ -853,15 +1390,12 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.dialogDom_.ownerDocument.defaultView.addEventListener(
'resize', this.onResize_.bind(this));
- this.searchBoxWrapper_ = this.ui_.searchBox.element;
this.searchBox_ = this.ui_.searchBox.inputElement;
this.searchBox_.addEventListener(
'input', this.onSearchBoxUpdate_.bind(this));
this.ui_.searchBox.clearButton.addEventListener(
'click', this.onSearchClearButtonClick_.bind(this));
- this.lastSearchQuery_ = '';
-
this.autocompleteList_ = this.ui_.searchBox.autocompleteList;
this.autocompleteList_.requestSuggestions =
this.requestAutocompleteSuggestions_.bind(this);
@@ -885,9 +1419,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.openWithCommand_ =
this.dialogDom_.querySelector('#open-with');
- this.driveBuyMoreStorageCommand_ =
- this.dialogDom_.querySelector('#drive-buy-more-space');
-
this.defaultActionMenuItem_.addEventListener('activate',
this.dispatchSelectionAction_.bind(this));
@@ -1004,7 +1535,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
}
this.setListType(this.viewOptions_.listType || FileManager.ListType.DETAIL);
- this.textSearchState_ = {text: '', date: new Date()};
this.closeOnUnmount_ = (this.params_.action == 'auto-open');
if (this.closeOnUnmount_) {
@@ -2536,12 +3066,12 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.scanUpdatedAtLeastOnceOrCompleted_ = false;
if (this.scanCompletedTimer_) {
clearTimeout(this.scanCompletedTimer_);
- this.scanCompletedTimer_ = null;
+ this.scanCompletedTimer_ = 0;
}
if (this.scanUpdatedTimer_) {
clearTimeout(this.scanUpdatedTimer_);
- this.scanUpdatedTimer_ = null;
+ this.scanUpdatedTimer_ = 0;
}
if (this.spinner_.hidden) {
@@ -2566,7 +3096,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
if (this.scanUpdatedTimer_) {
clearTimeout(this.scanUpdatedTimer_);
- this.scanUpdatedTimer_ = null;
+ this.scanUpdatedTimer_ = 0;
}
// To avoid flickering postpone updating the ui by a small amount of time.
@@ -2580,7 +3110,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.scanInProgress_ = false;
this.table_.list.endBatchUpdates();
this.grid_.endBatchUpdates();
- this.scanCompletedTimer_ = null;
+ this.scanCompletedTimer_ = 0;
}.bind(this), 50);
};
@@ -2612,7 +3142,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.table_.list.startBatchUpdates();
this.grid_.startBatchUpdates();
}
- this.scanUpdatedTimer_ = null;
+ this.scanUpdatedTimer_ = 0;
}.bind(this), 200);
};
@@ -2630,11 +3160,11 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.hideSpinnerLater_();
if (this.scanCompletedTimer_) {
clearTimeout(this.scanCompletedTimer_);
- this.scanCompletedTimer_ = null;
+ this.scanCompletedTimer_ = 0;
}
if (this.scanUpdatedTimer_) {
clearTimeout(this.scanUpdatedTimer_);
- this.scanUpdatedTimer_ = null;
+ this.scanUpdatedTimer_ = 0;
}
// Finish unfinished batch updates.
if (!this.scanUpdatedAtLeastOnceOrCompleted_) {
@@ -2660,7 +3190,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
FileManager.prototype.cancelSpinnerTimeout_ = function() {
if (this.showSpinnerTimeout_) {
clearTimeout(this.showSpinnerTimeout_);
- this.showSpinnerTimeout_ = null;
+ this.showSpinnerTimeout_ = 0;
}
};
@@ -3610,7 +4140,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
* @private
*/
FileManager.prototype.getPreferences_ = function(callback, opt_update) {
- if (!opt_update && this.preferences_ !== undefined) {
+ if (!opt_update && this.preferences_ !== null) {
callback(this.preferences_);
return;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698