Update development section of the docs

This commit is contained in:
JC Brand 2013-08-09 09:21:20 +02:00
parent 5682311285
commit 7010c15d35
8 changed files with 90 additions and 21 deletions

Binary file not shown.

Binary file not shown.

View File

@ -50,7 +50,7 @@ The *index.html* file inside the Converse.js folder serves as a nice usable
example of this. example of this.
These minified files provide the same demo-like functionality as is available These minified files provide the same demo-like functionality as is available
on the `conversejs.org`_ website. Useful for testing or demoing, but not very on the `conversejs.org <http://conversejs.org>`_ website. Useful for testing or demoing, but not very
practical. practical.
You'll most likely want to implement some kind of single-signon solution for You'll most likely want to implement some kind of single-signon solution for
@ -210,6 +210,12 @@ connection object.
Development Development
=========== ===========
If you want to work with the non-minified Javascript and CSS files you'll soon
notice that there are references to a missing *components* folder. Please
follow the instructions below to create this folder and fetch Converse's
3rd-party dependencies.
Install Node.js and development dependencies Install Node.js and development dependencies
============================================ ============================================
@ -219,27 +225,39 @@ which depend on Node.js and npm (the Node package manager).
If you don't have Node.js installed, you can download and install the latest If you don't have Node.js installed, you can download and install the latest
version `here <https://nodejs.org/download>`_. version `here <https://nodejs.org/download>`_.
Once you have Node.js installed, run the following command in the Converse.js Once you have Node.js installed, run the following command inside the Converse.js
directory: directory:
:: ::
npm install npm install
This will install all the development dependencies for Converse.js. If you are
curious to know what these are, take a look at whats under the *devDependencies* key in
`package.json <https://github.com/jcbrand/converse.js/blob/master/package.json>`.
Install 3rd party dependencies Install 3rd party dependencies
============================== ==============================
Now that we have Grunt and Bower, you can install and configure Converse's After running ``npm install``, you will now have Grunt and Bower installed.
3rd party dependencies with the following command:
We use Bower to manage Converse's front-end dependencies (e.g. Javascript that
should get loaded in the browser).
To fetch these dependencies, run:
:: ::
grunt fetch grunt fetch
This will call Bower in the background to fetch all the front-end
dependencies (like backbone.js, strophe.js etc.) and then put them in the
*components* folder.
With AMD and require.js (recommended) With AMD and require.js (recommended)
===================================== =====================================
Converse.js uses `require.js`_ to asynchronously load dependencies. Converse.js uses `require.js <http://requirejs.org>`_ to asynchronously load dependencies.
If you want to develop or customize converse.js, you'll want to load the If you want to develop or customize converse.js, you'll want to load the
non-minified javascript files. non-minified javascript files.
@ -580,9 +598,6 @@ making sure to also paste the JSON data as value to the "locale_data" key.
Congratulations, you've now succesfully added your translations. Sorry for all Congratulations, you've now succesfully added your translations. Sorry for all
those hoops you had to jump through. those hoops you had to jump through.
.. _`conversejs.org`: http://conversejs.org
.. _`require.js`: http://requirejs.org
.. _`read more about require.js's optimizer here`: http://requirejs.org/docs/optimization.html .. _`read more about require.js's optimizer here`: http://requirejs.org/docs/optimization.html
.. _`HTTP`: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol .. _`HTTP`: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
.. _`XMPP`: https://en.wikipedia.org/wiki/Xmpp .. _`XMPP`: https://en.wikipedia.org/wiki/Xmpp

View File

@ -7,6 +7,11 @@ by Jason Costello, @jsncostello
@import url("../../../stylesheets/stylesheet.css"); @import url("../../../stylesheets/stylesheet.css");
@import url(pygment_trac.css); @import url(pygment_trac.css);
div.body h1 {
margin-top: 1em;
font-size: 36px;
}
div.body, div.body,
div.document { div.document {
background-color: transparent; background-color: transparent;
@ -29,3 +34,16 @@ h1#project_title a {
h1 a { h1 a {
color: #0069ba; color: #0069ba;
} }
ul {
margin-bottom: 0;
}
tt.literal {
color: #222;
background-color: #fff;
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
font-size: 14px;
}

View File

@ -262,23 +262,35 @@ connection object.</p>
</div> </div>
<div class="section" id="development"> <div class="section" id="development">
<h1><a class="toc-backref" href="#id10">Development</a><a class="headerlink" href="#development" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#id10">Development</a><a class="headerlink" href="#development" title="Permalink to this headline"></a></h1>
<p>If you want to work with the non-minified Javascript and CSS files you&#8217;ll soon
notice that there are references to a missing <em>components</em> folder. Please
follow the instructions below to create this folder and fetch Converse&#8217;s
3rd-party dependencies.</p>
<div class="section" id="install-node-js-and-development-dependencies"> <div class="section" id="install-node-js-and-development-dependencies">
<h2><a class="toc-backref" href="#id11">Install Node.js and development dependencies</a><a class="headerlink" href="#install-node-js-and-development-dependencies" title="Permalink to this headline"></a></h2> <h2><a class="toc-backref" href="#id11">Install Node.js and development dependencies</a><a class="headerlink" href="#install-node-js-and-development-dependencies" title="Permalink to this headline"></a></h2>
<p>We use development tools (<a class="reference external" href="http://gruntjs.com">Grunt</a> and <a class="reference external" href="http://bower.io">Bower</a>) <p>We use development tools (<a class="reference external" href="http://gruntjs.com">Grunt</a> and <a class="reference external" href="http://bower.io">Bower</a>)
which depend on Node.js and npm (the Node package manager).</p> which depend on Node.js and npm (the Node package manager).</p>
<p>If you don&#8217;t have Node.js installed, you can download and install the latest <p>If you don&#8217;t have Node.js installed, you can download and install the latest
version <a class="reference external" href="https://nodejs.org/download">here</a>.</p> version <a class="reference external" href="https://nodejs.org/download">here</a>.</p>
<p>Once you have Node.js installed, run the following command in the Converse.js <p>Once you have Node.js installed, run the following command inside the Converse.js
directory:</p> directory:</p>
<div class="highlight-python"><pre>npm install</pre> <div class="highlight-python"><pre>npm install</pre>
</div> </div>
<p>This will install all the development dependencies for Converse.js. If you are
curious to know what these are, take a look at whats under the <em>devDependencies</em> key in
<cite>package.json &lt;https://github.com/jcbrand/converse.js/blob/master/package.json&gt;</cite>.</p>
</div> </div>
<div class="section" id="install-3rd-party-dependencies"> <div class="section" id="install-3rd-party-dependencies">
<h2><a class="toc-backref" href="#id12">Install 3rd party dependencies</a><a class="headerlink" href="#install-3rd-party-dependencies" title="Permalink to this headline"></a></h2> <h2><a class="toc-backref" href="#id12">Install 3rd party dependencies</a><a class="headerlink" href="#install-3rd-party-dependencies" title="Permalink to this headline"></a></h2>
<p>Now that we have Grunt and Bower, you can install and configure Converse&#8217;s <p>After running <tt class="docutils literal"><span class="pre">npm</span> <span class="pre">install</span></tt>, you will now have Grunt and Bower installed.</p>
3rd party dependencies with the following command:</p> <p>We use Bower to manage Converse&#8217;s front-end dependencies (e.g. Javascript that
should get loaded in the browser).</p>
<p>To fetch these dependencies, run:</p>
<div class="highlight-python"><pre>grunt fetch</pre> <div class="highlight-python"><pre>grunt fetch</pre>
</div> </div>
<p>This will call Bower in the background to fetch all the front-end
dependencies (like backbone.js, strophe.js etc.) and then put them in the
<em>components</em> folder.</p>
</div> </div>
<div class="section" id="with-amd-and-require-js-recommended"> <div class="section" id="with-amd-and-require-js-recommended">
<h2><a class="toc-backref" href="#id13">With AMD and require.js (recommended)</a><a class="headerlink" href="#with-amd-and-require-js-recommended" title="Permalink to this headline"></a></h2> <h2><a class="toc-backref" href="#id13">With AMD and require.js (recommended)</a><a class="headerlink" href="#with-amd-and-require-js-recommended" title="Permalink to this headline"></a></h2>

View File

@ -1 +1 @@
Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,sorri:0,specif:0,present:0,under:0,spec:0,string:0,fals:0,mechan:0,jack:0,veri:0,list:0,pleas:0,prevent:0,past:0,second:0,pass:0,download:0,further:0,fullnam:0,click:0,even:0,index:0,what:0,hide:0,section:0,current:0,version:0,"new":0,net:0,method:0,widget:0,gener:0,here:0,bodi:0,let:0,valu:0,box:0,convert:0,convers:0,mysit:0,ajax:0,fetch:0,implement:0,via:0,extra:0,solut:0,prefer:0,put:0,href:0,succesfulli:0,auto_list_room:0,instal:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,stylesheet:0,call:0,recommend:0,type:0,until:0,tightli:0,more:0,yahoo:0,must:0,room:0,setup:[],work:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,snippet:0,how:0,sid:0,roster:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,callback:0,underscor:0,data:0,demonstr:0,man:0,practic:0,bind:0,show_controlbox_by_default:0,element:0,caus:0,inform:0,parti:0,order:0,help:0,chatbox:0,xmpp:0,over:0,becaus:0,through:0,streamlin:0,write:0,jid:0,directli:0,fit:0,fix:0,pend:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,initi:0,front:0,now:0,introduct:0,name:0,edit:0,authent:0,token:0,ejabberd:0,each:0,side:0,mean:0,domain:0,individu:0,realli:0,"static":0,connect:0,happen:0,extract:0,special:0,variabl:0,shown:0,"3rd":0,space:0,open:0,content:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,reason:0,ask:0,org:0,afterward:0,could:0,keep:0,yui:0,turn:0,first:0,origin:0,softwar:0,render:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,alreadi:0,done:0,owner:0,custom:0,jabber:0,differ:0,script:0,top:0,messag:0,attach:0,attack:0,jed:0,luckili:0,option:0,tool:0,specifi:0,compressor:0,part:0,bower:0,grunt:0,than:0,serv:0,jump:0,kind:0,bloat:0,provid:0,remov:0,exampl:0,jqueri:[],reus:0,toward:[],browser:0,pre:0,"function":0,sai:[],saa:0,modern:0,ani:0,packag:0,have:0,tabl:0,need:0,moffitt:0,django:0,bosh_service_url:0,prebind:0,min:0,latter:0,note:0,also:0,without:0,build:0,which:0,singl:0,sure:0,deploy:0,track:0,object:0,most:0,deploi:0,homepag:0,"class":0,don:0,url:0,request:0,face:0,runtim:0,pars:0,latest:0,xdomainrequest:0,show:0,german:0,text:0,session:0,fine:0,find:0,onli:0,exactli:0,locat:0,firstnam:0,configur:0,apach:0,should:0,folder:0,local:0,meant:0,get:0,opkod:0,cannot:0,requir:0,enabl:0,emb:0,mainspec:0,"public":0,reload:0,bad:0,integr:0,contain:0,where:0,set:0,habit:0,stroph:0,see:0,close:0,statu:0,state:0,bridg:0,between:0,experi:0,jasmin:0,hide_muc_serv:0,attribut:0,kei:0,screen:0,javascript:0,conjunct:[],job:0,bosh:0,otherwis:0,both:0,cor:0,instant:0,shortliv:0,conversej:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,instanti:0,pot:0,non:0,backend:0,sucessfulli:0,rebuild:0,compon:0,json:0,much:0,besid:0,subscrib:0,msgmerg:0,great:0,minifi:0,togeth:0,i18n:0,those:0,multi:0,main:0,look:0,servic:0,plugin:0,defin:0,error:0,hightlight:0,chat:0,helper:0,demo:0,auto_subscrib:0,site:0,rid:0,develop:0,minim:0,receiv:0,media:0,make:0,minif:0,cross:0,same:0,read:0,html:0,chatroom:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,hand:0,"50kb":0,user:0,xhr_user_search:0,recent:0,stateless:0,markup:0,person:[],contact:0,command:0,wherebi:0,thi:0,choos:0,usual:0,plural_form:0,protocol:0,just:0,jshint:0,languag:0,web:0,xmlhttprequest:0,had:0,onconnect:0,add:0,other:0,non_amd:0,input:0,yuicompressor:0,match:0,take:0,applic:0,format:0,webpag:0,amd:0,nginx:0,traffic:0,xss:0,like:0,success:0,server:0,benefit:0,necessari:0,either:0,page:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,though:0,unsur:0,overcom:0,refer:0,run:0,host:0,panel:0,src:0,about:0,obj:[],controlbox:0,unfortun:0,act:0,own:0,encod:0,automat:0,wrap:0,your:0,manag:0,log:0,wai:0,transfer:0,support:0,submit:0,happi:0,avail:0,start:[],includ:0,lot:0,suit:0,"var":0,analysi:0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,line:0,inlin:0,"true":0,bug:0,congratul:0,longer:0,info:0,pull:0,made:0,locale_data:0,possibl:0,"default":0,bugfix:0,asynchron:0,below:0,toggl:0,legwork:0,problem:0,expect:0,featur:0,creat:0,"100kb":[],exist:0,file:0,check:0,want:0,when:0,detail:0,gettext:0,field:0,valid:0,rememb:0,test:0,you:0,nice:0,node:0,intend:0,releas:0,stai:0,lang:0,requirej:0,directori:0,getjson:0,potenti:0,time:0},objtypes:{},titles:["Quickstart (to get a demo up and running)"],objnames:{},filenames:["index"]}) Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,sorri:0,those:0,under:0,spec:0,string:0,fals:0,mechan:0,jack:0,veri:0,list:0,pleas:0,prevent:0,past:0,second:0,pass:0,download:0,further:0,fullnam:0,click:0,even:0,index:0,what:0,hide:0,section:0,current:0,version:0,"new":0,net:0,"public":0,widget:0,gener:0,here:0,bodi:0,let:0,valu:0,box:0,convert:0,convers:0,mysit:0,reason:0,fetch:0,implement:0,via:0,extra:0,apach:0,prefer:0,ask:0,href:0,org:0,auto_list_room:0,instal:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,stylesheet:0,call:0,recommend:0,type:0,until:0,tightli:0,more:0,yahoo:0,notic:0,site:0,must:0,room:0,setup:[],work:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,write:0,how:0,sid:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,callback:0,underscor:0,data:0,demonstr:0,man:0,github:0,practic:0,bind:0,show_controlbox_by_default:0,django:0,caus:0,inform:0,media:0,order:0,help:0,chatbox:0,xmpp:0,over:0,becaus:0,through:0,streamlin:0,snippet:0,jid:0,directli:0,fit:0,fix:0,"static":0,pend:0,creat:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,initi:0,front:0,now:0,introduct:0,name:0,edit:0,authent:0,token:0,ejabberd:0,each:0,side:0,mean:0,domain:0,individu:0,realli:0,legwork:0,connect:0,happen:0,extract:0,special:0,variabl:0,shown:0,"3rd":0,space:0,open:0,content:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,ajax:0,put:0,succesfulli:0,afterward:0,could:0,success:0,keep:0,yui:0,turn:0,first:0,origin:0,softwar:0,render:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,instruct:0,alreadi:0,done:0,owner:0,happi:0,miss:0,differ:0,script:0,top:0,messag:0,attach:0,attack:0,master:0,jed:0,jcbrand:0,luckili:0,option:0,tool:0,specifi:0,compressor:0,part:0,bower:0,grunt:0,than:0,serv:0,jump:0,kind:0,bloat:0,provid:0,remov:0,exampl:0,jqueri:[],bridg:0,toward:[],browser:0,pre:0,analysi:0,sai:[],saa:0,modern:0,ani:0,packag:0,have:0,tabl:0,need:0,moffitt:0,element:0,bosh_service_url:0,prebind:0,min:0,latter:0,note:0,also:0,without:0,build:0,which:0,singl:0,sure:0,though:0,track:0,object:0,most:0,deploi:0,homepag:0,"class":0,don:0,url:0,request:0,face:0,runtim:0,pars:0,usual:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,session:0,fine:0,find:0,onli:0,exactli:0,locat:0,just:0,configur:0,solut:0,should:0,folder:0,local:0,meant:0,get:0,soon:0,opkod:0,cannot:0,deploy:0,requir:0,enabl:0,emb:0,mainspec:0,method:0,reload:0,bad:0,integr:0,contain:0,where:0,set:0,habit:0,stroph:0,see:0,close:0,statu:0,state:0,reus:0,between:0,experi:0,jasmin:0,hide_muc_serv:0,attribut:0,kei:0,screen:0,javascript:0,conjunct:[],job:0,bosh:0,both:0,cor:0,instant:0,shortliv:0,conversej:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,instanti:0,pot:0,backend:0,sucessfulli:0,rebuild:0,compon:0,json:0,much:0,besid:0,subscrib:0,non_amd:0,msgmerg:0,great:0,minifi:0,togeth:0,i18n:0,present:0,multi:0,main:0,look:0,servic:0,plugin:0,defin:0,error:0,hightlight:0,file:0,helper:0,demo:0,auto_subscrib:0,non:0,rid:0,develop:0,minim:0,receiv:0,parti:0,make:0,minif:0,cross:0,same:0,webpag:0,html:0,chatroom:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,hand:0,"50kb":0,user:0,xhr_user_search:0,recent:0,stateless:0,markup:0,person:[],contact:0,command:0,wherebi:0,thi:0,choos:0,latest:0,plural_form:0,protocol:0,firstnam:0,jshint:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,valid:0,blob:0,input:0,yuicompressor:0,match:0,take:0,applic:0,format:0,read:0,amd:0,nginx:0,traffic:0,know:0,background:0,like:0,xss:0,backbon:0,specif:0,server:0,benefit:0,necessari:0,either:0,page:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,roster:0,unsur:0,overcom:0,refer:0,run:0,host:0,panel:0,src:0,about:0,obj:[],controlbox:0,unfortun:0,act:0,own:0,curiou:0,encod:0,automat:0,wrap:0,your:0,manag:0,log:0,wai:0,transfer:0,support:0,submit:0,custom:0,avail:0,start:[],includ:0,lot:0,suit:0,"var":0,"function":0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,line:0,inlin:0,"true":0,bug:0,congratul:0,requirej:0,info:0,pull:0,made:0,locale_data:0,possibl:0,"default":0,bugfix:0,asynchron:0,below:0,toggl:0,otherwis:0,problem:0,expect:0,featur:0,onconnect:0,"100kb":[],exist:0,chat:0,check:0,want:0,when:0,detail:0,gettext:0,field:0,other:0,rememb:0,test:0,you:0,nice:0,node:0,intend:0,releas:0,stai:0,lang:0,longer:0,jabber:0,directori:0,getjson:0,potenti:0,time:0},objtypes:{},titles:["Quickstart (to get a demo up and running)"],objnames:{},filenames:["index"]})

View File

@ -33,3 +33,12 @@ h1 a {
ul { ul {
margin-bottom: 0; margin-bottom: 0;
} }
tt.literal {
color: #222;
background-color: #fff;
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
font-size: 14px;
}

View File

@ -50,7 +50,7 @@ The *index.html* file inside the Converse.js folder serves as a nice usable
example of this. example of this.
These minified files provide the same demo-like functionality as is available These minified files provide the same demo-like functionality as is available
on the `conversejs.org`_ website. Useful for testing or demoing, but not very on the `conversejs.org <http://conversejs.org>`_ website. Useful for testing or demoing, but not very
practical. practical.
You'll most likely want to implement some kind of single-signon solution for You'll most likely want to implement some kind of single-signon solution for
@ -210,6 +210,12 @@ connection object.
Development Development
=========== ===========
If you want to work with the non-minified Javascript and CSS files you'll soon
notice that there are references to a missing *components* folder. Please
follow the instructions below to create this folder and fetch Converse's
3rd-party dependencies.
Install Node.js and development dependencies Install Node.js and development dependencies
============================================ ============================================
@ -219,27 +225,39 @@ which depend on Node.js and npm (the Node package manager).
If you don't have Node.js installed, you can download and install the latest If you don't have Node.js installed, you can download and install the latest
version `here <https://nodejs.org/download>`_. version `here <https://nodejs.org/download>`_.
Once you have Node.js installed, run the following command in the Converse.js Once you have Node.js installed, run the following command inside the Converse.js
directory: directory:
:: ::
npm install npm install
This will install all the development dependencies for Converse.js. If you are
curious to know what these are, take a look at whats under the *devDependencies* key in
`package.json <https://github.com/jcbrand/converse.js/blob/master/package.json>`.
Install 3rd party dependencies Install 3rd party dependencies
============================== ==============================
Now that we have Grunt and Bower, you can install and configure Converse's After running ``npm install``, you will now have Grunt and Bower installed.
3rd party dependencies with the following command:
We use Bower to manage Converse's front-end dependencies (e.g. Javascript that
should get loaded in the browser).
To fetch these dependencies, run:
:: ::
grunt fetch grunt fetch
This will call Bower in the background to fetch all the front-end
dependencies (like backbone.js, strophe.js etc.) and then put them in the
*components* folder.
With AMD and require.js (recommended) With AMD and require.js (recommended)
===================================== =====================================
Converse.js uses `require.js`_ to asynchronously load dependencies. Converse.js uses `require.js <http://requirejs.org>`_ to asynchronously load dependencies.
If you want to develop or customize converse.js, you'll want to load the If you want to develop or customize converse.js, you'll want to load the
non-minified javascript files. non-minified javascript files.
@ -580,9 +598,6 @@ making sure to also paste the JSON data as value to the "locale_data" key.
Congratulations, you've now succesfully added your translations. Sorry for all Congratulations, you've now succesfully added your translations. Sorry for all
those hoops you had to jump through. those hoops you had to jump through.
.. _`conversejs.org`: http://conversejs.org
.. _`require.js`: http://requirejs.org
.. _`read more about require.js's optimizer here`: http://requirejs.org/docs/optimization.html .. _`read more about require.js's optimizer here`: http://requirejs.org/docs/optimization.html
.. _`HTTP`: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol .. _`HTTP`: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
.. _`XMPP`: https://en.wikipedia.org/wiki/Xmpp .. _`XMPP`: https://en.wikipedia.org/wiki/Xmpp