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

Unified Diff: ui/file_manager/file_manager/foreground/js/ui/list_container.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/ui/list_container.js
diff --git a/ui/file_manager/file_manager/foreground/js/ui/list_container.js b/ui/file_manager/file_manager/foreground/js/ui/list_container.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f02d8624f8acd17694a3dd374edc3212e6bd98f
--- /dev/null
+++ b/ui/file_manager/file_manager/foreground/js/ui/list_container.js
@@ -0,0 +1,128 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @constructor
+ * @struct
+ */
+function TextSearchState() {
+ /**
+ * @type {string}
+ */
+ this.text = '';
+
+ /**
+ * @type {!Date}
+ */
+ this.date = new Date();
+}
+
+/**
+ * List container for the file table and the grid view.
+ * @param {!HTMLElement} element Element of the container.
+ * @constructor
+ * @struct
+ */
+function ListContainer(element) {
+ /**
+ * The container element of the file list.
+ * @type {!HTMLElement}
+ * @const
+ */
+ this.element = element;
+
+ /**
+ * Spinner on file list which is shown while loading.
+ * @type {!HTMLElement}
+ * @const
+ */
+ this.spinner = queryRequiredElement(element, '.spinner-layer');
+
+ /**
+ * @type {!TextSearchState}
+ * @const
+ */
+ this.textSearchState = new TextSearchState();
+
+ this.element.addEventListener('keydown', this.onKeyDown_.bind(this));
+ this.element.addEventListener('keypress', this.onKeyPress_.bind(this));
+ this.element.addEventListener('mousemove', this.onMouseMove_.bind(this));
+}
+
+/**
+ * @enum {string}
+ * @const
+ */
+ListContainer.EventType = {
+ TEXT_SEARCH: 'textsearch'
+};
+
+/**
+ * Clears hover highlighting in the list container until next mouse move.
+ */
+ListContainer.prototype.clearHover = function() {
+ this.element.classList.add('nohover');
+};
+
+/**
+ * KeyDown event handler for the div#list-container element.
+ * @param {!Event} event Key event.
+ * @private
+ */
+ListContainer.prototype.onKeyDown_ = function(event) {
+ // Ignore keydown handler in the rename input box.
+ if (event.srcElement.tagName == 'INPUT') {
+ event.stopImmediatePropagation();
+ return;
+ }
+
+ 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.clearHover();
+ break;
+ }
+};
+
+/**
+ * KeyPress event handler for the div#list-container element.
+ * @param {!Event} event Key event.
+ * @private
+ */
+ListContainer.prototype.onKeyPress_ = function(event) {
+ // Ignore keypress handler in the rename input box.
+ if (event.srcElement.tagName == 'INPUT' ||
+ event.ctrlKey ||
+ event.metaKey ||
+ event.altKey) {
+ event.stopImmediatePropagation();
+ return;
+ }
+
+ var now = new Date();
+ var character = String.fromCharCode(event.charCode).toLowerCase();
+ var text = now - this.textSearchState.date > 1000 ? '' :
+ this.textSearchState.text;
+ this.textSearchState.text = text + character;
+ this.textSearchState.date = now;
+
+ if (this.textSearchState.text)
+ cr.dispatchSimpleEvent(this.element, ListContainer.EventType.TEXT_SEARCH);
+};
+
+/**
+ * Mousemove event handler for the div#list-container element.
+ * @param {Event} event Mouse event.
+ * @private
+ */
+ListContainer.prototype.onMouseMove_ = function(event) {
+ // The user grabbed the mouse, restore the hover highlighting.
+ this.element.classList.remove('nohover');
+};
« no previous file with comments | « ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js ('k') | ui/file_manager/file_manager/main.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698