130 lines
4.6 KiB
JavaScript
130 lines
4.6 KiB
JavaScript
goog.provide("goog.events.EventHandler");
|
|
goog.require("goog.Disposable");
|
|
goog.require("goog.events");
|
|
goog.require("goog.object");
|
|
goog.requireType("goog.events.Event");
|
|
goog.requireType("goog.events.EventId");
|
|
goog.requireType("goog.events.EventTarget");
|
|
goog.requireType("goog.events.EventWrapper");
|
|
goog.events.EventHandler = function(opt_scope) {
|
|
goog.Disposable.call(this);
|
|
this.handler_ = opt_scope;
|
|
this.keys_ = {};
|
|
};
|
|
goog.inherits(goog.events.EventHandler, goog.Disposable);
|
|
goog.events.EventHandler.typeArray_ = [];
|
|
goog.events.EventHandler.prototype.listen = function(src, type, opt_fn, opt_options) {
|
|
var self = this;
|
|
return self.listen_(src, type, opt_fn, opt_options);
|
|
};
|
|
goog.events.EventHandler.prototype.listenWithScope = function(src, type, fn, options, scope) {
|
|
var self = this;
|
|
return self.listen_(src, type, fn, options, scope);
|
|
};
|
|
goog.events.EventHandler.prototype.listen_ = function(src, type, opt_fn, opt_options, opt_scope) {
|
|
var self = this;
|
|
if (!Array.isArray(type)) {
|
|
if (type) {
|
|
goog.events.EventHandler.typeArray_[0] = type.toString();
|
|
}
|
|
type = goog.events.EventHandler.typeArray_;
|
|
}
|
|
var i = 0;
|
|
for (; i < type.length; i++) {
|
|
var listenerObj = goog.events.listen(src, type[i], opt_fn || self.handleEvent, opt_options || false, opt_scope || self.handler_ || self);
|
|
if (!listenerObj) {
|
|
return self;
|
|
}
|
|
var key = listenerObj.key;
|
|
self.keys_[key] = listenerObj;
|
|
}
|
|
return self;
|
|
};
|
|
goog.events.EventHandler.prototype.listenOnce = function(src, type, opt_fn, opt_options) {
|
|
var self = this;
|
|
return self.listenOnce_(src, type, opt_fn, opt_options);
|
|
};
|
|
goog.events.EventHandler.prototype.listenOnceWithScope = function(src, type, fn, capture, scope) {
|
|
var self = this;
|
|
return self.listenOnce_(src, type, fn, capture, scope);
|
|
};
|
|
goog.events.EventHandler.prototype.listenOnce_ = function(src, type, opt_fn, opt_options, opt_scope) {
|
|
var self = this;
|
|
if (Array.isArray(type)) {
|
|
var i = 0;
|
|
for (; i < type.length; i++) {
|
|
self.listenOnce_(src, type[i], opt_fn, opt_options, opt_scope);
|
|
}
|
|
} else {
|
|
var listenerObj = goog.events.listenOnce(src, type, opt_fn || self.handleEvent, opt_options, opt_scope || self.handler_ || self);
|
|
if (!listenerObj) {
|
|
return self;
|
|
}
|
|
var key = listenerObj.key;
|
|
self.keys_[key] = listenerObj;
|
|
}
|
|
return self;
|
|
};
|
|
goog.events.EventHandler.prototype.listenWithWrapper = function(src, wrapper, listener, opt_capt) {
|
|
var self = this;
|
|
return self.listenWithWrapper_(src, wrapper, listener, opt_capt);
|
|
};
|
|
goog.events.EventHandler.prototype.listenWithWrapperAndScope = function(src, wrapper, listener, capture, scope) {
|
|
var self = this;
|
|
return self.listenWithWrapper_(src, wrapper, listener, capture, scope);
|
|
};
|
|
goog.events.EventHandler.prototype.listenWithWrapper_ = function(src, wrapper, listener, opt_capt, opt_scope) {
|
|
var self = this;
|
|
wrapper.listen(src, listener, opt_capt, opt_scope || self.handler_ || self, self);
|
|
return self;
|
|
};
|
|
goog.events.EventHandler.prototype.getListenerCount = function() {
|
|
var count = 0;
|
|
var key;
|
|
for (key in this.keys_) {
|
|
if (Object.prototype.hasOwnProperty.call(this.keys_, key)) {
|
|
count++;
|
|
}
|
|
}
|
|
return count;
|
|
};
|
|
goog.events.EventHandler.prototype.unlisten = function(src, type, opt_fn, opt_options, opt_scope) {
|
|
var self = this;
|
|
if (Array.isArray(type)) {
|
|
var i = 0;
|
|
for (; i < type.length; i++) {
|
|
self.unlisten(src, type[i], opt_fn, opt_options, opt_scope);
|
|
}
|
|
} else {
|
|
var capture = goog.isObject(opt_options) ? !!opt_options.capture : !!opt_options;
|
|
var listener = goog.events.getListener(src, type, opt_fn || self.handleEvent, capture, opt_scope || self.handler_ || self);
|
|
if (listener) {
|
|
goog.events.unlistenByKey(listener);
|
|
delete self.keys_[listener.key];
|
|
}
|
|
}
|
|
return self;
|
|
};
|
|
goog.events.EventHandler.prototype.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_scope) {
|
|
var self = this;
|
|
wrapper.unlisten(src, listener, opt_capt, opt_scope || self.handler_ || self, self);
|
|
return self;
|
|
};
|
|
goog.events.EventHandler.prototype.removeAll = function() {
|
|
goog.object.forEach(this.keys_, function(listenerObj, key) {
|
|
if (this.keys_.hasOwnProperty(key)) {
|
|
goog.events.unlistenByKey(listenerObj);
|
|
}
|
|
}, this);
|
|
this.keys_ = {};
|
|
};
|
|
goog.events.EventHandler.prototype.disposeInternal = function() {
|
|
goog.events.EventHandler.superClass_.disposeInternal.call(this);
|
|
this.removeAll();
|
|
};
|
|
goog.events.EventHandler.prototype.handleEvent = function(e) {
|
|
throw new Error("EventHandler.handleEvent not implemented");
|
|
};
|
|
|
|
//# sourceMappingURL=goog.events.eventhandler.js.map
|