<li><aclass="reference internal"href="#install-the-development-and-front-end-dependencies"id="id19">Install the development and front-end dependencies</a></li>
<li><aclass="reference internal"href="#install-the-development-and-front-end-dependencies"id="id21">Install the development and front-end dependencies</a></li>
<li><aclass="reference internal"href="#with-amd-and-require-js-recommended"id="id20">With AMD and require.js (recommended)</a></li>
<li><aclass="reference internal"href="#with-amd-and-require-js-recommended"id="id22">With AMD and require.js (recommended)</a></li>
<li><aclass="reference internal"href="#without-amd-and-require-js"id="id21">Without AMD and require.js</a></li>
<li><aclass="reference internal"href="#without-amd-and-require-js"id="id23">Without AMD and require.js</a></li>
<li><aclass="reference internal"href="#before-submitting-a-pull-request"id="id22">Before submitting a pull request</a><ul>
<li><aclass="reference internal"href="#before-submitting-a-pull-request"id="id24">Before submitting a pull request</a><ul>
<li><aclass="reference internal"href="#add-tests-for-your-bugfix-or-feature"id="id23">Add tests for your bugfix or feature</a></li>
<li><aclass="reference internal"href="#add-tests-for-your-bugfix-or-feature"id="id25">Add tests for your bugfix or feature</a></li>
<li><aclass="reference internal"href="#check-that-the-tests-pass"id="id24">Check that the tests pass</a></li>
<li><aclass="reference internal"href="#check-that-the-tests-pass"id="id26">Check that the tests pass</a></li>
<li><aclass="reference internal"href="#check-your-code-for-errors-or-bad-habits-by-running-jshint"id="id25">Check your code for errors or bad habits by running JSHint</a></li>
<li><aclass="reference internal"href="#check-your-code-for-errors-or-bad-habits-by-running-jshint"id="id27">Check your code for errors or bad habits by running JSHint</a></li>
<h1><aclass="toc-backref"href="#id5">Quickstart (to get a demo up and running)</a><aclass="headerlink"href="#quickstart-to-get-a-demo-up-and-running"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id7">Quickstart (to get a demo up and running)</a><aclass="headerlink"href="#quickstart-to-get-a-demo-up-and-running"title="Permalink to this headline">¶</a></h1>
<p>When you download a specific release of <em>Converse.js</em> there will be two minified files inside the zip file.</p>
<p>When you download a specific release of <em>Converse.js</em> there will be two minified files inside the zip file.</p>
<ulclass="simple">
<ulclass="simple">
<li>converse.min.js</li>
<li>builds/converse.min.js</li>
<li>converse.min.css</li>
<li>css/converse.min.css</li>
</ul>
</ul>
<p>You can include these two files inside the <em><head></em> element of your website via the <em>script</em> and <em>link</em>
<p>You can include these two files inside the <em><head></em> element of your website via the <em>script</em> and <em>link</em>
<h1><aclass="toc-backref"href="#id6">Introduction</a><aclass="headerlink"href="#introduction"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id8">Introduction</a><aclass="headerlink"href="#introduction"title="Permalink to this headline">¶</a></h1>
<p>Even though you can connect to public XMPP servers on the <aclass="reference external"href="http://conversejs.org">conversejs.org</a>
<p>Even though you can connect to public XMPP servers on the <aclass="reference external"href="http://conversejs.org">conversejs.org</a>
website, <em>Converse.js</em> is not really meant to be a “Software-as-a-service” (SaaS)
website, <em>Converse.js</em> is not really meant to be a “Software-as-a-service” (SaaS)
webchat.</p>
webchat.</p>
<p>Instead, its goal is to provide the means for website owners to add a tightly
<p>Instead, its goal is to provide the means for website owners to add a tightly
integrated instant messaging service to their own sites.</p>
integrated instant messaging service to their own websites.</p>
<p>As a website owner, you are expected to host <em>Converse.js</em> yourself, and to do some legwork to
<p>As a website owner, you are expected to host <em>Converse.js</em> yourself, and to do some legwork to
properly configure and integrate it into your site.</p>
properly configure and integrate it into your site.</p>
<p>The benefit in doing this, is that your users have a much more streamlined and integrated
<p>The benefit in doing this, is that your users have a much more streamlined and integrated
...
@@ -210,9 +211,9 @@ code.</p>
...
@@ -210,9 +211,9 @@ code.</p>
requirements.</p>
requirements.</p>
</div>
</div>
<divclass="section"id="what-you-will-need">
<divclass="section"id="what-you-will-need">
<h1><aclass="toc-backref"href="#id7">What you will need</a><aclass="headerlink"href="#what-you-will-need"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id9">What you will need</a><aclass="headerlink"href="#what-you-will-need"title="Permalink to this headline">¶</a></h1>
<divclass="section"id="an-xmpp-jabber-server">
<divclass="section"id="an-xmpp-jabber-server">
<h2><aclass="toc-backref"href="#id8">An XMPP/Jabber server</a><aclass="headerlink"href="#an-xmpp-jabber-server"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id10">An XMPP/Jabber server</a><aclass="headerlink"href="#an-xmpp-jabber-server"title="Permalink to this headline">¶</a></h2>
<p><em>Converse.js</em> implements <aclass="reference external"href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> as its messaging protocol, and therefore needs
<p><em>Converse.js</em> implements <aclass="reference external"href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> as its messaging protocol, and therefore needs
to connect to an XMPP/Jabber server (Jabber is really just a synonym for XMPP).</p>
to connect to an XMPP/Jabber server (Jabber is really just a synonym for XMPP).</p>
<p>You can connect to public XMPP servers like <ttclass="docutils literal"><spanclass="pre">jabber.org</span></tt> but if you want to
<p>You can connect to public XMPP servers like <ttclass="docutils literal"><spanclass="pre">jabber.org</span></tt> but if you want to
...
@@ -220,8 +221,8 @@ have <a class="reference internal" href="#session-support">Session Support</a> y
...
@@ -220,8 +221,8 @@ have <a class="reference internal" href="#session-support">Session Support</a> y
<p>You can find a list of public XMPP servers/providers on <aclass="reference external"href="http://xmpp.net">xmpp.net</a> and a list of
<p>You can find a list of public XMPP servers/providers on <aclass="reference external"href="http://xmpp.net">xmpp.net</a> and a list of
servers that you can set up yourself on <aclass="reference external"href="http://xmpp.org/xmpp-software/servers/">xmpp.org</a>.</p>
servers that you can set up yourself on <aclass="reference external"href="http://xmpp.org/xmpp-software/servers/">xmpp.org</a>.</p>
<h2><aclass="toc-backref"href="#id9">Connection Manager</a><aclass="headerlink"href="#connection-manager"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id11">A BOSH Connection Manager</a><aclass="headerlink"href="#a-bosh-connection-manager"title="Permalink to this headline">¶</a></h2>
<p>Your website and <em>Converse.js</em> use <aclass="reference external"href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a> as protocol to communicate with
<p>Your website and <em>Converse.js</em> use <aclass="reference external"href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a> as protocol to communicate with
the webserver. HTTP connections are stateless and usually shortlived.</p>
the webserver. HTTP connections are stateless and usually shortlived.</p>
<p><aclass="reference external"href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> on the other hand, is the protocol that enables instant messaging, and
<p><aclass="reference external"href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> on the other hand, is the protocol that enables instant messaging, and
...
@@ -229,16 +230,20 @@ its connections are stateful and usually longer.</p>
...
@@ -229,16 +230,20 @@ its connections are stateful and usually longer.</p>
<p>To enable a web application like <em>Converse.js</em> to communicate with an XMPP
<p>To enable a web application like <em>Converse.js</em> to communicate with an XMPP
server, we need a proxy in the middle that can act as a bridge between the two
server, we need a proxy in the middle that can act as a bridge between the two
<p>This is the job of a connection manager. A connection manager can be either a
<p>This is the job of a connection manager. A connection manager can be either a
standalone application or part of an XMPP server. <aclass="reference external"href="http://www.ejabberd.im">ejabberd</a> for example,
standalone application or part of an XMPP server. Popular XMPP servers such as
includes a connection manager (but you have to enable it).</p>
<aclass="reference external"href="http://www.ejabberd.im">ejabberd</a>, <aclass="reference external"href="http://prosody.im/doc/setting_up_bosh">prosody</a> and
<p>The demo on the <aclass="reference external"href="http://conversejs.org">Converse.js homepage</a> uses a a connection manager located at <aclass="reference external"href="https://bind.conversejs.org">https://bind.conversejs.org</a>.
<aclass="reference external"href="http://www.igniterealtime.org/projects/openfire/">openfire</a> all include their own connection managers
This connection manager is for testing purposes only, please don’t use it in
(but you usually have to enable them in the configuration).</p>
production.</p>
<p>Standalone connection managers also exist, see for example <aclass="reference external"href="https://github.com/twonds/punjab">Punjab</a>.</p>
<p>The demo on the <aclass="reference external"href="http://conversejs.org">Converse.js homepage</a> uses a connection manager located at <aclass="reference external"href="https://bind.conversejs.org">https://bind.conversejs.org</a>.
This connection manager is available for testing purposes only, please don’t use it in production.</p>
<h3><aclass="toc-backref"href="#id10">Overcoming cross-domain request restrictions</a><aclass="headerlink"href="#overcoming-cross-domain-request-restrictions"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id12">Overcoming cross-domain request restrictions</a><aclass="headerlink"href="#overcoming-cross-domain-request-restrictions"title="Permalink to this headline">¶</a></h3>
<p>The domain of the <em>Converse.js</em> demo is <em>conversejs.org</em>, but the domain of the connection manager is <em>opkode.im</em>.
<p>Lets say your domain is <em>example.org</em>, but the domain of your connection
HTTP requests are made by <em>Converse.js</em> to the connection manager via XmlHttpRequests (XHR).
manager is <em>example.com</em>.</p>
<p>HTTP requests are made by <em>Converse.js</em> to the connection manager via XmlHttpRequests (XHR).
Until recently, it was not possible to make such requests to a different domain
Until recently, it was not possible to make such requests to a different domain
than the one currently being served (to prevent XSS attacks).</p>
than the one currently being served (to prevent XSS attacks).</p>
<p>Luckily there is now a standard called <aclass="reference external"href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing">CORS</a> (Cross-origin resource sharing), which enables exactly that.
<p>Luckily there is now a standard called <aclass="reference external"href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing">CORS</a> (Cross-origin resource sharing), which enables exactly that.
...
@@ -287,9 +292,9 @@ the cross-domain restriction is <tt class="docutils literal"><span class="pre">m
...
@@ -287,9 +292,9 @@ the cross-domain restriction is <tt class="docutils literal"><span class="pre">m
<h2><aclass="toc-backref"href="#id11">Server-side authentication</a><aclass="headerlink"href="#server-side-authentication"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id13">Server-side authentication</a><aclass="headerlink"href="#server-side-authentication"title="Permalink to this headline">¶</a></h2>
<spanid="session-support"></span><h3><aclass="toc-backref"href="#id12">Prebinding and Single Session Support</a><aclass="headerlink"href="#prebinding-and-single-session-support"title="Permalink to this headline">¶</a></h3>
<spanid="session-support"></span><h3><aclass="toc-backref"href="#id14">Prebinding and Single Session Support</a><aclass="headerlink"href="#prebinding-and-single-session-support"title="Permalink to this headline">¶</a></h3>
<p>It’s possible to enable single-site login, whereby users already
<p>It’s possible to enable single-site login, whereby users already
authenticated in your website will also automatically be logged in on the chat server,</p>
authenticated in your website will also automatically be logged in on the chat server,</p>
<p>This session should also persist across page loads. In other words, we don’t
<p>This session should also persist across page loads. In other words, we don’t
...
@@ -347,7 +352,7 @@ Additionally you need to pass in valid <strong>jid</strong>, <strong>sid</strong
...
@@ -347,7 +352,7 @@ Additionally you need to pass in valid <strong>jid</strong>, <strong>sid</strong
<h3><aclass="toc-backref"href="#id13">Example code for server-side prebinding</a><aclass="headerlink"href="#example-code-for-server-side-prebinding"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id15">Example code for server-side prebinding</a><aclass="headerlink"href="#example-code-for-server-side-prebinding"title="Permalink to this headline">¶</a></h3>
<ul>
<ul>
<li><dlclass="first docutils">
<li><dlclass="first docutils">
<dt>PHP:</dt>
<dt>PHP:</dt>
...
@@ -364,55 +369,6 @@ Michael Weibel and the folks from Candy chat.</p>
...
@@ -364,55 +369,6 @@ Michael Weibel and the folks from Candy chat.</p>
</li>
</li>
</ul>
</ul>
</div>
</div>
<divclass="section"id="setting-up-a-bosh-server">
<h3><aclass="toc-backref"href="#id14">Setting up a BOSH server</a><aclass="headerlink"href="#setting-up-a-bosh-server"title="Permalink to this headline">¶</a></h3>
<p>The <aclass="reference external"href="http://movim.eu/">Movim</a> project wiki has a very thorough page on setting up a BOSH server for
<h2><aclass="toc-backref"href="#id15">Facebook integration</a><aclass="headerlink"href="#facebook-integration"title="Permalink to this headline">¶</a></h2>
<divclass="admonition note">
<pclass="first admonition-title">Note</p>
<pclass="last">It should be possible to integrate Converse.js with Facebook chat, and
below I’ll provide some tips and documentation on how to achieve this. That
said, I don’t have a Facebook account and therefore haven’t tried to do
this myself. Feedback and patches from people who have succesfully done this
will be appreciated.</p>
</div>
<p>Converse.js uses <aclass="reference external"href="http://strophe.im/strophejs">Strophe.js</a> to connect and
communicate with the XMPP server. One nice thing about Strophe.js is that it
can be extended via <aclass="reference external"href="http://github.com/strophe/strophejs-plugins">plugins</a>.</p>
<p>Here is a <aclass="reference external"href="https://github.com/kissrobber/turedsocial/blob/master/strophe-plugins/src/facebook.js">plugin for authenticating with facebook</a>.</p>
<p>You will need your own BOSH connection manager to act as a proxy between
Converse.js/Strophe.js and Facebook’s XMPP server. That is because Facebook’s
XMPP server doesn’t support BOSH natively.</p>
<p>The BOSH connection manager that I make available for
although there are quite a few other options available as well.</p>
<p>When you configure Converse.js, via its <ttclass="docutils literal"><spanclass="pre">initialize</span></tt> method, you must specify the
<aclass="reference internal"href="#bosh-service-url">bosh_service_url</a> value, which is to be your BOSH connection manager.</p>
<p>Please note, to enable Facebook integration, you’ll have to
get your hands dirty and modify Converse.js’s code, so that it calls the
<ttclass="docutils literal"><spanclass="pre">facebookConnect</span></tt> method of the plugin above.</p>
<p>The plugin above gives the following code example for you to meditate upon:</p>
<divclass="highlight-python"><divclass="highlight"><pre>connection = new Strophe.Connection("http://localhost:5280/bosh");
connection.facebookConnect(
"12345@chat.facebook.com",
onConnectFacebook,
300,
1,
'5e64a30272af065bd72258c565a03f2f',
'8147a27e4a7f9b55ffc85c2683f9529a',
FB.getSession().session_key
);
</pre></div>
</div>
<p>The connection is already created inside Converse.js, so the
<ttclass="docutils literal"><spanclass="pre">facebookConnect</span></tt> method needs to also be called from there.</p>
<p>If someone submits a sane patch that does the above, I’ll be happy to merge it.
Until then, people will have to do this themselves.</p>
</div>
</div>
</div>
</div>
<divclass="section"id="features">
<divclass="section"id="features">
...
@@ -439,15 +395,29 @@ secure crypto.</p>
...
@@ -439,15 +395,29 @@ secure crypto.</p>
Converse.js in order to avoid most eavesdroppers, if you need serious
Converse.js in order to avoid most eavesdroppers, if you need serious
communications privacy, then you’re much better off using native software.</p>
communications privacy, then you’re much better off using native software.</p>
</div>
</div>
<divclass="section"id="sound-notifications">
<h2><aclass="toc-backref"href="#id18">Sound Notifications</a><aclass="headerlink"href="#sound-notifications"title="Permalink to this headline">¶</a></h2>
<p>From version 0.8.1 Converse.js can play a sound notification when you receive a
message.</p>
<p>For more info, please see the <aclass="reference internal"href="#play-sounds">play_sounds</a> configuration setting.</p>
</div>
<divclass="section"id="multilingual-support">
<h2><aclass="toc-backref"href="#id19">Multilingual Support</a><aclass="headerlink"href="#multilingual-support"title="Permalink to this headline">¶</a></h2>
<p>Converse.js is translated into multiple languages. The default build,
<ttclass="docutils literal"><spanclass="pre">converse.min.js</span></tt>, includes all languages.</p>
<p>Languages increase the size of the Converse.js significantly.</p>
<p>If you only need one, or a subset of the available languages, it’s better to
make a custom build which includes only those languages that you need.</p>
</div>
</div>
</div>
<divclass="section"id="development">
<divclass="section"id="development">
<h1><aclass="toc-backref"href="#id18">Development</a><aclass="headerlink"href="#development"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id20">Development</a><aclass="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’ll soon
<p>If you want to work with the non-minified Javascript and CSS files you’ll soon
notice that there are references to a missing <em>components</em> folder. Please
notice that there are references to a missing <em>components</em> folder. Please
follow the instructions below to create this folder and fetch Converse’s
follow the instructions below to create this folder and fetch Converse’s
<h2><aclass="toc-backref"href="#id19">Install the development and front-end dependencies</a><aclass="headerlink"href="#install-the-development-and-front-end-dependencies"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id21">Install the development and front-end dependencies</a><aclass="headerlink"href="#install-the-development-and-front-end-dependencies"title="Permalink to this headline">¶</a></h2>
<p>We use development tools (<aclass="reference external"href="http://gruntjs.com">Grunt</a> and <aclass="reference external"href="http://bower.io">Bower</a>)
<p>We use development tools (<aclass="reference external"href="http://gruntjs.com">Grunt</a> and <aclass="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’t have Node.js installed, you can download and install the latest
<p>If you don’t have Node.js installed, you can download and install the latest
...
@@ -486,7 +456,7 @@ Converse.js directly depends and which will be loaded in the browser.</p>
...
@@ -486,7 +456,7 @@ Converse.js directly depends and which will be loaded in the browser.</p>
<h2><aclass="toc-backref"href="#id20">With AMD and require.js (recommended)</a><aclass="headerlink"href="#with-amd-and-require-js-recommended"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id22">With AMD and require.js (recommended)</a><aclass="headerlink"href="#with-amd-and-require-js-recommended"title="Permalink to this headline">¶</a></h2>
<p>Converse.js uses <aclass="reference external"href="http://requirejs.org">require.js</a> to asynchronously load dependencies.</p>
<p>Converse.js uses <aclass="reference external"href="http://requirejs.org">require.js</a> to asynchronously load dependencies.</p>
<p>If you want to develop or customize converse.js, you’ll want to load the
<p>If you want to develop or customize converse.js, you’ll want to load the
non-minified javascript files.</p>
non-minified javascript files.</p>
...
@@ -500,7 +470,7 @@ attribute on the <em>script</em> tag), which will in turn cause converse.js to b
...
@@ -500,7 +470,7 @@ attribute on the <em>script</em> tag), which will in turn cause converse.js to b
<h2><aclass="toc-backref"href="#id21">Without AMD and require.js</a><aclass="headerlink"href="#without-amd-and-require-js"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id23">Without AMD and require.js</a><aclass="headerlink"href="#without-amd-and-require-js"title="Permalink to this headline">¶</a></h2>
<p>Converse.js can also be used without require.js. If you for some reason prefer
<p>Converse.js can also be used without require.js. If you for some reason prefer
<h2><aclass="toc-backref"href="#id22">Before submitting a pull request</a><aclass="headerlink"href="#before-submitting-a-pull-request"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id24">Before submitting a pull request</a><aclass="headerlink"href="#before-submitting-a-pull-request"title="Permalink to this headline">¶</a></h2>
<h3><aclass="toc-backref"href="#id23">Add tests for your bugfix or feature</a><aclass="headerlink"href="#add-tests-for-your-bugfix-or-feature"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id25">Add tests for your bugfix or feature</a><aclass="headerlink"href="#add-tests-for-your-bugfix-or-feature"title="Permalink to this headline">¶</a></h3>
<p>Add a test for any bug fixed or feature added. We use Jasmine
<p>Add a test for any bug fixed or feature added. We use Jasmine
for testing.</p>
for testing.</p>
<p>Take a look at <ttclass="docutils literal"><spanclass="pre">tests.html</span></tt> and <ttclass="docutils literal"><spanclass="pre">spec/MainSpec.js</span></tt> to see how
<p>Take a look at <ttclass="docutils literal"><spanclass="pre">tests.html</span></tt> and <ttclass="docutils literal"><spanclass="pre">spec/MainSpec.js</span></tt> to see how
...
@@ -519,7 +489,7 @@ the tests are implemented.</p>
...
@@ -519,7 +489,7 @@ the tests are implemented.</p>
<aclass="reference external"href="http://opkode.com/contact">contact me</a> and I’ll be happy to help.</p>
<aclass="reference external"href="http://opkode.com/contact">contact me</a> and I’ll be happy to help.</p>
<h3><aclass="toc-backref"href="#id24">Check that the tests pass</a><aclass="headerlink"href="#check-that-the-tests-pass"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id26">Check that the tests pass</a><aclass="headerlink"href="#check-that-the-tests-pass"title="Permalink to this headline">¶</a></h3>
<p>Check that the Jasmine tests complete sucessfully. Open
<p>Check that the Jasmine tests complete sucessfully. Open
<h3><aclass="toc-backref"href="#id25">Check your code for errors or bad habits by running JSHint</a><aclass="headerlink"href="#check-your-code-for-errors-or-bad-habits-by-running-jshint"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id27">Check your code for errors or bad habits by running JSHint</a><aclass="headerlink"href="#check-your-code-for-errors-or-bad-habits-by-running-jshint"title="Permalink to this headline">¶</a></h3>
<p><aclass="reference external"href="http://jshint.com">JSHint</a> will do a static analysis of your code and hightlight potential errors
<p><aclass="reference external"href="http://jshint.com">JSHint</a> will do a static analysis of your code and hightlight potential errors
<h3><aclass="toc-backref"href="#id27">Minifying Javascript and CSS</a><aclass="headerlink"href="#minifying-javascript-and-css"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id29">Minifying Javascript and CSS</a><aclass="headerlink"href="#minifying-javascript-and-css"title="Permalink to this headline">¶</a></h3>
<p>Please make sure to read the section <aclass="reference internal"href="#development">Development</a> and that you have installed
<p>Please make sure to read the section <aclass="reference internal"href="#development">Development</a> and that you have installed
all development dependencies (long story short, you can run <ttclass="docutils literal"><spanclass="pre">npm</span><spanclass="pre">install</span></tt>
all development dependencies (long story short, you can run <ttclass="docutils literal"><spanclass="pre">npm</span><spanclass="pre">install</span></tt>
and then <ttclass="docutils literal"><spanclass="pre">grunt</span><spanclass="pre">fetch</span></tt>).</p>
and then <ttclass="docutils literal"><spanclass="pre">grunt</span><spanclass="pre">fetch</span></tt>).</p>
...
@@ -562,7 +532,7 @@ using <a class="reference external" href="https://github.com/jrburke/almond">alm
...
@@ -562,7 +532,7 @@ using <a class="reference external" href="https://github.com/jrburke/almond">alm
</div>
</div>
</div>
</div>
<divclass="section"id="translations">
<divclass="section"id="translations">
<h2><aclass="toc-backref"href="#id28">Translations</a><aclass="headerlink"href="#translations"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id30">Translations</a><aclass="headerlink"href="#translations"title="Permalink to this headline">¶</a></h2>
<divclass="admonition note">
<divclass="admonition note">
<pclass="first admonition-title">Note</p>
<pclass="first admonition-title">Note</p>
<pclass="last">Translations take up a lot of space and will bloat your minified file.
<pclass="last">Translations take up a lot of space and will bloat your minified file.
...
@@ -645,11 +615,11 @@ those hoops you had to jump through.</p>
...
@@ -645,11 +615,11 @@ those hoops you had to jump through.</p>
</div>
</div>
</div>
</div>
<divclass="section"id="troubleshooting">
<divclass="section"id="troubleshooting">
<h1><aclass="toc-backref"href="#id29">Troubleshooting</a><aclass="headerlink"href="#troubleshooting"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id31">Troubleshooting</a><aclass="headerlink"href="#troubleshooting"title="Permalink to this headline">¶</a></h1>
<h2><aclass="toc-backref"href="#id30">Conflicts with other Javascript libraries</a><aclass="headerlink"href="#conflicts-with-other-javascript-libraries"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id32">Conflicts with other Javascript libraries</a><aclass="headerlink"href="#conflicts-with-other-javascript-libraries"title="Permalink to this headline">¶</a></h2>
<divclass="section"id="problem">
<divclass="section"id="problem">
<h3><aclass="toc-backref"href="#id31">Problem:</a><aclass="headerlink"href="#problem"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id33">Problem:</a><aclass="headerlink"href="#problem"title="Permalink to this headline">¶</a></h3>
<p>You are using other Javascript libraries (like JQuery plugins), and
<p>You are using other Javascript libraries (like JQuery plugins), and
get errors like these in your browser console:</p>
get errors like these in your browser console:</p>
<divclass="highlight-python"><divclass="highlight"><pre>Uncaught TypeError: Object [object Object] has no method 'xxx' from example.js
<divclass="highlight-python"><divclass="highlight"><pre>Uncaught TypeError: Object [object Object] has no method 'xxx' from example.js
...
@@ -657,7 +627,7 @@ get errors like these in your browser console:</p>
...
@@ -657,7 +627,7 @@ get errors like these in your browser console:</p>
</div>
</div>
</div>
</div>
<divclass="section"id="solution">
<divclass="section"id="solution">
<h3><aclass="toc-backref"href="#id32">Solution:</a><aclass="headerlink"href="#solution"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id34">Solution:</a><aclass="headerlink"href="#solution"title="Permalink to this headline">¶</a></h3>
<p>First, find out which object is referred to by <ttclass="docutils literal"><spanclass="pre">Object</span><spanclass="pre">[object</span><spanclass="pre">Object]</span></tt>.</p>
<p>First, find out which object is referred to by <ttclass="docutils literal"><spanclass="pre">Object</span><spanclass="pre">[object</span><spanclass="pre">Object]</span></tt>.</p>
<p>It will probably be the jQuery object <ttclass="docutils literal"><spanclass="pre">$</span></tt> or perhaps the underscore.js object <ttclass="docutils literal"><spanclass="pre">_</span></tt>.</p>
<p>It will probably be the jQuery object <ttclass="docutils literal"><spanclass="pre">$</span></tt> or perhaps the underscore.js object <ttclass="docutils literal"><spanclass="pre">_</span></tt>.</p>
<p>For the purpose of demonstration, I’m going to assume its <ttclass="docutils literal"><spanclass="pre">$</span></tt>, but the same
<p>For the purpose of demonstration, I’m going to assume its <ttclass="docutils literal"><spanclass="pre">$</span></tt>, but the same
...
@@ -699,11 +669,11 @@ jQuery plugins must load after jQuery).</p>
...
@@ -699,11 +669,11 @@ jQuery plugins must load after jQuery).</p>
</div>
</div>
</div>
</div>
<divclass="section"id="events">
<divclass="section"id="events">
<h1><aclass="toc-backref"href="#id33">Events</a><aclass="headerlink"href="#events"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id35">Events</a><aclass="headerlink"href="#events"title="Permalink to this headline">¶</a></h1>
<p>Converse.js emits events to which you can subscribe from your own Javascript.</p>
<p>Converse.js emits events to which you can subscribe from your own Javascript.</p>
<p>Concerning events, the following methods are available:</p>
<p>Concerning events, the following methods are available:</p>
<divclass="section"id="event-methods">
<divclass="section"id="event-methods">
<h2><aclass="toc-backref"href="#id34">Event Methods</a><aclass="headerlink"href="#event-methods"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id36">Event Methods</a><aclass="headerlink"href="#event-methods"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id35">Event Types</a><aclass="headerlink"href="#event-types"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id37">Event Types</a><aclass="headerlink"href="#event-types"title="Permalink to this headline">¶</a></h2>
<p>Here are the different events that are emitted:</p>
<p>Here are the different events that are emitted:</p>
<tableborder="1"class="docutils">
<tableborder="1"class="docutils">
<colgroup>
<colgroup>
...
@@ -833,7 +803,7 @@ exactly once.</p>
...
@@ -833,7 +803,7 @@ exactly once.</p>
</div>
</div>
</div>
</div>
<divclass="section"id="configuration">
<divclass="section"id="configuration">
<h1><aclass="toc-backref"href="#id36">Configuration</a><aclass="headerlink"href="#configuration"title="Permalink to this headline">¶</a></h1>
<h1><aclass="toc-backref"href="#id38">Configuration</a><aclass="headerlink"href="#configuration"title="Permalink to this headline">¶</a></h1>
<p>The included minified JS and CSS files can be used for demoing or testing, but
<p>The included minified JS and CSS files can be used for demoing or testing, but
you’ll want to configure <em>Converse.js</em> to suit your needs before you deploy it
you’ll want to configure <em>Converse.js</em> to suit your needs before you deploy it
on your website.</p>
on your website.</p>
...
@@ -847,9 +817,9 @@ all the available configuration settings.</p>
...
@@ -847,9 +817,9 @@ all the available configuration settings.</p>
JS file so that it will include the new settings. Please refer to the
JS file so that it will include the new settings. Please refer to the
<aclass="reference internal"href="#minification">Minification</a> section for more info on how to do this.</p>
<aclass="reference internal"href="#minification">Minification</a> section for more info on how to do this.</p>
<divclass="section"id="configuration-variables">
<divclass="section"id="configuration-variables">
<h2><aclass="toc-backref"href="#id37">Configuration variables</a><aclass="headerlink"href="#configuration-variables"title="Permalink to this headline">¶</a></h2>
<h2><aclass="toc-backref"href="#id39">Configuration variables</a><aclass="headerlink"href="#configuration-variables"title="Permalink to this headline">¶</a></h2>
<divclass="section"id="allow-contact-requests">
<divclass="section"id="allow-contact-requests">
<h3><aclass="toc-backref"href="#id38">allow_contact_requests</a><aclass="headerlink"href="#allow-contact-requests"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id40">allow_contact_requests</a><aclass="headerlink"href="#allow-contact-requests"title="Permalink to this headline">¶</a></h3>
<p>Support for <aclass="reference external"href="https://xmpp.org/extensions/xep-0280.html">XEP-0280: Message Carbons</a></p>
<p>Support for <aclass="reference external"href="https://xmpp.org/extensions/xep-0280.html">XEP-0280: Message Carbons</a></p>
</div>
</div>
<divclass="section"id="expose-rid-and-sid">
<divclass="section"id="expose-rid-and-sid">
<h3><aclass="toc-backref"href="#id49">expose_rid_and_sid</a><aclass="headerlink"href="#expose-rid-and-sid"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id51">expose_rid_and_sid</a><aclass="headerlink"href="#expose-rid-and-sid"title="Permalink to this headline">¶</a></h3>
<p>Hide the <ttclass="docutils literal"><spanclass="pre">server</span></tt> input field of the form inside the <ttclass="docutils literal"><spanclass="pre">Room</span></tt> panel of the
<p>Hide the <ttclass="docutils literal"><spanclass="pre">server</span></tt> input field of the form inside the <ttclass="docutils literal"><spanclass="pre">Room</span></tt> panel of the
controlbox. Useful if you want to restrict users to a specific XMPP server of
controlbox. Useful if you want to restrict users to a specific XMPP server of
your choosing.</p>
your choosing.</p>
</div>
</div>
<divclass="section"id="i18n">
<divclass="section"id="i18n">
<h3><aclass="toc-backref"href="#id53">i18n</a><aclass="headerlink"href="#i18n"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id55">i18n</a><aclass="headerlink"href="#i18n"title="Permalink to this headline">¶</a></h3>
<p>Specify the locale/language. The language must be in the <ttclass="docutils literal"><spanclass="pre">locales</span></tt> object. Refer to
<p>Specify the locale/language. The language must be in the <ttclass="docutils literal"><spanclass="pre">locales</span></tt> object. Refer to
<ttclass="docutils literal"><spanclass="pre">./locale/locales.js</span></tt> to see which locales are supported.</p>
<ttclass="docutils literal"><spanclass="pre">./locale/locales.js</span></tt> to see which locales are supported.</p>
</div>
</div>
<divclass="section"id="play-sounds">
<h3><aclass="toc-backref"href="#id56">play_sounds</a><aclass="headerlink"href="#play-sounds"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id56">show_controlbox_by_default</a><aclass="headerlink"href="#show-controlbox-by-default"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id59">show_controlbox_by_default</a><aclass="headerlink"href="#show-controlbox-by-default"title="Permalink to this headline">¶</a></h3>
<p>The “controlbox” refers to the special chatbox containing your contacts roster,
<p>The “controlbox” refers to the special chatbox containing your contacts roster,
status widget, chatrooms and other controls.</p>
status widget, chatrooms and other controls.</p>
...
@@ -999,13 +980,13 @@ the page with class <em>toggle-controlbox</em>.</p>
...
@@ -999,13 +980,13 @@ the page with class <em>toggle-controlbox</em>.</p>
page load.</p>
page load.</p>
</div>
</div>
<divclass="section"id="show-only-online-users">
<divclass="section"id="show-only-online-users">
<h3><aclass="toc-backref"href="#id57">show_only_online_users</a><aclass="headerlink"href="#show-only-online-users"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id60">show_only_online_users</a><aclass="headerlink"href="#show-only-online-users"title="Permalink to this headline">¶</a></h3>
<p>This option determines the type of <aclass="reference external"href="https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage">storage</a>
<p>This option determines the type of <aclass="reference external"href="https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage">storage</a>
...
@@ -1018,20 +999,20 @@ it’s closed, the data is cleared.</p>
...
@@ -1018,20 +999,20 @@ it’s closed, the data is cleared.</p>
<p>Data in localStorage on the other hand is kept indefinitely.</p>
<p>Data in localStorage on the other hand is kept indefinitely.</p>
</div>
</div>
<divclass="section"id="use-otr-by-default">
<divclass="section"id="use-otr-by-default">
<h3><aclass="toc-backref"href="#id59">use_otr_by_default</a><aclass="headerlink"href="#use-otr-by-default"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id62">use_otr_by_default</a><aclass="headerlink"href="#use-otr-by-default"title="Permalink to this headline">¶</a></h3>
<p>Determines whether the XMPP server will be queried for roster contacts’ VCards
<p>Determines whether the XMPP server will be queried for roster contacts’ VCards
or not. VCards contain extra personal information such as your fullname and
or not. VCards contain extra personal information such as your fullname and
avatar image.</p>
avatar image.</p>
</div>
</div>
<divclass="section"id="visible-toolbar-buttons">
<divclass="section"id="visible-toolbar-buttons">
<h3><aclass="toc-backref"href="#id61">visible_toolbar_buttons</a><aclass="headerlink"href="#visible-toolbar-buttons"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id64">visible_toolbar_buttons</a><aclass="headerlink"href="#visible-toolbar-buttons"title="Permalink to this headline">¶</a></h3>
@@ -1081,7 +1062,7 @@ When the call button is pressed, it will emit an event that can be used by a thi
...
@@ -1081,7 +1062,7 @@ When the call button is pressed, it will emit an event that can be used by a thi
remote server.</p>
remote server.</p>
</div>
</div>
<divclass="section"id="xhr-custom-status-url">
<divclass="section"id="xhr-custom-status-url">
<h3><aclass="toc-backref"href="#id63">xhr_custom_status_url</a><aclass="headerlink"href="#xhr-custom-status-url"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id66">xhr_custom_status_url</a><aclass="headerlink"href="#xhr-custom-status-url"title="Permalink to this headline">¶</a></h3>
<divclass="admonition note">
<divclass="admonition note">
<pclass="first admonition-title">Note</p>
<pclass="first admonition-title">Note</p>
<pclass="last">XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Javascript and XML).</p>
<pclass="last">XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Javascript and XML).</p>
...
@@ -1093,7 +1074,7 @@ message will be made.</p>
...
@@ -1093,7 +1074,7 @@ message will be made.</p>
<p>The message itself is sent in the request under the key <ttclass="docutils literal"><spanclass="pre">msg</span></tt>.</p>
<p>The message itself is sent in the request under the key <ttclass="docutils literal"><spanclass="pre">msg</span></tt>.</p>
</div>
</div>
<divclass="section"id="xhr-user-search">
<divclass="section"id="xhr-user-search">
<h3><aclass="toc-backref"href="#id64">xhr_user_search</a><aclass="headerlink"href="#xhr-user-search"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id67">xhr_user_search</a><aclass="headerlink"href="#xhr-user-search"title="Permalink to this headline">¶</a></h3>
corresponds to a matched user and needs the keys <ttclass="docutils literal"><spanclass="pre">id</span></tt> and <ttclass="docutils literal"><spanclass="pre">fullname</span></tt>.</p>
corresponds to a matched user and needs the keys <ttclass="docutils literal"><spanclass="pre">id</span></tt> and <ttclass="docutils literal"><spanclass="pre">fullname</span></tt>.</p>
</div>
</div>
<divclass="section"id="xhr-user-search-url">
<divclass="section"id="xhr-user-search-url">
<h3><aclass="toc-backref"href="#id65">xhr_user_search_url</a><aclass="headerlink"href="#xhr-user-search-url"title="Permalink to this headline">¶</a></h3>
<h3><aclass="toc-backref"href="#id68">xhr_user_search_url</a><aclass="headerlink"href="#xhr-user-search-url"title="Permalink to this headline">¶</a></h3>
<divclass="admonition note">
<divclass="admonition note">
<pclass="first admonition-title">Note</p>
<pclass="first admonition-title">Note</p>
<pclass="last">XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Javascript and XML).</p>
<pclass="last">XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Javascript and XML).</p>
Search.setIndex({envversion:42,terms:{all:0,partial:0,queri:0,lack:0,webchat:0,follow:0,row:0,privat:0,middl:0,sensit:0,punjab:0,elsewher:0,vcard:0,buddi:0,under:0,sens:0,spec:0,sent:0,global:0,everi:0,string:0,fals:0,multi:0,mechan:0,jack:0,veri:0,retriev:0,tri:0,button:0,messagetext:0,list:0,previou:0,correct:0,"try":0,item:0,sane:0,pleas:0,prevent:0,almond:0,focu:0,past:0,second:0,download:0,further:0,port:0,folk:0,even:0,index:0,hide:0,appear:0,section:0,abl:0,access:0,delet:0,version:0,"new":0,net:0,"public":0,widget:0,themselv:0,messagexml:0,gener:0,here:0,bodi:0,typeerror:0,let:0,modifi:0,valu:0,box:0,great:0,convers:0,mysit:0,reason:0,fetch:0,implement:0,sorri:0,chanc:0,via:0,although:0,danger:0,primit:0,prefer:0,ask:0,href:0,fake:0,sessionstorag:0,establish:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,few:0,stylesheet:0,call:0,msg:0,until:0,tightli:0,more:0,emoticon:0,peopl:0,line:0,notic:0,particular:0,cach:0,must:0,account:0,word:0,room:0,work:0,uniqu:0,dev:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,getsess:0,give:0,challeng:0,share:0,templat:0,critic:0,proprietari:0,explor:0,onlin:0,callbuttonclick:0,occup:0,multipl:0,goal:0,turn:0,anoth:0,deniabl:0,write:0,how:0,bosh_serv:0,sid:0,roster:0,verifi:0,perspect:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,callback:0,underscor:0,data:0,demonstr:0,man:0,repo:0,"short":0,attempt:0,practic:0,third:0,bind:0,secur:0,credenti:0,correspond:0,django:0,caus:0,inform:0,allow:0,parti:0,order:0,talk:0,feedback:0,chatbox:0,chatroomopen:0,over:0,move:0,becaus:0,chatboxopen:0,telephon:0,through:0,reconnect:0,paramet:0,streamlin:0,jid:0,"8147a27e4a7f9b55ffc85c2683f9529a":0,render:0,fit:0,fix:0,better:0,window:0,pend:0,persist:0,hidden:0,main:0,might:0,them:0,"return":0,thei:0,python:0,initi:0,rewriterul:0,instead:0,now:0,jump:0,name:0,edit:0,drop:0,crypto:0,separ:0,achiev:0,ejabberd:0,each:0,mean:0,either:0,harm:0,chatboxfocus:0,michael:0,individu:0,idea:0,realli:0,"static":0,expect:0,our:0,happen:0,extract:0,special:0,out:0,shown:0,"3rd":0,space:0,open:0,proxy_pass:0,rel:0,internet:0,got:0,plural:0,factori:0,po2json:0,model:0,proxi:0,insid:0,state:0,standard:0,standalon:0,ajax:0,put:0,succesfulli:0,afterward:0,could:0,keep:0,thing:0,perhap:0,imposs:0,first:0,origin:0,softwar:0,directli:0,malici:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,instruct:0,alreadi:0,done:0,owner:0,custom:0,miss:0,suffic:0,differ:0,top:0,attack:0,messag:0,attach:0,stori:0,jed:0,privaci:0,listen:0,luckili:0,assign:0,consol:0,option:0,tool:0,specifi:0,part:0,bower:0,exactli:0,than:0,serv:0,wide:0,kind:0,bloat:0,provid:0,remov:0,project:0,bridg:0,seriou:0,someothersit:0,browser:0,pre:0,analysi:0,sai:0,saa:0,session_kei:0,ani:0,packag:0,have:0,moffitt:0,element:0,issu:0,min:0,latter:0,thorough:0,click:0,note:0,also:0,contact:0,take:0,which:0,therefor:0,sure:0,though:0,unsur:0,who:0,reach:0,most:0,eavesdropp:0,homepag:0,"class":0,don:0,url:0,clear:0,doe:0,runtim:0,statuschang:0,pars:0,latest:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,buddystatuschang:0,server_nam:0,identifi:0,fine:0,find:0,help:0,xml:0,current:0,onli:0,grunt:0,locat:0,execut:0,releas:0,stanza:0,haven:0,busi:0,folder:0,local:0,meant:0,stop:0,soon:0,opkod:0,nativ:0,cannot:0,cryptographi:0,enabl:0,emb:0,mainspec:0,patch:0,remot:0,contain:0,where:0,wiki:0,chatboxclos:0,stroph:0,see:0,bare:0,result:0,close:0,calendar:0,eventnam:0,best:0,concern:0,jqueri:0,statu:0,said:0,kei:0,inconveni:0,someth:0,written:0,muc:0,between:0,awai:0,experi:0,jasmin:0,across:0,attribut:0,altern:0,perfect:0,appreci:0,extend:0,screen:0,were:0,conjunct:0,job:0,entir:0,otherwis:0,"5e64a30272af065bd72258c565a03f2f":0,group:0,both:0,cor:0,instant:0,shortliv:0,conversej:0,etc:0,instanc:0,grain:0,mani:0,login:0,com:0,load:0,simpli:0,pot:0,solv:0,non:0,deploi:0,carbon:0,assum:0,malleabl:0,backend:0,quit:0,sucessfulli:0,addition:0,rebuild:0,due:0,been:0,compon:0,json:0,much:0,toolbar:0,subscrib:0,modern:0,fire:0,imag:0,xxx:0,rubi:0,convert:0,togeth:0,input:0,otr:0,plausibl:0,present:0,"case":0,myself:0,ident:0,look:0,gnu:0,servic:0,plugin:0,messagesend:0,defin:0,"while":0,abov:0,howev:0,hightlight:0,increment:0,helper:0,readi:0,site:0,itself:0,incom:0,rid:0,pat:0,harsh:0,minim:0,receiv:0,media:0,make:0,format:0,same:0,webpag:0,onconnectfacebook:0,html:0,unexpectedli:0,chatroom:0,document:0,medit:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,someon:0,hand:0,fairli:0,"50kb":0,user:0,uncaught:0,php:0,cssmin:0,recent:0,weibel:0,stateless:0,kept:0,bewar:0,firstli:0,markup:0,well:0,thought:0,person:0,client:0,command:0,wherebi:0,thi:0,choos:0,everyth:0,usual:0,plural_form:0,protocol:0,just:0,when:0,xep:0,file:0,languag:0,previous:0,web:0,fraught:0,xmlhttprequest:0,expos:0,field:0,extra:0,had:0,desktop:0,non_amd:0,versa:0,appli:0,els:0,match:0,build:0,applic:0,secreci:0,read:0,traffic:0,know:0,press:0,xss:0,like:0,specif:0,should:0,reload:0,manual:0,benefit:0,api:0,avatar:0,choic:0,output:0,page:0,candi:0,indefinit:0,facebookconnect:0,revers:0,chatboxtoggl:0,deal:0,nplural:0,some:0,back:0,bottom:0,avoid:0,deploy:0,rewriteengin:0,track:0,allow_otr:0,inject:0,localhost:0,refer:0,somehow:0,plu:0,object:0,host:0,repositori:0,post:0,panel:0,src:0,about:0,firstnam:0,controlbox:0,unfortun:0,stand:0,act:0,own:0,curiou:0,within:0,encod:0,automat:0,right:0,empti:0,wrap:0,chang:0,merg:0,git:0,log:0,wai:0,pictur:0,aren:0,transfer:0,"long":0,happi:0,avail:0,trigger:0,localstorag:0,includ:0,lot:0,suit:0,forward:0,"function":0,head:0,properli:0,form:0,bundl:0,maxim:0,link:0,buddystatusmessagechang:0,synonym:0,cryptograph:0,inlin:0,"true":0,bug:0,congratul:0,requirej:0,info:0,made:0,dirti:0,locale_data:0,possibl:0,whether:0,asynchron:0,below:0,those:0,toggl:0,legwork:0,emit:0,constant:0,creat:0,movim:0,decrypt:0,doesn:0,mode:0,msgmerg:0,exist:0,chat:0,face:0,probabl:0,tab:0,want:0,tip:0,detail:0,gettext:0,statusmessagechang:0,"default":0,valid:0,rememb:0,varieti:0,servernam:0,nice:0,node:0,intend:0,determin:0,duck:0,org:0,consid:0,stai:0,lang:0,longer:0,vice:0,directori:0,virtualhost:0,getjson:0,rule:0,ignor:0,token:0,potenti:0,time:0},objtypes:{},objnames:{},filenames:["index"],titles:["Quickstart (to get a demo up and running)"],objects:{},titleterms:{roster_group:0,code:0,xmpp:0,session:0,jshint:0,depend:0,singl:0,configur:0,apach:0,add:0,anim:0,get:0,end:0,amd:0,nginx:0,facebook:0,front:0,requir:0,introduct:0,troubleshoot:0,authent:0,server:0,bad:0,integr:0,debug:0,side:0,domain:0,set:0,habit:0,xhr_user_search_url:0,connect:0,pass:0,fullnam:0,event:0,librari:0,variabl:0,what:0,storag:0,xhr_custom_statu:0,content:0,show_only_online_us:0,use_otr_by_default:0,overcom:0,method:0,run:0,hide_muc_serv:0,javascript:0,visible_toolbar_button:0,bosh:0,xhr_custom_status_url:0,cache_otr_kei:0,manag:0,solut:0,restrict:0,auto_list_room:0,instal:0,jabber:0,your:0,script:0,support:0,submit:0,recommend:0,type:0,show_controlbox_by_default:0,minifi:0,translat:0,i18n:0,pull:0,bugfix:0,exampl:0,record:0,error:0,auto_reconnect:0,problem:0,featur:0,quickstart:0,forward_messag:0,demo:0,auto_subscrib:0,tag:0,tabl:0,need:0,check:0,bosh_service_url:0,prebind:0,develop:0,message_carbon:0,minif:0,cross:0,other:0,test:0,expose_rid_and_sid:0,you:0,css:0,befor:0,allow_contact_request:0,encrypt:0,xhr_user_search:0,off:0,use_vcard:0,request:0,allow_muc:0,without:0,conflict:0}})
Search.setIndex({envversion:42,terms:{all:0,partial:0,queri:0,lack:0,webchat:0,mp3:0,follow:0,row:0,privat:0,middl:0,sensit:0,punjab:0,elsewher:0,vcard:0,buddi:0,under:0,sens:0,spec:0,sent:0,global:0,everi:0,string:0,fals:0,multi:0,mechan:0,jack:0,veri:0,retriev:0,tri:[],button:0,messagetext:0,list:0,previou:0,correct:0,"try":0,item:0,sane:[],pleas:0,prevent:0,almond:0,prosodi:0,focu:0,past:0,second:0,download:0,further:0,port:0,folk:0,even:0,index:0,hide:0,appear:0,section:0,abl:0,access:0,delet:0,version:0,"new":0,net:0,"public":0,widget:0,themselv:[],messagexml:0,gener:0,here:0,bodi:0,typeerror:0,let:0,modifi:[],valu:0,box:0,great:0,convers:0,mysit:0,reason:0,fetch:0,implement:0,sorri:0,chanc:0,via:0,although:0,danger:0,primit:0,prefer:0,ask:0,href:0,fake:0,sessionstorag:0,establish:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,few:[],stylesheet:0,call:0,msg:0,until:0,tightli:0,more:0,emoticon:0,peopl:[],line:0,notic:0,particular:0,cach:0,must:0,account:[],word:0,room:0,work:0,uniqu:0,dev:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,getsess:[],give:0,challeng:0,share:0,templat:0,critic:0,proprietari:0,explor:0,onlin:0,callbuttonclick:0,occup:0,cours:0,multipl:0,goal:0,turn:0,anoth:0,deniabl:0,write:0,how:0,bosh_serv:[],sid:0,roster:0,verifi:0,perspect:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,callback:0,mai:0,underscor:0,data:0,demonstr:0,man:0,repo:0,"short":0,attempt:0,practic:0,third:0,bind:0,secur:0,credenti:0,correspond:0,django:0,caus:0,inform:0,allow:0,parti:0,order:0,talk:0,feedback:[],chatbox:0,chatroomopen:0,over:0,move:0,becaus:0,chatboxopen:0,telephon:0,through:0,reconnect:0,paramet:0,streamlin:0,jid:0,"8147a27e4a7f9b55ffc85c2683f9529a":[],render:0,fit:0,fix:0,better:0,window:0,pend:0,persist:0,hidden:0,main:0,might:0,them:0,"return":0,thei:0,python:0,initi:0,rewriterul:0,instead:0,now:0,jump:0,name:0,edit:0,drop:0,crypto:0,separ:0,achiev:0,ejabberd:0,each:0,mean:0,subset:0,harm:0,chatboxfocus:0,michael:0,individu:0,idea:0,realli:0,"static":0,expect:0,our:0,happen:0,extract:0,special:0,out:0,shown:0,"3rd":0,space:0,open:0,proxy_pass:0,rel:0,internet:0,got:0,plural:0,factori:0,po2json:0,model:0,proxi:0,insid:0,state:0,standard:0,standalon:0,ajax:0,put:0,succesfulli:0,afterward:0,could:0,keep:0,thing:[],perhap:0,imposs:0,first:0,origin:0,softwar:0,directli:0,malici:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,instruct:0,alreadi:0,done:0,owner:0,custom:0,miss:0,suffic:0,size:0,differ:0,convent:0,top:0,attack:0,messag:0,attach:0,stori:0,jed:0,privaci:0,listen:0,luckili:0,assign:0,consol:0,option:0,tool:0,specifi:0,part:0,pars:0,ogg:0,exactli:0,than:0,serv:0,wide:[],kind:0,bloat:0,provid:0,remov:0,project:0,bridg:0,seriou:0,someothersit:0,browser:0,pre:0,analysi:0,sai:0,saa:0,session_kei:[],ani:0,packag:0,have:0,moffitt:0,element:0,issu:0,min:0,latter:0,yoursit:0,thorough:[],click:0,note:[],also:0,contact:0,take:0,which:0,therefor:0,sure:0,though:0,unsur:0,who:[],reach:0,most:0,plai:0,eavesdropp:0,homepag:0,"class":0,don:0,url:0,clear:0,doe:[],runtim:0,statuschang:0,bower:0,latest:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,buddystatuschang:0,server_nam:0,identifi:0,fine:0,find:0,help:0,xml:0,current:0,onli:0,grunt:0,locat:0,execut:0,releas:0,stanza:0,haven:[],busi:0,folder:0,local:0,meant:0,stop:0,soon:0,opkod:[],nativ:0,cannot:0,cryptographi:0,increas:0,neither:0,enabl:0,emb:0,mainspec:0,patch:[],remot:0,contain:0,where:0,wiki:[],chatboxclos:0,stroph:0,see:0,bare:0,result:0,close:0,calendar:0,eventnam:0,best:0,concern:0,jqueri:0,statu:0,said:[],kei:0,inconveni:0,someth:0,written:0,muc:0,between:0,awai:0,experi:0,jasmin:0,across:0,attribut:0,altern:0,perfect:0,appreci:[],extend:0,screen:0,were:0,conjunct:0,job:0,entir:0,otherwis:0,"5e64a30272af065bd72258c565a03f2f":[],group:0,both:0,cor:0,instant:0,shortliv:0,conversej:0,avatar:0,etc:0,instanc:0,grain:0,mani:0,login:0,com:0,load:0,simpli:0,pot:0,solv:0,non:0,deploi:0,carbon:0,assum:0,malleabl:0,backend:0,quit:[],sucessfulli:0,addition:0,rebuild:0,due:0,been:0,compon:0,json:0,much:0,toolbar:0,subscrib:0,modern:0,fire:0,imag:0,xxx:0,rubi:0,convert:0,togeth:0,input:0,otr:0,plausibl:0,present:0,"case":0,myself:[],ident:0,look:0,gnu:0,servic:0,plugin:0,messagesend:0,defin:0,"while":0,abov:[],howev:0,hightlight:0,increment:0,helper:0,readi:0,site:0,itself:0,incom:0,rid:0,pat:0,harsh:0,minim:0,receiv:0,media:0,make:0,format:0,same:0,webpag:0,onconnectfacebook:[],html:0,unexpectedli:0,chatroom:0,document:[],medit:[],complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,someon:[],hand:0,fairli:0,"50kb":0,user:0,uncaught:0,php:0,cssmin:0,recent:0,weibel:0,stateless:0,kept:0,bewar:0,firstli:0,markup:0,well:0,thought:0,person:0,client:0,command:0,wherebi:0,thi:0,choos:0,everyth:0,usual:0,plural_form:0,protocol:0,just:0,when:0,xep:0,file:0,languag:0,previous:0,web:0,fraught:0,xmlhttprequest:0,expos:0,field:0,extra:0,had:0,desktop:0,non_amd:0,versa:0,appli:0,els:0,match:0,build:0,applic:0,secreci:0,read:0,traffic:0,know:0,press:0,xss:0,like:0,specif:0,should:0,reload:0,manual:0,benefit:0,api:0,either:0,choic:0,popular:0,output:0,page:0,candi:0,indefinit:0,facebookconnect:[],revers:0,chatboxtoggl:0,deal:0,nplural:0,some:0,back:0,openfir:0,bottom:0,avoid:0,deploy:0,rewriteengin:0,track:0,allow_otr:0,inject:0,localhost:[],refer:0,somehow:0,plu:0,object:0,msg_receiv:0,host:0,repositori:0,post:0,panel:0,src:0,about:0,firstnam:0,controlbox:0,unfortun:0,stand:0,act:0,own:0,curiou:0,within:0,encod:0,automat:0,right:0,empti:0,wrap:0,chang:0,merg:[],git:0,log:0,wai:0,pictur:0,aren:0,transfer:0,"long":0,happi:0,avail:0,trigger:0,localstorag:0,includ:0,lot:0,suit:0,forward:0,"function":0,head:0,properli:0,form:0,bundl:0,maxim:0,link:0,buddystatusmessagechang:0,synonym:0,cryptograph:0,inlin:0,"true":0,bug:0,congratul:0,requirej:0,info:0,made:0,dirti:[],locale_data:0,possibl:0,whether:0,asynchron:0,below:0,those:0,toggl:0,legwork:0,emit:0,significantli:0,constant:0,creat:0,movim:[],decrypt:0,doesn:[],mode:0,msgmerg:0,exist:0,chat:0,face:0,probabl:0,tab:0,want:0,tip:[],detail:0,gettext:0,statusmessagechang:0,"default":0,valid:0,rememb:0,varieti:[],servernam:0,nice:0,node:0,intend:0,determin:0,duck:0,org:0,consid:0,stai:0,lang:0,longer:0,vice:0,directori:0,virtualhost:0,getjson:0,rule:0,ignor:0,token:0,potenti:0,time:0},objtypes:{},objnames:{},filenames:["index"],titles:["Quickstart (to get a demo up and running)"],objects:{},titleterms:{roster_group:0,multilingu:0,code:0,xmpp:0,session:0,jshint:0,depend:0,singl:0,configur:0,apach:0,add:0,anim:0,get:0,end:0,amd:0,nginx:0,facebook:[],front:0,requir:0,introduct:0,troubleshoot:0,authent:0,server:0,play_sound:0,bad:0,integr:[],debug:0,side:0,domain:0,set:[],habit:0,xhr_user_search_url:0,connect:0,pass:0,fullnam:0,event:0,librari:0,variabl:0,what:0,storag:0,xhr_custom_statu:0,content:0,show_only_online_us:0,use_otr_by_default:0,overcom:0,method:0,run:0,hide_muc_serv:0,javascript:0,visible_toolbar_button:0,bosh:0,xhr_custom_status_url:0,cache_otr_kei:0,manag:0,solut:0,restrict:0,auto_list_room:0,instal:0,jabber:0,your:0,script:0,support:0,submit:0,recommend:0,type:0,show_controlbox_by_default:0,notif:0,minifi:0,translat:0,i18n:0,sound:0,pull:0,bugfix:0,exampl:0,record:0,error:0,auto_reconnect:0,problem:0,featur:0,quickstart:0,forward_messag:0,demo:0,auto_subscrib:0,tag:0,tabl:0,need:0,check:0,bosh_service_url:0,prebind:0,develop:0,message_carbon:0,minif:0,cross:0,other:0,test:0,expose_rid_and_sid:0,you:0,css:0,befor:0,allow_contact_request:0,encrypt:0,xhr_user_search:0,off:0,use_vcard:0,request:0,allow_muc:0,without:0,conflict:0}})