event-base-ie.js revision 4901cf3193a7929385b6765404170cf6daf6ff5a
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp(function() {
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTrippvar stateChangeListener,
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp GLOBAL_ENV = YUI.Env,
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp config = YUI.config,
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp doc = config.doc,
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp docElement = doc && doc.documentElement,
a89ad754cce3cfc8aee71760e10217b54020360dTripp EVENT_NAME = 'onreadystatechange',
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp pollInterval = config.pollInterval || 40;
09688ec5ffb8b9cf9883a770e2f9ebd60b28888dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTrippif (docElement.doScroll && !GLOBAL_ENV._ieready) {
a89ad754cce3cfc8aee71760e10217b54020360dTripp GLOBAL_ENV._ieready = function() {
a89ad754cce3cfc8aee71760e10217b54020360dTripp GLOBAL_ENV._ready();
a89ad754cce3cfc8aee71760e10217b54020360dTripp };
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp// Internet Explorer: use the doScroll() method on the root element.
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp// This isolates what appears to be a safe moment to manipulate the
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp// DOM prior to when the document's readyState suggests it is safe to do so.
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp if (self !== self.top) {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp stateChangeListener = function() {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp if (doc.readyState == 'complete') {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp GLOBAL_ENV.remove(doc, EVENT_NAME, stateChangeListener);
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp GLOBAL_ENV.ieready();
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp }
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp };
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp GLOBAL_ENV.add(doc, EVENT_NAME, stateChangeListener);
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp } else {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp GLOBAL_ENV._dri = setInterval(function() {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp try {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp docElement.doScroll('left');
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp clearInterval(GLOBAL_ENV._dri);
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp GLOBAL_ENV._dri = null;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp GLOBAL_ENV._ieready();
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp } catch (domNotReady) { }
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp }, pollInterval);
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp }
a89ad754cce3cfc8aee71760e10217b54020360dTripp}
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp})();
a89ad754cce3cfc8aee71760e10217b54020360dTrippYUI.add('event-base-ie', function(Y) {
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp/*
a89ad754cce3cfc8aee71760e10217b54020360dTripp * Custom event engine, DOM event listener abstraction layer, synthetic DOM
a89ad754cce3cfc8aee71760e10217b54020360dTripp * events.
a89ad754cce3cfc8aee71760e10217b54020360dTripp * @module event
a89ad754cce3cfc8aee71760e10217b54020360dTripp * @submodule event-base
a89ad754cce3cfc8aee71760e10217b54020360dTripp */
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTrippvar IEEventFacade = function() {
a89ad754cce3cfc8aee71760e10217b54020360dTripp // IEEventFacade.superclass.constructor.apply(this, arguments);
a89ad754cce3cfc8aee71760e10217b54020360dTripp Y.DOM2EventFacade.apply(this, arguments);
a89ad754cce3cfc8aee71760e10217b54020360dTripp };
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTrippY.extend(IEEventFacade, Y.DOM2EventFacade, {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp init: function() {
7947db4b7d8682ea81598e3a4283e659a8103be6Tripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp IEEventFacade.superclass.init.apply(this, arguments);
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp var e = this._event,
7947db4b7d8682ea81598e3a4283e659a8103be6Tripp resolve = Y.DOM2EventFacade.resolve,
a89ad754cce3cfc8aee71760e10217b54020360dTripp x, y, d, b, de, t;
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp this.target = resolve(e.srcElement);
a89ad754cce3cfc8aee71760e10217b54020360dTripp
7947db4b7d8682ea81598e3a4283e659a8103be6Tripp if (('clientX' in e) && (!x) && (0 !== x)) {
a89ad754cce3cfc8aee71760e10217b54020360dTripp x = e.clientX;
a89ad754cce3cfc8aee71760e10217b54020360dTripp y = e.clientY;
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp d = Y.config.doc;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp b = d.body;
a89ad754cce3cfc8aee71760e10217b54020360dTripp de = d.documentElement;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp x += (de.scrollLeft || (b && b.scrollLeft) || 0);
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp y += (de.scrollTop || (b && b.scrollTop) || 0);
a89ad754cce3cfc8aee71760e10217b54020360dTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.pageX = x;
a89ad754cce3cfc8aee71760e10217b54020360dTripp this.pageY = y;
a89ad754cce3cfc8aee71760e10217b54020360dTripp }
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp if (e.type == "mouseout") {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp t = e.toElement;
a89ad754cce3cfc8aee71760e10217b54020360dTripp } else if (e.type == "mouseover") {
a89ad754cce3cfc8aee71760e10217b54020360dTripp t = e.fromElement;
a89ad754cce3cfc8aee71760e10217b54020360dTripp }
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp this.relatedTarget = resolve(t);
a89ad754cce3cfc8aee71760e10217b54020360dTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp // which should contain the unicode key code if this is a key event
a89ad754cce3cfc8aee71760e10217b54020360dTripp // if (e.charCode) {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp // this.which = e.charCode;
a89ad754cce3cfc8aee71760e10217b54020360dTripp // }
a89ad754cce3cfc8aee71760e10217b54020360dTripp
a89ad754cce3cfc8aee71760e10217b54020360dTripp // for click events, which is normalized for which mouse button was
a89ad754cce3cfc8aee71760e10217b54020360dTripp // clicked.
a89ad754cce3cfc8aee71760e10217b54020360dTripp if (e.button) {
a89ad754cce3cfc8aee71760e10217b54020360dTripp switch (e.button) {
a89ad754cce3cfc8aee71760e10217b54020360dTripp case 2:
a89ad754cce3cfc8aee71760e10217b54020360dTripp this.which = 3;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp break;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp case 4:
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.which = 2;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp break;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp default:
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.which = e.button;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp }
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.button = this.which;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp }
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp },
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp stopPropagation: function() {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp var e = this._event;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp e.cancelBubble = true;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this._wrapper.stopped = 1;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.stopped = 1;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp },
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp stopImmediatePropagation: function() {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.stopPropagation();
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this._wrapper.stopped = 2;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.stopped = 2;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp },
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp preventDefault: function(returnValue) {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this._event.returnValue = returnValue || false;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this._wrapper.prevented = 1;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp this.prevented = 1;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp }
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp});
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTrippif (Y.UA.ie) {
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp Y.DOMEventFacade = IEEventFacade;
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp}
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp}, '@VERSION@' );
c7ba96d16d58075a9ab8d5c1e46c6c83ce11cb4eTripp