webgui/www/extras/tabs/global.js
2003-02-23 16:56:55 +00:00

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;