@@ -24,36 +24,46 @@ const modifiers = {
2424 pagedown : 34
2525}
2626
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+
3346 const SupportedEventInterface =
34- typeof window [ eventInterface ] === 'function'
35- ? window [ eventInterface ]
47+ typeof window [ meta . eventInterface ] === 'function'
48+ ? window [ meta . eventInterface ]
3649 : window . Event
3750
38- const event = new SupportedEventInterface ( type , {
51+ const event = new SupportedEventInterface (
52+ eventType ,
3953 // event properties can only be added when the event is instantiated
4054 // 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+ )
4657
4758 return event
4859}
4960
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+
5565 const event = document . createEvent ( 'Event' )
56- event . initEvent ( type , bubbles , cancelable )
66+ event . initEvent ( eventType , bubbles , cancelable )
5767 event . keyCode = modifiers [ modifier ]
5868 return event
5969}
@@ -62,11 +72,13 @@ export default function createDOMEvent(type, options) {
6272 const [ eventType , modifier ] = type . split ( '.' )
6373 const meta = eventTypes [ eventType ] || defaultEventType
6474
75+ const eventParams = { eventType, modifier, meta, options }
76+
6577 // Fallback for IE10,11 - https://stackoverflow.com/questions/26596123
6678 const event =
6779 typeof window . Event === 'function'
68- ? createEvent ( eventType , modifier , meta , options )
69- : createOldEvent ( eventType , modifier , meta )
80+ ? createEvent ( eventParams )
81+ : createOldEvent ( eventParams )
7082
7183 const eventPrototype = Object . getPrototypeOf ( event )
7284 Object . keys ( options || { } ) . forEach ( key => {
0 commit comments