botanjs/src/Dandelion/IDOMObject.js
raw ยท 2705 bytes
(function(){
var ns = __namespace( "Dandelion" );
/** @type {typeof System.utils.EventKey} */
var EventKey = __import( "System.utils.EventKey" );
/** @constructor
* @extends Array
*/
var EvtsArr = function () { Array.call( this ); };
/** @param {System.utils.EventKey} e */
EvtsArr.prototype.indexOf = function( e )
{
var l = this.length;
for( var i = 0; i < l; i ++ )
{
/** @type {typeof System.utils.EventKey} */
var evt = this[i];
if( evt.type == e.type && evt.handler == e.handler )
{
return i;
}
}
return -1;
};
__extends( EvtsArr, Array );
/** @constructor */
var IDOMObject = function ( obj, sw )
{
if ( obj instanceof IDOMObject ) return obj;
if ( sw )
{
this.obj = /** @type {EventTarget} */ (obj);
}
else if ( obj )
{
return new IDOMObject( obj, true );
}
else
{
throw new Error( "[Dandelion.IDOMObject] Invalid argument" );
}
}
IDOMObject.prototype.hasListener = function(e)
{
if( e instanceof EventKey
&& this._events
&& this._events.indexOf(e) != -1
)
{
return this._events[ this._events.indexOf(e) ];
}
return null;
};
/**
* @param {*} event
* @param {function(Event): void=} handler
*/
IDOMObject.prototype.addEventListener = function (event, handler)
{
var e;
if (typeof event == "string" && handler)
{
e = new EventKey(event, handler);
}
else if (event instanceof EventKey)
{
e = event;
}
else
{
return false;
}
if ( this._events )
{
if ( this._events.indexOf( e ) < 0 )
{
this._events.push( e );
}
else
{
return false;
}
}
else
{
this._events = new EvtsArr();
this._events[0] = e;
}
if( this.obj.addEventListener )
{
this.obj.addEventListener( e.type, e.handler, false );
}
// IE
else if( this.obj.attachEvent )
{
this.obj.attachEvent('on' + e.type, e.handler);
}
else
{
this.obj['on' + e.type] = e.handler;
}
return true;
};
IDOMObject.prototype.addEventListeners = function(evtKeys)
{
if(evtKeys instanceof Array)
{
for(var i = 0, l = evtKeys.length; i < l; i ++)
{
this.addEventListener(evtKeys[i]);
}
}
};
IDOMObject.prototype.removeEventListener = function( e, handler )
{
if( handler )
{
e = new EventKey( e, handler );
}
if( this._events )
{
delete this._events[ this._events.indexOf(e) ];
}
if( this.obj.removeEventListener )
{
this.obj.removeEventListener( e.type, e.handler );
}
// IE
else if( this.obj.detachEvent )
{
this.obj.detachEvent( 'on' + e.type, e.handler );
}
else
{
this.obj['on' + e.type] = null;
}
};
ns[ NS_EXPORT ]( EX_CLASS, "IDOMObject", IDOMObject );
})();