forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsimulate-event.js
More file actions
1 lines (1 loc) · 6.01 KB
/
Copy pathsimulate-event.js
File metadata and controls
1 lines (1 loc) · 6.01 KB
1
var extend=require("xtend/mutable"),eventOptions={UIEvent:function(){return{view:document.defaultView}},FocusEvent:function(){return eventOptions.UIEvent.apply(this,arguments)},MouseEvent:function(type){return{button:0,bubbles:"mouseenter"!==type&&"mouseleave"!==type,cancelable:"mouseenter"!==type&&"mouseleave"!==type,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,clientX:1,clientY:1,screenX:0,screenY:0,view:document.defaultView,relatedTarget:document.documentElement}},WheelEvent:function(type){return eventOptions.MouseEvent.apply(this,arguments)},KeyboardEvent:function(){return{view:document.defaultView,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,keyCode:0}}},eventTypes={beforeprint:"Event",afterprint:"Event",beforeunload:"Event",abort:"Event",error:"Event",change:"Event",submit:"Event",reset:"Event",cached:"Event",canplay:"Event",canplaythrough:"Event",chargingchange:"Event",chargingtimechange:"Event",checking:"Event",close:"Event",downloading:"Event",durationchange:"Event",emptied:"Event",ended:"Event",fullscreenchange:"Event",fullscreenerror:"Event",invalid:"Event",levelchange:"Event",loadeddata:"Event",loadedmetadata:"Event",noupdate:"Event",obsolete:"Event",offline:"Event",online:"Event",open:"Event",orientationchange:"Event",pause:"Event",pointerlockchange:"Event",pointerlockerror:"Event",copy:"Event",cut:"Event",paste:"Event",play:"Event",playing:"Event",ratechange:"Event",readystatechange:"Event",seeked:"Event",seeking:"Event",stalled:"Event",success:"Event",suspend:"Event",timeupdate:"Event",updateready:"Event",visibilitychange:"Event",volumechange:"Event",waiting:"Event",load:"UIEvent",unload:"UIEvent",resize:"UIEvent",scroll:"UIEvent",select:"UIEvent",drag:"MouseEvent",dragenter:"MouseEvent",dragleave:"MouseEvent",dragover:"MouseEvent",dragstart:"MouseEvent",dragend:"MouseEvent",drop:"MouseEvent",touchcancel:"UIEvent",touchend:"UIEvent",touchenter:"UIEvent",touchleave:"UIEvent",touchmove:"UIEvent",touchstart:"UIEvent",blur:"UIEvent",focus:"UIEvent",focusin:"UIEvent",focusout:"UIEvent",input:"UIEvent",show:"MouseEvent",click:"MouseEvent",dblclick:"MouseEvent",mouseenter:"MouseEvent",mouseleave:"MouseEvent",mousedown:"MouseEvent",mouseup:"MouseEvent",mouseover:"MouseEvent",mousemove:"MouseEvent",mouseout:"MouseEvent",contextmenu:"MouseEvent",wheel:"WheelEvent",message:"MessageEvent",storage:"StorageEvent",timeout:"StorageEvent",keydown:"KeyboardEvent",keypress:"KeyboardEvent",keyup:"KeyboardEvent",progress:"ProgressEvent",loadend:"ProgressEvent",loadstart:"ProgressEvent",popstate:"PopStateEvent",hashchange:"HashChangeEvent",transitionend:"TransitionEvent",compositionend:"CompositionEvent",compositionstart:"CompositionEvent",compositionupdate:"CompositionEvent",pagehide:"PageTransitionEvent",pageshow:"PageTransitionEvent"},eventInit={Event:"initEvent",UIEvent:"initUIEvent",FocusEvent:"initUIEvent",MouseEvent:"initMouseEvent",WheelEvent:"initMouseEvent",MessageEvent:"initMessageEvent",StorageEvent:"initStorageEvent",KeyboardEvent:"initKeyboardEvent",ProgressEvent:"initEvent",PopStateEvent:"initEvent",TransitionEvent:"initEvent",HashChangeEvent:"initHashChangeEvent",CompositionEvent:"initCompositionEvent",DeviceMotionEvent:"initDeviceMotionEvent",PageTransitionEvent:"initEvent",DeviceOrientationEvent:"initDeviceOrientationEvent"},eventParameters={initEvent:[],initUIEvent:["view","detail"],initKeyboardEvent:["view","char","key","location","modifiersList","repeat","locale"],initKeyEvent:["view","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode"],initMouseEvent:["view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget"],initHashChangeEvent:["oldURL","newURL"],initCompositionEvent:["view","data","locale"],initDeviceMotionEvent:["acceleration","accelerationIncludingGravity","rotationRate","interval"],initDeviceOrientationEvent:["alpha","beta","gamma","absolute"],initMessageEvent:["data","origin","lastEventId","source"],initStorageEvent:["key","oldValue","newValue","url","storageArea"]},eventConstructors={UIEvent:window.UIEvent,FocusEvent:window.FocusEvent,MouseEvent:window.MouseEvent,WheelEvent:window.MouseEvent,KeyboardEvent:window.KeyboardEvent};function getOverrides(eventType,options){if("KeyboardEvent"===eventType&&options)return{keyCode:options.keyCode||0,key:options.key||0,which:options.which||options.keyCode||0}}exports.generate=function(type,options){if(!eventTypes.hasOwnProperty(type))throw new SyntaxError("Unsupported event type");var eventType=eventTypes[type],event,key,overrides=getOverrides(eventType,options);options instanceof window.Event||(options=eventType in eventOptions?extend({bubbles:!0,cancelable:!0},eventOptions[eventType](type,options),options):extend({bubbles:!0,cancelable:!0},options));var Constructor=eventConstructors[eventType]||window.Event;try{for(key in event=new Constructor(type,options),overrides)Object.defineProperty(event,key,{value:overrides[key]});return event}catch(e){}var ua=window.navigator.userAgent.toLowerCase(),msie;Math.max(ua.indexOf("msie"),ua.indexOf("trident"))>=0&&"KeyboardEvent"===eventType&&(eventType="UIEvent");var initEvent=eventInit[eventType];if(!document.createEvent){for(key in event=extend(document.createEventObject(),options),overrides)Object.defineProperty(event,key,{value:overrides[key]});return event}if(event=extend(document.createEvent(eventType),options),"initKeyboardEvent"===initEvent)if(void 0===event[initEvent])initEvent="initKeyEvent";else if(!("modifiersList"in options)){var mods=[];options.metaKey&&mods.push("Meta"),options.altKey&&mods.push("Alt"),options.shiftKey&&mods.push("Shift"),options.ctrlKey&&mods.push("Control"),options.modifiersList=mods.join(" ")}var args=eventParameters[initEvent].map(function(parameter){return options[parameter]});for(key in event[initEvent].apply(event,[type,options.bubbles,options.cancelable].concat(args)),overrides)Object.defineProperty(event,key,{value:overrides[key]});return event},exports.simulate=function(element,type,options){var event=exports.generate(type,options);return document.createEvent?element.dispatchEvent(event):element.fireEvent("on"+type,event)};