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

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

Issue 695883002: Create ListContainer and SpinnerController class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test. Created 6 years, 1 month 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
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 9d2ae418bda79de576874217832a7898db652b15..6fa2db83f99992c56a632b3c65f0fe676aff38b0 100644
--- a/ui/file_manager/file_manager/foreground/js/file_manager.js
+++ b/ui/file_manager/file_manager/foreground/js/file_manager.js
@@ -182,6 +182,13 @@ function FileManager() {
this.searchController_ = null;
/**
+ * Controller for spinner.
+ * @type {SpinnerController}
+ * @private
+ */
+ this.spinnerController_ = null;
+
+ /**
* Banners in the file list.
* @type {FileListBannerController}
* @private
@@ -330,13 +337,6 @@ function FileManager() {
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
@@ -344,13 +344,6 @@ function FileManager() {
this.dialogContainer_ = null;
/**
- * The container element of the file list.
- * @type {HTMLDivElement}
- * @private
- */
- this.listContainer_ = null;
-
- /**
* Open-with command in the context menu.
* @type {cr.ui.Command}
* @private
@@ -412,13 +405,6 @@ function FileManager() {
*/
this.scanUpdatedTimer_ = 0;
- /**
- * Timer ID to delay showing spinner after a scan starts.
- * @type {number}
- * @private
- */
- this.showSpinnerTimeout_ = 0;
-
// --------------------------------------------------------------------------
// Search states.
@@ -1085,8 +1071,9 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
cr.ui.contextMenuHandler.setContextMenu(this.renameInput_,
this.textContextMenu_);
this.registerInputCommands_(this.renameInput_);
- this.document_.addEventListener('command',
- this.setNoHover_.bind(this, true));
+ this.document_.addEventListener(
+ 'command',
+ this.ui_.listContainer.clearHover.bind(this.ui_.listContainer));
};
/**
@@ -1303,10 +1290,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
var taskItems = queryRequiredElement(dom, '#tasks');
this.taskItems_ = /** @type {HTMLButtonElement} */ (taskItems);
- var spinner = queryRequiredElement(dom, '#list-container > .spinner-layer');
- this.spinner_ = /** @type {HTMLDivElement} */ (spinner);
- this.showSpinner_(true);
-
var fullPage = this.dialogType == DialogType.FULL_PAGE;
var table = queryRequiredElement(dom, '.detail-table');
var grid = queryRequiredElement(dom, '.thumbnail-grid');
@@ -1362,14 +1345,12 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.ui_.dialogFooter.filenameInput.addEventListener(
'focus', this.onFilenameInputFocus_.bind(this));
- this.listContainer_ = /** @type {!HTMLDivElement} */
- (this.dialogDom_.querySelector('#list-container'));
- this.listContainer_.addEventListener(
+ this.ui_.listContainer =
+ new ListContainer(queryRequiredElement(dom, '#list-container'));
+ this.ui_.listContainer.element.addEventListener(
'keydown', this.onListKeyDown_.bind(this));
- this.listContainer_.addEventListener(
- 'keypress', this.onListKeyPress_.bind(this));
- this.listContainer_.addEventListener(
- 'mousemove', this.onListMouseMove_.bind(this));
+ this.ui_.listContainer.element.addEventListener(
+ ListContainer.EventType.TEXT_SEARCH, this.onTextSearch_.bind(this));
this.ui_.dialogFooter.okButton.addEventListener(
'click', this.onOk_.bind(this));
@@ -1569,6 +1550,11 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.fileFilter_,
this.ui_.alertDialog);
+ // Create spinner controller.
+ this.spinnerController_ = new SpinnerController(
+ this.ui_.listContainer.spinner, this.directoryModel_);
+ this.spinnerController_.show();
+
// Update metadata to change 'Today' and 'Yesterday' dates.
var today = new Date();
today.setHours(0);
@@ -3064,11 +3050,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.scanUpdatedTimer_ = 0;
}
- if (this.spinner_.hidden) {
- this.cancelSpinnerTimeout_();
- this.showSpinnerTimeout_ =
- setTimeout(this.showSpinner_.bind(this, true), 500);
- }
+ this.spinnerController_.showLater();
};
/**
@@ -3082,7 +3064,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
if (this.commandHandler)
this.commandHandler.updateAvailability();
- this.hideSpinnerLater_();
+ this.spinnerController_.hide();
if (this.scanUpdatedTimer_) {
clearTimeout(this.scanUpdatedTimer_);
@@ -3122,7 +3104,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
// We need to hide the spinner only once.
if (!this.scanUpdatedAtLeastOnceOrCompleted_) {
this.scanUpdatedAtLeastOnceOrCompleted_ = true;
- this.hideSpinnerLater_();
+ this.spinnerController_.hide();
}
// Update the UI.
@@ -3147,7 +3129,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
if (this.commandHandler)
this.commandHandler.updateAvailability();
- this.hideSpinnerLater_();
+ this.spinnerController_.hide();
if (this.scanCompletedTimer_) {
clearTimeout(this.scanCompletedTimer_);
this.scanCompletedTimer_ = 0;
@@ -3174,39 +3156,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
this.selectionHandler_.onFileSelectionChanged();
};
- /**
- * @private
- */
- FileManager.prototype.cancelSpinnerTimeout_ = function() {
- if (this.showSpinnerTimeout_) {
- clearTimeout(this.showSpinnerTimeout_);
- this.showSpinnerTimeout_ = 0;
- }
- };
-
- /**
- * @private
- */
- FileManager.prototype.hideSpinnerLater_ = function() {
- this.cancelSpinnerTimeout_();
- this.showSpinner_(false);
- };
-
- /**
- * @param {boolean} on True to show, false to hide.
- * @private
- */
- FileManager.prototype.showSpinner_ = function(on) {
- if (on && this.directoryModel_ && this.directoryModel_.isScanning())
- this.spinner_.hidden = false;
-
- if (!on && (!this.directoryModel_ ||
- !this.directoryModel_.isScanning() ||
- this.directoryModel_.getFileList().length != 0)) {
- this.spinner_.hidden = true;
- }
- };
-
FileManager.prototype.createNewFolder = function() {
var defaultName = str('DEFAULT_NEW_FOLDER_NAME');
@@ -3342,11 +3291,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
* @private
*/
FileManager.prototype.onListKeyDown_ = function(event) {
- if (event.srcElement.tagName == 'INPUT') {
- // Ignore keydown handler in the rename input box.
- return;
- }
-
switch (util.getKeyModifiers(event) + event.keyCode) {
case '8': // Backspace => Up one directory.
event.preventDefault();
@@ -3377,65 +3321,6 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
}
break;
}
-
- switch (event.keyIdentifier) {
- case 'Home':
- case 'End':
- case 'Up':
- case 'Down':
- case 'Left':
- case 'Right':
- // When navigating with keyboard we hide the distracting mouse hover
- // highlighting until the user moves the mouse again.
- this.setNoHover_(true);
- break;
- }
- };
-
- /**
- * Suppress/restore hover highlighting in the list container.
- * @param {boolean} on True to temporarity hide hover state.
- * @private
- */
- FileManager.prototype.setNoHover_ = function(on) {
- if (on) {
- this.listContainer_.classList.add('nohover');
- } else {
- this.listContainer_.classList.remove('nohover');
- }
- };
-
- /**
- * KeyPress event handler for the div#list-container element.
- * @param {Event} event Key event.
- * @private
- */
- FileManager.prototype.onListKeyPress_ = function(event) {
- if (event.srcElement.tagName == 'INPUT') {
- // Ignore keypress handler in the rename input box.
- return;
- }
-
- if (event.ctrlKey || event.metaKey || event.altKey)
- return;
-
- var now = new Date();
- var char = String.fromCharCode(event.charCode).toLowerCase();
- var text = now - this.textSearchState_.date > 1000 ? '' :
- this.textSearchState_.text;
- this.textSearchState_ = {text: text + char, date: now};
-
- this.doTextSearch_();
- };
-
- /**
- * Mousemove event handler for the div#list-container element.
- * @param {Event} event Mouse event.
- * @private
- */
- FileManager.prototype.onListMouseMove_ = function(event) {
- // The user grabbed the mouse, restore the hover highlighting.
- this.setNoHover_(false);
};
/**
@@ -3443,11 +3328,8 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
* starting with entered text (case-insensitive).
* @private
*/
- FileManager.prototype.doTextSearch_ = function() {
- var text = this.textSearchState_.text;
- if (!text)
- return;
-
+ FileManager.prototype.onTextSearch_ = function() {
+ var text = this.ui_.listContainer.textSearchState.text;
var dm = this.directoryModel_.getFileList();
for (var index = 0; index < dm.length; ++index) {
var name = dm.item(index).name;
@@ -3457,7 +3339,7 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52;
}
}
- this.textSearchState_.text = '';
+ this.ui_.listContainer.textSearchState.text = '';
};
/**

Powered by Google App Engine
This is Rietveld 408576698