/*! * jsxc v3.0.1 - 2016-10-28 * * This file concatenates all dependencies of jsxc. * */ /*! * Source: lib/strophe.js/strophe.js, license: multiple, url: http://strophe.im/strophejs/ */ !function(callback){if(function(root,factory){"function"==typeof define&&define.amd?define("strophe-base64",function(){return factory()}):root.Base64=factory()}(this,function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",obj={encode:function(input){var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0;do chr1=input.charCodeAt(i++),chr2=input.charCodeAt(i++),chr3=input.charCodeAt(i++),enc1=chr1>>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?(enc2=(3&chr1)<<4,enc3=enc4=64):isNaN(chr3)&&(enc4=64),output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);while(i>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));while(i>5]|=128<<24-len%32,x[(len+64>>9<<4)+15]=len;var i,j,t,olda,oldb,oldc,oldd,olde,w=new Array(80),a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776;for(i=0;i16&&(bkey=core_sha1(bkey,8*key.length));for(var ipad=new Array(16),opad=new Array(16),i=0;i<16;i++)ipad[i]=909522486^bkey[i],opad[i]=1549556828^bkey[i];var hash=core_sha1(ipad.concat(str2binb(data)),512+8*data.length);return core_sha1(opad.concat(hash),672)}function safe_add(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw}function rol(num,cnt){return num<>>32-cnt}function str2binb(str){for(var bin=[],mask=255,i=0;i<8*str.length;i+=8)bin[i>>5]|=(str.charCodeAt(i/8)&mask)<<24-i%32;return bin}function binb2str(bin){for(var str="",mask=255,i=0;i<32*bin.length;i+=8)str+=String.fromCharCode(bin[i>>5]>>>24-i%32&mask);return str}function binb2b64(binarray){for(var triplet,j,tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",str="",i=0;i<4*binarray.length;i+=3)for(triplet=(binarray[i>>2]>>8*(3-i%4)&255)<<16|(binarray[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|binarray[i+2>>2]>>8*(3-(i+2)%4)&255,j=0;j<4;j++)str+=8*i+6*j>32*binarray.length?"=":tab.charAt(triplet>>6*(3-j)&63);return str}return{b64_hmac_sha1:function(key,data){return binb2b64(core_hmac_sha1(key,data))},b64_sha1:function(s){return binb2b64(core_sha1(str2binb(s),8*s.length))},binb2str:binb2str,core_hmac_sha1:core_hmac_sha1,str_hmac_sha1:function(key,data){return binb2str(core_hmac_sha1(key,data))},str_sha1:function(s){return binb2str(core_sha1(str2binb(s),8*s.length))}}}),function(root,factory){"function"==typeof define&&define.amd?define("strophe-md5",function(){return factory()}):root.MD5=factory()}(this,function(b){var safe_add=function(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw},bit_rol=function(num,cnt){return num<>>32-cnt},str2binl=function(str){for(var bin=[],i=0;i<8*str.length;i+=8)bin[i>>5]|=(255&str.charCodeAt(i/8))<>5]>>>i%32&255);return str},binl2hex=function(binarray){for(var hex_tab="0123456789abcdef",str="",i=0;i<4*binarray.length;i++)str+=hex_tab.charAt(binarray[i>>2]>>i%4*8+4&15)+hex_tab.charAt(binarray[i>>2]>>i%4*8&15);return str},md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)},md5_ff=function(a,b,c,d,x,s,t){return md5_cmn(b&c|~b&d,a,b,x,s,t)},md5_gg=function(a,b,c,d,x,s,t){return md5_cmn(b&d|c&~d,a,b,x,s,t)},md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)},md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|~d),a,b,x,s,t)},core_md5=function(x,len){x[len>>5]|=128<>>9<<4)+14]=len;for(var olda,oldb,oldc,oldd,a=1732584193,b=-271733879,c=-1732584194,d=271733878,i=0;i0)for(var i=0;i/g,">"),text=text.replace(/'/g,"'"),text=text.replace(/"/g,""")},xmlunescape:function(text){return text=text.replace(/\&/g,"&"),text=text.replace(/</g,"<"),text=text.replace(/>/g,">"),text=text.replace(/'/g,"'"),text=text.replace(/"/g,'"')},xmlTextNode:function(text){return Strophe.xmlGenerator().createTextNode(text)},xmlHtmlNode:function(html){var node;if(window.DOMParser){var parser=new DOMParser;node=parser.parseFromString(html,"text/xml")}else node=new ActiveXObject("Microsoft.XMLDOM"),node.async="false",node.loadXML(html);return node},getText:function(elem){if(!elem)return null;var str="";0===elem.childNodes.length&&elem.nodeType==Strophe.ElementType.TEXT&&(str+=elem.nodeValue);for(var i=0;i0&&(value=css.join("; "),el.setAttribute(attribute,value))}else el.setAttribute(attribute,value);for(i=0;i/g,"\\3e").replace(/@/g,"\\40")},unescapeNode:function(node){return"string"!=typeof node?node:node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\")},getNodeFromJid:function(jid){return jid.indexOf("@")<0?null:jid.split("@")[0]},getDomainFromJid:function(jid){var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0)return bare;var parts=bare.split("@");return parts.splice(0,1),parts.join("@")},getResourceFromJid:function(jid){var s=jid.split("/");return s.length<2?null:(s.splice(0,1),s.join("/"))},getBareJidFromJid:function(jid){return jid?jid.split("/")[0]:null},log:function(level,msg){},debug:function(msg){this.log(this.LogLevel.DEBUG,msg)},info:function(msg){this.log(this.LogLevel.INFO,msg)},warn:function(msg){this.log(this.LogLevel.WARN,msg)},error:function(msg){this.log(this.LogLevel.ERROR,msg)},fatal:function(msg){this.log(this.LogLevel.FATAL,msg)},serialize:function(elem){var result;if(!elem)return null;"function"==typeof elem.tree&&(elem=elem.tree());var i,child,nodeName=elem.nodeName;for(elem.getAttribute("_realname")&&(nodeName=elem.getAttribute("_realname")),result="<"+nodeName,i=0;i/g,">").replace(/0){for(result+=">",i=0;i"}result+=""}else result+="/>";return result},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype){Strophe._connectionPlugins[name]=ptype}},Strophe.Builder=function(name,attrs){"presence"!=name&&"message"!=name&&"iq"!=name||(attrs&&!attrs.xmlns?attrs.xmlns=Strophe.NS.CLIENT:attrs||(attrs={xmlns:Strophe.NS.CLIENT})),this.nodeTree=Strophe.xmlElement(name,attrs),this.node=this.nodeTree},Strophe.Builder.prototype={tree:function(){return this.nodeTree},toString:function(){return Strophe.serialize(this.nodeTree)},up:function(){return this.node=this.node.parentNode,this},attrs:function(moreattrs){for(var k in moreattrs)moreattrs.hasOwnProperty(k)&&(void 0===moreattrs[k]?this.node.removeAttribute(k):this.node.setAttribute(k,moreattrs[k]));return this},c:function(name,attrs,text){var child=Strophe.xmlElement(name,attrs,text);return this.node.appendChild(child),"string"!=typeof text&&(this.node=child),this},cnode:function(elem){var impNode,xmlGen=Strophe.xmlGenerator();try{impNode=void 0!==xmlGen.importNode}catch(e){impNode=!1}var newElem=impNode?xmlGen.importNode(elem,!0):Strophe.copyElement(elem);return this.node.appendChild(newElem),this.node=newElem,this},t:function(text){var child=Strophe.xmlTextNode(text);return this.node.appendChild(child),this},h:function(html){var fragment=document.createElement("body");fragment.innerHTML=html;for(var xhtml=Strophe.createHtml(fragment);xhtml.childNodes.length>0;)this.node.appendChild(xhtml.childNodes[0]);return this}},Strophe.Handler=function(handler,ns,name,type,id,from,options){this.handler=handler,this.ns=ns,this.name=name,this.type=type,this.id=id,this.options=options||{matchBare:!1},this.options.matchBare||(this.options.matchBare=!1),this.options.matchBare?this.from=from?Strophe.getBareJidFromJid(from):null:this.from=from,this.user=!0},Strophe.Handler.prototype={isMatch:function(elem){var nsMatch,from=null;if(from=this.options.matchBare?Strophe.getBareJidFromJid(elem.getAttribute("from")):elem.getAttribute("from"),nsMatch=!1,this.ns){var that=this;Strophe.forEachChild(elem,null,function(elem){elem.getAttribute("xmlns")==that.ns&&(nsMatch=!0)}),nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns}else nsMatch=!0;var elem_type=elem.getAttribute("type");return!(!nsMatch||this.name&&!Strophe.isTagEqual(elem,this.name)||this.type&&(Array.isArray(this.type)?this.type.indexOf(elem_type)==-1:elem_type!=this.type)||this.id&&elem.getAttribute("id")!=this.id||this.from&&from!=this.from)},run:function(elem){var result=null;try{result=this.handler(elem)}catch(e){throw e.sourceURL?Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?("undefined"!=typeof console&&(console.trace(),console.error(this.handler," - error - ",e,e.message)),Strophe.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message)):Strophe.fatal("error: "+e.message+"\n"+e.stack),e}return result},toString:function(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},Strophe.TimedHandler=function(period,handler){this.period=period,this.handler=handler,this.lastCalled=(new Date).getTime(),this.user=!0},Strophe.TimedHandler.prototype={run:function(){return this.lastCalled=(new Date).getTime(),this.handler()},reset:function(){this.lastCalled=(new Date).getTime()},toString:function(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},Strophe.Connection=function(service,options){this.service=service,this.options=options||{};var proto=this.options.protocol||"";0===service.indexOf("ws:")||0===service.indexOf("wss:")||0===proto.indexOf("ws")?this._proto=new Strophe.Websocket(this):this._proto=new Strophe.Bosh(this),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._authentication={},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins)if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k],F=function(){};F.prototype=ptype,this[k]=new F,this[k].init(this)}},Strophe.Connection.prototype={reset:function(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._authentication={},this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0},pause:function(){this.paused=!0},resume:function(){this.paused=!1},getUniqueId:function(suffix){var uuid="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=16*Math.random()|0,v="x"==c?r:3&r|8;return v.toString(16)});return"string"==typeof suffix||"number"==typeof suffix?uuid+":"+suffix:uuid+""},connect:function(jid,pass,callback,wait,hold,route,authcid){this.jid=jid,this.authzid=Strophe.getBareJidFromJid(this.jid),this.authcid=authcid||Strophe.getNodeFromJid(this.jid),this.pass=pass,this.servtype="xmpp",this.connect_callback=callback,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.domain=Strophe.getDomainFromJid(this.jid),this._changeConnectStatus(Strophe.Status.CONNECTING,null),this._proto._connect(wait,hold,route)},attach:function(jid,sid,rid,callback,wait,hold,wind){if(!(this._proto instanceof Strophe.Bosh))throw{name:"StropheSessionError",message:'The "attach" method can only be used with a BOSH connection.'};this._proto._attach(jid,sid,rid,callback,wait,hold,wind)},restore:function(jid,callback,wait,hold,wind){if(!this._sessionCachingSupported())throw{name:"StropheSessionError",message:'The "restore" method can only be used with a BOSH connection.'};this._proto._restore(jid,callback,wait,hold,wind)},_sessionCachingSupported:function(){if(this._proto instanceof Strophe.Bosh){if(!JSON)return!1;try{window.sessionStorage.setItem("_strophe_","_strophe_"),window.sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1},xmlInput:function(elem){},xmlOutput:function(elem){},rawInput:function(data){},rawOutput:function(data){},nextValidRid:function(rid){},send:function(elem){if(null!==elem){if("function"==typeof elem.sort)for(var i=0;i=0&&this.addHandlers.splice(i,1)},disconnect:function(reason){if(this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason),Strophe.info("Disconnect was called because: "+reason),this.connected){var pres=!1;this.disconnecting=!0,this.authenticated&&(pres=$pres({xmlns:Strophe.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(pres)}else Strophe.info("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests()},_changeConnectStatus:function(status,condition){for(var k in Strophe._connectionPlugins)if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged)try{plugin.statusChanged(status,condition)}catch(err){Strophe.error(""+k+" plugin caused an exception changing status: "+err)}}if(this.connect_callback)try{this.connect_callback(status,condition)}catch(e){Strophe.error("User connection callback caused an exception: "+e)}},_doDisconnect:function(condition){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),Strophe.info("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(Strophe.Status.DISCONNECTED,condition),this.connected=!1},_dataRecv:function(req,raw){Strophe.info("_dataRecv called");var elem=this._proto._reqToData(req);if(null!==elem){this.xmlInput!==Strophe.Connection.prototype.xmlInput&&(elem.nodeName===this._proto.strip&&elem.childNodes.length?this.xmlInput(elem.childNodes[0]):this.xmlInput(elem)),this.rawInput!==Strophe.Connection.prototype.rawInput&&(raw?this.rawInput(raw):this.rawInput(Strophe.serialize(elem)));for(var i,hand;this.removeHandlers.length>0;)hand=this.removeHandlers.pop(),i=this.handlers.indexOf(hand),i>=0&&this.handlers.splice(i,1);for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();var cond,conflict,type=elem.getAttribute("type");if(null!==type&&"terminate"==type){if(this.disconnecting)return;return cond=elem.getAttribute("condition"),conflict=elem.getElementsByTagName("conflict"),null!==cond?("remote-stream-error"==cond&&conflict.length>0&&(cond="conflict"),this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)):this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown"),void this._doDisconnect(cond)}var that=this;Strophe.forEachChild(elem,null,function(child){var i,newList;for(newList=that.handlers,that.handlers=[],i=0;i0:bodyWrap.getElementsByTagName("stream:features").length>0||bodyWrap.getElementsByTagName("features").length>0;var i,mech,mechanisms=bodyWrap.getElementsByTagName("mechanism"),matched=[],found_authentication=!1;if(!hasFeatures)return void this._proto._no_auth_received(_callback);if(mechanisms.length>0)for(i=0;i0,(found_authentication=this._authentication.legacy_auth||matched.length>0)?void(this.do_authentication!==!1&&this.authenticate(matched)):void this._proto._no_auth_received(_callback)}}},authenticate:function(matched){var i;for(i=0;imatched[higher].prototype.priority&&(higher=j);if(higher!=i){var swap=matched[i];matched[i]=matched[higher],matched[higher]=swap}}var mechanism_found=!1;for(i=0;i0&&(condition="conflict"),this._changeConnectStatus(Strophe.Status.AUTHFAIL,condition),!1}var jidNode,bind=elem.getElementsByTagName("bind");return bind.length>0?(jidNode=bind[0].getElementsByTagName("jid"),void(jidNode.length>0&&(this.jid=Strophe.getText(jidNode[0]),this.do_session?(this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2"),this.send($iq({type:"set",id:"_session_auth_2"}).c("session",{xmlns:Strophe.NS.SESSION}).tree())):(this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null))))):(Strophe.info("SASL binding failed."),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1)},_sasl_session_cb:function(elem){if("result"==elem.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null);else if("error"==elem.getAttribute("type"))return Strophe.info("Session creation failed."),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1;return!1},_sasl_failure_cb:function(elem){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1},_auth2_cb:function(elem){return"result"==elem.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null)):"error"==elem.getAttribute("type")&&(this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),this.disconnect("authentication failed")),!1},_addSysTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);return thand.user=!1,this.addTimeds.push(thand),thand},_addSysHandler:function(handler,ns,name,type,id){var hand=new Strophe.Handler(handler,ns,name,type,id);return hand.user=!1,this.addHandlers.push(hand),hand},_onDisconnectTimeout:function(){return Strophe.info("_onDisconnectTimeout was called"),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1},_onIdle:function(){for(var i,thand,since,newList;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;)thand=this.removeTimeds.pop(),i=this.timedHandlers.indexOf(thand),i>=0&&this.timedHandlers.splice(i,1);var now=(new Date).getTime();for(newList=[],i=0;i0&&(cond="conflict"),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,cond)):this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(cond),Strophe.Status.CONNFAIL;this.sid||(this.sid=bodyWrap.getAttribute("sid"));var wind=bodyWrap.getAttribute("requests");wind&&(this.window=parseInt(wind,10));var hold=bodyWrap.getAttribute("hold");hold&&(this.hold=parseInt(hold,10));var wait=bodyWrap.getAttribute("wait");wait&&(this.wait=parseInt(wait,10))},_disconnect:function(pres){this._sendTerminate(pres)},_doDisconnect:function(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)},_emptyQueue:function(){return 0===this._requests.length},_hitError:function(reqStatus){this.errors++,Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()},_no_auth_received:function(_callback){_callback=_callback?_callback.bind(this._conn):this._conn._connect_cb.bind(this._conn);var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,_callback.bind(this._conn)),body.tree().getAttribute("rid"))),this._throttledRequestHandler()},_onDisconnectTimeout:function(){this._abortAllRequests()},_abortAllRequests:function(){for(var req;this._requests.length>0;)req=this._requests.pop(),req.abort=!0,req.xhr.abort(),req.xhr.onreadystatechange=function(){}},_onIdle:function(){var data=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===data.length&&!this._conn.disconnecting&&(Strophe.info("no requests during idle cycle, sending blank request"),data.push(null)),!this._conn.paused){if(this._requests.length<2&&data.length>0){for(var body=this._buildBody(),i=0;i0){var time_elapsed=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)&&(Strophe.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}},_onRequestStateChange:function(func,req){if(Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+req.xhr.readyState),req.abort)return void(req.abort=!1);var reqStatus;if(4==req.xhr.readyState){reqStatus=0;try{reqStatus=req.xhr.status}catch(e){}if("undefined"==typeof reqStatus&&(reqStatus=0),this.disconnecting&&reqStatus>=400)return void this._hitError(reqStatus);var reqIs0=this._requests[0]==req,reqIs1=this._requests[1]==req;(reqStatus>0&&reqStatus<500||req.sends>5)&&(this._removeRequest(req),Strophe.debug("request id "+req.id+" should now be removed")),200==reqStatus?((reqIs1||reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(req.rid)+1),Strophe.debug("request id "+req.id+"."+req.sends+" got 200"),func(req),this.errors=0):(Strophe.error("request id "+req.id+"."+req.sends+" error "+reqStatus+" happened"),(0===reqStatus||reqStatus>=400&&reqStatus<600||reqStatus>=12e3)&&(this._hitError(reqStatus),reqStatus>=400&&reqStatus<500&&(this._conn._changeConnectStatus(Strophe.Status.DISCONNECTING,null),this._conn._doDisconnect()))),reqStatus>0&&reqStatus<500||req.sends>5||this._throttledRequestHandler()}},_processRequest:function(i){var self=this,req=this._requests[i],reqStatus=-1;try{4==req.xhr.readyState&&(reqStatus=req.xhr.status)}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus)}if("undefined"==typeof reqStatus&&(reqStatus=-1),req.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();var time_elapsed=req.age(),primaryTimeout=!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait),secondaryTimeout=null!==req.dead&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait),requestCompletedWithServerError=4==req.xhr.readyState&&(reqStatus<1||reqStatus>=500);if((primaryTimeout||secondaryTimeout||requestCompletedWithServerError)&&(secondaryTimeout&&Strophe.error("Request "+this._requests[i].id+" timed out (secondary), restarting"),req.abort=!0,req.xhr.abort(),req.xhr.onreadystatechange=function(){},this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends),req=this._requests[i]),0===req.xhr.readyState){Strophe.debug("request id "+req.id+"."+req.sends+" posting");try{req.xhr.open("POST",this._conn.service,!this._conn.options.sync),req.xhr.setRequestHeader("Content-Type","text/xml; charset=utf-8")}catch(e2){return Strophe.error("XHR open failed."),this._conn.connected||this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}var sendFunc=function(){if(req.date=new Date,self._conn.options.customHeaders){var headers=self._conn.options.customHeaders;for(var header in headers)headers.hasOwnProperty(header)&&req.xhr.setRequestHeader(header,headers[header])}req.xhr.send(req.data)};if(req.sends>1){var backoff=1e3*Math.min(Math.floor(Strophe.TIMEOUT*this.wait),Math.pow(req.sends,3));setTimeout(sendFunc,backoff)}else sendFunc();req.sends++,this._conn.xmlOutput!==Strophe.Connection.prototype.xmlOutput&&(req.xmlData.nodeName===this.strip&&req.xmlData.childNodes.length?this._conn.xmlOutput(req.xmlData.childNodes[0]):this._conn.xmlOutput(req.xmlData)),this._conn.rawOutput!==Strophe.Connection.prototype.rawOutput&&this._conn.rawOutput(req.data)}else Strophe.debug("_processRequest: "+(0===i?"first":"second")+" request has readyState of "+req.xhr.readyState)},_removeRequest:function(req){Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--)req==this._requests[i]&&this._requests.splice(i,1);req.xhr.onreadystatechange=function(){},this._throttledRequestHandler()},_restartRequest:function(i){var req=this._requests[i];null===req.dead&&(req.dead=new Date),this._processRequest(i)},_reqToData:function(req){try{return req.getResponse()}catch(e){if("parsererror"!=e)throw e;this._conn.disconnect("strophe-parsererror")}},_sendTerminate:function(pres){Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});pres&&body.cnode(pres.tree());var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),body.tree().getAttribute("rid"));this._requests.push(req),this._throttledRequestHandler()},_send:function(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(this._conn._onIdle.bind(this._conn),100)},_sendRestart:function(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)},_throttledRequestHandler:function(){this._requests?Strophe.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):Strophe.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid): "+ns);var ver=message.getAttribute("version");return"string"!=typeof ver?error="Missing version in ":"1.0"!==ver&&(error="Wrong version in : "+ver),!error||(this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,error),this._conn._doDisconnect(),!1)},_connect_cb_wrapper:function(message){if(0===message.data.indexOf("\s*)*/,"");if(""===data)return;var streamStart=(new DOMParser).parseFromString(data,"text/xml").documentElement;this._conn.xmlInput(streamStart),this._conn.rawInput(message.data),this._handleStreamStart(streamStart)&&this._connect_cb(streamStart)}else if(0===message.data.indexOf(" tag.")}}this._conn._doDisconnect()},_doDisconnect:function(){Strophe.info("WebSockets _doDisconnect was called"),this._closeSocket()},_streamWrap:function(stanza){return""+stanza+""},_closeSocket:function(){if(this.socket)try{this.socket.close()}catch(e){}this.socket=null},_emptyQueue:function(){return!0},_onClose:function(){this._conn.connected&&!this._conn.disconnecting?(Strophe.error("Websocket closed unexcectedly"),this._conn._doDisconnect()):Strophe.info("Websocket closed")},_no_auth_received:function(_callback){Strophe.error("Server did not send any auth methods"),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"Server did not send any auth methods"),_callback&&(_callback=_callback.bind(this._conn))(),this._conn._doDisconnect()},_onDisconnectTimeout:function(){},_abortAllRequests:function(){},_onError:function(error){Strophe.error("Websocket error "+error),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"The WebSocket connection could not be established was disconnected."),this._disconnect()},_onIdle:function(){var data=this._conn._data;if(data.length>0&&!this._conn.paused){for(var i=0;i0))for(_i=0,_len=xquery.length;_i<_len;_i++)if(x=xquery[_i],xmlns=x.getAttribute("xmlns"),xmlns&&xmlns.match(Strophe.NS.MUC)){handlers=room._presence_handlers;break}for(id in handlers)handler=handlers[id],handler(stanza,room)||delete handlers[id];return!0})),this.rooms.hasOwnProperty(room)||(this.rooms[room]=new XmppRoom(this,room,nick,password),this.roomNames.push(room)),pres_handler_cb&&this.rooms[room].addHandler("presence",pres_handler_cb),msg_handler_cb&&this.rooms[room].addHandler("message",msg_handler_cb),roster_cb&&this.rooms[room].addHandler("roster",roster_cb),this._connection.send(msg)},leave:function(room,nick,handler_cb,exit_msg){var id,presence,presenceid,room_nick;return id=this.roomNames.indexOf(room),delete this.rooms[room],id>=0&&(this.roomNames.splice(id,1),0===this.roomNames.length&&(this._connection.deleteHandler(this._muc_handler),this._muc_handler=null)),room_nick=this.test_append_nick(room,nick),presenceid=this._connection.getUniqueId(),presence=$pres({type:"unavailable",id:presenceid,from:this._connection.jid,to:room_nick}),null!=exit_msg&&presence.c("status",exit_msg),null!=handler_cb&&this._connection.addHandler(handler_cb,null,"presence",null,presenceid),this._connection.send(presence),presenceid},message:function(room,nick,message,html_message,type){var msg,msgid,parent,room_nick;return room_nick=this.test_append_nick(room,nick),type=type||(null!=nick?"chat":"groupchat"),msgid=this._connection.getUniqueId(),msg=$msg({to:room_nick,from:this._connection.jid,type:type,id:msgid}).c("body",{xmlns:Strophe.NS.CLIENT}).t(message),msg.up(),null!=html_message&&(msg.c("html",{xmlns:Strophe.NS.XHTML_IM}).c("body",{xmlns:Strophe.NS.XHTML}).t(html_message),0===msg.node.childNodes.length?(parent=msg.node.parentNode,msg.up().up(),msg.node.removeChild(parent)):msg.up().up()),msg.c("x",{xmlns:"jabber:x:event"}).c("composing"),this._connection.send(msg),msgid},groupchat:function(room,message,html_message){return this.message(room,null,message,html_message)},invite:function(room,receiver,reason){var invitation,msgid;return msgid=this._connection.getUniqueId(),invitation=$msg({from:this._connection.jid,to:room,id:msgid}).c("x",{xmlns:Strophe.NS.MUC_USER}).c("invite",{to:receiver}),null!=reason&&invitation.c("reason",reason),this._connection.send(invitation),msgid},directInvite:function(room,receiver,reason,password){var attrs,invitation,msgid;return msgid=this._connection.getUniqueId(),attrs={xmlns:"jabber:x:conference",jid:room},null!=reason&&(attrs.reason=reason),null!=password&&(attrs.password=password),invitation=$msg({from:this._connection.jid,to:receiver,id:msgid}).c("x",attrs),this._connection.send(invitation),msgid},queryOccupants:function(room,success_cb,error_cb){var attrs,info;return attrs={xmlns:Strophe.NS.DISCO_ITEMS},info=$iq({from:this._connection.jid,to:room,type:"get"}).c("query",attrs),this._connection.sendIQ(info,success_cb,error_cb)},configure:function(room,handler_cb,error_cb){var config,stanza;return config=$iq({to:room,type:"get"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}),stanza=config.tree(),this._connection.sendIQ(stanza,handler_cb,error_cb)},cancelConfigure:function(room){var config,stanza;return config=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("x",{xmlns:"jabber:x:data",type:"cancel"}),stanza=config.tree(),this._connection.sendIQ(stanza)},saveConfiguration:function(room,config,success_cb,error_cb){var conf,iq,stanza,_i,_len;if(iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}),Strophe.x&&config instanceof Strophe.x.Form)config.type="submit",iq.cnode(config.toXML());else for(iq.c("x",{xmlns:"jabber:x:data",type:"submit"}),_i=0,_len=config.length;_i<_len;_i++)conf=config[_i],iq.cnode(conf).up();return stanza=iq.tree(),this._connection.sendIQ(stanza,success_cb,error_cb)},createInstantRoom:function(room,success_cb,error_cb){var roomiq;return roomiq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("x",{xmlns:"jabber:x:data",type:"submit"}),this._connection.sendIQ(roomiq.tree(),success_cb,error_cb)},setTopic:function(room,topic){var msg;return msg=$msg({to:room,from:this._connection.jid,type:"groupchat"}).c("subject",{xmlns:"jabber:client"}).t(topic),this._connection.send(msg.tree())},_modifyPrivilege:function(room,item,reason,handler_cb,error_cb){var iq;return iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_ADMIN}).cnode(item.node),null!=reason&&iq.c("reason",reason),this._connection.sendIQ(iq.tree(),handler_cb,error_cb)},modifyRole:function(room,nick,role,reason,handler_cb,error_cb){var item;return item=$build("item",{nick:nick,role:role}),this._modifyPrivilege(room,item,reason,handler_cb,error_cb)},kick:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"none",reason,handler_cb,error_cb)},voice:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"participant",reason,handler_cb,error_cb)},mute:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"visitor",reason,handler_cb,error_cb)},op:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"moderator",reason,handler_cb,error_cb)},deop:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"participant",reason,handler_cb,error_cb)},modifyAffiliation:function(room,jid,affiliation,reason,handler_cb,error_cb){var item;return item=$build("item",{jid:jid,affiliation:affiliation}),this._modifyPrivilege(room,item,reason,handler_cb,error_cb)},ban:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"outcast",reason,handler_cb,error_cb)},member:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"member",reason,handler_cb,error_cb)},revoke:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"none",reason,handler_cb,error_cb)},owner:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"owner",reason,handler_cb,error_cb)},admin:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"admin",reason,handler_cb,error_cb)},changeNick:function(room,user){var presence,room_nick;return room_nick=this.test_append_nick(room,user),presence=$pres({from:this._connection.jid,to:room_nick,id:this._connection.getUniqueId()}),this._connection.send(presence.tree())},setStatus:function(room,user,show,status){var presence,room_nick;return room_nick=this.test_append_nick(room,user),presence=$pres({from:this._connection.jid,to:room_nick}),null!=show&&presence.c("show",show).up(),null!=status&&presence.c("status",status),this._connection.send(presence.tree())},listRooms:function(server,handle_cb,error_cb){var iq;return iq=$iq({to:server,from:this._connection.jid,type:"get"}).c("query",{xmlns:Strophe.NS.DISCO_ITEMS}),this._connection.sendIQ(iq,handle_cb,error_cb)},test_append_nick:function(room,nick){return room+(null!=nick?"/"+Strophe.escapeNode(nick):"")}}),XmppRoom=function(){function XmppRoom(client,name,nick,password){this.client=client,this.name=name,this.nick=nick,this.password=password,this._roomRosterHandler=__bind(this._roomRosterHandler,this),this._addOccupant=__bind(this._addOccupant,this),this.roster={},this._message_handlers={},this._presence_handlers={},this._roster_handlers={},this._handler_ids=0,client.muc&&(this.client=client.muc),this.name=Strophe.getBareJidFromJid(name),this.addHandler("presence",this._roomRosterHandler)}return XmppRoom.prototype.join=function(msg_handler_cb,pres_handler_cb,roster_cb){return this.client.join(this.name,this.nick,msg_handler_cb,pres_handler_cb,roster_cb,this.password)},XmppRoom.prototype.leave=function(handler_cb,message){return this.client.leave(this.name,this.nick,handler_cb,message),delete this.client.rooms[this.name]},XmppRoom.prototype.message=function(nick,message,html_message,type){return this.client.message(this.name,nick,message,html_message,type)},XmppRoom.prototype.groupchat=function(message,html_message){return this.client.groupchat(this.name,message,html_message)},XmppRoom.prototype.invite=function(receiver,reason){return this.client.invite(this.name,receiver,reason)},XmppRoom.prototype.directInvite=function(receiver,reason){return this.client.directInvite(this.name,receiver,reason,this.password)},XmppRoom.prototype.configure=function(handler_cb){return this.client.configure(this.name,handler_cb)},XmppRoom.prototype.cancelConfigure=function(){return this.client.cancelConfigure(this.name)},XmppRoom.prototype.saveConfiguration=function(config){return this.client.saveConfiguration(this.name,config)},XmppRoom.prototype.queryOccupants=function(success_cb,error_cb){return this.client.queryOccupants(this.name,success_cb,error_cb)},XmppRoom.prototype.setTopic=function(topic){return this.client.setTopic(this.name,topic)},XmppRoom.prototype.modifyRole=function(nick,role,reason,success_cb,error_cb){return this.client.modifyRole(this.name,nick,role,reason,success_cb,error_cb)},XmppRoom.prototype.kick=function(nick,reason,handler_cb,error_cb){return this.client.kick(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.voice=function(nick,reason,handler_cb,error_cb){return this.client.voice(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.mute=function(nick,reason,handler_cb,error_cb){return this.client.mute(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.op=function(nick,reason,handler_cb,error_cb){return this.client.op(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.deop=function(nick,reason,handler_cb,error_cb){return this.client.deop(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.modifyAffiliation=function(jid,affiliation,reason,success_cb,error_cb){return this.client.modifyAffiliation(this.name,jid,affiliation,reason,success_cb,error_cb)},XmppRoom.prototype.ban=function(jid,reason,handler_cb,error_cb){return this.client.ban(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.member=function(jid,reason,handler_cb,error_cb){return this.client.member(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.revoke=function(jid,reason,handler_cb,error_cb){return this.client.revoke(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.owner=function(jid,reason,handler_cb,error_cb){return this.client.owner(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.admin=function(jid,reason,handler_cb,error_cb){return this.client.admin(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.changeNick=function(nick){return this.nick=nick,this.client.changeNick(this.name,nick)},XmppRoom.prototype.setStatus=function(show,status){return this.client.setStatus(this.name,this.nick,show,status)},XmppRoom.prototype.addHandler=function(handler_type,handler){var id;switch(id=this._handler_ids++,handler_type){case"presence":this._presence_handlers[id]=handler;break;case"message":this._message_handlers[id]=handler;break;case"roster":this._roster_handlers[id]=handler;break;default:return this._handler_ids--,null}return id},XmppRoom.prototype.removeHandler=function(id){return delete this._presence_handlers[id],delete this._message_handlers[id],delete this._roster_handlers[id]},XmppRoom.prototype._addOccupant=function(data){var occ;return occ=new Occupant(data,this),this.roster[occ.nick]=occ,occ},XmppRoom.prototype._roomRosterHandler=function(pres){var data,handler,id,newnick,nick,_ref;switch(data=XmppRoom._parsePresence(pres),nick=data.nick,newnick=data.newnick||null,data.type){case"error":return;case"unavailable":newnick&&(data.nick=newnick,this.roster[nick]&&this.roster[newnick]&&(this.roster[nick].update(this.roster[newnick]),this.roster[newnick]=this.roster[nick]),this.roster[nick]&&!this.roster[newnick]&&(this.roster[newnick]=this.roster[nick].update(data))),delete this.roster[nick];break;default:this.roster[nick]?this.roster[nick].update(data):this._addOccupant(data)}_ref=this._roster_handlers;for(id in _ref)handler=_ref[id],handler(this.roster,this)||delete this._roster_handlers[id];return!0},XmppRoom._parsePresence=function(pres){var a,c,c2,data,_i,_j,_len,_len1,_ref,_ref1,_ref2,_ref3,_ref4,_ref5,_ref6,_ref7;for(data={},a=pres.attributes,data.nick=Strophe.getResourceFromJid(a.from.textContent),data.type=(null!=(_ref=a.type)?_ref.textContent:void 0)||null,data.states=[],_ref1=pres.childNodes,_i=0,_len=_ref1.length;_i<_len;_i++)switch(c=_ref1[_i],c.nodeName){case"status":data.status=c.textContent||null;break;case"show":data.show=c.textContent||null;break;case"x":if(a=c.attributes,(null!=(_ref2=a.xmlns)?_ref2.textContent:void 0)===Strophe.NS.MUC_USER)for(_ref3=c.childNodes,_j=0,_len1=_ref3.length;_j<_len1;_j++)switch(c2=_ref3[_j],c2.nodeName){case"item":a=c2.attributes,data.affiliation=(null!=(_ref4=a.affiliation)?_ref4.textContent:void 0)||null,data.role=(null!=(_ref5=a.role)?_ref5.textContent:void 0)||null,data.jid=(null!=(_ref6=a.jid)?_ref6.textContent:void 0)||null,data.newnick=(null!=(_ref7=a.nick)?_ref7.textContent:void 0)||null;break;case"status":c2.attributes.code&&data.states.push(c2.attributes.code.textContent)}}return data},XmppRoom}(),RoomConfig=function(){function RoomConfig(info){this.parse=__bind(this.parse,this),null!=info&&this.parse(info)}return RoomConfig.prototype.parse=function(result){var attr,attrs,child,field,identity,query,_i,_j,_k,_len,_len1,_len2,_ref;for(query=result.getElementsByTagName("query")[0].childNodes,this.identities=[],this.features=[],this.x=[],_i=0,_len=query.length;_i<_len;_i++)switch(child=query[_i],attrs=child.attributes,child.nodeName){case"identity":for(identity={},_j=0,_len1=attrs.length;_j<_len1;_j++)attr=attrs[_j],identity[attr.name]=attr.textContent;this.identities.push(identity);break;case"feature":this.features.push(attrs.var.textContent);break;case"x":if(attrs=child.childNodes[0].attributes,"FORM_TYPE"===!attrs.var.textContent||"hidden"===!attrs.type.textContent)break;for(_ref=child.childNodes,_k=0,_len2=_ref.length;_k<_len2;_k++)field=_ref[_k],field.attributes.type||(attrs=field.attributes,this.x.push({var:attrs.var.textContent,label:attrs.label.textContent||"",value:field.firstChild.textContent||""}))}return{identities:this.identities,features:this.features,x:this.x}},RoomConfig}(),Occupant=function(){function Occupant(data,room){this.room=room,this.update=__bind(this.update,this),this.admin=__bind(this.admin,this),this.owner=__bind(this.owner,this),this.revoke=__bind(this.revoke,this),this.member=__bind(this.member,this),this.ban=__bind(this.ban,this),this.modifyAffiliation=__bind(this.modifyAffiliation,this),this.deop=__bind(this.deop,this),this.op=__bind(this.op,this),this.mute=__bind(this.mute,this),this.voice=__bind(this.voice,this),this.kick=__bind(this.kick,this),this.modifyRole=__bind(this.modifyRole,this),this.update(data)}return Occupant.prototype.modifyRole=function(role,reason,success_cb,error_cb){return this.room.modifyRole(this.nick,role,reason,success_cb,error_cb)},Occupant.prototype.kick=function(reason,handler_cb,error_cb){return this.room.kick(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.voice=function(reason,handler_cb,error_cb){return this.room.voice(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.mute=function(reason,handler_cb,error_cb){return this.room.mute(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.op=function(reason,handler_cb,error_cb){return this.room.op(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.deop=function(reason,handler_cb,error_cb){return this.room.deop(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.modifyAffiliation=function(affiliation,reason,success_cb,error_cb){return this.room.modifyAffiliation(this.jid,affiliation,reason,success_cb,error_cb)},Occupant.prototype.ban=function(reason,handler_cb,error_cb){return this.room.ban(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.member=function(reason,handler_cb,error_cb){return this.room.member(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.revoke=function(reason,handler_cb,error_cb){return this.room.revoke(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.owner=function(reason,handler_cb,error_cb){return this.room.owner(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.admin=function(reason,handler_cb,error_cb){return this.room.admin(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.update=function(data){return this.nick=data.nick||null,this.affiliation=data.affiliation||null,this.role=data.role||null,this.jid=data.jid||null,this.status=data.status||null,this.show=data.show||null,this},Occupant}(),/*! * Source: lib/strophe.disco.js, license: MIT, url: https://github.com/strophe/strophejs-plugins */ Strophe.addConnectionPlugin("disco",{_connection:null,_identities:[],_features:[],_items:[],init:function(conn){this._connection=conn,this._identities=[],this._features=[],this._items=[],conn.addHandler(this._onDiscoInfo.bind(this),Strophe.NS.DISCO_INFO,"iq","get",null,null),conn.addHandler(this._onDiscoItems.bind(this),Strophe.NS.DISCO_ITEMS,"iq","get",null,null)},addIdentity:function(category,type,name,lang){for(var i=0;i - Klaus Herberth * Copyright: - Michael Weibel * * @license MIT */ function($){Strophe.addConnectionPlugin("caps",{HASH:"sha-1",node:"http://strophe.im/strophejs/",_ver:"",_connection:null,_knownCapabilities:JSON.parse(localStorage.getItem("strophe.caps._knownCapabilities"))||{},_jidVerIndex:JSON.parse(localStorage.getItem("strophe.caps._jidVerIndex"))||{},init:function(conn){if(this._connection=conn,Strophe.addNamespace("CAPS","http://jabber.org/protocol/caps"),!this._connection.disco)throw"Caps plugin requires the disco plugin to be installed.";this._connection.disco.addFeature(Strophe.NS.CAPS),this._connection.addHandler(this._delegateCapabilities.bind(this),Strophe.NS.CAPS)},generateCapsAttrs:function(){return{xmlns:Strophe.NS.CAPS,hash:this.HASH,node:this.node,ver:this.generateVer()}},generateVer:function(){if(""!==this._ver)return this._ver;for(var ver="",identities=this._connection.disco._identities.sort(this._sortIdentities),identitiesLen=identities.length,features=this._connection.disco._features.sort(),featuresLen=features.length,i=0;ib.category?1:a.categoryb.type?1:a.typeb.lang?1:a.lang"),id="Strophe.x.Field-"+f.type+"-"+f.var,div.append("").append($(f.toHTML()).attr("id",id)).append("
"),div.children()},getHtmlFields:function(html){return html=$(html),__slice.call(html.find("input")).concat(__slice.call(html.find("select")),__slice.call(html.find("textarea")))}},Form=function(){function Form(opt){this.toHTML=__bind(this.toHTML,this),this.toJSON=__bind(this.toJSON,this),this.toXML=__bind(this.toXML,this);var f,i,_i,_j,_len,_len1,_ref,_ref1,_ref2,_ref3;if(this.fields=[],this.items=[],this.reported=[],opt)if(_ref=opt.type,__indexOf.call(Form._types,_ref)>=0&&(this.type=opt.type),this.title=opt.title,this.instructions=opt.instructions,helper.fill=function(src,target,klass){var f,_i,_len,_results;for(_results=[],_i=0,_len=src.length;_i<_len;_i++)f=src[_i],_results.push(target.push(f instanceof klass?f:new klass(f)));return _results},opt.fields)opt.fields&&helper.fill(opt.fields,this.fields,Field);else if(opt.items)for(opt.items&&helper.fill(opt.items,this.items,Item),_ref1=this.items,_i=0,_len=_ref1.length;_i<_len;_i++)for(i=_ref1[_i],_ref2=i.fields,_j=0,_len1=_ref2.length;_j<_len1;_j++)f=_ref2[_j],_ref3=f.var,__indexOf.call(this.reported,_ref3)>=0||this.reported.push(f.var)}return Form._types=["form","submit","cancel","result"],Form.prototype.type="form",Form.prototype.title=null,Form.prototype.instructions=null,Form.prototype.toXML=function(){var f,i,r,xml,_i,_j,_k,_len,_len1,_len2,_ref,_ref1,_ref2;if(xml=$build("x",{xmlns:"jabber:x:data",type:this.type}),this.title&&xml.c("title").t(this.title.toString()).up(),this.instructions&&xml.c("instructions").t(this.instructions.toString()).up(),this.fields.length>0)for(_ref=this.fields,_i=0,_len=_ref.length;_i<_len;_i++)f=_ref[_i],xml.cnode(f.toXML()).up();else if(this.items.length>0){for(xml.c("reported"),_ref1=this.reported,_j=0,_len1=_ref1.length;_j<_len1;_j++)r=_ref1[_j],xml.c("field",{var:r}).up();for(xml.up(),_ref2=this.items,_k=0,_len2=_ref2.length;_k<_len2;_k++)i=_ref2[_k],xml.cnode(i.toXML()).up()}return xml.tree()},Form.prototype.toJSON=function(){var f,i,json,_i,_j,_len,_len1,_ref,_ref1;if(json={type:this.type},this.title&&(json.title=this.title),this.instructions&&(json.instructions=this.instructions),this.fields.length>0)for(json.fields=[],_ref=this.fields,_i=0,_len=_ref.length;_i<_len;_i++)f=_ref[_i],json.fields.push(f.toJSON());else if(this.items.length>0)for(json.items=[],json.reported=this.reported,_ref1=this.items,_j=0,_len1=_ref1.length;_j<_len1;_j++)i=_ref1[_j],json.items.push(i.toJSON());return json},Form.prototype.toHTML=function(){var f,form,i,_i,_j,_len,_len1,_ref,_ref1;if(form=$("
"),this.title&&form.append("

"+this.title+"

"),this.instructions&&form.append("

"+this.instructions+"

"),this.fields.length>0)for(_ref=this.fields,_i=0,_len=_ref.length;_i<_len;_i++)f=_ref[_i],helper.createHtmlFieldCouple(f).appendTo(form);else if(this.items.length>0)for(_ref1=this.items,_j=0,_len1=_ref1.length;_j<_len1;_j++)i=_ref1[_j],$(i.toHTML()).appendTo(form);return form[0]},Form.fromXML=function(xml){var f,fields,i,instr,items,j,r,reported,title;return xml=$(xml),f=new Form({type:xml.attr("type")}),title=xml.find("title"),1===title.length&&(f.title=title.text()),instr=xml.find("instructions"),1===instr.length&&(f.instructions=instr.text()),fields=xml.find("field"),items=xml.find("item"),items.length>0?f.items=function(){var _i,_len,_results;for(_results=[],_i=0,_len=items.length;_i<_len;_i++)i=items[_i],_results.push(Item.fromXML(i));return _results}():fields.length>0&&(f.fields=function(){var _i,_len,_results;for(_results=[],_i=0,_len=fields.length;_i<_len;_i++)j=fields[_i],_results.push(Field.fromXML(j));return _results}()),reported=xml.find("reported"),1===reported.length&&(fields=reported.find("field"),f.reported=function(){var _i,_len,_results;for(_results=[],_i=0,_len=fields.length;_i<_len;_i++)r=fields[_i],_results.push($(r).attr("var"));return _results}()),f},Form.fromHTML=function(html){var f,field,fields,i,instructions,item,items,j,title,_i,_j,_len,_len1,_ref,_ref1,_ref2;if(html=$(html),f=new Form({type:html.attr("data-type")}),title=html.find("h1").text(),title&&(f.title=title),instructions=html.find("p").text(),instructions&&(f.instructions=instructions),items=html.find("fieldset"),fields=helper.getHtmlFields(html),items.length>0)for(f.items=function(){var _i,_len,_results;for(_results=[],_i=0,_len=items.length;_i<_len;_i++)i=items[_i],_results.push(Item.fromHTML(i));return _results}(),_ref=f.items,_i=0,_len=_ref.length;_i<_len;_i++)for(item=_ref[_i],_ref1=item.fields,_j=0,_len1=_ref1.length;_j<_len1;_j++)field=_ref1[_j],_ref2=field.var,__indexOf.call(f.reported,_ref2)>=0||f.reported.push(field.var);else fields.length>0&&(f.fields=function(){var _k,_len2,_results;for(_results=[],_k=0,_len2=fields.length;_k<_len2;_k++)j=fields[_k],_results.push(Field.fromHTML(j));return _results}());return f},Form}(),Field=function(){function Field(opt){this.toHTML=__bind(this.toHTML,this),this.toXML=__bind(this.toXML,this),this.toJSON=__bind(this.toJSON,this),this.addOptions=__bind(this.addOptions,this),this.addOption=__bind(this.addOption,this),this.addValues=__bind(this.addValues,this),this.addValue=__bind(this.addValue,this);var _ref,_ref1;this.options=[],this.values=[],opt&&(_ref=opt.type,__indexOf.call(Field._types,_ref)>=0&&(this.type=opt.type.toString()),opt.desc&&(this.desc=opt.desc.toString()),opt.label&&(this.label=opt.label.toString()),this.var=(null!=(_ref1=opt.var)?_ref1.toString():void 0)||"_no_var_was_defined_",this.required=opt.required===!0||"true"===opt.required,opt.options&&this.addOptions(opt.options),opt.value&&(opt.values=[opt.value]),opt.values&&this.addValues(opt.values))}return Field._types=["boolean","fixed","hidden","jid-multi","jid-single","list-multi","list-single","text-multi","text-private","text-single"],Field._multiTypes=["list-multi","jid-multi","text-multi","hidden"],Field.prototype.type="text-single",Field.prototype.desc=null,Field.prototype.label=null,Field.prototype.var="_no_var_was_defined_",Field.prototype.required=!1,Field.prototype.addValue=function(val){return this.addValues([val])},Field.prototype.addValues=function(vals){var multi,v,_ref;return _ref=this.type,multi=__indexOf.call(Field._multiTypes,_ref)>=0,(multi||!multi&&1===vals.length)&&(this.values=__slice.call(this.values).concat(__slice.call(function(){var _i,_len,_results;for(_results=[],_i=0,_len=vals.length;_i<_len;_i++)v=vals[_i],_results.push(v.toString());return _results}()))),this},Field.prototype.addOption=function(opt){return this.addOptions([opt])},Field.prototype.addOptions=function(opts){var o;return"list-single"!==this.type&&"list-multi"!==this.type||("object"!=typeof opts[0]&&(opts=function(){var _i,_len,_results;for(_results=[],_i=0,_len=opts.length;_i<_len;_i++)o=opts[_i],_results.push(new Option({value:o.toString()}));return _results}()),helper.fill(opts,this.options,Option)),this},Field.prototype.toJSON=function(){var json,o,_i,_len,_ref;if(json={type:this.type,var:this.var,required:this.required},this.desc&&(json.desc=this.desc),this.label&&(json.label=this.label),this.values&&(json.values=this.values),this.options)for(json.options=[],_ref=this.options,_i=0,_len=_ref.length;_i<_len;_i++)o=_ref[_i],json.options.push(o.toJSON());return json},Field.prototype.toXML=function(){var attrs,o,v,xml,_i,_j,_len,_len1,_ref,_ref1;if(attrs={type:this.type,var:this.var},this.label&&(attrs.label=this.label),xml=$build("field",attrs),this.desc&&xml.c("desc").t(this.desc).up(),this.required&&xml.c("required").up(),this.values)for(_ref=this.values,_i=0,_len=_ref.length;_i<_len;_i++)v=_ref[_i],xml.c("value").t(v.toString()).up();if(this.options)for(_ref1=this.options,_j=0,_len1=_ref1.length;_j<_len1;_j++)o=_ref1[_j],xml.cnode(o.toXML()).up();return xml.tree()},Field.prototype.toHTML=function(){var el,k,line,o,opt,txt,val,_i,_j,_len,_len1,_ref,_ref1,_ref2;switch(this.type.toLowerCase()){case"list-single":case"list-multi":if(el=$("