288 lines
13 KiB
JavaScript
288 lines
13 KiB
JavaScript
define([
|
|
'Core/defaultValue',
|
|
'Core/FeatureDetection'
|
|
], function(
|
|
defaultValue,
|
|
FeatureDetection) {
|
|
'use strict';
|
|
|
|
function createMouseEvent(type, options) {
|
|
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
var canBubble = defaultValue(options.canBubble, true);
|
|
var cancelable = defaultValue(options.cancelable, true);
|
|
var view = defaultValue(options.view, window);
|
|
var detail = defaultValue(options.detail, 0);
|
|
var screenX = defaultValue(options.screenX, 0);
|
|
var screenY = defaultValue(options.screenY, 0);
|
|
var clientX = defaultValue(options.clientX, 0);
|
|
var clientY = defaultValue(options.clientY, 0);
|
|
var ctrlKey = defaultValue(options.ctrlKey, false);
|
|
var altKey = defaultValue(options.altKey, false);
|
|
var shiftKey = defaultValue(options.shiftKey, false);
|
|
var metaKey = defaultValue(options.metaKey, false);
|
|
var button = defaultValue(options.button, 0);
|
|
var relatedTarget = defaultValue(options.relatedTarget, null);
|
|
|
|
var event = document.createEvent('MouseEvent');
|
|
event.initMouseEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
|
|
return event;
|
|
}
|
|
|
|
function createModifiersList(ctrlKey, altKey, shiftKey, metaKey) {
|
|
var modifiers = [];
|
|
if (ctrlKey) {
|
|
modifiers.push('Control');
|
|
}
|
|
if (altKey) {
|
|
modifiers.push('Alt');
|
|
}
|
|
if (shiftKey) {
|
|
modifiers.push('Shift');
|
|
}
|
|
if (metaKey) {
|
|
modifiers.push('Meta');
|
|
}
|
|
return modifiers.join(' ');
|
|
}
|
|
|
|
// MouseWheelEvent is legacy
|
|
function createMouseWheelEvent(type, options) {
|
|
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
var canBubble = defaultValue(options.canBubble, true);
|
|
var cancelable = defaultValue(options.cancelable, true);
|
|
var view = defaultValue(options.view, window);
|
|
var detail = defaultValue(options.detail, 0);
|
|
var screenX = defaultValue(options.screenX, 0);
|
|
var screenY = defaultValue(options.screenY, 0);
|
|
var clientX = defaultValue(options.clientX, 0);
|
|
var clientY = defaultValue(options.clientY, 0);
|
|
var button = defaultValue(options.button, 0);
|
|
var relatedTarget = defaultValue(options.relatedTarget, null);
|
|
var ctrlKey = defaultValue(options.ctrlKey, false);
|
|
var altKey = defaultValue(options.altKey, false);
|
|
var shiftKey = defaultValue(options.shiftKey, false);
|
|
var metaKey = defaultValue(options.metaKey, false);
|
|
var wheelDelta = defaultValue(options.wheelDelta, 0);
|
|
|
|
var event = document.createEvent('MouseWheelEvent');
|
|
var modifiersList = createModifiersList(ctrlKey, altKey, shiftKey, metaKey);
|
|
event.initMouseWheelEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, wheelDelta);
|
|
return event;
|
|
}
|
|
|
|
function createWheelEvent(type, options) {
|
|
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
var canBubble = defaultValue(options.canBubble, true);
|
|
var cancelable = defaultValue(options.cancelable, true);
|
|
var view = defaultValue(options.view, window);
|
|
var detail = defaultValue(options.detail, 0);
|
|
var screenX = defaultValue(options.screenX, 0);
|
|
var screenY = defaultValue(options.screenY, 0);
|
|
var clientX = defaultValue(options.clientX, 0);
|
|
var clientY = defaultValue(options.clientY, 0);
|
|
var button = defaultValue(options.button, 0);
|
|
var relatedTarget = defaultValue(options.relatedTarget, null);
|
|
var ctrlKey = defaultValue(options.ctrlKey, false);
|
|
var altKey = defaultValue(options.altKey, false);
|
|
var shiftKey = defaultValue(options.shiftKey, false);
|
|
var metaKey = defaultValue(options.metaKey, false);
|
|
var deltaX = defaultValue(options.deltaX, 0);
|
|
var deltaY = defaultValue(options.deltaY, 0);
|
|
var deltaZ = defaultValue(options.deltaZ, 0);
|
|
var deltaMode = defaultValue(options.deltaMode, 0);
|
|
|
|
try {
|
|
/*global WheelEvent*/
|
|
return new WheelEvent(type, {
|
|
view : view,
|
|
detail : detail,
|
|
screenX : screenX,
|
|
screenY : screenY,
|
|
clientX : clientX,
|
|
clientY : clientY,
|
|
button : button,
|
|
relatedTarget : relatedTarget,
|
|
ctrlKey : ctrlKey,
|
|
altKey : altKey,
|
|
shiftKey : shiftKey,
|
|
metaKey : metaKey,
|
|
deltaX : deltaX,
|
|
deltaY : deltaY,
|
|
deltaZ : deltaZ,
|
|
deltaMode : deltaMode
|
|
});
|
|
} catch (e) {
|
|
var event = document.createEvent('WheelEvent');
|
|
var modifiersList = createModifiersList(ctrlKey, altKey, shiftKey, metaKey);
|
|
event.initWheelEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode);
|
|
return event;
|
|
}
|
|
}
|
|
|
|
function createTouchEvent(type, options) {
|
|
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
var canBubble = defaultValue(options.canBubble, true);
|
|
var cancelable = defaultValue(options.cancelable, true);
|
|
var view = defaultValue(options.view, window);
|
|
var detail = defaultValue(options.detail, 0);
|
|
|
|
var event = document.createEvent('UIEvent');
|
|
event.initUIEvent(type, canBubble, cancelable, view, detail);
|
|
|
|
event.touches = defaultValue(options.touches, []);
|
|
event.targetTouches = defaultValue(options.targetTouches, []);
|
|
event.changedTouches = defaultValue(options.changedTouches, []);
|
|
|
|
return event;
|
|
}
|
|
|
|
function createPointerEvent(type, options) {
|
|
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
var event;
|
|
|
|
if (FeatureDetection.isInternetExplorer()) {
|
|
var canBubble = defaultValue(options.canBubble, true);
|
|
var cancelable = defaultValue(options.cancelable, true);
|
|
var view = defaultValue(options.view, window);
|
|
var detail = defaultValue(options.detail, 0);
|
|
var screenX = defaultValue(options.screenX, 0);
|
|
var screenY = defaultValue(options.screenY, 0);
|
|
var clientX = defaultValue(options.clientX, 0);
|
|
var clientY = defaultValue(options.clientY, 0);
|
|
var ctrlKey = defaultValue(options.ctrlKey, false);
|
|
var altKey = defaultValue(options.altKey, false);
|
|
var shiftKey = defaultValue(options.shiftKey, false);
|
|
var metaKey = defaultValue(options.metaKey, false);
|
|
var button = defaultValue(options.button, 0);
|
|
var relatedTarget = defaultValue(options.relatedTarget, null);
|
|
var offsetX = defaultValue(options.offsetX, 0);
|
|
var offsetY = defaultValue(options.offsetY, 0);
|
|
var width = defaultValue(options.width, 0);
|
|
var height = defaultValue(options.height, 0);
|
|
var pressure = defaultValue(options.pressure, 0);
|
|
var rotation = defaultValue(options.rotation, 0);
|
|
var tiltX = defaultValue(options.tiltX, 0);
|
|
var tiltY = defaultValue(options.tiltY, 0);
|
|
var pointerId = defaultValue(options.pointerId, 1);
|
|
var pointerType = defaultValue(options.pointerType, 0);
|
|
var hwTimestamp = defaultValue(options.hwTimestamp, 0);
|
|
var isPrimary = defaultValue(options.isPrimary, 0);
|
|
|
|
event = document.createEvent('PointerEvent');
|
|
event.initPointerEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY,
|
|
ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, offsetX, offsetY, width, height,
|
|
pressure, rotation, tiltX, tiltY, pointerId, pointerType, hwTimestamp, isPrimary);
|
|
} else {
|
|
event = new window.PointerEvent(type, {
|
|
canBubble : defaultValue(options.canBubble, true),
|
|
cancelable : defaultValue(options.cancelable, true),
|
|
view : defaultValue(options.view, window),
|
|
detail : defaultValue(options.detail, 0),
|
|
screenX : defaultValue(options.screenX, 0),
|
|
screenY : defaultValue(options.screenY, 0),
|
|
clientX : defaultValue(options.clientX, 0),
|
|
clientY : defaultValue(options.clientY, 0),
|
|
ctrlKey : defaultValue(options.ctrlKey, false),
|
|
altKey : defaultValue(options.altKey, false),
|
|
shiftKey : defaultValue(options.shiftKey, false),
|
|
metaKey : defaultValue(options.metaKey, false),
|
|
button : defaultValue(options.button, 0),
|
|
relatedTarget : defaultValue(options.relatedTarget, null),
|
|
offsetX : defaultValue(options.offsetX, 0),
|
|
offsetY : defaultValue(options.offsetY, 0),
|
|
width : defaultValue(options.width, 0),
|
|
height : defaultValue(options.height, 0),
|
|
pressure : defaultValue(options.pressure, 0),
|
|
rotation : defaultValue(options.rotation, 0),
|
|
tiltX : defaultValue(options.tiltX, 0),
|
|
tiltY : defaultValue(options.tiltY, 0),
|
|
pointerId : defaultValue(options.pointerId, 1),
|
|
pointerType : defaultValue(options.pointerType, 0),
|
|
hwTimestamp : defaultValue(options.hwTimestamp, 0),
|
|
isPrimary : defaultValue(options.isPrimary, 0)
|
|
});
|
|
}
|
|
return event;
|
|
}
|
|
|
|
function createDeviceOrientationEvent(type, options) {
|
|
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
|
|
var canBubble = defaultValue(options.canBubble, true);
|
|
var cancelable = defaultValue(options.cancelable, true);
|
|
var alpha = defaultValue(options.alpha, 0.0);
|
|
var beta = defaultValue(options.beta, 0.0);
|
|
var gamma = defaultValue(options.gamma, 0.0);
|
|
var absolute = defaultValue(options.absolute, false);
|
|
|
|
var event;
|
|
event = document.createEvent('DeviceOrientationEvent');
|
|
if (typeof event.initDeviceOrientationEvent === 'function') {
|
|
event.initDeviceOrientationEvent(type, canBubble, cancelable, alpha, beta, gamma, absolute);
|
|
} else {
|
|
event = new DeviceOrientationEvent('deviceorientation', {
|
|
alpha : alpha,
|
|
beta : beta,
|
|
gamma : gamma,
|
|
absolute : absolute
|
|
});
|
|
}
|
|
return event;
|
|
}
|
|
|
|
var DomEventSimulator = {
|
|
fireMouseDown : function(element, options) {
|
|
element.dispatchEvent(createMouseEvent('mousedown', options));
|
|
},
|
|
fireMouseUp : function(element, options) {
|
|
element.dispatchEvent(createMouseEvent('mouseup', options));
|
|
},
|
|
fireMouseMove : function(element, options) {
|
|
element.dispatchEvent(createMouseEvent('mousemove', options));
|
|
},
|
|
fireClick : function(element, options) {
|
|
element.dispatchEvent(createMouseEvent('click', options));
|
|
},
|
|
fireDoubleClick : function(element, options) {
|
|
element.dispatchEvent(createMouseEvent('dblclick', options));
|
|
},
|
|
fireMouseWheel : function(element, options) {
|
|
element.dispatchEvent(createMouseWheelEvent('mousewheel', options));
|
|
},
|
|
fireWheel : function(element, options) {
|
|
element.dispatchEvent(createWheelEvent('wheel', options));
|
|
},
|
|
fireTouchStart : function(element, options) {
|
|
element.dispatchEvent(createTouchEvent('touchstart', options));
|
|
},
|
|
fireTouchMove : function(element, options) {
|
|
element.dispatchEvent(createTouchEvent('touchmove', options));
|
|
},
|
|
fireTouchEnd : function(element, options) {
|
|
element.dispatchEvent(createTouchEvent('touchend', options));
|
|
},
|
|
fireTouchCancel : function(element, options) {
|
|
element.dispatchEvent(createTouchEvent('touchcancel', options));
|
|
},
|
|
firePointerDown : function(element, options) {
|
|
element.dispatchEvent(createPointerEvent('pointerdown', options));
|
|
},
|
|
firePointerUp : function(element, options) {
|
|
element.dispatchEvent(createPointerEvent('pointerup', options));
|
|
},
|
|
firePointerMove : function(element, options) {
|
|
element.dispatchEvent(createPointerEvent('pointermove', options));
|
|
},
|
|
firePointerCancel : function(element, options) {
|
|
element.dispatchEvent(createPointerEvent('pointercancel', options));
|
|
},
|
|
fireDeviceOrientation : function(element, options) {
|
|
element.dispatchEvent(createDeviceOrientationEvent('deviceorientation', options));
|
|
},
|
|
fireMockEvent : function(eventHandler, event) {
|
|
eventHandler.call(window, event);
|
|
}
|
|
};
|
|
|
|
return DomEventSimulator;
|
|
});
|