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

Side by Side Diff: chrome/browser/resources/file_manager/js/media/util.js

Issue 39123003: [Files.app] Split the JavaScript files into subdirectories: common, background, and foreground (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test failure. Created 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 'use strict';
6
7 /**
8 * A controller class detects mouse inactivity and hides "tool" elements.
9 *
10 * @param {Element} container The main DOM container.
11 * @param {number=} opt_timeout Hide timeout in ms.
12 * @param {function():boolean=} opt_toolsActive Function that returns |true|
13 * if the tools are active and should not be hidden.
14 * @constructor
15 */
16 function MouseInactivityWatcher(container, opt_timeout, opt_toolsActive) {
17 this.container_ = container;
18 this.timeout_ = opt_timeout || MouseInactivityWatcher.DEFAULT_TIMEOUT;
19 this.toolsActive_ = opt_toolsActive || function() { return false };
20
21 this.onTimeoutBound_ = this.onTimeout_.bind(this);
22 this.timeoutID_ = null;
23 this.mouseOverTool_ = false;
24
25 this.clientX_ = 0;
26 this.clientY_ = 0;
27
28 /**
29 * Indicates if the inactivity watcher is enabled or disabled. Use getters
30 * and setters.
31 * @type {boolean}
32 * @private
33 **/
34 this.disabled_ = false;
35 this.__defineSetter__('disabled', function(value) {
36 this.disabled_ = value;
37 if (value)
38 this.kick();
39 else
40 this.check();
41 });
42 this.__defineGetter__('disabled', function() {
43 return this.disabled_;
44 });
45
46 this.container_.addEventListener('mousemove', this.onMouseMove_.bind(this));
47 var tools = this.container_.querySelector('.tool');
48 for (var i = 0; i < tools.length; i++) {
49 tools[i].addEventListener('mouseover', this.onToolMouseOver_.bind(this));
50 tools[i].addEventListener('mouseout', this.onToolMouseOut_.bind(this));
51 }
52
53 // Show tools when the user touches the screen.
54 this.container_.addEventListener(
55 'touchstart', this.activityStarted_.bind(this));
56 var initiateFading = this.activityStopped_.bind(this, this.timeout_);
57 this.container_.addEventListener('touchend', initiateFading);
58 this.container_.addEventListener('touchcancel', initiateFading);
59 }
60
61 /**
62 * Default inactivity timeout.
63 */
64 MouseInactivityWatcher.DEFAULT_TIMEOUT = 3000;
65
66 /**
67 * @param {boolean} on True if show, false if hide.
68 */
69 MouseInactivityWatcher.prototype.showTools = function(on) {
70 if (on)
71 this.container_.setAttribute('tools', 'true');
72 else
73 this.container_.removeAttribute('tools');
74 };
75
76 /**
77 * To be called when the user started activity. Shows the tools
78 * and cancels the countdown.
79 * @private
80 */
81 MouseInactivityWatcher.prototype.activityStarted_ = function() {
82 this.showTools(true);
83
84 if (this.timeoutID_) {
85 clearTimeout(this.timeoutID_);
86 this.timeoutID_ = null;
87 }
88 };
89
90 /**
91 * Called when user activity has stopped. Re-starts the countdown.
92 * @param {number=} opt_timeout Timeout.
93 * @private
94 */
95 MouseInactivityWatcher.prototype.activityStopped_ = function(opt_timeout) {
96 if (this.disabled_ || this.mouseOverTool_ || this.toolsActive_())
97 return;
98
99 if (this.timeoutID_)
100 clearTimeout(this.timeoutID_);
101
102 this.timeoutID_ = setTimeout(
103 this.onTimeoutBound_, opt_timeout || this.timeout_);
104 };
105
106 /**
107 * Called when a user performed a short action (such as a click or a key press)
108 * that should show the tools if they are not visible.
109 * @param {number=} opt_timeout Timeout.
110 */
111 MouseInactivityWatcher.prototype.kick = function(opt_timeout) {
112 this.activityStarted_();
113 this.activityStopped_(opt_timeout);
114 };
115
116 /**
117 * Check if the tools are active and update the tools visibility accordingly.
118 */
119 MouseInactivityWatcher.prototype.check = function() {
120 if (this.toolsActive_())
121 this.activityStarted_();
122 else
123 this.activityStopped_();
124 };
125
126 /**
127 * Mouse move handler.
128 *
129 * @param {Event} e Event.
130 * @private
131 */
132 MouseInactivityWatcher.prototype.onMouseMove_ = function(e) {
133 if (this.clientX_ == e.clientX && this.clientY_ == e.clientY) {
134 // The mouse has not moved, must be the cursor change triggered by
135 // some of the attributes on the root container. Ignore the event.
136 return;
137 }
138 this.clientX_ = e.clientX;
139 this.clientY_ = e.clientY;
140
141 if (this.disabled_)
142 return;
143
144 this.kick();
145 };
146
147 /**
148 * Mouse over handler on a tool element.
149 *
150 * @param {Event} e Event.
151 * @private
152 */
153 MouseInactivityWatcher.prototype.onToolMouseOver_ = function(e) {
154 this.mouseOverTool_ = true;
155 if (!this.disabled_)
156 this.kick();
157 };
158
159 /**
160 * Mouse out handler on a tool element.
161 *
162 * @param {Event} e Event.
163 * @private
164 */
165 MouseInactivityWatcher.prototype.onToolMouseOut_ = function(e) {
166 this.mouseOverTool_ = false;
167 if (!this.disabled_)
168 this.kick();
169 };
170
171 /**
172 * Timeout handler.
173 * @private
174 */
175 MouseInactivityWatcher.prototype.onTimeout_ = function() {
176 this.timeoutID_ = null;
177 if (!this.disabled_ && !this.toolsActive_())
178 this.showTools(false);
179 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698