(function (root, factory) { define(['converse', 'es6-promise', 'mock', 'wait-until-promise'], factory); }(this, function (converse_api, Promise, mock, waitUntilPromise) { var _ = converse_api.env._; var $msg = converse_api.env.$msg; var $pres = converse_api.env.$pres; var $iq = converse_api.env.$iq; var Strophe = converse_api.env.Strophe; var u = converse_api.env.utils; var utils = {}; if (typeof window.Promise === 'undefined') { waitUntilPromise.setPromiseImplementation(Promise); } utils.waitUntil = waitUntilPromise.default; utils.waitUntilDiscoConfirmed = function (_converse, entity_jid, identities, features) { var IQ_disco, stanza; return utils.waitUntil(function () { IQ_disco = _.filter(_converse.connection.IQ_stanzas, function (iq) { return iq.nodeTree.querySelector('query[xmlns="http://jabber.org/protocol/disco#info"]') && iq.nodeTree.getAttribute('to') === entity_jid; }).pop(); return !_.isUndefined(IQ_disco); }, 300).then(function () { var info_IQ_id = IQ_disco.nodeTree.getAttribute('id'); var stanza = $iq({ 'type': 'result', 'from': entity_jid, 'to': 'dummy@localhost/resource', 'id': info_IQ_id }).c('query', {'xmlns': 'http://jabber.org/protocol/disco#info'}); _.forEach(identities, function (identity) { stanza.c('identity', {'category': 'pubsub', 'type': 'pep'}).up() }); _.forEach(features, function (feature) { stanza.c('feature', {'var': feature}).up(); }); _converse.connection._dataRecv(utils.createRequest(stanza)); }); } utils.createRequest = function (iq) { iq = typeof iq.tree == "function" ? iq.tree() : iq; var req = new Strophe.Request(iq, function() {}); req.getResponse = function () { var env = new Strophe.Builder('env', {type: 'mock'}).tree(); env.appendChild(iq); return env; }; return req; }; utils.closeAllChatBoxes = function (converse) { var i, chatbox; for (i=converse.chatboxes.models.length-1; i>-1; i--) { chatbox = converse.chatboxes.models[i]; converse.chatboxviews.get(chatbox.get('id')).close(); } return this; }; utils.openControlBox = function () { var toggle = document.querySelector(".toggle-controlbox"); if (!u.isVisible(document.querySelector("#controlbox"))) { if (!u.isVisible(toggle)) { u.removeClass('hidden', toggle); } toggle.click(); } return this; }; utils.closeControlBox = function () { var controlbox = document.querySelector("#controlbox"); if (u.isVisible(controlbox)) { var button = controlbox.querySelector(".close-chatbox-button"); if (!_.isNull(button)) { button.click(); } } return this; }; utils.openChatBoxes = function (converse, amount) { var i = 0, jid, views = []; for (i; i