6 description: Contains the Event Class, to make the event object cross-browser.
8 license: MIT-style license.
10 requires: [Window, Document, Array, Function, String, Object]
17 var Event = new Type('Event', function(event, win){
18 if (!win) win = window;
19 var doc = win.document;
20 event = event || win.event;
21 if (event.$extended) return event;
22 this.$extended = true;
23 var type = event.type,
24 target = event.target || event.srcElement,
27 while (target && target.nodeType == 3) target = target.parentNode;
29 if (type.indexOf('key') != -1){
30 var code = event.which || event.keyCode;
31 var key = Object.keyOf(Event.Keys, code);
32 if (type == 'keydown'){
33 var fKey = code - 111;
34 if (fKey > 0 && fKey < 13) key = 'f' + fKey;
36 if (!key) key = String.fromCharCode(code).toLowerCase();
37 } else if ((/click|mouse|menu/i).test(type)){
38 doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
40 x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft,
41 y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop
44 x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX,
45 y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY
47 if ((/DOMMouseScroll|mousewheel/).test(type)){
48 var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
50 var rightClick = (event.which == 3) || (event.button == 2),
52 if ((/over|out/).test(type)){
53 related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element'];
54 var testRelated = function(){
55 while (related && related.nodeType == 3) related = related.parentNode;
58 var hasRelated = (Browser.firefox2) ? testRelated.attempt() : testRelated();
59 related = (hasRelated) ? related : null;
61 } else if ((/gesture|touch/i).test(type)){
62 this.rotation = event.rotation;
63 this.scale = event.scale;
64 this.targetTouches = event.targetTouches;
65 this.changedTouches = event.changedTouches;
66 var touches = this.touches = event.touches;
67 if (touches && touches[0]){
68 var touch = touches[0];
69 page = {x: touch.pageX, y: touch.pageY};
70 client = {x: touch.clientX, y: touch.clientY};
74 return Object.append(this, {
80 rightClick: rightClick,
84 relatedTarget: document.id(related),
85 target: document.id(target),
90 shift: event.shiftKey,
91 control: event.ctrlKey,
112 Event.Keys = new Hash(Event.Keys);
119 return this.stopPropagation().preventDefault();
122 stopPropagation: function(){
123 if (this.event.stopPropagation) this.event.stopPropagation();
124 else this.event.cancelBubble = true;
128 preventDefault: function(){
129 if (this.event.preventDefault) this.event.preventDefault();
130 else this.event.returnValue = false;