aboutsummaryrefslogtreecommitdiff
path: root/node_modules/montage/ui/scrollview.reel/scrollview.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/montage/ui/scrollview.reel/scrollview.js')
-rwxr-xr-xnode_modules/montage/ui/scrollview.reel/scrollview.js43
1 files changed, 33 insertions, 10 deletions
diff --git a/node_modules/montage/ui/scrollview.reel/scrollview.js b/node_modules/montage/ui/scrollview.reel/scrollview.js
index 389b1858..3ac195e8 100755
--- a/node_modules/montage/ui/scrollview.reel/scrollview.js
+++ b/node_modules/montage/ui/scrollview.reel/scrollview.js
@@ -20,6 +20,19 @@ var Scrollview = exports.Scrollview = Montage.create(Component, /** @lends modul
20 enumerable: false, 20 enumerable: false,
21 value: false 21 value: false
22 }, 22 },
23
24 /**
25 These elements perform some native action when clicked/touched and so we
26 should not preventDefault when a mousedown/touchstart happens on them.
27 @private
28 */
29 _NATIVE_ELEMENTS: {
30 value: ["A", "IFRAME", "EMBED", "OBJECT", "VIDEO", "AUDIO", "CANVAS",
31 "LABEL", "INPUT", "BUTTON", "SELECT", "TEXTAREA", "KEYGEN",
32 "DETAILS", "COMMAND"
33 ]
34 },
35
23/** 36/**
24 Description TODO 37 Description TODO
25 @private 38 @private
@@ -356,6 +369,19 @@ var Scrollview = exports.Scrollview = Montage.create(Component, /** @lends modul
356 enumerable: false, 369 enumerable: false,
357 value: null 370 value: null
358 }, 371 },
372
373 /**
374 Returns if we should preventDefault on a touchstart/mousedown event.
375 @param {Event} The event
376 @returns {Boolean} Whether preventDefault should be called
377 @private
378 */
379 _shouldPreventDefault: {
380 value: function(event) {
381 return !!event.target.tagName && Scrollview._NATIVE_ELEMENTS.indexOf(event.target.tagName) === -1 && !event.target.isContentEditable;
382 }
383 },
384
359/** 385/**
360 Description TODO 386 Description TODO
361 @function 387 @function
@@ -364,13 +390,7 @@ var Scrollview = exports.Scrollview = Montage.create(Component, /** @lends modul
364 captureMousedown: { 390 captureMousedown: {
365 enumerable: false, 391 enumerable: false,
366 value: function (event) { 392 value: function (event) {
367 393 if (this._shouldPreventDefault(event)) {
368 // TODO this is a bit of a temporary workaround to ensure that we allow input fields
369 //to receive the mousedown that gives them focus and sets the cursor a the mousedown coordinates
370 if (!(event.target.tagName &&
371 ("INPUT" === event.target.tagName || "SELECT" === event.target.tagName || "TEXTAREA" === event.target.tagName)) &&
372 !event.target.isContentEditable) {
373
374 event.preventDefault(); 394 event.preventDefault();
375 } 395 }
376 396
@@ -458,8 +478,9 @@ var Scrollview = exports.Scrollview = Montage.create(Component, /** @lends modul
458 captureTouchstart: { 478 captureTouchstart: {
459 enumerable: false, 479 enumerable: false,
460 value: function (event) { 480 value: function (event) {
461 481 if (this._shouldPreventDefault(event)) {
462 event.preventDefault(); 482 event.preventDefault();
483 }
463 484
464 // If already scrolling the scrollview, ignore any new touchstarts 485 // If already scrolling the scrollview, ignore any new touchstarts
465 if (this._observedPointer !== null && this.eventManager.isPointerClaimedByComponent(this._observedPointer, this)) { 486 if (this._observedPointer !== null && this.eventManager.isPointerClaimedByComponent(this._observedPointer, this)) {
@@ -482,7 +503,9 @@ var Scrollview = exports.Scrollview = Montage.create(Component, /** @lends modul
482 if (!this.eventManager.componentClaimingPointer(this._observedPointer)) { 503 if (!this.eventManager.componentClaimingPointer(this._observedPointer)) {
483 504
484 if (event.targetTouches.length === 1) { 505 if (event.targetTouches.length === 1) {
485 event.preventDefault(); 506 if (this._shouldPreventDefault(event)) {
507 event.preventDefault();
508 }
486 509
487 this.eventManager.claimPointer(this._observedPointer, this); 510 this.eventManager.claimPointer(this._observedPointer, this);
488 this._start(event.targetTouches[0].clientX, event.targetTouches[0].clientY); 511 this._start(event.targetTouches[0].clientX, event.targetTouches[0].clientY);