wigjs
Version:
Minimalistic, scalable, extensible, dependency-less Front-end factory for HTML5 applications
58 lines (47 loc) • 1.62 kB
JavaScript
var UIEventProxy = module.UIEventProxy = Class.extend({
listeners: [],
constructor: function (DOM, ViewManager) {
this.DOM = DOM;
this.ViewManager = ViewManager;
this.listener = this.listener.bind(this);
},
findFirstViewAndFireEvent: function (event, view) {
do {
// find the first view that is listening to the same type of event
if (env.viewHelper.hasEvent(view, event)) {
env.viewHelper.fireDOMEvent(view, event);
return;
}
view = this.ViewManager.getParentView(view);
} while (view);
},
addListener: function (node, type) {
node.addEventListener(type, this.listener);
},
removeListener: function (node, type) {
node.removeEventListener(type, this.listener);
},
listener: function (event) {
var viewID = this.DOM.findClosestViewNode(event.target, VIEW_DATA_ATTRIBUTE),
view = this.ViewManager.getView(viewID);
if (view) {
return this.findFirstViewAndFireEvent(event, view);
}
},
startListenTo: function (type) {
if (!this.isListeningTo(type)) {
this.listeners.push(type);
this.addListener(document, type);
}
},
stopListenTo: function (type) {
var index = this.listeners.indexOf(type);
if (index > -1) {
this.removeListener(document, type);
this.listeners.splice(index, 1);
}
},
isListeningTo: function (type) {
return (this.listeners.indexOf(type) > -1);
}
});