From ff5dfecabd69a302fca1c2f0eff022d8fa187788 Mon Sep 17 00:00:00 2001 From: Bryan Hughes Date: Fri, 1 Jun 2012 14:33:05 -0700 Subject: [PATCH 1/5] [TIMOB-8779] Implemented late binding of gestures. --- mobileweb/titanium/Ti/UI/TableViewRow.js | 3 + mobileweb/titanium/Ti/UI/TableViewSection.js | 3 + mobileweb/titanium/Ti/XML.js | 5 -- mobileweb/titanium/Ti/_/UI/Element.js | 93 ++++++++++++-------- 4 files changed, 60 insertions(+), 44 deletions(-) diff --git a/mobileweb/titanium/Ti/UI/TableViewRow.js b/mobileweb/titanium/Ti/UI/TableViewRow.js index 5e61f329568..5b22d3cf889 100644 --- a/mobileweb/titanium/Ti/UI/TableViewRow.js +++ b/mobileweb/titanium/Ti/UI/TableViewRow.js @@ -37,6 +37,9 @@ define(["Ti/_/declare", "Ti/_/lang", "Ti/UI/View", "Ti/_/dom", "Ti/_/css", "Ti/_ width: UI.SIZE, height: UI.SIZE })); + + // Force single tap to be processed. + this.addEventListener("singletap", function(){}); }, _defaultWidth: UI.INHERIT, diff --git a/mobileweb/titanium/Ti/UI/TableViewSection.js b/mobileweb/titanium/Ti/UI/TableViewSection.js index fc81dc0980b..c55068e8168 100644 --- a/mobileweb/titanium/Ti/UI/TableViewSection.js +++ b/mobileweb/titanium/Ti/UI/TableViewSection.js @@ -19,6 +19,9 @@ define(["Ti/_/declare", "Ti/_/lang", "Ti/_/UI/Widget", "Ti/_/style","Ti/UI/Mobil // Create the parts out of Ti controls so we can make use of the layout system this.layout = UI._LAYOUT_CONSTRAINING_VERTICAL; + + // Force single tap to be processed. + this.addEventListener("singletap", function(){}); }, _defaultWidth: UI.INHERIT, diff --git a/mobileweb/titanium/Ti/XML.js b/mobileweb/titanium/Ti/XML.js index bb8e831bd3d..832f3990f10 100644 --- a/mobileweb/titanium/Ti/XML.js +++ b/mobileweb/titanium/Ti/XML.js @@ -49,11 +49,6 @@ define(["Ti/_/Evented", "Ti/_/lang"], function(Evented, lang) { f && lang.generateAccessors(f, e[1], e[2]); }); - Object.defineProperty(Element.prototype, "text", { - get: function() { return this.textContent; }, - enumerable: true - }); - return lang.setObject("Ti.XML", Evented, { parseString: function(xml) { diff --git a/mobileweb/titanium/Ti/_/UI/Element.js b/mobileweb/titanium/Ti/_/UI/Element.js index 4fbb9785ffe..5bdc851a856 100644 --- a/mobileweb/titanium/Ti/_/UI/Element.js +++ b/mobileweb/titanium/Ti/_/UI/Element.js @@ -1,11 +1,7 @@ define( ["Ti/_/browser", "Ti/_/css", "Ti/_/declare", "Ti/_/dom", "Ti/_/event", "Ti/_/lang", "Ti/_/style", "Ti/_/Evented", - "Ti/UI", "Ti/_/Gestures/DoubleTap","Ti/_/Gestures/LongPress","Ti/_/Gestures/Pinch","Ti/_/Gestures/SingleTap", - "Ti/_/Gestures/Swipe","Ti/_/Gestures/TouchCancel","Ti/_/Gestures/TouchEnd","Ti/_/Gestures/TouchMove", - "Ti/_/Gestures/TouchStart","Ti/_/Gestures/TwoFingerTap", "Ti/_/Promise"], - function(browser, css, declare, dom, event, lang, style, Evented, UI, - DoubleTap, LongPress, Pinch, SingleTap, Swipe, TouchCancel, TouchEnd, - TouchMove, TouchStart, TwoFingerTap, Promise) { + "Ti/UI", "Ti/_/Promise", "Ti/_/string"], + function(browser, css, declare, dom, event, lang, style, Evented, UI, Promise, string) { var unitize = dom.unitize, computeSize = dom.computeSize, @@ -36,7 +32,21 @@ define( postLayoutProp = { set: postLayoutPropFunction }, - pixelUnits = "px"; + pixelUnits = "px", + gestureMapping = { + pinch: "Pinch", + swipe: "Swipe", + twofingertap: "TwoFingerTap", + doubletap: "DoubleTap", + longpress: "LongPress", + singletap: "SingleTap", + click: "SingleTap", + doubleclick: "DoubleTap", + touchstart: "TouchStart", + touchend: "TouchEnd", + touchmove: "TouchMove", + touchcancel: "TouchCancel" + }; return declare("Ti._.UI.Element", Evented, { @@ -54,27 +64,7 @@ define( })), // Handle click/touch/gestures - recognizers = this._gestureRecognizers = { - Pinch: new Pinch, - Swipe: new Swipe, - TwoFingerTap: new TwoFingerTap, - DoubleTap: new DoubleTap, - LongPress: new LongPress, - SingleTap: new SingleTap, - TouchStart: new TouchStart, - TouchEnd: new TouchEnd, - TouchMove: new TouchMove, - TouchCancel: new TouchCancel - }, - - // Each event could require a slightly different precedence of execution, which is why we have these separate lists. - // For now they are the same, but I suspect they will be different once the android-iphone parity is determined. - touchRecognizers = { - Start: recognizers, - Move: recognizers, - End: recognizers, - Cancel: recognizers - }, + recognizers = this._gestureRecognizers = {}, useTouch = "ontouchstart" in window, bg = lang.hitch(this, "_doBackground"); @@ -82,9 +72,7 @@ define( require.has("devmode") && args && args._debug && dom.attr.set(node, "data-debug", args._debug); function processTouchEvent(eventType, evt) { var i, - gestureRecognizers = touchRecognizers[eventType], touches = evt.changedTouches; - eventType = "Touch" + eventType + "Event"; if (this._preventDefaultTouchEvent) { this._preventDefaultTouchEvent && evt.preventDefault && evt.preventDefault(); for (i in touches) { @@ -96,11 +84,11 @@ define( targetTouches: [], changedTouches: [evt] }); - for (i in gestureRecognizers) { - gestureRecognizers[i]["process" + eventType](evt, self); + for (i in recognizers) { + recognizers[i].recognizer["process" + eventType](evt, self); } - for (i in gestureRecognizers) { - gestureRecognizers[i]["finalize" + eventType](); + for (i in recognizers) { + recognizers[i].recognizer["finalize" + eventType](); } } @@ -113,7 +101,7 @@ define( on(window, useTouch ? "touchmove" : "mousemove", function(evt){ if (!touchMoveBlocked) { touchMoveBlocked = true; - (useTouch || self._touching) && processTouchEvent("Move", evt); + (useTouch || self._touching) && processTouchEvent("TouchMoveEvent", evt); setTimeout(function(){ touchMoveBlocked = false; }, 30); @@ -121,16 +109,16 @@ define( }), on(window, useTouch ? "touchend" : "mouseup", function(evt){ self._touching = false; - processTouchEvent("End", evt); + processTouchEvent("TouchEndEvent", evt); event.off(handles); }), useTouch && on(window, "touchcancel", function(evt){ - processTouchEvent("Cancel", evt); + processTouchEvent("TouchCancelEvent", evt); event.off(handles); }) ]; self._touching = true; - processTouchEvent("Start", evt); + processTouchEvent("TouchStartEvent", evt); }); this.addEventListener("touchstart", bg); @@ -184,10 +172,37 @@ define( }; }, + addEventListener: function(eventName) { + if (eventName in gestureMapping) { + var gestureRecognizers = this._gestureRecognizers, + gestureRecognizer; + + if (!(eventName in gestureRecognizers)) { + gestureRecognizers[eventName] = { + count: 0, + recognizer: new (require("Ti/_/Gestures/" + gestureMapping[eventName]))() + }; + } + + gestureRecognizers[eventName].count++; + } + Evented.addEventListener.apply(this, arguments); + }, + + removeEventListener: function(eventName) { + if (eventName in gestureMapping) { + var gestureRecognizers = this._gestureRecognizers; + if (eventName in gestureRecognizers && !(--gestureRecognizers[eventName].count)) { + delete gestureRecognizers[eventName]; + } + } + Evented.removeEventListener.apply(this, arguments); + }, + _setParent: function(view) { this._parent = view; }, - + _add: function(view, hidden) { view._hidden = hidden; From 521e3d72017790977c30f2957f7fb5b16c463221 Mon Sep 17 00:00:00 2001 From: Bryan Hughes Date: Fri, 1 Jun 2012 16:00:10 -0700 Subject: [PATCH 2/5] [TIMOB-8779] Added gestures to package list. --- support/mobileweb/compiler.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/support/mobileweb/compiler.py b/support/mobileweb/compiler.py index d9f98cee3b1..1a892ee359b 100644 --- a/support/mobileweb/compiler.py +++ b/support/mobileweb/compiler.py @@ -720,6 +720,17 @@ def find_project_dependencies(self): 'Ti/Filesystem/File', 'Ti/Filesystem/FileStream', 'Ti/Gesture', + 'Ti/_/Gestures/GestureRecognizer', + 'Ti/_/Gestures/DoubleTap', + 'Ti/_/Gestures/LongPress', + 'Ti/_/Gestures/Pinch', + 'Ti/_/Gestures/SingleTap', + 'Ti/_/Gestures/Swipe', + 'Ti/_/Gestures/TouchCancel', + 'Ti/_/Gestures/TouchEnd', + 'Ti/_/Gestures/TouchMove', + 'Ti/_/Gestures/TouchStart', + 'Ti/_/Gestures/TwoFingerTap', 'Ti/Geolocation', 'Ti/IOStream', 'Ti/Locale', From 87ff7fb8d9605eff99d71a54260e4c8b0af05028 Mon Sep 17 00:00:00 2001 From: Bryan Hughes Date: Fri, 1 Jun 2012 16:26:17 -0700 Subject: [PATCH 3/5] [TIMOB-8779] Code cleanup. --- mobileweb/titanium/Ti/_/Evented.js | 2 +- mobileweb/titanium/Ti/_/UI/Element.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mobileweb/titanium/Ti/_/Evented.js b/mobileweb/titanium/Ti/_/Evented.js index 114b8b84961..49e583ff46c 100644 --- a/mobileweb/titanium/Ti/_/Evented.js +++ b/mobileweb/titanium/Ti/_/Evented.js @@ -19,7 +19,7 @@ define(function() { var i = 0, events = this.listeners[name], l = events && events.length || 0; - + for (; i < l; i++) { events[i] === handler && events.splice(i, 1); } diff --git a/mobileweb/titanium/Ti/_/UI/Element.js b/mobileweb/titanium/Ti/_/UI/Element.js index 5bdc851a856..cfa43458926 100644 --- a/mobileweb/titanium/Ti/_/UI/Element.js +++ b/mobileweb/titanium/Ti/_/UI/Element.js @@ -172,7 +172,7 @@ define( }; }, - addEventListener: function(eventName) { + addEventListener: function(name, handler) { if (eventName in gestureMapping) { var gestureRecognizers = this._gestureRecognizers, gestureRecognizer; @@ -180,23 +180,23 @@ define( if (!(eventName in gestureRecognizers)) { gestureRecognizers[eventName] = { count: 0, - recognizer: new (require("Ti/_/Gestures/" + gestureMapping[eventName]))() + recognizer: new (require("Ti/_/Gestures/" + gestureMapping[eventName])) }; } gestureRecognizers[eventName].count++; } - Evented.addEventListener.apply(this, arguments); + handler && Evented.addEventListener.apply(this, arguments); }, - removeEventListener: function(eventName) { + removeEventListener: function(name, handler) { if (eventName in gestureMapping) { var gestureRecognizers = this._gestureRecognizers; if (eventName in gestureRecognizers && !(--gestureRecognizers[eventName].count)) { delete gestureRecognizers[eventName]; } } - Evented.removeEventListener.apply(this, arguments); + handler && Evented.removeEventListener.apply(this, arguments); }, _setParent: function(view) { From 995ea8ca320bf35fd30a72eded7cd9d11324b296 Mon Sep 17 00:00:00 2001 From: Bryan Hughes Date: Fri, 1 Jun 2012 16:26:56 -0700 Subject: [PATCH 4/5] [TIMOB-8779] Code cleanup. --- mobileweb/titanium/Ti/_/UI/Element.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mobileweb/titanium/Ti/_/UI/Element.js b/mobileweb/titanium/Ti/_/UI/Element.js index cfa43458926..d653a83b6c2 100644 --- a/mobileweb/titanium/Ti/_/UI/Element.js +++ b/mobileweb/titanium/Ti/_/UI/Element.js @@ -173,30 +173,30 @@ define( }, addEventListener: function(name, handler) { - if (eventName in gestureMapping) { + if (name in gestureMapping) { var gestureRecognizers = this._gestureRecognizers, gestureRecognizer; - if (!(eventName in gestureRecognizers)) { - gestureRecognizers[eventName] = { + if (!(name in gestureRecognizers)) { + gestureRecognizers[name] = { count: 0, - recognizer: new (require("Ti/_/Gestures/" + gestureMapping[eventName])) + recognizer: new (require("Ti/_/Gestures/" + gestureMapping[name])) }; } - gestureRecognizers[eventName].count++; + gestureRecognizers[name].count++; } handler && Evented.addEventListener.apply(this, arguments); }, - removeEventListener: function(name, handler) { - if (eventName in gestureMapping) { + removeEventListener: function(name) { + if (name in gestureMapping) { var gestureRecognizers = this._gestureRecognizers; - if (eventName in gestureRecognizers && !(--gestureRecognizers[eventName].count)) { - delete gestureRecognizers[eventName]; + if (name in gestureRecognizers && !(--gestureRecognizers[name].count)) { + delete gestureRecognizers[name]; } } - handler && Evented.removeEventListener.apply(this, arguments); + Evented.removeEventListener.apply(this, arguments); }, _setParent: function(view) { From 5c508b906ad6b6b9ff9bc099e5d02b1b6bbf2d09 Mon Sep 17 00:00:00 2001 From: Bryan Hughes Date: Fri, 1 Jun 2012 16:43:03 -0700 Subject: [PATCH 5/5] [TIMOB-8779] Code cleanup. --- mobileweb/titanium/Ti/UI/TableViewRow.js | 2 +- mobileweb/titanium/Ti/UI/TableViewSection.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobileweb/titanium/Ti/UI/TableViewRow.js b/mobileweb/titanium/Ti/UI/TableViewRow.js index 5b22d3cf889..8dead94a020 100644 --- a/mobileweb/titanium/Ti/UI/TableViewRow.js +++ b/mobileweb/titanium/Ti/UI/TableViewRow.js @@ -39,7 +39,7 @@ define(["Ti/_/declare", "Ti/_/lang", "Ti/UI/View", "Ti/_/dom", "Ti/_/css", "Ti/_ })); // Force single tap to be processed. - this.addEventListener("singletap", function(){}); + this.addEventListener("singletap"); }, _defaultWidth: UI.INHERIT, diff --git a/mobileweb/titanium/Ti/UI/TableViewSection.js b/mobileweb/titanium/Ti/UI/TableViewSection.js index c55068e8168..5877687c76e 100644 --- a/mobileweb/titanium/Ti/UI/TableViewSection.js +++ b/mobileweb/titanium/Ti/UI/TableViewSection.js @@ -21,7 +21,7 @@ define(["Ti/_/declare", "Ti/_/lang", "Ti/_/UI/Widget", "Ti/_/style","Ti/UI/Mobil this.layout = UI._LAYOUT_CONSTRAINING_VERTICAL; // Force single tap to be processed. - this.addEventListener("singletap", function(){}); + this.addEventListener("singletap"); }, _defaultWidth: UI.INHERIT,