Search code examples
javascriptxmppchatopenfireconverse.js

Converse.js render into a container


Is it possible to configure Converse.js to render it's boxes into custom div containers instead of adding them to the body of the page?


Solution

  • Yes, you can do this by writing a converse.js plugin in which you override the insertIntoPage method of ChatBoxView.

    Refer to the plugin documentation I linked to above. In short, it would look something like this:

    // The following line registers your plugin.
    converse_api.plugins.add('myplugin', {
    
        overrides: {
            // If you want to override some function or a Backbone model or
            // view defined inside converse, then you do that under this
            // "overrides" namespace.    
            ChatBoxView: {
                insertIntoPage: function (type, status_message, jid) {
                    // XXX Your custom code comes here.
                    // The standard code looks as follows:
                    this.$el.insertAfter(converse.chatboxviews.get("controlbox).$el);
                    return this;
                }
            },
        }
    

    UPDATE: Since recent versions of converse.js, the method to override is instead _ensureElement and not insertIntoPage.