Index: chrome/browser/resources/shared/js/cr/ui/repeating_button.js |
=================================================================== |
--- chrome/browser/resources/shared/js/cr/ui/repeating_button.js (revision 177292) |
+++ chrome/browser/resources/shared/js/cr/ui/repeating_button.js (working copy) |
@@ -1,183 +0,0 @@ |
-// Copyright (c) 2011 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. |
- |
-cr.define('cr.ui', function() { |
- /** |
- * Creates a new button element. The repeating button behaves like a |
- * keyboard button, which auto-repeats if held. This button is designed |
- * for use with controls such as brightness and volume adjustment buttons. |
- * @constructor |
- * @extends {HTMLButtonElement} |
- */ |
- var RepeatingButton = cr.ui.define('button'); |
- |
- /** |
- * DOM Events that may be fired by the Repeating button. |
- */ |
- RepeatingButton.Event = { |
- BUTTON_HELD: 'buttonHeld' |
- }; |
- |
- RepeatingButton.prototype = { |
- __proto__: HTMLButtonElement.prototype, |
- |
- /** |
- * Delay in milliseconds before the first repeat trigger of the button |
- * held action. |
- * @type {number} |
- * @private |
- */ |
- holdDelayTime_: 500, |
- |
- /** |
- * Delay in milliseconds between triggers of the button held action. |
- * @type {number} |
- * @private |
- */ |
- holdRepeatIntervalTime_: 50, |
- |
- /** |
- * Callback function when repeated intervals trigger. Initialized when the |
- * button is held for an initial delay period and cleared when the button |
- * is released. |
- * @type {function} |
- * @private |
- */ |
- intervalCallback_: undefined, |
- |
- /** |
- * Callback function to arm the repeat timer. Initialized when the button |
- * is pressed and cleared when the interval timer is set or the button is |
- * released. |
- * @type {function} |
- * @private |
- */ |
- armRepeaterCallback_: undefined, |
- |
- /** |
- * Initializes the button. |
- */ |
- decorate: function() { |
- this.addEventListener('mousedown', this.buttonDown_.bind(this)); |
- this.addEventListener('mouseup', this.buttonUp_.bind(this)); |
- this.addEventListener('mouseout', this.buttonUp_.bind(this)); |
- this.addEventListener('touchstart', this.touchStart_.bind(this)); |
- this.addEventListener('touchend', this.buttonUp_.bind(this)); |
- this.addEventListener('touchcancel', this.buttonUp_.bind(this)); |
- }, |
- |
- /** |
- * Called when the user initiates a touch gesture. |
- * @param {!Event} e The triggered event. |
- * @private |
- */ |
- touchStart_: function(e) { |
- // Block system level gestures to prevent double tap to zoom. Also, |
- // block following mouse event to prevent double firing of the button |
- // held action in the case of a tap. Otherwise, a single tap action in |
- // webkit generates the following event sequence: touchstart, touchend, |
- // mouseover, mousemove, mousedown, mouseup and click. |
- e.preventDefault(); |
- this.buttonDown_(e); |
- }, |
- |
- /** |
- * Called when the user presses this button. |
- * @param {!Event} e The triggered event. |
- * @private |
- */ |
- buttonDown_: function(e) { |
- this.clearTimeout_(); |
- // Trigger the button held action immediately, after an initial delay and |
- // then repeated based on a fixed time increment. The time intervals are |
- // in agreement with the defaults for the ChromeOS keyboard and virtual |
- // keyboard. |
- // TODO(kevers): Consider adding a common location for picking up the |
- // initial delay and repeat interval. |
- this.buttonHeld_(); |
- var self = this; |
- this.armRepeaterCallback_ = function() { |
- // In the event of a click/tap operation, this button has already been |
- // released by the time this timeout triggers. Test to ensure that the |
- // button is still being held (i.e. clearTimeout has not been called). |
- if (self.armRepeaterCallback_) { |
- self.armRepeaterCallback_ = undefined; |
- self.buttonHeld_(); |
- self.intervalCallback_ = setInterval(self.buttonHeld_.bind(self), |
- self.holdRepeatIntervalTime_); |
- } |
- }; |
- setTimeout(this.armRepeaterCallback_, this.holdDelayTime_); |
- }, |
- |
- /** |
- * Called when the user releases this button. |
- * @param {!Event} e The triggered event. |
- * @private |
- */ |
- buttonUp_: function(e) { |
- this.clearTimeout_(); |
- }, |
- |
- /** |
- * Resets the interval callback. |
- * @private |
- */ |
- clearTimeout_: function() { |
- if (this.armRepeaterCallback_) { |
- clearTimeout(this.armRepeaterCallback_); |
- this.armRepeaterCallback_ = undefined; |
- } |
- if (this.intervalCallback_) { |
- clearInterval(this.intervalCallback_); |
- this.intervalCallback_ = undefined; |
- } |
- }, |
- |
- /** |
- * Dispatches the action associated with keeping this button pressed. |
- * @private |
- */ |
- buttonHeld_: function() { |
- cr.dispatchSimpleEvent(this, RepeatingButton.Event.BUTTON_HELD); |
- }, |
- |
- /** |
- * Getter for the initial delay before repeating. |
- * @type {number} The delay in milliseconds. |
- */ |
- get repeatDelay() { |
- return this.holdDelayTime_; |
- }, |
- |
- /** |
- * Setter for the initial delay before repeating. |
- * @type {number} The delay in milliseconds. |
- */ |
- set repeatDelay(delay) { |
- this.holdDelayTime_ = delay; |
- }, |
- |
- /** |
- * Getter for the repeat interval. |
- * @type {number} The repeat interval in milliseconds. |
- */ |
- get repeatInterval() { |
- return this.holdRepeatIntervalTime_; |
- }, |
- |
- /** |
- * Setter for the repeat interval. |
- * @type {number} The interval in milliseconds. |
- */ |
- set repeatInterval(delay) { |
- this.holdRepeatIntervalTime_ = delay; |
- } |
- }; |
- |
- return { |
- RepeatingButton: RepeatingButton |
- }; |
-}); |
- |