![]() | Source code below from: Constructing Usable Web Menus By Andy Beaumont, Dave Gibbons, Jody Kerr, and Jon Stephens Published January, 2004 Average rating
Powells
Alibris
|
/******* cbe_event.js CrossBrowserElement v3b8 (Events) Cross-Browser DHTML for IE 4+, NN 4+, Gecko, and Opera 4+ Download the latest version at cross-browser.com Documentation is in cbe_reference.html Copyright (c) 2001 by Michael Foster (mfoster@cybrtyme.com) This is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. see the GNU General Public License for more details: www.gnu.org *******/ var cbeEventJsLoaded = true; function CrossBrowserEvent() { ////// Methods this.init = cbeInitEvent; this.stopPropagation = cbeStopPropagation; this.preventDefault = cbePreventDefault; ////// Properties //// from DOM2 Interface Event this.type = ""; this.target = null; this.currentTarget = null; this.eventPhase = 0; this.bubbles = true; this.cancelable = true; this.timeStamp = 0; // eventPhase masks this.AT_TARGET = 1; this.BUBBLING_PHASE = 2; this.CAPTURING_PHASE = 3; //// from DOM2 Interface MouseEvent : UIEvent this.screenX = 0; this.screenY = 0; this.clientX = 0; this.clientY = 0; this.ctrlKey = false; this.shiftKey = false; this.altKey = false; this.metaKey = false; this.button = 0; this.relatedTarget = null; // button masks this.LEFT = 0; this.MIDDLE = 1; this.RIGHT = 2; ////// from IE4+ Object Model this.keyCode = 0; this.offsetX = 0; this.offsetY = 0; } function cbeStopPropagation() { // stub return; } function cbePreventDefault() { // stub return; } function cbeInitEvent(e) { if (is.ie) { // from DOM2 Interface Event cbeEvent.type = window.event.type; cbeEvent.target = window.event.srcElement; cbeEvent.currentTarget = window.event.toElement; //? // cbeEvent.eventPhase = 0; cbeEvent.bubbles = window.event.cancelBubble; // cbeEvent.cancelable = false; // cbeEvent.timeStamp = 0; // from DOM2 Interface MouseEvent : UIEvent cbeEvent.screenX = window.event.screenX; cbeEvent.screenY = window.event.screenY; cbeEvent.clientX = window.event.clientX; cbeEvent.clientY = window.event.clientY; cbeEvent.ctrlKey = window.event.ctrlKey; cbeEvent.shiftKey = window.event.shiftKey; cbeEvent.altKey = window.event.altKey; // cbeEvent.metaKey = 0; if (window.event.button == 1) cbeEvent.button = cbeEvent.LEFT; else if (window.event.button == 4) cbeEvent.button = cbeEvent.MIDDLE; else if (window.event.button == 2) cbeEvent.button = cbeEvent.RIGHT; cbeEvent.relatedTarget = window.event.fromElement; //? // from IE4+ Object Model cbeEvent.keyCode = window.event.keyCode; cbeEvent.offsetX = window.event.offsetX; cbeEvent.offsetY = window.event.offsetY; } else if (is.gecko) { // from DOM2 Interface Event cbeEvent.type = e.type; cbeEvent.target = e.target; cbeEvent.currentTarget = e.currentTarget; cbeEvent.eventPhase = e.eventPhase; cbeEvent.bubbles = e.bubbles; cbeEvent.cancelable = e.cancelable; cbeEvent.timeStamp = e.timeStamp; // from DOM2 Interface MouseEvent : UIEvent cbeEvent.screenX = e.screenX; cbeEvent.screenY = e.screenY; cbeEvent.clientX = e.clientX; cbeEvent.clientY = e.clientY; cbeEvent.ctrlKey = e.ctrlKey; cbeEvent.shiftKey = e.shiftKey; cbeEvent.altKey = e.altKey; cbeEvent.metaKey = e.metaKey; if (e.button == 1) cbeEvent.button = cbeEvent.LEFT; else if (e.button == 2) cbeEvent.button = cbeEvent.MIDDLE; else if (e.button == 3) cbeEvent.button = cbeEvent.RIGHT; cbeEvent.relatedTarget = e.relatedTarget; // from IE4+ Object Model cbeEvent.keyCode = e.which; cbeEvent.offsetX = e.layerX; cbeEvent.offsetY = e.layerY; } else if (is.nav) { // from DOM2 Interface Event cbeEvent.type = e.type; cbeEvent.target = e.target; // cbeEvent.currentTarget = e.currentTarget; // cbeEvent.eventPhase = e.eventPhase; // cbeEvent.bubbles = e.bubbles; // cbeEvent.cancelable = e.cancelable; // cbeEvent.timeStamp = 0; // from DOM2 Interface MouseEvent : UIEvent cbeEvent.screenX = e.screenX; cbeEvent.screenY = e.screenY; cbeEvent.clientX = e.pageX; cbeEvent.clientY = e.pageY; cbeEvent.ctrlKey = (e.modifiers & Event.CONTROL_MASK) != 0; cbeEvent.shiftKey = (e.modifiers & Event.SHIFT_MASK) != 0; cbeEvent.altKey = (e.modifiers & Event.ALT_MASK) != 0; // cbeEvent.metaKey = e.metaKey; if (e.which == 1) cbeEvent.button = cbeEvent.LEFT; else if (e.which == 2) cbeEvent.button = cbeEvent.MIDDLE; else if (e.which == 3) cbeEvent.button = cbeEvent.RIGHT; // cbeEvent.relatedTarget = e.relatedTarget; // from IE4+ Object Model cbeEvent.keyCode = e.which; cbeEvent.offsetX = e.layerX; cbeEvent.offsetY = e.layerY; } else if (is.opera) { // from DOM2 Interface Event cbeEvent.type = e.type; cbeEvent.target = e.target; cbeEvent.currentTarget = e.currentTarget; // cbeEvent.eventPhase = e.eventPhase; // cbeEvent.bubbles = e.bubbles; // cbeEvent.cancelable = e.cancelable; // cbeEvent.timeStamp = 0; // from DOM2 Interface MouseEvent : UIEvent cbeEvent.screenX = e.screenX; cbeEvent.screenY = e.screenY; cbeEvent.clientX = e.clientX; cbeEvent.clientY = e.clientY; cbeEvent.ctrlKey = e.ctrlKey; cbeEvent.shiftKey = e.shiftKey; cbeEvent.altKey = e.altKey; // cbeEvent.metaKey = e.metaKey; if ((e.type == 'click' && e.which == 0) || ((e.type == 'mousedown' || e.type == 'mouseup') && e.which == 1)) cbeEvent.button = cbeEvent.LEFT; cbeEvent.relatedTarget = e.relatedTarget; // from IE4+ Object Model cbeEvent.keyCode = e.which; // cbeEvent.offsetX = e.layerX; // cbeEvent.offsetY = e.layerY; } } function _cbeAddEventListener(type, listener, capture) // cbe method { cbeAddEventListener(this.ele, type, listener, capture); } function cbeAddEventListener(obj, type, listener, capture) // global { var eh = "obj.on" + type.toLowerCase() + "=" + listener; if (obj.addEventListener) { obj.addEventListener(type, listener, capture); } else if (obj.captureEvents) { if (capture) obj.captureEvents(eval("Event." + type.toUpperCase())); eval(eh); } else { eval(eh); } } function _cbeRemoveEventListener(type, listener) { cbeRemoveEventListener(this.ele, type, listener); } function cbeRemoveEventListener(obj, type, listener) { var eh = "obj.on" + type.toLowerCase() + "=null"; if (obj.removeEventListener) { obj.removeEventListener(type, listener, false); } else if (obj.releaseEvents) { obj.releaseEvents(eval("Event." + type.toUpperCase())); eval(eh); } else { eval(eh); } } // End cbe_event.js