76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass(function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar stateChangeListener,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV = YUI.Env,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass config = YUI.config,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc = config.doc,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass docElement = doc && doc.documentElement,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EVENT_NAME = 'onreadystatechange',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pollInterval = config.pollInterval || 40;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif (docElement.doScroll && !GLOBAL_ENV._ieready) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV._ieready = function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV._ready();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// Internet Explorer: use the doScroll() method on the root element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// This isolates what appears to be a safe moment to manipulate the
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// DOM prior to when the document's readyState suggests it is safe to do so.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (self !== self.top) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass stateChangeListener = function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (doc.readyState == 'complete') {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV.remove(doc, EVENT_NAME, stateChangeListener);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV.ieready();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV.add(doc, EVENT_NAME, stateChangeListener);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV._dri = setInterval(function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass try {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass docElement.doScroll('left');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass clearInterval(GLOBAL_ENV._dri);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV._dri = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV._ieready();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (domNotReady) { }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }, pollInterval);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass})();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('event-base-ie', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/*
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Custom event engine, DOM event listener abstraction layer, synthetic DOM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * events.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule event-base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfunction IEEventFacade() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // IEEventFacade.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.DOM2EventFacade.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/*
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * (intentially left out of API docs)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Alternate Facade implementation that is based on Object.defineProperty, which
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * is partially supported in IE8. Properties that involve setup work are
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * deferred to temporary getters using the static _define method.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfunction IELazyFacade(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var proxy = Y.config.doc.createEventObject(e),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proto = IELazyFacade.prototype;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TODO: necessary?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.hasOwnProperty = function () { return true; };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.init = proto.init;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.halt = proto.halt;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.preventDefault = proto.preventDefault;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.stopPropagation = proto.stopPropagation;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.stopImmediatePropagation = proto.stopImmediatePropagation;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.DOM2EventFacade.apply(proxy, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return proxy;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar imp = Y.config.doc && Y.config.doc.implementation,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass useLazyFacade = Y.config.lazyEventFacade,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass buttonMap = {
f841387cb4997959ecf710977b259b86f959ba48Luke Smith 0: 1, // left click
f841387cb4997959ecf710977b259b86f959ba48Luke Smith 4: 2, // middle click
f841387cb4997959ecf710977b259b86f959ba48Luke Smith 2: 3 // right click
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass relatedTargetMap = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass mouseout: 'toElement',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass mouseover: 'fromElement'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass resolve = Y.DOM2EventFacade.resolve,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proto = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass init: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass IEEventFacade.superclass.init.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass x, y, d, b, de, t;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.target = resolve(e.srcElement);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (('clientX' in e) && (!x) && (0 !== x)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass x = e.clientX;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass y = e.clientY;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass d = Y.config.doc;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass b = d.body;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass de = d.documentElement;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass x += (de.scrollLeft || (b && b.scrollLeft) || 0);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass y += (de.scrollTop || (b && b.scrollTop) || 0);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.pageX = x;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.pageY = y;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (e.type == "mouseout") {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass t = e.toElement;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else if (e.type == "mouseover") {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass t = e.fromElement;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // fallback to t.relatedTarget to support simulated events.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // IE doesn't support setting toElement or fromElement on generic
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // events, so Y.Event.simulate sets relatedTarget instead.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.relatedTarget = resolve(t || e.relatedTarget);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
8cabf3118c2686987619594938d05e4df90dc849Luke Smith // which should contain the unicode key code if this is a key event.
8cabf3118c2686987619594938d05e4df90dc849Luke Smith // For click events, which is normalized for which mouse button was
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // clicked.
8cabf3118c2686987619594938d05e4df90dc849Luke Smith this.which = // chained assignment
8cabf3118c2686987619594938d05e4df90dc849Luke Smith this.button = e.keyCode || buttonMap[e.button] || e.button;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass stopPropagation: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._event.cancelBubble = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._wrapper.stopped = 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.stopped = 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass stopImmediatePropagation: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.stopPropagation();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._wrapper.stopped = 2;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.stopped = 2;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass preventDefault: function(returnValue) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._event.returnValue = returnValue || false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._wrapper.prevented = 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.prevented = 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.extend(IEEventFacade, Y.DOM2EventFacade, proto);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.extend(IELazyFacade, Y.DOM2EventFacade, proto);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassIELazyFacade.prototype.init = function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass overrides = this._wrapper.overrides,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass define = IELazyFacade._define,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lazyProperties = IELazyFacade._lazyProperties,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass prop;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.altKey = e.altKey;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.ctrlKey = e.ctrlKey;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.metaKey = e.metaKey;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.shiftKey = e.shiftKey;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.type = (overrides && overrides.type) || e.type;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.clientX = e.clientX;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.clientY = e.clientY;
9c0480b7e079efa498be56a11845bd19364ef87fLuke Smith this.keyCode = // chained assignment
9c0480b7e079efa498be56a11845bd19364ef87fLuke Smith this.charCode = e.keyCode;
8cabf3118c2686987619594938d05e4df90dc849Luke Smith this.which = // chained assignment
8cabf3118c2686987619594938d05e4df90dc849Luke Smith this.button = e.keyCode || buttonMap[e.button] || e.button;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for (prop in lazyProperties) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (lazyProperties.hasOwnProperty(prop)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass define(this, prop, lazyProperties[prop]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._touch) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._touch(e, this._currentTarget, this._wrapper);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassIELazyFacade._lazyProperties = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass target: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return resolve(this._event.srcElement);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass relatedTarget: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass targetProp = relatedTargetMap[e.type] || 'relatedTarget';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // fallback to t.relatedTarget to support simulated events.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // IE doesn't support setting toElement or fromElement on generic
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // events, so Y.Event.simulate sets relatedTarget instead.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return resolve(e[targetProp] || e.relatedTarget);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentTarget: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return resolve(this._currentTarget);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass wheelDelta: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (e.type === "mousewheel" || e.type === "DOMMouseScroll") {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return (e.detail) ?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass (e.detail * -1) :
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // wheelDelta between -80 and 80 result in -1 or 1
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Math.round(e.wheelDelta / 80) || ((e.wheelDelta < 0) ? -1 : 1);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageX: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass val = e.pageX,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc, bodyScroll, docScroll;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (val === undefined) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc = Y.config.doc;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bodyScroll = doc.body && doc.body.scrollLeft;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass docScroll = doc.documentElement.scrollLeft;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass val = e.clientX + (docScroll || bodyScroll || 0);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return val;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageY: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass val = e.pageY,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc, bodyScroll, docScroll;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (val === undefined) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc = Y.config.doc;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bodyScroll = doc.body && doc.body.scrollTop;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass docScroll = doc.documentElement.scrollTop;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass val = e.clientY + (docScroll || bodyScroll || 0);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return val;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Wrapper function for Object.defineProperty that creates a property whose
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * value will be calulated only when asked for. After calculating the value,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * the getter wll be removed, so it will behave as a normal property beyond that
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * point. A setter is also assigned so assigning to the property will clear
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * the getter, so foo.prop = 'a'; foo.prop; won't trigger the getter,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * overwriting value 'a'.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Used only by the DOMEventFacades used by IE8 when the YUI configuration
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <code>lazyEventFacade</code> is set to true.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _define
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {DOMObject} A DOM object to add the property to
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param prop {String} The name of the new property
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param valueFn {Function} The function that will return the initial, default
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * value for the property.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassIELazyFacade._define = function (o, prop, valueFn) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function val(v) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var ret = (arguments.length) ? v : valueFn.call(this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delete o[prop];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Object.defineProperty(o, prop, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: ret,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass configurable: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass writable: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return ret;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Object.defineProperty(o, prop, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass get: val,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass set: val,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass configurable: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif (imp && (!imp.hasFeature('Events', '2.0'))) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (useLazyFacade) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Make sure we can use the lazy facade logic
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass try {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Object.defineProperty(Y.config.doc.createEventObject(), 'z', {});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass useLazyFacade = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.DOMEventFacade = (useLazyFacade) ? IELazyFacade : IEEventFacade;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{after:['event-base'], requires:['node-base']});