From 2e04af953463643791f6362bd8ef4c6ba190abfa Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Wed, 18 Apr 2012 13:48:51 -0700 Subject: Squashed commit of the following: commit 2054551bfb01a0f4ca2e138b9d724835462d45cd Merge: 765c2da 616a853 Author: Valerio Virgillito Date: Wed Apr 18 13:48:21 2012 -0700 Merge branch 'refs/heads/master' into integration commit 765c2da8e1aa03550caf42b2bd5f367555ad2843 Author: Valerio Virgillito Date: Tue Apr 17 15:29:41 2012 -0700 updating the picasa carousel Signed-off-by: Valerio Virgillito commit 9484f1c82b81e27edf2dc0a1bcc1fa3b12077406 Merge: d27f2df cacb4a2 Author: Valerio Virgillito Date: Tue Apr 17 15:03:50 2012 -0700 Merge branch 'refs/heads/master' into integration commit d27f2df4d846064444263d7832d213535962abe7 Author: Valerio Virgillito Date: Wed Apr 11 10:39:36 2012 -0700 integrating new picasa carousel component Signed-off-by: Valerio Virgillito commit 6f98384c9ecbc8abe55ccfe1fc25a0c7ce22c493 Author: Valerio Virgillito Date: Tue Apr 10 14:33:00 2012 -0700 fixed the text area case issue Text area was renamed from TextArea to Textarea Signed-off-by: Valerio Virgillito commit 1e83e26652266136802bc7af930379c1ecd631a6 Author: Valerio Virgillito Date: Mon Apr 9 22:10:45 2012 -0700 integrating montage v0.8 into ninja. Signed-off-by: Valerio Virgillito Signed-off-by: Valerio Virgillito --- node_modules/montage/ui/composer/press-composer.js | 126 ++++++++++++++++++--- 1 file changed, 111 insertions(+), 15 deletions(-) (limited to 'node_modules/montage/ui/composer/press-composer.js') diff --git a/node_modules/montage/ui/composer/press-composer.js b/node_modules/montage/ui/composer/press-composer.js index 4a6b99b2..680c301d 100644 --- a/node_modules/montage/ui/composer/press-composer.js +++ b/node_modules/montage/ui/composer/press-composer.js @@ -20,11 +20,11 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m /** @event - @name pressstart + @name pressStart @param {Event} event Dispatched when a press begins. It is ended by either a {@link press} or - {@link presscancel} event. + {@link pressCancel} event. */ /** @@ -37,7 +37,15 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m /** @event - @name presscancel + @name longPress + @param {Event} event + + Dispatched when a press lasts for longer than (@link longPressTimeout} + */ + + /** + @event + @name pressCancel @param {Event} event Dispatched when a press is canceled. This could be because the pointer @@ -67,6 +75,35 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m } }, + /** + Cancel the current press. + + Can be used in a "longPress" event handler to prevent the "press" event + being fired. + @returns Boolean true if a press was canceled, false if the composer was + already in a unpressed or canceled state. + */ + cancelPress: { + value: function() { + if (this._state === PressComposer.PRESSED) { + this._dispatchPressCancel(); + this._endInteraction(); + return true; + } + return false; + } + }, + + // Optimisation so that we don't set a timeout if we do not need to + addEventListener: { + value: function(type, listener, useCapture) { + Composer.addEventListener.call(this, type, listener, useCapture); + if (type === "longPress") { + this._shouldDispatchLongPress = true; + } + } + }, + UNPRESSED: { value: 0 }, @@ -87,6 +124,34 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m } }, + _shouldDispatchLongPress: { + enumerable: false, + value: false + }, + + _longPressTimeout: { + enumerable: false, + value: 1000 + }, + /** + How long a press has to last for a longPress event to be dispatched + */ + longPressTimeout: { + get: function() { + return this._longPressTimeout; + }, + set: function(value) { + if (this._longPressTimeout !== value) { + this._longPressTimeout = value; + } + } + }, + + _longPressTimer: { + enumberable: false, + value: null + }, + // Magic /** @@ -140,7 +205,7 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m this.component.eventManager.claimPointer(this._observedPointer, this); - this._dispatchPressstart(event); + this._dispatchPressStart(event); } }, @@ -165,12 +230,12 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m while (target !== this._element && target && target.parentNode) { target = target.parentNode; } - isTarget = target === this.component.element; + isTarget = target === this._element; if (isSurrendered && event.type === "click") { // Pointer surrendered, so prevent the default action event.preventDefault(); - // No need to dispatch an event as presscancel was dispatched + // No need to dispatch an event as pressCancel was dispatched // in surrenderPointer, just end the interaction. this._endInteraction(event); return; @@ -183,7 +248,7 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m } if (!isSurrendered && !isTarget && event.type === "mouseup") { - this._dispatchPresscancel(event); + this._dispatchPressCancel(event); this._endInteraction(event); return; } @@ -247,7 +312,7 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m return false; } - this._dispatchPresscancel(); + this._dispatchPressCancel(); return true; } }, @@ -280,7 +345,7 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m value: function(event) { if (this._observedPointer === null || this._changedTouchisObserved(event.changedTouches) !== false) { if (this.component.eventManager.isPointerClaimedByComponent(this._observedPointer, this)) { - this._dispatchPresscancel(event); + this._dispatchPressCancel(event); } this._endInteraction(event); } @@ -331,14 +396,21 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m }, /** - Dispatch the pressstart event + Dispatch the pressStart event @private */ - _dispatchPressstart: { + _dispatchPressStart: { enumerable: false, value: function (event) { this._state = PressComposer.PRESSED; - this.dispatchEvent(this._createPressEvent("pressstart", event)); + this.dispatchEvent(this._createPressEvent("pressStart", event)); + + if (this._shouldDispatchLongPress) { + var self = this; + this._longPressTimer = setTimeout(function () { + self._dispatchLongPress(); + }, this._longPressTimeout); + } } }, @@ -349,20 +421,44 @@ var PressComposer = exports.PressComposer = Montage.create(Composer,/** @lends m _dispatchPress: { enumerable: false, value: function (event) { + if (this._shouldDispatchLongPress) { + clearTimeout(this._longPressTimer); + this._longPressTimer = null; + } + this.dispatchEvent(this._createPressEvent("press", event)); this._state = PressComposer.UNPRESSED; } }, /** - Dispatch the presscancel event + Dispatch the long press event + @private + */ + _dispatchLongPress: { + enumerable: false, + value: function (event) { + if (this._shouldDispatchLongPress) { + this.dispatchEvent(this._createPressEvent("longPress", event)); + this._longPressTimer = null; + } + } + }, + + /** + Dispatch the pressCancel event @private */ - _dispatchPresscancel: { + _dispatchPressCancel: { enumerable: false, value: function (event) { + if (this._shouldDispatchLongPress) { + clearTimeout(this._longPressTimer); + this._longPressTimer = null; + } + this._state = PressComposer.CANCELLED; - this.dispatchEvent(this._createPressEvent("presscancel", event)); + this.dispatchEvent(this._createPressEvent("pressCancel", event)); } } -- cgit v1.2.3