faye 1.0.3 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +0,0 @@
1
- !function(){"use strict";var Faye={VERSION:"1.0.3",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:"undefined"!=typeof window?window:global,extend:function(e,t,n){if(!t)return e;for(var i in t)t.hasOwnProperty(i)&&(e.hasOwnProperty(i)&&n===!1||e[i]!==t[i]&&(e[i]=t[i]));return e},random:function(e){return e=e||this.ID_LENGTH,csprng(e,36)},clientIdFromMessages:function(e){var t=this.filter([].concat(e),function(e){return"/meta/connect"===e.channel});return t[0]&&t[0].clientId},copyObject:function(e){var t,n,i;if(e instanceof Array){for(t=[],n=e.length;n--;)t[n]=Faye.copyObject(e[n]);return t}if("object"==typeof e){t=null===e?null:{};for(i in e)t[i]=Faye.copyObject(e[i]);return t}return e},commonElement:function(e,t){for(var n=0,i=e.length;i>n;n++)if(-1!==this.indexOf(t,e[n]))return e[n];return null},indexOf:function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},map:function(e,t,n){if(e.map)return e.map(t,n);var i=[];if(e instanceof Array)for(var s=0,r=e.length;r>s;s++)i.push(t.call(n||null,e[s],s));else for(var o in e)e.hasOwnProperty(o)&&i.push(t.call(n||null,o,e[o]));return i},filter:function(e,t,n){if(e.filter)return e.filter(t,n);for(var i=[],s=0,r=e.length;r>s;s++)t.call(n||null,e[s],s)&&i.push(e[s]);return i},asyncEach:function(e,t,n,i){var s=e.length,r=-1,o=0,a=!1,c=function(){return o-=1,r+=1,r===s?n&&n.call(i):void t(e[r],h)},u=function(){if(!a){for(a=!0;o>0;)c();a=!1}},h=function(){o+=1,u()};h()},toJSON:function(e){return this.stringify?this.stringify(e,function(e,t){return this[e]instanceof Array?this[e]:t}):JSON.stringify(e)}};"undefined"!=typeof module?module.exports=Faye:"undefined"!=typeof window&&(window.Faye=Faye),Faye.Class=function(e,t){"function"!=typeof e&&(t=e,e=Object);var n=function(){return this.initialize?this.initialize.apply(this,arguments)||this:this},i=function(){};return i.prototype=e.prototype,n.prototype=new i,Faye.extend(n.prototype,t),n},function(){function e(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0;n<e.length;n++)if(t===e[n])return n;return-1}var t=Faye.EventEmitter=function(){},n="function"==typeof Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};t.prototype.emit=function(e){if("error"===e&&(!this._events||!this._events.error||n(this._events.error)&&!this._events.error.length))throw arguments[1]instanceof Error?arguments[1]:Error("Uncaught, unspecified 'error' event.");if(!this._events)return!1;var t=this._events[e];if(!t)return!1;if("function"==typeof t){switch(arguments.length){case 1:t.call(this);break;case 2:t.call(this,arguments[1]);break;case 3:t.call(this,arguments[1],arguments[2]);break;default:var i=Array.prototype.slice.call(arguments,1);t.apply(this,i)}return!0}if(n(t)){for(var i=Array.prototype.slice.call(arguments,1),s=t.slice(),r=0,o=s.length;o>r;r++)s[r].apply(this,i);return!0}return!1},t.prototype.addListener=function(e,t){if("function"!=typeof t)throw Error("addListener only takes instances of Function");return this._events||(this._events={}),this.emit("newListener",e,t),this._events[e]?n(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){var n=this;return n.on(e,function i(){n.removeListener(e,i),t.apply(this,arguments)}),this},t.prototype.removeListener=function(t,i){if("function"!=typeof i)throw Error("removeListener only takes instances of Function");if(!this._events||!this._events[t])return this;var s=this._events[t];if(n(s)){var r=e(s,i);if(0>r)return this;s.splice(r,1),0==s.length&&delete this._events[t]}else this._events[t]===i&&delete this._events[t];return this},t.prototype.removeAllListeners=function(e){return 0===arguments.length?(this._events={},this):(e&&this._events&&this._events[e]&&(this._events[e]=null),this)},t.prototype.listeners=function(e){return this._events||(this._events={}),this._events[e]||(this._events[e]=[]),n(this._events[e])||(this._events[e]=[this._events[e]]),this._events[e]}}(),Faye.Namespace=Faye.Class({initialize:function(){this._used={}},exists:function(e){return this._used.hasOwnProperty(e)},generate:function(){for(var e=Faye.random();this._used.hasOwnProperty(e);)e=Faye.random();return this._used[e]=e},release:function(e){delete this._used[e]}}),function(){var e,t=setTimeout;e="function"==typeof setImmediate?function(e){setImmediate(e)}:"object"==typeof process&&process.nextTick?function(e){process.nextTick(e)}:function(e){t(e,0)};var n=0,i=1,s=2,r=function(e){return e},o=function(e){throw e},a=function(e){if(this._state=n,this._callbacks=[],this._errbacks=[],"function"==typeof e){var t=this;e(function(e){f(t,e)},function(e){p(t,e)})}};a.prototype.then=function(e,t){var n={},i=this;return n.promise=new a(function(s,r){n.fulfill=s,n.reject=r,c(i,e,n),u(i,t,n)}),n.promise};var c=function(e,t,s){"function"!=typeof t&&(t=r);var o=function(e){h(t,e,s)};e._state===n?e._callbacks.push(o):e._state===i&&o(e._value)},u=function(e,t,i){"function"!=typeof t&&(t=o);var r=function(e){h(t,e,i)};e._state===n?e._errbacks.push(r):e._state===s&&r(e._reason)},h=function(t,n,i){e(function(){l(t,n,i)})},l=function(e,t,n){var i,s,o,a=!1;try{if(i=e(t),s=typeof i,o=null!==i&&("function"===s||"object"===s)&&i.then,i===n.promise)return n.reject(new TypeError("Recursive promise chain detected"));if("function"!=typeof o)return n.fulfill(i);o.call(i,function(e){a||(a=!0,l(r,e,n))},function(e){a||(a=!0,n.reject(e))})}catch(c){if(a)return;a=!0,n.reject(c)}},f=a.fulfill=a.resolve=function(e,t){if(e._state===n){e._state=i,e._value=t,e._errbacks=[];for(var s,r=e._callbacks;s=r.shift();)s(t)}},p=a.reject=function(e,t){if(e._state===n){e._state=s,e._reason=t,e._callbacks=[];for(var i,r=e._errbacks;i=r.shift();)i(t)}};a.defer=e,a.deferred=a.pending=function(){var e={};return e.promise=new a(function(t,n){e.fulfill=e.resolve=t,e.reject=n}),e},a.fulfilled=a.resolved=function(e){return new a(function(t){t(e)})},a.rejected=function(e){return new a(function(t,n){n(e)})},void 0===Faye?module.exports=a:Faye.Promise=a}(),Faye.Set=Faye.Class({initialize:function(){this._index={}},add:function(e){var t=void 0!==e.id?e.id:e;return this._index.hasOwnProperty(t)?!1:(this._index[t]=e,!0)},forEach:function(e,t){for(var n in this._index)this._index.hasOwnProperty(n)&&e.call(t,this._index[n])},isEmpty:function(){for(var e in this._index)if(this._index.hasOwnProperty(e))return!1;return!0},member:function(e){for(var t in this._index)if(this._index[t]===e)return!0;return!1},remove:function(e){var t=void 0!==e.id?e.id:e,n=this._index[t];return delete this._index[t],n},toArray:function(){var e=[];return this.forEach(function(t){e.push(t)}),e}}),Faye.URI={isURI:function(e){return e&&e.protocol&&e.host&&e.path},isSameOrigin:function(e){var t=Faye.ENV.location;return e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port},parse:function(e){if("string"!=typeof e)return e;var t,n,i,s,r,o,a={},c=function(t,n){e=e.replace(n,function(e){return a[t]=e,""}),a[t]=a[t]||""};for(c("protocol",/^[a-z]+\:/i),c("host",/^\/\/[^\/\?#]+/),/^\//.test(e)||a.host||(e=Faye.ENV.location.pathname.replace(/[^\/]*$/,"")+e),c("pathname",/^[^\?#]*/),c("search",/^\?[^#]*/),c("hash",/^#.*/),a.protocol=a.protocol||Faye.ENV.location.protocol,a.host?(a.host=a.host.substr(2),t=a.host.split(":"),a.hostname=t[0],a.port=t[1]||""):(a.host=Faye.ENV.location.host,a.hostname=Faye.ENV.location.hostname,a.port=Faye.ENV.location.port),a.pathname=a.pathname||"/",a.path=a.pathname+a.search,n=a.search.replace(/^\?/,""),i=n?n.split("&"):[],o={},s=0,r=i.length;r>s;s++)t=i[s].split("="),o[decodeURIComponent(t[0]||"")]=decodeURIComponent(t[1]||"");return a.query=o,a.href=this.stringify(a),a},stringify:function(e){var t=e.protocol+"//"+e.hostname;return e.port&&(t+=":"+e.port),t+=e.pathname+this.queryString(e.query)+(e.hash||"")},queryString:function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return 0===t.length?"":"?"+t.join("&")}},Faye.Error=Faye.Class({initialize:function(e,t,n){this.code=e,this.params=Array.prototype.slice.call(t),this.message=n},toString:function(){return this.code+":"+this.params.join(",")+":"+this.message}}),Faye.Error.parse=function(e){if(e=e||"",!Faye.Grammar.ERROR.test(e))return new this(null,[],e);var t=e.split(":"),n=parseInt(t[0]),i=t[1].split(","),e=t[2];return new this(n,i,e)},Faye.Error.versionMismatch=function(){return""+new this(300,arguments,"Version mismatch")},Faye.Error.conntypeMismatch=function(){return""+new this(301,arguments,"Connection types not supported")},Faye.Error.extMismatch=function(){return""+new this(302,arguments,"Extension mismatch")},Faye.Error.badRequest=function(){return""+new this(400,arguments,"Bad request")},Faye.Error.clientUnknown=function(){return""+new this(401,arguments,"Unknown client")},Faye.Error.parameterMissing=function(){return""+new this(402,arguments,"Missing required parameter")},Faye.Error.channelForbidden=function(){return""+new this(403,arguments,"Forbidden channel")},Faye.Error.channelUnknown=function(){return""+new this(404,arguments,"Unknown channel")},Faye.Error.channelInvalid=function(){return""+new this(405,arguments,"Invalid channel")},Faye.Error.extUnknown=function(){return""+new this(406,arguments,"Unknown extension")},Faye.Error.publishFailed=function(){return""+new this(407,arguments,"Failed to publish")},Faye.Error.serverError=function(){return""+new this(500,arguments,"Internal server error")},Faye.Deferrable={then:function(e,t){var n=this;return this._promise||(this._promise=new Faye.Promise(function(e,t){n._fulfill=e,n._reject=t})),0===arguments.length?this._promise:this._promise.then(e,t)},callback:function(e,t){return this.then(function(n){e.call(t,n)})},errback:function(e,t){return this.then(null,function(n){e.call(t,n)})},timeout:function(e,t){this.then();var n=this;this._timer=Faye.ENV.setTimeout(function(){n._reject(t)},1e3*e)},setDeferredStatus:function(e,t){this._timer&&Faye.ENV.clearTimeout(this._timer);this.then();"succeeded"===e?this._fulfill(t):"failed"===e?this._reject(t):delete this._promise}},Faye.Publisher={countListeners:function(e){return this.listeners(e).length},bind:function(e,t,n){var i=Array.prototype.slice,s=function(){t.apply(n,i.call(arguments))};return this._listeners=this._listeners||[],this._listeners.push([e,t,n,s]),this.on(e,s)},unbind:function(e,t,n){this._listeners=this._listeners||[];for(var i,s=this._listeners.length;s--;)i=this._listeners[s],i[0]===e&&(!t||i[1]===t&&i[2]===n)&&(this._listeners.splice(s,1),this.removeListener(e,i[3]))}},Faye.extend(Faye.Publisher,Faye.EventEmitter.prototype),Faye.Publisher.trigger=Faye.Publisher.emit,Faye.Timeouts={addTimeout:function(e,t,n,i){if(this._timeouts=this._timeouts||{},!this._timeouts.hasOwnProperty(e)){var s=this;this._timeouts[e]=Faye.ENV.setTimeout(function(){delete s._timeouts[e],n.call(i)},1e3*t)}},removeTimeout:function(e){this._timeouts=this._timeouts||{};var t=this._timeouts[e];t&&(clearTimeout(t),delete this._timeouts[e])},removeAllTimeouts:function(){this._timeouts=this._timeouts||{};for(var e in this._timeouts)this.removeTimeout(e)}},Faye.Logging={LOG_LEVELS:{fatal:4,error:3,warn:2,info:1,debug:0},writeLog:function(e,t){if(Faye.logger){var e=Array.prototype.slice.apply(e),n="[Faye",i=this.className,s=e.shift().replace(/\?/g,function(){try{return Faye.toJSON(e.shift())}catch(t){return"[Object]"}});for(var r in Faye)i||"function"==typeof Faye[r]&&this instanceof Faye[r]&&(i=r);i&&(n+="."+i),n+="] ","function"==typeof Faye.logger[t]?Faye.logger[t](n+s):"function"==typeof Faye.logger&&Faye.logger(n+s)}}},function(){for(var e in Faye.Logging.LOG_LEVELS)(function(e){Faye.Logging[e]=function(){this.writeLog(arguments,e)}})(e,Faye.Logging.LOG_LEVELS[e])}(),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(e){this._extensions=this._extensions||[],this._extensions.push(e),e.added&&e.added(this)},removeExtension:function(e){if(this._extensions)for(var t=this._extensions.length;t--;)this._extensions[t]===e&&(this._extensions.splice(t,1),e.removed&&e.removed(this))},pipeThroughExtensions:function(e,t,n,i,s){if(this.debug("Passing through ? extensions: ?",e,t),!this._extensions)return i.call(s,t);var r=this._extensions.slice(),o=function(t){if(!t)return i.call(s,t);var a=r.shift();if(!a)return i.call(s,t);var c=a[e];return c?void(c.length>=3?a[e](t,n,o):a[e](t,o)):o(t)};o(t)}},Faye.extend(Faye.Extensible,Faye.Logging),Faye.Channel=Faye.Class({initialize:function(e){this.id=this.name=e},push:function(e){this.trigger("message",e)},isUnused:function(){return 0===this.countListeners("message")}}),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(e){var t=this.parse(e),n=["/**",e],i=t.slice();i[i.length-1]="*",n.push(this.unparse(i));for(var s=1,r=t.length;r>s;s++)i=t.slice(0,s),i.push("**"),n.push(this.unparse(i));return n},isValid:function(e){return Faye.Grammar.CHANNEL_NAME.test(e)||Faye.Grammar.CHANNEL_PATTERN.test(e)},parse:function(e){return this.isValid(e)?e.split("/").slice(1):null},unparse:function(e){return"/"+e.join("/")},isMeta:function(e){var t=this.parse(e);return t?t[0]===this.META:null},isService:function(e){var t=this.parse(e);return t?t[0]===this.SERVICE:null},isSubscribable:function(e){return this.isValid(e)?!this.isMeta(e)&&!this.isService(e):null},Set:Faye.Class({initialize:function(){this._channels={}},getKeys:function(){var e=[];for(var t in this._channels)e.push(t);return e},remove:function(e){delete this._channels[e]},hasSubscription:function(e){return this._channels.hasOwnProperty(e)},subscribe:function(e,t,n){if(t)for(var i,s=0,r=e.length;r>s;s++){i=e[s];var o=this._channels[i]=this._channels[i]||new Faye.Channel(i);o.bind("message",t,n)}},unsubscribe:function(e,t,n){var i=this._channels[e];return i?(i.unbind("message",t,n),i.isUnused()?(this.remove(e),!0):!1):!1},distributeMessage:function(e){for(var t=Faye.Channel.expand(e.channel),n=0,i=t.length;i>n;n++){var s=this._channels[t[n]];s&&s.trigger("message",e.data)}}})}),Faye.Envelope=Faye.Class({initialize:function(e,t){this.id=e.id,this.message=e,void 0!==t&&this.timeout(t/1e3,!1)}}),Faye.extend(Faye.Envelope.prototype,Faye.Deferrable),Faye.Publication=Faye.Class(Faye.Deferrable),Faye.Subscription=Faye.Class({initialize:function(e,t,n,i){this._client=e,this._channels=t,this._callback=n,this._context=i,this._cancelled=!1},cancel:function(){this._cancelled||(this._client.unsubscribe(this._channels,this._callback,this._context),this._cancelled=!0)},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_RETRY:5,MAX_REQUEST_SIZE:2048,DEFAULT_ENDPOINT:"/bayeux",INTERVAL:0,initialize:function(e,t){this.info("New client created for ?",e),this._options=t||{},this.endpoint=Faye.URI.parse(e||this.DEFAULT_ENDPOINT),this.endpoints=this._options.endpoints||{},this.transports={},this.cookies=Faye.CookieJar&&new Faye.CookieJar,this.headers={},this.ca=this._options.ca,this._disabled=[],this._retry=this._options.retry||this.DEFAULT_RETRY;for(var n in this.endpoints)this.endpoints[n]=Faye.URI.parse(this.endpoints[n]);this.maxRequestSize=this.MAX_REQUEST_SIZE,this._state=this.UNCONNECTED,this._channels=new Faye.Channel.Set,this._messageId=0,this._responseCallbacks={},this._advice={reconnect:this.RETRY,interval:1e3*(this._options.interval||this.INTERVAL),timeout:1e3*(this._options.timeout||this.CONNECTION_TIMEOUT)},Faye.Event&&void 0!==Faye.ENV.onbeforeunload&&Faye.Event.on(Faye.ENV,"beforeunload",function(){Faye.indexOf(this._disabled,"autodisconnect")<0&&this.disconnect()},this)},disable:function(e){this._disabled.push(e)},setHeader:function(e,t){this.headers[e]=t},handshake:function(e,t){if(this._advice.reconnect!==this.NONE&&this._state===this.UNCONNECTED){this._state=this.CONNECTING;var n=this;this.info("Initiating handshake with ?",Faye.URI.stringify(this.endpoint)),this._selectTransport(Faye.MANDATORY_CONNECTION_TYPES),this._send({channel:Faye.Channel.HANDSHAKE,version:Faye.BAYEUX_VERSION,supportedConnectionTypes:[this._transport.connectionType]},function(i){i.successful?(this._state=this.CONNECTED,this._clientId=i.clientId,this._selectTransport(i.supportedConnectionTypes),this.info("Handshake successful: ?",this._clientId),this.subscribe(this._channels.getKeys(),!0),e&&Faye.Promise.defer(function(){e.call(t)})):(this.info("Handshake unsuccessful"),Faye.ENV.setTimeout(function(){n.handshake(e,t)},this._advice.interval),this._state=this.UNCONNECTED)},this)}},connect:function(e,t){if(this._advice.reconnect!==this.NONE&&this._state!==this.DISCONNECTED){if(this._state===this.UNCONNECTED)return this.handshake(function(){this.connect(e,t)},this);this.callback(e,t),this._state===this.CONNECTED&&(this.info("Calling deferred actions for ?",this._clientId),this.setDeferredStatus("succeeded"),this.setDeferredStatus("unknown"),this._connectRequest||(this._connectRequest=!0,this.info("Initiating connection for ?",this._clientId),this._send({channel:Faye.Channel.CONNECT,clientId:this._clientId,connectionType:this._transport.connectionType},this._cycleConnection,this)))}},disconnect:function(){this._state===this.CONNECTED&&(this._state=this.DISCONNECTED,this.info("Disconnecting ?",this._clientId),this._send({channel:Faye.Channel.DISCONNECT,clientId:this._clientId},function(e){e.successful&&(this._transport.close(),delete this._transport)},this),this.info("Clearing channel listeners for ?",this._clientId),this._channels=new Faye.Channel.Set)},subscribe:function(e,t,n){if(e instanceof Array)return Faye.map(e,function(e){return this.subscribe(e,t,n)},this);var i=new Faye.Subscription(this,e,t,n),s=t===!0,r=this._channels.hasSubscription(e);return r&&!s?(this._channels.subscribe([e],t,n),i.setDeferredStatus("succeeded"),i):(this.connect(function(){this.info("Client ? attempting to subscribe to ?",this._clientId,e),s||this._channels.subscribe([e],t,n),this._send({channel:Faye.Channel.SUBSCRIBE,clientId:this._clientId,subscription:e},function(s){if(!s.successful)return i.setDeferredStatus("failed",Faye.Error.parse(s.error)),this._channels.unsubscribe(e,t,n);var r=[].concat(s.subscription);this.info("Subscription acknowledged for ? to ?",this._clientId,r),i.setDeferredStatus("succeeded")},this)},this),i)},unsubscribe:function(e,t,n){if(e instanceof Array)return Faye.map(e,function(e){return this.unsubscribe(e,t,n)},this);var i=this._channels.unsubscribe(e,t,n);i&&this.connect(function(){this.info("Client ? attempting to unsubscribe from ?",this._clientId,e),this._send({channel:Faye.Channel.UNSUBSCRIBE,clientId:this._clientId,subscription:e},function(e){if(e.successful){var t=[].concat(e.subscription);this.info("Unsubscription acknowledged for ? from ?",this._clientId,t)}},this)},this)},publish:function(e,t){var n=new Faye.Publication;return this.connect(function(){this.info("Client ? queueing published message to ?: ?",this._clientId,e,t),this._send({channel:e,data:t,clientId:this._clientId},function(e){e.successful?n.setDeferredStatus("succeeded"):n.setDeferredStatus("failed",Faye.Error.parse(e.error))},this)},this),n},receiveMessage:function(e){var t,n=e.id;void 0!==e.successful&&(t=this._responseCallbacks[n],delete this._responseCallbacks[n]),this.pipeThroughExtensions("incoming",e,null,function(e){e&&(e.advice&&this._handleAdvice(e.advice),this._deliverMessage(e),t&&t[0].call(t[1],e))},this),this._transportUp!==!0&&(this._transportUp=!0,this.trigger("transport:up"))},messageError:function(e,t){for(var n,i,s=this._retry,r=this,o=0,a=e.length;a>o;o++)i=e[o],n=i.id,t?this._transportSend(i):Faye.ENV.setTimeout(function(){r._transportSend(i)},1e3*s);t||this._transportUp===!1||(this._transportUp=!1,this.trigger("transport:down"))},_selectTransport:function(e){Faye.Transport.get(this,e,this._disabled,function(e){this.debug("Selected ? transport for ?",e.connectionType,Faye.URI.stringify(e.endpoint)),e!==this._transport&&(this._transport&&this._transport.close(),this._transport=e)},this)},_send:function(e,t,n){this._transport&&(e.id=e.id||this._generateMessageId(),this.pipeThroughExtensions("outgoing",e,null,function(e){e&&(t&&(this._responseCallbacks[e.id]=[t,n]),this._transportSend(e))},this))},_transportSend:function(e){if(this._transport){var t=1.2*(this._advice.timeout||1e3*this._retry),n=new Faye.Envelope(e,t);n.errback(function(t){this.messageError([e],t)},this),this._transport.send(n)}},_generateMessageId:function(){return this._messageId+=1,this._messageId>=Math.pow(2,32)&&(this._messageId=0),this._messageId.toString(36)},_handleAdvice:function(e){Faye.extend(this._advice,e),this._advice.reconnect===this.HANDSHAKE&&this._state!==this.DISCONNECTED&&(this._state=this.UNCONNECTED,this._clientId=null,this._cycleConnection())},_deliverMessage:function(e){e.channel&&void 0!==e.data&&(this.info("Client ? calling listeners for ? with ?",this._clientId,e.channel,e.data),this._channels.distributeMessage(e))},_cycleConnection:function(){this._connectRequest&&(this._connectRequest=null,this.info("Closed connection for ?",this._clientId));var e=this;Faye.ENV.setTimeout(function(){e.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.Transport=Faye.extend(Faye.Class({MAX_DELAY:0,batching:!0,initialize:function(e,t){this._client=e,this.endpoint=t,this._outbox=[]},close:function(){},encode:function(){return""},send:function(e){var t=e.message;return this.debug("Client ? sending message to ?: ?",this._client._clientId,Faye.URI.stringify(this.endpoint),t),this.batching?(this._outbox.push(e),t.channel===Faye.Channel.HANDSHAKE?this.addTimeout("publish",.01,this.flush,this):(t.channel===Faye.Channel.CONNECT&&(this._connectMessage=t),this.flushLargeBatch(),void this.addTimeout("publish",this.MAX_DELAY,this.flush,this))):this.request([e])},flush:function(){this.removeTimeout("publish"),this._outbox.length>1&&this._connectMessage&&(this._connectMessage.advice={timeout:0}),this.request(this._outbox),this._connectMessage=null,this._outbox=[]},flushLargeBatch:function(){var e=this.encode(this._outbox);if(!(e.length<this._client.maxRequestSize)){var t=this._outbox.pop();this.flush(),t&&this._outbox.push(t)}},receive:function(e,t){for(var n=e.length;n--;)e[n].setDeferredStatus("succeeded");t=[].concat(t),this.debug("Client ? received from ?: ?",this._client._clientId,Faye.URI.stringify(this.endpoint),t);for(var i=0,n=t.length;n>i;i++)this._client.receiveMessage(t[i])},handleError:function(e,t){for(var n=e.length;n--;)e[n].setDeferredStatus("failed",t)},_getCookies:function(){var e=this._client.cookies;return e?e.getCookies({domain:this.endpoint.hostname,path:this.endpoint.path,secure:"https:"===this.endpoint.protocol}).toValueString():""},_storeCookies:function(e){if(e&&this._client.cookies){e=[].concat(e);for(var t,n=0,i=e.length;i>n;n++)t=this._client.cookies.setCookie(e[n]),t=t[0]||t,t.domain=t.domain||this.endpoint.hostname}}}),{get:function(e,t,n,i,s){var r=e.endpoint;Faye.asyncEach(this._transports,function(o,a){var c=o[0],u=o[1],h=e.endpoints[c]||r;return Faye.indexOf(n,c)>=0?a():Faye.indexOf(t,c)<0?(u.isUsable(e,h,function(){}),a()):void u.isUsable(e,h,function(t){if(!t)return a();var n=u.hasOwnProperty("create")?u.create(e,h):new u(e,h);i.call(s,n)})},function(){throw Error("Could not find a usable connection type for "+Faye.URI.stringify(r))})},register:function(e,t){this._transports.push([e,t]),t.prototype.connectionType=e},_transports:[]}),Faye.extend(Faye.Transport.prototype,Faye.Logging),Faye.extend(Faye.Transport.prototype,Faye.Timeouts),Faye.Event={_registry:[],on:function(e,t,n,i){var s=function(){n.call(i)};e.addEventListener?e.addEventListener(t,s,!1):e.attachEvent("on"+t,s),this._registry.push({_element:e,_type:t,_callback:n,_context:i,_handler:s})},detach:function(e,t,n,i){for(var s,r=this._registry.length;r--;)s=this._registry[r],e&&e!==s._element||t&&t!==s._type||n&&n!==s._callback||i&&i!==s._context||(s._element.removeEventListener?s._element.removeEventListener(s._type,s._handler,!1):s._element.detachEvent("on"+s._type,s._handler),this._registry.splice(r,1),s=null)}},void 0!==Faye.ENV.onunload&&Faye.Event.on(Faye.ENV,"unload",Faye.Event.detach,Faye.Event),"object"!=typeof JSON&&(JSON={}),function(){function f(e){return 10>e?"0"+e:e}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,i,s,r,o,a=gap,c=t[e];switch(c&&"object"==typeof c&&"function"==typeof c.toJSON&&(c=c.toJSON(e)),"function"==typeof rep&&(c=rep.call(t,e,c)),typeof c){case"string":return quote(c);case"number":return isFinite(c)?c+"":"null";case"boolean":case"null":return c+"";case"object":if(!c)return"null";if(gap+=indent,o=[],"[object Array]"===Object.prototype.toString.apply(c)){for(r=c.length,n=0;r>n;n+=1)o[n]=str(n,c)||"null";return s=0===o.length?"[]":gap?"[\n"+gap+o.join(",\n"+gap)+"\n"+a+"]":"["+o.join(",")+"]",gap=a,s}if(rep&&"object"==typeof rep)for(r=rep.length,n=0;r>n;n+=1)"string"==typeof rep[n]&&(i=rep[n],s=str(i,c),s&&o.push(quote(i)+(gap?": ":":")+s));else for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(s=str(i,c),s&&o.push(quote(i)+(gap?": ":":")+s));return s=0===o.length?"{}":gap?"{\n"+gap+o.join(",\n"+gap)+"\n"+a+"}":"{"+o.join(",")+"}",gap=a,s}}"function"!=typeof Date.prototype.toJSON&&(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;Faye.stringify=function(e,t,n){var i;if(gap="",indent="","number"==typeof n)for(i=0;n>i;i+=1)indent+=" ";else"string"==typeof n&&(indent=n);if(rep=t,t&&"function"!=typeof t&&("object"!=typeof t||"number"!=typeof t.length))throw Error("JSON.stringify");return str("",{"":e})},"function"!=typeof JSON.stringify&&(JSON.stringify=Faye.stringify),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(e,t){var n,i,s=e[t];if(s&&"object"==typeof s)for(n in s)Object.prototype.hasOwnProperty.call(s,n)&&(i=walk(s,n),void 0!==i?s[n]=i:delete s[n]);return reviver.call(e,t,s)}var j;if(text+="",cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\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,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(),Faye.Transport.WebSocket=Faye.extend(Faye.Class(Faye.Transport,{UNCONNECTED:1,CONNECTING:2,CONNECTED:3,batching:!1,isUsable:function(e,t){this.callback(function(){e.call(t,!0)}),this.errback(function(){e.call(t,!1)}),this.connect()},request:function(e){this._pending=this._pending||new Faye.Set;for(var t=0,n=e.length;n>t;t++)this._pending.add(e[t]);this.callback(function(t){if(t){var n=Faye.map(e,function(e){return e.message});t.send(Faye.toJSON(n))}},this),this.connect()},connect:function(){if(!Faye.Transport.WebSocket._unloaded&&(this._state=this._state||this.UNCONNECTED,this._state===this.UNCONNECTED)){this._state=this.CONNECTING;var e=this._createSocket();if(!e)return this.setDeferredStatus("failed");var t=this;e.onopen=function(){e.headers&&t._storeCookies(e.headers["set-cookie"]),t._socket=e,t._state=t.CONNECTED,t._everConnected=!0,t._ping(),t.setDeferredStatus("succeeded",e)};var n=!1;e.onclose=e.onerror=function(){if(!n){n=!0;var i=t._state===t.CONNECTED;e.onopen=e.onclose=e.onerror=e.onmessage=null,delete t._socket,t._state=t.UNCONNECTED,t.removeTimeout("ping"),t.setDeferredStatus("unknown");var s=t._pending?t._pending.toArray():[];delete t._pending,i?t.handleError(s,!0):t._everConnected?t.handleError(s):t.setDeferredStatus("failed")}},e.onmessage=function(e){var n,i=JSON.parse(e.data),s=[];if(i){i=[].concat(i);for(var r=0,o=i.length;o>r;r++)void 0!==i[r].successful&&(n=t._pending.remove(i[r]),n&&s.push(n));t.receive(s,i)}}}},close:function(){this._socket&&this._socket.close()},_createSocket:function(){var e=Faye.Transport.WebSocket.getSocketUrl(this.endpoint),t={headers:Faye.copyObject(this._client.headers),ca:this._client.ca};return t.headers.Cookie=this._getCookies(),Faye.WebSocket?new Faye.WebSocket.Client(e,[],t):Faye.ENV.MozWebSocket?new MozWebSocket(e):Faye.ENV.WebSocket?new WebSocket(e):void 0},_ping:function(){this._socket&&(this._socket.send("[]"),this.addTimeout("ping",this._client._advice.timeout/2e3,this._ping,this))}}),{PROTOCOLS:{"http:":"ws:","https:":"wss:"},create:function(e,t){var n=e.transports.websocket=e.transports.websocket||{};return n[t.href]=n[t.href]||new this(e,t),n[t.href]},getSocketUrl:function(e){return e=Faye.copyObject(e),e.protocol=this.PROTOCOLS[e.protocol],Faye.URI.stringify(e)},isUsable:function(e,t,n,i){this.create(e,t).isUsable(n,i)}}),Faye.extend(Faye.Transport.WebSocket.prototype,Faye.Deferrable),Faye.Transport.register("websocket",Faye.Transport.WebSocket),Faye.Event&&Faye.Event.on(Faye.ENV,"beforeunload",function(){Faye.Transport.WebSocket._unloaded=!0}),Faye.Transport.EventSource=Faye.extend(Faye.Class(Faye.Transport,{initialize:function(e,t){if(Faye.Transport.prototype.initialize.call(this,e,t),!Faye.ENV.EventSource)return this.setDeferredStatus("failed");this._xhr=new Faye.Transport.XHR(e,t),t=Faye.copyObject(t),t.pathname+="/"+e._clientId;var n=new EventSource(Faye.URI.stringify(t)),i=this;n.onopen=function(){i._everConnected=!0,i.setDeferredStatus("succeeded")},n.onerror=function(){i._everConnected?i._client.messageError([]):(i.setDeferredStatus("failed"),n.close())},n.onmessage=function(e){i.receive([],JSON.parse(e.data))},this._socket=n},close:function(){this._socket&&(this._socket.onopen=this._socket.onerror=this._socket.onmessage=null,this._socket.close(),delete this._socket)},isUsable:function(e,t){this.callback(function(){e.call(t,!0)}),this.errback(function(){e.call(t,!1)})},encode:function(e){return this._xhr.encode(e)},request:function(e){this._xhr.request(e)}}),{isUsable:function(e,t,n,i){var s=e._clientId;
2
- return s?void Faye.Transport.XHR.isUsable(e,t,function(s){return s?void this.create(e,t).isUsable(n,i):n.call(i,!1)},this):n.call(i,!1)},create:function(e,t){var n=e.transports.eventsource=e.transports.eventsource||{},i=e._clientId;t=Faye.copyObject(t),t.pathname+="/"+(i||"");var s=Faye.URI.stringify(t);return n[s]=n[s]||new this(e,t),n[s]}}),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(e){var t=Faye.map(e,function(e){return e.message});return Faye.toJSON(t)},request:function(e){var t=this.endpoint.path,n=Faye.ENV.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest,i=this;n.open("POST",t,!0),n.setRequestHeader("Content-Type","application/json"),n.setRequestHeader("Pragma","no-cache"),n.setRequestHeader("X-Requested-With","XMLHttpRequest");var s=this._client.headers;for(var r in s)s.hasOwnProperty(r)&&n.setRequestHeader(r,s[r]);var o=function(){n.abort()};Faye.Event.on(Faye.ENV,"beforeunload",o),n.onreadystatechange=function(){if(n&&4===n.readyState){var t=null,s=n.status,r=n.responseText,a=s>=200&&300>s||304===s||1223===s;if(Faye.Event.detach(Faye.ENV,"beforeunload",o),n.onreadystatechange=function(){},n=null,!a)return i.handleError(e);try{t=JSON.parse(r)}catch(c){}t?i.receive(e,t):i.handleError(e)}},n.send(this.encode(e))}}),{isUsable:function(e,t,n,i){n.call(i,Faye.URI.isSameOrigin(t))}}),Faye.Transport.register("long-polling",Faye.Transport.XHR),Faye.Transport.CORS=Faye.extend(Faye.Class(Faye.Transport,{encode:function(e){var t=Faye.map(e,function(e){return e.message});return"message="+encodeURIComponent(Faye.toJSON(t))},request:function(e){var t,n=Faye.ENV.XDomainRequest?XDomainRequest:XMLHttpRequest,i=new n,s=this._client.headers,r=this;if(i.open("POST",Faye.URI.stringify(this.endpoint),!0),i.setRequestHeader){i.setRequestHeader("Pragma","no-cache");for(t in s)s.hasOwnProperty(t)&&i.setRequestHeader(t,s[t])}var o=function(){return i?(i.onload=i.onerror=i.ontimeout=i.onprogress=null,void(i=null)):!1};i.onload=function(){var t=null;try{t=JSON.parse(i.responseText)}catch(n){}o(),t?r.receive(e,t):r.handleError(e)},i.onerror=i.ontimeout=function(){o(),r.handleError(e)},i.onprogress=function(){},i.send(this.encode(e))}}),{isUsable:function(e,t,n,i){if(Faye.URI.isSameOrigin(t))return n.call(i,!1);if(Faye.ENV.XDomainRequest)return n.call(i,t.protocol===Faye.ENV.location.protocol);if(Faye.ENV.XMLHttpRequest){var s=new Faye.ENV.XMLHttpRequest;return n.call(i,void 0!==s.withCredentials)}return n.call(i,!1)}}),Faye.Transport.register("cross-origin-long-polling",Faye.Transport.CORS),Faye.Transport.JSONP=Faye.extend(Faye.Class(Faye.Transport,{encode:function(e){var t=Faye.map(e,function(e){return e.message}),n=Faye.copyObject(this.endpoint);return n.query.message=Faye.toJSON(t),n.query.jsonp="__jsonp"+Faye.Transport.JSONP._cbCount+"__",Faye.URI.stringify(n)},request:function(e){var t=Faye.map(e,function(e){return e.message}),n=document.getElementsByTagName("head")[0],i=document.createElement("script"),s=Faye.Transport.JSONP.getCallbackName(),r=Faye.copyObject(this.endpoint),o=this;r.query.message=Faye.toJSON(t),r.query.jsonp=s,Faye.ENV[s]=function(t){if(!Faye.ENV[s])return!1;Faye.ENV[s]=void 0;try{delete Faye.ENV[s]}catch(n){}i.parentNode.removeChild(i),o.receive(e,t)},i.type="text/javascript",i.src=Faye.URI.stringify(r),n.appendChild(i)}}),{_cbCount:0,getCallbackName:function(){return this._cbCount+=1,"__jsonp"+this._cbCount+"__"},isUsable:function(e,t,n,i){n.call(i,!0)}}),Faye.Transport.register("callback-polling",Faye.Transport.JSONP)}();
3
- //@ sourceMappingURL=faye-browser-min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"faye-browser-min.js","sources":["faye-browser.js"],"names":["Faye","VERSION","BAYEUX_VERSION","ID_LENGTH","JSONP_CALLBACK","CONNECTION_TYPES","MANDATORY_CONNECTION_TYPES","ENV","window","global","extend","dest","source","overwrite","key","hasOwnProperty","random","bitlength","this","csprng","clientIdFromMessages","messages","connect","filter","concat","message","channel","clientId","copyObject","object","clone","i","Array","length","commonElement","lista","listb","n","indexOf","list","needle","map","callback","context","result","push","call","array","asyncEach","iterator","calls","looping","iterate","resume","loop","toJSON","stringify","value","JSON","module","exports","Class","parent","methods","Object","klass","initialize","apply","arguments","bridge","prototype","xs","x","EventEmitter","isArray","toString","emit","type","_events","error","Error","handler","args","slice","listeners","l","addListener","listener","on","once","self","g","removeListener","splice","removeAllListeners","Namespace","_used","exists","id","generate","name","release","defer","timeout","setTimeout","setImmediate","fn","process","nextTick","PENDING","FULFILLED","REJECTED","RETURN","THROW","Promise","task","_state","_callbacks","_errbacks","fulfill","reason","reject","then","errback","next","promise","registerCallback","registerErrback","invoke","_value","_reason","_invoke","outcome","called","TypeError","v","r","resolve","cb","callbacks","shift","eb","errbacks","deferred","pending","tuple","fulfilled","resolved","rejected","Set","_index","add","item","undefined","forEach","block","isEmpty","member","remove","removed","toArray","URI","isURI","uri","protocol","host","path","isSameOrigin","location","hostname","port","parse","url","parts","query","pairs","data","consume","pattern","replace","match","test","pathname","substr","split","search","decodeURIComponent","href","string","queryString","hash","encodeURIComponent","join","code","params","Grammar","ERROR","parseInt","versionMismatch","conntypeMismatch","extMismatch","badRequest","clientUnknown","parameterMissing","channelForbidden","channelUnknown","channelInvalid","extUnknown","publishFailed","serverError","Deferrable","_promise","_fulfill","_reject","seconds","_timer","setDeferredStatus","status","clearTimeout","Publisher","countListeners","eventType","bind","_listeners","unbind","trigger","Timeouts","addTimeout","delay","_timeouts","removeTimeout","removeAllTimeouts","Logging","LOG_LEVELS","fatal","warn","info","debug","writeLog","messageArgs","level","logger","banner","className","e","CHANNEL_NAME","CHANNEL_PATTERN","Extensible","addExtension","extension","_extensions","added","removeExtension","pipeThroughExtensions","stage","request","extensions","pipe","Channel","isUnused","HANDSHAKE","CONNECT","SUBSCRIBE","UNSUBSCRIBE","DISCONNECT","META","SERVICE","expand","segments","channels","copy","unparse","isValid","isMeta","isService","isSubscribable","_channels","getKeys","keys","hasSubscription","subscribe","names","unsubscribe","distributeMessage","Envelope","Publication","Subscription","client","_client","_callback","_context","_cancelled","cancel","Client","UNCONNECTED","CONNECTING","CONNECTED","DISCONNECTED","RETRY","NONE","CONNECTION_TIMEOUT","DEFAULT_RETRY","MAX_REQUEST_SIZE","DEFAULT_ENDPOINT","INTERVAL","endpoint","options","_options","endpoints","transports","cookies","CookieJar","headers","ca","_disabled","_retry","retry","maxRequestSize","_messageId","_responseCallbacks","_advice","reconnect","interval","Event","onbeforeunload","disconnect","disable","feature","setHeader","handshake","_selectTransport","_send","version","supportedConnectionTypes","_transport","connectionType","response","successful","_clientId","_connectRequest","_cycleConnection","close","c","subscription","force","hasSubscribe","dead","publish","publication","receiveMessage","advice","_handleAdvice","_deliverMessage","_transportUp","messageError","immediate","_transportSend","transportTypes","Transport","get","transport","_generateMessageId","envelope","send","Math","pow","MAX_DELAY","batching","_outbox","encode","flush","_connectMessage","flushLargeBatch","last","pop","receive","envelopes","responses","handleError","_getCookies","getCookies","domain","secure","toValueString","_storeCookies","setCookie","cookie","allowed","disabled","_transports","pair","connType","connEndpoint","isUsable","create","register","_registry","element","eventName","wrapped","addEventListener","attachEvent","_element","_type","_handler","detach","removeEventListener","detachEvent","onunload","f","quote","escapable","lastIndex","a","meta","charCodeAt","str","holder","k","partial","mind","gap","rep","isFinite","String","indent","Date","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","cx","\b","\t","\n","\f","\r","\"","\\","replacer","space","text","reviver","walk","j","eval","SyntaxError","WebSocket","_pending","socket","_unloaded","_createSocket","onopen","_socket","_everConnected","_ping","closed","onclose","onerror","wasConnected","onmessage","event","getSocketUrl","MozWebSocket","PROTOCOLS","http:","https:","sockets","websocket","EventSource","_xhr","XHR","usable","eventsource","xhr","ActiveXObject","XMLHttpRequest","open","setRequestHeader","abort","onreadystatechange","readyState","parsedMessage","responseText","CORS","xhrClass","XDomainRequest","cleanUp","onload","ontimeout","onprogress","withCredentials","JSONP","jsonp","_cbCount","head","document","getElementsByTagName","script","createElement","callbackName","getCallbackName","parentNode","removeChild","src","appendChild"],"mappings":"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"}
data/lib/faye-browser.js DELETED
@@ -1,2541 +0,0 @@
1
- (function() {
2
- 'use strict';
3
-
4
- var Faye = {
5
- VERSION: '1.0.3',
6
-
7
- BAYEUX_VERSION: '1.0',
8
- ID_LENGTH: 160,
9
- JSONP_CALLBACK: 'jsonpcallback',
10
- CONNECTION_TYPES: ['long-polling', 'cross-origin-long-polling', 'callback-polling', 'websocket', 'eventsource', 'in-process'],
11
-
12
- MANDATORY_CONNECTION_TYPES: ['long-polling', 'callback-polling', 'in-process'],
13
-
14
- ENV: (typeof window !== 'undefined') ? window : global,
15
-
16
- extend: function(dest, source, overwrite) {
17
- if (!source) return dest;
18
- for (var key in source) {
19
- if (!source.hasOwnProperty(key)) continue;
20
- if (dest.hasOwnProperty(key) && overwrite === false) continue;
21
- if (dest[key] !== source[key])
22
- dest[key] = source[key];
23
- }
24
- return dest;
25
- },
26
-
27
- random: function(bitlength) {
28
- bitlength = bitlength || this.ID_LENGTH;
29
- return csprng(bitlength, 36);
30
- },
31
-
32
- clientIdFromMessages: function(messages) {
33
- var connect = this.filter([].concat(messages), function(message) {
34
- return message.channel === '/meta/connect';
35
- });
36
- return connect[0] && connect[0].clientId;
37
- },
38
-
39
- copyObject: function(object) {
40
- var clone, i, key;
41
- if (object instanceof Array) {
42
- clone = [];
43
- i = object.length;
44
- while (i--) clone[i] = Faye.copyObject(object[i]);
45
- return clone;
46
- } else if (typeof object === 'object') {
47
- clone = (object === null) ? null : {};
48
- for (key in object) clone[key] = Faye.copyObject(object[key]);
49
- return clone;
50
- } else {
51
- return object;
52
- }
53
- },
54
-
55
- commonElement: function(lista, listb) {
56
- for (var i = 0, n = lista.length; i < n; i++) {
57
- if (this.indexOf(listb, lista[i]) !== -1)
58
- return lista[i];
59
- }
60
- return null;
61
- },
62
-
63
- indexOf: function(list, needle) {
64
- if (list.indexOf) return list.indexOf(needle);
65
-
66
- for (var i = 0, n = list.length; i < n; i++) {
67
- if (list[i] === needle) return i;
68
- }
69
- return -1;
70
- },
71
-
72
- map: function(object, callback, context) {
73
- if (object.map) return object.map(callback, context);
74
- var result = [];
75
-
76
- if (object instanceof Array) {
77
- for (var i = 0, n = object.length; i < n; i++) {
78
- result.push(callback.call(context || null, object[i], i));
79
- }
80
- } else {
81
- for (var key in object) {
82
- if (!object.hasOwnProperty(key)) continue;
83
- result.push(callback.call(context || null, key, object[key]));
84
- }
85
- }
86
- return result;
87
- },
88
-
89
- filter: function(array, callback, context) {
90
- if (array.filter) return array.filter(callback, context);
91
- var result = [];
92
- for (var i = 0, n = array.length; i < n; i++) {
93
- if (callback.call(context || null, array[i], i))
94
- result.push(array[i]);
95
- }
96
- return result;
97
- },
98
-
99
- asyncEach: function(list, iterator, callback, context) {
100
- var n = list.length,
101
- i = -1,
102
- calls = 0,
103
- looping = false;
104
-
105
- var iterate = function() {
106
- calls -= 1;
107
- i += 1;
108
- if (i === n) return callback && callback.call(context);
109
- iterator(list[i], resume);
110
- };
111
-
112
- var loop = function() {
113
- if (looping) return;
114
- looping = true;
115
- while (calls > 0) iterate();
116
- looping = false;
117
- };
118
-
119
- var resume = function() {
120
- calls += 1;
121
- loop();
122
- };
123
- resume();
124
- },
125
-
126
- // http://assanka.net/content/tech/2009/09/02/json2-js-vs-prototype/
127
- toJSON: function(object) {
128
- if (!this.stringify) return JSON.stringify(object);
129
-
130
- return this.stringify(object, function(key, value) {
131
- return (this[key] instanceof Array) ? this[key] : value;
132
- });
133
- }
134
- };
135
-
136
- if (typeof module !== 'undefined')
137
- module.exports = Faye;
138
- else if (typeof window !== 'undefined')
139
- window.Faye = Faye;
140
-
141
- Faye.Class = function(parent, methods) {
142
- if (typeof parent !== 'function') {
143
- methods = parent;
144
- parent = Object;
145
- }
146
-
147
- var klass = function() {
148
- if (!this.initialize) return this;
149
- return this.initialize.apply(this, arguments) || this;
150
- };
151
-
152
- var bridge = function() {};
153
- bridge.prototype = parent.prototype;
154
-
155
- klass.prototype = new bridge();
156
- Faye.extend(klass.prototype, methods);
157
-
158
- return klass;
159
- };
160
-
161
- (function() {
162
- var EventEmitter = Faye.EventEmitter = function() {};
163
-
164
- /*
165
- Copyright Joyent, Inc. and other Node contributors. All rights reserved.
166
- Permission is hereby granted, free of charge, to any person obtaining a copy of
167
- this software and associated documentation files (the "Software"), to deal in
168
- the Software without restriction, including without limitation the rights to
169
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
170
- of the Software, and to permit persons to whom the Software is furnished to do
171
- so, subject to the following conditions:
172
-
173
- The above copyright notice and this permission notice shall be included in all
174
- copies or substantial portions of the Software.
175
-
176
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
177
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
178
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
179
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
180
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
181
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
182
- SOFTWARE.
183
- */
184
-
185
- var isArray = typeof Array.isArray === 'function'
186
- ? Array.isArray
187
- : function (xs) {
188
- return Object.prototype.toString.call(xs) === '[object Array]'
189
- }
190
- ;
191
- function indexOf (xs, x) {
192
- if (xs.indexOf) return xs.indexOf(x);
193
- for (var i = 0; i < xs.length; i++) {
194
- if (x === xs[i]) return i;
195
- }
196
- return -1;
197
- }
198
-
199
-
200
- EventEmitter.prototype.emit = function(type) {
201
- // If there is no 'error' event listener then throw.
202
- if (type === 'error') {
203
- if (!this._events || !this._events.error ||
204
- (isArray(this._events.error) && !this._events.error.length))
205
- {
206
- if (arguments[1] instanceof Error) {
207
- throw arguments[1]; // Unhandled 'error' event
208
- } else {
209
- throw new Error("Uncaught, unspecified 'error' event.");
210
- }
211
- return false;
212
- }
213
- }
214
-
215
- if (!this._events) return false;
216
- var handler = this._events[type];
217
- if (!handler) return false;
218
-
219
- if (typeof handler == 'function') {
220
- switch (arguments.length) {
221
- // fast cases
222
- case 1:
223
- handler.call(this);
224
- break;
225
- case 2:
226
- handler.call(this, arguments[1]);
227
- break;
228
- case 3:
229
- handler.call(this, arguments[1], arguments[2]);
230
- break;
231
- // slower
232
- default:
233
- var args = Array.prototype.slice.call(arguments, 1);
234
- handler.apply(this, args);
235
- }
236
- return true;
237
-
238
- } else if (isArray(handler)) {
239
- var args = Array.prototype.slice.call(arguments, 1);
240
-
241
- var listeners = handler.slice();
242
- for (var i = 0, l = listeners.length; i < l; i++) {
243
- listeners[i].apply(this, args);
244
- }
245
- return true;
246
-
247
- } else {
248
- return false;
249
- }
250
- };
251
-
252
- // EventEmitter is defined in src/node_events.cc
253
- // EventEmitter.prototype.emit() is also defined there.
254
- EventEmitter.prototype.addListener = function(type, listener) {
255
- if ('function' !== typeof listener) {
256
- throw new Error('addListener only takes instances of Function');
257
- }
258
-
259
- if (!this._events) this._events = {};
260
-
261
- // To avoid recursion in the case that type == "newListeners"! Before
262
- // adding it to the listeners, first emit "newListeners".
263
- this.emit('newListener', type, listener);
264
-
265
- if (!this._events[type]) {
266
- // Optimize the case of one listener. Don't need the extra array object.
267
- this._events[type] = listener;
268
- } else if (isArray(this._events[type])) {
269
- // If we've already got an array, just append.
270
- this._events[type].push(listener);
271
- } else {
272
- // Adding the second element, need to change to array.
273
- this._events[type] = [this._events[type], listener];
274
- }
275
-
276
- return this;
277
- };
278
-
279
- EventEmitter.prototype.on = EventEmitter.prototype.addListener;
280
-
281
- EventEmitter.prototype.once = function(type, listener) {
282
- var self = this;
283
- self.on(type, function g() {
284
- self.removeListener(type, g);
285
- listener.apply(this, arguments);
286
- });
287
-
288
- return this;
289
- };
290
-
291
- EventEmitter.prototype.removeListener = function(type, listener) {
292
- if ('function' !== typeof listener) {
293
- throw new Error('removeListener only takes instances of Function');
294
- }
295
-
296
- // does not use listeners(), so no side effect of creating _events[type]
297
- if (!this._events || !this._events[type]) return this;
298
-
299
- var list = this._events[type];
300
-
301
- if (isArray(list)) {
302
- var i = indexOf(list, listener);
303
- if (i < 0) return this;
304
- list.splice(i, 1);
305
- if (list.length == 0)
306
- delete this._events[type];
307
- } else if (this._events[type] === listener) {
308
- delete this._events[type];
309
- }
310
-
311
- return this;
312
- };
313
-
314
- EventEmitter.prototype.removeAllListeners = function(type) {
315
- if (arguments.length === 0) {
316
- this._events = {};
317
- return this;
318
- }
319
-
320
- // does not use listeners(), so no side effect of creating _events[type]
321
- if (type && this._events && this._events[type]) this._events[type] = null;
322
- return this;
323
- };
324
-
325
- EventEmitter.prototype.listeners = function(type) {
326
- if (!this._events) this._events = {};
327
- if (!this._events[type]) this._events[type] = [];
328
- if (!isArray(this._events[type])) {
329
- this._events[type] = [this._events[type]];
330
- }
331
- return this._events[type];
332
- };
333
-
334
- })();
335
-
336
- Faye.Namespace = Faye.Class({
337
- initialize: function() {
338
- this._used = {};
339
- },
340
-
341
- exists: function(id) {
342
- return this._used.hasOwnProperty(id);
343
- },
344
-
345
- generate: function() {
346
- var name = Faye.random();
347
- while (this._used.hasOwnProperty(name))
348
- name = Faye.random();
349
- return this._used[name] = name;
350
- },
351
-
352
- release: function(id) {
353
- delete this._used[id];
354
- }
355
- });
356
-
357
- (function() {
358
- 'use strict';
359
-
360
- var timeout = setTimeout;
361
-
362
- var defer;
363
- if (typeof setImmediate === 'function')
364
- defer = function(fn) { setImmediate(fn) };
365
- else if (typeof process === 'object' && process.nextTick)
366
- defer = function(fn) { process.nextTick(fn) };
367
- else
368
- defer = function(fn) { timeout(fn, 0) };
369
-
370
- var PENDING = 0,
371
- FULFILLED = 1,
372
- REJECTED = 2;
373
-
374
- var RETURN = function(x) { return x },
375
- THROW = function(x) { throw x };
376
-
377
- var Promise = function(task) {
378
- this._state = PENDING;
379
- this._callbacks = [];
380
- this._errbacks = [];
381
-
382
- if (typeof task !== 'function') return;
383
- var self = this;
384
-
385
- task(function(value) { fulfill(self, value) },
386
- function(reason) { reject(self, reason) });
387
- };
388
-
389
- Promise.prototype.then = function(callback, errback) {
390
- var next = {}, self = this;
391
-
392
- next.promise = new Promise(function(fulfill, reject) {
393
- next.fulfill = fulfill;
394
- next.reject = reject;
395
-
396
- registerCallback(self, callback, next);
397
- registerErrback(self, errback, next);
398
- });
399
- return next.promise;
400
- };
401
-
402
- var registerCallback = function(promise, callback, next) {
403
- if (typeof callback !== 'function') callback = RETURN;
404
- var handler = function(value) { invoke(callback, value, next) };
405
- if (promise._state === PENDING) {
406
- promise._callbacks.push(handler);
407
- } else if (promise._state === FULFILLED) {
408
- handler(promise._value);
409
- }
410
- };
411
-
412
- var registerErrback = function(promise, errback, next) {
413
- if (typeof errback !== 'function') errback = THROW;
414
- var handler = function(reason) { invoke(errback, reason, next) };
415
- if (promise._state === PENDING) {
416
- promise._errbacks.push(handler);
417
- } else if (promise._state === REJECTED) {
418
- handler(promise._reason);
419
- }
420
- };
421
-
422
- var invoke = function(fn, value, next) {
423
- defer(function() { _invoke(fn, value, next) });
424
- };
425
-
426
- var _invoke = function(fn, value, next) {
427
- var called = false, outcome, type, then;
428
-
429
- try {
430
- outcome = fn(value);
431
- type = typeof outcome;
432
- then = outcome !== null && (type === 'function' || type === 'object') && outcome.then;
433
-
434
- if (outcome === next.promise)
435
- return next.reject(new TypeError('Recursive promise chain detected'));
436
-
437
- if (typeof then !== 'function') return next.fulfill(outcome);
438
-
439
- then.call(outcome, function(v) {
440
- if (called) return;
441
- called = true;
442
- _invoke(RETURN, v, next);
443
- }, function(r) {
444
- if (called) return;
445
- called = true;
446
- next.reject(r);
447
- });
448
-
449
- } catch (error) {
450
- if (called) return;
451
- called = true;
452
- next.reject(error);
453
- }
454
- };
455
-
456
- var fulfill = Promise.fulfill = Promise.resolve = function(promise, value) {
457
- if (promise._state !== PENDING) return;
458
-
459
- promise._state = FULFILLED;
460
- promise._value = value;
461
- promise._errbacks = [];
462
-
463
- var callbacks = promise._callbacks, cb;
464
- while (cb = callbacks.shift()) cb(value);
465
- };
466
-
467
- var reject = Promise.reject = function(promise, reason) {
468
- if (promise._state !== PENDING) return;
469
-
470
- promise._state = REJECTED;
471
- promise._reason = reason;
472
- promise._callbacks = [];
473
-
474
- var errbacks = promise._errbacks, eb;
475
- while (eb = errbacks.shift()) eb(reason);
476
- };
477
-
478
- Promise.defer = defer;
479
-
480
- Promise.deferred = Promise.pending = function() {
481
- var tuple = {};
482
-
483
- tuple.promise = new Promise(function(fulfill, reject) {
484
- tuple.fulfill = tuple.resolve = fulfill;
485
- tuple.reject = reject;
486
- });
487
- return tuple;
488
- };
489
-
490
- Promise.fulfilled = Promise.resolved = function(value) {
491
- return new Promise(function(fulfill, reject) { fulfill(value) });
492
- };
493
-
494
- Promise.rejected = function(reason) {
495
- return new Promise(function(fulfill, reject) { reject(reason) });
496
- };
497
-
498
- if (typeof Faye === 'undefined')
499
- module.exports = Promise;
500
- else
501
- Faye.Promise = Promise;
502
-
503
- })();
504
-
505
- Faye.Set = Faye.Class({
506
- initialize: function() {
507
- this._index = {};
508
- },
509
-
510
- add: function(item) {
511
- var key = (item.id !== undefined) ? item.id : item;
512
- if (this._index.hasOwnProperty(key)) return false;
513
- this._index[key] = item;
514
- return true;
515
- },
516
-
517
- forEach: function(block, context) {
518
- for (var key in this._index) {
519
- if (this._index.hasOwnProperty(key))
520
- block.call(context, this._index[key]);
521
- }
522
- },
523
-
524
- isEmpty: function() {
525
- for (var key in this._index) {
526
- if (this._index.hasOwnProperty(key)) return false;
527
- }
528
- return true;
529
- },
530
-
531
- member: function(item) {
532
- for (var key in this._index) {
533
- if (this._index[key] === item) return true;
534
- }
535
- return false;
536
- },
537
-
538
- remove: function(item) {
539
- var key = (item.id !== undefined) ? item.id : item;
540
- var removed = this._index[key];
541
- delete this._index[key];
542
- return removed;
543
- },
544
-
545
- toArray: function() {
546
- var array = [];
547
- this.forEach(function(item) { array.push(item) });
548
- return array;
549
- }
550
- });
551
-
552
- Faye.URI = {
553
- isURI: function(uri) {
554
- return uri && uri.protocol && uri.host && uri.path;
555
- },
556
-
557
- isSameOrigin: function(uri) {
558
- var location = Faye.ENV.location;
559
- return uri.protocol === location.protocol &&
560
- uri.hostname === location.hostname &&
561
- uri.port === location.port;
562
- },
563
-
564
- parse: function(url) {
565
- if (typeof url !== 'string') return url;
566
- var uri = {}, parts, query, pairs, i, n, data;
567
-
568
- var consume = function(name, pattern) {
569
- url = url.replace(pattern, function(match) {
570
- uri[name] = match;
571
- return '';
572
- });
573
- uri[name] = uri[name] || '';
574
- };
575
-
576
- consume('protocol', /^[a-z]+\:/i);
577
- consume('host', /^\/\/[^\/\?#]+/);
578
-
579
- if (!/^\//.test(url) && !uri.host)
580
- url = Faye.ENV.location.pathname.replace(/[^\/]*$/, '') + url;
581
-
582
- consume('pathname', /^[^\?#]*/);
583
- consume('search', /^\?[^#]*/);
584
- consume('hash', /^#.*/);
585
-
586
- uri.protocol = uri.protocol || Faye.ENV.location.protocol;
587
-
588
- if (uri.host) {
589
- uri.host = uri.host.substr(2);
590
- parts = uri.host.split(':');
591
- uri.hostname = parts[0];
592
- uri.port = parts[1] || '';
593
- } else {
594
- uri.host = Faye.ENV.location.host;
595
- uri.hostname = Faye.ENV.location.hostname;
596
- uri.port = Faye.ENV.location.port;
597
- }
598
-
599
- uri.pathname = uri.pathname || '/';
600
- uri.path = uri.pathname + uri.search;
601
-
602
- query = uri.search.replace(/^\?/, '');
603
- pairs = query ? query.split('&') : [];
604
- data = {};
605
-
606
- for (i = 0, n = pairs.length; i < n; i++) {
607
- parts = pairs[i].split('=');
608
- data[decodeURIComponent(parts[0] || '')] = decodeURIComponent(parts[1] || '');
609
- }
610
-
611
- uri.query = data;
612
-
613
- uri.href = this.stringify(uri);
614
- return uri;
615
- },
616
-
617
- stringify: function(uri) {
618
- var string = uri.protocol + '//' + uri.hostname;
619
- if (uri.port) string += ':' + uri.port;
620
- string += uri.pathname + this.queryString(uri.query) + (uri.hash || '');
621
- return string;
622
- },
623
-
624
- queryString: function(query) {
625
- var pairs = [];
626
- for (var key in query) {
627
- if (!query.hasOwnProperty(key)) continue;
628
- pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(query[key]));
629
- }
630
- if (pairs.length === 0) return '';
631
- return '?' + pairs.join('&');
632
- }
633
- };
634
-
635
- Faye.Error = Faye.Class({
636
- initialize: function(code, params, message) {
637
- this.code = code;
638
- this.params = Array.prototype.slice.call(params);
639
- this.message = message;
640
- },
641
-
642
- toString: function() {
643
- return this.code + ':' +
644
- this.params.join(',') + ':' +
645
- this.message;
646
- }
647
- });
648
-
649
- Faye.Error.parse = function(message) {
650
- message = message || '';
651
- if (!Faye.Grammar.ERROR.test(message)) return new this(null, [], message);
652
-
653
- var parts = message.split(':'),
654
- code = parseInt(parts[0]),
655
- params = parts[1].split(','),
656
- message = parts[2];
657
-
658
- return new this(code, params, message);
659
- };
660
-
661
-
662
-
663
-
664
- Faye.Error.versionMismatch = function() {
665
- return new this(300, arguments, 'Version mismatch').toString();
666
- };
667
-
668
- Faye.Error.conntypeMismatch = function() {
669
- return new this(301, arguments, 'Connection types not supported').toString();
670
- };
671
-
672
- Faye.Error.extMismatch = function() {
673
- return new this(302, arguments, 'Extension mismatch').toString();
674
- };
675
-
676
- Faye.Error.badRequest = function() {
677
- return new this(400, arguments, 'Bad request').toString();
678
- };
679
-
680
- Faye.Error.clientUnknown = function() {
681
- return new this(401, arguments, 'Unknown client').toString();
682
- };
683
-
684
- Faye.Error.parameterMissing = function() {
685
- return new this(402, arguments, 'Missing required parameter').toString();
686
- };
687
-
688
- Faye.Error.channelForbidden = function() {
689
- return new this(403, arguments, 'Forbidden channel').toString();
690
- };
691
-
692
- Faye.Error.channelUnknown = function() {
693
- return new this(404, arguments, 'Unknown channel').toString();
694
- };
695
-
696
- Faye.Error.channelInvalid = function() {
697
- return new this(405, arguments, 'Invalid channel').toString();
698
- };
699
-
700
- Faye.Error.extUnknown = function() {
701
- return new this(406, arguments, 'Unknown extension').toString();
702
- };
703
-
704
- Faye.Error.publishFailed = function() {
705
- return new this(407, arguments, 'Failed to publish').toString();
706
- };
707
-
708
- Faye.Error.serverError = function() {
709
- return new this(500, arguments, 'Internal server error').toString();
710
- };
711
-
712
-
713
- Faye.Deferrable = {
714
- then: function(callback, errback) {
715
- var self = this;
716
- if (!this._promise)
717
- this._promise = new Faye.Promise(function(fulfill, reject) {
718
- self._fulfill = fulfill;
719
- self._reject = reject;
720
- });
721
-
722
- if (arguments.length === 0)
723
- return this._promise;
724
- else
725
- return this._promise.then(callback, errback);
726
- },
727
-
728
- callback: function(callback, context) {
729
- return this.then(function(value) { callback.call(context, value) });
730
- },
731
-
732
- errback: function(callback, context) {
733
- return this.then(null, function(reason) { callback.call(context, reason) });
734
- },
735
-
736
- timeout: function(seconds, message) {
737
- this.then();
738
- var self = this;
739
- this._timer = Faye.ENV.setTimeout(function() {
740
- self._reject(message);
741
- }, seconds * 1000);
742
- },
743
-
744
- setDeferredStatus: function(status, value) {
745
- if (this._timer) Faye.ENV.clearTimeout(this._timer);
746
-
747
- var promise = this.then();
748
-
749
- if (status === 'succeeded')
750
- this._fulfill(value);
751
- else if (status === 'failed')
752
- this._reject(value);
753
- else
754
- delete this._promise;
755
- }
756
- };
757
-
758
- Faye.Publisher = {
759
- countListeners: function(eventType) {
760
- return this.listeners(eventType).length;
761
- },
762
-
763
- bind: function(eventType, listener, context) {
764
- var slice = Array.prototype.slice,
765
- handler = function() { listener.apply(context, slice.call(arguments)) };
766
-
767
- this._listeners = this._listeners || [];
768
- this._listeners.push([eventType, listener, context, handler]);
769
- return this.on(eventType, handler);
770
- },
771
-
772
- unbind: function(eventType, listener, context) {
773
- this._listeners = this._listeners || [];
774
- var n = this._listeners.length, tuple;
775
-
776
- while (n--) {
777
- tuple = this._listeners[n];
778
- if (tuple[0] !== eventType) continue;
779
- if (listener && (tuple[1] !== listener || tuple[2] !== context)) continue;
780
- this._listeners.splice(n, 1);
781
- this.removeListener(eventType, tuple[3]);
782
- }
783
- }
784
- };
785
-
786
- Faye.extend(Faye.Publisher, Faye.EventEmitter.prototype);
787
- Faye.Publisher.trigger = Faye.Publisher.emit;
788
-
789
- Faye.Timeouts = {
790
- addTimeout: function(name, delay, callback, context) {
791
- this._timeouts = this._timeouts || {};
792
- if (this._timeouts.hasOwnProperty(name)) return;
793
- var self = this;
794
- this._timeouts[name] = Faye.ENV.setTimeout(function() {
795
- delete self._timeouts[name];
796
- callback.call(context);
797
- }, 1000 * delay);
798
- },
799
-
800
- removeTimeout: function(name) {
801
- this._timeouts = this._timeouts || {};
802
- var timeout = this._timeouts[name];
803
- if (!timeout) return;
804
- clearTimeout(timeout);
805
- delete this._timeouts[name];
806
- },
807
-
808
- removeAllTimeouts: function() {
809
- this._timeouts = this._timeouts || {};
810
- for (var name in this._timeouts) this.removeTimeout(name);
811
- }
812
- };
813
-
814
- Faye.Logging = {
815
- LOG_LEVELS: {
816
- fatal: 4,
817
- error: 3,
818
- warn: 2,
819
- info: 1,
820
- debug: 0
821
- },
822
-
823
- writeLog: function(messageArgs, level) {
824
- if (!Faye.logger) return;
825
-
826
- var messageArgs = Array.prototype.slice.apply(messageArgs),
827
- banner = '[Faye',
828
- klass = this.className,
829
-
830
- message = messageArgs.shift().replace(/\?/g, function() {
831
- try {
832
- return Faye.toJSON(messageArgs.shift());
833
- } catch (e) {
834
- return '[Object]';
835
- }
836
- });
837
-
838
- for (var key in Faye) {
839
- if (klass) continue;
840
- if (typeof Faye[key] !== 'function') continue;
841
- if (this instanceof Faye[key]) klass = key;
842
- }
843
- if (klass) banner += '.' + klass;
844
- banner += '] ';
845
-
846
- if (typeof Faye.logger[level] === 'function')
847
- Faye.logger[level](banner + message);
848
- else if (typeof Faye.logger === 'function')
849
- Faye.logger(banner + message);
850
- }
851
- };
852
-
853
- (function() {
854
- for (var key in Faye.Logging.LOG_LEVELS)
855
- (function(level, value) {
856
- Faye.Logging[level] = function() {
857
- this.writeLog(arguments, level);
858
- };
859
- })(key, Faye.Logging.LOG_LEVELS[key]);
860
- })();
861
-
862
- Faye.Grammar = {
863
- CHANNEL_NAME: /^\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+(\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+)*$/,
864
- CHANNEL_PATTERN: /^(\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+)*\/\*{1,2}$/,
865
- 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])|(\-|\_|\!|\~|\(|\)|\$|\@)| |\/|\*|\.))*)$/,
866
- VERSION: /^([0-9])+(\.(([a-z]|[A-Z])|[0-9])(((([a-z]|[A-Z])|[0-9])|\-|\_))*)*$/
867
- };
868
-
869
- Faye.Extensible = {
870
- addExtension: function(extension) {
871
- this._extensions = this._extensions || [];
872
- this._extensions.push(extension);
873
- if (extension.added) extension.added(this);
874
- },
875
-
876
- removeExtension: function(extension) {
877
- if (!this._extensions) return;
878
- var i = this._extensions.length;
879
- while (i--) {
880
- if (this._extensions[i] !== extension) continue;
881
- this._extensions.splice(i,1);
882
- if (extension.removed) extension.removed(this);
883
- }
884
- },
885
-
886
- pipeThroughExtensions: function(stage, message, request, callback, context) {
887
- this.debug('Passing through ? extensions: ?', stage, message);
888
-
889
- if (!this._extensions) return callback.call(context, message);
890
- var extensions = this._extensions.slice();
891
-
892
- var pipe = function(message) {
893
- if (!message) return callback.call(context, message);
894
-
895
- var extension = extensions.shift();
896
- if (!extension) return callback.call(context, message);
897
-
898
- var fn = extension[stage];
899
- if (!fn) return pipe(message);
900
-
901
- if (fn.length >= 3) extension[stage](message, request, pipe);
902
- else extension[stage](message, pipe);
903
- };
904
- pipe(message);
905
- }
906
- };
907
-
908
- Faye.extend(Faye.Extensible, Faye.Logging);
909
-
910
- Faye.Channel = Faye.Class({
911
- initialize: function(name) {
912
- this.id = this.name = name;
913
- },
914
-
915
- push: function(message) {
916
- this.trigger('message', message);
917
- },
918
-
919
- isUnused: function() {
920
- return this.countListeners('message') === 0;
921
- }
922
- });
923
-
924
- Faye.extend(Faye.Channel.prototype, Faye.Publisher);
925
-
926
- Faye.extend(Faye.Channel, {
927
- HANDSHAKE: '/meta/handshake',
928
- CONNECT: '/meta/connect',
929
- SUBSCRIBE: '/meta/subscribe',
930
- UNSUBSCRIBE: '/meta/unsubscribe',
931
- DISCONNECT: '/meta/disconnect',
932
-
933
- META: 'meta',
934
- SERVICE: 'service',
935
-
936
- expand: function(name) {
937
- var segments = this.parse(name),
938
- channels = ['/**', name];
939
-
940
- var copy = segments.slice();
941
- copy[copy.length - 1] = '*';
942
- channels.push(this.unparse(copy));
943
-
944
- for (var i = 1, n = segments.length; i < n; i++) {
945
- copy = segments.slice(0, i);
946
- copy.push('**');
947
- channels.push(this.unparse(copy));
948
- }
949
-
950
- return channels;
951
- },
952
-
953
- isValid: function(name) {
954
- return Faye.Grammar.CHANNEL_NAME.test(name) ||
955
- Faye.Grammar.CHANNEL_PATTERN.test(name);
956
- },
957
-
958
- parse: function(name) {
959
- if (!this.isValid(name)) return null;
960
- return name.split('/').slice(1);
961
- },
962
-
963
- unparse: function(segments) {
964
- return '/' + segments.join('/');
965
- },
966
-
967
- isMeta: function(name) {
968
- var segments = this.parse(name);
969
- return segments ? (segments[0] === this.META) : null;
970
- },
971
-
972
- isService: function(name) {
973
- var segments = this.parse(name);
974
- return segments ? (segments[0] === this.SERVICE) : null;
975
- },
976
-
977
- isSubscribable: function(name) {
978
- if (!this.isValid(name)) return null;
979
- return !this.isMeta(name) && !this.isService(name);
980
- },
981
-
982
- Set: Faye.Class({
983
- initialize: function() {
984
- this._channels = {};
985
- },
986
-
987
- getKeys: function() {
988
- var keys = [];
989
- for (var key in this._channels) keys.push(key);
990
- return keys;
991
- },
992
-
993
- remove: function(name) {
994
- delete this._channels[name];
995
- },
996
-
997
- hasSubscription: function(name) {
998
- return this._channels.hasOwnProperty(name);
999
- },
1000
-
1001
- subscribe: function(names, callback, context) {
1002
- if (!callback) return;
1003
- var name;
1004
- for (var i = 0, n = names.length; i < n; i++) {
1005
- name = names[i];
1006
- var channel = this._channels[name] = this._channels[name] || new Faye.Channel(name);
1007
- channel.bind('message', callback, context);
1008
- }
1009
- },
1010
-
1011
- unsubscribe: function(name, callback, context) {
1012
- var channel = this._channels[name];
1013
- if (!channel) return false;
1014
- channel.unbind('message', callback, context);
1015
-
1016
- if (channel.isUnused()) {
1017
- this.remove(name);
1018
- return true;
1019
- } else {
1020
- return false;
1021
- }
1022
- },
1023
-
1024
- distributeMessage: function(message) {
1025
- var channels = Faye.Channel.expand(message.channel);
1026
-
1027
- for (var i = 0, n = channels.length; i < n; i++) {
1028
- var channel = this._channels[channels[i]];
1029
- if (channel) channel.trigger('message', message.data);
1030
- }
1031
- }
1032
- })
1033
- });
1034
-
1035
- Faye.Envelope = Faye.Class({
1036
- initialize: function(message, timeout) {
1037
- this.id = message.id;
1038
- this.message = message;
1039
-
1040
- if (timeout !== undefined) this.timeout(timeout / 1000, false);
1041
- }
1042
- });
1043
-
1044
- Faye.extend(Faye.Envelope.prototype, Faye.Deferrable);
1045
-
1046
- Faye.Publication = Faye.Class(Faye.Deferrable);
1047
-
1048
- Faye.Subscription = Faye.Class({
1049
- initialize: function(client, channels, callback, context) {
1050
- this._client = client;
1051
- this._channels = channels;
1052
- this._callback = callback;
1053
- this._context = context;
1054
- this._cancelled = false;
1055
- },
1056
-
1057
- cancel: function() {
1058
- if (this._cancelled) return;
1059
- this._client.unsubscribe(this._channels, this._callback, this._context);
1060
- this._cancelled = true;
1061
- },
1062
-
1063
- unsubscribe: function() {
1064
- this.cancel();
1065
- }
1066
- });
1067
-
1068
- Faye.extend(Faye.Subscription.prototype, Faye.Deferrable);
1069
-
1070
- Faye.Client = Faye.Class({
1071
- UNCONNECTED: 1,
1072
- CONNECTING: 2,
1073
- CONNECTED: 3,
1074
- DISCONNECTED: 4,
1075
-
1076
- HANDSHAKE: 'handshake',
1077
- RETRY: 'retry',
1078
- NONE: 'none',
1079
-
1080
- CONNECTION_TIMEOUT: 60,
1081
- DEFAULT_RETRY: 5,
1082
- MAX_REQUEST_SIZE: 2048,
1083
-
1084
- DEFAULT_ENDPOINT: '/bayeux',
1085
- INTERVAL: 0,
1086
-
1087
- initialize: function(endpoint, options) {
1088
- this.info('New client created for ?', endpoint);
1089
-
1090
- this._options = options || {};
1091
- this.endpoint = Faye.URI.parse(endpoint || this.DEFAULT_ENDPOINT);
1092
- this.endpoints = this._options.endpoints || {};
1093
- this.transports = {};
1094
- this.cookies = Faye.CookieJar && new Faye.CookieJar();
1095
- this.headers = {};
1096
- this.ca = this._options.ca;
1097
- this._disabled = [];
1098
- this._retry = this._options.retry || this.DEFAULT_RETRY;
1099
-
1100
- for (var key in this.endpoints)
1101
- this.endpoints[key] = Faye.URI.parse(this.endpoints[key]);
1102
-
1103
- this.maxRequestSize = this.MAX_REQUEST_SIZE;
1104
-
1105
- this._state = this.UNCONNECTED;
1106
- this._channels = new Faye.Channel.Set();
1107
- this._messageId = 0;
1108
-
1109
- this._responseCallbacks = {};
1110
-
1111
- this._advice = {
1112
- reconnect: this.RETRY,
1113
- interval: 1000 * (this._options.interval || this.INTERVAL),
1114
- timeout: 1000 * (this._options.timeout || this.CONNECTION_TIMEOUT)
1115
- };
1116
-
1117
- if (Faye.Event && Faye.ENV.onbeforeunload !== undefined)
1118
- Faye.Event.on(Faye.ENV, 'beforeunload', function() {
1119
- if (Faye.indexOf(this._disabled, 'autodisconnect') < 0)
1120
- this.disconnect();
1121
- }, this);
1122
- },
1123
-
1124
- disable: function(feature) {
1125
- this._disabled.push(feature);
1126
- },
1127
-
1128
- setHeader: function(name, value) {
1129
- this.headers[name] = value;
1130
- },
1131
-
1132
- // Request
1133
- // MUST include: * channel
1134
- // * version
1135
- // * supportedConnectionTypes
1136
- // MAY include: * minimumVersion
1137
- // * ext
1138
- // * id
1139
- //
1140
- // Success Response Failed Response
1141
- // MUST include: * channel MUST include: * channel
1142
- // * version * successful
1143
- // * supportedConnectionTypes * error
1144
- // * clientId MAY include: * supportedConnectionTypes
1145
- // * successful * advice
1146
- // MAY include: * minimumVersion * version
1147
- // * advice * minimumVersion
1148
- // * ext * ext
1149
- // * id * id
1150
- // * authSuccessful
1151
- handshake: function(callback, context) {
1152
- if (this._advice.reconnect === this.NONE) return;
1153
- if (this._state !== this.UNCONNECTED) return;
1154
-
1155
- this._state = this.CONNECTING;
1156
- var self = this;
1157
-
1158
- this.info('Initiating handshake with ?', Faye.URI.stringify(this.endpoint));
1159
- this._selectTransport(Faye.MANDATORY_CONNECTION_TYPES);
1160
-
1161
- this._send({
1162
- channel: Faye.Channel.HANDSHAKE,
1163
- version: Faye.BAYEUX_VERSION,
1164
- supportedConnectionTypes: [this._transport.connectionType]
1165
-
1166
- }, function(response) {
1167
-
1168
- if (response.successful) {
1169
- this._state = this.CONNECTED;
1170
- this._clientId = response.clientId;
1171
-
1172
- this._selectTransport(response.supportedConnectionTypes);
1173
-
1174
- this.info('Handshake successful: ?', this._clientId);
1175
-
1176
- this.subscribe(this._channels.getKeys(), true);
1177
- if (callback) Faye.Promise.defer(function() { callback.call(context) });
1178
-
1179
- } else {
1180
- this.info('Handshake unsuccessful');
1181
- Faye.ENV.setTimeout(function() { self.handshake(callback, context) }, this._advice.interval);
1182
- this._state = this.UNCONNECTED;
1183
- }
1184
- }, this);
1185
- },
1186
-
1187
- // Request Response
1188
- // MUST include: * channel MUST include: * channel
1189
- // * clientId * successful
1190
- // * connectionType * clientId
1191
- // MAY include: * ext MAY include: * error
1192
- // * id * advice
1193
- // * ext
1194
- // * id
1195
- // * timestamp
1196
- connect: function(callback, context) {
1197
- if (this._advice.reconnect === this.NONE) return;
1198
- if (this._state === this.DISCONNECTED) return;
1199
-
1200
- if (this._state === this.UNCONNECTED)
1201
- return this.handshake(function() { this.connect(callback, context) }, this);
1202
-
1203
- this.callback(callback, context);
1204
- if (this._state !== this.CONNECTED) return;
1205
-
1206
- this.info('Calling deferred actions for ?', this._clientId);
1207
- this.setDeferredStatus('succeeded');
1208
- this.setDeferredStatus('unknown');
1209
-
1210
- if (this._connectRequest) return;
1211
- this._connectRequest = true;
1212
-
1213
- this.info('Initiating connection for ?', this._clientId);
1214
-
1215
- this._send({
1216
- channel: Faye.Channel.CONNECT,
1217
- clientId: this._clientId,
1218
- connectionType: this._transport.connectionType
1219
-
1220
- }, this._cycleConnection, this);
1221
- },
1222
-
1223
- // Request Response
1224
- // MUST include: * channel MUST include: * channel
1225
- // * clientId * successful
1226
- // MAY include: * ext * clientId
1227
- // * id MAY include: * error
1228
- // * ext
1229
- // * id
1230
- disconnect: function() {
1231
- if (this._state !== this.CONNECTED) return;
1232
- this._state = this.DISCONNECTED;
1233
-
1234
- this.info('Disconnecting ?', this._clientId);
1235
-
1236
- this._send({
1237
- channel: Faye.Channel.DISCONNECT,
1238
- clientId: this._clientId
1239
-
1240
- }, function(response) {
1241
- if (!response.successful) return;
1242
- this._transport.close();
1243
- delete this._transport;
1244
- }, this);
1245
-
1246
- this.info('Clearing channel listeners for ?', this._clientId);
1247
- this._channels = new Faye.Channel.Set();
1248
- },
1249
-
1250
- // Request Response
1251
- // MUST include: * channel MUST include: * channel
1252
- // * clientId * successful
1253
- // * subscription * clientId
1254
- // MAY include: * ext * subscription
1255
- // * id MAY include: * error
1256
- // * advice
1257
- // * ext
1258
- // * id
1259
- // * timestamp
1260
- subscribe: function(channel, callback, context) {
1261
- if (channel instanceof Array)
1262
- return Faye.map(channel, function(c) {
1263
- return this.subscribe(c, callback, context);
1264
- }, this);
1265
-
1266
- var subscription = new Faye.Subscription(this, channel, callback, context),
1267
- force = (callback === true),
1268
- hasSubscribe = this._channels.hasSubscription(channel);
1269
-
1270
- if (hasSubscribe && !force) {
1271
- this._channels.subscribe([channel], callback, context);
1272
- subscription.setDeferredStatus('succeeded');
1273
- return subscription;
1274
- }
1275
-
1276
- this.connect(function() {
1277
- this.info('Client ? attempting to subscribe to ?', this._clientId, channel);
1278
- if (!force) this._channels.subscribe([channel], callback, context);
1279
-
1280
- this._send({
1281
- channel: Faye.Channel.SUBSCRIBE,
1282
- clientId: this._clientId,
1283
- subscription: channel
1284
-
1285
- }, function(response) {
1286
- if (!response.successful) {
1287
- subscription.setDeferredStatus('failed', Faye.Error.parse(response.error));
1288
- return this._channels.unsubscribe(channel, callback, context);
1289
- }
1290
-
1291
- var channels = [].concat(response.subscription);
1292
- this.info('Subscription acknowledged for ? to ?', this._clientId, channels);
1293
- subscription.setDeferredStatus('succeeded');
1294
- }, this);
1295
- }, this);
1296
-
1297
- return subscription;
1298
- },
1299
-
1300
- // Request Response
1301
- // MUST include: * channel MUST include: * channel
1302
- // * clientId * successful
1303
- // * subscription * clientId
1304
- // MAY include: * ext * subscription
1305
- // * id MAY include: * error
1306
- // * advice
1307
- // * ext
1308
- // * id
1309
- // * timestamp
1310
- unsubscribe: function(channel, callback, context) {
1311
- if (channel instanceof Array)
1312
- return Faye.map(channel, function(c) {
1313
- return this.unsubscribe(c, callback, context);
1314
- }, this);
1315
-
1316
- var dead = this._channels.unsubscribe(channel, callback, context);
1317
- if (!dead) return;
1318
-
1319
- this.connect(function() {
1320
- this.info('Client ? attempting to unsubscribe from ?', this._clientId, channel);
1321
-
1322
- this._send({
1323
- channel: Faye.Channel.UNSUBSCRIBE,
1324
- clientId: this._clientId,
1325
- subscription: channel
1326
-
1327
- }, function(response) {
1328
- if (!response.successful) return;
1329
-
1330
- var channels = [].concat(response.subscription);
1331
- this.info('Unsubscription acknowledged for ? from ?', this._clientId, channels);
1332
- }, this);
1333
- }, this);
1334
- },
1335
-
1336
- // Request Response
1337
- // MUST include: * channel MUST include: * channel
1338
- // * data * successful
1339
- // MAY include: * clientId MAY include: * id
1340
- // * id * error
1341
- // * ext * ext
1342
- publish: function(channel, data) {
1343
- var publication = new Faye.Publication();
1344
-
1345
- this.connect(function() {
1346
- this.info('Client ? queueing published message to ?: ?', this._clientId, channel, data);
1347
-
1348
- this._send({
1349
- channel: channel,
1350
- data: data,
1351
- clientId: this._clientId
1352
-
1353
- }, function(response) {
1354
- if (response.successful)
1355
- publication.setDeferredStatus('succeeded');
1356
- else
1357
- publication.setDeferredStatus('failed', Faye.Error.parse(response.error));
1358
- }, this);
1359
- }, this);
1360
-
1361
- return publication;
1362
- },
1363
-
1364
- receiveMessage: function(message) {
1365
- var id = message.id, timeout, callback;
1366
-
1367
- if (message.successful !== undefined) {
1368
- callback = this._responseCallbacks[id];
1369
- delete this._responseCallbacks[id];
1370
- }
1371
-
1372
- this.pipeThroughExtensions('incoming', message, null, function(message) {
1373
- if (!message) return;
1374
-
1375
- if (message.advice) this._handleAdvice(message.advice);
1376
- this._deliverMessage(message);
1377
-
1378
- if (callback) callback[0].call(callback[1], message);
1379
- }, this);
1380
-
1381
- if (this._transportUp === true) return;
1382
- this._transportUp = true;
1383
- this.trigger('transport:up');
1384
- },
1385
-
1386
- messageError: function(messages, immediate) {
1387
- var retry = this._retry,
1388
- self = this,
1389
- id, message, timeout;
1390
-
1391
- for (var i = 0, n = messages.length; i < n; i++) {
1392
- message = messages[i];
1393
- id = message.id;
1394
-
1395
- if (immediate)
1396
- this._transportSend(message);
1397
- else
1398
- Faye.ENV.setTimeout(function() { self._transportSend(message) }, retry * 1000);
1399
- }
1400
-
1401
- if (immediate || this._transportUp === false) return;
1402
- this._transportUp = false;
1403
- this.trigger('transport:down');
1404
- },
1405
-
1406
- _selectTransport: function(transportTypes) {
1407
- Faye.Transport.get(this, transportTypes, this._disabled, function(transport) {
1408
- this.debug('Selected ? transport for ?', transport.connectionType, Faye.URI.stringify(transport.endpoint));
1409
-
1410
- if (transport === this._transport) return;
1411
- if (this._transport) this._transport.close();
1412
-
1413
- this._transport = transport;
1414
- }, this);
1415
- },
1416
-
1417
- _send: function(message, callback, context) {
1418
- if (!this._transport) return;
1419
- message.id = message.id || this._generateMessageId();
1420
-
1421
- this.pipeThroughExtensions('outgoing', message, null, function(message) {
1422
- if (!message) return;
1423
- if (callback) this._responseCallbacks[message.id] = [callback, context];
1424
- this._transportSend(message);
1425
- }, this);
1426
- },
1427
-
1428
- _transportSend: function(message) {
1429
- if (!this._transport) return;
1430
-
1431
- var timeout = 1.2 * (this._advice.timeout || this._retry * 1000),
1432
- envelope = new Faye.Envelope(message, timeout);
1433
-
1434
- envelope.errback(function(immediate) {
1435
- this.messageError([message], immediate);
1436
- }, this);
1437
-
1438
- this._transport.send(envelope);
1439
- },
1440
-
1441
- _generateMessageId: function() {
1442
- this._messageId += 1;
1443
- if (this._messageId >= Math.pow(2,32)) this._messageId = 0;
1444
- return this._messageId.toString(36);
1445
- },
1446
-
1447
- _handleAdvice: function(advice) {
1448
- Faye.extend(this._advice, advice);
1449
-
1450
- if (this._advice.reconnect === this.HANDSHAKE && this._state !== this.DISCONNECTED) {
1451
- this._state = this.UNCONNECTED;
1452
- this._clientId = null;
1453
- this._cycleConnection();
1454
- }
1455
- },
1456
-
1457
- _deliverMessage: function(message) {
1458
- if (!message.channel || message.data === undefined) return;
1459
- this.info('Client ? calling listeners for ? with ?', this._clientId, message.channel, message.data);
1460
- this._channels.distributeMessage(message);
1461
- },
1462
-
1463
- _cycleConnection: function() {
1464
- if (this._connectRequest) {
1465
- this._connectRequest = null;
1466
- this.info('Closed connection for ?', this._clientId);
1467
- }
1468
- var self = this;
1469
- Faye.ENV.setTimeout(function() { self.connect() }, this._advice.interval);
1470
- }
1471
- });
1472
-
1473
- Faye.extend(Faye.Client.prototype, Faye.Deferrable);
1474
- Faye.extend(Faye.Client.prototype, Faye.Publisher);
1475
- Faye.extend(Faye.Client.prototype, Faye.Logging);
1476
- Faye.extend(Faye.Client.prototype, Faye.Extensible);
1477
-
1478
- Faye.Transport = Faye.extend(Faye.Class({
1479
- MAX_DELAY: 0,
1480
- batching: true,
1481
-
1482
- initialize: function(client, endpoint) {
1483
- this._client = client;
1484
- this.endpoint = endpoint;
1485
- this._outbox = [];
1486
- },
1487
-
1488
- close: function() {},
1489
-
1490
- encode: function(envelopes) {
1491
- return '';
1492
- },
1493
-
1494
- send: function(envelope) {
1495
- var message = envelope.message;
1496
-
1497
- this.debug('Client ? sending message to ?: ?',
1498
- this._client._clientId, Faye.URI.stringify(this.endpoint), message);
1499
-
1500
- if (!this.batching) return this.request([envelope]);
1501
-
1502
- this._outbox.push(envelope);
1503
-
1504
- if (message.channel === Faye.Channel.HANDSHAKE)
1505
- return this.addTimeout('publish', 0.01, this.flush, this);
1506
-
1507
- if (message.channel === Faye.Channel.CONNECT)
1508
- this._connectMessage = message;
1509
-
1510
- this.flushLargeBatch();
1511
- this.addTimeout('publish', this.MAX_DELAY, this.flush, this);
1512
- },
1513
-
1514
- flush: function() {
1515
- this.removeTimeout('publish');
1516
-
1517
- if (this._outbox.length > 1 && this._connectMessage)
1518
- this._connectMessage.advice = {timeout: 0};
1519
-
1520
- this.request(this._outbox);
1521
-
1522
- this._connectMessage = null;
1523
- this._outbox = [];
1524
- },
1525
-
1526
- flushLargeBatch: function() {
1527
- var string = this.encode(this._outbox);
1528
- if (string.length < this._client.maxRequestSize) return;
1529
- var last = this._outbox.pop();
1530
- this.flush();
1531
- if (last) this._outbox.push(last);
1532
- },
1533
-
1534
- receive: function(envelopes, responses) {
1535
- var n = envelopes.length;
1536
- while (n--) envelopes[n].setDeferredStatus('succeeded');
1537
-
1538
- responses = [].concat(responses);
1539
-
1540
- this.debug('Client ? received from ?: ?',
1541
- this._client._clientId, Faye.URI.stringify(this.endpoint), responses);
1542
-
1543
- for (var i = 0, n = responses.length; i < n; i++)
1544
- this._client.receiveMessage(responses[i]);
1545
- },
1546
-
1547
- handleError: function(envelopes, immediate) {
1548
- var n = envelopes.length;
1549
- while (n--) envelopes[n].setDeferredStatus('failed', immediate);
1550
- },
1551
-
1552
- _getCookies: function() {
1553
- var cookies = this._client.cookies;
1554
- if (!cookies) return '';
1555
-
1556
- return cookies.getCookies({
1557
- domain: this.endpoint.hostname,
1558
- path: this.endpoint.path,
1559
- secure: this.endpoint.protocol === 'https:'
1560
- }).toValueString();
1561
- },
1562
-
1563
- _storeCookies: function(setCookie) {
1564
- if (!setCookie || !this._client.cookies) return;
1565
- setCookie = [].concat(setCookie);
1566
- var cookie;
1567
-
1568
- for (var i = 0, n = setCookie.length; i < n; i++) {
1569
- cookie = this._client.cookies.setCookie(setCookie[i]);
1570
- cookie = cookie[0] || cookie;
1571
- cookie.domain = cookie.domain || this.endpoint.hostname;
1572
- }
1573
- }
1574
-
1575
- }), {
1576
- get: function(client, allowed, disabled, callback, context) {
1577
- var endpoint = client.endpoint;
1578
-
1579
- Faye.asyncEach(this._transports, function(pair, resume) {
1580
- var connType = pair[0], klass = pair[1],
1581
- connEndpoint = client.endpoints[connType] || endpoint;
1582
-
1583
- if (Faye.indexOf(disabled, connType) >= 0)
1584
- return resume();
1585
-
1586
- if (Faye.indexOf(allowed, connType) < 0) {
1587
- klass.isUsable(client, connEndpoint, function() {});
1588
- return resume();
1589
- }
1590
-
1591
- klass.isUsable(client, connEndpoint, function(isUsable) {
1592
- if (!isUsable) return resume();
1593
- var transport = klass.hasOwnProperty('create') ? klass.create(client, connEndpoint) : new klass(client, connEndpoint);
1594
- callback.call(context, transport);
1595
- });
1596
- }, function() {
1597
- throw new Error('Could not find a usable connection type for ' + Faye.URI.stringify(endpoint));
1598
- });
1599
- },
1600
-
1601
- register: function(type, klass) {
1602
- this._transports.push([type, klass]);
1603
- klass.prototype.connectionType = type;
1604
- },
1605
-
1606
- _transports: []
1607
- });
1608
-
1609
- Faye.extend(Faye.Transport.prototype, Faye.Logging);
1610
- Faye.extend(Faye.Transport.prototype, Faye.Timeouts);
1611
-
1612
- Faye.Event = {
1613
- _registry: [],
1614
-
1615
- on: function(element, eventName, callback, context) {
1616
- var wrapped = function() { callback.call(context) };
1617
-
1618
- if (element.addEventListener)
1619
- element.addEventListener(eventName, wrapped, false);
1620
- else
1621
- element.attachEvent('on' + eventName, wrapped);
1622
-
1623
- this._registry.push({
1624
- _element: element,
1625
- _type: eventName,
1626
- _callback: callback,
1627
- _context: context,
1628
- _handler: wrapped
1629
- });
1630
- },
1631
-
1632
- detach: function(element, eventName, callback, context) {
1633
- var i = this._registry.length, register;
1634
- while (i--) {
1635
- register = this._registry[i];
1636
-
1637
- if ((element && element !== register._element) ||
1638
- (eventName && eventName !== register._type) ||
1639
- (callback && callback !== register._callback) ||
1640
- (context && context !== register._context))
1641
- continue;
1642
-
1643
- if (register._element.removeEventListener)
1644
- register._element.removeEventListener(register._type, register._handler, false);
1645
- else
1646
- register._element.detachEvent('on' + register._type, register._handler);
1647
-
1648
- this._registry.splice(i,1);
1649
- register = null;
1650
- }
1651
- }
1652
- };
1653
-
1654
- if (Faye.ENV.onunload !== undefined) Faye.Event.on(Faye.ENV, 'unload', Faye.Event.detach, Faye.Event);
1655
-
1656
- /*
1657
- json2.js
1658
- 2013-05-26
1659
-
1660
- Public Domain.
1661
-
1662
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
1663
-
1664
- See http://www.JSON.org/js.html
1665
-
1666
-
1667
- This code should be minified before deployment.
1668
- See http://javascript.crockford.com/jsmin.html
1669
-
1670
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
1671
- NOT CONTROL.
1672
-
1673
-
1674
- This file creates a global JSON object containing two methods: stringify
1675
- and parse.
1676
-
1677
- JSON.stringify(value, replacer, space)
1678
- value any JavaScript value, usually an object or array.
1679
-
1680
- replacer an optional parameter that determines how object
1681
- values are stringified for objects. It can be a
1682
- function or an array of strings.
1683
-
1684
- space an optional parameter that specifies the indentation
1685
- of nested structures. If it is omitted, the text will
1686
- be packed without extra whitespace. If it is a number,
1687
- it will specify the number of spaces to indent at each
1688
- level. If it is a string (such as '\t' or '&nbsp;'),
1689
- it contains the characters used to indent at each level.
1690
-
1691
- This method produces a JSON text from a JavaScript value.
1692
-
1693
- When an object value is found, if the object contains a toJSON
1694
- method, its toJSON method will be called and the result will be
1695
- stringified. A toJSON method does not serialize: it returns the
1696
- value represented by the name/value pair that should be serialized,
1697
- or undefined if nothing should be serialized. The toJSON method
1698
- will be passed the key associated with the value, and this will be
1699
- bound to the value
1700
-
1701
- For example, this would serialize Dates as ISO strings.
1702
-
1703
- Date.prototype.toJSON = function (key) {
1704
- function f(n) {
1705
- // Format integers to have at least two digits.
1706
- return n < 10 ? '0' + n : n;
1707
- }
1708
-
1709
- return this.getUTCFullYear() + '-' +
1710
- f(this.getUTCMonth() + 1) + '-' +
1711
- f(this.getUTCDate()) + 'T' +
1712
- f(this.getUTCHours()) + ':' +
1713
- f(this.getUTCMinutes()) + ':' +
1714
- f(this.getUTCSeconds()) + 'Z';
1715
- };
1716
-
1717
- You can provide an optional replacer method. It will be passed the
1718
- key and value of each member, with this bound to the containing
1719
- object. The value that is returned from your method will be
1720
- serialized. If your method returns undefined, then the member will
1721
- be excluded from the serialization.
1722
-
1723
- If the replacer parameter is an array of strings, then it will be
1724
- used to select the members to be serialized. It filters the results
1725
- such that only members with keys listed in the replacer array are
1726
- stringified.
1727
-
1728
- Values that do not have JSON representations, such as undefined or
1729
- functions, will not be serialized. Such values in objects will be
1730
- dropped; in arrays they will be replaced with null. You can use
1731
- a replacer function to replace those with JSON values.
1732
- JSON.stringify(undefined) returns undefined.
1733
-
1734
- The optional space parameter produces a stringification of the
1735
- value that is filled with line breaks and indentation to make it
1736
- easier to read.
1737
-
1738
- If the space parameter is a non-empty string, then that string will
1739
- be used for indentation. If the space parameter is a number, then
1740
- the indentation will be that many spaces.
1741
-
1742
- Example:
1743
-
1744
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
1745
- // text is '["e",{"pluribus":"unum"}]'
1746
-
1747
-
1748
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
1749
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
1750
-
1751
- text = JSON.stringify([new Date()], function (key, value) {
1752
- return this[key] instanceof Date ?
1753
- 'Date(' + this[key] + ')' : value;
1754
- });
1755
- // text is '["Date(---current time---)"]'
1756
-
1757
-
1758
- JSON.parse(text, reviver)
1759
- This method parses a JSON text to produce an object or array.
1760
- It can throw a SyntaxError exception.
1761
-
1762
- The optional reviver parameter is a function that can filter and
1763
- transform the results. It receives each of the keys and values,
1764
- and its return value is used instead of the original value.
1765
- If it returns what it received, then the structure is not modified.
1766
- If it returns undefined then the member is deleted.
1767
-
1768
- Example:
1769
-
1770
- // Parse the text. Values that look like ISO date strings will
1771
- // be converted to Date objects.
1772
-
1773
- myData = JSON.parse(text, function (key, value) {
1774
- var a;
1775
- if (typeof value === 'string') {
1776
- a =
1777
- /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
1778
- if (a) {
1779
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
1780
- +a[5], +a[6]));
1781
- }
1782
- }
1783
- return value;
1784
- });
1785
-
1786
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
1787
- var d;
1788
- if (typeof value === 'string' &&
1789
- value.slice(0, 5) === 'Date(' &&
1790
- value.slice(-1) === ')') {
1791
- d = new Date(value.slice(5, -1));
1792
- if (d) {
1793
- return d;
1794
- }
1795
- }
1796
- return value;
1797
- });
1798
-
1799
-
1800
- This is a reference implementation. You are free to copy, modify, or
1801
- redistribute.
1802
- */
1803
-
1804
- /*jslint evil: true, regexp: true */
1805
-
1806
- /*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
1807
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
1808
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
1809
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
1810
- test, toJSON, toString, valueOf
1811
- */
1812
-
1813
-
1814
- // Create a JSON object only if one does not already exist. We create the
1815
- // methods in a closure to avoid creating global variables.
1816
-
1817
- if (typeof JSON !== 'object') {
1818
- JSON = {};
1819
- }
1820
-
1821
- (function () {
1822
- 'use strict';
1823
-
1824
- function f(n) {
1825
- // Format integers to have at least two digits.
1826
- return n < 10 ? '0' + n : n;
1827
- }
1828
-
1829
- if (typeof Date.prototype.toJSON !== 'function') {
1830
-
1831
- Date.prototype.toJSON = function () {
1832
-
1833
- return isFinite(this.valueOf())
1834
- ? this.getUTCFullYear() + '-' +
1835
- f(this.getUTCMonth() + 1) + '-' +
1836
- f(this.getUTCDate()) + 'T' +
1837
- f(this.getUTCHours()) + ':' +
1838
- f(this.getUTCMinutes()) + ':' +
1839
- f(this.getUTCSeconds()) + 'Z'
1840
- : null;
1841
- };
1842
-
1843
- String.prototype.toJSON =
1844
- Number.prototype.toJSON =
1845
- Boolean.prototype.toJSON = function () {
1846
- return this.valueOf();
1847
- };
1848
- }
1849
-
1850
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
1851
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
1852
- gap,
1853
- indent,
1854
- meta = { // table of character substitutions
1855
- '\b': '\\b',
1856
- '\t': '\\t',
1857
- '\n': '\\n',
1858
- '\f': '\\f',
1859
- '\r': '\\r',
1860
- '"' : '\\"',
1861
- '\\': '\\\\'
1862
- },
1863
- rep;
1864
-
1865
-
1866
- function quote(string) {
1867
-
1868
- // If the string contains no control characters, no quote characters, and no
1869
- // backslash characters, then we can safely slap some quotes around it.
1870
- // Otherwise we must also replace the offending characters with safe escape
1871
- // sequences.
1872
-
1873
- escapable.lastIndex = 0;
1874
- return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
1875
- var c = meta[a];
1876
- return typeof c === 'string'
1877
- ? c
1878
- : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
1879
- }) + '"' : '"' + string + '"';
1880
- }
1881
-
1882
-
1883
- function str(key, holder) {
1884
-
1885
- // Produce a string from holder[key].
1886
-
1887
- var i, // The loop counter.
1888
- k, // The member key.
1889
- v, // The member value.
1890
- length,
1891
- mind = gap,
1892
- partial,
1893
- value = holder[key];
1894
-
1895
- // If the value has a toJSON method, call it to obtain a replacement value.
1896
-
1897
- if (value && typeof value === 'object' &&
1898
- typeof value.toJSON === 'function') {
1899
- value = value.toJSON(key);
1900
- }
1901
-
1902
- // If we were called with a replacer function, then call the replacer to
1903
- // obtain a replacement value.
1904
-
1905
- if (typeof rep === 'function') {
1906
- value = rep.call(holder, key, value);
1907
- }
1908
-
1909
- // What happens next depends on the value's type.
1910
-
1911
- switch (typeof value) {
1912
- case 'string':
1913
- return quote(value);
1914
-
1915
- case 'number':
1916
-
1917
- // JSON numbers must be finite. Encode non-finite numbers as null.
1918
-
1919
- return isFinite(value) ? String(value) : 'null';
1920
-
1921
- case 'boolean':
1922
- case 'null':
1923
-
1924
- // If the value is a boolean or null, convert it to a string. Note:
1925
- // typeof null does not produce 'null'. The case is included here in
1926
- // the remote chance that this gets fixed someday.
1927
-
1928
- return String(value);
1929
-
1930
- // If the type is 'object', we might be dealing with an object or an array or
1931
- // null.
1932
-
1933
- case 'object':
1934
-
1935
- // Due to a specification blunder in ECMAScript, typeof null is 'object',
1936
- // so watch out for that case.
1937
-
1938
- if (!value) {
1939
- return 'null';
1940
- }
1941
-
1942
- // Make an array to hold the partial results of stringifying this object value.
1943
-
1944
- gap += indent;
1945
- partial = [];
1946
-
1947
- // Is the value an array?
1948
-
1949
- if (Object.prototype.toString.apply(value) === '[object Array]') {
1950
-
1951
- // The value is an array. Stringify every element. Use null as a placeholder
1952
- // for non-JSON values.
1953
-
1954
- length = value.length;
1955
- for (i = 0; i < length; i += 1) {
1956
- partial[i] = str(i, value) || 'null';
1957
- }
1958
-
1959
- // Join all of the elements together, separated with commas, and wrap them in
1960
- // brackets.
1961
-
1962
- v = partial.length === 0
1963
- ? '[]'
1964
- : gap
1965
- ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
1966
- : '[' + partial.join(',') + ']';
1967
- gap = mind;
1968
- return v;
1969
- }
1970
-
1971
- // If the replacer is an array, use it to select the members to be stringified.
1972
-
1973
- if (rep && typeof rep === 'object') {
1974
- length = rep.length;
1975
- for (i = 0; i < length; i += 1) {
1976
- if (typeof rep[i] === 'string') {
1977
- k = rep[i];
1978
- v = str(k, value);
1979
- if (v) {
1980
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
1981
- }
1982
- }
1983
- }
1984
- } else {
1985
-
1986
- // Otherwise, iterate through all of the keys in the object.
1987
-
1988
- for (k in value) {
1989
- if (Object.prototype.hasOwnProperty.call(value, k)) {
1990
- v = str(k, value);
1991
- if (v) {
1992
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
1993
- }
1994
- }
1995
- }
1996
- }
1997
-
1998
- // Join all of the member texts together, separated with commas,
1999
- // and wrap them in braces.
2000
-
2001
- v = partial.length === 0
2002
- ? '{}'
2003
- : gap
2004
- ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
2005
- : '{' + partial.join(',') + '}';
2006
- gap = mind;
2007
- return v;
2008
- }
2009
- }
2010
-
2011
- // If the JSON object does not yet have a stringify method, give it one.
2012
-
2013
- Faye.stringify = function (value, replacer, space) {
2014
-
2015
- // The stringify method takes a value and an optional replacer, and an optional
2016
- // space parameter, and returns a JSON text. The replacer can be a function
2017
- // that can replace values, or an array of strings that will select the keys.
2018
- // A default replacer method can be provided. Use of the space parameter can
2019
- // produce text that is more easily readable.
2020
-
2021
- var i;
2022
- gap = '';
2023
- indent = '';
2024
-
2025
- // If the space parameter is a number, make an indent string containing that
2026
- // many spaces.
2027
-
2028
- if (typeof space === 'number') {
2029
- for (i = 0; i < space; i += 1) {
2030
- indent += ' ';
2031
- }
2032
-
2033
- // If the space parameter is a string, it will be used as the indent string.
2034
-
2035
- } else if (typeof space === 'string') {
2036
- indent = space;
2037
- }
2038
-
2039
- // If there is a replacer, it must be a function or an array.
2040
- // Otherwise, throw an error.
2041
-
2042
- rep = replacer;
2043
- if (replacer && typeof replacer !== 'function' &&
2044
- (typeof replacer !== 'object' ||
2045
- typeof replacer.length !== 'number')) {
2046
- throw new Error('JSON.stringify');
2047
- }
2048
-
2049
- // Make a fake root object containing our value under the key of ''.
2050
- // Return the result of stringifying the value.
2051
-
2052
- return str('', {'': value});
2053
- };
2054
-
2055
- if (typeof JSON.stringify !== 'function') {
2056
- JSON.stringify = Faye.stringify;
2057
- }
2058
-
2059
- // If the JSON object does not yet have a parse method, give it one.
2060
-
2061
- if (typeof JSON.parse !== 'function') {
2062
- JSON.parse = function (text, reviver) {
2063
-
2064
- // The parse method takes a text and an optional reviver function, and returns
2065
- // a JavaScript value if the text is a valid JSON text.
2066
-
2067
- var j;
2068
-
2069
- function walk(holder, key) {
2070
-
2071
- // The walk method is used to recursively walk the resulting structure so
2072
- // that modifications can be made.
2073
-
2074
- var k, v, value = holder[key];
2075
- if (value && typeof value === 'object') {
2076
- for (k in value) {
2077
- if (Object.prototype.hasOwnProperty.call(value, k)) {
2078
- v = walk(value, k);
2079
- if (v !== undefined) {
2080
- value[k] = v;
2081
- } else {
2082
- delete value[k];
2083
- }
2084
- }
2085
- }
2086
- }
2087
- return reviver.call(holder, key, value);
2088
- }
2089
-
2090
-
2091
- // Parsing happens in four stages. In the first stage, we replace certain
2092
- // Unicode characters with escape sequences. JavaScript handles many characters
2093
- // incorrectly, either silently deleting them, or treating them as line endings.
2094
-
2095
- text = String(text);
2096
- cx.lastIndex = 0;
2097
- if (cx.test(text)) {
2098
- text = text.replace(cx, function (a) {
2099
- return '\\u' +
2100
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
2101
- });
2102
- }
2103
-
2104
- // In the second stage, we run the text against regular expressions that look
2105
- // for non-JSON patterns. We are especially concerned with '()' and 'new'
2106
- // because they can cause invocation, and '=' because it can cause mutation.
2107
- // But just to be safe, we want to reject all unexpected forms.
2108
-
2109
- // We split the second stage into 4 regexp operations in order to work around
2110
- // crippling inefficiencies in IE's and Safari's regexp engines. First we
2111
- // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
2112
- // replace all simple value tokens with ']' characters. Third, we delete all
2113
- // open brackets that follow a colon or comma or that begin the text. Finally,
2114
- // we look to see that the remaining characters are only whitespace or ']' or
2115
- // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
2116
-
2117
- if (/^[\],:{}\s]*$/
2118
- .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
2119
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
2120
- .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
2121
-
2122
- // In the third stage we use the eval function to compile the text into a
2123
- // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
2124
- // in JavaScript: it can begin a block or an object literal. We wrap the text
2125
- // in parens to eliminate the ambiguity.
2126
-
2127
- j = eval('(' + text + ')');
2128
-
2129
- // In the optional fourth stage, we recursively walk the new structure, passing
2130
- // each name/value pair to a reviver function for possible transformation.
2131
-
2132
- return typeof reviver === 'function'
2133
- ? walk({'': j}, '')
2134
- : j;
2135
- }
2136
-
2137
- // If the text is not JSON parseable, then a SyntaxError is thrown.
2138
-
2139
- throw new SyntaxError('JSON.parse');
2140
- };
2141
- }
2142
- }());
2143
-
2144
- Faye.Transport.WebSocket = Faye.extend(Faye.Class(Faye.Transport, {
2145
- UNCONNECTED: 1,
2146
- CONNECTING: 2,
2147
- CONNECTED: 3,
2148
-
2149
- batching: false,
2150
-
2151
- isUsable: function(callback, context) {
2152
- this.callback(function() { callback.call(context, true) });
2153
- this.errback(function() { callback.call(context, false) });
2154
- this.connect();
2155
- },
2156
-
2157
- request: function(envelopes) {
2158
- this._pending = this._pending || new Faye.Set();
2159
- for (var i = 0, n = envelopes.length; i < n; i++) this._pending.add(envelopes[i]);
2160
-
2161
- this.callback(function(socket) {
2162
- if (!socket) return;
2163
- var messages = Faye.map(envelopes, function(e) { return e.message });
2164
- socket.send(Faye.toJSON(messages));
2165
- }, this);
2166
- this.connect();
2167
- },
2168
-
2169
- connect: function() {
2170
- if (Faye.Transport.WebSocket._unloaded) return;
2171
-
2172
- this._state = this._state || this.UNCONNECTED;
2173
- if (this._state !== this.UNCONNECTED) return;
2174
- this._state = this.CONNECTING;
2175
-
2176
- var socket = this._createSocket();
2177
- if (!socket) return this.setDeferredStatus('failed');
2178
-
2179
- var self = this;
2180
-
2181
- socket.onopen = function() {
2182
- if (socket.headers) self._storeCookies(socket.headers['set-cookie']);
2183
- self._socket = socket;
2184
- self._state = self.CONNECTED;
2185
- self._everConnected = true;
2186
- self._ping();
2187
- self.setDeferredStatus('succeeded', socket);
2188
- };
2189
-
2190
- var closed = false;
2191
- socket.onclose = socket.onerror = function() {
2192
- if (closed) return;
2193
- closed = true;
2194
-
2195
- var wasConnected = (self._state === self.CONNECTED);
2196
- socket.onopen = socket.onclose = socket.onerror = socket.onmessage = null;
2197
-
2198
- delete self._socket;
2199
- self._state = self.UNCONNECTED;
2200
- self.removeTimeout('ping');
2201
- self.setDeferredStatus('unknown');
2202
-
2203
- var pending = self._pending ? self._pending.toArray() : [];
2204
- delete self._pending;
2205
-
2206
- if (wasConnected) {
2207
- self.handleError(pending, true);
2208
- } else if (self._everConnected) {
2209
- self.handleError(pending);
2210
- } else {
2211
- self.setDeferredStatus('failed');
2212
- }
2213
- };
2214
-
2215
- socket.onmessage = function(event) {
2216
- var messages = JSON.parse(event.data),
2217
- envelopes = [],
2218
- envelope;
2219
-
2220
- if (!messages) return;
2221
- messages = [].concat(messages);
2222
-
2223
- for (var i = 0, n = messages.length; i < n; i++) {
2224
- if (messages[i].successful === undefined) continue;
2225
- envelope = self._pending.remove(messages[i]);
2226
- if (envelope) envelopes.push(envelope);
2227
- }
2228
- self.receive(envelopes, messages);
2229
- };
2230
- },
2231
-
2232
- close: function() {
2233
- if (!this._socket) return;
2234
- this._socket.close();
2235
- },
2236
-
2237
- _createSocket: function() {
2238
- var url = Faye.Transport.WebSocket.getSocketUrl(this.endpoint),
2239
- options = {headers: Faye.copyObject(this._client.headers), ca: this._client.ca};
2240
-
2241
- options.headers['Cookie'] = this._getCookies();
2242
-
2243
- if (Faye.WebSocket) return new Faye.WebSocket.Client(url, [], options);
2244
- if (Faye.ENV.MozWebSocket) return new MozWebSocket(url);
2245
- if (Faye.ENV.WebSocket) return new WebSocket(url);
2246
- },
2247
-
2248
- _ping: function() {
2249
- if (!this._socket) return;
2250
- this._socket.send('[]');
2251
- this.addTimeout('ping', this._client._advice.timeout/2000, this._ping, this);
2252
- }
2253
-
2254
- }), {
2255
- PROTOCOLS: {
2256
- 'http:': 'ws:',
2257
- 'https:': 'wss:'
2258
- },
2259
-
2260
- create: function(client, endpoint) {
2261
- var sockets = client.transports.websocket = client.transports.websocket || {};
2262
- sockets[endpoint.href] = sockets[endpoint.href] || new this(client, endpoint);
2263
- return sockets[endpoint.href];
2264
- },
2265
-
2266
- getSocketUrl: function(endpoint) {
2267
- endpoint = Faye.copyObject(endpoint);
2268
- endpoint.protocol = this.PROTOCOLS[endpoint.protocol];
2269
- return Faye.URI.stringify(endpoint);
2270
- },
2271
-
2272
- isUsable: function(client, endpoint, callback, context) {
2273
- this.create(client, endpoint).isUsable(callback, context);
2274
- }
2275
- });
2276
-
2277
- Faye.extend(Faye.Transport.WebSocket.prototype, Faye.Deferrable);
2278
- Faye.Transport.register('websocket', Faye.Transport.WebSocket);
2279
-
2280
- if (Faye.Event)
2281
- Faye.Event.on(Faye.ENV, 'beforeunload', function() {
2282
- Faye.Transport.WebSocket._unloaded = true;
2283
- });
2284
-
2285
- Faye.Transport.EventSource = Faye.extend(Faye.Class(Faye.Transport, {
2286
- initialize: function(client, endpoint) {
2287
- Faye.Transport.prototype.initialize.call(this, client, endpoint);
2288
- if (!Faye.ENV.EventSource) return this.setDeferredStatus('failed');
2289
-
2290
- this._xhr = new Faye.Transport.XHR(client, endpoint);
2291
-
2292
- endpoint = Faye.copyObject(endpoint);
2293
- endpoint.pathname += '/' + client._clientId;
2294
-
2295
- var socket = new EventSource(Faye.URI.stringify(endpoint)),
2296
- self = this;
2297
-
2298
- socket.onopen = function() {
2299
- self._everConnected = true;
2300
- self.setDeferredStatus('succeeded');
2301
- };
2302
-
2303
- socket.onerror = function() {
2304
- if (self._everConnected) {
2305
- self._client.messageError([]);
2306
- } else {
2307
- self.setDeferredStatus('failed');
2308
- socket.close();
2309
- }
2310
- };
2311
-
2312
- socket.onmessage = function(event) {
2313
- self.receive([], JSON.parse(event.data));
2314
- };
2315
-
2316
- this._socket = socket;
2317
- },
2318
-
2319
- close: function() {
2320
- if (!this._socket) return;
2321
- this._socket.onopen = this._socket.onerror = this._socket.onmessage = null;
2322
- this._socket.close();
2323
- delete this._socket;
2324
- },
2325
-
2326
- isUsable: function(callback, context) {
2327
- this.callback(function() { callback.call(context, true) });
2328
- this.errback(function() { callback.call(context, false) });
2329
- },
2330
-
2331
- encode: function(envelopes) {
2332
- return this._xhr.encode(envelopes);
2333
- },
2334
-
2335
- request: function(envelopes) {
2336
- this._xhr.request(envelopes);
2337
- }
2338
-
2339
- }), {
2340
- isUsable: function(client, endpoint, callback, context) {
2341
- var id = client._clientId;
2342
- if (!id) return callback.call(context, false);
2343
-
2344
- Faye.Transport.XHR.isUsable(client, endpoint, function(usable) {
2345
- if (!usable) return callback.call(context, false);
2346
- this.create(client, endpoint).isUsable(callback, context);
2347
- }, this);
2348
- },
2349
-
2350
- create: function(client, endpoint) {
2351
- var sockets = client.transports.eventsource = client.transports.eventsource || {},
2352
- id = client._clientId;
2353
-
2354
- endpoint = Faye.copyObject(endpoint);
2355
- endpoint.pathname += '/' + (id || '');
2356
- var url = Faye.URI.stringify(endpoint);
2357
-
2358
- sockets[url] = sockets[url] || new this(client, endpoint);
2359
- return sockets[url];
2360
- }
2361
- });
2362
-
2363
- Faye.extend(Faye.Transport.EventSource.prototype, Faye.Deferrable);
2364
- Faye.Transport.register('eventsource', Faye.Transport.EventSource);
2365
-
2366
- Faye.Transport.XHR = Faye.extend(Faye.Class(Faye.Transport, {
2367
- encode: function(envelopes) {
2368
- var messages = Faye.map(envelopes, function(e) { return e.message });
2369
- return Faye.toJSON(messages);
2370
- },
2371
-
2372
- request: function(envelopes) {
2373
- var path = this.endpoint.path,
2374
- xhr = Faye.ENV.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(),
2375
- self = this;
2376
-
2377
- xhr.open('POST', path, true);
2378
- xhr.setRequestHeader('Content-Type', 'application/json');
2379
- xhr.setRequestHeader('Pragma', 'no-cache');
2380
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
2381
-
2382
- var headers = this._client.headers;
2383
- for (var key in headers) {
2384
- if (!headers.hasOwnProperty(key)) continue;
2385
- xhr.setRequestHeader(key, headers[key]);
2386
- }
2387
-
2388
- var abort = function() { xhr.abort() };
2389
- Faye.Event.on(Faye.ENV, 'beforeunload', abort);
2390
-
2391
- xhr.onreadystatechange = function() {
2392
- if (!xhr || xhr.readyState !== 4) return;
2393
-
2394
- var parsedMessage = null,
2395
- status = xhr.status,
2396
- text = xhr.responseText,
2397
- successful = (status >= 200 && status < 300) || status === 304 || status === 1223;
2398
-
2399
- Faye.Event.detach(Faye.ENV, 'beforeunload', abort);
2400
- xhr.onreadystatechange = function() {};
2401
- xhr = null;
2402
-
2403
- if (!successful) return self.handleError(envelopes);
2404
-
2405
- try {
2406
- parsedMessage = JSON.parse(text);
2407
- } catch (e) {}
2408
-
2409
- if (parsedMessage)
2410
- self.receive(envelopes, parsedMessage);
2411
- else
2412
- self.handleError(envelopes);
2413
- };
2414
-
2415
- xhr.send(this.encode(envelopes));
2416
- }
2417
- }), {
2418
- isUsable: function(client, endpoint, callback, context) {
2419
- callback.call(context, Faye.URI.isSameOrigin(endpoint));
2420
- }
2421
- });
2422
-
2423
- Faye.Transport.register('long-polling', Faye.Transport.XHR);
2424
-
2425
- Faye.Transport.CORS = Faye.extend(Faye.Class(Faye.Transport, {
2426
- encode: function(envelopes) {
2427
- var messages = Faye.map(envelopes, function(e) { return e.message });
2428
- return 'message=' + encodeURIComponent(Faye.toJSON(messages));
2429
- },
2430
-
2431
- request: function(envelopes) {
2432
- var xhrClass = Faye.ENV.XDomainRequest ? XDomainRequest : XMLHttpRequest,
2433
- xhr = new xhrClass(),
2434
- headers = this._client.headers,
2435
- self = this,
2436
- key;
2437
-
2438
- xhr.open('POST', Faye.URI.stringify(this.endpoint), true);
2439
-
2440
- if (xhr.setRequestHeader) {
2441
- xhr.setRequestHeader('Pragma', 'no-cache');
2442
- for (key in headers) {
2443
- if (!headers.hasOwnProperty(key)) continue;
2444
- xhr.setRequestHeader(key, headers[key]);
2445
- }
2446
- }
2447
-
2448
- var cleanUp = function() {
2449
- if (!xhr) return false;
2450
- xhr.onload = xhr.onerror = xhr.ontimeout = xhr.onprogress = null;
2451
- xhr = null;
2452
- };
2453
-
2454
- xhr.onload = function() {
2455
- var parsedMessage = null;
2456
- try {
2457
- parsedMessage = JSON.parse(xhr.responseText);
2458
- } catch (e) {}
2459
-
2460
- cleanUp();
2461
-
2462
- if (parsedMessage)
2463
- self.receive(envelopes, parsedMessage);
2464
- else
2465
- self.handleError(envelopes);
2466
- };
2467
-
2468
- xhr.onerror = xhr.ontimeout = function() {
2469
- cleanUp();
2470
- self.handleError(envelopes);
2471
- };
2472
-
2473
- xhr.onprogress = function() {};
2474
- xhr.send(this.encode(envelopes));
2475
- }
2476
- }), {
2477
- isUsable: function(client, endpoint, callback, context) {
2478
- if (Faye.URI.isSameOrigin(endpoint))
2479
- return callback.call(context, false);
2480
-
2481
- if (Faye.ENV.XDomainRequest)
2482
- return callback.call(context, endpoint.protocol === Faye.ENV.location.protocol);
2483
-
2484
- if (Faye.ENV.XMLHttpRequest) {
2485
- var xhr = new Faye.ENV.XMLHttpRequest();
2486
- return callback.call(context, xhr.withCredentials !== undefined);
2487
- }
2488
- return callback.call(context, false);
2489
- }
2490
- });
2491
-
2492
- Faye.Transport.register('cross-origin-long-polling', Faye.Transport.CORS);
2493
-
2494
- Faye.Transport.JSONP = Faye.extend(Faye.Class(Faye.Transport, {
2495
- encode: function(envelopes) {
2496
- var messages = Faye.map(envelopes, function(e) { return e.message });
2497
- var url = Faye.copyObject(this.endpoint);
2498
- url.query.message = Faye.toJSON(messages);
2499
- url.query.jsonp = '__jsonp' + Faye.Transport.JSONP._cbCount + '__';
2500
- return Faye.URI.stringify(url);
2501
- },
2502
-
2503
- request: function(envelopes) {
2504
- var messages = Faye.map(envelopes, function(e) { return e.message }),
2505
- head = document.getElementsByTagName('head')[0],
2506
- script = document.createElement('script'),
2507
- callbackName = Faye.Transport.JSONP.getCallbackName(),
2508
- endpoint = Faye.copyObject(this.endpoint),
2509
- self = this;
2510
-
2511
- endpoint.query.message = Faye.toJSON(messages);
2512
- endpoint.query.jsonp = callbackName;
2513
-
2514
- Faye.ENV[callbackName] = function(data) {
2515
- if (!Faye.ENV[callbackName]) return false;
2516
- Faye.ENV[callbackName] = undefined;
2517
- try { delete Faye.ENV[callbackName] } catch (e) {}
2518
- script.parentNode.removeChild(script);
2519
- self.receive(envelopes, data);
2520
- };
2521
-
2522
- script.type = 'text/javascript';
2523
- script.src = Faye.URI.stringify(endpoint);
2524
- head.appendChild(script);
2525
- }
2526
- }), {
2527
- _cbCount: 0,
2528
-
2529
- getCallbackName: function() {
2530
- this._cbCount += 1;
2531
- return '__jsonp' + this._cbCount + '__';
2532
- },
2533
-
2534
- isUsable: function(client, endpoint, callback, context) {
2535
- callback.call(context, true);
2536
- }
2537
- });
2538
-
2539
- Faye.Transport.register('callback-polling', Faye.Transport.JSONP);
2540
-
2541
- })();