{"version":3,"sources":["../ts/modules/event-simulator.ts"],"names":["eventProps","modifierProps","uiEventProps","concat","mouseEventProps","keyboardEventProps","focusEventProps","defaultProps","bubbles","cancelable","view","window","create","eventName","props","eventType","let","ev","ctor","Object","assign","ex","document","createEvent","event","init","fn","args","apply","call","i","hasOwnProperty","prop","isPropagationStopped","stopPropagation","isImmediatePropagationStopped","stopImmediatePropagation","dispatch","element","Error","dispatchEvent","target","createAndDispatch","createAndDispatchMulti","elements","arr","arrayLike","array_1","isArrayLike","$","get","length","map","e","el","events","uiEvents","focusEvents","keyboardEvents","mouseEvents","getProps","o","reduce","rv","propName","v","clone","type","cloneEventImpl","exports","cloneMouseEvent","cloneFocusEvent","cloneKeyboardEvent","cloneUiEvent","cloneEvent","contextmenu","click","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseout","mouseup","focus","blur","focusin","focusout","keydown","keyup","keypress","resize","scroll","abort","error","load","unload","select","submit"],"mappings":"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","file":"event-simulator.js","sourcesContent":["import { isArrayLike } from 'utilities/array';\r\n\r\nexport interface EventInit {\r\n\tbubbles?: boolean;\r\n\tcancelable?: boolean;\r\n}\r\n\r\nexport interface EventModifierInit {\r\n\tctrlKey?: boolean;\r\n\tshiftKey?: boolean;\r\n\taltKey?: boolean;\r\n\tmetaKey?: boolean;\r\n}\r\n\r\nexport interface UIEventInit extends EventInit {\r\n\tdetail?: number;\r\n\tview?: Window;\r\n}\r\n\r\nexport interface MouseEventInit extends UIEventInit, EventModifierInit {\r\n\tscreenX?: number;\r\n\tscreenY?: number;\r\n\tclientX?: number;\r\n\tclientY?: number;\r\n\tbutton?: number;\r\n\tbuttons?: number;\r\n\trelatedTarget?: EventTarget;\r\n\tregion?: string;\r\n}\r\n\r\nexport interface KeyboardEventInit extends EventModifierInit {\r\n\tkey?; string;\r\n\tkeyCode?: number;\r\n\tcode?: string;\r\n\tcharCode?: number;\r\n\twhich?: number;\r\n\tlocation?: number;\r\n\trepeat?: boolean;\r\n\tisComposing?: boolean;\r\n}\r\n\r\nexport interface FocusEventInit extends UIEventInit {\r\n\trelatedTarget?: EventTarget;\r\n}\r\n\r\nconst eventProps = [ 'bubbles', 'cancelable', 'data', 'timeStamp', 'namespace' ],\r\n\tmodifierProps = [ 'ctrlKey', 'shiftKey', 'altKey', 'metaKey' ],\r\n\tuiEventProps = eventProps.concat( [ 'details', 'view' ] ),\r\n\tmouseEventProps = uiEventProps.concat( modifierProps ).concat( [ 'screenX', 'screenY', 'clientX', 'clientY', 'button', 'buttons', 'relatedTarget', 'region' ] ),\r\n\tkeyboardEventProps = modifierProps.concat( [ 'key', 'keyCode', 'code', 'charCode', 'which', 'location', 'repeat', 'isComposing' ] ),\r\n\tfocusEventProps = uiEventProps.concat( [ 'relatedTarget' ] ),\r\n\tdefaultProps = { bubbles: true, cancelable: true, view: window };\r\n\r\nexport function create( eventName: string, props: any = {}, eventType = 'Event' ): Event {\r\n\tlet ev: Event = null;\r\n\tconst ctor = ( typeof eventType === 'function' ) ? eventType : window[ eventType ];\r\n\teventType = ( typeof eventType === 'function' ) ? eventType[ 'name' ] : eventType;\r\n\r\n\tprops = Object.assign( {}, defaultProps, props );\r\n\r\n\ttry {\r\n\t\tif( typeof( ctor ) !== 'undefined' ) {\r\n\t\t\tev = new ctor( eventName, props );\r\n\t\t}\r\n\t} catch( ex ) {}\r\n\r\n\tif( !ev ) {\r\n\t\tif( typeof document.createEvent === 'function' ) {\r\n\t\t\ttry {\r\n\t\t\t\tev = document.createEvent( eventType );\r\n\t\t\t} catch( ex ) {}\r\n\t\t\tif( !ev ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tev = document.createEvent( eventType + 's' );\r\n\t\t\t\t} catch( ex ) {}\r\n\t\t\t}\r\n\t\t} else if( typeof document[ 'createEventObject' ] === 'function' ) {\r\n\t\t\tev = document[ 'createEventObject' ]( window.event );\r\n\t\t}\r\n\r\n\t\tif( !ev ) {\r\n\t\t\tev = <any>{};\r\n\t\t}\r\n\t}\r\n\r\n\tinit( ev, eventName, eventType, props );\r\n\r\n\t// HACK for jQuery compatibility\r\n\tif( typeof ev[ 'isPropagationStopped' ] === 'undefined' ) {\r\n\t\tlet isPropagationStopped = false;\r\n\r\n\t\tconst stopPropagation = ev.stopPropagation;\r\n\t\tif( typeof stopPropagation === 'function' ) {\r\n\t\t\tev.stopPropagation = ( ...args ) => {\r\n\t\t\t\tisPropagationStopped = true;\r\n\t\t\t\tstopPropagation.apply( ev, args );\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tev[ 'isPropagationStopped' ] = () => isPropagationStopped;\r\n\t}\r\n\r\n\t// HACK for jQuery compatibility\r\n\tif( typeof ev[ 'isImmediatePropagationStopped' ] === 'undefined' ) {\r\n\t\tlet isImmediatePropagationStopped = false;\r\n\r\n\t\tconst stopImmediatePropagation = ev.stopImmediatePropagation;\r\n\t\tif( typeof stopImmediatePropagation === 'function' ) {\r\n\t\t\tev.stopPropagation = ( ...args ) => {\r\n\t\t\t\tisImmediatePropagationStopped = true;\r\n\t\t\t\tstopImmediatePropagation.apply( ev, args );\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tev[ 'isImmediatePropagationStopped' ] = () => isImmediatePropagationStopped;\r\n\t}\r\n\r\n\treturn ev;\r\n}\r\n\r\nfunction init( ev: Event, eventName: string, eventType: string, props?: any ) {\r\n\tprops = Object.assign( {}, defaultProps, props );\r\n\r\n\tfunction call( fn: string, ...args ) {\r\n\t\tif( typeof ev[ fn ] === 'function' ) {\r\n\t\t\tev[ fn ].apply( ev, args );\r\n\t\t}\r\n\t}\r\n\r\n\tcall( 'initEvent', eventName, !!props.bubbles, !!props.cancelable );\r\n\r\n\tfor( let i in props ) if( props.hasOwnProperty( i ) ) {\r\n\t\tconst prop = props[ i ];\r\n\t\tif( typeof prop === 'function' || typeof prop === 'undefined' || prop === null ) continue;\r\n\t\ttry {\r\n\t\t\tev[ i ] = props[ i ];\r\n\t\t} catch( ex ) {}\r\n\t}\r\n}\r\n\r\nexport function dispatch( element: HTMLElement, ev: Event, eventName: string ) {\r\n\tif( !element ) throw new Error( 'Element does not exist' );\r\n\r\n\tif( typeof element.dispatchEvent === 'function' ) {\r\n\t\telement.dispatchEvent( ev );\r\n\t} else if( typeof element[ 'fireEvent' ] === 'function' ) {\r\n\t\telement[ 'fireEvent' ]( `on${eventName}`, ev );\r\n\t} else if( typeof element[ 'fireEvent' ] === 'object' ) {\r\n\t\telement[ 'fireEvent' ]( `on${eventName}` );\r\n\t\ttry { (ev as any).target = element; } catch( ex ) {}\r\n\t} else {\r\n\t\tthrow new Error( 'Unsupported' );\r\n\t}\r\n\r\n\treturn ev;\r\n}\r\n\r\nfunction createAndDispatch( element: HTMLElement, eventName: string, props: any, eventType?: string ): Event {\r\n\treturn dispatch( element, create( eventName, props, eventType ), eventName );\r\n}\r\n\r\nfunction createAndDispatchMulti<T extends Event, TInit>( elements: any, eventName: string, props?: TInit, eventType?: string ): T|T[] {\r\n\tlet arr: HTMLElement[] = null;\r\n\tlet arrayLike = false;\r\n\tif( elements ) {\r\n\t\tarrayLike = isArrayLike( elements );\r\n\t\tarr = $( elements ).get() as HTMLElement[];\r\n\t}\r\n\tif( !arrayLike || !arr || arr.length === 0 || arr.length === 1 ) {\r\n\t\tconst el = arr && arr[ 0 ];\r\n\t\tif( el ) {\r\n\t\t\tconst e = <T><any>createAndDispatch( el, eventName, props, eventType );\r\n\t\t\treturn arrayLike ? [ e ] : e;\r\n\t\t} else {\r\n\t\t\treturn arrayLike ? [] : null;\r\n\t\t}\r\n\t} else {\r\n\t\treturn arr.map( e => <T><any>createAndDispatch( e, eventName, props, eventType ) );\r\n\t}\r\n}\r\n\r\nfunction events( elements: any, eventName: string, props?: EventInit ): Event|Event[] {\r\n\treturn createAndDispatchMulti<Event, EventInit>( elements, eventName, props, 'Event' );\r\n}\r\n\r\nfunction uiEvents( elements: any, eventName: string, props?: UIEventInit ): Event|UIEvent[] {\r\n\treturn createAndDispatchMulti<UIEvent, UIEventInit>( elements, eventName, props, 'UIEvent' );\r\n}\r\n\r\nfunction focusEvents( elements: any, eventName: string, props?: FocusEventInit ): Event|FocusEvent[] {\r\n\treturn createAndDispatchMulti<FocusEvent, FocusEventInit>( elements, eventName, props, 'FocusEvent' );\r\n}\r\n\r\nfunction keyboardEvents( elements: any, eventName: string, props?: KeyboardEventInit ): Event|KeyboardEvent[] {\r\n\treturn createAndDispatchMulti<KeyboardEvent, KeyboardEventInit>( elements, eventName, props, 'KeyboardEvent' );\r\n}\r\n\r\nfunction mouseEvents( elements: any, eventName: string, props?: MouseEventInit ): Event|MouseEvent[] {\r\n\treturn createAndDispatchMulti<MouseEvent, MouseEventInit>( elements, eventName, props, 'MouseEvent' );\r\n}\r\n\t\r\nfunction getProps( o: Object, props: string[] ) {\r\n\treturn props.reduce( ( rv, propName ) => {\r\n\t\tconst v = o[ propName ];\r\n\t\tif( v !== undefined && v !== null ) {\r\n\t\t\trv[ propName ] = v;\r\n\t\t}\r\n\t\treturn rv;\r\n\t}, {} );\r\n}\r\n\r\nfunction clone<T extends Event, TInit extends EventInit>( ev: T, eventProps: string[], eventType: string ) {\r\n\treturn <T>create( ev.type, getProps( ev, eventProps ), eventType );\r\n}\r\n\r\nfunction cloneAndDispatch<T extends Event, TInit extends EventInit>( element: HTMLElement, ev: T, eventProps: string[], eventType: string ) {\r\n\treturn dispatch( element, clone<T, TInit>( ev, eventProps, eventType ), ev.type || ev[ 'eventType' ] );\r\n}\r\n\r\nfunction cloneAndDispatchMulti<T extends Event, TInit extends EventInit>( elements: any, ev: T, eventProps: string[], eventType?: string ): T|T[] {\r\n\treturn createAndDispatchMulti<T, TInit>( elements, ev.type, <TInit>getProps( ev, eventProps ), eventType );\r\n}\r\n\r\nfunction cloneEventImpl<T extends Event, TInit extends EventInit>( elements: any, ev: T, eventProps: string[], eventType?: string ) {\r\n\tif( ev ) {\r\n\t\treturn cloneAndDispatchMulti<T, TInit>( elements, ev, eventProps, eventType );\r\n\t} else {\r\n\t\tev = <any>elements;\r\n\t\treturn clone<T, TInit>( ev, eventProps, eventType );\r\n\t}\r\n}\r\n\r\nexport function cloneMouseEvent( elements: any, ev: MouseEvent ) {\r\n\treturn cloneEventImpl( elements, ev, mouseEventProps, 'MouseEvent' );\r\n}\r\n\r\nexport function cloneFocusEvent( elements: any, ev: FocusEvent ) {\r\n\treturn cloneEventImpl( elements, ev, focusEventProps, 'FocusEvent' );\r\n}\r\n\r\nexport function cloneKeyboardEvent( elements: any, ev: KeyboardEvent ) {\r\n\treturn cloneEventImpl( elements, ev, keyboardEventProps, 'KeyboardEvent' );\r\n}\r\n\r\nexport function cloneUiEvent( elements: any, ev: UIEvent ) {\r\n\treturn cloneEventImpl( elements, ev, uiEventProps, 'UIEvent' );\r\n}\r\n\r\nexport function cloneEvent( elements: any, ev: Event ) {\r\n\treturn cloneEventImpl( elements, ev, eventProps, 'Event' );\r\n}\r\n\r\nexport function contextmenu( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'contextmenu', props );\r\n}\r\n\r\nexport function click( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'click', props );\r\n}\r\n\r\nexport function dblclick( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'dblclick', props );\r\n}\r\n\r\nexport function mousedown( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mousedown', props );\r\n}\r\n\r\nexport function mouseenter( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mouseenter', props );\r\n}\r\n\r\nexport function mouseleave( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mouseleave', props );\r\n}\r\n\r\nexport function mousemove( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mousemove', props );\r\n}\r\n\r\nexport function mouseover( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mouseover', props );\r\n}\r\n\r\nexport function mouseout( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mouseout', props );\r\n}\r\n\r\nexport function mouseup( elements: any, props?: MouseEventInit ) {\r\n\treturn mouseEvents( elements, 'mouseup', props );\r\n}\r\n\r\nexport function focus( elements: any, props?: FocusEventInit ) {\r\n\treturn focusEvents( elements, 'focus', props );\r\n}\r\n\r\nexport function blur( elements: any, props?: FocusEventInit ) {\r\n\treturn focusEvents( elements, 'blur', props );\r\n}\r\n\r\nexport function focusin( elements: any, props?: FocusEventInit ) {\r\n\treturn focusEvents( elements, 'focusin', props );\r\n}\r\n\r\nexport function focusout( elements: any, props?: FocusEventInit ) {\r\n\treturn focusEvents( elements, 'focusout', props );\r\n}\r\n\r\nexport function keydown( elements: any, props?: KeyboardEventInit ) {\r\n\treturn keyboardEvents( elements, 'keydown', props );\r\n}\r\n\r\nexport function keyup( elements: any, props?: KeyboardEventInit ) {\r\n\treturn keyboardEvents( elements, 'keyup', props );\r\n}\r\n\r\nexport function keypress( elements: any, props?: KeyboardEventInit ) {\r\n\treturn keyboardEvents( elements, 'keypress', props );\r\n}\r\n\r\nexport function resize( elements: any, props?: UIEventInit ) {\r\n\treturn uiEvents( elements, 'resize', props );\r\n}\r\n\r\nexport function scroll( elements: any, props?: UIEventInit ) {\r\n\treturn uiEvents( elements, 'scroll', props );\r\n}\r\n\r\nexport function abort( elements: any, props?: EventInit ) {\r\n\treturn events( elements, 'abort', props );\r\n}\r\n\r\nexport function error( elements: any, props?: EventInit ) {\r\n\treturn events( elements, 'error', props );\r\n}\r\n\r\nexport function load( elements: any, props?: EventInit ) {\r\n\treturn events( elements, 'load', props );\r\n}\r\n\r\nexport function unload( elements: any, props?: EventInit ) {\r\n\treturn events( elements, 'unload', props );\r\n}\r\n\r\nexport function select( elements: any, props?: EventInit ) {\r\n\treturn events( elements, 'select', props );\r\n}\r\n\r\nexport function submit( elements: any, props?: EventInit ) {\r\n\treturn events( elements, 'submit', props );\r\n}\r\n"]}