@@ -24,36 +24,46 @@ const modifiers = {
24
24
pagedown : 34
25
25
}
26
26
27
- function createEvent (
28
- type ,
29
- modifier ,
30
- { eventInterface, bubbles, cancelable } ,
31
- options
32
- ) {
27
+ function getOptions ( eventParams ) {
28
+ const { modifier, meta, options } = eventParams
29
+ const keyCode = modifiers [ modifier ] || options . keyCode || options . code
30
+
31
+ return {
32
+ ...options , // What the user passed in as the second argument to #trigger
33
+
34
+ bubbles : meta . bubbles ,
35
+ meta : meta . cancelable ,
36
+
37
+ // Any derived options should go here
38
+ keyCode,
39
+ code : keyCode
40
+ }
41
+ }
42
+
43
+ function createEvent ( eventParams ) {
44
+ const { eventType, meta = { } } = eventParams
45
+
33
46
const SupportedEventInterface =
34
- typeof window [ eventInterface ] === 'function'
35
- ? window [ eventInterface ]
47
+ typeof window [ meta . eventInterface ] === 'function'
48
+ ? window [ meta . eventInterface ]
36
49
: window . Event
37
50
38
- const event = new SupportedEventInterface ( type , {
51
+ const event = new SupportedEventInterface (
52
+ eventType ,
39
53
// event properties can only be added when the event is instantiated
40
54
// custom properties must be added after the event has been instantiated
41
- ...options ,
42
- bubbles,
43
- cancelable,
44
- keyCode : modifiers [ modifier ]
45
- } )
55
+ getOptions ( eventParams )
56
+ )
46
57
47
58
return event
48
59
}
49
60
50
- function createOldEvent (
51
- type ,
52
- modifier ,
53
- { eventInterface, bubbles, cancelable }
54
- ) {
61
+ function createOldEvent ( eventParams ) {
62
+ const { eventType, modifier, meta } = eventParams
63
+ const { bubbles, cancelable } = meta
64
+
55
65
const event = document . createEvent ( 'Event' )
56
- event . initEvent ( type , bubbles , cancelable )
66
+ event . initEvent ( eventType , bubbles , cancelable )
57
67
event . keyCode = modifiers [ modifier ]
58
68
return event
59
69
}
@@ -62,11 +72,13 @@ export default function createDOMEvent(type, options) {
62
72
const [ eventType , modifier ] = type . split ( '.' )
63
73
const meta = eventTypes [ eventType ] || defaultEventType
64
74
75
+ const eventParams = { eventType, modifier, meta, options }
76
+
65
77
// Fallback for IE10,11 - https://stackoverflow.com/questions/26596123
66
78
const event =
67
79
typeof window . Event === 'function'
68
- ? createEvent ( eventType , modifier , meta , options )
69
- : createOldEvent ( eventType , modifier , meta )
80
+ ? createEvent ( eventParams )
81
+ : createOldEvent ( eventParams )
70
82
71
83
const eventPrototype = Object . getPrototypeOf ( event )
72
84
Object . keys ( options || { } ) . forEach ( key => {
0 commit comments