lib/js/cometio.js in sinatra-cometio-0.0.7 vs lib/js/cometio.js in sinatra-cometio-0.0.8

- old
+ new

@@ -54,24 +54,33 @@ } ); }; this.events = new Array(); - this.on = function(type, listener){ + this.on = function(type, listener, opts){ if(typeof listener !== "function") return; var event_id = self.events.length > 0 ? 1 + self.events[self.events.length-1].id : 0 - self.events.push({ + var params = { id: event_id, type: type, listener: listener - }); + }; + for(i in opts){ + if(!params[i]) params[i] = opts[i]; + }; + self.events.push(params); return event_id; }; + this.once = function(type, listener){ + this.on(type, listener, {once: true}); + }; + this.emit = function(type, data){ for(var i = 0; i < self.events.length; i++){ var e = self.events[i]; if(e.type == type) e.listener(data); + if(e.once) this.removeListener(e.id); } }; this.removeListener = function(id_or_type){ for(var i = self.events.length-1; i >= 0; i--){