Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
e9c1d175
Commit
e9c1d175
authored
Sep 04, 2017
by
JC Brand
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:jcbrand/converse.js
parents
6786d1b7
38e6012f
Changes
24
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
271 additions
and
241 deletions
+271
-241
css/inverse.css
css/inverse.css
+3
-0
docs/source/_static/style.css
docs/source/_static/style.css
+22
-0
docs/source/_templates/localtoc.html
docs/source/_templates/localtoc.html
+13
-0
docs/source/builds.rst
docs/source/builds.rst
+1
-1
docs/source/conf.py
docs/source/conf.py
+2
-2
docs/source/configuration.rst
docs/source/configuration.rst
+5
-9
docs/source/developer_api.rst
docs/source/developer_api.rst
+3
-7
docs/source/developer_guidelines.rst
docs/source/developer_guidelines.rst
+2
-6
docs/source/documentation.rst
docs/source/documentation.rst
+0
-4
docs/source/events.rst
docs/source/events.rst
+0
-4
docs/source/features.rst
docs/source/features.rst
+3
-7
docs/source/index.rst
docs/source/index.rst
+1
-1
docs/source/manual.rst
docs/source/manual.rst
+0
-4
docs/source/other_frameworks.rst
docs/source/other_frameworks.rst
+0
-4
docs/source/plugin_development.rst
docs/source/plugin_development.rst
+199
-159
docs/source/quickstart.rst
docs/source/quickstart.rst
+3
-3
docs/source/security.rst
docs/source/security.rst
+1
-1
docs/source/setup.rst
docs/source/setup.rst
+0
-4
docs/source/style_guide.rst
docs/source/style_guide.rst
+3
-7
docs/source/theming.rst
docs/source/theming.rst
+1
-5
docs/source/translations.rst
docs/source/translations.rst
+2
-6
docs/source/troubleshooting.rst
docs/source/troubleshooting.rst
+2
-6
index.html
index.html
+1
-1
sass/inverse/_chatbox.scss
sass/inverse/_chatbox.scss
+4
-0
No files found.
css/inverse.css
View file @
e9c1d175
...
...
@@ -1949,6 +1949,9 @@ body {
line-height
:
22px
;
}
#conversejs
.chatbox
.chat-body
.chat-message
.chat-msg-content
{
line-height
:
22px
;
}
#conversejs
.chatbox
.chat-body
.chat-message
.chat-msg-content
.emojione
{
height
:
22px
;
margin-bottom
:
-5.5px
;
}
#conversejs
.chatbox
.chat-content
{
padding
:
0
1em
1em
1em
;
border-top-left-radius
:
7px
;
...
...
docs/source/_static/style.css
View file @
e9c1d175
...
...
@@ -28,6 +28,28 @@ h5 {
margin-right
:
0.5em
;
}
.nav-header
{
font-weight
:
bold
;
font-size
:
110%
;
}
.sidebar-title
{
padding-left
:
15px
;
}
#sidebar
>
.nav-list
{
height
:
100vh
;
overflow-y
:
scroll
;
}
.bs-sidenav
.nav
.nav
>
li
>
a
{
font-size
:
100%
;
}
.bs-sidenav
.nav
.nav
.nav
>
li
>
a
{
font-size
:
90%
;
color
:
gray
;
}
/*
Copyright (c) 2012 Terrence Ryan
...
...
docs/source/_templates/localtoc.html
0 → 100644
View file @
e9c1d175
{#
basic/localtoc.html
~~~~~~~~~~~~~~~~~~~
Sphinx sidebar template: local table of contents.
:copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
#}
{%- if display_toc %}
<h3
class=
"sidebar-title"
><a
href=
"{{ pathto(master_doc) }}"
>
{{ _('Table Of Contents') }}
</a></h3>
{{ toc }}
{%- endif %}
docs/source/builds.rst
View file @
e9c1d175
...
...
@@ -47,7 +47,7 @@ This command does the following:
* Also, the CSS files in the ``./css`` directory will be minified.
The Java
s
cript build files are contained in the ``./dist`` directory:
The Java
S
cript build files are contained in the ``./dist`` directory:
.. code-block:: bash
...
...
docs/source/conf.py
View file @
e9c1d175
...
...
@@ -41,7 +41,7 @@ master_doc = 'index'
# General information about the project.
project
=
u'Converse.js'
copyright
=
u'201
4
, JC Brand'
copyright
=
u'201
7
, JC Brand'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
...
...
@@ -177,7 +177,7 @@ html_favicon = "_static/favicon.ico"
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {
}
html_sidebars
=
{
'**'
:
[
'localtoc.html'
,
'sourcelink.html'
,
'searchbox.html'
]
}
# Additional templates that should be rendered to pages, maps page names to
# template names.
...
...
docs/source/configuration.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
Configuration
=============
.. contents:: Table of Contents
:depth: 2
:local:
The included minified JS and CSS files can be used for demoing or testing, but
you'll want to configure *Converse.js* to suit your needs before you deploy it
on your website.
...
...
@@ -261,7 +257,7 @@ If ``authentication`` is set to ``anonymous``, then you will also need to provid
server's domain via the `jid`_ setting.
This is a useful setting if you'd like to create a custom login form in your
website. You'll need to write some Java
s
cript to accept that custom form's
website. You'll need to write some Java
S
cript to accept that custom form's
login credentials, then you can pass those credentials (``jid`` and
``password``) to ``converse.initialize`` to start converse.js and log the user
into their XMPP account.
...
...
@@ -1341,7 +1337,7 @@ xhr_custom_status
* Default: ``false``
.. note::
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
s
cript and XML).
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
S
cript and XML).
This option will let converse.js make an AJAX POST with your changed custom chat status to a
remote server.
...
...
@@ -1350,7 +1346,7 @@ xhr_custom_status_url
---------------------
.. note::
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
s
cript and XML).
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
S
cript and XML).
* Default: Empty string
...
...
@@ -1367,7 +1363,7 @@ xhr_user_search
* Default: ``false``
.. note::
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
s
cript and XML).
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
S
cript and XML).
There are two ways to add users.
...
...
@@ -1392,7 +1388,7 @@ xhr_user_search_url
-------------------
.. note::
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
s
cript and XML).
XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Java
S
cript and XML).
* Default: Empty string
...
...
docs/source/developer_api.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
The converse.js developer API
=============================
.. contents:: Table of Contents
:depth: 2
:local:
.. note:: The API documented here is available in Converse.js 0.8.4 and higher.
Earlier versions of Converse.js might have different API methods or none at all.
...
...
@@ -50,7 +46,7 @@ Public API methods
==================
Publich API methods are those methods that are accessible on the global
``window.converse`` object. They are public, because any Java
s
cript in the page
``window.converse`` object. They are public, because any Java
S
cript in the page
can call them. Public methods therefore don't expose any sensitive or closured
data. To do that, you'll need to create a plugin, which has access to the
private API method.
...
...
@@ -325,7 +321,7 @@ room under the ``with`` key.
The ``start`` and ``end`` parameters are used to query for messages
within a certain timeframe. The passed in date values may either be ISO8601
formatted date strings, or Java
s
cript Date objects.
formatted date strings, or Java
S
cript Date objects.
.. code-block:: javascript
...
...
@@ -1070,7 +1066,7 @@ Example:
The **listen** grouping
-----------------------
Converse.js emits events to which you can subscribe from your own Java
s
cript.
Converse.js emits events to which you can subscribe from your own Java
S
cript.
Concerning events, the following methods are available under the "listen"
grouping:
...
...
docs/source/developer_guidelines.rst
View file @
e9c1d175
...
...
@@ -5,11 +5,7 @@
Developer guidelines
====================
.. contents:: Table of Contents
:depth: 2
:local:
If you want to work with the non-minified Javascript and CSS files you'll soon
If you want to work with the non-minified JavaScript and CSS files you'll soon
notice that there are references to a missing *node_modules* directory.
Please follow the instructions below to create these directories and fetch Converse's
3rd-party dependencies.
...
...
@@ -97,7 +93,7 @@ Without AMD and require.js
Converse.js can also be used without require.js. If you for some reason prefer
to use it this way, please refer to
`non_amd.html <https://github.com/jcbrand/converse.js/blob/master/non_amd.html>`_
for an example of how and in what order all the Java
s
cript files that converse.js
for an example of how and in what order all the Java
S
cript files that converse.js
depends on need to be loaded.
Brief description of converse.js's dependencies
...
...
docs/source/documentation.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
Writing Documentation
=====================
.. contents:: Table of Contents
:depth: 2
:local:
.. note:: Contributions to the documentation are much appreciated.
What is used to write the documentation?
...
...
docs/source/events.rst
View file @
e9c1d175
...
...
@@ -7,10 +7,6 @@
Events and promises
===================
.. contents:: Table of Contents
:depth: 2
:local:
Converse.js and its plugins emit various events which you can listen to via the
:ref:`listen-grouping`.
...
...
docs/source/features.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
Features
========
.. contents:: Table of Contents
:depth: 2
:local:
Off-the-record encryption
=========================
...
...
@@ -21,7 +17,7 @@ The OTR protocol not only **encrypts your messages**, it provides ways to
**plausible deniability** and **perfect forward secrecy** by generating
new encryption keys for each conversation.
In its current state, Java
s
cript cryptography is fraught with dangers and
In its current state, Java
S
cript cryptography is fraught with dangers and
challenges that make it impossible to reach the same standard of security that
is available with native "desktop" software.
...
...
@@ -29,8 +25,8 @@ This is due to its runtime malleability, the way it is "installed" (e.g.
served) and the browser's lack of cryptographic primitives needed to implement
secure crypto.
For harsh but fairly valid criticism of Java
s
cript cryptography, read:
`Java
s
cript Cryptography Considered Harmful <http://www.matasano.com/articles/javascript-cryptography/>`_.
For harsh but fairly valid criticism of Java
S
cript cryptography, read:
`Java
S
cript Cryptography Considered Harmful <http://www.matasano.com/articles/javascript-cryptography/>`_.
To get an idea on how this applies to OTR support in Converse.js, please read
`my thoughts on it <https://opkode.com/media/blog/2013/11/11/conversejs-otr-support>`_.
...
...
docs/source/index.rst
View file @
e9c1d175
...
...
@@ -23,7 +23,7 @@ Introduction
============
Converse.js is a free and open-source `XMPP <http://xmpp.org/about-xmpp/>`_
chat client written in Java
s
cript which can be tightly integrated into any website.
chat client written in Java
S
cript which can be tightly integrated into any website.
The benefit of using converse.js as opposed to relying on a SaaS
(software-as-a-service) solution, is that your users can have a much more
...
...
docs/source/manual.rst
View file @
e9c1d175
...
...
@@ -10,10 +10,6 @@ The Converse.js User Manual
<br />
.. contents:: Table of Contents
:depth: 2
:local:
.. figure:: images/homepage.jpg
:align: right
:alt: The converse.js website
...
...
docs/source/other_frameworks.rst
View file @
e9c1d175
...
...
@@ -5,10 +5,6 @@
Integrating converse.js into other frameworks
=============================================
.. contents:: Table of Contents
:depth: 2
:local:
Angular.js
----------
...
...
docs/source/plugin_development.rst
View file @
e9c1d175
...
...
@@ -7,36 +7,68 @@
Writing a plugin
================
.. contents:: Table of Contents
:depth: 2
:local:
Introduction
------------
Developers are able to extend and override the objects, functions and the
Backbone models and views that make up converse.js by means of writing plugins.
Converse.js is exposes a plugin architecture which allows developers to modify
and extend its functionality.
Specifically, plugins enable developers to extend and override existing objects,
functions and `Backbone <http://backbonejs.org/>`_ models and views that make up
Converse.js, and also give them the ability to write new models and views.
Various core features of Converse.js, such as
`Message Archive Management <https://xmpp.org/extensions/xep-0313.html>`_ and
`Group chats <https://xmpp.org/extensions/xep-0045.html>`_ are implemented
as plugins, thereby showing their power and flexibility.
Converse.js uses `pluggable.js <https://github.com/jcbrand/pluggable.js/>`_ as
its plugin architecture.
To understand how this plugin architecture works, please read the
To
more deeply
understand how this plugin architecture works, please read the
`pluggable.js documentation <https://jcbrand.github.io/pluggable.js/>`_
and to understand its inner workins, please refer to the `annotated source code
<https://jcbrand.github.io/pluggable.js/docs/pluggable.html>`_.
Below you'll find an example plugin. Because convers.js is only Javascript,
HTML and CSS (with no backend code required like PHP, Python or Ruby) it runs
fine in JSFiddle.
Trying out a plugin in JSFiddle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Because Converse.js consists only of JavaScript, HTML and CSS (with no backend
code required like PHP, Python or Ruby) it runs fine in JSFiddle.
Here's an Fiddle with a Converse.js plugin that calls `alert` once it gets
initialized and also when a chat message gets rendered:
https://jsfiddle.net/4drfaok0/15/
Generating a plugin with Yeoman
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here's an Fiddle with a plugin that calls `alert` when the plugin gets
initialized and when a message gets rendered: https://jsfiddle.net/4drfaok0/15/
The rest of this document explains how to write a plugin for Converse.js, and
ends with a documented example of a plugin.
You can use a `Yeoman <http://yeoman.io/>`_ code generator, called
`generator-conversejs <https://github.com/jcbrand/generator-conversejs>`_ to
generate plugin scaffolding code, which you can use as a starting point and
basis for writing your plugin.
Please refer to the `generator-conversejs <https://github.com/jcbrand/generator-conversejs>`_
README for information on how to use it.
Registering a plugin
--------------------
You register a converse.js plugin as follows:
Plugins need to be registered (and whitelisted) before they can be loaded and
initialized.
You register a converse.js plugin by calling ``converse.plugins.add``.
The plugin itself is a JavaScript object which usually has at least an
``initialize`` method, which gets called at the end of the
``converse.initialize`` method which is the top-level method that gets called
by the website to configure and initialize Converse.js itself.
Here's an example code snippet:
.. code-block:: javascript
...
...
@@ -56,7 +88,6 @@ You register a converse.js plugin as follows:
`converse.initialize` is called. Otherwise the plugin will never get
registered and never get called.
Whitelisting of plugins
-----------------------
...
...
@@ -234,7 +265,7 @@ A full example plugin
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as a module called "myplugin"
define("myplugin
", ["converse"], factory);
define("<%= name %>
", ["converse"], factory);
} else {
// Browser globals. If you're not using a module loader such as require.js,
// then this line below executes. Make sure that your plugin's <script> tag
...
...
@@ -256,121 +287,130 @@ A full example plugin
moment = converse.env.moment;
// The following line registers your plugin.
converse.plugins.add('myplugin', {
initialize: function () {
// Converse.js's plugin mechanism will call the initialize
// method on any plugin (if it exists) as soon as the plugin has
// been loaded.
converse.plugins.add("<%= name %>", {
/* Optional dependencies are other plugins which might be
* overridden or relied upon, and therefore need to be loaded before
* this plugin. They are called "optional" because they might not be
* available, in which case any overrides applicable to them will be
* ignored.
*
* NB: These plugins need to have already been loaded via require.js.
*
* It's possible to make optional dependencies non-optional.
* If the setting "strict_plugin_dependencies" is set to true,
* an error will be raised if the plugin is not found.
*/
'optional_dependencies': [],
/* Converse.js's plugin mechanism will call the initialize
* method on any plugin (if it exists) as soon as the plugin has
* been loaded.
*/
'initialize': function () {
/* Inside this method, you have access to the private
* `_converse` object.
*/
var _converse = this._converse;
// Inside this method, you have access to the closured
// _converse object, from which
you can get any configuration
//
options that the user might have passed in via
// converse.initialize
. These values are stored in the
//
"user_settings" attribute.
// We
can also specify new configuration settings for this
//
plugin, or override the default values of existing
//
configuration settings. This is done like so:
_converse.log("The <%= name %> plugin is being initialized");
/* From the `_converse` object
you can get any configuration
*
options that the user might have passed in via
* `converse.initialize`
. These values are stored in the
*
"user_settings" attribute.
*
* You
can also specify new configuration settings for this
*
plugin, or override the default values of existing
*
configuration settings. This is done like so:
*/
_converse.api.settings.update({
'initialize_message': 'Initialized', // New configuration setting
'auto_subscribe': true, // New default value for an
// existing "core" configuration setting
'initialize_message': 'Initializing <%= name %>!'
});
// The user can then pass in values for the configuration
// settings when `converse.initialize` gets called.
// For example:
//
// converse.initialize({
// "initialize_message": "My plugin has been initialized"
// });
//
// And the configuration setting is then available via the
// `user_settings` attribute:
// alert(this._converse.user_settings.initialize_message);
// Besides `_converse.api.settings.update`, there is also a
// `_converse.api.promises.add` method, which allows you to
// add new promises that your plugin is obligated to fulfill.
// This method takes a string or a list of strings which
// represent the promise names.
_converse.api.promises.add('operationCompleted');
// Your plugin should then, when appropriate, resolve the
// promise by calling `_converse.api.emit`, which will also
// emit an event with the same name as the promise.
// For example:
// _converse.api.emit('operationCompleted');
//
// Other plugins can then either listen for the event
// `operationCompleted` like so:
// `_converse.api.listen.on('operationCompleted', function { ... });`
//
// or they can wait for the promise to be fulfilled like so:
// `_converse.api.waitUntil('operationCompleted', function { ... });`
/* The user can then pass in values for the configuration
* settings when `converse.initialize` gets called.
* For example:
*
* converse.initialize({
* "initialize_message": "My plugin has been initialized"
* });
*
* And the configuration setting is then available via the
* `user_settings` attribute:
*/
alert(this._converse.user_settings.initialize_message);
/* Besides `_converse.api.settings.update`, there is also a
* `_converse.api.promises.add` method, which allows you to
* add new promises that your plugin is obligated to fulfill.
*
* This method takes a string or a list of strings which
* represent the promise names:
*
* _converse.api.promises.add('myPromise');
*
* Your plugin should then, when appropriate, resolve the
* promise by calling `_converse.api.emit`, which will also
* emit an event with the same name as the promise.
* For example:
*
* _converse.api.emit('operationCompleted');
*
* Other plugins can then either listen for the event
* `operationCompleted` like so:
*
* _converse.api.listen.on('operationCompleted', function { ... });
*
* or they can wait for the promise to be fulfilled like so:
*
* _converse.api.waitUntil('operationCompleted', function { ... });
*/
},
// Optional dependencies are other plugins which might be
// overridden or relied upon, and therefore need to be loaded before
// this plugin. They are called "optional" because they might not be
// available, in which case any overrides applicable to them will be
// ignored.
// It's possible however to make optional dependencies non-optional.
// If the setting "strict_plugin_dependencies" is set to true,
// an error will be raised if the plugin is not found.
//
// NB: These plugins need to have already been loaded via require.js.
optional_dependencies: [],
overrides: {
// If you want to override some function or a Backbone model or
// view defined elsewhere in converse.js, then you do that under
// this "overrides" namespace.
// For example, the inner protected *_converse* object has a
// method "onConnected". You can override that method as follows:
onConnected: function () {
/* If you want to override some function or a Backbone model or
* view defined elsewhere in converse.js, then you do that under
* the "overrides" namespace.
*/
'overrides': {
/* For example, the private *_converse* object has a
* method "onConnected". You can override that method as follows:
*/
'onConnected': function () {
// Overrides the onConnected method in converse.js
// Top-level functions in "overrides" are bound to the
// inner "_converse" object.
var _converse = this;
// Your custom code comes here.
// ...
// Your custom code can come here ...
// You can access the original function being overridden
// via the __super__ attribute.
// Make sure to pass on the arguments supplied to this
// function and also to apply the proper "this" object.
_converse.__super__.onConnected.apply(this, arguments);
// Your custom code can come here ...
},
XMPPStatus: {
// Override converse.js's XMPPStatus Backbone model so that we can override the
// function that sends out the presence stanza.
sendPresence: function (type, status_message, jid) {
/* Override converse.js's XMPPStatus Backbone model so that we can override the
* function that sends out the presence stanza.
*/
'XMPPStatus': {
'sendPresence': function (type, status_message, jid) {
// The "_converse" object is available via the __super__
// attribute.
var _converse = this.__super__._converse;
// Custom code can come here
// ...
// Custom code can come here ...
// You can call the original overridden method, by
// accessing it via the __super__ attribute.
// When calling it, you need to apply the proper
// context as reference by the "this" variable.
this.__super__.sendPresence.apply(this, arguments);
// Custom code can come here ...
}
}
}
...
...
docs/source/quickstart.rst
View file @
e9c1d175
...
...
@@ -13,7 +13,7 @@ Use the content delivery network
--------------------------------
Converse.js has a `CDN <https://en.wikipedia.org/wiki/Content_delivery_network>`_, provided by `KeyCDN <http://keycdn.com/>`_,
which hosts its Java
s
cript and CSS files.
which hosts its Java
S
cript and CSS files.
The latest versions of these files are available at these URLs:
...
...
@@ -44,7 +44,7 @@ Initializing Converse.js
You'll then need to initialize Converse.js with configuration settings relevant to your requirements.
Refer to the :ref:`configuration-settings` section for info on all the available configuration settings.
To quickly get started, you can put the following Java
s
cript code at the
To quickly get started, you can put the following Java
S
cript code at the
bottom of your page (after the closing *</body>* element)::
<script>
...
...
@@ -75,7 +75,7 @@ for an example of this build being used. There's an additional CSS file called
``mobile.min.css`` which should be used with the mobile build.
When you load `conversejs.org <https://conversejs.org>`_ with a mobile device
then the mobile Java
s
cript build and its CSS will be used.
then the mobile Java
S
cript build and its CSS will be used.
Excluding 3rd party dependencies
--------------------------------
...
...
docs/source/security.rst
View file @
e9c1d175
...
...
@@ -57,7 +57,7 @@ Addititional measures
Besides the measures mentioned above, integrators and hosts can also take
further security precautions.
The most effective is to avoid serving untrusted 3rd party Java
s
cript (e.g.
The most effective is to avoid serving untrusted 3rd party Java
S
cript (e.g.
advertisements and analytics).
Another option is to forego the use of a global ``converse`` object (which
...
...
docs/source/setup.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
Setup and integration
=====================
.. contents:: Table of Contents
:depth: 2
:local:
.. _what-you-will-need:
------------------
...
...
docs/source/style_guide.rst
View file @
e9c1d175
...
...
@@ -5,19 +5,15 @@
Software Style Guide
====================
.. contents:: Table of Contents
:depth: 2
:local:
.. note:: Converse.js doesn't yet use any of the new `ES2015
<https://babeljs.io/docs/learn-es2015/>`_ features, because we don't
rely on a transpiler and still support older browsers.
Most of the style guide recommendations here come from Douglas Crockford's book
`Java
s
cript, the good parts <http://shop.oreilly.com/product/9780596517748.do>`_
`Java
S
cript, the good parts <http://shop.oreilly.com/product/9780596517748.do>`_
This style guide is fairly opinionated. Some of these opinions perhaps don't
conform to your expectations on how Java
s
cript code should look like.
conform to your expectations on how Java
S
cript code should look like.
I apologize for that. However, for the sake of sanity, consistency and having
code that is pleasing to the eye, please stick to these guidelines.
...
...
@@ -103,7 +99,7 @@ and method invocations.
Checking for equality
---------------------
Java
s
cript has a strict ``===`` and less strict ``==`` equality operator. The
Java
S
cript has a strict ``===`` and less strict ``==`` equality operator. The
stricter equality operator also does type checking. To avoid subtle bugs when
doing comparisons, always use the strict equality check.
...
...
docs/source/theming.rst
View file @
e9c1d175
...
...
@@ -8,10 +8,6 @@
Theming
=======
.. contents:: Table of Contents
:depth: 2
:local:
Setting up your environment
===========================
...
...
@@ -71,7 +67,7 @@ Creating dist files
===================
Once you've themed converse.js, you'll want to create new minified distribution
files of all the Java
s
cript and CSS.
files of all the Java
S
cript and CSS.
Please refer to the :doc:`builds` section for information on how this is done.
docs/source/translations.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
Translations
============
.. contents:: Table of Contents
:depth: 2
:local:
.. note::
Translations take up a lot of space and will bloat your minified file.
At the time of writing, all the translations add about 50KB of extra data to
...
...
@@ -59,7 +55,7 @@ translated into, do the following
Please make sure to add the following attributes at the top of the file (under
*Content-Transfer-Encoding*). They are required as configuration settings for Jed,
the Java
s
cript translations library that we're using.
the Java
S
cript translations library that we're using.
.. code-block:: po
...
...
@@ -90,7 +86,7 @@ The resulting `.po` file is then what gets translated.
-----------------------------------------------------
Generating a Java
s
cript file from a translations file
Generating a Java
S
cript file from a translations file
-----------------------------------------------------
Unfortunately `Jed <http://slexaxton.github.io/Jed>`_, which we use for
...
...
docs/source/troubleshooting.rst
View file @
e9c1d175
...
...
@@ -6,10 +6,6 @@
Troubleshooting and debugging
=============================
.. contents:: Table of Contents
:depth: 2
:local:
General tips on debugging Converse.js
=====================================
...
...
@@ -42,13 +38,13 @@ more likely on the XMPP server's end (perhaps a misconfiguration?). If they
**are** logged, then there might be a bug or misconfiguration in Converse.js.
Conflicts with other Java
s
cript libraries
Conflicts with other Java
S
cript libraries
=========================================
Problem:
---------
You are using other Java
s
cript libraries (like JQuery plugins), and
You are using other Java
S
cript libraries (like JQuery plugins), and
get errors like these in your browser console::
Uncaught TypeError: Object [object Object] has no method 'xxx' from example.js
...
...
index.html
View file @
e9c1d175
...
...
@@ -12,11 +12,11 @@
<link
type=
"text/css"
rel=
"stylesheet"
media=
"screen"
href=
"css/bootstrap.min.css"
/>
<link
type=
"text/css"
rel=
"stylesheet"
media=
"screen"
href=
"css/font-awesome.min.css"
/>
<link
type=
"text/css"
rel=
"stylesheet"
media=
"screen"
href=
"css/theme.min.css"
/>
<link
type=
"text/css"
rel=
"stylesheet"
media=
"screen"
href=
"css/converse.css"
/>
<script
type=
"text/javascript"
src=
"analytics.js"
></script>
<noscript><p><img
src=
"//stats.opkode.com/piwik.php?idsite=1"
style=
"border:0;"
alt=
""
/></p></noscript>
<script
src=
"src/website.js"
></script>
<
![
if
gte
IE
11
]
>
<link
type=
"text/css"
rel=
"stylesheet"
media=
"screen"
href=
"css/converse.css"
/>
<script
src=
"dist/converse.min.js"
></script>
<
![
endif
]
>
</head>
...
...
sass/inverse/_chatbox.scss
View file @
e9c1d175
...
...
@@ -51,6 +51,10 @@
}
.chat-msg-content
{
line-height
:
$line-height
;
.emojione
{
height
:
$line-height
;
margin-bottom
:
-
$line-height
/
4
;
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment