/** * Q microframework: */ var Q = { "__listeners__": {}, "__view__": {}, "EventEmitter": function(object) { object.__listeners__ = {}; object.addEventListener = object.on = this.addEventListener; object.removeEventListener = this.removeEventListener; object.getEventListeners = this.getEventListeners; object.clearEventListeners = this.clearEventListeners; object.emit = this.emit; }, "addEventListener": function(eventName, listener) { eventName in this.__listeners__ ? this.__listeners__[eventName].push(listener) : this.__listeners__[eventName] = [listener]; return listener; }, "removeEventListener": function(eventName, listener) { if (eventName in this.__listeners__) { for (var i in this.__listeners__[eventName]) if (this.__listeners__[eventName].hasOwnProperty(i)) if (this.__listeners__[eventName][i] === listener) this.__listeners__[eventName].splice(i, 1); } }, "getEventListeners": function(eventName) { if (eventName in this.__listeners__) return this.__listeners__[eventName]; return null; }, "clearEventListeners": function(eventName) { delete this.__listeners__[eventName]; }, "emit": function(eventName, eventData) { eventData = eventData || null; if (eventName in this.__listeners__) { for (var i in this.__listeners__[eventName]) if (this.__listeners__[eventName].hasOwnProperty(i)) this.__listeners__[eventName][i](eventData); } }, "__init__": function(viewName, parent) { if (!(viewName in this.__view__)) return; for (var i in this.__view__[viewName]) if (this.__view__[viewName].hasOwnProperty(i)) { var element = $(i, parent); if (element.length) { this.__view__[viewName][i]["__init__"] && this.__view__[viewName][i]["__init__"].call(element); for (var l in this.__view__[viewName][i]) if (this.__view__[viewName][i].hasOwnProperty(l)) { if (l == "__init__") continue; element.bind(l, this.__view__[viewName][i][l]); } } } }, "register": function() { var viewName = arguments.length == 1 ? "global" : arguments[0], processors = viewName == "global" ? arguments[0] : arguments[1]; this.__view__[viewName] = viewName in this.__view__ ? jQuery.extend(true, this.__view__[viewName], processors) : processors; return this; }, "exec": function(viewName, element) { viewName = viewName || "global"; element = element || document.documentElement; $(function() { Q.__init__(viewName, element); }); } }; // "on" alias: Q.on = Q.addEventListener;