event-base-ie-debug.js revision 76ca635d61eb3f9fb7c9d788a44fa8b1690aa138
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass(function() {
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 GLOBAL_ENV.remove(doc, EVENT_NAME, stateChangeListener);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass GLOBAL_ENV.add(doc, EVENT_NAME, stateChangeListener);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (domNotReady) { }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Custom event engine, DOM event listener abstraction layer, synthetic DOM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule event-base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // IEEventFacade.superclass.constructor.apply(this, arguments);
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 // TODO: necessary?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.hasOwnProperty = function () { return true; };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass proxy.stopImmediatePropagation = proto.stopImmediatePropagation;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar imp = Y.config.doc && Y.config.doc.implementation,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass init: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass IEEventFacade.superclass.init.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass x, y, d, b, de, t;
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 // which should contain the unicode key code if this is a key event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // if (e.charCode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // this.which = e.charCode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // for click events, which is normalized for which mouse button was
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.which = this.button = buttonMap[e.button] || e.button;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.type = (overrides && overrides.type) || e.type;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._touch(e, this._currentTarget, this._wrapper);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass charCode: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass button: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return (e.button) ?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass target: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass relatedTarget: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass targetProp = relatedTargetMap[e.type] || 'relatedTarget';
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 currentTarget: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass wheelDelta: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (e.type === "mousewheel" || e.type === "DOMMouseScroll") {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return (e.detail) ?
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 pageX: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageY: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var e = this._event,
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 * Used only by the DOMEventFacades used by IE8 when the YUI configuration
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <code>lazyEventFacade</code> is set to true.
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 GlassIELazyFacade._define = function (o, prop, valueFn) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function val(v) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var ret = (arguments.length) ? v : valueFn.call(this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Make sure we can use the lazy facade logic
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Object.defineProperty(Y.config.doc.createEventObject(), 'z', {});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.DOMEventFacade = (useLazyFacade) ? IELazyFacade : IEEventFacade;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{after:['event-base'], requires:['node-base']});