(function (root, factory) { if (typeof define === 'function' && define.amd) { define(["converse"], factory); } else { factory(converse); } }(this, function (converse) { var Strophe, $iq, converse, dayjs, html, _, __, converseConn; converse.plugins.add("directory", { 'dependencies': [], 'initialize': function () { _converse = this._converse; Strophe = converse.env.Strophe; $iq = converse.env.$iq; html = converse.env.html; dayjs = converse.env.dayjs; _ = converse.env._; __ = _converse.__; class DirectoryDialog extends _converse.exports.BaseModal { initialize() { super.initialize(); this.listenTo(this.model, "change", () => this.requestUpdate()); this.addEventListener('shown.bs.modal', () => { if (this.model.get("query")) { this.querySelector('#pade-directory-query').style.display = "none"; this.doDirectory(); } else { this.keyInput = this.querySelector('#pade-directory-query'); this.keyInput.focus(); this.keyInput.addEventListener('keyup', (ev) => { this.keyUp(ev); }); } }); } renderModal() { return html`` } getModalTitle () { return __('Directory'); } keyUp(ev) { if (ev.key === "Enter") { const query = this.querySelector("#pade-directory-query").value.trim(); this.model.set("query", query) this.doDirectory(); } } doDirectory() { const query = this.model.get("query"); if (query != "") { const directoryResults = this.querySelector("#pade-directory-results"); console.debug("doDirectory", query); findUsers(query, function(userList) { displayUsers(userList, directoryResults); }); } } }; _converse.api.elements.define('converse-pade-directory-dialog', DirectoryDialog); _converse.api.listen.on('connected', async function() { converseConn = await _converse.api.connection.get(); }); _converse.api.listen.on('getToolbarButtons', function(toolbar_el, buttons) { let style = "width:18px; height:18px; fill:var(--chat-color);"; if (toolbar_el.model.get("type") === "chatroom") { style = "width:18px; height:18px; fill:var(--muc-color);"; } buttons.push(html` `); return buttons; }); console.debug("directory plugin is ready"); } }); var performDirectory = function(ev) { ev.stopPropagation(); ev.preventDefault(); const model = new converse.env.Model(); model.set({ query: null}); _converse.api.modal.show('converse-pade-directory-dialog', { model }); } async function findUsers(search, callback) { console.debug('findUsers', search); const stanza = $iq({type: 'set', to: "search." + converseConn.domain}).c('query', {xmlns: 'jabber:iq:search'}).c('x').t(search).up().c('email').t(search).up().c('nick').t(search); const response = await _converse.api.sendIQ(stanza); console.debug('findUsers - response', response); var users = []; var items = response.querySelectorAll('query item'); for (var i=0; i" + user.name + "" + user.jid + "" + user.email + ""; } html = html + "" if (users.length == 0) html = "No user found"; directoryResults.innerHTML = "

" + html; setTimeout(function() { var jids = directoryResults.querySelectorAll(".plugin-directory-jid"); for (var i=0; i