pandorafms/pandora_console/include/styles/cb/lib/xevent.js

94 lines
3.1 KiB
JavaScript

// xEvent, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xEvent(evt) // object prototype
{
var e = evt || window.event;
if(!e) return;
if(e.type) this.type = e.type;
if(e.target) this.target = e.target;
else if(e.srcElement) this.target = e.srcElement;
// Section B
if (e.relatedTarget) this.relatedTarget = e.relatedTarget;
else if (e.type == 'mouseover' && e.fromElement) this.relatedTarget = e.fromElement;
else if (e.type == 'mouseout') this.relatedTarget = e.toElement;
// End Section B
if(xOp6Dn) { this.pageX = e.clientX; this.pageY = e.clientY; }
else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; }
else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); }
// Section A
if (xDef(e.offsetX,e.offsetY)) {
this.offsetX = e.offsetX;
this.offsetY = e.offsetY;
}
else if (xDef(e.layerX,e.layerY)) {
this.offsetX = e.layerX;
this.offsetY = e.layerY;
}
else {
this.offsetX = this.pageX - xPageX(this.target);
this.offsetY = this.pageY - xPageY(this.target);
}
// End Section A
if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which
else if (xDef(e.which) && e.type.indexOf('key')!=-1) { this.keyCode = e.which; }
this.shiftKey = e.shiftKey;
this.ctrlKey = e.ctrlKey;
this.altKey = e.altKey;
}
// I need someone with IE/Mac to compare test snippets 1 and 2 in section A.
// // Snippet 1
// if(xDef(e.offsetX,e.offsetY)) {
// this.offsetX = e.offsetX;
// this.offsetY = e.offsetY;
// if (xIE4Up && xMac) {
// this.offsetX += xScrollLeft();
// this.offsetY += xScrollTop();
// }
// }
// else if (xDef(e.layerX,e.layerY)) {
// this.offsetX = e.layerX;
// this.offsetY = e.layerY;
// }
// else {
// this.offsetX = this.pageX - xPageX(this.target);
// this.offsetY = this.pageY - xPageY(this.target);
// }
// // Snippet 2
// if (xDef(e.offsetX,e.offsetY) && !(xIE4Up && xMac)) {
// this.offsetX = e.offsetX;
// this.offsetY = e.offsetY;
// }
// else if (xDef(e.layerX,e.layerY)) {
// this.offsetX = e.layerX;
// this.offsetY = e.layerY;
// }
// else {
// this.offsetX = this.pageX - xPageX(this.target);
// this.offsetY = this.pageY - xPageY(this.target);
// }
// This was in section B:
// if (e.relatedTarget) this.relatedTarget = e.relatedTarget;
// else if (xIE4Up) {
// if (e.type == 'mouseover') this.relatedTarget = e.fromElement;
// else if (e.type == 'mouseout') this.relatedTarget = e.toElement;
// }
// changed to remove sniffer after discussion with Hallvord
// Possible optimization:
// if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which
// else if (xDef(e.which) && e.type.indexOf('key')!=-1) { this.keyCode = e.which; }
// // replace the above 2 lines with the following?
// // this.keyCode = e.keyCode || e.which || 0;