rfaye 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,27 @@
1
+ @.Rfaye =
2
+ subs: {}
3
+ sub: (channel, func, overwrite=false) ->
4
+ channel = "/" + channel if channel.substring(0,1) != "/"
5
+ if !Rfaye.subs[channel]
6
+ if !func
7
+ func = (data) ->
8
+ try
9
+ eval data
10
+ catch e
11
+ eval("""(#{data}).call(this)""")
12
+ Rfaye.subs[channel] = new Faye.Client("""http://#{window.location.hostname}:9292/faye""").subscribe(channel, func)
13
+ else if overwrite
14
+ Rfaye.subs[channel].cancel();
15
+ Rfaye.subs[channel] = undefined
16
+ Rfaye.sub(channel,func)
17
+ null
18
+
19
+ un_sub: (channel) ->
20
+ channel = "/" + channel if channel.substring(0,1) != "/"
21
+ Rfaye.subs[channel].cancel() if Rfaye.subs[channel]
22
+ null
23
+
24
+ pub: (channel,data) ->
25
+ channel = "/" + channel if channel.substring(0,1) != "/"
26
+ new Faye.Client("""http://#{window.location.hostname}:9292/faye""").publish(channel, if typeof data == "function" then data.toString() else data)
27
+ null
@@ -0,0 +1,55 @@
1
+ // Generated by CoffeeScript 1.10.0
2
+ (function() {
3
+ this.Rfaye = {
4
+ subs: {},
5
+ sub: function(channel, func, overwrite) {
6
+ if (overwrite == null) {
7
+ overwrite = false;
8
+ }
9
+ if (channel.substring(0, 1) !== "/") {
10
+ channel = "/" + channel;
11
+ }
12
+ if (!Rfaye.subs[channel]) {
13
+ if (!func) {
14
+ func = function(data) {
15
+ console.log("data: ",data)
16
+ var e, error;
17
+ try {
18
+ return eval(data);
19
+ } catch (error) {
20
+ e = error;
21
+ if (e instanceof SyntaxError) {
22
+ // return eval(data.substring(data.indexOf("{") + 1, data.lastIndexOf("}")));
23
+ return eval("("+data+").call(this)")
24
+ }
25
+ }
26
+ };
27
+ }
28
+ Rfaye.subs[channel] = new Faye.Client("http://" + window.location.hostname + ":9292/faye").subscribe(channel, func);
29
+ } else if (overwrite) {
30
+ Rfaye.subs[channel].cancel();
31
+ Rfaye.subs[channel] = void 0;
32
+ Rfaye.sub(channel, func);
33
+ }
34
+ return null;
35
+ },
36
+ un_sub: function(channel) {
37
+ if (channel.substring(0, 1) !== "/") {
38
+ channel = "/" + channel;
39
+ }
40
+ if (Rfaye.subs[channel]) {
41
+ Rfaye.subs[channel].cancel();
42
+ }
43
+ return null;
44
+ },
45
+ pub: function(channel, data) {
46
+ if (channel.substring(0, 1) !== "/") {
47
+ channel = "/" + channel;
48
+ }
49
+ new Faye.Client("http://" + window.location.hostname + ":9292/faye").publish(channel, typeof data === "function" ? data.toString() : data);
50
+ //new Faye.Client("http://" + window.location.hostname + ":9292/faye").publish(channel, data);
51
+ return null;
52
+ }
53
+ };
54
+
55
+ }).call(this);
@@ -0,0 +1,3 @@
1
+ (function(){"use strict";var Faye={VERSION:"1.1.1",BAYEUX_VERSION:"1.0",ID_LENGTH:160,JSONP_CALLBACK:"jsonpcallback",CONNECTION_TYPES:["long-polling","cross-origin-long-polling","callback-polling","websocket","eventsource","in-process"],MANDATORY_CONNECTION_TYPES:["long-polling","callback-polling","in-process"],ENV:typeof window!=="undefined"?window:global,extend:function(dest,source,overwrite){if(!source)return dest;for(var key in source){if(!source.hasOwnProperty(key))continue;if(dest.hasOwnProperty(key)&&overwrite===false)continue;if(dest[key]!==source[key])dest[key]=source[key]}return dest},random:function(bitlength){bitlength=bitlength||this.ID_LENGTH;var maxLength=Math.ceil(bitlength*Math.log(2)/Math.log(36));var string=csprng(bitlength,36);while(string.length<maxLength)string="0"+string;return string},validateOptions:function(options,validKeys){for(var key in options){if(this.indexOf(validKeys,key)<0)throw new Error("Unrecognized option: "+key)}},clientIdFromMessages:function(messages){var connect=this.filter([].concat(messages),function(message){return message.channel==="/meta/connect"});return connect[0]&&connect[0].clientId},copyObject:function(object){var clone,i,key;if(object instanceof Array){clone=[];i=object.length;while(i--)clone[i]=Faye.copyObject(object[i]);return clone}else if(typeof object==="object"){clone=object===null?null:{};for(key in object)clone[key]=Faye.copyObject(object[key]);return clone}else{return object}},commonElement:function(lista,listb){for(var i=0,n=lista.length;i<n;i++){if(this.indexOf(listb,lista[i])!==-1)return lista[i]}return null},indexOf:function(list,needle){if(list.indexOf)return list.indexOf(needle);for(var i=0,n=list.length;i<n;i++){if(list[i]===needle)return i}return-1},map:function(object,callback,context){if(object.map)return object.map(callback,context);var result=[];if(object instanceof Array){for(var i=0,n=object.length;i<n;i++){result.push(callback.call(context||null,object[i],i))}}else{for(var key in object){if(!object.hasOwnProperty(key))continue;result.push(callback.call(context||null,key,object[key]))}}return result},filter:function(array,callback,context){if(array.filter)return array.filter(callback,context);var result=[];for(var i=0,n=array.length;i<n;i++){if(callback.call(context||null,array[i],i))result.push(array[i])}return result},asyncEach:function(list,iterator,callback,context){var n=list.length,i=-1,calls=0,looping=false;var iterate=function(){calls-=1;i+=1;if(i===n)return callback&&callback.call(context);iterator(list[i],resume)};var loop=function(){if(looping)return;looping=true;while(calls>0)iterate();looping=false};var resume=function(){calls+=1;loop()};resume()},toJSON:function(object){if(!this.stringify)return JSON.stringify(object);return this.stringify(object,function(key,value){return this[key]instanceof Array?this[key]:value})}};if(typeof module!=="undefined")module.exports=Faye;else if(typeof window!=="undefined")window.Faye=Faye;Faye.Class=function(parent,methods){if(typeof parent!=="function"){methods=parent;parent=Object}var klass=function(){if(!this.initialize)return this;return this.initialize.apply(this,arguments)||this};var bridge=function(){};bridge.prototype=parent.prototype;klass.prototype=new bridge;Faye.extend(klass.prototype,methods);return klass};(function(){var EventEmitter=Faye.EventEmitter=function(){};var isArray=typeof Array.isArray==="function"?Array.isArray:function(xs){return Object.prototype.toString.call(xs)==="[object Array]"};function indexOf(xs,x){if(xs.indexOf)return xs.indexOf(x);for(var i=0;i<xs.length;i++){if(x===xs[i])return i}return-1}EventEmitter.prototype.emit=function(type){if(type==="error"){if(!this._events||!this._events.error||isArray(this._events.error)&&!this._events.error.length){if(arguments[1]instanceof Error){throw arguments[1]}else{throw new Error("Uncaught, unspecified 'error' event.")}return false}}if(!this._events)return false;var handler=this._events[type];if(!handler)return false;if(typeof handler=="function"){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:var args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}return true}else if(isArray(handler)){var args=Array.prototype.slice.call(arguments,1);var listeners=handler.slice();for(var i=0,l=listeners.length;i<l;i++){listeners[i].apply(this,args)}return true}else{return false}};EventEmitter.prototype.addListener=function(type,listener){if("function"!==typeof listener){throw new Error("addListener only takes instances of Function")}if(!this._events)this._events={};this.emit("newListener",type,listener);if(!this._events[type]){this._events[type]=listener}else if(isArray(this._events[type])){this._events[type].push(listener)}else{this._events[type]=[this._events[type],listener]}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){var self=this;self.on(type,function g(){self.removeListener(type,g);listener.apply(this,arguments)});return this};EventEmitter.prototype.removeListener=function(type,listener){if("function"!==typeof listener){throw new Error("removeListener only takes instances of Function")}if(!this._events||!this._events[type])return this;var list=this._events[type];if(isArray(list)){var i=indexOf(list,listener);if(i<0)return this;list.splice(i,1);if(list.length==0)delete this._events[type]}else if(this._events[type]===listener){delete this._events[type]}return this};EventEmitter.prototype.removeAllListeners=function(type){if(arguments.length===0){this._events={};return this}if(type&&this._events&&this._events[type])this._events[type]=null;return this};EventEmitter.prototype.listeners=function(type){if(!this._events)this._events={};if(!this._events[type])this._events[type]=[];if(!isArray(this._events[type])){this._events[type]=[this._events[type]]}return this._events[type]}})();Faye.Namespace=Faye.Class({initialize:function(){this._used={}},exists:function(id){return this._used.hasOwnProperty(id)},generate:function(){var name=Faye.random();while(this._used.hasOwnProperty(name))name=Faye.random();return this._used[name]=name},release:function(id){delete this._used[id]}});(function(){"use strict";var timeout=setTimeout,defer;if(typeof setImmediate==="function")defer=function(fn){setImmediate(fn)};else if(typeof process==="object"&&process.nextTick)defer=function(fn){process.nextTick(fn)};else defer=function(fn){timeout(fn,0)};var PENDING=0,FULFILLED=1,REJECTED=2;var RETURN=function(x){return x},THROW=function(x){throw x};var Promise=function(task){this._state=PENDING;this._onFulfilled=[];this._onRejected=[];if(typeof task!=="function")return;var self=this;task(function(value){fulfill(self,value)},function(reason){reject(self,reason)})};Promise.prototype.then=function(onFulfilled,onRejected){var next=new Promise;registerOnFulfilled(this,onFulfilled,next);registerOnRejected(this,onRejected,next);return next};var registerOnFulfilled=function(promise,onFulfilled,next){if(typeof onFulfilled!=="function")onFulfilled=RETURN;var handler=function(value){invoke(onFulfilled,value,next)};if(promise._state===PENDING){promise._onFulfilled.push(handler)}else if(promise._state===FULFILLED){handler(promise._value)}};var registerOnRejected=function(promise,onRejected,next){if(typeof onRejected!=="function")onRejected=THROW;var handler=function(reason){invoke(onRejected,reason,next)};if(promise._state===PENDING){promise._onRejected.push(handler)}else if(promise._state===REJECTED){handler(promise._reason)}};var invoke=function(fn,value,next){defer(function(){_invoke(fn,value,next)})};var _invoke=function(fn,value,next){var outcome;try{outcome=fn(value)}catch(error){return reject(next,error)}if(outcome===next){reject(next,new TypeError("Recursive promise chain detected"))}else{fulfill(next,outcome)}};var fulfill=Promise.fulfill=Promise.resolve=function(promise,value){var called=false,type,then;try{type=typeof value;then=value!==null&&(type==="function"||type==="object")&&value.then;if(typeof then!=="function")return _fulfill(promise,value);then.call(value,function(v){if(!(called^(called=true)))return;fulfill(promise,v)},function(r){if(!(called^(called=true)))return;reject(promise,r)})}catch(error){if(!(called^(called=true)))return;reject(promise,error)}};var _fulfill=function(promise,value){if(promise._state!==PENDING)return;promise._state=FULFILLED;promise._value=value;promise._onRejected=[];var onFulfilled=promise._onFulfilled,fn;while(fn=onFulfilled.shift())fn(value)};var reject=Promise.reject=function(promise,reason){if(promise._state!==PENDING)return;promise._state=REJECTED;promise._reason=reason;promise._onFulfilled=[];var onRejected=promise._onRejected,fn;while(fn=onRejected.shift())fn(reason)};Promise.all=function(promises){return new Promise(function(fulfill,reject){var list=[],n=promises.length,i;if(n===0)return fulfill(list);for(i=0;i<n;i++)(function(promise,i){Promise.fulfilled(promise).then(function(value){list[i]=value;if(--n===0)fulfill(list)},reject)})(promises[i],i)})};Promise.defer=defer;Promise.deferred=Promise.pending=function(){var tuple={};tuple.promise=new Promise(function(fulfill,reject){tuple.fulfill=tuple.resolve=fulfill;tuple.reject=reject});return tuple};Promise.fulfilled=Promise.resolved=function(value){return new Promise(function(fulfill,reject){fulfill(value)})};Promise.rejected=function(reason){return new Promise(function(fulfill,reject){reject(reason)})};if(typeof Faye==="undefined")module.exports=Promise;else Faye.Promise=Promise})();Faye.Set=Faye.Class({initialize:function(){this._index={}},add:function(item){var key=item.id!==undefined?item.id:item;if(this._index.hasOwnProperty(key))return false;this._index[key]=item;return true},forEach:function(block,context){for(var key in this._index){if(this._index.hasOwnProperty(key))block.call(context,this._index[key])}},isEmpty:function(){for(var key in this._index){if(this._index.hasOwnProperty(key))return false}return true},member:function(item){for(var key in this._index){if(this._index[key]===item)return true}return false},remove:function(item){var key=item.id!==undefined?item.id:item;var removed=this._index[key];delete this._index[key];return removed},toArray:function(){var array=[];this.forEach(function(item){array.push(item)});return array}});Faye.URI={isURI:function(uri){return uri&&uri.protocol&&uri.host&&uri.path},isSameOrigin:function(uri){var location=Faye.ENV.location;return uri.protocol===location.protocol&&uri.hostname===location.hostname&&uri.port===location.port},parse:function(url){if(typeof url!=="string")return url;var uri={},parts,query,pairs,i,n,data;var consume=function(name,pattern){url=url.replace(pattern,function(match){uri[name]=match;return""});uri[name]=uri[name]||""};consume("protocol",/^[a-z]+\:/i);consume("host",/^\/\/[^\/\?#]+/);if(!/^\//.test(url)&&!uri.host)url=Faye.ENV.location.pathname.replace(/[^\/]*$/,"")+url;consume("pathname",/^[^\?#]*/);consume("search",/^\?[^#]*/);consume("hash",/^#.*/);uri.protocol=uri.protocol||Faye.ENV.location.protocol;if(uri.host){uri.host=uri.host.substr(2);parts=uri.host.split(":");uri.hostname=parts[0];uri.port=parts[1]||""}else{uri.host=Faye.ENV.location.host;uri.hostname=Faye.ENV.location.hostname;uri.port=Faye.ENV.location.port}uri.pathname=uri.pathname||"/";uri.path=uri.pathname+uri.search;query=uri.search.replace(/^\?/,"");pairs=query?query.split("&"):[];data={};for(i=0,n=pairs.length;i<n;i++){parts=pairs[i].split("=");data[decodeURIComponent(parts[0]||"")]=decodeURIComponent(parts[1]||"")}uri.query=data;uri.href=this.stringify(uri);return uri},stringify:function(uri){var string=uri.protocol+"//"+uri.hostname;if(uri.port)string+=":"+uri.port;string+=uri.pathname+this.queryString(uri.query)+(uri.hash||"");return string},queryString:function(query){var pairs=[];for(var key in query){if(!query.hasOwnProperty(key))continue;pairs.push(encodeURIComponent(key)+"="+encodeURIComponent(query[key]))}if(pairs.length===0)return"";return"?"+pairs.join("&")}};Faye.Error=Faye.Class({initialize:function(code,params,message){this.code=code;this.params=Array.prototype.slice.call(params);this.message=message},toString:function(){return this.code+":"+this.params.join(",")+":"+this.message}});Faye.Error.parse=function(message){message=message||"";if(!Faye.Grammar.ERROR.test(message))return new this(null,[],message);var parts=message.split(":"),code=parseInt(parts[0]),params=parts[1].split(","),message=parts[2];return new this(code,params,message)};Faye.Error.versionMismatch=function(){return new this(300,arguments,"Version mismatch").toString()};Faye.Error.conntypeMismatch=function(){return new this(301,arguments,"Connection types not supported").toString()};Faye.Error.extMismatch=function(){return new this(302,arguments,"Extension mismatch").toString()};Faye.Error.badRequest=function(){return new this(400,arguments,"Bad request").toString()};Faye.Error.clientUnknown=function(){return new this(401,arguments,"Unknown client").toString()};Faye.Error.parameterMissing=function(){return new this(402,arguments,"Missing required parameter").toString()};Faye.Error.channelForbidden=function(){return new this(403,arguments,"Forbidden channel").toString()};Faye.Error.channelUnknown=function(){return new this(404,arguments,"Unknown channel").toString()};Faye.Error.channelInvalid=function(){return new this(405,arguments,"Invalid channel").toString()};Faye.Error.extUnknown=function(){return new this(406,arguments,"Unknown extension").toString()};Faye.Error.publishFailed=function(){return new this(407,arguments,"Failed to publish").toString()};Faye.Error.serverError=function(){return new this(500,arguments,"Internal server error").toString()};Faye.Deferrable={then:function(callback,errback){var self=this;if(!this._promise)this._promise=new Faye.Promise(function(fulfill,reject){self._fulfill=fulfill;self._reject=reject});if(arguments.length===0)return this._promise;else return this._promise.then(callback,errback)},callback:function(callback,context){return this.then(function(value){callback.call(context,value)})},errback:function(callback,context){return this.then(null,function(reason){callback.call(context,reason)})},timeout:function(seconds,message){this.then();var self=this;this._timer=Faye.ENV.setTimeout(function(){self._reject(message)},seconds*1e3)},setDeferredStatus:function(status,value){if(this._timer)Faye.ENV.clearTimeout(this._timer);this.then();if(status==="succeeded")this._fulfill(value);else if(status==="failed")this._reject(value);else delete this._promise}};Faye.Publisher={countListeners:function(eventType){return this.listeners(eventType).length},bind:function(eventType,listener,context){var slice=Array.prototype.slice,handler=function(){listener.apply(context,slice.call(arguments))};this._listeners=this._listeners||[];this._listeners.push([eventType,listener,context,handler]);return this.on(eventType,handler)},unbind:function(eventType,listener,context){this._listeners=this._listeners||[];var n=this._listeners.length,tuple;while(n--){tuple=this._listeners[n];if(tuple[0]!==eventType)continue;if(listener&&(tuple[1]!==listener||tuple[2]!==context))continue;this._listeners.splice(n,1);this.removeListener(eventType,tuple[3])}}};Faye.extend(Faye.Publisher,Faye.EventEmitter.prototype);Faye.Publisher.trigger=Faye.Publisher.emit;Faye.Timeouts={addTimeout:function(name,delay,callback,context){this._timeouts=this._timeouts||{};if(this._timeouts.hasOwnProperty(name))return;var self=this;this._timeouts[name]=Faye.ENV.setTimeout(function(){delete self._timeouts[name];callback.call(context)},1e3*delay)},removeTimeout:function(name){this._timeouts=this._timeouts||{};var timeout=this._timeouts[name];if(!timeout)return;Faye.ENV.clearTimeout(timeout);delete this._timeouts[name]},removeAllTimeouts:function(){this._timeouts=this._timeouts||{};for(var name in this._timeouts)this.removeTimeout(name)}};Faye.Logging={LOG_LEVELS:{fatal:4,error:3,warn:2,info:1,debug:0},writeLog:function(messageArgs,level){if(!Faye.logger)return;var args=Array.prototype.slice.apply(messageArgs),banner="[Faye",klass=this.className,message=args.shift().replace(/\?/g,function(){try{return Faye.toJSON(args.shift())}catch(e){return"[Object]"}});for(var key in Faye){if(klass)continue;if(typeof Faye[key]!=="function")continue;if(this instanceof Faye[key])klass=key}if(klass)banner+="."+klass;banner+="] ";if(typeof Faye.logger[level]==="function")Faye.logger[level](banner+message);else if(typeof Faye.logger==="function")Faye.logger(banner+message)}};(function(){for(var key in Faye.Logging.LOG_LEVELS)(function(level){Faye.Logging[level]=function(){this.writeLog(arguments,level)}})(key)})();Faye.Grammar={CHANNEL_NAME:/^\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+(\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+)*$/,CHANNEL_PATTERN:/^(\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+)*\/\*{1,2}$/,ERROR:/^([0-9][0-9][0-9]:(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)| |\/|\*|\.))*(,(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)| |\/|\*|\.))*)*:(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)| |\/|\*|\.))*|[0-9][0-9][0-9]::(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)| |\/|\*|\.))*)$/,VERSION:/^([0-9])+(\.(([a-z]|[A-Z])|[0-9])(((([a-z]|[A-Z])|[0-9])|\-|\_))*)*$/};Faye.Extensible={addExtension:function(extension){this._extensions=this._extensions||[];this._extensions.push(extension);if(extension.added)extension.added(this)},removeExtension:function(extension){if(!this._extensions)return;var i=this._extensions.length;while(i--){if(this._extensions[i]!==extension)continue;this._extensions.splice(i,1);if(extension.removed)extension.removed(this)}},pipeThroughExtensions:function(stage,message,request,callback,context){this.debug("Passing through ? extensions: ?",stage,message);if(!this._extensions)return callback.call(context,message);var extensions=this._extensions.slice();var pipe=function(message){if(!message)return callback.call(context,message);var extension=extensions.shift();if(!extension)return callback.call(context,message);var fn=extension[stage];if(!fn)return pipe(message);if(fn.length>=3)extension[stage](message,request,pipe);else extension[stage](message,pipe)};pipe(message)}};Faye.extend(Faye.Extensible,Faye.Logging);Faye.Channel=Faye.Class({initialize:function(name){this.id=this.name=name},push:function(message){this.trigger("message",message)},isUnused:function(){return this.countListeners("message")===0}});Faye.extend(Faye.Channel.prototype,Faye.Publisher);Faye.extend(Faye.Channel,{HANDSHAKE:"/meta/handshake",CONNECT:"/meta/connect",SUBSCRIBE:"/meta/subscribe",UNSUBSCRIBE:"/meta/unsubscribe",DISCONNECT:"/meta/disconnect",META:"meta",SERVICE:"service",expand:function(name){var segments=this.parse(name),channels=["/**",name];var copy=segments.slice();copy[copy.length-1]="*";channels.push(this.unparse(copy));for(var i=1,n=segments.length;i<n;i++){copy=segments.slice(0,i);copy.push("**");channels.push(this.unparse(copy))}return channels},isValid:function(name){return Faye.Grammar.CHANNEL_NAME.test(name)||Faye.Grammar.CHANNEL_PATTERN.test(name)},parse:function(name){if(!this.isValid(name))return null;return name.split("/").slice(1)},unparse:function(segments){return"/"+segments.join("/")},isMeta:function(name){var segments=this.parse(name);return segments?segments[0]===this.META:null},isService:function(name){var segments=this.parse(name);return segments?segments[0]===this.SERVICE:null},isSubscribable:function(name){if(!this.isValid(name))return null;return!this.isMeta(name)&&!this.isService(name)},Set:Faye.Class({initialize:function(){this._channels={}},getKeys:function(){var keys=[];for(var key in this._channels)keys.push(key);return keys},remove:function(name){delete this._channels[name]},hasSubscription:function(name){return this._channels.hasOwnProperty(name)},subscribe:function(names,callback,context){var name;for(var i=0,n=names.length;i<n;i++){name=names[i];var channel=this._channels[name]=this._channels[name]||new Faye.Channel(name);if(callback)channel.bind("message",callback,context)}},unsubscribe:function(name,callback,context){var channel=this._channels[name];if(!channel)return false;channel.unbind("message",callback,context);if(channel.isUnused()){this.remove(name);return true}else{return false}},distributeMessage:function(message){var channels=Faye.Channel.expand(message.channel);for(var i=0,n=channels.length;i<n;i++){var channel=this._channels[channels[i]];if(channel)channel.trigger("message",message.data)}}})});Faye.Publication=Faye.Class(Faye.Deferrable);Faye.Subscription=Faye.Class({initialize:function(client,channels,callback,context){this._client=client;this._channels=channels;this._callback=callback;this._context=context;this._cancelled=false},cancel:function(){if(this._cancelled)return;this._client.unsubscribe(this._channels,this._callback,this._context);this._cancelled=true},unsubscribe:function(){this.cancel()}});Faye.extend(Faye.Subscription.prototype,Faye.Deferrable);Faye.Client=Faye.Class({UNCONNECTED:1,CONNECTING:2,CONNECTED:3,DISCONNECTED:4,HANDSHAKE:"handshake",RETRY:"retry",NONE:"none",CONNECTION_TIMEOUT:60,DEFAULT_ENDPOINT:"/bayeux",INTERVAL:0,initialize:function(endpoint,options){this.info("New client created for ?",endpoint);options=options||{};Faye.validateOptions(options,["interval","timeout","endpoints","proxy","retry","scheduler","websocketExtensions","tls","ca"]);this._endpoint=endpoint||this.DEFAULT_ENDPOINT;this._channels=new Faye.Channel.Set;this._dispatcher=new Faye.Dispatcher(this,this._endpoint,options);this._messageId=0;this._state=this.UNCONNECTED;this._responseCallbacks={};this._advice={reconnect:this.RETRY,interval:1e3*(options.interval||this.INTERVAL),timeout:1e3*(options.timeout||this.CONNECTION_TIMEOUT)};this._dispatcher.timeout=this._advice.timeout/1e3;this._dispatcher.bind("message",this._receiveMessage,this);if(Faye.Event&&Faye.ENV.onbeforeunload!==undefined)Faye.Event.on(Faye.ENV,"beforeunload",function(){if(Faye.indexOf(this._dispatcher._disabled,"autodisconnect")<0)this.disconnect()},this)},addWebsocketExtension:function(extension){return this._dispatcher.addWebsocketExtension(extension)},disable:function(feature){return this._dispatcher.disable(feature)},setHeader:function(name,value){return this._dispatcher.setHeader(name,value)},handshake:function(callback,context){if(this._advice.reconnect===this.NONE)return;if(this._state!==this.UNCONNECTED)return;this._state=this.CONNECTING;var self=this;this.info("Initiating handshake with ?",Faye.URI.stringify(this._endpoint));this._dispatcher.selectTransport(Faye.MANDATORY_CONNECTION_TYPES);this._sendMessage({channel:Faye.Channel.HANDSHAKE,version:Faye.BAYEUX_VERSION,supportedConnectionTypes:this._dispatcher.getConnectionTypes()},{},function(response){if(response.successful){this._state=this.CONNECTED;this._dispatcher.clientId=response.clientId;this._dispatcher.selectTransport(response.supportedConnectionTypes);this.info("Handshake successful: ?",this._dispatcher.clientId);this.subscribe(this._channels.getKeys(),true);if(callback)Faye.Promise.defer(function(){callback.call(context)})}else{this.info("Handshake unsuccessful");Faye.ENV.setTimeout(function(){self.handshake(callback,context)},this._dispatcher.retry*1e3);this._state=this.UNCONNECTED}},this)},connect:function(callback,context){if(this._advice.reconnect===this.NONE)return;if(this._state===this.DISCONNECTED)return;if(this._state===this.UNCONNECTED)return this.handshake(function(){this.connect(callback,context)},this);this.callback(callback,context);if(this._state!==this.CONNECTED)return;this.info("Calling deferred actions for ?",this._dispatcher.clientId);this.setDeferredStatus("succeeded");this.setDeferredStatus("unknown");if(this._connectRequest)return;this._connectRequest=true;this.info("Initiating connection for ?",this._dispatcher.clientId);this._sendMessage({channel:Faye.Channel.CONNECT,clientId:this._dispatcher.clientId,connectionType:this._dispatcher.connectionType},{},this._cycleConnection,this)},disconnect:function(){if(this._state!==this.CONNECTED)return;this._state=this.DISCONNECTED;this.info("Disconnecting ?",this._dispatcher.clientId);var promise=new Faye.Publication;this._sendMessage({channel:Faye.Channel.DISCONNECT,clientId:this._dispatcher.clientId},{},function(response){if(response.successful){this._dispatcher.close();promise.setDeferredStatus("succeeded")}else{promise.setDeferredStatus("failed",Faye.Error.parse(response.error))}},this);this.info("Clearing channel listeners for ?",this._dispatcher.clientId);this._channels=new Faye.Channel.Set;return promise},subscribe:function(channel,callback,context){if(channel instanceof Array)return Faye.map(channel,function(c){return this.subscribe(c,callback,context)},this);var subscription=new Faye.Subscription(this,channel,callback,context),force=callback===true,hasSubscribe=this._channels.hasSubscription(channel);if(hasSubscribe&&!force){this._channels.subscribe([channel],callback,context);subscription.setDeferredStatus("succeeded");return subscription}this.connect(function(){this.info("Client ? attempting to subscribe to ?",this._dispatcher.clientId,channel);if(!force)this._channels.subscribe([channel],callback,context);this._sendMessage({channel:Faye.Channel.SUBSCRIBE,clientId:this._dispatcher.clientId,subscription:channel},{},function(response){if(!response.successful){subscription.setDeferredStatus("failed",Faye.Error.parse(response.error));return this._channels.unsubscribe(channel,callback,context)}var channels=[].concat(response.subscription);this.info("Subscription acknowledged for ? to ?",this._dispatcher.clientId,channels);subscription.setDeferredStatus("succeeded")},this)},this);return subscription},unsubscribe:function(channel,callback,context){if(channel instanceof Array)return Faye.map(channel,function(c){return this.unsubscribe(c,callback,context)},this);var dead=this._channels.unsubscribe(channel,callback,context);if(!dead)return;this.connect(function(){this.info("Client ? attempting to unsubscribe from ?",this._dispatcher.clientId,channel);this._sendMessage({channel:Faye.Channel.UNSUBSCRIBE,clientId:this._dispatcher.clientId,subscription:channel},{},function(response){if(!response.successful)return;var channels=[].concat(response.subscription);this.info("Unsubscription acknowledged for ? from ?",this._dispatcher.clientId,channels)},this)},this)},publish:function(channel,data,options){Faye.validateOptions(options||{},["attempts","deadline"]);var publication=new Faye.Publication;this.connect(function(){this.info("Client ? queueing published message to ?: ?",this._dispatcher.clientId,channel,data);this._sendMessage({channel:channel,data:data,clientId:this._dispatcher.clientId},options,function(response){if(response.successful)publication.setDeferredStatus("succeeded");else publication.setDeferredStatus("failed",Faye.Error.parse(response.error))},this)},this);return publication},_sendMessage:function(message,options,callback,context){message.id=this._generateMessageId();var timeout=this._advice.timeout?1.2*this._advice.timeout/1e3:1.2*this._dispatcher.retry;this.pipeThroughExtensions("outgoing",message,null,function(message){if(!message)return;if(callback)this._responseCallbacks[message.id]=[callback,context];this._dispatcher.sendMessage(message,timeout,options||{})},this)},_generateMessageId:function(){this._messageId+=1;if(this._messageId>=Math.pow(2,32))this._messageId=0;return this._messageId.toString(36)},_receiveMessage:function(message){var id=message.id,callback;if(message.successful!==undefined){callback=this._responseCallbacks[id];delete this._responseCallbacks[id]}this.pipeThroughExtensions("incoming",message,null,function(message){if(!message)return;if(message.advice)this._handleAdvice(message.advice);this._deliverMessage(message);if(callback)callback[0].call(callback[1],message)},this)},_handleAdvice:function(advice){Faye.extend(this._advice,advice);this._dispatcher.timeout=this._advice.timeout/1e3;if(this._advice.reconnect===this.HANDSHAKE&&this._state!==this.DISCONNECTED){this._state=this.UNCONNECTED;this._dispatcher.clientId=null;this._cycleConnection()}},_deliverMessage:function(message){if(!message.channel||message.data===undefined)return;this.info("Client ? calling listeners for ? with ?",this._dispatcher.clientId,message.channel,message.data);this._channels.distributeMessage(message)},_cycleConnection:function(){if(this._connectRequest){this._connectRequest=null;this.info("Closed connection for ?",this._dispatcher.clientId)}var self=this;Faye.ENV.setTimeout(function(){self.connect()},this._advice.interval)}});Faye.extend(Faye.Client.prototype,Faye.Deferrable);Faye.extend(Faye.Client.prototype,Faye.Publisher);Faye.extend(Faye.Client.prototype,Faye.Logging);Faye.extend(Faye.Client.prototype,Faye.Extensible);Faye.Dispatcher=Faye.Class({MAX_REQUEST_SIZE:2048,DEFAULT_RETRY:5,UP:1,DOWN:2,initialize:function(client,endpoint,options){this._client=client;this.endpoint=Faye.URI.parse(endpoint);this._alternates=options.endpoints||{};this.cookies=Faye.Cookies&&new Faye.Cookies.CookieJar;this._disabled=[];this._envelopes={};this.headers={};this.retry=options.retry||this.DEFAULT_RETRY;this._scheduler=options.scheduler||Faye.Scheduler;this._state=0;this.transports={};this.wsExtensions=[];this.proxy=options.proxy||{};if(typeof this._proxy==="string")this._proxy={origin:this._proxy};var exts=options.websocketExtensions;if(exts){exts=[].concat(exts);for(var i=0,n=exts.length;i<n;i++)this.addWebsocketExtension(exts[i])}this.tls=options.tls||{};this.tls.ca=this.tls.ca||options.ca;for(var type in this._alternates)this._alternates[type]=Faye.URI.parse(this._alternates[type]);this.maxRequestSize=this.MAX_REQUEST_SIZE},endpointFor:function(connectionType){return this._alternates[connectionType]||this.endpoint},addWebsocketExtension:function(extension){this.wsExtensions.push(extension)},disable:function(feature){this._disabled.push(feature)},setHeader:function(name,value){this.headers[name]=value},close:function(){var transport=this._transport;delete this._transport;if(transport)transport.close()},getConnectionTypes:function(){return Faye.Transport.getConnectionTypes()},selectTransport:function(transportTypes){Faye.Transport.get(this,transportTypes,this._disabled,function(transport){this.debug("Selected ? transport for ?",transport.connectionType,Faye.URI.stringify(transport.endpoint));if(transport===this._transport)return;if(this._transport)this._transport.close();this._transport=transport;this.connectionType=transport.connectionType},this)},sendMessage:function(message,timeout,options){options=options||{};var id=message.id,attempts=options.attempts,deadline=options.deadline&&(new Date).getTime()+options.deadline*1e3,envelope=this._envelopes[id],scheduler;if(!envelope){scheduler=new this._scheduler(message,{timeout:timeout,interval:this.retry,attempts:attempts,deadline:deadline});envelope=this._envelopes[id]={message:message,scheduler:scheduler}}this._sendEnvelope(envelope)},_sendEnvelope:function(envelope){if(!this._transport)return;if(envelope.request||envelope.timer)return;var message=envelope.message,scheduler=envelope.scheduler,self=this;if(!scheduler.isDeliverable()){scheduler.abort();delete this._envelopes[message.id];return}envelope.timer=Faye.ENV.setTimeout(function(){self.handleError(message)},scheduler.getTimeout()*1e3);scheduler.send();envelope.request=this._transport.sendMessage(message)},handleResponse:function(reply){var envelope=this._envelopes[reply.id];if(reply.successful!==undefined&&envelope){envelope.scheduler.succeed();delete this._envelopes[reply.id];Faye.ENV.clearTimeout(envelope.timer)}this.trigger("message",reply);if(this._state===this.UP)return;this._state=this.UP;this._client.trigger("transport:up")},handleError:function(message,immediate){var envelope=this._envelopes[message.id],request=envelope&&envelope.request,self=this;if(!request)return;request.then(function(req){
2
+ if(req&&req.abort)req.abort()});var scheduler=envelope.scheduler;scheduler.fail();Faye.ENV.clearTimeout(envelope.timer);envelope.request=envelope.timer=null;if(immediate){this._sendEnvelope(envelope)}else{envelope.timer=Faye.ENV.setTimeout(function(){envelope.timer=null;self._sendEnvelope(envelope)},scheduler.getInterval()*1e3)}if(this._state===this.DOWN)return;this._state=this.DOWN;this._client.trigger("transport:down")}});Faye.extend(Faye.Dispatcher.prototype,Faye.Publisher);Faye.extend(Faye.Dispatcher.prototype,Faye.Logging);Faye.Scheduler=function(message,options){this.message=message;this.options=options;this.attempts=0};Faye.extend(Faye.Scheduler.prototype,{getTimeout:function(){return this.options.timeout},getInterval:function(){return this.options.interval},isDeliverable:function(){var attempts=this.options.attempts,made=this.attempts,deadline=this.options.deadline,now=(new Date).getTime();if(attempts!==undefined&&made>=attempts)return false;if(deadline!==undefined&&now>deadline)return false;return true},send:function(){this.attempts+=1},succeed:function(){},fail:function(){},abort:function(){}});Faye.Transport=Faye.extend(Faye.Class({DEFAULT_PORTS:{"http:":80,"https:":443,"ws:":80,"wss:":443},SECURE_PROTOCOLS:["https:","wss:"],MAX_DELAY:0,batching:true,initialize:function(dispatcher,endpoint){this._dispatcher=dispatcher;this.endpoint=endpoint;this._outbox=[];this._proxy=Faye.extend({},this._dispatcher.proxy);if(!this._proxy.origin&&Faye.NodeAdapter){this._proxy.origin=Faye.indexOf(this.SECURE_PROTOCOLS,this.endpoint.protocol)>=0?process.env.HTTPS_PROXY||process.env.https_proxy:process.env.HTTP_PROXY||process.env.http_proxy}},close:function(){},encode:function(messages){return""},sendMessage:function(message){this.debug("Client ? sending message to ?: ?",this._dispatcher.clientId,Faye.URI.stringify(this.endpoint),message);if(!this.batching)return Faye.Promise.fulfilled(this.request([message]));this._outbox.push(message);this._flushLargeBatch();this._promise=this._promise||new Faye.Promise;if(message.channel===Faye.Channel.HANDSHAKE){this.addTimeout("publish",.01,this._flush,this);return this._promise}if(message.channel===Faye.Channel.CONNECT)this._connectMessage=message;this.addTimeout("publish",this.MAX_DELAY,this._flush,this);return this._promise},_flush:function(){this.removeTimeout("publish");if(this._outbox.length>1&&this._connectMessage)this._connectMessage.advice={timeout:0};Faye.Promise.fulfill(this._promise,this.request(this._outbox));delete this._promise;this._connectMessage=null;this._outbox=[]},_flushLargeBatch:function(){var string=this.encode(this._outbox);if(string.length<this._dispatcher.maxRequestSize)return;var last=this._outbox.pop();this._flush();if(last)this._outbox.push(last)},_receive:function(replies){if(!replies)return;replies=[].concat(replies);this.debug("Client ? received from ? via ?: ?",this._dispatcher.clientId,Faye.URI.stringify(this.endpoint),this.connectionType,replies);for(var i=0,n=replies.length;i<n;i++)this._dispatcher.handleResponse(replies[i])},_handleError:function(messages,immediate){messages=[].concat(messages);this.debug("Client ? failed to send to ? via ?: ?",this._dispatcher.clientId,Faye.URI.stringify(this.endpoint),this.connectionType,messages);for(var i=0,n=messages.length;i<n;i++)this._dispatcher.handleError(messages[i])},_getCookies:function(){var cookies=this._dispatcher.cookies,url=Faye.URI.stringify(this.endpoint);if(!cookies)return"";return Faye.map(cookies.getCookiesSync(url),function(cookie){return cookie.cookieString()}).join("; ")},_storeCookies:function(setCookie){var cookies=this._dispatcher.cookies,url=Faye.URI.stringify(this.endpoint),cookie;if(!setCookie||!cookies)return;setCookie=[].concat(setCookie);for(var i=0,n=setCookie.length;i<n;i++){cookie=Faye.Cookies.Cookie.parse(setCookie[i]);cookies.setCookieSync(cookie,url)}}}),{get:function(dispatcher,allowed,disabled,callback,context){var endpoint=dispatcher.endpoint;Faye.asyncEach(this._transports,function(pair,resume){var connType=pair[0],klass=pair[1],connEndpoint=dispatcher.endpointFor(connType);if(Faye.indexOf(disabled,connType)>=0)return resume();if(Faye.indexOf(allowed,connType)<0){klass.isUsable(dispatcher,connEndpoint,function(){});return resume()}klass.isUsable(dispatcher,connEndpoint,function(isUsable){if(!isUsable)return resume();var transport=klass.hasOwnProperty("create")?klass.create(dispatcher,connEndpoint):new klass(dispatcher,connEndpoint);callback.call(context,transport)})},function(){throw new Error("Could not find a usable connection type for "+Faye.URI.stringify(endpoint))})},register:function(type,klass){this._transports.push([type,klass]);klass.prototype.connectionType=type},getConnectionTypes:function(){return Faye.map(this._transports,function(t){return t[0]})},_transports:[]});Faye.extend(Faye.Transport.prototype,Faye.Logging);Faye.extend(Faye.Transport.prototype,Faye.Timeouts);Faye.Event={_registry:[],on:function(element,eventName,callback,context){var wrapped=function(){callback.call(context)};if(element.addEventListener)element.addEventListener(eventName,wrapped,false);else element.attachEvent("on"+eventName,wrapped);this._registry.push({_element:element,_type:eventName,_callback:callback,_context:context,_handler:wrapped})},detach:function(element,eventName,callback,context){var i=this._registry.length,register;while(i--){register=this._registry[i];if(element&&element!==register._element||eventName&&eventName!==register._type||callback&&callback!==register._callback||context&&context!==register._context)continue;if(register._element.removeEventListener)register._element.removeEventListener(register._type,register._handler,false);else register._element.detachEvent("on"+register._type,register._handler);this._registry.splice(i,1);register=null}}};if(Faye.ENV.onunload!==undefined)Faye.Event.on(Faye.ENV,"unload",Faye.Event.detach,Faye.Event);if(typeof JSON!=="object"){JSON={}}(function(){"use strict";function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]==="string"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}Faye.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else if(typeof space==="string"){indent=space}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})};if(typeof JSON.stringify!=="function"){JSON.stringify=Faye.stringify}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}})();Faye.Transport.WebSocket=Faye.extend(Faye.Class(Faye.Transport,{UNCONNECTED:1,CONNECTING:2,CONNECTED:3,batching:false,isUsable:function(callback,context){this.callback(function(){callback.call(context,true)});this.errback(function(){callback.call(context,false)});this.connect()},request:function(messages){this._pending=this._pending||new Faye.Set;for(var i=0,n=messages.length;i<n;i++)this._pending.add(messages[i]);var promise=new Faye.Promise;this.callback(function(socket){if(!socket)return;socket.send(Faye.toJSON(messages));Faye.Promise.fulfill(promise,socket)},this);this.connect();return{abort:function(){promise.then(function(ws){ws.close()})}}},connect:function(){if(Faye.Transport.WebSocket._unloaded)return;this._state=this._state||this.UNCONNECTED;if(this._state!==this.UNCONNECTED)return;this._state=this.CONNECTING;var socket=this._createSocket();if(!socket)return this.setDeferredStatus("failed");var self=this;socket.onopen=function(){if(socket.headers)self._storeCookies(socket.headers["set-cookie"]);self._socket=socket;self._state=self.CONNECTED;self._everConnected=true;self._ping();self.setDeferredStatus("succeeded",socket)};var closed=false;socket.onclose=socket.onerror=function(){if(closed)return;closed=true;var wasConnected=self._state===self.CONNECTED;socket.onopen=socket.onclose=socket.onerror=socket.onmessage=null;delete self._socket;self._state=self.UNCONNECTED;self.removeTimeout("ping");self.setDeferredStatus("unknown");var pending=self._pending?self._pending.toArray():[];delete self._pending;if(wasConnected){self._handleError(pending,true)}else if(self._everConnected){self._handleError(pending)}else{self.setDeferredStatus("failed")}};socket.onmessage=function(event){var replies=JSON.parse(event.data);if(!replies)return;replies=[].concat(replies);for(var i=0,n=replies.length;i<n;i++){if(replies[i].successful===undefined)continue;self._pending.remove(replies[i])}self._receive(replies)}},close:function(){if(!this._socket)return;this._socket.close()},_createSocket:function(){var url=Faye.Transport.WebSocket.getSocketUrl(this.endpoint),headers=this._dispatcher.headers,extensions=this._dispatcher.wsExtensions,cookie=this._getCookies(),tls=this._dispatcher.tls,options={extensions:extensions,headers:headers,proxy:this._proxy,tls:tls};if(cookie!=="")options.headers["Cookie"]=cookie;if(Faye.WebSocket)return new Faye.WebSocket.Client(url,[],options);if(Faye.ENV.MozWebSocket)return new MozWebSocket(url);if(Faye.ENV.WebSocket)return new WebSocket(url)},_ping:function(){if(!this._socket)return;this._socket.send("[]");this.addTimeout("ping",this._dispatcher.timeout/2,this._ping,this)}}),{PROTOCOLS:{"http:":"ws:","https:":"wss:"},create:function(dispatcher,endpoint){var sockets=dispatcher.transports.websocket=dispatcher.transports.websocket||{};sockets[endpoint.href]=sockets[endpoint.href]||new this(dispatcher,endpoint);return sockets[endpoint.href]},getSocketUrl:function(endpoint){endpoint=Faye.copyObject(endpoint);endpoint.protocol=this.PROTOCOLS[endpoint.protocol];return Faye.URI.stringify(endpoint)},isUsable:function(dispatcher,endpoint,callback,context){this.create(dispatcher,endpoint).isUsable(callback,context)}});Faye.extend(Faye.Transport.WebSocket.prototype,Faye.Deferrable);Faye.Transport.register("websocket",Faye.Transport.WebSocket);if(Faye.Event&&Faye.ENV.onbeforeunload!==undefined)Faye.Event.on(Faye.ENV,"beforeunload",function(){Faye.Transport.WebSocket._unloaded=true});Faye.Transport.EventSource=Faye.extend(Faye.Class(Faye.Transport,{initialize:function(dispatcher,endpoint){Faye.Transport.prototype.initialize.call(this,dispatcher,endpoint);if(!Faye.ENV.EventSource)return this.setDeferredStatus("failed");this._xhr=new Faye.Transport.XHR(dispatcher,endpoint);endpoint=Faye.copyObject(endpoint);endpoint.pathname+="/"+dispatcher.clientId;var socket=new EventSource(Faye.URI.stringify(endpoint)),self=this;socket.onopen=function(){self._everConnected=true;self.setDeferredStatus("succeeded")};socket.onerror=function(){if(self._everConnected){self._handleError([])}else{self.setDeferredStatus("failed");socket.close()}};socket.onmessage=function(event){self._receive(JSON.parse(event.data))};this._socket=socket},close:function(){if(!this._socket)return;this._socket.onopen=this._socket.onerror=this._socket.onmessage=null;this._socket.close();delete this._socket},isUsable:function(callback,context){this.callback(function(){callback.call(context,true)});this.errback(function(){callback.call(context,false)})},encode:function(messages){return this._xhr.encode(messages)},request:function(messages){return this._xhr.request(messages)}}),{isUsable:function(dispatcher,endpoint,callback,context){var id=dispatcher.clientId;if(!id)return callback.call(context,false);Faye.Transport.XHR.isUsable(dispatcher,endpoint,function(usable){if(!usable)return callback.call(context,false);this.create(dispatcher,endpoint).isUsable(callback,context)},this)},create:function(dispatcher,endpoint){var sockets=dispatcher.transports.eventsource=dispatcher.transports.eventsource||{},id=dispatcher.clientId;var url=Faye.copyObject(endpoint);url.pathname+="/"+(id||"");url=Faye.URI.stringify(url);sockets[url]=sockets[url]||new this(dispatcher,endpoint);return sockets[url]}});Faye.extend(Faye.Transport.EventSource.prototype,Faye.Deferrable);Faye.Transport.register("eventsource",Faye.Transport.EventSource);Faye.Transport.XHR=Faye.extend(Faye.Class(Faye.Transport,{encode:function(messages){return Faye.toJSON(messages)},request:function(messages){var href=this.endpoint.href,xhr=Faye.ENV.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest,self=this;xhr.open("POST",href,true);xhr.setRequestHeader("Content-Type","application/json");xhr.setRequestHeader("Pragma","no-cache");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");var headers=this._dispatcher.headers;for(var key in headers){if(!headers.hasOwnProperty(key))continue;xhr.setRequestHeader(key,headers[key])}var abort=function(){xhr.abort()};if(Faye.ENV.onbeforeunload!==undefined)Faye.Event.on(Faye.ENV,"beforeunload",abort);xhr.onreadystatechange=function(){if(!xhr||xhr.readyState!==4)return;var replies=null,status=xhr.status,text=xhr.responseText,successful=status>=200&&status<300||status===304||status===1223;if(Faye.ENV.onbeforeunload!==undefined)Faye.Event.detach(Faye.ENV,"beforeunload",abort);xhr.onreadystatechange=function(){};xhr=null;if(!successful)return self._handleError(messages);try{replies=JSON.parse(text)}catch(e){}if(replies)self._receive(replies);else self._handleError(messages)};xhr.send(this.encode(messages));return xhr}}),{isUsable:function(dispatcher,endpoint,callback,context){callback.call(context,Faye.URI.isSameOrigin(endpoint))}});Faye.Transport.register("long-polling",Faye.Transport.XHR);Faye.Transport.CORS=Faye.extend(Faye.Class(Faye.Transport,{encode:function(messages){return"message="+encodeURIComponent(Faye.toJSON(messages))},request:function(messages){var xhrClass=Faye.ENV.XDomainRequest?XDomainRequest:XMLHttpRequest,xhr=new xhrClass,headers=this._dispatcher.headers,self=this,key;xhr.open("POST",Faye.URI.stringify(this.endpoint),true);if(xhr.setRequestHeader){xhr.setRequestHeader("Pragma","no-cache");for(key in headers){if(!headers.hasOwnProperty(key))continue;xhr.setRequestHeader(key,headers[key])}}var cleanUp=function(){if(!xhr)return false;xhr.onload=xhr.onerror=xhr.ontimeout=xhr.onprogress=null;xhr=null};xhr.onload=function(){var replies=null;try{replies=JSON.parse(xhr.responseText)}catch(e){}cleanUp();if(replies)self._receive(replies);else self._handleError(messages)};xhr.onerror=xhr.ontimeout=function(){cleanUp();self._handleError(messages)};xhr.onprogress=function(){};xhr.send(this.encode(messages));return xhr}}),{isUsable:function(dispatcher,endpoint,callback,context){if(Faye.URI.isSameOrigin(endpoint))return callback.call(context,false);if(Faye.ENV.XDomainRequest)return callback.call(context,endpoint.protocol===Faye.ENV.location.protocol);if(Faye.ENV.XMLHttpRequest){var xhr=new Faye.ENV.XMLHttpRequest;return callback.call(context,xhr.withCredentials!==undefined)}return callback.call(context,false)}});Faye.Transport.register("cross-origin-long-polling",Faye.Transport.CORS);Faye.Transport.JSONP=Faye.extend(Faye.Class(Faye.Transport,{encode:function(messages){var url=Faye.copyObject(this.endpoint);url.query.message=Faye.toJSON(messages);url.query.jsonp="__jsonp"+Faye.Transport.JSONP._cbCount+"__";return Faye.URI.stringify(url)},request:function(messages){var head=document.getElementsByTagName("head")[0],script=document.createElement("script"),callbackName=Faye.Transport.JSONP.getCallbackName(),endpoint=Faye.copyObject(this.endpoint),self=this;endpoint.query.message=Faye.toJSON(messages);endpoint.query.jsonp=callbackName;var cleanup=function(){if(!Faye.ENV[callbackName])return false;Faye.ENV[callbackName]=undefined;try{delete Faye.ENV[callbackName]}catch(e){}script.parentNode.removeChild(script)};Faye.ENV[callbackName]=function(replies){cleanup();self._receive(replies)};script.type="text/javascript";script.src=Faye.URI.stringify(endpoint);head.appendChild(script);script.onerror=function(){cleanup();self._handleError(messages)};return{abort:cleanup}}}),{_cbCount:0,getCallbackName:function(){this._cbCount+=1;return"__jsonp"+this._cbCount+"__"},isUsable:function(dispatcher,endpoint,callback,context){callback.call(context,true)}});Faye.Transport.register("callback-polling",Faye.Transport.JSONP)})();
3
+ (function(){this.Rfaye={subs:{},sub:function(channel,func,overwrite){if(overwrite==null){overwrite=false}if(channel.substring(0,1)!=="/"){channel="/"+channel}if(!Rfaye.subs[channel]){if(!func){func=function(data){var e,error;try{return eval(data)}catch(error){e=error;if(e instanceof SyntaxError){return eval(data.substring(data.indexOf("{")+1,data.lastIndexOf("}")))}}}}Rfaye.subs[channel]=new Faye.Client("http://"+window.location.hostname+":9292/faye").subscribe(channel,func)}else if(overwrite){Rfaye.subs[channel].cancel();Rfaye.subs[channel]=void 0;Rfaye.sub(channel,func)}return null},un_sub:function(channel){if(channel.substring(0,1)!=="/"){channel="/"+channel}if(Rfaye.subs[channel]){Rfaye.subs[channel].cancel()}return null},pub:function(channel,data){if(channel.substring(0,1)!=="/"){channel="/"+channel}new Faye.Client("http://"+window.location.hostname+":9292/faye").publish(channel,typeof data==="function"?data.toString():data);return null}}}).call(this);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfaye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thiago Feitosa
@@ -89,6 +89,10 @@ files:
89
89
  - lib/rfaye/engine.rb
90
90
  - lib/rfaye/faye_extension.rb
91
91
  - lib/rfaye/view_helpers.rb
92
+ - vendor/assets/javascripts/faye-browser.1.1.1.js
93
+ - vendor/assets/javascripts/rfaye-browser.coffee
94
+ - vendor/assets/javascripts/rfaye-browser.js
95
+ - vendor/assets/javascripts/rfaye.js
92
96
  homepage: http://rubygems.org/gems/rfaye
93
97
  licenses:
94
98
  - MIT