Samples for my event constructor series article at www.justrog.com
- event_inspector.js - Simple native event objects fired from native event handlers
Samples for my event constructor series article at www.justrog.com
dictionary EventInit | |
{ | |
boolean bubbles = false; | |
boolean cancelable = false; | |
}; | |
dictionary UIEventInit : EventInit | |
{ | |
Window? view = null; | |
long detail = 0; | |
}; | |
dictionary SharedKeyboardAndMouseEventInit : UIEventInit | |
{ | |
boolean ctrlKey = false; | |
boolean shiftKey = false; | |
boolean altKey = false; | |
boolean metaKey = false; | |
boolean keyModifierStateAltGraph = false; // Interop: these changed names in a recent draft.. | |
boolean keyModifierStateCapsLock = false; | |
boolean keyModifierStateFn = false; | |
boolean keyModifierStateFnLock = false; | |
boolean keyModifierStateHyper = false; | |
boolean keyModifierStateNumLock = false; | |
boolean keyModifierStateOS = false; | |
boolean keyModifierStateScrollLock = false; | |
boolean keyModifierStateSuper = false; | |
boolean keyModifierStateSymbol = false; | |
boolean keyModifierStateSymbolLock = false; | |
}; | |
dictionary MouseEventInit : SharedKeyboardAndMouseEventInit | |
{ | |
long screenX = 0; | |
long screenY = 0; | |
long clientX = 0; | |
long clientY = 0; | |
short button = 0; | |
unsigned short buttons = 0; | |
EventTarget? relatedTarget = null; | |
}; |
var evt = document.createEvent("Event"); | |
evt.initEvent("foo", false, false); |
// http://jsfiddle.net/s1o8a335/ | |
window.addEventListener("load", load_handler); | |
document.body.addEventListener("click", click_handler); | |
function load_handler(evt) { | |
logEvent(evt); | |
document.body.click(); | |
} | |
function click_handler(evt) { | |
logEvent(evt); | |
} | |
function logEvent(evt) { | |
var output = document.getElementById("log"); | |
var logLines = [ | |
["Event name", evt.type], | |
["InstanceOf Event", evt instanceof Event], | |
["InstanceOf UIEvent", evt instanceof UIEvent], | |
["InstanceOf MouseEvent", evt instanceof MouseEvent], | |
["toString", evt.toString()] | |
].map(function (arr) { return arr.join(": "); }); | |
output.innerHTML += logLines.join("<br>") + "<br><br>"; | |
} |
function SuperMouseEvent(type, dict) { | |
var nativeEvt = new MouseEvent(type, dict); | |
nativeEvt.__proto__ = SuperMouseEvent.prototype; | |
return nativeEvt; | |
} | |
SuperMouseEvent.prototype = Object.create(MouseEvent.prototype); | |
SuperMouseEvent.prototype.constructor = SuperMouseEvent; | |
var mouseEvt = new MouseEvent("mousedown", { bubbles: true, detail: 1, view: window }); | |
console.log(mouseEvt); | |
var obj = {}; | |
var mouseEvtCpy = new SuperMouseEvent(mouseEvt.type, mouseEvt); | |
console.log(mouseEvtCpy instanceof SuperMouseEvent); | |
console.log(mouseEvtCpy instanceof MouseEvent); |
var mouseEvt = new MouseEvent("mousedown", { bubbles: true, detail: 1, view: window }); | |
console.log(mouseEvt); | |
var mouseEvtCpy = new MouseEvent(mouseEvt.type, mouseEvt); | |
console.log(mouseEvtCpy); |
// Ermagod, I hope I managed to get all of these defaults right | |
var mouseEvt = document.createEvent("MouseEvent"); | |
mouseEvt.initMouseEvent("mousedown", true, false, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); | |
console.log(mouseEvt); | |
// Srysly, do Browser vendors hate authors this much? | |
var mouseEvtCpy = document.createEvent("MouseEvent"); | |
mouseEvtCpy.initMouseEvent(mouseEvt.type, mouseEvt.bubbles, mouseEvt.cancelable, mouseEvt.view, | |
mouseEvt.detail, mouseEvt.screenX, mouseEvt.screenY, mouseEvt.clientX, | |
mouseEvt.clientY, mouseEvt.ctrlKey, mouseEvt.altKey, mouseEvt.shiftKey, | |
mouseEvt.metaKey, mouseEvt.button, mouseEvt.relatedTarget); | |
console.log(mouseEvtCpy); |