1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-22 13:30:55 +01:00
phorge-phorge/webroot/rsrc/js/application/differential
epriestley bf43d4cf2a Don't mutate DOM on touch-originated cursor events in Differential
Summary:
Fixes T10229. Broadly:

  - When the user hovers over a line number or inline comment, we update the yellow reticle to highlight the relevant lines. Specifically, this is in response to a `mouseover` event.
  - On touch devices, touches fire `mouseover` and if you mutate the DOM inside the event, the device aborts the touch.

To remedy this:

  - Distingiush between mouse-originated and touch-originated cursor events.
    - We do this, roughly, by setting a flag when we see "touchstart", and clearing it when we see the second copy of any unique cursor event.
    - This method is complex, but should be robust to any implementation differences between devices (for example, it will work no matter which order the events are fired in).
    - This method should also produce the correct results on weird devices that have both mouse-devices and touch-devices available for cursor input.
  - When we see a touch-originated `mouseover` or `mouseout`, don't mutate the DOM.
  - Put an extra DOM mutation into the `click` event to improve highlighting behavior on touch devices.

Test Plan:
  - In iOS Simulator (4s, iOS 9.2), clicked various inline actions ("Reply", "Hide", "Done", "Cancel", line numbers, etc). Got responses after a single touch.
  - Verified hover + click behavior on a desktop.
  - Logged and examined a bunch of events as a general sanity check.

Reviewers: chad

Reviewed By: chad

Subscribers: aljungberg

Maniphest Tasks: T10229

Differential Revision: https://secure.phabricator.com/D15136
2016-01-29 06:55:41 -08:00
..
behavior-add-reviewers-and-ccs.js Remove unused JavaScript variables. 2014-06-24 03:27:47 +10:00
behavior-comment-jump.js Various minor JSHint fixes. 2014-07-01 06:00:12 +10:00
behavior-comment-preview.js Maniphest + Differential - don't show transaction preview until user interacts with the form. 2015-05-20 13:54:22 -07:00
behavior-diff-radios.js Bring Javelin into Phabricator via git submodule, not copy-and-paste 2011-05-08 13:20:10 -07:00
behavior-dropdown-menus.js Change wording of "Show Entire File" to "Show All Context" 2016-01-13 11:09:01 -08:00
behavior-edit-inline-comments.js Don't mutate DOM on touch-originated cursor events in Differential 2016-01-29 06:55:41 -08:00
behavior-keyboard-nav.js diffusion / differential - better handle case where no comment selected 2014-11-12 12:26:22 -08:00
behavior-populate.js Merge behavior-show-more into behavior-populate 2015-03-05 14:03:15 -08:00
behavior-toggle-files.js Better JS for Differential File Collapsing Undo 2013-08-13 16:14:26 -07:00
behavior-user-select.js Enable selecting text in Differential shield and gap 2012-09-20 15:20:47 -07:00
ChangesetViewManager.js Change wording of "Show Entire File" to "Show All Context" 2016-01-13 11:09:01 -08:00
DifferentialInlineCommentEditor.js Show users what's wrong when they try to edit an inline with an editor already open 2015-09-10 11:36:38 -07:00