whatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinbox
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
5.5 KiB
208 lines
5.5 KiB
Ext.testHelper = { |
|
defaultTarget: document.createElement('div'), |
|
|
|
createTouchList: function(touches) { |
|
var touchList = [], |
|
i, ln, touch; |
|
|
|
for (i = 0, ln = touches.length; i < ln; i++) { |
|
touch = touches[i]; |
|
|
|
touchList.push(this.createTouch(touch)); |
|
} |
|
|
|
return touchList; |
|
}, |
|
|
|
createTouch: function(touch) { |
|
return Ext.merge({ |
|
target: this.defaultTarget, |
|
timeStamp: Ext.Date.now(), |
|
time: Ext.Date.now(), |
|
pageX: 0, |
|
pageY: 0, |
|
identifier: 0, |
|
point: new Ext.util.Point(touch.pageX || 0, touch.pageY || 0) |
|
}, touch || {}); |
|
}, |
|
|
|
createTouchEvent: function(event) { |
|
var touchEvent = Ext.merge({ |
|
type: 'touchstart', |
|
target: this.defaultTarget, |
|
timeStamp: Ext.Date.now(), |
|
time: Ext.Date.now(), |
|
touches: [], |
|
changedTouches: [], |
|
targetTouches: [], |
|
pageX: 0, |
|
pageY: 0 |
|
}, event || {}); |
|
|
|
touchEvent.touches = this.createTouchList(touchEvent.touches); |
|
touchEvent.changedTouches = this.createTouchList(touchEvent.changedTouches); |
|
touchEvent.targetTouches = this.createTouchList(touchEvent.targetTouches); |
|
|
|
return touchEvent; |
|
}, |
|
|
|
createTouchEvents: function(events) { |
|
var ret = [], |
|
i, ln, event; |
|
|
|
for (i = 0, ln = events.length; i < ln; i++) { |
|
event = events[i]; |
|
|
|
ret.push(this.createTouchEvent(event)); |
|
} |
|
|
|
return ret; |
|
}, |
|
|
|
recognize: function(recognizer, events) { |
|
var currentTouchesCount = 0, |
|
i, ln, e; |
|
|
|
events = this.createTouchEvents(events); |
|
|
|
mainLoop: for (i = 0, ln = events.length; i < ln; i++) { |
|
e = events[i]; |
|
|
|
switch (e.type) { |
|
case 'touchstart': |
|
var changedTouchesCount = e.changedTouches.length, |
|
isStarted = currentTouchesCount > 0; |
|
|
|
currentTouchesCount += changedTouchesCount; |
|
|
|
if (!isStarted) { |
|
if (recognizer.onStart(e) === false) { |
|
break mainLoop; |
|
} |
|
} |
|
|
|
if (recognizer.onTouchStart(e) === false) { |
|
break mainLoop; |
|
} |
|
|
|
break; |
|
|
|
case 'touchmove': |
|
if (recognizer.onTouchMove(e) === false) { |
|
break mainLoop; |
|
} |
|
break; |
|
|
|
case 'touchend': |
|
changedTouchesCount = e.changedTouches.length; |
|
|
|
currentTouchesCount -= changedTouchesCount; |
|
|
|
if (recognizer.onTouchEnd(e) === false) { |
|
break mainLoop; |
|
} |
|
|
|
if (this.currentTouchesCount === 0) { |
|
if (recognizer.onEnd(e) === false) { |
|
break mainLoop; |
|
} |
|
} |
|
break; |
|
} |
|
} |
|
|
|
return events; |
|
}, |
|
|
|
events: (Ext.supports.PointerEvents) ? |
|
{ |
|
start: 'pointerdown', |
|
move: 'pointermove', |
|
end: 'pointerup', |
|
cancel: 'pointercancel' |
|
} |
|
: (Ext.supports.MSPointerEvents) ? |
|
{ |
|
start: 'MSPointerDown', |
|
move: 'MSPointerMove', |
|
end: 'MSPointerUp', |
|
cancel: 'MSPointerCancel' |
|
} |
|
: (Ext.supports.TouchEvents) ? |
|
{ |
|
start: 'touchstart', |
|
move: 'touchmove', |
|
end: 'touchend', |
|
cancel: 'touchcancel' |
|
} |
|
: |
|
{ |
|
start: 'mousedown', |
|
move: 'mousemove', |
|
end: 'mouseup' |
|
}, |
|
|
|
fireEvent: function(type, target, cfg) { |
|
var eventType = this.events[type], |
|
activeTouches = {}, |
|
touch, id, touches; |
|
|
|
if (Ext.supports.PointerEvents || Ext.supports.MSPointerEvents) { |
|
jasmine.firePointerEvent( |
|
target, |
|
eventType, |
|
cfg.id, |
|
cfg.x, |
|
cfg.y, |
|
cfg.button || 0 |
|
); |
|
} else if (Ext.supports.TouchEvents) { |
|
touch = activeTouches[cfg.id] = { |
|
identifier: cfg.id, |
|
pageX: cfg.x, |
|
pageY: cfg.y |
|
}; |
|
|
|
if (eventType === 'touchend' || eventType === 'touchcancel') { |
|
delete activeTouches[cfg.id]; |
|
} |
|
|
|
touches = []; |
|
|
|
for (id in activeTouches) { |
|
touches.push(activeTouches[id]); |
|
} |
|
|
|
jasmine.fireTouchEvent( |
|
target, |
|
eventType, |
|
touches, |
|
[touch] |
|
); |
|
} else { |
|
jasmine.fireMouseEvent( |
|
target, |
|
eventType, |
|
cfg.x, |
|
cfg.y, |
|
cfg.button ? cfg.button : 0 |
|
); |
|
} |
|
}, |
|
|
|
touchStart: function(target, cfg) { |
|
this.fireEvent('start', target, cfg); |
|
}, |
|
|
|
touchMove: function(target, cfg) { |
|
this.fireEvent('move', target, cfg); |
|
}, |
|
|
|
touchEnd: function(target, cfg) { |
|
this.fireEvent('end', target, cfg); |
|
}, |
|
|
|
touchCancel: function(target, cfg) { |
|
this.fireEvent('cancel', target, cfg); |
|
} |
|
}; |