/** * A static utility class for accessing browser-neutral event properties and * methods. */ function EventUtils() { throw 'RuntimeException: EventUtils is a static utility class and may not be instantiated'; } EventUtils.addEventListener = function(target, type, callback, captures) { var result = true; if (target.addEventListener) { target.addEventListener(type, callback, captures); } else if (target.attachEvent) { result = target.attachEvent('on' + type, callback, captures); } else { // IE 5 Mac and some others target['on'+type] = callback; } return result; } EventUtils.findTarget = function(e, allowTextNodes) { var target; if (window.event) { target = window.event.srcElement; } else if (e) { target = e.target; } else { // we can't find it, just use window target = window; } if (!allowTextNodes && target.nodeType == 3) { target = target.parentNode; } return target; } /** * @return {x, y} */ EventUtils.getMousePosition = function(e) { var posx = 0; var posy = 0; if (!e) { e = window.event; } if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY; } else if (e.clientX || e.clientY) { posx = e.clientX + document.body.scrollLeft; posy = e.clientY + document.body.scrollTop; } return { x : posx, y : posy }; } function TextSelectionEvent(selectedText, mousePosition) { this.selectedText = selectedText; this.x = mousePosition.x; this.y = mousePosition.y; }