1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-11 07:11:04 +01:00
phorge-phorge/webroot/rsrc/js/application
epriestley 6b5204dca9 Add support for device swipe events
Summary:
Ref T2700. Allow JS to listen for swipes on devices.

There are a bunch of tricky cases here and I probably didn't get them all totally right, but this interaction broadly looks like this:

  - We implement gesture recognition for the mouse in device modes (narrow browser), and for touch events from an actual device.
  - The sigil `touchable` indicates that a node wants to react to touch events.
  - When the user touches a `touchable` node, we start listening for moves. They might be tapping/clicking (in which case we don't care), but they might also be gesturing.
  - Once the user moves their finger/pointer far enough away from the tap origin, we recognize it as a gesture. I hardcoded this at 20px; I wasn't able to find any "official" Apple value, but 20px seems like a common default.
  - At this point, we look at where their finger has moved.
    - If they moved it mostly up/down, we interpret the gesture as "scroll" and just stop listening. The device does its own thing.
    - However, if they moved it mostly left/right, we interpret it as a "swipe". We start killing the moves so the device doesn't scroll.
  - Once we've recognized that a gesture is underway, we send a "gesture.swipe.start" event and then "gesture.swipe.move" events for every move.
  - When the user ends the gesture, we send "gesture.swipe.end".
  - If the user cancels the gesture (currently, only by tapping with a second finger), we send "gesture.swipe.cancel".
  - Gesture events have raw position data and some convenience fields.

Test Plan:
Wrote UI example and used it from the Desktop, iPhone simulator, and a real iphone.

  - The code always seems to get "scroll" vs "swipe" correct (i.e., consistent with my intentions).
  - The threshold feels pretty good to me.
  - Tapping with a second finger cancels the action.

Reviewers: chad, btrahan

Reviewed By: chad

CC: aran

Maniphest Tasks: T2700

Differential Revision: https://secure.phabricator.com/D5308
2013-03-09 13:53:15 -08:00
..
aphlict Add loading state to notification menu. 2013-01-28 17:35:17 -08:00
conpherence Conpherence - Make the files widget more useful and ajaxify some more stuff 2013-03-08 10:40:06 -08:00
core Add support for device swipe events 2013-03-09 13:53:15 -08:00
countdown Make countdowns (internally) embeddable 2012-08-14 19:19:23 -07:00
differential Add a preference to completely disable the file tree 2013-02-04 17:00:27 -08:00
diffusion Load blame in Diffusion by AJAX 2013-03-06 07:44:45 -08:00
herald Clean up Login, Responsive Forms 2013-01-19 14:30:26 -08:00
maniphest Allow commits to be associated with projects and associated goodies 2012-08-08 10:03:41 -07:00
owners Allow excluding paths from package 2012-12-07 16:33:16 -08:00
phame Modernize blog UI 2012-10-15 14:50:12 -07:00
pholio Allow speical keys to be bound to keystrokes 2013-03-08 21:19:24 -08:00
phortune For discussion -- Stripe integration 2012-04-04 16:09:29 -07:00
phriction Add a document preview to Phriction 2011-07-16 18:48:27 -07:00
ponder Simplify upvote/downvote implementation 2012-09-30 20:12:35 -07:00
projects Allow commits to be associated with projects and associated goodies 2012-08-08 10:03:41 -07:00
repository Allow double click and drag in crossreference 2013-02-21 09:56:27 -08:00
transactions Make control + enter submit forms if a textarea is focused 2013-01-28 14:11:32 -08:00
uiexample Add support for device swipe events 2013-03-09 13:53:15 -08:00