123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- sNotifyMouseUp = "mouseup";
- sNotifyMouseDown = "mousedown";
- function CWndObserver(id) {
- this.m_cObserver = new CObserver(this);
- this.id = id;
- this.toRemoveLisenters = new Array();
- this.nesting=0;
- }
- function CWndObserver_addListener(listener, callback, evt) {
- this.m_cObserver.attach(listener, callback, evt);
- }
- function CWndObserver_removeWhenDone(listener) {
- this.toRemoveLisenters.push(listener);
- }
- function CWndObserver_removeListener(listener) {
- var observers = this.m_cObserver.m_observers;
- var length = observers.length;
- var tmpArray = new Array();
- for (var i=0;i < length;i++) {
- if (observers[i].getObserver() != listener) {
- tmpArray.push(observers[i]);
- }
- }
- this.m_cObserver.m_observers = tmpArray;
- }
- function CWndObserver_removeListenerById(id) {
- var observers = this.m_cObserver.m_observers;
- var length = observers.length;
- var tmpArray = new Array();
- for (var i=0;i < length;i++) {
- if (observers[i].getObserver().id == id) {
- this.removeListener(observers[i].getObserver());
- }
- }
- }
- function CWndObserver_update(event) {
- this.notify(event, event.type);
- }
- function CWndObserver_attachEvent(obj, handlerStr) {
-
-
- var handler = obj["on" + handlerStr];
- if (handler) {
-
-
- eventHandlerChainUtil.doEventHandlerChain(obj, handlerStr, this);
- } else {
- obj["on" + handlerStr] = function() {
- document.body.getWndObserver().notify(this,handlerStr);
- }
- }
- }
- function CWndObserver_privateCheckObjectForHandler(obj, handlerStr) {
-
- handlerStr = "on" + handlerStr;
-
- var attributes = obj.attributes;
- if (attributes) {
- var i = 0;
- for (i = 0; i < attributes.length && !handler; i++) {
- if (attributes[i].name == handlerStr) {
- return true;
- }
- }
- }
- }
- function CWndObserver_attachFrames(evt,frame) {
- var frame = frame?frame:window;
- var framesCount = frame.frames.length;
- for(var i = 0; i < framesCount; ++i) {
-
-
-
- if (frame.frames[i].document.body && !frame.frames[i].document.body.getWndObserver) {
- frame.frames[i].document.body.oWndObserver = new CWndObserver(frame.frames[i].name);
- frame.frames[i].document.body.getWndObserver = function() {
- return this.oWndObserver;
- }
-
- frame.frames[i].document.body.oWndObserver.attachEvent(frame.frames[i].document.body,evt);
-
-
-
- }
-
- if (frame.frames[i].document.body && frame.frames[i].document.body.getWndObserver) {
-
- frame.frames[i].document.body.getWndObserver().removeListener(this);
-
- frame.frames[i].document.body.getWndObserver().addListener(this, this.notify, evt);
- }
- }
- }
- function CWndObserver_notify(obj, evt) {
- evt = (evt == null || evt == 'undefined')? obj.type : evt;
- evt = (evt == null || evt == 'undefined')? obj.m_evt : evt;
- this.privateNotify(obj, evt);
- }
- function CWndObserver_notifyMouseUp(obj) {
- this.privateNotify(obj, sNotifyMouseUp);
- }
- function CWndObserver_notifyMouseDown(obj) {
- this.privateNotify(obj, "mousedown");
- }
- function CWndObserver_privateNotify(obj, evt) {
-
- if (this.nesting!=0) return;
-
- var src = (obj.m_observer && obj.m_subject)? obj.m_subject : obj;
- evt = (evt == null || evt == 'undefined')? src.m_evt : evt;
-
-
-
- var cachedObservers = this.m_cObserver.m_observers;
- var tmpObservers = new Array();
- for (var i = 0; i < cachedObservers.length; i++) {
- if (src != cachedObservers[i].m_observer)
- tmpObservers.push(this.m_cObserver.m_observers[i]);
- }
-
-
- this.m_cObserver.m_observers = tmpObservers;
- this.nesting++;
- this.m_cObserver.notify(evt);
- this.nesting--;
- this.m_cObserver.m_observers = cachedObservers;
-
-
-
- for(var i=0; i<this.toRemoveLisenters.length;i++) {
- this.removeListener(this.toRemoveLisenters[i]);
- }
-
- this.toRemoveLisenters = new Array();
- }
- CWndObserver.prototype.privateNotify = CWndObserver_privateNotify;
- CWndObserver.prototype.addListener = CWndObserver_addListener;
- CWndObserver.prototype.removeListener = CWndObserver_removeListener;
- CWndObserver.prototype.removeListenerById = CWndObserver_removeListenerById;
- CWndObserver.prototype.removeWhenDone = CWndObserver_removeWhenDone;
- CWndObserver.prototype.attachEvent = CWndObserver_attachEvent;
- CWndObserver.prototype.notify = CWndObserver_notify;
- CWndObserver.prototype.attachFrames = CWndObserver_attachFrames;
- CWndObserver.prototype.update = CWndObserver_update;
- CWndObserver.prototype.mouseup = CWndObserver_notifyMouseUp;
- CWndObserver.prototype.mousedown = CWndObserver_notifyMouseDown;
|