Ver Fonte

Add a demo for anonymous logins.

JC Brand há 9 anos atrás
pai
commit
0da920e29a
6 ficheiros alterados com 513 adições e 218 exclusões
  1. 216 0
      config.js
  2. 0 218
      converse.js
  3. 75 0
      demo/anonymous.html
  4. 220 0
      demo/config.js
  5. 1 0
      dev.html
  6. 1 0
      tests.html

+ 216 - 0
config.js

@@ -0,0 +1,216 @@
+var config;
+if (typeof(require) === 'undefined') {
+    /* XXX: Hack to work around r.js's stupid parsing.
+     * We want to save the configuration in a variable so that we can reuse it in
+     * tests/main.js.
+     */
+    require = { // jshint ignore:line
+        config: function (c) {
+            config = c;
+        }
+    };
+}
+
+require.config({
+    baseUrl: '.',
+    paths: {
+        "backbone":                 "components/backbone/backbone",
+        "backbone.browserStorage":  "components/backbone.browserStorage/backbone.browserStorage",
+        "backbone.overview":        "components/backbone.overview/backbone.overview",
+        "eventemitter":             "components/otr/build/dep/eventemitter",
+        "jquery":                   "components/jquery/dist/jquery",
+        "jquery-private":           "src/jquery-private",
+        "jquery.browser":           "components/jquery.browser/dist/jquery.browser",
+        "jquery.easing":            "components/jquery-easing-original/index",          // XXX: Only required for https://conversejs.org website
+        "moment":                   "components/momentjs/moment",
+        "strophe":                  "components/strophejs/src/wrapper",
+        "strophe-base64":           "components/strophejs/src/base64",
+        "strophe-bosh":             "components/strophejs/src/bosh",
+        "strophe-core":             "components/strophejs/src/core",
+        "strophe-md5":              "components/strophejs/src/md5",
+        "strophe-polyfill":         "components/strophejs/src/polyfills",
+        "strophe-sha1":             "components/strophejs/src/sha1",
+        "strophe-utils":            "components/strophejs/src/utils",
+        "strophe-websocket":        "components/strophejs/src/websocket",
+        "strophe.disco":            "components/strophejs-plugins/disco/strophe.disco",
+        "strophe.ping":             "src/strophe.ping",
+        "strophe.rsm":              "components/strophejs-plugins/rsm/strophe.rsm",
+        "strophe.vcard":            "src/strophe.vcard",
+        "text":                     'components/requirejs-text/text',
+        "tpl":                      'components/requirejs-tpl-jcbrand/tpl',
+        "typeahead":                "components/typeahead.js/index",
+        "underscore":               "components/underscore/underscore",
+        "utils":                    "src/utils",
+        "polyfill":                 "src/polyfill",
+        
+        // Converse
+        "converse-api":             "src/converse-api",
+        "converse-chatview":        "src/converse-chatview",
+        "converse-controlbox":      "src/converse-controlbox",
+        "converse-core":            "src/converse-core",
+        "converse-dragresize":      "src/converse-dragresize",
+        "converse-headline":        "src/converse-headline",
+        "converse-mam":             "src/converse-mam",
+        "converse-minimize":        "src/converse-minimize",
+        "converse-muc":             "src/converse-muc",
+        "converse-notification":    "src/converse-notification",
+        "converse-otr":             "src/converse-otr",
+        "converse-ping":            "src/converse-ping",
+        "converse-pluggable":       "src/converse-pluggable",
+        "converse-register":        "src/converse-register",
+        "converse-rosterview":      "src/converse-rosterview",
+        "converse-templates":       "src/converse-templates",
+        "converse-vcard":           "src/converse-vcard",
+
+        // Off-the-record-encryption
+        "bigint":               "src/bigint",
+        "crypto":               "src/crypto",
+        "crypto.aes":           "components/otr/vendor/cryptojs/aes",
+        "crypto.cipher-core":   "components/otr/vendor/cryptojs/cipher-core",
+        "crypto.core":          "components/otr/vendor/cryptojs/core",
+        "crypto.enc-base64":    "components/otr/vendor/cryptojs/enc-base64",
+        "crypto.evpkdf":        "components/crypto-js-evanvosberg/src/evpkdf",
+        "crypto.hmac":          "components/otr/vendor/cryptojs/hmac",
+        "crypto.md5":           "components/crypto-js-evanvosberg/src/md5",
+        "crypto.mode-ctr":      "components/otr/vendor/cryptojs/mode-ctr",
+        "crypto.pad-nopadding": "components/otr/vendor/cryptojs/pad-nopadding",
+        "crypto.sha1":          "components/otr/vendor/cryptojs/sha1",
+        "crypto.sha256":        "components/otr/vendor/cryptojs/sha256",
+        "salsa20":              "components/otr/build/dep/salsa20",
+        "otr":                  "src/otr",
+
+        // Locales paths
+        "locales":   "src/locales",
+        "jed":       "components/jed/jed",
+        "af":        "locale/af/LC_MESSAGES/converse.json",
+        "ca":        "locale/ca/LC_MESSAGES/converse.json",
+        "de":        "locale/de/LC_MESSAGES/converse.json",
+        "en":        "locale/en/LC_MESSAGES/converse.json",
+        "es":        "locale/es/LC_MESSAGES/converse.json",
+        "fr":        "locale/fr/LC_MESSAGES/converse.json",
+        "he":        "locale/he/LC_MESSAGES/converse.json",
+        "hu":        "locale/hu/LC_MESSAGES/converse.json",
+        "id":        "locale/id/LC_MESSAGES/converse.json",
+        "it":        "locale/it/LC_MESSAGES/converse.json",
+        "ja":        "locale/ja/LC_MESSAGES/converse.json",
+        "nb":        "locale/nb/LC_MESSAGES/converse.json",
+        "nl":        "locale/nl/LC_MESSAGES/converse.json",
+        "pl":        "locale/pl/LC_MESSAGES/converse.json",
+        "pt_BR":     "locale/pt_BR/LC_MESSAGES/converse.json",
+        "ru":        "locale/ru/LC_MESSAGES/converse.json",
+        "uk":        "locale/uk/LC_MESSAGES/converse.json",
+        "zh":        "locale/zh/LC_MESSAGES/converse.json",
+
+        "moment_with_locales": "src/moment_locales",
+        'moment_af':        "components/momentjs/locale/af",
+        'moment_de':        "components/momentjs/locale/de",
+        'moment_es':        "components/momentjs/locale/es",
+        'moment_fr':        "components/momentjs/locale/fr",
+        'moment_he':        "components/momentjs/locale/he",
+        'moment_hu':        "components/momentjs/locale/hu",
+        'moment_id':        "components/momentjs/locale/id",
+        'moment_it':        "components/momentjs/locale/it",
+        'moment_ja':        "components/momentjs/locale/ja",
+        'moment_nb':        "components/momentjs/locale/nb",
+        'moment_nl':        "components/momentjs/locale/nl",
+        'moment_pl':        "components/momentjs/locale/pl",
+        'moment_pt-br':     "components/momentjs/locale/pt-br",
+        'moment_ru':        "components/momentjs/locale/ru",
+        'moment_uk':        "components/momentjs/locale/uk",
+        'moment_zh':        "components/momentjs/locale/zh-cn",
+
+        // Templates
+        "action":                   "src/templates/action",
+        "add_contact_dropdown":     "src/templates/add_contact_dropdown",
+        "add_contact_form":         "src/templates/add_contact_form",
+        "change_status_message":    "src/templates/change_status_message",
+        "chat_status":              "src/templates/chat_status",
+        "chatarea":                 "src/templates/chatarea",
+        "chatbox":                  "src/templates/chatbox",
+        "chatroom":                 "src/templates/chatroom",
+        "chatroom_form":            "src/templates/chatroom_form",
+        "chatroom_password_form":   "src/templates/chatroom_password_form",
+        "chatroom_nickname_form":   "src/templates/chatroom_nickname_form",
+        "chatroom_sidebar":         "src/templates/chatroom_sidebar",
+        "chatrooms_tab":            "src/templates/chatrooms_tab",
+        "chats_panel":              "src/templates/chats_panel",
+        "choose_status":            "src/templates/choose_status",
+        "contacts_panel":           "src/templates/contacts_panel",
+        "contacts_tab":             "src/templates/contacts_tab",
+        "controlbox":               "src/templates/controlbox",
+        "controlbox_toggle":        "src/templates/controlbox_toggle",
+        "field":                    "src/templates/field",
+        "form_captcha":             "src/templates/form_captcha",
+        "form_checkbox":            "src/templates/form_checkbox",
+        "form_input":               "src/templates/form_input",
+        "form_select":              "src/templates/form_select",
+        "form_textarea":            "src/templates/form_textarea",
+        "form_username":            "src/templates/form_username",
+        "group_header":             "src/templates/group_header",
+        "info":                     "src/templates/info",
+        "login_panel":              "src/templates/login_panel",
+        "login_tab":                "src/templates/login_tab",
+        "message":                  "src/templates/message",
+        "new_day":                  "src/templates/new_day",
+        "occupant":                 "src/templates/occupant",
+        "pending_contact":          "src/templates/pending_contact",
+        "pending_contacts":         "src/templates/pending_contacts",
+        "register_panel":           "src/templates/register_panel",
+        "register_tab":             "src/templates/register_tab",
+        "registration_form":        "src/templates/registration_form",
+        "registration_request":     "src/templates/registration_request",
+        "requesting_contact":       "src/templates/requesting_contact",
+        "requesting_contacts":      "src/templates/requesting_contacts",
+        "room_description":         "src/templates/room_description",
+        "room_item":                "src/templates/room_item",
+        "room_panel":               "src/templates/room_panel",
+        "roster":                   "src/templates/roster",
+        "roster_item":              "src/templates/roster_item",
+        "search_contact":           "src/templates/search_contact",
+        "select_option":            "src/templates/select_option",
+        "status_option":            "src/templates/status_option",
+        "toggle_chats":             "src/templates/toggle_chats",
+        "toolbar":                  "src/templates/toolbar",
+        "toolbar_otr":              "src/templates/toolbar_otr",
+        "trimmed_chat":             "src/templates/trimmed_chat",
+        "vcard":                    "src/templates/vcard",
+        "chatbox_minimize":         "src/templates/chatbox_minimize"
+    },
+
+    map: {
+        // '*' means all modules will get 'jquery-private'
+        // for their 'jquery' dependency.
+        '*': { 'jquery': 'jquery-private' },
+        // 'jquery-private' wants the real jQuery module
+        // though. If this line was not here, there would
+        // be an unresolvable cyclic dependency.
+        'jquery-private': { 'jquery': 'jquery' }
+    },
+
+    tpl: {
+        // Configuration for requirejs-tpl
+        // Use Mustache style syntax for variable interpolation
+        templateSettings: {
+            evaluate : /\{\[([\s\S]+?)\]\}/g,
+            interpolate : /\{\{([\s\S]+?)\}\}/g
+        }
+    },
+
+    // define module dependencies for modules not using define
+    shim: {
+        'crypto.aes':           { deps: ['crypto.cipher-core'] },
+        'crypto.cipher-core':   { deps: ['crypto.enc-base64', 'crypto.evpkdf'] },
+        'crypto.enc-base64':    { deps: ['crypto.core'] },
+        'crypto.evpkdf':        { deps: ['crypto.md5'] },
+        'crypto.hmac':          { deps: ['crypto.core'] },
+        'crypto.md5':           { deps: ['crypto.core'] },
+        'crypto.mode-ctr':      { deps: ['crypto.cipher-core'] },
+        'crypto.pad-nopadding': { deps: ['crypto.cipher-core'] },
+        'crypto.sha1':          { deps: ['crypto.core'] },
+        'crypto.sha256':        { deps: ['crypto.core'] },
+        'bigint':               { deps: ['crypto'] },
+        'strophe.ping':         { deps: ['strophe'] },
+        'strophe.register':     { deps: ['strophe'] },
+        'strophe.vcard':        { deps: ['strophe'] }
+    }
+});

+ 0 - 218
converse.js

@@ -1,221 +1,3 @@
-var config;
-if (typeof(require) === 'undefined') {
-    /* XXX: Hack to work around r.js's stupid parsing.
-     * We want to save the configuration in a variable so that we can reuse it in
-     * tests/main.js.
-     */
-    require = { // jshint ignore:line
-        config: function (c) {
-            config = c;
-        }
-    };
-}
-
-require.config({
-    baseUrl: '.',
-    paths: {
-        "backbone":                 "components/backbone/backbone",
-        "backbone.browserStorage":  "components/backbone.browserStorage/backbone.browserStorage",
-        "backbone.overview":        "components/backbone.overview/backbone.overview",
-        "eventemitter":             "components/otr/build/dep/eventemitter",
-        "jquery":                   "components/jquery/dist/jquery",
-        "jquery-private":           "src/jquery-private",
-        "jquery.browser":           "components/jquery.browser/dist/jquery.browser",
-        "jquery.easing":            "components/jquery-easing-original/index",          // XXX: Only required for https://conversejs.org website
-        "moment":                   "components/momentjs/moment",
-        "strophe":                  "components/strophejs/src/wrapper",
-        "strophe-base64":           "components/strophejs/src/base64",
-        "strophe-bosh":             "components/strophejs/src/bosh",
-        "strophe-core":             "components/strophejs/src/core",
-        "strophe-md5":              "components/strophejs/src/md5",
-        "strophe-polyfill":         "components/strophejs/src/polyfills",
-        "strophe-sha1":             "components/strophejs/src/sha1",
-        "strophe-utils":            "components/strophejs/src/utils",
-        "strophe-websocket":        "components/strophejs/src/websocket",
-        "strophe.disco":            "components/strophejs-plugins/disco/strophe.disco",
-        "strophe.ping":             "src/strophe.ping",
-        "strophe.rsm":              "components/strophejs-plugins/rsm/strophe.rsm",
-        "strophe.vcard":            "src/strophe.vcard",
-        "text":                     'components/requirejs-text/text',
-        "tpl":                      'components/requirejs-tpl-jcbrand/tpl',
-        "typeahead":                "components/typeahead.js/index",
-        "underscore":               "components/underscore/underscore",
-        "utils":                    "src/utils",
-        "polyfill":                 "src/polyfill",
-        
-        // Converse
-        "converse-api":             "src/converse-api",
-        "converse-chatview":        "src/converse-chatview",
-        "converse-controlbox":      "src/converse-controlbox",
-        "converse-core":            "src/converse-core",
-        "converse-dragresize":      "src/converse-dragresize",
-        "converse-headline":        "src/converse-headline",
-        "converse-mam":             "src/converse-mam",
-        "converse-minimize":        "src/converse-minimize",
-        "converse-muc":             "src/converse-muc",
-        "converse-notification":    "src/converse-notification",
-        "converse-otr":             "src/converse-otr",
-        "converse-ping":            "src/converse-ping",
-        "converse-pluggable":       "src/converse-pluggable",
-        "converse-register":        "src/converse-register",
-        "converse-rosterview":      "src/converse-rosterview",
-        "converse-templates":       "src/converse-templates",
-        "converse-vcard":           "src/converse-vcard",
-
-        // Off-the-record-encryption
-        "bigint":               "src/bigint",
-        "crypto":               "src/crypto",
-        "crypto.aes":           "components/otr/vendor/cryptojs/aes",
-        "crypto.cipher-core":   "components/otr/vendor/cryptojs/cipher-core",
-        "crypto.core":          "components/otr/vendor/cryptojs/core",
-        "crypto.enc-base64":    "components/otr/vendor/cryptojs/enc-base64",
-        "crypto.evpkdf":        "components/crypto-js-evanvosberg/src/evpkdf",
-        "crypto.hmac":          "components/otr/vendor/cryptojs/hmac",
-        "crypto.md5":           "components/crypto-js-evanvosberg/src/md5",
-        "crypto.mode-ctr":      "components/otr/vendor/cryptojs/mode-ctr",
-        "crypto.pad-nopadding": "components/otr/vendor/cryptojs/pad-nopadding",
-        "crypto.sha1":          "components/otr/vendor/cryptojs/sha1",
-        "crypto.sha256":        "components/otr/vendor/cryptojs/sha256",
-        "salsa20":              "components/otr/build/dep/salsa20",
-        "otr":                  "src/otr",
-
-        // Locales paths
-        "locales":   "src/locales",
-        "jed":       "components/jed/jed",
-        "af":        "locale/af/LC_MESSAGES/converse.json",
-        "ca":        "locale/ca/LC_MESSAGES/converse.json",
-        "de":        "locale/de/LC_MESSAGES/converse.json",
-        "en":        "locale/en/LC_MESSAGES/converse.json",
-        "es":        "locale/es/LC_MESSAGES/converse.json",
-        "fr":        "locale/fr/LC_MESSAGES/converse.json",
-        "he":        "locale/he/LC_MESSAGES/converse.json",
-        "hu":        "locale/hu/LC_MESSAGES/converse.json",
-        "id":        "locale/id/LC_MESSAGES/converse.json",
-        "it":        "locale/it/LC_MESSAGES/converse.json",
-        "ja":        "locale/ja/LC_MESSAGES/converse.json",
-        "nb":        "locale/nb/LC_MESSAGES/converse.json",
-        "nl":        "locale/nl/LC_MESSAGES/converse.json",
-        "pl":        "locale/pl/LC_MESSAGES/converse.json",
-        "pt_BR":     "locale/pt_BR/LC_MESSAGES/converse.json",
-        "ru":        "locale/ru/LC_MESSAGES/converse.json",
-        "uk":        "locale/uk/LC_MESSAGES/converse.json",
-        "zh":        "locale/zh/LC_MESSAGES/converse.json",
-
-        "moment_with_locales": "src/moment_locales",
-        'moment_af':        "components/momentjs/locale/af",
-        'moment_de':        "components/momentjs/locale/de",
-        'moment_es':        "components/momentjs/locale/es",
-        'moment_fr':        "components/momentjs/locale/fr",
-        'moment_he':        "components/momentjs/locale/he",
-        'moment_hu':        "components/momentjs/locale/hu",
-        'moment_id':        "components/momentjs/locale/id",
-        'moment_it':        "components/momentjs/locale/it",
-        'moment_ja':        "components/momentjs/locale/ja",
-        'moment_nb':        "components/momentjs/locale/nb",
-        'moment_nl':        "components/momentjs/locale/nl",
-        'moment_pl':        "components/momentjs/locale/pl",
-        'moment_pt-br':     "components/momentjs/locale/pt-br",
-        'moment_ru':        "components/momentjs/locale/ru",
-        'moment_uk':        "components/momentjs/locale/uk",
-        'moment_zh':        "components/momentjs/locale/zh-cn",
-
-        // Templates
-        "action":                   "src/templates/action",
-        "add_contact_dropdown":     "src/templates/add_contact_dropdown",
-        "add_contact_form":         "src/templates/add_contact_form",
-        "change_status_message":    "src/templates/change_status_message",
-        "chat_status":              "src/templates/chat_status",
-        "chatarea":                 "src/templates/chatarea",
-        "chatbox":                  "src/templates/chatbox",
-        "chatroom":                 "src/templates/chatroom",
-        "chatroom_form":            "src/templates/chatroom_form",
-        "chatroom_password_form":   "src/templates/chatroom_password_form",
-        "chatroom_nickname_form":   "src/templates/chatroom_nickname_form",
-        "chatroom_sidebar":         "src/templates/chatroom_sidebar",
-        "chatrooms_tab":            "src/templates/chatrooms_tab",
-        "chats_panel":              "src/templates/chats_panel",
-        "choose_status":            "src/templates/choose_status",
-        "contacts_panel":           "src/templates/contacts_panel",
-        "contacts_tab":             "src/templates/contacts_tab",
-        "controlbox":               "src/templates/controlbox",
-        "controlbox_toggle":        "src/templates/controlbox_toggle",
-        "field":                    "src/templates/field",
-        "form_captcha":             "src/templates/form_captcha",
-        "form_checkbox":            "src/templates/form_checkbox",
-        "form_input":               "src/templates/form_input",
-        "form_select":              "src/templates/form_select",
-        "form_textarea":            "src/templates/form_textarea",
-        "form_username":            "src/templates/form_username",
-        "group_header":             "src/templates/group_header",
-        "info":                     "src/templates/info",
-        "login_panel":              "src/templates/login_panel",
-        "login_tab":                "src/templates/login_tab",
-        "message":                  "src/templates/message",
-        "new_day":                  "src/templates/new_day",
-        "occupant":                 "src/templates/occupant",
-        "pending_contact":          "src/templates/pending_contact",
-        "pending_contacts":         "src/templates/pending_contacts",
-        "register_panel":           "src/templates/register_panel",
-        "register_tab":             "src/templates/register_tab",
-        "registration_form":        "src/templates/registration_form",
-        "registration_request":     "src/templates/registration_request",
-        "requesting_contact":       "src/templates/requesting_contact",
-        "requesting_contacts":      "src/templates/requesting_contacts",
-        "room_description":         "src/templates/room_description",
-        "room_item":                "src/templates/room_item",
-        "room_panel":               "src/templates/room_panel",
-        "roster":                   "src/templates/roster",
-        "roster_item":              "src/templates/roster_item",
-        "search_contact":           "src/templates/search_contact",
-        "select_option":            "src/templates/select_option",
-        "status_option":            "src/templates/status_option",
-        "toggle_chats":             "src/templates/toggle_chats",
-        "toolbar":                  "src/templates/toolbar",
-        "toolbar_otr":              "src/templates/toolbar_otr",
-        "trimmed_chat":             "src/templates/trimmed_chat",
-        "vcard":                    "src/templates/vcard",
-        "chatbox_minimize":         "src/templates/chatbox_minimize"
-    },
-
-    map: {
-        // '*' means all modules will get 'jquery-private'
-        // for their 'jquery' dependency.
-        '*': { 'jquery': 'jquery-private' },
-        // 'jquery-private' wants the real jQuery module
-        // though. If this line was not here, there would
-        // be an unresolvable cyclic dependency.
-        'jquery-private': { 'jquery': 'jquery' }
-    },
-
-    tpl: {
-        // Configuration for requirejs-tpl
-        // Use Mustache style syntax for variable interpolation
-        templateSettings: {
-            evaluate : /\{\[([\s\S]+?)\]\}/g,
-            interpolate : /\{\{([\s\S]+?)\}\}/g
-        }
-    },
-
-    // define module dependencies for modules not using define
-    shim: {
-        'crypto.aes':           { deps: ['crypto.cipher-core'] },
-        'crypto.cipher-core':   { deps: ['crypto.enc-base64', 'crypto.evpkdf'] },
-        'crypto.enc-base64':    { deps: ['crypto.core'] },
-        'crypto.evpkdf':        { deps: ['crypto.md5'] },
-        'crypto.hmac':          { deps: ['crypto.core'] },
-        'crypto.md5':           { deps: ['crypto.core'] },
-        'crypto.mode-ctr':      { deps: ['crypto.cipher-core'] },
-        'crypto.pad-nopadding': { deps: ['crypto.cipher-core'] },
-        'crypto.sha1':          { deps: ['crypto.core'] },
-        'crypto.sha256':        { deps: ['crypto.core'] },
-        'bigint':               { deps: ['crypto'] },
-        'strophe.ping':         { deps: ['strophe'] },
-        'strophe.register':     { deps: ['strophe'] },
-        'strophe.vcard':        { deps: ['strophe'] }
-    }
-});
-
-
 /* Converse.js components configuration
  *
  * This file is used to tell require.js which components (or plugins) to load

+ 75 - 0
demo/anonymous.html

@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <title>Converse.js</title>
+    <meta 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="description" content="Converse.js: A free chat client for your website" />
+    <meta name="author" content="JC Brand" />
+    <meta name="keywords" content="xmpp chat webchat converse.js" />
+    <link rel="shortcut icon" type="image/ico" href="../css/images/favicon.ico"/>
+    <link type="text/css" rel="stylesheet" media="screen" href="../components/bootstrap/dist/css/bootstrap.min.css" />
+    <link type="text/css" rel="stylesheet" media="screen" href="../components/fontawesome/css/font-awesome.min.css" />
+    <link type="text/css" rel="stylesheet" media="screen" href="../css/theme.css" />
+    <link type="text/css" rel="stylesheet" media="screen" href="../css/converse.css" />
+    <script src="../components/requirejs/require.js"></script>
+    <script src="config.js"></script>
+    <script src="../converse.js"></script>
+</head>
+
+<body id="page-top" data-spy="scroll" data-target=".navbar-custom">
+    <nav class="navbar navbar-custom navbar-fixed-top" role="navigation">
+        <div class="container">
+            <div class="navbar-header page-scroll">
+                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-main-collapse">
+                    <i class="fa fa-bars"></i>
+                </button>
+            </div>
+            <div class="collapse navbar-collapse navbar-right navbar-main-collapse">
+                <ul class="nav navbar-nav"><li> <a href="/docs/html/index.html">Documentation</a> </li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+
+    <section class="intro">
+        <div class="intro-body">
+            <div class="container">
+                <div class="row">
+                    <div class="col-md-8 col-md-offset-2">
+                        <h1 class="brand-heading"><i class="icon-conversejs"></i>Converse.js</h1>
+                        <p class="intro-text">Anonymous login demo</p>
+                        <p class="intro-text">
+                            Converse.js will only work on this page if you have 
+                            <a href="https://conversejs.org/docs/html/development.html">set up the development environment</a>.
+                        </p>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </section>
+</body>
+
+<script>
+    require(['converse'], function (converse) {
+        converse.initialize({
+            authentication: 'anonymous',
+            auto_login: true,
+            auto_join_rooms: [
+                'anonymous@conference.nomnom.im',
+            ],
+            notify_all_room_messages: [
+                'anonymous@conference.nomnom.im',
+            ],
+            bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
+            jid: 'nomnom.im',
+            keepalive: true,
+            play_sounds: true,
+            show_controlbox_by_default: true,
+            strict_plugin_dependencies: false,
+            debug: true
+        });
+    });
+</script>
+</html>

+ 220 - 0
demo/config.js

@@ -0,0 +1,220 @@
+// TODO: for now a quick copy/paste from ../config.js, but ideally we want to
+// avoid this duplication. Perhaps a require call to ../config.js? Not yet sure
+// what to do here.
+
+var config;
+if (typeof(require) === 'undefined') {
+    /* XXX: Hack to work around r.js's stupid parsing.
+     * We want to save the configuration in a variable so that we can reuse it in
+     * tests/main.js.
+     */
+    require = { // jshint ignore:line
+        config: function (c) {
+            config = c;
+        }
+    };
+}
+
+require.config({
+    baseUrl: '..',
+    paths: {
+        "backbone":                 "components/backbone/backbone",
+        "backbone.browserStorage":  "components/backbone.browserStorage/backbone.browserStorage",
+        "backbone.overview":        "components/backbone.overview/backbone.overview",
+        "eventemitter":             "components/otr/build/dep/eventemitter",
+        "jquery":                   "components/jquery/dist/jquery",
+        "jquery-private":           "src/jquery-private",
+        "jquery.browser":           "components/jquery.browser/dist/jquery.browser",
+        "jquery.easing":            "components/jquery-easing-original/index",          // XXX: Only required for https://conversejs.org website
+        "moment":                   "components/momentjs/moment",
+        "strophe":                  "components/strophejs/src/wrapper",
+        "strophe-base64":           "components/strophejs/src/base64",
+        "strophe-bosh":             "components/strophejs/src/bosh",
+        "strophe-core":             "components/strophejs/src/core",
+        "strophe-md5":              "components/strophejs/src/md5",
+        "strophe-polyfill":         "components/strophejs/src/polyfills",
+        "strophe-sha1":             "components/strophejs/src/sha1",
+        "strophe-utils":            "components/strophejs/src/utils",
+        "strophe-websocket":        "components/strophejs/src/websocket",
+        "strophe.disco":            "components/strophejs-plugins/disco/strophe.disco",
+        "strophe.ping":             "src/strophe.ping",
+        "strophe.rsm":              "components/strophejs-plugins/rsm/strophe.rsm",
+        "strophe.vcard":            "src/strophe.vcard",
+        "text":                     'components/requirejs-text/text',
+        "tpl":                      'components/requirejs-tpl-jcbrand/tpl',
+        "typeahead":                "components/typeahead.js/index",
+        "underscore":               "components/underscore/underscore",
+        "utils":                    "src/utils",
+        "polyfill":                 "src/polyfill",
+        
+        // Converse
+        "converse-api":             "src/converse-api",
+        "converse-chatview":        "src/converse-chatview",
+        "converse-controlbox":      "src/converse-controlbox",
+        "converse-core":            "src/converse-core",
+        "converse-dragresize":      "src/converse-dragresize",
+        "converse-headline":        "src/converse-headline",
+        "converse-mam":             "src/converse-mam",
+        "converse-minimize":        "src/converse-minimize",
+        "converse-muc":             "src/converse-muc",
+        "converse-notification":    "src/converse-notification",
+        "converse-otr":             "src/converse-otr",
+        "converse-ping":            "src/converse-ping",
+        "converse-pluggable":       "src/converse-pluggable",
+        "converse-register":        "src/converse-register",
+        "converse-rosterview":      "src/converse-rosterview",
+        "converse-templates":       "src/converse-templates",
+        "converse-vcard":           "src/converse-vcard",
+
+        // Off-the-record-encryption
+        "bigint":               "src/bigint",
+        "crypto":               "src/crypto",
+        "crypto.aes":           "components/otr/vendor/cryptojs/aes",
+        "crypto.cipher-core":   "components/otr/vendor/cryptojs/cipher-core",
+        "crypto.core":          "components/otr/vendor/cryptojs/core",
+        "crypto.enc-base64":    "components/otr/vendor/cryptojs/enc-base64",
+        "crypto.evpkdf":        "components/crypto-js-evanvosberg/src/evpkdf",
+        "crypto.hmac":          "components/otr/vendor/cryptojs/hmac",
+        "crypto.md5":           "components/crypto-js-evanvosberg/src/md5",
+        "crypto.mode-ctr":      "components/otr/vendor/cryptojs/mode-ctr",
+        "crypto.pad-nopadding": "components/otr/vendor/cryptojs/pad-nopadding",
+        "crypto.sha1":          "components/otr/vendor/cryptojs/sha1",
+        "crypto.sha256":        "components/otr/vendor/cryptojs/sha256",
+        "salsa20":              "components/otr/build/dep/salsa20",
+        "otr":                  "src/otr",
+
+        // Locales paths
+        "locales":   "src/locales",
+        "jed":       "components/jed/jed",
+        "af":        "locale/af/LC_MESSAGES/converse.json",
+        "ca":        "locale/ca/LC_MESSAGES/converse.json",
+        "de":        "locale/de/LC_MESSAGES/converse.json",
+        "en":        "locale/en/LC_MESSAGES/converse.json",
+        "es":        "locale/es/LC_MESSAGES/converse.json",
+        "fr":        "locale/fr/LC_MESSAGES/converse.json",
+        "he":        "locale/he/LC_MESSAGES/converse.json",
+        "hu":        "locale/hu/LC_MESSAGES/converse.json",
+        "id":        "locale/id/LC_MESSAGES/converse.json",
+        "it":        "locale/it/LC_MESSAGES/converse.json",
+        "ja":        "locale/ja/LC_MESSAGES/converse.json",
+        "nb":        "locale/nb/LC_MESSAGES/converse.json",
+        "nl":        "locale/nl/LC_MESSAGES/converse.json",
+        "pl":        "locale/pl/LC_MESSAGES/converse.json",
+        "pt_BR":     "locale/pt_BR/LC_MESSAGES/converse.json",
+        "ru":        "locale/ru/LC_MESSAGES/converse.json",
+        "uk":        "locale/uk/LC_MESSAGES/converse.json",
+        "zh":        "locale/zh/LC_MESSAGES/converse.json",
+
+        "moment_with_locales": "src/moment_locales",
+        'moment_af':        "components/momentjs/locale/af",
+        'moment_de':        "components/momentjs/locale/de",
+        'moment_es':        "components/momentjs/locale/es",
+        'moment_fr':        "components/momentjs/locale/fr",
+        'moment_he':        "components/momentjs/locale/he",
+        'moment_hu':        "components/momentjs/locale/hu",
+        'moment_id':        "components/momentjs/locale/id",
+        'moment_it':        "components/momentjs/locale/it",
+        'moment_ja':        "components/momentjs/locale/ja",
+        'moment_nb':        "components/momentjs/locale/nb",
+        'moment_nl':        "components/momentjs/locale/nl",
+        'moment_pl':        "components/momentjs/locale/pl",
+        'moment_pt-br':     "components/momentjs/locale/pt-br",
+        'moment_ru':        "components/momentjs/locale/ru",
+        'moment_uk':        "components/momentjs/locale/uk",
+        'moment_zh':        "components/momentjs/locale/zh-cn",
+
+        // Templates
+        "action":                   "src/templates/action",
+        "add_contact_dropdown":     "src/templates/add_contact_dropdown",
+        "add_contact_form":         "src/templates/add_contact_form",
+        "change_status_message":    "src/templates/change_status_message",
+        "chat_status":              "src/templates/chat_status",
+        "chatarea":                 "src/templates/chatarea",
+        "chatbox":                  "src/templates/chatbox",
+        "chatroom":                 "src/templates/chatroom",
+        "chatroom_form":            "src/templates/chatroom_form",
+        "chatroom_password_form":   "src/templates/chatroom_password_form",
+        "chatroom_nickname_form":   "src/templates/chatroom_nickname_form",
+        "chatroom_sidebar":         "src/templates/chatroom_sidebar",
+        "chatrooms_tab":            "src/templates/chatrooms_tab",
+        "chats_panel":              "src/templates/chats_panel",
+        "choose_status":            "src/templates/choose_status",
+        "contacts_panel":           "src/templates/contacts_panel",
+        "contacts_tab":             "src/templates/contacts_tab",
+        "controlbox":               "src/templates/controlbox",
+        "controlbox_toggle":        "src/templates/controlbox_toggle",
+        "field":                    "src/templates/field",
+        "form_captcha":             "src/templates/form_captcha",
+        "form_checkbox":            "src/templates/form_checkbox",
+        "form_input":               "src/templates/form_input",
+        "form_select":              "src/templates/form_select",
+        "form_textarea":            "src/templates/form_textarea",
+        "form_username":            "src/templates/form_username",
+        "group_header":             "src/templates/group_header",
+        "info":                     "src/templates/info",
+        "login_panel":              "src/templates/login_panel",
+        "login_tab":                "src/templates/login_tab",
+        "message":                  "src/templates/message",
+        "new_day":                  "src/templates/new_day",
+        "occupant":                 "src/templates/occupant",
+        "pending_contact":          "src/templates/pending_contact",
+        "pending_contacts":         "src/templates/pending_contacts",
+        "register_panel":           "src/templates/register_panel",
+        "register_tab":             "src/templates/register_tab",
+        "registration_form":        "src/templates/registration_form",
+        "registration_request":     "src/templates/registration_request",
+        "requesting_contact":       "src/templates/requesting_contact",
+        "requesting_contacts":      "src/templates/requesting_contacts",
+        "room_description":         "src/templates/room_description",
+        "room_item":                "src/templates/room_item",
+        "room_panel":               "src/templates/room_panel",
+        "roster":                   "src/templates/roster",
+        "roster_item":              "src/templates/roster_item",
+        "search_contact":           "src/templates/search_contact",
+        "select_option":            "src/templates/select_option",
+        "status_option":            "src/templates/status_option",
+        "toggle_chats":             "src/templates/toggle_chats",
+        "toolbar":                  "src/templates/toolbar",
+        "toolbar_otr":              "src/templates/toolbar_otr",
+        "trimmed_chat":             "src/templates/trimmed_chat",
+        "vcard":                    "src/templates/vcard",
+        "chatbox_minimize":         "src/templates/chatbox_minimize"
+    },
+
+    map: {
+        // '*' means all modules will get 'jquery-private'
+        // for their 'jquery' dependency.
+        '*': { 'jquery': 'jquery-private' },
+        // 'jquery-private' wants the real jQuery module
+        // though. If this line was not here, there would
+        // be an unresolvable cyclic dependency.
+        'jquery-private': { 'jquery': 'jquery' }
+    },
+
+    tpl: {
+        // Configuration for requirejs-tpl
+        // Use Mustache style syntax for variable interpolation
+        templateSettings: {
+            evaluate : /\{\[([\s\S]+?)\]\}/g,
+            interpolate : /\{\{([\s\S]+?)\}\}/g
+        }
+    },
+
+    // define module dependencies for modules not using define
+    shim: {
+        'crypto.aes':           { deps: ['crypto.cipher-core'] },
+        'crypto.cipher-core':   { deps: ['crypto.enc-base64', 'crypto.evpkdf'] },
+        'crypto.enc-base64':    { deps: ['crypto.core'] },
+        'crypto.evpkdf':        { deps: ['crypto.md5'] },
+        'crypto.hmac':          { deps: ['crypto.core'] },
+        'crypto.md5':           { deps: ['crypto.core'] },
+        'crypto.mode-ctr':      { deps: ['crypto.cipher-core'] },
+        'crypto.pad-nopadding': { deps: ['crypto.cipher-core'] },
+        'crypto.sha1':          { deps: ['crypto.core'] },
+        'crypto.sha256':        { deps: ['crypto.core'] },
+        'bigint':               { deps: ['crypto'] },
+        'strophe.ping':         { deps: ['strophe'] },
+        'strophe.register':     { deps: ['strophe'] },
+        'strophe.vcard':        { deps: ['strophe'] }
+    }
+});

+ 1 - 0
dev.html

@@ -14,6 +14,7 @@
     <link type="text/css" rel="stylesheet" media="screen" href="css/theme.css" />
     <link type="text/css" rel="stylesheet" media="screen" href="css/converse.css" />
     <script src="components/requirejs/require.js"></script>
+    <script src="config.js"></script>
     <script src="converse.js"></script>
 </head>
 

+ 1 - 0
tests.html

@@ -8,6 +8,7 @@
     <link rel="stylesheet" type="text/css" href="components/jasmine/src/html/jasmine.css">
     <link type="text/css" rel="stylesheet" media="screen" href="css/theme.css" />
     <link type="text/css" rel="stylesheet" media="screen" href="css/converse.css" />
+    <script src="config.js"></script>
     <script src="converse.js"></script>
     <script data-main="tests/main" src="components/requirejs/require.js"></script>
 </head>