@@ -20,10 +20,11 @@ export interface ModifierKeys {
20
20
*/
21
21
export function createMouseEvent ( type : string , x = 0 , y = 0 , button = 0 ) {
22
22
const event = document . createEvent ( 'MouseEvent' ) ;
23
+ const originalPreventDefault = event . preventDefault ;
23
24
24
25
event . initMouseEvent ( type ,
25
26
true , /* canBubble */
26
- false , /* cancelable */
27
+ true , /* cancelable */
27
28
window , /* view */
28
29
0 , /* detail */
29
30
x , /* screenX */
@@ -41,6 +42,12 @@ export function createMouseEvent(type: string, x = 0, y = 0, button = 0) {
41
42
// defaults it to 0 which looks like a fake event.
42
43
Object . defineProperty ( event , 'buttons' , { get : ( ) => 1 } ) ;
43
44
45
+ // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.
46
+ event . preventDefault = function ( ) {
47
+ Object . defineProperty ( event , 'defaultPrevented' , { get : ( ) => true } ) ;
48
+ return originalPreventDefault . apply ( this , arguments ) ;
49
+ } ;
50
+
44
51
return event ;
45
52
}
46
53
@@ -73,8 +80,8 @@ export function createTouchEvent(type: string, pageX = 0, pageY = 0) {
73
80
*/
74
81
export function createKeyboardEvent ( type : string , keyCode : number = 0 , key : string = '' ,
75
82
target ?: Element , modifiers : ModifierKeys = { } ) {
76
- let event = document . createEvent ( 'KeyboardEvent' ) as any ;
77
- let originalPreventDefault = event . preventDefault ;
83
+ const event = document . createEvent ( 'KeyboardEvent' ) as any ;
84
+ const originalPreventDefault = event . preventDefault ;
78
85
79
86
// Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.
80
87
if ( event . initKeyEvent ) {
@@ -85,7 +92,15 @@ export function createKeyboardEvent(type: string, keyCode: number = 0, key: stri
85
92
// See https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent
86
93
const modifiersStr = ( modifiers . control ? 'Control ' : '' + modifiers . alt ? 'Alt ' : '' +
87
94
modifiers . shift ? 'Shift ' : '' + modifiers . meta ? 'Meta' : '' ) . trim ( ) ;
88
- event . initKeyboardEvent ( type , true , true , window , 0 , key , 0 , modifiersStr , false ) ;
95
+ event . initKeyboardEvent ( type ,
96
+ true , /* canBubble */
97
+ true , /* cancelable */
98
+ window , /* view */
99
+ 0 , /* char */
100
+ key , /* key */
101
+ 0 , /* location */
102
+ modifiersStr , /* modifiersList */
103
+ false /* repeat */ ) ;
89
104
}
90
105
91
106
// Webkit Browsers don't set the keyCode when calling the init function.
0 commit comments