123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- /*******************************************************************************
- * This notice must be untouched at all times.
- *
- * This javascript library contains helper routines to assist with event
- * handling consinstently among browsers
- *
- * EventHelpers.js v.1.3 available at http://www.useragentman.com/
- *
- * released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- *
- *******************************************************************************/
- var EventHelpers = new function(){
- var me = this;
-
- var safariTimer;
- var isSafari = /WebKit/i.test(navigator.userAgent);
- var globalEvent;
-
- me.init = function () {
- if (me.hasPageLoadHappened(arguments)) {
- return;
- }
-
- if (document.createEventObject){
- // dispatch for IE
- globalEvent = document.createEventObject();
- } else if (document.createEvent) {
- globalEvent = document.createEvent("HTMLEvents");
- }
-
- me.docIsLoaded = true;
- }
-
- /**
- * Adds an event to the document. Examples of usage:
- * me.addEvent(window, "load", myFunction);
- * me.addEvent(docunent, "keydown", keyPressedFunc);
- * me.addEvent(document, "keyup", keyPressFunc);
- *
- * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
- * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
- * @param {Object} obj - a javascript object.
- * @param {String} evType - an event to attach to the object.
- * @param {Function} fn - the function that is attached to the event.
- */
- me.addEvent = function(obj, evType, fn){
-
- if (obj.addEventListener) {
- obj.addEventListener(evType, fn, false);
- } else if (obj.attachEvent) {
- obj['e' + evType + fn] = fn;
- obj[evType + fn] = function(){
- obj["e" + evType + fn](self.event);
- }
- obj.attachEvent("on" + evType, obj[evType + fn]);
- }
- }
-
-
- /**
- * Removes an event that is attached to a javascript object.
- *
- * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
- * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ * @param {Object} obj - a javascript object.
- * @param {String} evType - an event attached to the object.
- * @param {Function} fn - the function that is called when the event fires.
- */
- me.removeEvent = function(obj, evType, fn){
-
- if (obj.removeEventListener) {
- obj.removeEventListener(evType, fn, false);
- } else if (obj.detachEvent) {
- try {
- obj.detachEvent("on" + evType, obj[evType + fn]);
- obj[evType + fn] = null;
- obj["e" + evType + fn] = null;
- }
- catch (ex) {
- // do nothing;
- }
- }
- }
-
- function removeEventAttribute(obj, beginName){
- var attributes = obj.attributes;
- for (var i = 0; i < attributes.length; i++) {
- var attribute = attributes[i]
- var name = attribute.name
- if (name.indexOf(beginName) == 0) {
- //obj.removeAttributeNode(attribute);
- attribute.specified = false;
- }
- }
- }
-
- me.addScrollWheelEvent = function(obj, fn){
- if (obj.addEventListener) {
- /** DOMMouseScroll is for mozilla. */
- obj.addEventListener('DOMMouseScroll', fn, true);
- }
-
- /** IE/Opera. */
- if (obj.attachEvent) {
- obj.attachEvent("onmousewheel", fn);
- }
-
- }
-
- me.removeScrollWheelEvent = function(obj, fn){
- if (obj.removeEventListener) {
- /** DOMMouseScroll is for mozilla. */
- obj.removeEventListener('DOMMouseScroll', fn, true);
- }
-
- /** IE/Opera. */
- if (obj.detachEvent) {
- obj.detatchEvent("onmousewheel", fn);
- }
-
- }
-
- /**
- * Given a mouse event, get the mouse pointer's x-coordinate.
- *
- * @param {Object} e - a DOM Event object.
- * @return {int} - the mouse pointer's x-coordinate.
- */
- me.getMouseX = function(e){
- if (!e) {
- return;
- }
- // NS4
- if (e.pageX != null) {
- return e.pageX;
- // IE
- } else if (window.event != null && window.event.clientX != null &&
- document.body != null &&
- document.body.scrollLeft != null)
- return window.event.clientX + document.body.scrollLeft;
- // W3C
- else if (e.clientX != null)
- return e.clientX;
- else
- return null;
- }
-
- /**
- * Given a mouse event, get the mouse pointer's y-coordinate.
- * @param {Object} e - a DOM Event Object.
- * @return {int} - the mouse pointer's y-coordinate.
- */
- me.getMouseY = function(e){
- // NS4
- if (e.pageY != null)
- return e.pageY;
- // IE
- else if (window.event != null && window.event.clientY != null &&
- document.body != null &&
- document.body.scrollTop != null)
- return window.event.clientY + document.body.scrollTop;
- // W3C
- else if (e.clientY != null) {
- return e.clientY;
- }
- }
- /**
- * Given a mouse scroll wheel event, get the "delta" of how fast it moved.
- * @param {Object} e - a DOM Event Object.
- * @return {int} - the mouse wheel's delta. It is greater than 0, the
- * scroll wheel was spun upwards; if less than 0, downwards.
- */
- me.getScrollWheelDelta = function(e){
- var delta = 0;
- if (!e) /* For IE. */
- e = window.event;
- if (e.wheelDelta) { /* IE/Opera. */
- delta = e.wheelDelta / 120;
- /** In Opera 9, delta differs in sign as compared to IE.
- */
- if (window.opera) {
- delta = -delta;
- }
- } else if (e.detail) { /** Mozilla case. */
- /** In Mozilla, sign of delta is different than in IE.
- * Also, delta is multiple of 3.
- */
- delta = -e.detail / 3;
- }
- return delta
- }
-
- /**
- * Sets a mouse move event of a document.
- *
- * @deprecated - use only if compatibility with IE4 and NS4 is necessary. Otherwise, just
- * use EventHelpers.addEvent(window, 'mousemove', func) instead. Cannot be used to add
- * multiple mouse move event handlers.
- *
- * @param {Function} func - the function that you want a mouse event to fire.
- */
- me.addMouseEvent = function(func){
-
- if (document.captureEvents) {
- document.captureEvents(Event.MOUSEMOVE);
- }
-
- document.onmousemove = func;
- window.onmousemove = func;
- window.onmouseover = func;
-
- }
-
-
-
- /**
- * Find the HTML object that fired an Event.
- *
- * @param {Object} e - an HTML object
- * @return {Object} - the HTML object that fired the event.
- */
- me.getEventTarget = function(e){
- // first, IE method for mouse events(also supported by Safari and Opera)
- if (e.toElement) {
- return e.toElement;
- // W3C
- } else if (e.currentTarget) {
- return e.currentTarget;
-
- // MS way
- } else if (e.srcElement) {
- return e.srcElement;
- } else {
- return null;
- }
- }
-
-
-
-
- /**
- * Given an event fired by the keyboard, find the key associated with that event.
- *
- * @param {Object} e - an event object.
- * @return {String} - the ASCII character code representing the key associated with the event.
- */
- me.getKey = function(e){
- if (e.keyCode) {
- return e.keyCode;
- } else if (e.event && e.event.keyCode) {
- return window.event.keyCode;
- } else if (e.which) {
- return e.which;
- }
- }
-
-
- /**
- * Will execute a function when the page's DOM has fully loaded (and before all attached images, iframes,
- * etc., are).
- *
- * Usage:
- *
- * EventHelpers.addPageLoadEvent('init');
- *
- * where the function init() has this code at the beginning:
- *
- * function init() {
- *
- * if (EventHelpers.hasPageLoadHappened(arguments)) return;
- *
- * // rest of code
- * ....
- * }
- *
- * @author This code is based off of code from http://dean.edwards.name/weblog/2005/09/busted/ by Dean
- * Edwards, with a modification by me.
- *
- * @param {String} funcName - a string containing the function to be called.
- */
- me.addPageLoadEvent = function(funcName){
-
- var func = eval(funcName);
-
- // for Internet Explorer (using conditional comments)
- /*@cc_on @*/
- /*@if (@_win32)
- pageLoadEventArray.push(func);
- return;
- /*@end @*/
- if (isSafari) { // sniff
- pageLoadEventArray.push(func);
-
- if (!safariTimer) {
-
- safariTimer = setInterval(function(){
- if (/loaded|complete/.test(document.readyState)) {
- clearInterval(safariTimer);
-
- /*
- * call the onload handler
- * func();
- */
- me.runPageLoadEvents();
- return;
- }
- set = true;
- }, 10);
- }
- /* for Mozilla */
- } else if (document.addEventListener) {
- var x = document.addEventListener("DOMContentLoaded", func, null);
-
- /* Others */
- } else {
- me.addEvent(window, 'load', func);
- }
- }
-
- var pageLoadEventArray = new Array();
-
- me.runPageLoadEvents = function(e){
- if (isSafari || e.srcElement.readyState == "complete") {
-
- for (var i = 0; i < pageLoadEventArray.length; i++) {
- pageLoadEventArray[i]();
- }
- }
- }
- /**
- * Determines if either addPageLoadEvent('funcName') or addEvent(window, 'load', funcName)
- * has been executed.
- *
- * @see addPageLoadEvent
- * @param {Function} funcArgs - the arguments of the containing. function
- */
- me.hasPageLoadHappened = function(funcArgs){
- // If the function already been called, return true;
- if (funcArgs.callee.done)
- return true;
-
- // flag this function so we don't do the same thing twice
- funcArgs.callee.done = true;
- }
-
-
-
- /**
- * Used in an event method/function to indicate that the default behaviour of the event
- * should *not* happen.
- *
- * @param {Object} e - an event object.
- * @return {Boolean} - always false
- */
- me.preventDefault = function(e){
-
- if (e.preventDefault) {
- e.preventDefault();
- }
-
- try {
- e.returnValue = false;
- }
- catch (ex) {
- // do nothing
- }
-
- }
-
- me.cancelBubble = function(e){
- if (e.stopPropagation) {
- e.stopPropagation();
- }
-
- try {
- e.cancelBubble = true;
- }
- catch (ex) {
- // do nothing
- }
- }
-
- /*
- * Fires an event manually.
- * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
- * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ * @param {Object} obj - a javascript object.
- * @param {String} evType - an event attached to the object.
- * @param {Function} fn - the function that is called when the event fires.
- *
- */
- me.fireEvent = function (element,event, options){
-
- if(!element) {
- return;
- }
-
- if (document.createEventObject){
- /*
- var stack = DebugHelpers.getStackTrace();
- var s = stack.toString();
- jslog.debug(s);
- if (s.indexOf('fireEvent') >= 0) {
- return;
- }
- */
- return element.fireEvent('on' + event, globalEvent)
- jslog.debug('ss');
-
- }
- else{
- // dispatch for firefox + others
- globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable
- return !element.dispatchEvent(globalEvent);
- }
- }
-
- /* EventHelpers.init () */
- function init(){
- // Conditional comment alert: Do not remove comments. Leave intact.
- // The detection if the page is secure or not is important. If
- // this logic is removed, Internet Explorer will give security
- // alerts.
- /*@cc_on @*/
- /*@if (@_win32)
-
- document.write('<script id="__ie_onload" defer src="' +
-
- ((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
-
- var script = document.getElementById("__ie_onload");
-
- me.addEvent(script, 'readystatechange', me.runPageLoadEvents);
-
- /*@end @*/
-
- }
-
- init();
- }
- EventHelpers.addPageLoadEvent('EventHelpers.init');
|