Răsfoiți Sursa

Update documentation in anticipation of next release

Site HTML: make links relative
JC Brand 5 ani în urmă
părinte
comite
87b69c1d11
8 a modificat fișierele cu 102 adăugiri și 103 ștergeri
  1. 3 1
      Makefile
  2. 10 8
      README.md
  3. 24 21
      demo/anonymous.html
  4. 16 10
      demo/embedded.html
  5. 13 10
      demo/index.html
  6. 4 19
      docs/source/builds.rst
  7. 11 18
      docs/source/quickstart.rst
  8. 21 16
      index.html

+ 3 - 1
Makefile

@@ -55,7 +55,7 @@ help:
 ## Miscellaneous
 ## Miscellaneous
 
 
 .PHONY: serve
 .PHONY: serve
-serve: node_modules
+serve: node_modules dist
 	$(HTTPSERVE) -p $(HTTPSERVE_PORT) -c-1
 	$(HTTPSERVE) -p $(HTTPSERVE_PORT) -c-1
 
 
 .PHONY: serve_bg
 .PHONY: serve_bg
@@ -137,8 +137,10 @@ devserver: node_modules
 ## Builds
 ## Builds
 
 
 dist/converse.js:: node_modules
 dist/converse.js:: node_modules
+	npm run dev
 
 
 dist/converse.css:: node_modules
 dist/converse.css:: node_modules
+	npm run dev
 
 
 dist/website.css:: node_modules sass
 dist/website.css:: node_modules sass
 	$(SASS) --source-map true --include-path $(BOOTSTRAP) sass/website.scss $@
 	$(SASS) --source-map true --include-path $(BOOTSTRAP) sass/website.scss $@

+ 10 - 8
README.md

@@ -108,18 +108,20 @@ In embedded mode, Converse can be embedded into an element in the DOM.
 
 
 ## Integration into other servers and frameworks
 ## Integration into other servers and frameworks
 
 
--   **[Prosody](https://prosody.im/)**: [mod_conversejs](https://modules.prosody.im/mod_conversejs.html)
--   **[Openfire](https://www.igniterealtime.org/projects/openfire/index.jsp)**: [inverse.jar](https://www.igniterealtime.org/projects/openfire/plugins.jsp)
--   **[Ruby on Rails](https://rubyonrails.org)**: [conversejs-rails](https://github.com/mikemarsian/conversejs-rails)
+-   **[Alfresco](https://www.alfresco.com)**: [alfresco-js-chat-share](https://github.com/keensoft/alfresco-js-chat-share)
 -   **[Django](https://www.djangoproject.com)**: [django-conversejs](https://pypi.python.org/pypi/django-conversejs) or [django-xmpp](https://github.com/fpytloun/django-xmpp)
 -   **[Django](https://www.djangoproject.com)**: [django-conversejs](https://pypi.python.org/pypi/django-conversejs) or [django-xmpp](https://github.com/fpytloun/django-xmpp)
+-   **[Elgg](https://elgg.org)**: [plugin](https://elgg.org/plugins/2997196)
+-   **[Friendica](https://friendi.ca)**: [converse](https://github.com/friendica/friendica-addons/tree/master/xmpp/converse)
+-   **[Openfire](https://www.igniterealtime.org/projects/openfire/index.jsp)**: [inverse.jar](https://www.igniterealtime.org/projects/openfire/plugins.jsp)
 -   **[Patternslib](http://patternslib.com)**: [patterns.converse](https://github.com/jcbrand/patterns.converse)
 -   **[Patternslib](http://patternslib.com)**: [patterns.converse](https://github.com/jcbrand/patterns.converse)
--   **[Roundcube](https://roundcube.net)**: [roundcube-converse.js-xmpp-plugin](https://github.com/devurandom/roundcube-converse.js-xmpp-plugin)
--   **[Wordpress](https://wordpress.org)**: [ConverseJS](https://wordpress.org/plugins/conversejs/)
--   **[Pàdé](https://www.igniterealtime.org/projects/pade/index.jsp)**: [Pàdé](https://www.igniterealtime.org/projects/pade/index.jsp)
 -   **[Plone](https://plone.com)**: [collective.converse](https://github.com/collective/collective.converse)
 -   **[Plone](https://plone.com)**: [collective.converse](https://github.com/collective/collective.converse)
--   **[Alfresco](https://www.alfresco.com)**: [alfresco-js-chat-share](https://github.com/keensoft/alfresco-js-chat-share)
--   **[Friendica](https://friendi.ca)**: [converse](https://github.com/friendica/friendica-addons/tree/master/xmpp/converse)
+-   **[Prosody](https://prosody.im/)**: [mod_conversejs](https://modules.prosody.im/mod_conversejs.html)
+-   **[Pàdé](https://www.igniterealtime.org/projects/pade/index.jsp)**: [Pàdé](https://www.igniterealtime.org/projects/pade/index.jsp)
+-   **[Roundcube](https://roundcube.net)**: [roundcube-converse.js-xmpp-plugin](https://github.com/devurandom/roundcube-converse.js-xmpp-plugin)
+-   **[Ruby on Rails](https://rubyonrails.org)**: [conversejs-rails](https://github.com/mikemarsian/conversejs-rails)
 -   **[Tiki Wiki CMS Groupware](https://tiki.org)**: [built-in optional feature](https://doc.tiki.org/XMPP)
 -   **[Tiki Wiki CMS Groupware](https://tiki.org)**: [built-in optional feature](https://doc.tiki.org/XMPP)
+-   **[Wordpress](https://wordpress.org)**: [ConverseJS](https://wordpress.org/plugins/conversejs/)
+
 
 
 ## Tests
 ## Tests
 
 

+ 24 - 21
demo/anonymous.html

@@ -1,36 +1,39 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en">
 <html lang="en">
 <head>
 <head>
-    <title>Converse.js</title>
+    <title>Converse - Anonymous login demo</title>
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="description" content="Converse.js: A free chat client for your website" />
+    <meta name="description" content="Converse XMPP/Jabber Chat"/>
     <meta name="author" content="JC Brand" />
     <meta name="author" content="JC Brand" />
-    <meta name="keywords" content="xmpp chat webchat converse.js" />
-    <link rel="shortcut icon" type="image/ico" href="../images/favicon.ico"/>
-    <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/font-awesome.min.css" />
-    <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/website.min.css" />
-    <script type="text/javascript" src="../analytics.js"></script>
+    <meta name="keywords" content="xmpp chat webchat converse.js Converse" />
+
+    <!-- These files are NOT needed when using converse.js in your own project. -->
+    <link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
-    <![if gt IE 11]>
-        <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/converse.min.css" />
-        <script src="https://cdn.conversejs.org/6.0.0/dist/converse.min.js"></script>
-    <![endif]>
+    <script type="text/javascript" src="analytics.js"></script>
+    <!-- *********************************************************************** -->
+
+    <link rel="manifest" href="/manifest.json">
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
+    <script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
+    <script src="/dist/converse.min.js"></script>
 </head>
 </head>
 
 
 <body id="page-top" data-spy="scroll" class="converse-website">
 <body id="page-top" data-spy="scroll" class="converse-website">
 <section class="section-wrapper">
 <section class="section-wrapper">
-	<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
-		<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
-			<span class="page-scroll">
-				<a class="navbar-brand" href="/"><span class="converse-brand-heading">Home</span></a>
-				<a class="navbar-brand" href="/demo"><span class="converse-brand-heading">Demos</span></a>
-			</span>
-		</div>
-	</nav>
+    <nav class="navbar sticky-top navbar-expand-lg" role="navigation">
+        <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
+            <span class="page-scroll">
+                <a class="navbar-brand" href="/"><span class="converse-brand-heading">Home</span></a>
+                <a class="navbar-brand" href="/demo"><span class="converse-brand-heading">Demos</span></a>
+            </span>
+        </div>
+    </nav>
 
 
-    <section id="intro" class="intro container">
+    <section id="intro" class="intro" class="container">
         <div class="row">
         <div class="row">
             <div class="col-md-12 col-md-offset-2">
             <div class="col-md-12 col-md-offset-2">
                 <h1 class="brand-heading fade-in">
                 <h1 class="brand-heading fade-in">
@@ -39,7 +42,7 @@
                         xmlns="http://www.w3.org/2000/svg"
                         xmlns="http://www.w3.org/2000/svg"
                         xmlns:xlink="http://www.w3.org/1999/xlink"
                         xmlns:xlink="http://www.w3.org/1999/xlink"
                         viewBox="0 0 364 364">
                         viewBox="0 0 364 364">
-                    <title>Home</title>
+                    <title>Converse</title>
                     <g class="cls-1" id="g904">
                     <g class="cls-1" id="g904">
                         <g data-name="Layer 2">
                         <g data-name="Layer 2">
                             <g data-name="Layer 7">
                             <g data-name="Layer 7">

+ 16 - 10
demo/embedded.html

@@ -1,21 +1,26 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en">
 <html lang="en">
 <head>
 <head>
-    <title>Converse.js</title>
+    <title>Converse - Anonymous login demo</title>
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="description" content="Converse.js: An XMPP chat client which can be integrated into any website" />
+    <meta name="description" content="Converse XMPP/Jabber Chat"/>
     <meta name="author" content="JC Brand" />
     <meta name="author" content="JC Brand" />
-    <meta name="keywords" content="xmpp chat webchat converse.js" />
-    <link rel="shortcut icon" type="image/ico" href="../images/favicon.ico"/>
-    <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/website.min.css" />
-    <script type="text/javascript" src="/analytics.js"></script>
+    <meta name="keywords" content="xmpp chat webchat converse.js Converse" />
+
+    <!-- These files are NOT needed when using converse.js in your own project. -->
+    <link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
-    <![if gte IE 11]>
-        <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/converse.min.css" />
-        <script src="https://cdn.conversejs.org/6.0.0/dist/converse.min.js"></script>
-    <![endif]>
+    <script type="text/javascript" src="analytics.js"></script>
+    <!-- *********************************************************************** -->
+
+    <link rel="manifest" href="/manifest.json">
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
+    <script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
+    <script src="/dist/converse.min.js"></script>
+
     <style>
     <style>
         .converse-container {
         .converse-container {
             height: 55vh;
             height: 55vh;
@@ -23,6 +28,7 @@
     </style>
     </style>
 </head>
 </head>
 
 
+
 <body id="page-top" data-spy="scroll" class="converse-website">
 <body id="page-top" data-spy="scroll" class="converse-website">
 <section class="section-wrapper">
 <section class="section-wrapper">
     <nav class="navbar sticky-top navbar-expand-lg" role="navigation">
     <nav class="navbar sticky-top navbar-expand-lg" role="navigation">

+ 13 - 10
demo/index.html

@@ -1,22 +1,25 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en">
 <html lang="en">
 <head>
 <head>
-    <title>Converse.js</title>
+    <title>Converse Demos</title>
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="description" content="Converse.js: A free chat client for your website" />
+    <meta name="description" content="Converse XMPP/Jabber Chat"/>
     <meta name="author" content="JC Brand" />
     <meta name="author" content="JC Brand" />
-    <meta name="keywords" content="xmpp chat webchat converse.js" />
+    <meta name="keywords" content="xmpp chat webchat converse.js Converse" />
 
 
-    <link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
-    <link type="text/css" rel="stylesheet" media="screen" href="../dist/website.min.css" />
-    <script type="text/javascript" src="/analytics.js"></script>
+    <!-- These files are NOT needed when using converse.js in your own project. -->
+    <link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
-    <![if gte IE 9]>
-        <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/converse.min.css" />
-        <script src="https://cdn.conversejs.org/6.0.0/dist/converse.min.js"></script>
-    <![endif]>
+    <script type="text/javascript" src="analytics.js"></script>
+    <!-- *********************************************************************** -->
+
+    <link rel="manifest" href="/manifest.json">
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
+    <script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
+    <script src="/dist/converse.min.js"></script>
 </head>
 </head>
 
 
 <body id="page-top" data-spy="scroll" class="converse-website">
 <body id="page-top" data-spy="scroll" class="converse-website">

+ 4 - 19
docs/source/builds.rst

@@ -25,31 +25,16 @@ Generating builds
 Creating JavaScript and CSS bundles and distribution files
 Creating JavaScript and CSS bundles and distribution files
 ==========================================================
 ==========================================================
 
 
-Converse uses `webpack <https://webpack.js.org/>`_ to create bundles containing the
-core JavaScript code and all of the 3rd party dependencies.
+Converse uses `webpack <https://webpack.js.org/>`_ to create the final JavaScript and CSS distribution files.
 
 
-Similarly, we use `Sass <http://sass-lang.com/>`_ to generate the CSS bundle
-from ``.scss`` files in the ``sass`` directory.
+The generated distribution files are all placed in the ``./dist`` directory.
+The Converse repository does not include ``dist`` directory by default.
 
 
-The generated JavaScript bundles are contained in the `dist <https://github.com/conversejs/converse.js/tree/master/dist>`_ directory
-and the generated CSS bundles in the `css <https://github.com/conversejs/converse.js/tree/master/css>`_ directory.
-
-To generate a prticular bundle, for example the minified file ``converse.min.js``, you can run ``make dist/converse.min.js``.
-This is also true for any of the other bundle files.
-
-To generate all CSS and JavaScript bundles, you can run ``make dist``.
+To generate the ``./dist`` directory and all CSS and JavaScript bundles, simply run ``make dist``.
 
 
 When you're developing, and constantly changing code, you can run ``make watch``
 When you're developing, and constantly changing code, you can run ``make watch``
 to let the bundles be automatically generated as soon as you edit a file.
 to let the bundles be automatically generated as soon as you edit a file.
 
 
-The Converse repository does not include the minified files in the ``dist`` or
-``css`` directories. Before deployment, you'll want to generate them yourself.
-
-To only generate the minified files, you can make them individually. ::
-
-    make dist/converse.min.js
-    make dist/converse.min.css
-
 .. note::
 .. note::
 
 
    If you're on Windows or don't have GNU Make installed, you can run ``npm build``
    If you're on Windows or don't have GNU Make installed, you can run ``npm build``

+ 11 - 18
docs/source/quickstart.rst

@@ -9,18 +9,17 @@ Quickstart
 Getting a demo up and running
 Getting a demo up and running
 =============================
 =============================
 
 
-You can try out the latest version of Converse on `conversejs.org <https://conversejs.org>`_
+You can try out the latest version of Converse at `conversejs.org <https://conversejs.org>`_
 for the overlayed version and `conversejs.org/fullscreen.html <https://conversejs.org/fullscreen.html>`_
 for the overlayed version and `conversejs.org/fullscreen.html <https://conversejs.org/fullscreen.html>`_
 for the full page version.
 for the full page version.
 
 
-If you want to host Converse yourself, there are a few options available to
-you.
+If you want to host and serve Converse yourself, there are a few options available.
 
 
 Let your XMPP server serve Converse for you
 Let your XMPP server serve Converse for you
 -------------------------------------------
 -------------------------------------------
 
 
 If you run your own XMPP server, you might first want to check whether it has
 If you run your own XMPP server, you might first want to check whether it has
-a plugin or module for hosting Converse for you.
+a plugin or module for hosting Converse.
 
 
 * OpenFire has the `inverse <https://www.igniterealtime.org/projects/openfire/plugin-archive.jsp?plugin=inverse>`_ plugin.
 * OpenFire has the `inverse <https://www.igniterealtime.org/projects/openfire/plugin-archive.jsp?plugin=inverse>`_ plugin.
 * Prosody has `mod_conversejs <https://modules.prosody.im/mod_conversejs.html>`_.
 * Prosody has `mod_conversejs <https://modules.prosody.im/mod_conversejs.html>`_.
@@ -29,16 +28,14 @@ a plugin or module for hosting Converse for you.
 Serving Converse yourself
 Serving Converse yourself
 -------------------------
 -------------------------
 
 
-Alternative you can serve only Converse without requiring any particular
-XMPP server.
+Alternative you can serve only Converse without requiring any particular XMPP server.
 
 
-To do so, you'll need to get the right files to host, for which you have four
-options.
+To do so, you'll need to get the right files to host, for which you have four options.
 
 
 .. note::
 .. note::
 
 
-    Pro-tip, if you just want to quickly test things locally, you can quickly start
-    up an HTTP server with Python by running ``python -m SimpleHTTPServer``
+    Pro-tip, if you just want to quickly test things locally, you can run ``make serve`` inside a checkout of the Converse repo.
+    Converse is then hosted at http://localhost:8000
 
 
 
 
 Option 1: Use the content delivery network
 Option 1: Use the content delivery network
@@ -91,13 +88,9 @@ Have a look at the :ref:`creating_builds` section on how to create your own buil
 In short, you should be able to do it by running ``make dist`` inside a
 In short, you should be able to do it by running ``make dist`` inside a
 checkout of the `Converse repo <http://github.com/conversejs/converse.js/>`_.
 checkout of the `Converse repo <http://github.com/conversejs/converse.js/>`_.
 
 
-.. note::
-
-    When hosting Converse yourself without using the CDN (options 2 and 4),
-    you'll need to need to make sure that the ``webfonts`` directory is available in
-    the same location as ``converse.min.css``.
-
+To build the files and also start an HTTP server, you can run ``make serve``.
 
 
+The distribution files will be added to the ``./dist`` folder inside the repo.
 
 
 
 
 Initializing Converse
 Initializing Converse
@@ -125,9 +118,9 @@ Fullscreen version
 Converse also comes in a fullscreen version.
 Converse also comes in a fullscreen version.
 A hosted version is available online at `conversejs.org/fullscreen <https://conversejs.org/fullscreen.html>`_.
 A hosted version is available online at `conversejs.org/fullscreen <https://conversejs.org/fullscreen.html>`_.
 
 
-Originally this version was available as a separate build file, but 
+Originally this version was available as a separate build file, but
 as of version 4.0.0 and higher, the difference between the "overlay" and the
 as of version 4.0.0 and higher, the difference between the "overlay" and the
-"fullscreen" versions of converse.js is simply a matter of configuring the 
+"fullscreen" versions of converse.js is simply a matter of configuring the
 :ref:`view_mode`.
 :ref:`view_mode`.
 
 
 For example::
 For example::

+ 21 - 16
index.html

@@ -10,16 +10,16 @@
     <meta name="keywords" content="xmpp chat webchat converse.js Converse" />
     <meta name="keywords" content="xmpp chat webchat converse.js Converse" />
 
 
     <!-- These files are NOT needed when using converse.js in your own project. -->
     <!-- These files are NOT needed when using converse.js in your own project. -->
-    <link rel="shortcut icon" type="image/ico" href="https://cdn.conversejs.org/6.0.0/dist/favicon.ico"/>
-    <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/website.min.css" />
+    <link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
     <noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
     <script type="text/javascript" src="analytics.js"></script>
     <script type="text/javascript" src="analytics.js"></script>
     <!-- *********************************************************************** -->
     <!-- *********************************************************************** -->
 
 
     <link rel="manifest" href="./manifest.json">
     <link rel="manifest" href="./manifest.json">
-    <link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/6.0.0/dist/converse.min.css" />
+    <link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
     <script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
     <script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
-    <script src="https://cdn.conversejs.org/6.0.0/dist/converse.min.js"></script>
+    <script src="/dist/converse.min.js"></script>
 </head>
 </head>
 
 
 <body id="page-top" data-spy="scroll" class="converse-website">
 <body id="page-top" data-spy="scroll" class="converse-website">
@@ -93,7 +93,7 @@
                 </h1>
                 </h1>
 
 
                 <p class="intro-text">A free and open-source XMPP chat client in your browser</p>
                 <p class="intro-text">A free and open-source XMPP chat client in your browser</p>
-                <p class="intro-text">Try the <a href="/fullscreen.html">fullpage</a> and <a href="https://github.com/conversejs/converse-desktop/releases" target="_blank" rel="noopener">Desktop</a> versions<p>
+                <p class="intro-text">Try the <a href="/fullscreen.html">fullpage</a> and <a href="https://github.com/conversejs/converse-desktop/releases" target="_blank" rel="noopener">desktop</a> versions<p>
                 <p style="padding-top: 1.5em">
                 <p style="padding-top: 1.5em">
                 <a href="https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org"
                 <a href="https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org"
                    target="_blank" rel="noopener"><img src="https://inverse.chat/badge.svg?room=discuss@conference.conversejs.org"/></a>
                    target="_blank" rel="noopener"><img src="https://inverse.chat/badge.svg?room=discuss@conference.conversejs.org"/></a>
@@ -146,28 +146,33 @@
                     </header>
                     </header>
                     <ul class="integration">
                     <ul class="integration">
                         <!-- xmpp server -->
                         <!-- xmpp server -->
+                        <li style="list-style: none">XMPP Servers</li>
                         <li><a href="https://www.igniterealtime.org/projects/openfire/plugins.jsp" target="_blank" rel="noopener">Openfire</a></li>
                         <li><a href="https://www.igniterealtime.org/projects/openfire/plugins.jsp" target="_blank" rel="noopener">Openfire</a></li>
                         <li><a href="https://modules.prosody.im/mod_conversejs.html" target="_blank" rel="noopener">Prosody</a></li>
                         <li><a href="https://modules.prosody.im/mod_conversejs.html" target="_blank" rel="noopener">Prosody</a></li>
-                        <!-- xmpp frameworks -->
+                    </ul>
+                    <ul class="integration">
+                        <li style="list-style: none">Frameworks</li>
                         <li><a href="https://github.com/mikemarsian/conversejs-rails" target="_blank" rel="noopener">Ruby on Rails</a></li>
                         <li><a href="https://github.com/mikemarsian/conversejs-rails" target="_blank" rel="noopener">Ruby on Rails</a></li>
-                        <li><a href="https://pypi.python.org/pypi/django-conversejs" target="_blank" rel="noopener">Django (option 1)</a></li>
-                        <li><a href="https://github.com/fpytloun/django-xmpp" target="_blank" rel="noopener">Django (option 2)</a></li>
-                        <!-- xmpp as plugin -->
-                        <li><a href="https://github.com/jcbrand/patterns.converse" target="_blank" rel="noopener">Patternslib</a></li>
-                        <li><a href="https://github.com/devurandom/roundcube-converse.js-xmpp-plugin" target="_blank" rel="noopener">Roundcube</a></li>
-                        <li><a href="https://wordpress.org/plugins/conversejs/" target="_blank" rel="noopener">Wordpress</a></li>
+                        <li>Django: <a href="https://pypi.python.org/pypi/django-conversejs" target="_blank" rel="noopener">option 1</a>,&nbsp;<a href="https://github.com/fpytloun/django-xmpp" target="_blank" rel="noopener">option 2</a></li>
+                    </ul>
+                    <ul class="integration">
+                        <li style="list-style: none">Plugins</li>
+                        <li><a href="https://doc.tiki.org/xmpp" target="_blank" rel="noopener">Tiki Wiki CMS Groupware</a></li>
+                        <li><a href="https://elgg.org/plugins/2997196" target="_blank" rel="noopener">Elgg</a></li>
                         <li><a href="https://github.com/collective/collective.converse" target="_blank" rel="noopener">Plone</a></li>
                         <li><a href="https://github.com/collective/collective.converse" target="_blank" rel="noopener">Plone</a></li>
-                        <li><a href="https://github.com/keensoft/alfresco-js-chat-share" target="_blank" rel="noopener">Alfresco</a></li>
+                        <li><a href="https://github.com/devurandom/roundcube-converse.js-xmpp-plugin" target="_blank" rel="noopener">Roundcube</a></li>
                         <li><a href="https://github.com/friendica/friendica-addons/tree/master/xmpp/converse" target="_blank" rel="noopener">Friendica</a></li>
                         <li><a href="https://github.com/friendica/friendica-addons/tree/master/xmpp/converse" target="_blank" rel="noopener">Friendica</a></li>
-                        <li><a href="https://doc.tiki.org/xmpp" target="_blank" rel="noopener">Tiki Wiki CMS Groupware</a></li>
+                        <li><a href="https://github.com/jcbrand/patterns.converse" target="_blank" rel="noopener">Patternslib</a></li>
+                        <li><a href="https://github.com/keensoft/alfresco-js-chat-share" target="_blank" rel="noopener">Alfresco</a></li>
+                        <li><a href="https://wordpress.org/plugins/conversejs/" target="_blank" rel="noopener">Wordpress</a></li>
                     </ul>
                     </ul>
                     <header>
                     <header>
                         <h2>Applications</h2>
                         <h2>Applications</h2>
                     </header>
                     </header>
                     <ul class="integration">
                     <ul class="integration">
                         <!-- xmpp stand alone apps -->
                         <!-- xmpp stand alone apps -->
+                        <li><a href="https://github.com/conversejs/converse-desktop" target="_blank" rel="noopener">Converse Desktop</a></li>
                         <li><a href="https://open-store.io/app/conversejs.povoq" target="_blank" rel="noopener">ConverseJS for Ubuntu-Touch</a></li>
                         <li><a href="https://open-store.io/app/conversejs.povoq" target="_blank" rel="noopener">ConverseJS for Ubuntu-Touch</a></li>
-                        <li><a href="https://github.com/nick-denry/Chimeverse" target="_blank" rel="noopener">Chimeverse for Mac OS X</a></li>
                     </ul>
                     </ul>
                 </div>
                 </div>
                 <div class="col-lg-6">
                 <div class="col-lg-6">
@@ -192,7 +197,7 @@
                         <li>Hidden messages (aka Spoilers) (<a href="https://xmpp.org/extensions/xep-0382.html" target="_blank" rel="noopener">XEP 382</a>)</li>
                         <li>Hidden messages (aka Spoilers) (<a href="https://xmpp.org/extensions/xep-0382.html" target="_blank" rel="noopener">XEP 382</a>)</li>
                         <li>Client state indication (<a href="https://xmpp.org/extensions/xep-0352.html" target="_blank" rel="noopener">XEP 352</a>)</li>
                         <li>Client state indication (<a href="https://xmpp.org/extensions/xep-0352.html" target="_blank" rel="noopener">XEP 352</a>)</li>
                         <li>OMEMO encrypted messaging (<a href="https://xmpp.org/extensions/xep-0384.html" target="_blank" rel="noopener">XEP 384</a>)</li>
                         <li>OMEMO encrypted messaging (<a href="https://xmpp.org/extensions/xep-0384.html" target="_blank" rel="noopener">XEP 384</a>)</li>
-                        <li>Anonymous logins, see the <a href="https://conversejs.org/demo/anonymous.html" target="_blank" rel="noopener">anonymous login demo</a></li>
+                        <li>Anonymous logins, see the <a href="/demo/anonymous.html" target="_blank" rel="noopener">anonymous login demo</a></li>
                         <li>Message corrections, retractions and moderation</li>
                         <li>Message corrections, retractions and moderation</li>
                         <li>Translated into over 30 languages</li>
                         <li>Translated into over 30 languages</li>
                     </ul>
                     </ul>