126 lines
2.8 KiB
JavaScript
126 lines
2.8 KiB
JavaScript
/**
|
|
* global.js
|
|
* by Garrett Smith
|
|
* Provides functionality for extending custom classes.
|
|
*
|
|
* ElementWrapper is a simple wrapper class.
|
|
*
|
|
* EventQueue provides Event Listener Functionality.
|
|
*/
|
|
|
|
|
|
/** Provides functionality for extending classes.
|
|
*
|
|
*/
|
|
Function.prototype.extend = function(souper) {
|
|
this.prototype = new souper;
|
|
this.prototype.constructor = this;
|
|
this.souper = souper;
|
|
this.prototype.souper = souper;
|
|
};
|
|
/** Generic Element Wrapper
|
|
*
|
|
*/
|
|
ElementWrapper = function ElementWrapper(el){
|
|
if(arguments.length == 0) return;
|
|
this.el = el;
|
|
this.id = el.id;
|
|
if(!ElementWrapper.list[this.id])
|
|
ElementWrapper.list[this.id] = this;
|
|
};
|
|
|
|
ElementWrapper.list = new function(){};
|
|
|
|
ElementWrapper.getWrapper = function(id){
|
|
return ElementWrapper.list[id];
|
|
};
|
|
|
|
|
|
/** EventQueue class Provides Event Listener Functionality.
|
|
*
|
|
* Instance Methods:
|
|
*
|
|
* addEventListener(etype, pointer)
|
|
*
|
|
*
|
|
*/
|
|
EventQueue = function EventQueue(eventObj){
|
|
if(arguments.length == 0) return;
|
|
this.souper = EventQueue.souper;
|
|
this.souper(eventObj);
|
|
|
|
this.addToPool();
|
|
};
|
|
|
|
EventQueue.extend(ElementWrapper);
|
|
|
|
EventQueue.prototype.addEventListener = function(etype, pointer){
|
|
var list = this.eventHandlerList(etype);
|
|
return list[list.length++] = pointer;
|
|
};
|
|
|
|
EventQueue.prototype.eventHandlerList = function(etype){
|
|
|
|
if(!this[etype])
|
|
this[etype] = new EventQueue.EventHandler(this, etype);
|
|
|
|
return this[etype];
|
|
};
|
|
|
|
EventQueue.prototype.removeEventListener = function(etype, pointer){
|
|
var list = this[etype];
|
|
var len = list.length;
|
|
if(len == 0) return null;
|
|
|
|
var newList = new Array(len-1);
|
|
var rtn = null;
|
|
for(var i = 0; i < len; i++)
|
|
if(list[i] != pointer)
|
|
newList[i] = list[i];
|
|
else rtn = pointer;
|
|
|
|
this[etype] = newList;
|
|
return rtn;
|
|
};
|
|
|
|
|
|
EventQueue.prototype.handleEvent = function(e){
|
|
|
|
var rtn = true;
|
|
for(var i = 0, len = this[e].length; i < len; i++){
|
|
this.tempFunction = this[e][i];
|
|
if(rtn != false)
|
|
rtn = this.tempFunction();
|
|
}
|
|
return rtn;
|
|
};
|
|
|
|
EventQueue.prototype.addToPool = function(){
|
|
if(!EventQueue.list[this.id])
|
|
EventQueue.list[this.id] = this;
|
|
};
|
|
|
|
|
|
/** EventQueue.EventHandler is private to EventQueue class.
|
|
* Instantiation and method calls are made automatically from
|
|
* EventQueue constructor and instance methods.
|
|
*/
|
|
EventQueue.EventHandler = function EventHandler(wrapper, etype){
|
|
this.etype = etype;
|
|
this.length = 0;
|
|
this.id = wrapper.id;
|
|
wrapper.el[etype] = new Function("return EventQueue.fireEvent('"+wrapper.id+"', '"+etype+"')");
|
|
};
|
|
|
|
EventQueue.fireEvent = function(id, e){
|
|
var wrapper = EventQueue.list[id];
|
|
if(!wrapper) return false;
|
|
var r = wrapper.handleEvent(e);
|
|
return r;
|
|
|
|
};
|
|
EventQueue.EventHandler.prototype.toString = function toString(){
|
|
return this.id +"." +this.etype;
|
|
};
|
|
|
|
EventQueue.list = new Object;
|