Browse Source

Fix linting errors (no-unused-vars)

JC Brand 5 years ago
parent
commit
8780f7a128
61 changed files with 220 additions and 345 deletions
  1. 0 4
      spec/autocomplete.js
  2. 0 3
      spec/bookmarks.js
  3. 5 13
      spec/chatbox.js
  4. 0 7
      spec/controlbox.js
  5. 2 3
      spec/converse.js
  6. 5 5
      spec/emojis.js
  7. 2 2
      spec/eventemitter.js
  8. 5 9
      spec/http-file-upload.js
  9. 1 2
      spec/mam.js
  10. 52 58
      spec/messages.js
  11. 0 1
      spec/minchats.js
  12. 19 37
      spec/muc.js
  13. 18 19
      spec/muc_messages.js
  14. 2 3
      spec/notification.js
  15. 2 15
      spec/omemo.js
  16. 0 4
      spec/presence.js
  17. 0 2
      spec/profiling.js
  18. 2 6
      spec/protocol.js
  19. 0 1
      spec/push.js
  20. 0 1
      spec/room_registration.js
  21. 1 5
      spec/roomslist.js
  22. 4 8
      spec/roster.js
  23. 4 4
      spec/spoilers.js
  24. 0 4
      spec/user-details-modal.js
  25. 1 1
      spec/utils.js
  26. 2 2
      spec/xmppstatus.js
  27. 0 1
      src/converse-autocomplete.js
  28. 2 2
      src/converse-bookmark-views.js
  29. 2 5
      src/converse-chatboxviews.js
  30. 10 10
      src/converse-controlbox.js
  31. 0 2
      src/converse-fullscreen.js
  32. 6 8
      src/converse-headline.js
  33. 1 2
      src/converse-mam-views.js
  34. 2 2
      src/converse-message-view.js
  35. 4 4
      src/converse-minimize.js
  36. 9 12
      src/converse-muc-views.js
  37. 2 4
      src/converse-oauth.js
  38. 7 10
      src/converse-omemo.js
  39. 2 4
      src/converse-profile.js
  40. 1 2
      src/converse-push.js
  41. 2 3
      src/converse-register.js
  42. 4 4
      src/converse-roomslist.js
  43. 4 8
      src/converse-rosterview.js
  44. 1 4
      src/converse-singleton.js
  45. 0 1
      src/converse-uniview.js
  46. 1 1
      src/headless/converse-bosh.js
  47. 5 5
      src/headless/converse-chatboxes.js
  48. 1 1
      src/headless/converse-core.js
  49. 2 2
      src/headless/converse-emoji.js
  50. 1 1
      src/headless/converse-mam.js
  51. 3 5
      src/headless/converse-muc.js
  52. 1 1
      src/headless/converse-ping.js
  53. 2 3
      src/headless/converse-pubsub.js
  54. 7 6
      src/headless/converse-smacks.js
  55. 1 1
      src/headless/converse-vcard.js
  56. 0 3
      src/headless/i18n.js
  57. 0 1
      src/headless/utils/core.js
  58. 0 1
      src/headless/utils/muc.js
  59. 1 1
      src/templates/profile_modal.html
  60. 7 4
      src/utils/html.js
  61. 2 2
      src/website.js

+ 0 - 4
spec/autocomplete.js

@@ -6,12 +6,8 @@
         ], factory);
         ], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const _ = converse.env._;
-    const $iq = converse.env.$iq;
-    const $msg = converse.env.$msg;
     const $pres = converse.env.$pres;
     const $pres = converse.env.$pres;
     const Strophe = converse.env.Strophe;
     const Strophe = converse.env.Strophe;
-    const u = converse.env.utils;
 
 
     describe("The nickname autocomplete feature", function () {
     describe("The nickname autocomplete feature", function () {
 
 

+ 0 - 3
spec/bookmarks.js

@@ -1,5 +1,3 @@
-/*global waitUntilPromise */
-
 (function (root, factory) {
 (function (root, factory) {
     define([
     define([
         "jasmine",
         "jasmine",
@@ -10,7 +8,6 @@
     "use strict";
     "use strict";
     const $iq = converse.env.$iq,
     const $iq = converse.env.$iq,
          $msg = converse.env.$msg,
          $msg = converse.env.$msg,
-         Backbone = converse.env.Backbone,
          Strophe = converse.env.Strophe,
          Strophe = converse.env.Strophe,
          sizzle = converse.env.sizzle,
          sizzle = converse.env.sizzle,
          _ = converse.env._,
          _ = converse.env._,

+ 5 - 13
spec/chatbox.js

@@ -7,7 +7,6 @@
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
     const _ = converse.env._;
     const _ = converse.env._;
-    const $iq = converse.env.$iq;
     const $msg = converse.env.$msg;
     const $msg = converse.env.$msg;
     const Strophe = converse.env.Strophe;
     const Strophe = converse.env.Strophe;
     const u = converse.env.utils;
     const u = converse.env.utils;
@@ -71,7 +70,7 @@
 
 
                 await _converse.chatboxes.onMessage(msg);
                 await _converse.chatboxes.onMessage(msg);
                 const view = _converse.chatboxviews.get(sender_jid);
                 const view = _converse.chatboxviews.get(sender_jid);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(1);
                 expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(1);
                 expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, '**Mercutio')).toBeTruthy();
                 expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, '**Mercutio')).toBeTruthy();
                 expect(view.el.querySelector('.chat-msg__text').textContent).toBe('is tired');
                 expect(view.el.querySelector('.chat-msg__text').textContent).toBe('is tired');
@@ -115,14 +114,12 @@
                 const online_contacts = _converse.rosterview.el.querySelectorAll('.roster-group .current-xmpp-contact a.open-chat');
                 const online_contacts = _converse.rosterview.el.querySelectorAll('.roster-group .current-xmpp-contact a.open-chat');
                 expect(online_contacts.length).toBe(15);
                 expect(online_contacts.length).toBe(15);
                 let el = online_contacts[0];
                 let el = online_contacts[0];
-                const jid = el.textContent.trim().replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 el.click();
                 el.click();
                 await u.waitUntil(() => document.querySelectorAll("#conversejs .chatbox").length == 2);
                 await u.waitUntil(() => document.querySelectorAll("#conversejs .chatbox").length == 2);
                 expect(_converse.chatboxviews.trimChats).toHaveBeenCalled();
                 expect(_converse.chatboxviews.trimChats).toHaveBeenCalled();
                 online_contacts[1].click();
                 online_contacts[1].click();
                 await u.waitUntil(() => _converse.chatboxes.length == 3);
                 await u.waitUntil(() => _converse.chatboxes.length == 3);
                 el = online_contacts[1];
                 el = online_contacts[1];
-                const new_jid = el.textContent.trim().replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 expect(_converse.chatboxviews.trimChats).toHaveBeenCalled();
                 expect(_converse.chatboxviews.trimChats).toHaveBeenCalled();
                 // Check that new chat boxes are created to the left of the
                 // Check that new chat boxes are created to the left of the
                 // controlbox (but to the right of all existing chat boxes)
                 // controlbox (but to the right of all existing chat boxes)
@@ -233,7 +230,7 @@
 
 
                 await test_utils.waitForRoster(_converse, 'current');
                 await test_utils.waitForRoster(_converse, 'current');
                 const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
-                const chat = await _converse.api.chats.create(sender_jid, {'minimized': true});
+                await _converse.api.chats.create(sender_jid, {'minimized': true});
                 await u.waitUntil(() => _converse.chatboxes.length > 1);
                 await u.waitUntil(() => _converse.chatboxes.length > 1);
                 const chatBoxView = _converse.chatboxviews.get(sender_jid);
                 const chatBoxView = _converse.chatboxviews.get(sender_jid);
                 expect(u.isVisible(chatBoxView.el)).toBeFalsy();
                 expect(u.isVisible(chatBoxView.el)).toBeFalsy();
@@ -257,7 +254,6 @@
                 const view = await test_utils.openChatBoxFor(_converse, contact_jid);
                 const view = await test_utils.openChatBoxFor(_converse, contact_jid);
                 const el = sizzle('a.open-chat:contains("'+view.model.getDisplayName()+'")', _converse.rosterview.el).pop();
                 const el = sizzle('a.open-chat:contains("'+view.model.getDisplayName()+'")', _converse.rosterview.el).pop();
                 await u.waitUntil(() => u.isVisible(el));
                 await u.waitUntil(() => u.isVisible(el));
-                const jid = el.textContent.replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 const textarea = view.el.querySelector('.chat-textarea');
                 const textarea = view.el.querySelector('.chat-textarea');
                 await u.waitUntil(() => u.isVisible(textarea));
                 await u.waitUntil(() => u.isVisible(textarea));
                 textarea.blur();
                 textarea.blur();
@@ -470,7 +466,7 @@
                         keyCode: 13 // Enter
                         keyCode: 13 // Enter
                     };
                     };
                     view.onKeyDown(ev);
                     view.onKeyDown(ev);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     view.onKeyUp(ev);
                     view.onKeyUp(ev);
                     expect(counter.textContent).toBe('200');
                     expect(counter.textContent).toBe('200');
 
 
@@ -758,7 +754,6 @@
                             null, ['rosterGroupsFetched', 'chatBoxesFetched'], {},
                             null, ['rosterGroupsFetched', 'chatBoxesFetched'], {},
                             async function (done, _converse) {
                             async function (done, _converse) {
 
 
-                        let contact, sent_stanza, IQ_id, stanza;
                         await test_utils.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
                         await test_utils.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
                         await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
                         await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
                         await test_utils.waitForRoster(_converse, 'current');
                         await test_utils.waitForRoster(_converse, 'current');
@@ -886,7 +881,6 @@
                             null, ['rosterGroupsFetched', 'chatBoxesFetched'], {},
                             null, ['rosterGroupsFetched', 'chatBoxesFetched'], {},
                             async function (done, _converse) {
                             async function (done, _converse) {
 
 
-                        let contact, sent_stanza, IQ_id, stanza;
                         await test_utils.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
                         await test_utils.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
                         await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
                         await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
                         await test_utils.waitForRoster(_converse, 'current');
                         await test_utils.waitForRoster(_converse, 'current');
@@ -1026,7 +1020,6 @@
                         view.close();
                         view.close();
                         expect(view.model.get('chat_state')).toBe('inactive');
                         expect(view.model.get('chat_state')).toBe('inactive');
                         expect(_converse.connection.send).toHaveBeenCalled();
                         expect(_converse.connection.send).toHaveBeenCalled();
-                        var $stanza = _converse.connection.send.calls.argsFor(0)[0].tree();
                         const stanza = _converse.connection.send.calls.argsFor(0)[0].tree();
                         const stanza = _converse.connection.send.calls.argsFor(0)[0].tree();
                         expect(stanza.getAttribute('to')).toBe(contact_jid);
                         expect(stanza.getAttribute('to')).toBe(contact_jid);
                         expect(stanza.childNodes.length).toBe(3);
                         expect(stanza.childNodes.length).toBe(3);
@@ -1181,7 +1174,7 @@
                 spyOn(_converse, 'clearMsgCounter').and.callThrough();
                 spyOn(_converse, 'clearMsgCounter').and.callThrough();
 
 
                 await _converse.chatboxes.onMessage(msg);
                 await _converse.chatboxes.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(_converse.incrementMsgCounter).toHaveBeenCalled();
                 expect(_converse.incrementMsgCounter).toHaveBeenCalled();
                 expect(_converse.clearMsgCounter).not.toHaveBeenCalled();
                 expect(_converse.clearMsgCounter).not.toHaveBeenCalled();
                 expect(_converse.msg_counter).toBe(1);
                 expect(_converse.msg_counter).toBe(1);
@@ -1588,8 +1581,7 @@
 
 
                 await test_utils.waitForRoster(_converse, 'current', 1);
                 await test_utils.waitForRoster(_converse, 'current', 1);
 
 
-                const base_url = document.URL.split(window.location.pathname)[0],
-                      message = "geo:37.786971,-122.399677",
+                const message = "geo:37.786971,-122.399677",
                       contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
                       contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
 
 
                 await test_utils.openChatBoxFor(_converse, contact_jid);
                 await test_utils.openChatBoxFor(_converse, contact_jid);

+ 0 - 7
spec/controlbox.js

@@ -2,9 +2,7 @@
     define(["jasmine", "mock", "test-utils"], factory);
     define(["jasmine", "mock", "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     const _ = converse.env._,
     const _ = converse.env._,
-          $pres = converse.env.$pres,
           $msg = converse.env.$msg,
           $msg = converse.env.$msg,
-          $iq = converse.env.$iq,
           u = converse.env.utils,
           u = converse.env.utils,
           Strophe = converse.env.Strophe,
           Strophe = converse.env.Strophe,
           sizzle = converse.env.sizzle;
           sizzle = converse.env.sizzle;
@@ -198,7 +196,6 @@
 
 
             test_utils.createContacts(_converse, 'all').openControlBox();
             test_utils.createContacts(_converse, 'all').openControlBox();
 
 
-            const panel = _converse.chatboxviews.get('controlbox').contactspanel;
             const cbview = _converse.chatboxviews.get('controlbox');
             const cbview = _converse.chatboxviews.get('controlbox');
             cbview.el.querySelector('.add-contact').click()
             cbview.el.querySelector('.add-contact').click()
             const modal = _converse.rosterview.add_contact_modal;
             const modal = _converse.rosterview.add_contact_modal;
@@ -233,7 +230,6 @@
                 async function (done, _converse) {
                 async function (done, _converse) {
 
 
             test_utils.openControlBox();
             test_utils.openControlBox();
-            const panel = _converse.chatboxviews.get('controlbox').contactspanel;
             const cbview = _converse.chatboxviews.get('controlbox');
             const cbview = _converse.chatboxviews.get('controlbox');
             cbview.el.querySelector('.add-contact').click()
             cbview.el.querySelector('.add-contact').click()
             const modal = _converse.rosterview.add_contact_modal;
             const modal = _converse.rosterview.add_contact_modal;
@@ -243,7 +239,6 @@
             await u.waitUntil(() => u.isVisible(modal.el), 1000);
             await u.waitUntil(() => u.isVisible(modal.el), 1000);
             expect(!_.isNull(modal.el.querySelector('form.add-xmpp-contact'))).toBeTruthy();
             expect(!_.isNull(modal.el.querySelector('form.add-xmpp-contact'))).toBeTruthy();
             const input_jid = modal.el.querySelector('input[name="jid"]');
             const input_jid = modal.el.querySelector('input[name="jid"]');
-            const input_name = modal.el.querySelector('input[name="name"]');
             input_jid.value = 'someone@montague.lit';
             input_jid.value = 'someone@montague.lit';
             modal.el.querySelector('button[type="submit"]').click();
             modal.el.querySelector('button[type="submit"]').click();
 
 
@@ -280,7 +275,6 @@
             window.XMLHttpRequest = jasmine.createSpy('XMLHttpRequest');
             window.XMLHttpRequest = jasmine.createSpy('XMLHttpRequest');
             XMLHttpRequest.and.callFake(() => xhr);
             XMLHttpRequest.and.callFake(() => xhr);
 
 
-            const panel = _converse.chatboxviews.get('controlbox').contactspanel;
             const cbview = _converse.chatboxviews.get('controlbox');
             const cbview = _converse.chatboxviews.get('controlbox');
             cbview.el.querySelector('.add-contact').click()
             cbview.el.querySelector('.add-contact').click()
             const modal = _converse.rosterview.add_contact_modal;
             const modal = _converse.rosterview.add_contact_modal;
@@ -353,7 +347,6 @@
             window.XMLHttpRequest = jasmine.createSpy('XMLHttpRequest');
             window.XMLHttpRequest = jasmine.createSpy('XMLHttpRequest');
             XMLHttpRequest.and.callFake(() => xhr);
             XMLHttpRequest.and.callFake(() => xhr);
 
 
-            const panel = _converse.chatboxviews.get('controlbox').contactspanel;
             const cbview = _converse.chatboxviews.get('controlbox');
             const cbview = _converse.chatboxviews.get('controlbox');
             cbview.el.querySelector('.add-contact').click()
             cbview.el.querySelector('.add-contact').click()
             modal = _converse.rosterview.add_contact_modal;
             modal = _converse.rosterview.add_contact_modal;

+ 2 - 3
spec/converse.js

@@ -4,8 +4,7 @@
         "mock",
         "mock",
         "test-utils"], factory);
         "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
-    const b64_sha1 = converse.env.b64_sha1,
-          _ = converse.env._,
+    const _ = converse.env._,
           u = converse.env.utils;
           u = converse.env.utils;
 
 
     describe("Converse", function() {
     describe("Converse", function() {
@@ -354,7 +353,7 @@
 
 
             describe("The \"plugins.add\" method", function() {
             describe("The \"plugins.add\" method", function() {
                 it("throws an error when multiple plugins attempt to register with the same name",
                 it("throws an error when multiple plugins attempt to register with the same name",
-                        mock.initConverse((done, _converse) => {
+                        mock.initConverse((done, _converse) => {  // eslint-disable-line no-unused-vars
 
 
                     converse.plugins.add('myplugin', {});
                     converse.plugins.add('myplugin', {});
                     const error = new TypeError('Error: plugin with name "myplugin" has already been registered!');
                     const error = new TypeError('Error: plugin with name "myplugin" has already been registered!');

+ 5 - 5
spec/emojis.js

@@ -6,7 +6,7 @@
         ], factory);
         ], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const { Backbone, Promise, Strophe, $iq, $msg, $pres, b64_sha1, dayjs, sizzle, _ } = converse.env;
+    const { Promise, $msg, $pres, sizzle } = converse.env;
     const u = converse.env.utils;
     const u = converse.env.utils;
 
 
     describe("Emojis", function () {
     describe("Emojis", function () {
@@ -175,7 +175,7 @@
                     .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                     .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                 await new Promise(resolve => _converse.on('chatBoxInitialized', resolve));
                 await new Promise(resolve => _converse.on('chatBoxInitialized', resolve));
                 const view = _converse.api.chatviews.get(sender_jid);
                 const view = _converse.api.chatviews.get(sender_jid);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 const chat_content = view.el.querySelector('.chat-content');
                 const chat_content = view.el.querySelector('.chat-content');
                 let message = chat_content.querySelector('.chat-msg__text');
                 let message = chat_content.querySelector('.chat-msg__text');
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(true);
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(true);
@@ -187,7 +187,7 @@
                         'id': _converse.connection.getUniqueId()
                         'id': _converse.connection.getUniqueId()
                     }).c('body').t('😇 Hello world! 😇 😇').up()
                     }).c('body').t('😇 Hello world! 😇 😇').up()
                     .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                     .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 message = chat_content.querySelector('.message:last-child .chat-msg__text');
                 message = chat_content.querySelector('.message:last-child .chat-msg__text');
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(false);
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(false);
 
 
@@ -200,7 +200,7 @@
                     preventDefault: function preventDefault () {},
                     preventDefault: function preventDefault () {},
                     keyCode: 13 // Enter
                     keyCode: 13 // Enter
                 });
                 });
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(view.el.querySelectorAll('.chat-msg').length).toBe(3);
                 expect(view.el.querySelectorAll('.chat-msg').length).toBe(3);
                 expect(chat_content.querySelector('.message:last-child .chat-msg__text').textContent).toBe('💩 😇');
                 expect(chat_content.querySelector('.message:last-child .chat-msg__text').textContent).toBe('💩 😇');
                 expect(textarea.value).toBe('');
                 expect(textarea.value).toBe('');
@@ -217,7 +217,7 @@
                     preventDefault: function preventDefault () {},
                     preventDefault: function preventDefault () {},
                     keyCode: 13 // Enter
                     keyCode: 13 // Enter
                 });
                 });
-                await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                await new Promise(resolve => view.model.messages.once('rendered', resolve));
                 expect(view.model.messages.models.length).toBe(3);
                 expect(view.model.messages.models.length).toBe(3);
                 message = chat_content.querySelector('.message:last-child .chat-msg__text');
                 message = chat_content.querySelector('.message:last-child .chat-msg__text');
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(false);
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(false);

+ 2 - 2
spec/eventemitter.js

@@ -1,6 +1,6 @@
 (function (root, factory) {
 (function (root, factory) {
-    define(["jasmine", "mock", "test-utils"], factory);
-} (this, function (jasmine, mock, test_utils) {
+    define(["jasmine", "mock"], factory);
+} (this, function (jasmine, mock) {
 
 
     return describe("The _converse Event Emitter", function() {
     return describe("The _converse Event Emitter", function() {
 
 

+ 5 - 9
spec/http-file-upload.js

@@ -276,7 +276,7 @@
                             'name': "my-juliet.jpg"
                             'name': "my-juliet.jpg"
                         };
                         };
                         view.model.sendFiles([file]);
                         view.model.sendFiles([file]);
-                        await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                        await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                         await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
                         await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
                         const iq = IQ_stanzas.pop();
                         const iq = IQ_stanzas.pop();
@@ -323,7 +323,7 @@
                                     'oob_url': message.get('get'),
                                     'oob_url': message.get('get'),
                                     'message': message.get('get')
                                     'message': message.get('get')
                                 });
                                 });
-                                return new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                                return new Promise(resolve => view.model.messages.once('rendered', resolve));
                             });
                             });
                         });
                         });
                         let sent_stanza;
                         let sent_stanza;
@@ -383,7 +383,7 @@
                             'name': "my-juliet.jpg"
                             'name': "my-juliet.jpg"
                         };
                         };
                         view.model.sendFiles([file]);
                         view.model.sendFiles([file]);
-                        await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                        await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                         await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
                         await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
                         const iq = IQ_stanzas.pop();
                         const iq = IQ_stanzas.pop();
@@ -429,7 +429,7 @@
                                     'oob_url': message.get('get'),
                                     'oob_url': message.get('get'),
                                     'message': message.get('get')
                                     'message': message.get('get')
                                 });
                                 });
-                                return new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                                return new Promise(resolve => view.model.messages.once('rendered', resolve));
                             });
                             });
                         });
                         });
                         let sent_stanza;
                         let sent_stanza;
@@ -469,7 +469,6 @@
 
 
                         const IQ_stanzas = _converse.connection.IQ_stanzas;
                         const IQ_stanzas = _converse.connection.IQ_stanzas;
                         const IQ_ids =  _converse.connection.IQ_ids;
                         const IQ_ids =  _converse.connection.IQ_ids;
-                        const send_backup = XMLHttpRequest.prototype.send;
 
 
                         await test_utils.waitUntilDiscoConfirmed(_converse, _converse.bare_jid, [], []);
                         await test_utils.waitUntilDiscoConfirmed(_converse, _converse.bare_jid, [], []);
                         await u.waitUntil(() => _.filter(
                         await u.waitUntil(() => _.filter(
@@ -596,7 +595,6 @@
                         [{'category': 'server', 'type':'IM'}],
                         [{'category': 'server', 'type':'IM'}],
                         ['http://jabber.org/protocol/disco#items'], [], 'info');
                         ['http://jabber.org/protocol/disco#items'], [], 'info');
 
 
-                    const send_backup = XMLHttpRequest.prototype.send;
                     const IQ_stanzas = _converse.connection.IQ_stanzas;
                     const IQ_stanzas = _converse.connection.IQ_stanzas;
 
 
                     await test_utils.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], ['upload.montague.tld'], 'items');
                     await test_utils.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], ['upload.montague.tld'], 'items');
@@ -613,7 +611,7 @@
                         'name': "my-juliet.jpg"
                         'name': "my-juliet.jpg"
                     };
                     };
                     view.model.sendFiles([file]);
                     view.model.sendFiles([file]);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length)
                     await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length)
                     const iq = IQ_stanzas.pop();
                     const iq = IQ_stanzas.pop();
                     expect(Strophe.serialize(iq)).toBe(
                     expect(Strophe.serialize(iq)).toBe(
@@ -657,8 +655,6 @@
                             done();
                             done();
                         });
                         });
                     });
                     });
-                    let sent_stanza;
-                    spyOn(_converse.connection, 'send').and.callFake(stanza => (sent_stanza = stanza));
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 }));
                 }));
             });
             });

+ 1 - 2
spec/mam.js

@@ -2,7 +2,6 @@
     define(["jasmine", "mock", "test-utils"], factory);
     define(["jasmine", "mock", "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const _ = converse.env._;
     const Backbone = converse.env.Backbone;
     const Backbone = converse.env.Backbone;
     const Strophe = converse.env.Strophe;
     const Strophe = converse.env.Strophe;
     const $iq = converse.env.$iq;
     const $iq = converse.env.$iq;
@@ -259,7 +258,7 @@
                     _converse.connection._dataRecv(test_utils.createRequest(iq_result));
                     _converse.connection._dataRecv(test_utils.createRequest(iq_result));
 
 
                     const view = _converse.chatboxviews.get(contact_jid);
                     const view = _converse.chatboxviews.get(contact_jid);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     expect(view.model.messages.length).toBe(1);
                     expect(view.model.messages.length).toBe(1);
                     expect(view.model.messages.at(0).get('message')).toBe("Thrice the brinded cat hath mew'd.");
                     expect(view.model.messages.at(0).get('message')).toBe("Thrice the brinded cat hath mew'd.");
                     done();
                     done();

+ 52 - 58
spec/messages.js

@@ -6,7 +6,7 @@
         ], factory);
         ], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const { Backbone, Promise, Strophe, $iq, $msg, $pres, b64_sha1, dayjs, sizzle, _ } = converse.env;
+    const { Promise, Strophe, $msg, dayjs, sizzle, _ } = converse.env;
     const u = converse.env.utils;
     const u = converse.env.utils;
 
 
 
 
@@ -41,7 +41,6 @@
                 </message>
                 </message>
             `);
             `);
             _converse.connection._dataRecv(test_utils.createRequest(received_stanza));
             _converse.connection._dataRecv(test_utils.createRequest(received_stanza));
-            const view = _converse.api.chatviews.get(contact_jid);
             const sent_stanzas = _converse.connection.sent_stanzas;
             const sent_stanzas = _converse.connection.sent_stanzas;
             const sent_stanza = await u.waitUntil(() => sent_stanzas.filter(s => s.querySelector('error')).pop());
             const sent_stanza = await u.waitUntil(() => sent_stanzas.filter(s => s.querySelector('error')).pop());
             expect(Strophe.serialize(sent_stanza)).toBe(
             expect(Strophe.serialize(sent_stanza)).toBe(
@@ -74,7 +73,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelector('.chat-msg__text').textContent)
             expect(view.el.querySelector('.chat-msg__text').textContent)
@@ -92,7 +91,7 @@
             expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
             expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
             expect(view.model.messages.at(0).get('correcting')).toBe(true);
             expect(view.model.messages.at(0).get('correcting')).toBe(true);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
             expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
             expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
 
 
             spyOn(_converse.connection, 'send');
             spyOn(_converse.connection, 'send');
@@ -103,7 +102,7 @@
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
             expect(_converse.connection.send).toHaveBeenCalled();
             expect(_converse.connection.send).toHaveBeenCalled();
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
             const msg = _converse.connection.send.calls.all()[0].args[0];
             const msg = _converse.connection.send.calls.all()[0].args[0];
             expect(msg.toLocaleString())
             expect(msg.toLocaleString())
@@ -133,7 +132,7 @@
             action = view.el.querySelector('.chat-msg .chat-msg__action');
             action = view.el.querySelector('.chat-msg .chat-msg__action');
             action.style.opacity = 1;
             action.style.opacity = 1;
             action.click();
             action.click();
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
             expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
             expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
             expect(view.model.messages.at(0).get('correcting')).toBe(true);
             expect(view.model.messages.at(0).get('correcting')).toBe(true);
@@ -158,7 +157,7 @@
                 }).c('body').t('Hello').up()
                 }).c('body').t('Hello').up()
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree()
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree()
             );
             );
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg .chat-msg__action').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg .chat-msg__action').length).toBe(1);
 
 
             // Test confirmation dialog
             // Test confirmation dialog
@@ -208,7 +207,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelector('.chat-msg__text').textContent)
             expect(view.el.querySelector('.chat-msg__text').textContent)
                 .toBe('But soft, what light through yonder airlock breaks?');
                 .toBe('But soft, what light through yonder airlock breaks?');
@@ -232,7 +231,7 @@
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
             expect(_converse.connection.send).toHaveBeenCalled();
             expect(_converse.connection.send).toHaveBeenCalled();
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
             const msg = _converse.connection.send.calls.all()[0].args[0];
             const msg = _converse.connection.send.calls.all()[0].args[0];
             expect(msg.toLocaleString())
             expect(msg.toLocaleString())
@@ -284,7 +283,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
 
 
             textarea.value =  'Arise, fair sun, and kill the envious moon';
             textarea.value =  'Arise, fair sun, and kill the envious moon';
@@ -293,7 +292,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(3);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(3);
 
 
             view.onKeyDown({
             view.onKeyDown({
@@ -324,7 +323,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
             expect(textarea.value).toBe('');
             expect(textarea.value).toBe('');
             const messages = view.el.querySelectorAll('.chat-msg');
             const messages = view.el.querySelectorAll('.chat-msg');
@@ -351,7 +350,6 @@
             await test_utils.waitForRoster(_converse, 'current');
             await test_utils.waitForRoster(_converse, 'current');
             test_utils.openControlBox();
             test_utils.openControlBox();
 
 
-            let message;
             const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             await u.waitUntil(() => _converse.rosterview.el.querySelectorAll('.roster-group').length)
             await u.waitUntil(() => _converse.rosterview.el.querySelectorAll('.roster-group').length)
             spyOn(_converse.chatboxes, 'getChatBox').and.callThrough();
             spyOn(_converse.chatboxes, 'getChatBox').and.callThrough();
@@ -380,7 +378,7 @@
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2017-12-31T22:08:25Z'})
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2017-12-31T22:08:25Z'})
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             msg = $msg({
             msg = $msg({
                     'xmlns': 'jabber:client',
                     'xmlns': 'jabber:client',
@@ -392,7 +390,7 @@
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-01T13:18:23Z'})
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-01T13:18:23Z'})
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             msg = $msg({
             msg = $msg({
                     'xmlns': 'jabber:client',
                     'xmlns': 'jabber:client',
@@ -404,7 +402,7 @@
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-01T13:18:23Z'})
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-01T13:18:23Z'})
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             msg = $msg({
             msg = $msg({
                     'xmlns': 'jabber:client',
                     'xmlns': 'jabber:client',
@@ -416,7 +414,7 @@
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-02T12:18:23Z'})
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-02T12:18:23Z'})
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             msg = $msg({
             msg = $msg({
                     'xmlns': 'jabber:client',
                     'xmlns': 'jabber:client',
@@ -428,7 +426,7 @@
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-02T22:28:23Z'})
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':'2018-01-02T22:28:23Z'})
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             // Insert <composing> message, to also check that
             // Insert <composing> message, to also check that
             // text messages are inserted correctly with
             // text messages are inserted correctly with
@@ -453,7 +451,7 @@
                 .c('body').t("latest message")
                 .c('body').t("latest message")
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             const chat_content = view.el.querySelector('.chat-content');
             const chat_content = view.el.querySelector('.chat-content');
             view.clearSpinner(); //cleanup
             view.clearSpinner(); //cleanup
@@ -781,7 +779,7 @@
             .c('delay', { xmlns:'urn:xmpp:delay', from: 'montague.lit', stamp: one_day_ago.toISOString() })
             .c('delay', { xmlns:'urn:xmpp:delay', from: 'montague.lit', stamp: one_day_ago.toISOString() })
             .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
             .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
             expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
             expect(chatbox.messages.length).toEqual(1);
             expect(chatbox.messages.length).toEqual(1);
@@ -814,7 +812,7 @@
             }).c('body').t(message).up()
             }).c('body').t(message).up()
             .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
             .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
             expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
             // Check that there is a <time> element, with the required props.
             // Check that there is a <time> element, with the required props.
@@ -879,7 +877,7 @@
             spyOn(view.model, 'sendMessage').and.callThrough();
             spyOn(view.model, 'sendMessage').and.callThrough();
             test_utils.sendMessage(view, message);
             test_utils.sendMessage(view, message);
             expect(view.model.sendMessage).toHaveBeenCalled();
             expect(view.model.sendMessage).toHaveBeenCalled();
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             const msg = sizzle('.chat-content .chat-msg:last .chat-msg__text', view.el).pop();
             const msg = sizzle('.chat-content .chat-msg:last .chat-msg__text', view.el).pop();
             expect(msg.textContent).toEqual(message);
             expect(msg.textContent).toEqual(message);
             expect(msg.innerHTML)
             expect(msg.innerHTML)
@@ -962,7 +960,7 @@
                     <body>Hey\nHave you heard the news?</body>
                     <body>Hey\nHave you heard the news?</body>
                 </message>`);
                 </message>`);
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             const chat_content = view.el.querySelector('.chat-content');
             const chat_content = view.el.querySelector('.chat-content');
             expect(chat_content.querySelector('.chat-msg__text').innerHTML).toBe('Hey<br>Have you heard the news?');
             expect(chat_content.querySelector('.chat-msg__text').innerHTML).toBe('Hey<br>Have you heard the news?');
             stanza = u.toStanza(`
             stanza = u.toStanza(`
@@ -972,7 +970,7 @@
                     <body>Hey\n\n\nHave you heard the news?</body>
                     <body>Hey\n\n\nHave you heard the news?</body>
                 </message>`);
                 </message>`);
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(chat_content.querySelector('.message:last-child .chat-msg__text').innerHTML).toBe('Hey<br><br>Have you heard the news?');
             expect(chat_content.querySelector('.message:last-child .chat-msg__text').innerHTML).toBe('Hey<br><br>Have you heard the news?');
             stanza = u.toStanza(`
             stanza = u.toStanza(`
                 <message from="${contact_jid}"
                 <message from="${contact_jid}"
@@ -981,7 +979,7 @@
                     <body>Hey\nHave you heard\nthe news?</body>
                     <body>Hey\nHave you heard\nthe news?</body>
                 </message>`);
                 </message>`);
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(chat_content.querySelector('.message:last-child .chat-msg__text').innerHTML).toBe('Hey<br>Have you heard<br>the news?');
             expect(chat_content.querySelector('.message:last-child .chat-msg__text').innerHTML).toBe('Hey<br>Have you heard<br>the news?');
             done();
             done();
         }));
         }));
@@ -1068,7 +1066,6 @@
             await test_utils.waitForRoster(_converse, 'current');
             await test_utils.waitForRoster(_converse, 'current');
             test_utils.openControlBox();
             test_utils.openControlBox();
 
 
-            let message, msg;
             const base_time = new Date();
             const base_time = new Date();
             const ONE_MINUTE_LATER = 60000;
             const ONE_MINUTE_LATER = 60000;
 
 
@@ -1088,7 +1085,7 @@
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
             await new Promise(resolve => _converse.on('chatBoxInitialized', resolve));
             await new Promise(resolve => _converse.on('chatBoxInitialized', resolve));
             const view = _converse.api.chatviews.get(sender_jid);
             const view = _converse.api.chatviews.get(sender_jid);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             jasmine.clock().tick(3*ONE_MINUTE_LATER);
             jasmine.clock().tick(3*ONE_MINUTE_LATER);
             _converse.chatboxes.onMessage($msg({
             _converse.chatboxes.onMessage($msg({
@@ -1098,7 +1095,7 @@
                     'id': (new Date()).getTime()
                     'id': (new Date()).getTime()
                 }).c('body').t("Another message 3 minutes later").up()
                 }).c('body').t("Another message 3 minutes later").up()
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             jasmine.clock().tick(11*ONE_MINUTE_LATER);
             jasmine.clock().tick(11*ONE_MINUTE_LATER);
             _converse.chatboxes.onMessage($msg({
             _converse.chatboxes.onMessage($msg({
@@ -1108,7 +1105,7 @@
                     'id': (new Date()).getTime()
                     'id': (new Date()).getTime()
                 }).c('body').t("Another message 14 minutes since we started").up()
                 }).c('body').t("Another message 14 minutes since we started").up()
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             jasmine.clock().tick(1000);
             jasmine.clock().tick(1000);
             // Insert <composing> message, to also check that
             // Insert <composing> message, to also check that
@@ -1122,7 +1119,7 @@
                     'type': 'chat'})
                     'type': 'chat'})
                 .c('composing', {'xmlns': Strophe.NS.CHATSTATES}).up()
                 .c('composing', {'xmlns': Strophe.NS.CHATSTATES}).up()
                 .tree());
                 .tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             jasmine.clock().tick(1*ONE_MINUTE_LATER);
             jasmine.clock().tick(1*ONE_MINUTE_LATER);
             _converse.chatboxes.onMessage($msg({
             _converse.chatboxes.onMessage($msg({
@@ -1132,7 +1129,7 @@
                     'id': _converse.connection.getUniqueId()
                     'id': _converse.connection.getUniqueId()
                 }).c('body').t("Another message 1 minute and 1 second since the previous one").up()
                 }).c('body').t("Another message 1 minute and 1 second since the previous one").up()
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                 .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             jasmine.clock().tick(1*ONE_MINUTE_LATER);
             jasmine.clock().tick(1*ONE_MINUTE_LATER);
             const chat_content = view.el.querySelector('.chat-content');
             const chat_content = view.el.querySelector('.chat-content');
@@ -1166,7 +1163,7 @@
                 }).c('body').t("A delayed message, sent 5 minutes since we started").up()
                 }).c('body').t("A delayed message, sent 5 minutes since we started").up()
                   .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp': dayjs(base_time).add(5, 'minutes').toISOString()})
                   .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp': dayjs(base_time).add(5, 'minutes').toISOString()})
                   .tree());
                   .tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             expect(chat_content.querySelectorAll('.message').length).toBe(7);
             expect(chat_content.querySelectorAll('.message').length).toBe(7);
             expect(chat_content.querySelectorAll('.chat-msg').length).toBe(6);
             expect(chat_content.querySelectorAll('.chat-msg').length).toBe(6);
@@ -1196,7 +1193,7 @@
                 .c('body').t("A carbon message 4 minutes later").up()
                 .c('body').t("A carbon message 4 minutes later").up()
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':dayjs(base_time).add(4, 'minutes').toISOString()})
                 .c('delay', {'xmlns': 'urn:xmpp:delay', 'stamp':dayjs(base_time).add(4, 'minutes').toISOString()})
                 .tree());
                 .tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             expect(chat_content.querySelectorAll('.message').length).toBe(8);
             expect(chat_content.querySelectorAll('.message').length).toBe(8);
             expect(chat_content.querySelectorAll('.chat-msg').length).toBe(7);
             expect(chat_content.querySelectorAll('.chat-msg').length).toBe(7);
@@ -1259,7 +1256,6 @@
             await test_utils.waitForRoster(_converse, 'current', 1);
             await test_utils.waitForRoster(_converse, 'current', 1);
             const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const msg_id = u.getUniqueId();
             const msg_id = u.getUniqueId();
-            const sent_stanzas = [];
             const view = await test_utils.openChatBoxFor(_converse, sender_jid);
             const view = await test_utils.openChatBoxFor(_converse, sender_jid);
             spyOn(view.model, 'sendReceiptStanza').and.callThrough();
             spyOn(view.model, 'sendReceiptStanza').and.callThrough();
             const msg = $msg({
             const msg = $msg({
@@ -1304,7 +1300,7 @@
                 await u.waitUntil(() => _converse.api.chats.get().length);
                 await u.waitUntil(() => _converse.api.chats.get().length);
                 const chatbox = _converse.chatboxes.get(contact_jid);
                 const chatbox = _converse.chatboxes.get(contact_jid);
                 expect(chatbox).toBeDefined();
                 expect(chatbox).toBeDefined();
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 let msg_obj = chatbox.messages.models[0];
                 let msg_obj = chatbox.messages.models[0];
                 let msg_id = msg_obj.get('msgid');
                 let msg_id = msg_obj.get('msgid');
                 let msg = $msg({
                 let msg = $msg({
@@ -1313,7 +1309,7 @@
                         'id': u.getUniqueId(),
                         'id': u.getUniqueId(),
                     }).c('received', {'id': msg_id, xmlns: Strophe.NS.RECEIPTS}).up().tree();
                     }).c('received', {'id': msg_id, xmlns: Strophe.NS.RECEIPTS}).up().tree();
                 _converse.connection._dataRecv(test_utils.createRequest(msg));
                 _converse.connection._dataRecv(test_utils.createRequest(msg));
-                await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                await new Promise(resolve => view.model.messages.once('rendered', resolve));
                 expect(view.el.querySelectorAll('.chat-msg__receipt').length).toBe(1);
                 expect(view.el.querySelectorAll('.chat-msg__receipt').length).toBe(1);
 
 
                 // Also handle receipts with type 'chat'. See #1353
                 // Also handle receipts with type 'chat'. See #1353
@@ -1324,7 +1320,7 @@
                     preventDefault: function preventDefault () {},
                     preventDefault: function preventDefault () {},
                     keyCode: 13 // Enter
                     keyCode: 13 // Enter
                 });
                 });
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 msg_obj = chatbox.messages.models[1];
                 msg_obj = chatbox.messages.models[1];
                 msg_id = msg_obj.get('msgid');
                 msg_id = msg_obj.get('msgid');
@@ -1335,7 +1331,7 @@
                         'id': u.getUniqueId(),
                         'id': u.getUniqueId(),
                     }).c('received', {'id': msg_id, xmlns: Strophe.NS.RECEIPTS}).up().tree();
                     }).c('received', {'id': msg_id, xmlns: Strophe.NS.RECEIPTS}).up().tree();
                 _converse.connection._dataRecv(test_utils.createRequest(msg));
                 _converse.connection._dataRecv(test_utils.createRequest(msg));
-                await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                await new Promise(resolve => view.model.messages.once('rendered', resolve));
                 expect(view.el.querySelectorAll('.chat-msg__receipt').length).toBe(2);
                 expect(view.el.querySelectorAll('.chat-msg__receipt').length).toBe(2);
                 expect(_converse.chatboxes.onMessage.calls.count()).toBe(1);
                 expect(_converse.chatboxes.onMessage.calls.count()).toBe(1);
                 done();
                 done();
@@ -1467,7 +1463,6 @@
 
 
                 await test_utils.waitForRoster(_converse, 'current', 1);
                 await test_utils.waitForRoster(_converse, 'current', 1);
                 test_utils.openControlBox();
                 test_utils.openControlBox();
-                const message = 'This is a received message';
                 const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 const msg_id = u.getUniqueId();
                 const msg_id = u.getUniqueId();
                 const view = await test_utils.openChatBoxFor(_converse, sender_jid);
                 const view = await test_utils.openChatBoxFor(_converse, sender_jid);
@@ -1477,7 +1472,7 @@
                         'type': 'chat',
                         'type': 'chat',
                         'id': msg_id,
                         'id': msg_id,
                     }).c('body').t('But soft, what light through yonder airlock breaks?').tree());
                     }).c('body').t('But soft, what light through yonder airlock breaks?').tree());
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
                 expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
                 expect(view.el.querySelector('.chat-msg__text').textContent)
                 expect(view.el.querySelector('.chat-msg__text').textContent)
                     .toBe('But soft, what light through yonder airlock breaks?');
                     .toBe('But soft, what light through yonder airlock breaks?');
@@ -1489,7 +1484,7 @@
                         'id': u.getUniqueId(),
                         'id': u.getUniqueId(),
                     }).c('body').t('But soft, what light through yonder chimney breaks?').up()
                     }).c('body').t('But soft, what light through yonder chimney breaks?').up()
                     .c('replace', {'id': msg_id, 'xmlns': 'urn:xmpp:message-correct:0'}).tree());
                     .c('replace', {'id': msg_id, 'xmlns': 'urn:xmpp:message-correct:0'}).tree());
-                await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
                 expect(view.el.querySelector('.chat-msg__text').textContent)
                 expect(view.el.querySelector('.chat-msg__text').textContent)
                     .toBe('But soft, what light through yonder chimney breaks?');
                     .toBe('But soft, what light through yonder chimney breaks?');
@@ -1505,7 +1500,7 @@
                         'id': u.getUniqueId(),
                         'id': u.getUniqueId(),
                     }).c('body').t('But soft, what light through yonder window breaks?').up()
                     }).c('body').t('But soft, what light through yonder window breaks?').up()
                     .c('replace', {'id': msg_id, 'xmlns': 'urn:xmpp:message-correct:0'}).tree());
                     .c('replace', {'id': msg_id, 'xmlns': 'urn:xmpp:message-correct:0'}).tree());
-                await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+                await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
                 expect(view.el.querySelector('.chat-msg__text').textContent)
                 expect(view.el.querySelector('.chat-msg__text').textContent)
                     .toBe('But soft, what light through yonder window breaks?');
                     .toBe('But soft, what light through yonder window breaks?');
@@ -1619,7 +1614,7 @@
                     _converse.allow_non_roster_messaging = true;
                     _converse.allow_non_roster_messaging = true;
                     await _converse.chatboxes.onMessage(msg);
                     await _converse.chatboxes.onMessage(msg);
                     view = _converse.chatboxviews.get(sender_jid);
                     view = _converse.chatboxviews.get(sender_jid);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
                     expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
                     // Check that the chatbox and its view now exist
                     // Check that the chatbox and its view now exist
                     chatbox = _converse.chatboxes.get(sender_jid);
                     chatbox = _converse.chatboxes.get(sender_jid);
@@ -1669,13 +1664,13 @@
                      */
                      */
                     const error_txt = 'Server-to-server connection failed: Connecting failed: connection timeout';
                     const error_txt = 'Server-to-server connection failed: Connecting failed: connection timeout';
                     const sender_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@montague.lit';
                     const sender_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@montague.lit';
-                    let fullname = _converse.xmppstatus.get('fullname');
-                    fullname = _.isEmpty(fullname)? _converse.bare_jid: fullname;
+                    let fullname = _converse.xmppstatus.get('fullname'); // eslint-disable-line no-unused-vars
+                    fullname = _.isEmpty(fullname) ? _converse.bare_jid: fullname;
                     await _converse.api.chats.open(sender_jid)
                     await _converse.api.chats.open(sender_jid)
                     let msg_text = 'This message will not be sent, due to an error';
                     let msg_text = 'This message will not be sent, due to an error';
                     const view = _converse.api.chatviews.get(sender_jid);
                     const view = _converse.api.chatviews.get(sender_jid);
                     const message = await view.model.sendMessage(msg_text);
                     const message = await view.model.sendMessage(msg_text);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     const chat_content = view.el.querySelector('.chat-content');
                     const chat_content = view.el.querySelector('.chat-content');
                     let msg_txt = sizzle('.chat-msg:last .chat-msg__text', chat_content).pop().textContent;
                     let msg_txt = sizzle('.chat-msg:last .chat-msg__text', chat_content).pop().textContent;
                     expect(msg_txt).toEqual(msg_text);
                     expect(msg_txt).toEqual(msg_text);
@@ -1711,7 +1706,7 @@
                         .c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
                         .c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
                             .t('Server-to-server connection failed: Connecting failed: connection timeout');
                             .t('Server-to-server connection failed: Connecting failed: connection timeout');
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     expect(chat_content.querySelector('.chat-error').textContent.trim()).toEqual(error_txt);
                     expect(chat_content.querySelector('.chat-error').textContent.trim()).toEqual(error_txt);
                     stanza = $msg({
                     stanza = $msg({
                             'to': _converse.connection.jid,
                             'to': _converse.connection.jid,
@@ -1724,7 +1719,7 @@
                         .c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
                         .c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
                             .t('Server-to-server connection failed: Connecting failed: connection timeout');
                             .t('Server-to-server connection failed: Connecting failed: connection timeout');
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     expect(chat_content.querySelectorAll('.chat-error').length).toEqual(2);
                     expect(chat_content.querySelectorAll('.chat-error').length).toEqual(2);
 
 
                     // We don't render duplicates
                     // We don't render duplicates
@@ -1743,7 +1738,7 @@
 
 
                     msg_text = 'This message will be sent, and also receive an error';
                     msg_text = 'This message will be sent, and also receive an error';
                     const third_message = await view.model.sendMessage(msg_text);
                     const third_message = await view.model.sendMessage(msg_text);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     msg_txt = sizzle('.chat-msg:last .chat-msg__text', chat_content).pop().textContent;
                     msg_txt = sizzle('.chat-msg:last .chat-msg__text', chat_content).pop().textContent;
                     expect(msg_txt).toEqual(msg_text);
                     expect(msg_txt).toEqual(msg_text);
 
 
@@ -1759,7 +1754,7 @@
                         .c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
                         .c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
                             .t('Something else went wrong as well');
                             .t('Something else went wrong as well');
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
                     _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
                     expect(chat_content.querySelectorAll('.chat-error').length).toEqual(3);
                     expect(chat_content.querySelectorAll('.chat-error').length).toEqual(3);
                     done();
                     done();
                 }));
                 }));
@@ -1822,7 +1817,7 @@
                             id: _converse.connection.getUniqueId(),
                             id: _converse.connection.getUniqueId(),
                         }).c('body').t('Message: '+i).up()
                         }).c('body').t('Message: '+i).up()
                         .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                         .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
-                    promises.push(new Promise((resolve, reject) => view.once('messageInserted', resolve)));
+                    promises.push(new Promise(resolve => view.once('messageInserted', resolve)));
                 }
                 }
                 await Promise.all(promises);
                 await Promise.all(promises);
                 // XXX Fails on Travis
                 // XXX Fails on Travis
@@ -1841,10 +1836,9 @@
                         id: (new Date()).getTime()
                         id: (new Date()).getTime()
                     }).c('body').t(message).up()
                     }).c('body').t(message).up()
                     .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
                     .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree());
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 await u.waitUntil(() => view.model.messages.length > 20, 1000);
                 await u.waitUntil(() => view.model.messages.length > 20, 1000);
                 // Now check that the message appears inside the chatbox in the DOM
                 // Now check that the message appears inside the chatbox in the DOM
-                const chat_content = view.el.querySelector('.chat-content');
                 const  msg_txt = sizzle('.chat-content .chat-msg:last .chat-msg__text', view.el).pop().textContent;
                 const  msg_txt = sizzle('.chat-content .chat-msg:last .chat-msg__text', view.el).pop().textContent;
                 expect(msg_txt).toEqual(message);
                 expect(msg_txt).toEqual(message);
                 await u.waitUntil(() => u.isVisible(view.el.querySelector('.new-msgs-indicator')), 900);
                 await u.waitUntil(() => u.isVisible(view.el.querySelector('.new-msgs-indicator')), 900);
@@ -1927,7 +1921,7 @@
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/audio.mp3</url></x>
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/audio.mp3</url></x>
                     </message>`)
                     </message>`)
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 await u.waitUntil(() => view.el.querySelectorAll('.chat-content .chat-msg audio').length, 1000);
                 await u.waitUntil(() => view.el.querySelectorAll('.chat-content .chat-msg audio').length, 1000);
                 let msg = view.el.querySelector('.chat-msg .chat-msg__text');
                 let msg = view.el.querySelector('.chat-msg .chat-msg__text');
                 expect(msg.classList.length).toEqual(1);
                 expect(msg.classList.length).toEqual(1);
@@ -1948,7 +1942,7 @@
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/audio.mp3</url></x>
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/audio.mp3</url></x>
                     </message>`);
                     </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 msg = view.el.querySelector('.chat-msg:last-child .chat-msg__text');
                 msg = view.el.querySelector('.chat-msg:last-child .chat-msg__text');
                 expect(msg.innerHTML).toEqual('<!-- message gets added here via renderMessage -->'); // Emtpy
                 expect(msg.innerHTML).toEqual('<!-- message gets added here via renderMessage -->'); // Emtpy
                 media = view.el.querySelector('.chat-msg:last-child .chat-msg__media');
                 media = view.el.querySelector('.chat-msg:last-child .chat-msg__media');
@@ -1998,7 +1992,7 @@
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/video.mp4</url></x>
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/video.mp4</url></x>
                     </message>`);
                     </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 msg = view.el.querySelector('.chat-msg:last-child .chat-msg__text');
                 msg = view.el.querySelector('.chat-msg:last-child .chat-msg__text');
                 expect(msg.innerHTML).toEqual('<!-- message gets added here via renderMessage -->'); // Emtpy
                 expect(msg.innerHTML).toEqual('<!-- message gets added here via renderMessage -->'); // Emtpy
                 media = view.el.querySelector('.chat-msg:last-child .chat-msg__media');
                 media = view.el.querySelector('.chat-msg:last-child .chat-msg__media');
@@ -2027,7 +2021,7 @@
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/funny.pdf</url></x>
                         <x xmlns="jabber:x:oob"><url>https://montague.lit/funny.pdf</url></x>
                     </message>`);
                     </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 await u.waitUntil(() => view.el.querySelectorAll('.chat-content .chat-msg a').length, 1000);
                 await u.waitUntil(() => view.el.querySelectorAll('.chat-content .chat-msg a').length, 1000);
                 const msg = view.el.querySelector('.chat-msg .chat-msg__text');
                 const msg = view.el.querySelector('.chat-msg .chat-msg__text');
                 expect(u.hasClass('chat-msg__text', msg)).toBe(true);
                 expect(u.hasClass('chat-msg__text', msg)).toBe(true);
@@ -2171,7 +2165,7 @@
                     <stanza-id xmlns="urn:xmpp:sid:0" id="IxVDLJ0RYbWcWvqC" by="${_converse.bare_jid}"/>
                     <stanza-id xmlns="urn:xmpp:sid:0" id="IxVDLJ0RYbWcWvqC" by="${_converse.bare_jid}"/>
                 </message>`);
                 </message>`);
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.model.messages.length).toBe(1);
             expect(view.model.messages.length).toBe(1);
 
 

+ 0 - 1
spec/minchats.js

@@ -159,7 +159,6 @@
             await test_utils.openAndEnterChatRoom(_converse, 'kitchen@conference.shakespeare.lit', 'fires');
             await test_utils.openAndEnterChatRoom(_converse, 'kitchen@conference.shakespeare.lit', 'fires');
             const view = _converse.chatboxviews.get(muc_jid);
             const view = _converse.chatboxviews.get(muc_jid);
             view.model.set({'minimized': true});
             view.model.set({'minimized': true});
-            const contact_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const message = 'fires: Your attention is required';
             const message = 'fires: Your attention is required';
             const nick = mock.chatroom_names[0];
             const nick = mock.chatroom_names[0];
             const msg = $msg({
             const msg = $msg({

+ 19 - 37
spec/muc.js

@@ -270,15 +270,6 @@
                 const IQ_stanzas = _converse.connection.IQ_stanzas;
                 const IQ_stanzas = _converse.connection.IQ_stanzas;
                 const sendIQ = _converse.connection.sendIQ;
                 const sendIQ = _converse.connection.sendIQ;
                 const muc_jid = 'lounge@montague.lit';
                 const muc_jid = 'lounge@montague.lit';
-                let sent_IQ, IQ_id;
-                spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
-                    if (iq.nodeTree.getAttribute('to') === 'lounge@montague.lit') {
-                        sent_IQ = iq;
-                        IQ_id = sendIQ.bind(this)(iq, callback, errback);
-                    } else {
-                        sendIQ.bind(this)(iq, callback, errback);
-                    }
-                });
                 await test_utils.openChatRoom(_converse, 'lounge', 'montague.lit', 'romeo');
                 await test_utils.openChatRoom(_converse, 'lounge', 'montague.lit', 'romeo');
 
 
                 const disco_selector = `iq[to="${muc_jid}"] query[xmlns="http://jabber.org/protocol/disco#info"]`;
                 const disco_selector = `iq[to="${muc_jid}"] query[xmlns="http://jabber.org/protocol/disco#info"]`;
@@ -499,7 +490,7 @@
                     }).c('body').t(message).tree();
                     }).c('body').t(message).tree();
 
 
                 await view.model.onMessage(msg);
                 await view.model.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 spyOn(view.model, 'clearMessages').and.callThrough();
                 spyOn(view.model, 'clearMessages').and.callThrough();
                 view.model.close();
                 view.model.close();
@@ -531,7 +522,7 @@
                     }).c('body').t(message).tree();
                     }).c('body').t(message).tree();
 
 
                 await view.model.onMessage(msg);
                 await view.model.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 view.el.querySelector('.chat-msg__text a').click();
                 view.el.querySelector('.chat-msg__text a').click();
                 await u.waitUntil(() => _converse.chatboxes.length === 3)
                 await u.waitUntil(() => _converse.chatboxes.length === 3)
                 expect(_.includes(_converse.chatboxes.pluck('id'), 'coven@chat.shakespeare.lit')).toBe(true);
                 expect(_.includes(_converse.chatboxes.pluck('id'), 'coven@chat.shakespeare.lit')).toBe(true);
@@ -543,7 +534,6 @@
                     null, ['rosterGroupsFetched', 'chatBoxesFetched', 'emojisInitialized'], {},
                     null, ['rosterGroupsFetched', 'chatBoxesFetched', 'emojisInitialized'], {},
                     async function (done, _converse) {
                     async function (done, _converse) {
 
 
-                const sent_IQs = _converse.connection.IQ_stanzas;
                 const muc_jid = 'coven@chat.shakespeare.lit';
                 const muc_jid = 'coven@chat.shakespeare.lit';
                 const room = Strophe.getNodeFromJid(muc_jid);
                 const room = Strophe.getNodeFromJid(muc_jid);
                 const server = Strophe.getDomainFromJid(muc_jid);
                 const server = Strophe.getDomainFromJid(muc_jid);
@@ -653,7 +643,7 @@
                     'type': 'groupchat'
                     'type': 'groupchat'
                 }).c('body').t('hello world').tree();
                 }).c('body').t('hello world').tree();
                 _converse.connection._dataRecv(test_utils.createRequest(msg));
                 _converse.connection._dataRecv(test_utils.createRequest(msg));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 // Add another entrant, otherwise the above message will be
                 // Add another entrant, otherwise the above message will be
                 // collapsed if "newguy" leaves immediately again
                 // collapsed if "newguy" leaves immediately again
@@ -1117,7 +1107,7 @@
                     }).c('body').t('Some message').tree();
                     }).c('body').t('Some message').tree();
 
 
                 await view.model.onMessage(msg);
                 await view.model.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 let stanza = u.toStanza(
                 let stanza = u.toStanza(
                     `<presence xmlns="jabber:client" to="romeo@montague.lit/orchard" type="unavailable" from="conversations@conference.siacs.eu/Guus">
                     `<presence xmlns="jabber:client" to="romeo@montague.lit/orchard" type="unavailable" from="conversations@conference.siacs.eu/Guus">
@@ -1242,7 +1232,7 @@
                             <delay xmlns="urn:xmpp:delay" stamp="${(new Date()).toISOString()}" from="some1@montague.lit"/>
                             <delay xmlns="urn:xmpp:delay" stamp="${(new Date()).toISOString()}" from="some1@montague.lit"/>
                      </message>`);
                      </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 presence = $pres({
                 presence = $pres({
                         to: 'romeo@montague.lit/_converse.js-29092160',
                         to: 'romeo@montague.lit/_converse.js-29092160',
@@ -1277,7 +1267,7 @@
                            <delay xmlns="urn:xmpp:delay" stamp="${(new Date()).toISOString()}" from="some1@montague.lit"/>"+
                            <delay xmlns="urn:xmpp:delay" stamp="${(new Date()).toISOString()}" from="some1@montague.lit"/>"+
                     </message>`);
                     </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 jasmine.clock().tick(ONE_DAY_LATER);
                 jasmine.clock().tick(ONE_DAY_LATER);
                 // Test a user leaving a groupchat
                 // Test a user leaving a groupchat
@@ -1333,7 +1323,7 @@
                         'type': 'groupchat'
                         'type': 'groupchat'
                     }).c('body').t(message).tree();
                     }).c('body').t(message).tree();
                 await view.model.onMessage(msg);
                 await view.model.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, '**Dyon van de Wege')).toBeTruthy();
                 expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, '**Dyon van de Wege')).toBeTruthy();
                 expect(view.el.querySelector('.chat-msg__text').textContent.trim()).toBe('is tired');
                 expect(view.el.querySelector('.chat-msg__text').textContent.trim()).toBe('is tired');
 
 
@@ -1345,7 +1335,7 @@
                     type: 'groupchat'
                     type: 'groupchat'
                 }).c('body').t(message).tree();
                 }).c('body').t(message).tree();
                 await view.model.onMessage(msg);
                 await view.model.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(_.includes(sizzle('.chat-msg__author:last', view.el).pop().textContent, '**Romeo Montague')).toBeTruthy();
                 expect(_.includes(sizzle('.chat-msg__author:last', view.el).pop().textContent, '**Romeo Montague')).toBeTruthy();
                 expect(sizzle('.chat-msg__text:last', view.el).pop().textContent.trim()).toBe('is as well');
                 expect(sizzle('.chat-msg__text:last', view.el).pop().textContent.trim()).toBe('is as well');
                 done();
                 done();
@@ -1667,7 +1657,7 @@
                 await test_utils.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
                 await test_utils.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
                 var view = _converse.chatboxviews.get('lounge@montague.lit'),
                 var view = _converse.chatboxviews.get('lounge@montague.lit'),
                     occupants = view.el.querySelector('.occupant-list');
                     occupants = view.el.querySelector('.occupant-list');
-                var presence, jid;
+                var presence;
                 for (var i=0; i<mock.chatroom_names.length; i++) {
                 for (var i=0; i<mock.chatroom_names.length; i++) {
                     const name = mock.chatroom_names[i];
                     const name = mock.chatroom_names[i];
                     const role = mock.chatroom_roles[name].role;
                     const role = mock.chatroom_roles[name].role;
@@ -1850,7 +1840,6 @@
                     async function (done, _converse) {
                     async function (done, _converse) {
 
 
                 const IQ_stanzas = _converse.connection.IQ_stanzas;
                 const IQ_stanzas = _converse.connection.IQ_stanzas;
-                const sendIQ = _converse.connection.sendIQ;
                 const muc_jid = 'lounge@montague.lit';
                 const muc_jid = 'lounge@montague.lit';
 
 
                 await test_utils.openChatRoom(_converse, 'lounge', 'montague.lit', 'romeo');
                 await test_utils.openChatRoom(_converse, 'lounge', 'montague.lit', 'romeo');
@@ -1964,7 +1953,6 @@
                 spyOn(_converse.api, "trigger").and.callThrough();
                 spyOn(_converse.api, "trigger").and.callThrough();
                 spyOn(window, 'prompt').and.callFake(() => "Please join!");
                 spyOn(window, 'prompt').and.callFake(() => "Please join!");
                 const view = _converse.chatboxviews.get('lounge@montague.lit');
                 const view = _converse.chatboxviews.get('lounge@montague.lit');
-                const chat_area = view.el.querySelector('.chat-area');
 
 
                 expect(view.model.getOwnAffiliation()).toBe('owner');
                 expect(view.model.getOwnAffiliation()).toBe('owner');
                 expect(view.model.features.get('open')).toBe(false);
                 expect(view.model.features.get('open')).toBe(false);
@@ -2062,7 +2050,7 @@
                     type: 'groupchat'
                     type: 'groupchat'
                 }).c('body').t(text);
                 }).c('body').t(text);
                 await view.model.onMessage(message.nodeTree);
                 await view.model.onMessage(message.nodeTree);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 const chat_content = view.el.querySelector('.chat-content');
                 const chat_content = view.el.querySelector('.chat-content');
                 expect(chat_content.querySelectorAll('.chat-msg').length).toBe(1);
                 expect(chat_content.querySelectorAll('.chat-msg').length).toBe(1);
                 expect(chat_content.querySelector('.chat-msg__text').textContent.trim()).toBe(text);
                 expect(chat_content.querySelector('.chat-msg__text').textContent.trim()).toBe(text);
@@ -2089,7 +2077,7 @@
                     preventDefault: function preventDefault () {},
                     preventDefault: function preventDefault () {},
                     keyCode: 13
                     keyCode: 13
                 });
                 });
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                 expect(_converse.api.trigger).toHaveBeenCalledWith('messageSend', jasmine.any(_converse.Message));
                 expect(_converse.api.trigger).toHaveBeenCalledWith('messageSend', jasmine.any(_converse.Message));
                 const chat_content = view.el.querySelector('.chat-content');
                 const chat_content = view.el.querySelector('.chat-content');
@@ -2136,7 +2124,7 @@
                             type: 'groupchat',
                             type: 'groupchat',
                             id: (new Date()).getTime(),
                             id: (new Date()).getTime(),
                         }).c('body').t('Message: '+i).tree());
                         }).c('body').t('Message: '+i).tree());
-                    promises.push(new Promise((resolve, reject) => view.once('messageInserted', resolve)))
+                    promises.push(new Promise(resolve => view.once('messageInserted', resolve)))
                 }
                 }
                 await Promise.all(promises);
                 await Promise.all(promises);
                 // Give enough time for `markScrolled` to have been called
                 // Give enough time for `markScrolled` to have been called
@@ -2149,7 +2137,7 @@
                             type: 'groupchat',
                             type: 'groupchat',
                             id: (new Date()).getTime(),
                             id: (new Date()).getTime(),
                         }).c('body').t(message).tree());
                         }).c('body').t(message).tree());
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                     // Now check that the message appears inside the chatbox in the DOM
                     // Now check that the message appears inside the chatbox in the DOM
                     const chat_content = view.el.querySelector('.chat-content');
                     const chat_content = view.el.querySelector('.chat-content');
@@ -2175,7 +2163,7 @@
                     </message>`);
                     </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 const view = _converse.chatboxviews.get('jdev@conference.jabber.org');
                 const view = _converse.chatboxviews.get('jdev@conference.jabber.org');
-                await new Promise((resolve, reject) => view.model.once('change:subject', resolve));
+                await new Promise(resolve => view.model.once('change:subject', resolve));
                 expect(sizzle('.chat-event:last').pop().textContent.trim()).toBe('Topic set by ralphm');
                 expect(sizzle('.chat-event:last').pop().textContent.trim()).toBe('Topic set by ralphm');
                 expect(sizzle('.chat-topic:last').pop().textContent.trim()).toBe(text);
                 expect(sizzle('.chat-topic:last').pop().textContent.trim()).toBe(text);
                 expect(view.el.querySelector('.chatroom-description').textContent.trim()).toBe(text);
                 expect(view.el.querySelector('.chatroom-description').textContent.trim()).toBe(text);
@@ -2186,7 +2174,7 @@
                          <body>This is a message</body>
                          <body>This is a message</body>
                      </message>`);
                      </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(sizzle('.chat-topic').length).toBe(1);
                 expect(sizzle('.chat-topic').length).toBe(1);
                 expect(sizzle('.chat-msg__subject').length).toBe(1);
                 expect(sizzle('.chat-msg__subject').length).toBe(1);
                 expect(sizzle('.chat-msg__subject').pop().textContent.trim()).toBe('This is a message subject');
                 expect(sizzle('.chat-msg__subject').pop().textContent.trim()).toBe('This is a message subject');
@@ -2209,7 +2197,6 @@
                     'text': subject,
                     'text': subject,
                     'author': 'ralphm'
                     'author': 'ralphm'
                 }});
                 }});
-                const chat_content = view.el.querySelector('.chat-content');
                 expect(sizzle('.chat-event:last').pop().textContent.trim()).toBe('Topic set by ralphm');
                 expect(sizzle('.chat-event:last').pop().textContent.trim()).toBe('Topic set by ralphm');
                 expect(sizzle('.chat-topic:last').pop().textContent.trim()).toBe(subject);
                 expect(sizzle('.chat-topic:last').pop().textContent.trim()).toBe(subject);
                 done();
                 done();
@@ -2675,12 +2662,11 @@
                     null, ['rosterGroupsFetched'], {},
                     null, ['rosterGroupsFetched'], {},
                     async function (done, _converse) {
                     async function (done, _converse) {
 
 
-                let sent_IQ, IQ_id;
+                let IQ_id;
                 const sendIQ = _converse.connection.sendIQ;
                 const sendIQ = _converse.connection.sendIQ;
 
 
                 await test_utils.openAndEnterChatRoom(_converse, 'coven@chat.shakespeare.lit', 'some1');
                 await test_utils.openAndEnterChatRoom(_converse, 'coven@chat.shakespeare.lit', 'some1');
                 spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
                 spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
-                    sent_IQ = iq;
                     IQ_id = sendIQ.bind(this)(iq, callback, errback);
                     IQ_id = sendIQ.bind(this)(iq, callback, errback);
                 });
                 });
 
 
@@ -4284,7 +4270,6 @@
                     async function (done, _converse) {
                     async function (done, _converse) {
 
 
                 spyOn(_converse.ChatRoomOccupants.prototype, 'fetchMembers').and.callThrough();
                 spyOn(_converse.ChatRoomOccupants.prototype, 'fetchMembers').and.callThrough();
-                const sendIQ = _converse.connection.sendIQ;
                 const sent_IQs = _converse.connection.IQ_stanzas;
                 const sent_IQs = _converse.connection.IQ_stanzas;
                 const muc_jid = 'coven@chat.shakespeare.lit';
                 const muc_jid = 'coven@chat.shakespeare.lit';
 
 
@@ -4430,8 +4415,6 @@
                     async function (done, _converse) {
                     async function (done, _converse) {
 
 
                 await test_utils.openChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'romeo');
                 await test_utils.openChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'romeo');
-                var roomview = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
-
                 var exclude_existing = false;
                 var exclude_existing = false;
                 var remove_absentees = false;
                 var remove_absentees = false;
                 var new_list = [];
                 var new_list = [];
@@ -4696,7 +4679,7 @@
 
 
                 const server_input = modal.el.querySelector('input[name="server"]');
                 const server_input = modal.el.querySelector('input[name="server"]');
                 expect(server_input.placeholder).toBe('conference.example.org');
                 expect(server_input.placeholder).toBe('conference.example.org');
-                const input = server_input.value = 'chat.shakespeare.lit';
+                server_input.value = 'chat.shakespeare.lit';
                 modal.el.querySelector('input[type="submit"]').click();
                 modal.el.querySelector('input[type="submit"]').click();
                 await u.waitUntil(() => _converse.chatboxes.length);
                 await u.waitUntil(() => _converse.chatboxes.length);
 
 
@@ -4840,7 +4823,6 @@
 
 
                 view.model.set({'minimized': true});
                 view.model.set({'minimized': true});
 
 
-                const contact_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@montague.lit';
                 const nick = mock.chatroom_names[0];
                 const nick = mock.chatroom_names[0];
 
 
                 await view.model.onMessage($msg({
                 await view.model.onMessage($msg({
@@ -5045,7 +5027,7 @@
                         type: 'groupchat'
                         type: 'groupchat'
                     }).c('body').t('hello world').tree();
                     }).c('body').t('hello world').tree();
                     await view.model.onMessage(msg);
                     await view.model.onMessage(msg);
-                    await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                    await new Promise(resolve => view.once('messageInserted', resolve));
 
 
                     const messages = view.el.querySelectorAll('.message');
                     const messages = view.el.querySelectorAll('.message');
                     expect(messages.length).toBe(7);
                     expect(messages.length).toBe(7);
@@ -5255,7 +5237,7 @@
                     </message>`);
                     </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
 
 
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 expect(view.el.querySelector('.chat-error').textContent.trim()).toBe(
                 expect(view.el.querySelector('.chat-error').textContent.trim()).toBe(
                     "Your message was not delivered because you're not allowed to send messages in this groupchat.");
                     "Your message was not delivered because you're not allowed to send messages in this groupchat.");
                 done();
                 done();

+ 18 - 19
spec/muc_messages.js

@@ -6,7 +6,7 @@
         ], factory);
         ], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const { Promise, Strophe, $iq, $msg, $pres, sizzle, _ } = converse.env;
+    const { Promise, Strophe, $msg, $pres, sizzle } = converse.env;
     const u = converse.env.utils;
     const u = converse.env.utils;
 
 
     describe("A Groupchat Message", function () {
     describe("A Groupchat Message", function () {
@@ -65,7 +65,7 @@
                     type: 'groupchat'
                     type: 'groupchat'
                 }).c('body').t(message).tree();
                 }).c('body').t(message).tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(u.hasClass('mentioned', view.el.querySelector('.chat-msg'))).toBeTruthy();
             expect(u.hasClass('mentioned', view.el.querySelector('.chat-msg'))).toBeTruthy();
             done();
             done();
         }));
         }));
@@ -87,7 +87,7 @@
                     type: 'groupchat'
                     type: 'groupchat'
                 }).c('body').t('First message').tree();
                 }).c('body').t('First message').tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
 
 
             msg = $msg({
             msg = $msg({
@@ -97,7 +97,7 @@
                     type: 'groupchat'
                     type: 'groupchat'
                 }).c('body').t('Another message').tree();
                 }).c('body').t('Another message').tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
             done();
             done();
         }));
         }));
@@ -223,7 +223,7 @@
                 type: 'groupchat'
                 type: 'groupchat'
             }).c('body').t('I wrote this message!').tree();
             }).c('body').t('I wrote this message!').tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.model.messages.last().occupant.get('affiliation')).toBe('owner');
             expect(view.model.messages.last().occupant.get('affiliation')).toBe('owner');
             expect(view.model.messages.last().occupant.get('role')).toBe('moderator');
             expect(view.model.messages.last().occupant.get('role')).toBe('moderator');
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
@@ -250,7 +250,7 @@
                 type: 'groupchat'
                 type: 'groupchat'
             }).c('body').t('Another message!').tree();
             }).c('body').t('Another message!').tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.model.messages.last().occupant.get('affiliation')).toBe('member');
             expect(view.model.messages.last().occupant.get('affiliation')).toBe('member');
             expect(view.model.messages.last().occupant.get('role')).toBe('participant');
             expect(view.model.messages.last().occupant.get('role')).toBe('participant');
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
@@ -286,7 +286,7 @@
                 type: 'groupchat'
                 type: 'groupchat'
             }).c('body').t('Message from someone not in the MUC right now').tree();
             }).c('body').t('Message from someone not in the MUC right now').tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.model.messages.last().occupant).toBeUndefined();
             expect(view.model.messages.last().occupant).toBeUndefined();
             // Check that there's a new "add" event handler, for when the occupant appears.
             // Check that there's a new "add" event handler, for when the occupant appears.
             expect(view.model.occupants._events.add.length).toBe(add_events+1);
             expect(view.model.occupants._events.add.length).toBe(add_events+1);
@@ -351,7 +351,7 @@
                     type: 'groupchat'
                     type: 'groupchat'
                 }).c('body').t('I wrote this message!').tree();
                 }).c('body').t('I wrote this message!').tree();
             await view.model.onMessage(msg);
             await view.model.onMessage(msg);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.model.messages.last().get('sender')).toBe('me');
             expect(view.model.messages.last().get('sender')).toBe('me');
             done();
             done();
         }));
         }));
@@ -382,7 +382,7 @@
                     'type': 'groupchat',
                     'type': 'groupchat',
                     'id': msg_id,
                     'id': msg_id,
                 }).c('body').t('But soft, what light through yonder airlock breaks?').tree());
                 }).c('body').t('But soft, what light through yonder airlock breaks?').tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelector('.chat-msg__text').textContent)
             expect(view.el.querySelector('.chat-msg__text').textContent)
                 .toBe('But soft, what light through yonder airlock breaks?');
                 .toBe('But soft, what light through yonder airlock breaks?');
@@ -445,7 +445,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelector('.chat-msg__text').textContent)
             expect(view.el.querySelector('.chat-msg__text').textContent)
                 .toBe('But soft, what light through yonder airlock breaks?');
                 .toBe('But soft, what light through yonder airlock breaks?');
@@ -456,7 +456,7 @@
                 target: textarea,
                 target: textarea,
                 keyCode: 38 // Up arrow
                 keyCode: 38 // Up arrow
             });
             });
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
             expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
             expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
             expect(view.model.messages.at(0).get('correcting')).toBe(true);
             expect(view.model.messages.at(0).get('correcting')).toBe(true);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
@@ -470,7 +470,7 @@
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
             expect(_converse.connection.send).toHaveBeenCalled();
             expect(_converse.connection.send).toHaveBeenCalled();
-            await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve));
+            await new Promise(resolve => view.model.messages.once('rendered', resolve));
 
 
             const msg = _converse.connection.send.calls.all()[0].args[0];
             const msg = _converse.connection.send.calls.all()[0].args[0];
             expect(msg.toLocaleString())
             expect(msg.toLocaleString())
@@ -503,7 +503,7 @@
                 'to': 'romeo@montague.lit',
                 'to': 'romeo@montague.lit',
                 'type': 'groupchat'
                 'type': 'groupchat'
             }).c('body').t('Hello world').tree());
             }).c('body').t('Hello world').tree());
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(2);
 
 
             // Test that pressing the down arrow cancels message correction
             // Test that pressing the down arrow cancels message correction
@@ -544,7 +544,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg__body.chat-msg__body--received').length).toBe(0);
             expect(view.el.querySelectorAll('.chat-msg__body.chat-msg__body--received').length).toBe(0);
 
 
             const msg_obj = view.model.messages.at(0);
             const msg_obj = view.model.messages.at(0);
@@ -623,7 +623,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
 
 
             const msg_obj = view.model.messages.at(0);
             const msg_obj = view.model.messages.at(0);
@@ -659,7 +659,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13 // Enter
                 keyCode: 13 // Enter
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
             expect(view.el.querySelector('.chat-msg .chat-msg__body').textContent.trim())
             expect(view.el.querySelector('.chat-msg .chat-msg__body').textContent.trim())
                 .toBe("But soft, what light through yonder airlock breaks?");
                 .toBe("But soft, what light through yonder airlock breaks?");
@@ -744,7 +744,7 @@
                         .c('reference', {'xmlns':'urn:xmpp:reference:0', 'begin':'11', 'end':'14', 'type':'mention', 'uri':'xmpp:romeo@montague.lit'}).up()
                         .c('reference', {'xmlns':'urn:xmpp:reference:0', 'begin':'11', 'end':'14', 'type':'mention', 'uri':'xmpp:romeo@montague.lit'}).up()
                         .c('reference', {'xmlns':'urn:xmpp:reference:0', 'begin':'15', 'end':'23', 'type':'mention', 'uri':'xmpp:mr.robot@montague.lit'}).nodeTree;
                         .c('reference', {'xmlns':'urn:xmpp:reference:0', 'begin':'15', 'end':'23', 'type':'mention', 'uri':'xmpp:mr.robot@montague.lit'}).nodeTree;
                 await view.model.onMessage(msg);
                 await view.model.onMessage(msg);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 const messages = view.el.querySelectorAll('.chat-msg__text');
                 const messages = view.el.querySelectorAll('.chat-msg__text');
                 expect(messages.length).toBe(1);
                 expect(messages.length).toBe(1);
                 expect(messages[0].classList.length).toEqual(1);
                 expect(messages[0].classList.length).toEqual(1);
@@ -907,7 +907,7 @@
                 }
                 }
                 spyOn(_converse.connection, 'send');
                 spyOn(_converse.connection, 'send');
                 view.onKeyDown(enter_event);
                 view.onKeyDown(enter_event);
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                await new Promise(resolve => view.once('messageInserted', resolve));
                 const msg = _converse.connection.send.calls.all()[0].args[0];
                 const msg = _converse.connection.send.calls.all()[0].args[0];
                 expect(msg.toLocaleString())
                 expect(msg.toLocaleString())
                     .toBe(`<message from="romeo@montague.lit/orchard" id="${msg.nodeTree.getAttribute("id")}" `+
                     .toBe(`<message from="romeo@montague.lit/orchard" id="${msg.nodeTree.getAttribute("id")}" `+
@@ -921,7 +921,6 @@
                                 `<origin-id id="${msg.nodeTree.querySelector('origin-id').getAttribute("id")}" xmlns="urn:xmpp:sid:0"/>`+
                                 `<origin-id id="${msg.nodeTree.querySelector('origin-id').getAttribute("id")}" xmlns="urn:xmpp:sid:0"/>`+
                             `</message>`);
                             `</message>`);
 
 
-                const first_msg = view.model.messages.findWhere({'message': 'hello z3r0 gibson mr.robot, how are you?'});
                 const action = view.el.querySelector('.chat-msg .chat-msg__action');
                 const action = view.el.querySelector('.chat-msg .chat-msg__action');
                 action.style.opacity = 1;
                 action.style.opacity = 1;
                 action.click();
                 action.click();

+ 2 - 3
spec/notification.js

@@ -2,7 +2,6 @@
     define(["jasmine", "mock", "test-utils"], factory);
     define(["jasmine", "mock", "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const Strophe = converse.env.Strophe;
     const _ = converse.env._;
     const _ = converse.env._;
     const $msg = converse.env.$msg;
     const $msg = converse.env.$msg;
     const u = converse.env.utils;
     const u = converse.env.utils;
@@ -73,7 +72,7 @@
                             }).c('body').t(message).tree();
                             }).c('body').t(message).tree();
 
 
                         _converse.connection._dataRecv(test_utils.createRequest(msg));
                         _converse.connection._dataRecv(test_utils.createRequest(msg));
-                        await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                        await new Promise(resolve => view.once('messageInserted', resolve));
                         expect(_converse.areDesktopNotificationsEnabled).toHaveBeenCalled();
                         expect(_converse.areDesktopNotificationsEnabled).toHaveBeenCalled();
                         expect(_converse.showMessageNotification).toHaveBeenCalled();
                         expect(_converse.showMessageNotification).toHaveBeenCalled();
                         if (no_notification) {
                         if (no_notification) {
@@ -103,7 +102,7 @@
                         _converse.connection._dataRecv(test_utils.createRequest(stanza));
                         _converse.connection._dataRecv(test_utils.createRequest(stanza));
                         await u.waitUntil(() => _converse.chatboxviews.keys().length);
                         await u.waitUntil(() => _converse.chatboxviews.keys().length);
                         const view = _converse.chatboxviews.get('notify.example.com');
                         const view = _converse.chatboxviews.get('notify.example.com');
-                        await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                        await new Promise(resolve => view.once('messageInserted', resolve));
                         expect(
                         expect(
                             _.includes(_converse.chatboxviews.keys(),
                             _.includes(_converse.chatboxviews.keys(),
                                 'notify.example.com')
                                 'notify.example.com')

+ 2 - 15
spec/omemo.js

@@ -205,7 +205,7 @@
                             .up().up()
                             .up().up()
                         .c('payload').t(obj.payload);
                         .c('payload').t(obj.payload);
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             expect(view.model.messages.length).toBe(2);
             expect(view.model.messages.length).toBe(2);
             expect(view.el.querySelectorAll('.chat-msg__body')[1].textContent.trim())
             expect(view.el.querySelectorAll('.chat-msg__body')[1].textContent.trim())
                 .toBe('This is an encrypted message from the contact');
                 .toBe('This is an encrypted message from the contact');
@@ -224,7 +224,7 @@
                         .up().up()
                         .up().up()
                     .c('payload').t(obj.payload);
                     .c('payload').t(obj.payload);
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
             _converse.connection._dataRecv(test_utils.createRequest(stanza));
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             await u.waitUntil(() => view.model.messages.length > 1);
             await u.waitUntil(() => view.model.messages.length > 1);
             expect(view.model.messages.length).toBe(3);
             expect(view.model.messages.length).toBe(3);
             expect(view.el.querySelectorAll('.chat-msg__body')[2].textContent.trim())
             expect(view.el.querySelectorAll('.chat-msg__body')[2].textContent.trim())
@@ -386,7 +386,6 @@
 
 
             await test_utils.waitUntilDiscoConfirmed(_converse, _converse.bare_jid, [], [Strophe.NS.SID]);
             await test_utils.waitUntilDiscoConfirmed(_converse, _converse.bare_jid, [], [Strophe.NS.SID]);
 
 
-            let sent_stanza;
             test_utils.createContacts(_converse, 'current', 1);
             test_utils.createContacts(_converse, 'current', 1);
             _converse.api.trigger('rosterContactsFetched');
             _converse.api.trigger('rosterContactsFetched');
             const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
@@ -606,7 +605,6 @@
                 async function (done, _converse) {
                 async function (done, _converse) {
 
 
             _converse.NUM_PREKEYS = 5; // Restrict to 5, otherwise the resulting stanza is too large to easily test
             _converse.NUM_PREKEYS = 5; // Restrict to 5, otherwise the resulting stanza is too large to easily test
-            let view, sent_stanza;
             test_utils.createContacts(_converse, 'current', 1);
             test_utils.createContacts(_converse, 'current', 1);
             _converse.api.trigger('rosterContactsFetched');
             _converse.api.trigger('rosterContactsFetched');
             const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
@@ -1548,15 +1546,4 @@
             done();
             done();
         }));
         }));
     });
     });
-
-    describe("A chatbox with an active OMEMO session", function() {
-
-        it("will not show the spoiler toolbar button",
-            mock.initConverse(
-                null, ['rosterGroupsFetched'], {},
-                function (done, _converse) {
-            // TODO
-            done()
-        }));
-    });
 }));
 }));

+ 0 - 4
spec/presence.js

@@ -8,10 +8,6 @@
     ], factory);
     ], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const Strophe = converse.env.Strophe;
-    const $iq = converse.env.$iq;
-    const $pres = converse.env.$pres;
-    const _ = converse.env._;
     const u = converse.env.utils;
     const u = converse.env.utils;
     // See: https://xmpp.org/rfcs/rfc3921.html
     // See: https://xmpp.org/rfcs/rfc3921.html
 
 

+ 0 - 2
spec/profiling.js

@@ -15,8 +15,6 @@
 
 
             test_utils.openControlBox();
             test_utils.openControlBox();
             await test_utils.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
             await test_utils.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-            const view = _converse.chatboxviews.get('lounge@montague.lit'),
-                  occupants = view.el.querySelector('.occupant-list');
             _.rangeRight(3000, 0).forEach(i => {
             _.rangeRight(3000, 0).forEach(i => {
                 const name = `User ${i.toString().padStart(5, '0')}`;
                 const name = `User ${i.toString().padStart(5, '0')}`;
                 const presence = $pres({
                 const presence = $pres({

+ 2 - 6
spec/protocol.js

@@ -389,12 +389,8 @@
                 expect(_converse.roster.get('contact@example.org') instanceof _converse.RosterContact).toBeTruthy();
                 expect(_converse.roster.get('contact@example.org') instanceof _converse.RosterContact).toBeTruthy();
                 spyOn(contact, "ackUnsubscribe").and.callThrough();
                 spyOn(contact, "ackUnsubscribe").and.callThrough();
 
 
-                spyOn(_converse.connection, 'send').and.callFake(function (stanza) {
-                    sent_stanza = stanza;
-                });
-                spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
-                    sent_IQ = iq;
-                });
+                spyOn(_converse.connection, 'send').and.callFake(stanza => { sent_stanza = stanza });
+                spyOn(_converse.connection, 'sendIQ').and.callFake(iq => { sent_IQ = iq });
                 /* We now assume the contact declines the subscription
                 /* We now assume the contact declines the subscription
                  * requests.
                  * requests.
                  *
                  *

+ 0 - 1
spec/push.js

@@ -59,7 +59,6 @@
                 }, async function (done, _converse) {
                 }, async function (done, _converse) {
 
 
             const IQ_stanzas = _converse.connection.IQ_stanzas;
             const IQ_stanzas = _converse.connection.IQ_stanzas;
-            const room_jid = 'coven@chat.shakespeare.lit';
             await test_utils.waitUntilDiscoConfirmed(
             await test_utils.waitUntilDiscoConfirmed(
                 _converse, _converse.push_app_servers[0].jid,
                 _converse, _converse.push_app_servers[0].jid,
                 [{'category': 'pubsub', 'type':'push'}],
                 [{'category': 'pubsub', 'type':'push'}],

+ 0 - 1
spec/room_registration.js

@@ -74,7 +74,6 @@
                     null, ['rosterGroupsFetched', 'chatBoxesFetched'], {'auto_register_muc_nickname': true},
                     null, ['rosterGroupsFetched', 'chatBoxesFetched'], {'auto_register_muc_nickname': true},
                     async function (done, _converse) {
                     async function (done, _converse) {
 
 
-                const IQ_stanzas = _converse.connection.IQ_stanzas;
                 const muc_jid = 'coven@chat.shakespeare.lit';
                 const muc_jid = 'coven@chat.shakespeare.lit';
                 await test_utils.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
                 await test_utils.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
                 const view = _converse.chatboxviews.get(muc_jid);
                 const view = _converse.chatboxviews.get(muc_jid);

+ 1 - 5
spec/roomslist.js

@@ -1,7 +1,7 @@
 (function (root, factory) {
 (function (root, factory) {
     define(["jasmine", "mock", "test-utils"], factory);
     define(["jasmine", "mock", "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
-    const { Backbone, Promise, Strophe, $iq, $msg, $pres, b64_sha1, sizzle, _ } = converse.env;
+    const { Strophe, $iq, $msg, $pres, sizzle, _ } = converse.env;
     const u = converse.env.utils;
     const u = converse.env.utils;
 
 
 
 
@@ -59,9 +59,6 @@
                 async function (done, _converse) {
                 async function (done, _converse) {
 
 
             await test_utils.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
             await test_utils.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-            const view = _converse.chatboxviews.get('lounge@montague.lit');
-
-            const contact_jid = 'newguy@montague.lit';
             let stanza = $pres({
             let stanza = $pres({
                     to: 'romeo@montague.lit/orchard',
                     to: 'romeo@montague.lit/orchard',
                     from: 'lounge@montague.lit/newguy'
                     from: 'lounge@montague.lit/newguy'
@@ -291,7 +288,6 @@
             await test_utils.openAndEnterChatRoom(_converse, 'kitchen@conference.shakespeare.lit', 'romeo');
             await test_utils.openAndEnterChatRoom(_converse, 'kitchen@conference.shakespeare.lit', 'romeo');
             const view = _converse.chatboxviews.get(room_jid);
             const view = _converse.chatboxviews.get(room_jid);
             view.model.set({'minimized': true});
             view.model.set({'minimized': true});
-            const contact_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@montague.lit';
             const nick = mock.chatroom_names[0];
             const nick = mock.chatroom_names[0];
             await view.model.onMessage(
             await view.model.onMessage(
                 $msg({
                 $msg({

+ 4 - 8
spec/roster.js

@@ -2,7 +2,6 @@
     define(["jasmine", "mock", "test-utils"], factory);
     define(["jasmine", "mock", "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     const $iq = converse.env.$iq;
     const $iq = converse.env.$iq;
-    const $msg = converse.env.$msg;
     const $pres = converse.env.$pres;
     const $pres = converse.env.$pres;
     const Strophe = converse.env.Strophe;
     const Strophe = converse.env.Strophe;
     const _ = converse.env._;
     const _ = converse.env._;
@@ -187,7 +186,7 @@
                 const roster = _converse.rosterview.roster_el;
                 const roster = _converse.rosterview.roster_el;
                 _converse.rosterview.filter_view.delegateEvents();
                 _converse.rosterview.filter_view.delegateEvents();
 
 
-                const contacts = await u.waitUntil(() => (sizzle('li', roster).filter(u.isVisible).length === 15), 600);
+                await u.waitUntil(() => (sizzle('li', roster).filter(u.isVisible).length === 15), 600);
                 expect(sizzle('ul.roster-group-contacts', roster).filter(u.isVisible).length).toBe(5);
                 expect(sizzle('ul.roster-group-contacts', roster).filter(u.isVisible).length).toBe(5);
                 filter.value = "juliet";
                 filter.value = "juliet";
                 u.triggerEvent(filter, "keydown", "KeyboardEvent");
                 u.triggerEvent(filter, "keydown", "KeyboardEvent");
@@ -286,7 +285,7 @@
                 var button = _converse.rosterview.el.querySelector('span[data-type="groups"]');
                 var button = _converse.rosterview.el.querySelector('span[data-type="groups"]');
                 button.click();
                 button.click();
 
 
-                const contacts = await u.waitUntil(() => (sizzle('li', roster).filter(u.isVisible).length === 15), 600);
+                await u.waitUntil(() => (sizzle('li', roster).filter(u.isVisible).length === 15), 600);
                 expect(sizzle('.roster-group', roster).filter(u.isVisible).length).toBe(5);
                 expect(sizzle('.roster-group', roster).filter(u.isVisible).length).toBe(5);
 
 
                 var filter = _converse.rosterview.el.querySelector('.roster-filter');
                 var filter = _converse.rosterview.el.querySelector('.roster-filter');
@@ -403,7 +402,6 @@
                     "Pending contacts"
                     "Pending contacts"
                 ]);
                 ]);
                 // Check that usernames appear alphabetically per group
                 // Check that usernames appear alphabetically per group
-                let names;
                 _.each(_.keys(mock.groups), function (name) {
                 _.each(_.keys(mock.groups), function (name) {
                     const contacts = sizzle('.roster-group[data-group="'+name+'"] ul', _converse.rosterview.el);
                     const contacts = sizzle('.roster-group[data-group="'+name+'"] ul', _converse.rosterview.el);
                     const names = _.map(contacts, o => o.textContent.trim());
                     const names = _.map(contacts, o => o.textContent.trim());
@@ -608,8 +606,7 @@
                 spyOn(contact, 'unauthorize').and.callFake(function () { return contact; });
                 spyOn(contact, 'unauthorize').and.callFake(function () { return contact; });
                 spyOn(contact, 'removeFromRoster').and.callThrough();
                 spyOn(contact, 'removeFromRoster').and.callThrough();
                 await u.waitUntil(() => sizzle(".pending-contact-name:contains('"+name+"')", _converse.rosterview.el).length, 700);
                 await u.waitUntil(() => sizzle(".pending-contact-name:contains('"+name+"')", _converse.rosterview.el).length, 700);
-                var sendIQ = _converse.connection.sendIQ;
-                spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+                spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback) {
                     sent_IQ = iq;
                     sent_IQ = iq;
                     callback();
                     callback();
                 });
                 });
@@ -784,9 +781,8 @@
                 spyOn(window, 'confirm').and.returnValue(true);
                 spyOn(window, 'confirm').and.returnValue(true);
                 spyOn(contact, 'removeFromRoster').and.callThrough();
                 spyOn(contact, 'removeFromRoster').and.callThrough();
 
 
-                const sendIQ = _converse.connection.sendIQ;
                 let sent_IQ;
                 let sent_IQ;
-                spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+                spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback) {
                     sent_IQ = iq;
                     sent_IQ = iq;
                     callback();
                     callback();
                 });
                 });

+ 4 - 4
spec/spoilers.js

@@ -36,7 +36,7 @@
                 .tree();
                 .tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
             const view = _converse.chatboxviews.get(sender_jid);
             const view = _converse.chatboxviews.get(sender_jid);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             await u.waitUntil(() => view.model.vcard.get('fullname') === 'Mercutio')
             await u.waitUntil(() => view.model.vcard.get('fullname') === 'Mercutio')
             expect(view.el.querySelector('.chat-msg__author').textContent.trim()).toBe('Mercutio');
             expect(view.el.querySelector('.chat-msg__author').textContent.trim()).toBe('Mercutio');
             const message_content = view.el.querySelector('.chat-msg__text');
             const message_content = view.el.querySelector('.chat-msg__text');
@@ -70,7 +70,7 @@
                     }).tree();
                     }).tree();
             await _converse.chatboxes.onMessage(msg);
             await _converse.chatboxes.onMessage(msg);
             const view = _converse.chatboxviews.get(sender_jid);
             const view = _converse.chatboxviews.get(sender_jid);
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
             await u.waitUntil(() => view.model.vcard.get('fullname') === 'Mercutio')
             await u.waitUntil(() => view.model.vcard.get('fullname') === 'Mercutio')
             expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, 'Mercutio')).toBeTruthy();
             expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, 'Mercutio')).toBeTruthy();
             const message_content = view.el.querySelector('.chat-msg__text');
             const message_content = view.el.querySelector('.chat-msg__text');
@@ -114,7 +114,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13
                 keyCode: 13
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             /* Test the XML stanza
             /* Test the XML stanza
              *
              *
@@ -191,7 +191,7 @@
                 preventDefault: function preventDefault () {},
                 preventDefault: function preventDefault () {},
                 keyCode: 13
                 keyCode: 13
             });
             });
-            await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+            await new Promise(resolve => view.once('messageInserted', resolve));
 
 
             /* Test the XML stanza
             /* Test the XML stanza
              *
              *

+ 0 - 4
spec/user-details-modal.js

@@ -6,10 +6,6 @@
         ], factory);
         ], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     "use strict";
     "use strict";
-    const _ = converse.env._;
-    const $iq = converse.env.$iq;
-    const $msg = converse.env.$msg;
-    const Strophe = converse.env.Strophe;
     const u = converse.env.utils;
     const u = converse.env.utils;
 
 
     return describe("The User Details Modal", function () {
     return describe("The User Details Modal", function () {

+ 1 - 1
spec/utils.js

@@ -1,6 +1,6 @@
 (function (root, factory) {
 (function (root, factory) {
     define(["jasmine"], factory);
     define(["jasmine"], factory);
-} (this, function (jasmine) {
+} (this, function () {
     var utils = converse.env.utils,
     var utils = converse.env.utils,
         _ = converse.env._;
         _ = converse.env._;
 
 

+ 2 - 2
spec/xmppstatus.js

@@ -1,6 +1,6 @@
 (function (root, factory) {
 (function (root, factory) {
-    define(["jasmine", "mock", "test-utils"], factory);
-} (this, function (jasmine, mock, test_utils) {
+    define(["jasmine", "mock"], factory);
+} (this, function (jasmine, mock) {
 
 
     return describe("The XMPPStatus model", function () {
     return describe("The XMPPStatus model", function () {
 
 

+ 0 - 1
src/converse-autocomplete.js

@@ -194,7 +194,6 @@ converse.plugins.add("converse-autocomplete", {
             }
             }
 
 
             insertValue (suggestion) {
             insertValue (suggestion) {
-                let value;
                 if (this.match_current_word) {
                 if (this.match_current_word) {
                     u.replaceCurrentWord(this.input, suggestion.value);
                     u.replaceCurrentWord(this.input, suggestion.value);
                 } else {
                 } else {

+ 2 - 2
src/converse-bookmark-views.js

@@ -95,7 +95,7 @@ converse.plugins.add('converse-bookmark-views', {
                  */
                  */
                 ev.preventDefault();
                 ev.preventDefault();
                 const jid = ev.target.getAttribute('data-room-jid');
                 const jid = ev.target.getAttribute('data-room-jid');
-                const chatroom = _converse.api.rooms.open(jid, {'bring_to_foreground': true});
+                _converse.api.rooms.open(jid, {'bring_to_foreground': true});
                 _converse.chatboxviews.get(jid).renderBookmarkForm();
                 _converse.chatboxviews.get(jid).renderBookmarkForm();
             },
             },
         });
         });
@@ -307,7 +307,7 @@ converse.plugins.add('converse-bookmark-views', {
                 }
                 }
             },
             },
 
 
-            showOrHide (item) {
+            showOrHide () {
                 if (_converse.hide_open_bookmarks) {
                 if (_converse.hide_open_bookmarks) {
                     const bookmarks = this.model.filter((bookmark) =>
                     const bookmarks = this.model.filter((bookmark) =>
                             !_converse.chatboxes.get(bookmark.get('jid')));
                             !_converse.chatboxes.get(bookmark.get('jid')));

+ 2 - 5
src/converse-chatboxviews.js

@@ -63,12 +63,9 @@ converse.plugins.add('converse-chatboxviews', {
         /* The initialize function gets called as soon as the plugin is
         /* The initialize function gets called as soon as the plugin is
          * loaded by converse.js's plugin machinery.
          * loaded by converse.js's plugin machinery.
          */
          */
-        const { _converse } = this,
-              { __ } = _converse;
+        const { _converse } = this;
 
 
-        _converse.api.promises.add([
-            'chatBoxViewsInitialized'
-        ]);
+        _converse.api.promises.add(['chatBoxViewsInitialized']);
 
 
         // Configuration values for this plugin
         // Configuration values for this plugin
         // ====================================
         // ====================================

+ 10 - 10
src/converse-controlbox.js

@@ -8,7 +8,7 @@
  * @module converse-controlbox
  * @module converse-controlbox
  */
  */
 import "converse-chatview";
 import "converse-chatview";
-import _FormData from "formdata-polyfill";
+import "formdata-polyfill";
 import bootstrap from "bootstrap.native";
 import bootstrap from "bootstrap.native";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import { get } from "lodash";
 import { get } from "lodash";
@@ -17,7 +17,6 @@ import tpl_controlbox from "templates/controlbox.html";
 import tpl_controlbox_toggle from "templates/controlbox_toggle.html";
 import tpl_controlbox_toggle from "templates/controlbox_toggle.html";
 import tpl_login_panel from "templates/login_panel.html";
 import tpl_login_panel from "templates/login_panel.html";
 
 
-const CHATBOX_TYPE = 'chatbox';
 const { Strophe, Backbone, dayjs } = converse.env;
 const { Strophe, Backbone, dayjs } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
@@ -109,7 +108,7 @@ converse.plugins.add('converse-controlbox', {
         },
         },
 
 
         ChatBox: {
         ChatBox: {
-            validate (attrs, options) {
+            validate (attrs) {
                 const { _converse } = this.__super__;
                 const { _converse } = this.__super__;
                 if (attrs.type === _converse.CONTROLBOX_TYPE) {
                 if (attrs.type === _converse.CONTROLBOX_TYPE) {
                     if (_converse.view_mode === 'embedded' && _converse.singleton)  {
                     if (_converse.view_mode === 'embedded' && _converse.singleton)  {
@@ -270,12 +269,13 @@ converse.plugins.add('converse-controlbox', {
                 return this;
                 return this;
             },
             },
 
 
+            /**
+             * Renders the "Contacts" panel of the controlbox.
+             * This will only be called after the user has already been logged in.
+             * @private
+             * @method _converse.ControlBoxView.renderControlBoxPane
+             */
             renderControlBoxPane () {
             renderControlBoxPane () {
-                /* Renders the "Contacts" panel of the controlbox.
-                 *
-                 * This will only be called after the user has already been
-                 * logged in.
-                 */
                 if (this.loginpanel) {
                 if (this.loginpanel) {
                     this.loginpanel.remove();
                     this.loginpanel.remove();
                     delete this.loginpanel;
                     delete this.loginpanel;
@@ -366,7 +366,7 @@ converse.plugins.add('converse-controlbox', {
                 'change input': 'validate'
                 'change input': 'validate'
             },
             },
 
 
-            initialize (cfg) {
+            initialize () {
                 this.listenTo(this.model, 'change', this.render)
                 this.listenTo(this.model, 'change', this.render)
                 this.listenTo(_converse.connfeedback, 'change', this.render);
                 this.listenTo(_converse.connfeedback, 'change', this.render);
                 this.render();
                 this.render();
@@ -402,7 +402,7 @@ converse.plugins.add('converse-controlbox', {
 
 
             initPopovers () {
             initPopovers () {
                 Array.from(this.el.querySelectorAll('[data-title]')).forEach(el => {
                 Array.from(this.el.querySelectorAll('[data-title]')).forEach(el => {
-                    const popover = new bootstrap.Popover(el, {
+                    new bootstrap.Popover(el, {
                         'trigger': _converse.view_mode === 'mobile' && 'click' || 'hover',
                         'trigger': _converse.view_mode === 'mobile' && 'click' || 'hover',
                         'dismissible': _converse.view_mode === 'mobile' && true || false,
                         'dismissible': _converse.view_mode === 'mobile' && true || false,
                         'container': this.el.parentElement.parentElement.parentElement
                         'container': this.el.parentElement.parentElement.parentElement

+ 0 - 2
src/converse-fullscreen.js

@@ -14,8 +14,6 @@ import "converse-singleton";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_brand_heading from "templates/inverse_brand_heading.html";
 import tpl_brand_heading from "templates/inverse_brand_heading.html";
 
 
-const { Strophe, _ } = converse.env;
-
 
 
 converse.plugins.add('converse-fullscreen', {
 converse.plugins.add('converse-fullscreen', {
 
 

+ 6 - 8
src/converse-headline.js

@@ -10,7 +10,7 @@ import "converse-chatview";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_chatbox from "templates/chatbox.html";
 import tpl_chatbox from "templates/chatbox.html";
 
 
-const { _, dayjs, utils } = converse.env;
+const { utils } = converse.env;
 
 
 
 
 converse.plugins.add('converse-headline', {
 converse.plugins.add('converse-headline', {
@@ -50,14 +50,13 @@ converse.plugins.add('converse-headline', {
         /* The initialize function gets called as soon as the plugin is
         /* The initialize function gets called as soon as the plugin is
          * loaded by converse.js's plugin machinery.
          * loaded by converse.js's plugin machinery.
          */
          */
-        const { _converse } = this,
-            { __ } = _converse;
+        const { _converse } = this;
 
 
         _converse.HeadlinesBox = _converse.ChatBox.extend({
         _converse.HeadlinesBox = _converse.ChatBox.extend({
             defaults () {
             defaults () {
                 return {
                 return {
                     'bookmarked': false,
                     'bookmarked': false,
-                    'hidden': _.includes(['mobile', 'fullscreen'], _converse.view_mode),
+                    'hidden': ['mobile', 'fullscreen'].includes(_converse.view_mode),
                     'message_type': 'headline',
                     'message_type': 'headline',
                     'num_unread': 0,
                     'num_unread': 0,
                     'time_opened': this.get('time_opened') || (new Date()).getTime(),
                     'time_opened': this.get('time_opened') || (new Date()).getTime(),
@@ -120,14 +119,13 @@ converse.plugins.add('converse-headline', {
             /* Handler method for all incoming messages of type "headline". */
             /* Handler method for all incoming messages of type "headline". */
             if (utils.isHeadlineMessage(_converse, message)) {
             if (utils.isHeadlineMessage(_converse, message)) {
                 const from_jid = message.getAttribute('from');
                 const from_jid = message.getAttribute('from');
-                if (_.includes(from_jid, '@') &&
+                if (from_jid.includes('@') &&
                         !_converse.roster.get(from_jid) &&
                         !_converse.roster.get(from_jid) &&
                         !_converse.allow_non_roster_messaging) {
                         !_converse.allow_non_roster_messaging) {
                     return;
                     return;
                 }
                 }
-                if (_.isNull(message.querySelector('body'))) {
-                    // Avoid creating a chat box if we have nothing to show
-                    // inside it.
+                if (message.querySelector('body') === null) {
+                    // Avoid creating a chat box if we have nothing to show inside it.
                     return;
                     return;
                 }
                 }
                 const chatbox = _converse.chatboxes.create({
                 const chatbox = _converse.chatboxes.create({

+ 1 - 2
src/converse-mam-views.js

@@ -33,8 +33,7 @@ converse.plugins.add('converse-mam-views', {
                 return result;
                 return result;
             },
             },
 
 
-            async onScroll (ev) {
-                const { _converse } = this.__super__;
+            async onScroll () {
                 if (this.content.scrollTop === 0 && this.model.messages.length) {
                 if (this.content.scrollTop === 0 && this.model.messages.length) {
                     const oldest_message = this.model.getOldestMessage();
                     const oldest_message = this.model.getOldestMessage();
                     if (oldest_message) {
                     if (oldest_message) {

+ 2 - 2
src/converse-message-view.js

@@ -6,12 +6,12 @@
 /**
 /**
  * @module converse-message-view
  * @module converse-message-view
  */
  */
+import "./utils/html";
 import "@converse/headless/converse-emoji";
 import "@converse/headless/converse-emoji";
 import URI from "urijs";
 import URI from "urijs";
 import converse from  "@converse/headless/converse-core";
 import converse from  "@converse/headless/converse-core";
 import { debounce } from 'lodash'
 import { debounce } from 'lodash'
 import filesize from "filesize";
 import filesize from "filesize";
-import html from "./utils/html";
 import tpl_csn from "templates/csn.html";
 import tpl_csn from "templates/csn.html";
 import tpl_file_progress from "templates/file_progress.html";
 import tpl_file_progress from "templates/file_progress.html";
 import tpl_info from "templates/info.html";
 import tpl_info from "templates/info.html";
@@ -20,7 +20,7 @@ import tpl_message_versions_modal from "templates/message_versions_modal.html";
 import tpl_spinner from "templates/spinner.html";
 import tpl_spinner from "templates/spinner.html";
 import xss from "xss/dist/xss";
 import xss from "xss/dist/xss";
 
 
-const { Backbone, dayjs } = converse.env;
+const { dayjs } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 
 

+ 4 - 4
src/converse-minimize.js

@@ -100,13 +100,13 @@ converse.plugins.add('converse-minimize', {
 
 
             setChatBoxHeight (height) {
             setChatBoxHeight (height) {
                 if (!this.model.get('minimized')) {
                 if (!this.model.get('minimized')) {
-                    return this.__super__.setChatBoxHeight.apply(this, arguments);
+                    return this.__super__.setChatBoxHeight.call(this, height);
                 }
                 }
             },
             },
 
 
             setChatBoxWidth (width) {
             setChatBoxWidth (width) {
                 if (!this.model.get('minimized')) {
                 if (!this.model.get('minimized')) {
-                    return this.__super__.setChatBoxWidth.apply(this, arguments);
+                    return this.__super__.setChatBoxWidth.call(this, width);
                 }
                 }
             }
             }
         },
         },
@@ -115,7 +115,7 @@ converse.plugins.add('converse-minimize', {
             render () {
             render () {
                 const { _converse } = this.__super__,
                 const { _converse } = this.__super__,
                     { __ } = _converse;
                     { __ } = _converse;
-                const result = this.__super__.render.apply(this, arguments);
+                this.__super__.render.apply(this, arguments);
                 const new_html = tpl_chatbox_minimize({
                 const new_html = tpl_chatbox_minimize({
                     'info_minimize': __('Minimize this chat box')
                     'info_minimize': __('Minimize this chat box')
                 });
                 });
@@ -251,7 +251,7 @@ converse.plugins.add('converse-minimize', {
              * Minimizes a chat box.
              * Minimizes a chat box.
              * @returns {_converse.ChatBoxView|_converse.ChatRoomView}
              * @returns {_converse.ChatBoxView|_converse.ChatRoomView}
              */
              */
-            minimize (ev) {
+            minimize () {
                 this.model.minimize();
                 this.model.minimize();
                 return this;
                 return this;
             },
             },

+ 9 - 12
src/converse-muc-views.js

@@ -11,12 +11,11 @@
  */
  */
 import "converse-modal";
 import "converse-modal";
 import "backbone.vdomview";
 import "backbone.vdomview";
+import "formdata-polyfill";
+import "@converse/headless/utils/muc";
 import BrowserStorage from "backbone.browserStorage";
 import BrowserStorage from "backbone.browserStorage";
 import { OrderedListView } from "backbone.overview";
 import { OrderedListView } from "backbone.overview";
-import _FormData from "formdata-polyfill";
-import bootstrap from "bootstrap.native";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
-import muc_utils from "@converse/headless/utils/muc";
 import tpl_add_chatroom_modal from "templates/add_chatroom_modal.html";
 import tpl_add_chatroom_modal from "templates/add_chatroom_modal.html";
 import tpl_chatarea from "templates/chatarea.html";
 import tpl_chatarea from "templates/chatarea.html";
 import tpl_chatroom from "templates/chatroom.html";
 import tpl_chatroom from "templates/chatroom.html";
@@ -43,12 +42,11 @@ import tpl_spinner from "templates/spinner.html";
 import xss from "xss/dist/xss";
 import xss from "xss/dist/xss";
 
 
 
 
-const { Backbone, Strophe, dayjs, sizzle, _, $iq, $msg, $pres } = converse.env;
+const { Backbone, Strophe, sizzle, _, $iq, $pres } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 const ROLES = ['moderator', 'participant', 'visitor'];
 const ROLES = ['moderator', 'participant', 'visitor'];
 const AFFILIATIONS = ['admin', 'member', 'outcast', 'owner'];
 const AFFILIATIONS = ['admin', 'member', 'outcast', 'owner'];
-const AFFILIATION_CHANGE_COMANDS = ['admin', 'ban', 'owner', 'member', 'revoke'];
 const OWNER_COMMANDS = ['owner'];
 const OWNER_COMMANDS = ['owner'];
 const ADMIN_COMMANDS = ['admin', 'ban', 'deop', 'destroy', 'member', 'op', 'revoke'];
 const ADMIN_COMMANDS = ['admin', 'ban', 'deop', 'destroy', 'member', 'op', 'revoke'];
 const MODERATOR_COMMANDS = ['kick', 'mute', 'voice', 'modtools'];
 const MODERATOR_COMMANDS = ['kick', 'mute', 'voice', 'modtools'];
@@ -439,7 +437,7 @@ converse.plugins.add('converse-muc-views', {
                 toggleRoomInfo(ev);
                 toggleRoomInfo(ev);
             },
             },
 
 
-            onDomainChange (model) {
+            onDomainChange () {
                 if (_converse.auto_list_rooms) {
                 if (_converse.auto_list_rooms) {
                     this.updateRoomsList();
                     this.updateRoomsList();
                 }
                 }
@@ -500,7 +498,7 @@ converse.plugins.add('converse-muc-views', {
                 }).c("query", {xmlns: Strophe.NS.DISCO_ITEMS});
                 }).c("query", {xmlns: Strophe.NS.DISCO_ITEMS});
                 _converse.api.sendIQ(iq)
                 _converse.api.sendIQ(iq)
                     .then(iq => this.onRoomsFound(iq))
                     .then(iq => this.onRoomsFound(iq))
-                    .catch(iq => this.informNoRoomsFound())
+                    .catch(() => this.informNoRoomsFound())
             },
             },
 
 
             showRooms (ev) {
             showRooms (ev) {
@@ -952,7 +950,7 @@ converse.plugins.add('converse-muc-views', {
                 }
                 }
             },
             },
 
 
-            hideOccupants (ev, preserve_state) {
+            hideOccupants (ev) {
                 /* Show or hide the right sidebar containing the chat
                 /* Show or hide the right sidebar containing the chat
                  * occupants (and the invite widget).
                  * occupants (and the invite widget).
                  */
                  */
@@ -1037,7 +1035,7 @@ converse.plugins.add('converse-muc-views', {
                 if (!args.startsWith('@')) {
                 if (!args.startsWith('@')) {
                     args = '@'+ args;
                     args = '@'+ args;
                 }
                 }
-                const [text, references] = this.model.parseTextForReferences(args);
+                const [text, references] = this.model.parseTextForReferences(args); // eslint-disable-line no-unused-vars
                 if (!references.length) {
                 if (!references.length) {
                     this.showErrorMessage(__("Error: couldn't find a groupchat participant based on your arguments"));
                     this.showErrorMessage(__("Error: couldn't find a groupchat participant based on your arguments"));
                     return;
                     return;
@@ -1312,7 +1310,7 @@ converse.plugins.add('converse-muc-views', {
                 this.renderAfterTransition();
                 this.renderAfterTransition();
             },
             },
 
 
-            getAndRenderConfigurationForm (ev) {
+            getAndRenderConfigurationForm () {
                 /* Start the process of configuring a groupchat, either by
                 /* Start the process of configuring a groupchat, either by
                  * rendering a configuration form, or by auto-configuring
                  * rendering a configuration form, or by auto-configuring
                  * based on the "roomconfig" data stored on the
                  * based on the "roomconfig" data stored on the
@@ -1451,7 +1449,6 @@ converse.plugins.add('converse-muc-views', {
             getNotificationWithMessage (message) {
             getNotificationWithMessage (message) {
                 let el = this.content.lastElementChild;
                 let el = this.content.lastElementChild;
                 while (el) {
                 while (el) {
-                    const data = _.get(el, 'dataset', {});
                     if (!_.includes(_.get(el, 'classList', []), 'chat-info')) {
                     if (!_.includes(_.get(el, 'classList', []), 'chat-info')) {
                         return;
                         return;
                     }
                     }
@@ -2061,7 +2058,7 @@ converse.plugins.add('converse-muc-views', {
                     'list': list
                     'list': list
                 });
                 });
                 this.invite_auto_complete.on('suggestion-box-selectcomplete', ev => this.promptForInvite(ev));
                 this.invite_auto_complete.on('suggestion-box-selectcomplete', ev => this.promptForInvite(ev));
-                this.invite_auto_complete.on('suggestion-box-open', ev => {
+                this.invite_auto_complete.on('suggestion-box-open', () => {
                     this.invite_auto_complete.ul.setAttribute('style', `max-height: calc(${this.el.offsetHeight}px - 80px);`);
                     this.invite_auto_complete.ul.setAttribute('style', `max-height: calc(${this.el.offsetHeight}px - 80px);`);
                 });
                 });
             }
             }

+ 2 - 4
src/converse-oauth.js

@@ -8,9 +8,7 @@ import converse from "@converse/headless/converse-core";
 import hello from "hellojs";
 import hello from "hellojs";
 import tpl_oauth_providers from "templates/oauth_providers.html";
 import tpl_oauth_providers from "templates/oauth_providers.html";
 
 
-const _ = converse.env._,
-      Backbone = converse.env.Backbone,
-      Strophe = converse.env.Strophe;
+const { _, Backbone } = converse.env;
 
 
 
 
 // The following line registers your plugin.
 // The following line registers your plugin.
@@ -55,7 +53,7 @@ converse.plugins.add("converse-oauth", {
                 this.oauth_providers_view.render();
                 this.oauth_providers_view.render();
             },
             },
 
 
-            render (cfg) {
+            render () {
                 const { _converse } = this.__super__;
                 const { _converse } = this.__super__;
                 const result = this.__super__.render.apply(this, arguments);
                 const result = this.__super__.render.apply(this, arguments);
                 if (_converse.oauth_providers && !_converse.auto_login) {
                 if (_converse.oauth_providers && !_converse.auto_login) {

+ 7 - 10
src/converse-omemo.js

@@ -13,7 +13,7 @@ import BrowserStorage from "backbone.browserStorage";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_toolbar_omemo from "templates/toolbar_omemo.html";
 import tpl_toolbar_omemo from "templates/toolbar_omemo.html";
 
 
-const { Backbone, Strophe, dayjs, sizzle, $build, $iq, $msg, _ } = converse.env;
+const { Backbone, Strophe, sizzle, $build, $iq, $msg, _ } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 Strophe.addNamespace('OMEMO_DEVICELIST', Strophe.NS.OMEMO+".devicelist");
 Strophe.addNamespace('OMEMO_DEVICELIST', Strophe.NS.OMEMO+".devicelist");
@@ -22,7 +22,7 @@ Strophe.addNamespace('OMEMO_WHITELISTED', Strophe.NS.OMEMO+".whitelisted");
 Strophe.addNamespace('OMEMO_BUNDLES', Strophe.NS.OMEMO+".bundles");
 Strophe.addNamespace('OMEMO_BUNDLES', Strophe.NS.OMEMO+".bundles");
 
 
 const UNDECIDED = 0;
 const UNDECIDED = 0;
-const TRUSTED = 1;
+const TRUSTED = 1; // eslint-disable-line no-unused-vars
 const UNTRUSTED = -1;
 const UNTRUSTED = -1;
 const TAG_LENGTH = 128;
 const TAG_LENGTH = 128;
 const KEY_ALGO = {
 const KEY_ALGO = {
@@ -44,16 +44,13 @@ function parseBundle (bundle_el) {
     /* Given an XML element representing a user's OMEMO bundle, parse it
     /* Given an XML element representing a user's OMEMO bundle, parse it
      * and return a map.
      * and return a map.
      */
      */
-    const signed_prekey_public_el = bundle_el.querySelector('signedPreKeyPublic'),
-          signed_prekey_signature_el = bundle_el.querySelector('signedPreKeySignature'),
-          identity_key_el = bundle_el.querySelector('identityKey');
-
+    const signed_prekey_public_el = bundle_el.querySelector('signedPreKeyPublic');
+    const signed_prekey_signature_el = bundle_el.querySelector('signedPreKeySignature');
     const prekeys = sizzle(`prekeys > preKeyPublic`, bundle_el)
     const prekeys = sizzle(`prekeys > preKeyPublic`, bundle_el)
         .map(el => ({
         .map(el => ({
             'id': parseInt(el.getAttribute('preKeyId'), 10),
             'id': parseInt(el.getAttribute('preKeyId'), 10),
             'key': el.textContent
             'key': el.textContent
         }));
         }));
-
     return {
     return {
         'identity_key': bundle_el.querySelector('identityKey').textContent.trim(),
         'identity_key': bundle_el.querySelector('identityKey').textContent.trim(),
         'signed_prekey': {
         'signed_prekey': {
@@ -693,7 +690,7 @@ converse.plugins.add('converse-omemo', {
                 return Promise.resolve(parseInt(this.get('device_id'), 10));
                 return Promise.resolve(parseInt(this.get('device_id'), 10));
             },
             },
 
 
-            isTrustedIdentity (identifier, identity_key, direction) {
+            isTrustedIdentity (identifier, identity_key, direction) {  // eslint-disable-line no-unused-vars
                 if (identifier === null || identifier === undefined) {
                 if (identifier === null || identifier === undefined) {
                     throw new Error("Can't check identity key for invalid key");
                     throw new Error("Can't check identity key for invalid key");
                 }
                 }
@@ -761,7 +758,7 @@ converse.plugins.add('converse-omemo', {
                 return Promise.resolve();
                 return Promise.resolve();
             },
             },
 
 
-            loadSignedPreKey (keyId) {
+            loadSignedPreKey (keyId) {  // eslint-disable-line no-unused-vars
                 const res = this.get('signed_prekey');
                 const res = this.get('signed_prekey');
                 if (res) {
                 if (res) {
                     return Promise.resolve({
                     return Promise.resolve({
@@ -1263,7 +1260,7 @@ converse.plugins.add('converse-omemo', {
             _converse.generateFingerprints(jid).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
             _converse.generateFingerprints(jid).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
         });
         });
 
 
-        _converse.api.listen.on('profileModalInitialized', (contact) => {
+        _converse.api.listen.on('profileModalInitialized', () => {
             _converse.generateFingerprints(_converse.bare_jid).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
             _converse.generateFingerprints(_converse.bare_jid).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
         });
         });
 
 

+ 2 - 4
src/converse-profile.js

@@ -9,16 +9,15 @@
  */
  */
 import "@converse/headless/converse-vcard";
 import "@converse/headless/converse-vcard";
 import "converse-modal";
 import "converse-modal";
-import _FormData from "formdata-polyfill";
+import "formdata-polyfill";
 import bootstrap from "bootstrap.native";
 import bootstrap from "bootstrap.native";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_chat_status_modal from "templates/chat_status_modal.html";
 import tpl_chat_status_modal from "templates/chat_status_modal.html";
 import tpl_client_info_modal from "templates/client_info_modal.html";
 import tpl_client_info_modal from "templates/client_info_modal.html";
 import tpl_profile_modal from "templates/profile_modal.html";
 import tpl_profile_modal from "templates/profile_modal.html";
 import tpl_profile_view from "templates/profile_view.html";
 import tpl_profile_view from "templates/profile_view.html";
-import tpl_status_option from "templates/status_option.html";
 
 
-const { Strophe, Backbone, utils, _, dayjs, sizzle } = converse.env;
+const { Strophe, sizzle } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 
 
@@ -61,7 +60,6 @@ converse.plugins.add('converse-profile', {
                 return tpl_profile_modal(Object.assign(
                 return tpl_profile_modal(Object.assign(
                     this.model.toJSON(),
                     this.model.toJSON(),
                     this.model.vcard.toJSON(), {
                     this.model.vcard.toJSON(), {
-                    '_': _,
                     '__': __,
                     '__': __,
                     '_converse': _converse,
                     '_converse': _converse,
                     'alt_avatar': __('Your avatar image'),
                     'alt_avatar': __('Your avatar image'),

+ 1 - 2
src/converse-push.js

@@ -22,8 +22,7 @@ converse.plugins.add('converse-push', {
         /* The initialize function gets called as soon as the plugin is
         /* The initialize function gets called as soon as the plugin is
          * loaded by converse.js's plugin machinery.
          * loaded by converse.js's plugin machinery.
          */
          */
-        const { _converse } = this,
-              { __ } = _converse;
+        const { _converse } = this;
 
 
         _converse.api.settings.update({
         _converse.api.settings.update({
             'push_app_servers': [],
             'push_app_servers': [],

+ 2 - 3
src/converse-register.js

@@ -45,7 +45,7 @@ converse.plugins.add('converse-register', {
         // New functions which don't exist yet can also be added.
         // New functions which don't exist yet can also be added.
 
 
         LoginPanel: {
         LoginPanel: {
-            render (cfg) {
+            render () {
                 const { _converse } = this.__super__;
                 const { _converse } = this.__super__;
                 this.__super__.render.apply(this, arguments);
                 this.__super__.render.apply(this, arguments);
                 if (_converse.allow_registration && !_converse.auto_login) {
                 if (_converse.allow_registration && !_converse.auto_login) {
@@ -107,7 +107,6 @@ converse.plugins.add('converse-register', {
         Object.assign(_converse.ControlBoxView.prototype, {
         Object.assign(_converse.ControlBoxView.prototype, {
 
 
             showLoginOrRegisterForm () {
             showLoginOrRegisterForm () {
-                const { _converse } = this.__super__;
                 if (!this.registerpanel) {
                 if (!this.registerpanel) {
                     return;
                     return;
                 }
                 }
@@ -173,7 +172,7 @@ converse.plugins.add('converse-register', {
                 'click .button-cancel': 'renderProviderChoiceForm',
                 'click .button-cancel': 'renderProviderChoiceForm',
             },
             },
 
 
-            initialize (cfg) {
+            initialize () {
                 this.reset();
                 this.reset();
                 this.registerHooks();
                 this.registerHooks();
             },
             },

+ 4 - 4
src/converse-roomslist.js

@@ -9,14 +9,14 @@
  * Converse.js plugin which shows a list of currently open
  * Converse.js plugin which shows a list of currently open
  * rooms in the "Rooms Panel" of the ControlBox.
  * rooms in the "Rooms Panel" of the ControlBox.
  */
  */
+import "@converse/headless/converse-muc";
 import BrowserStorage from "backbone.browserStorage";
 import BrowserStorage from "backbone.browserStorage";
 import { OrderedListView } from "backbone.overview";
 import { OrderedListView } from "backbone.overview";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
-import muc from "@converse/headless/converse-muc";
 import tpl_rooms_list from "templates/rooms_list.html";
 import tpl_rooms_list from "templates/rooms_list.html";
 import tpl_rooms_list_item from "templates/rooms_list_item.html"
 import tpl_rooms_list_item from "templates/rooms_list_item.html"
 
 
-const { Backbone, Strophe, sizzle, _ } = converse.env;
+const { Backbone, Strophe, } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 
 
@@ -51,7 +51,7 @@ converse.plugins.add('converse-roomslist', {
 
 
             comparator (room) {
             comparator (room) {
                 if (_converse.bookmarks && room.get('bookmarked')) {
                 if (_converse.bookmarks && room.get('bookmarked')) {
-                    const bookmark = _.head(_converse.bookmarks.where({'jid': room.get('jid')}));
+                    const bookmark = _converse.bookmarks.findWhere({'jid': room.get('jid')});
                     return bookmark.get('name');
                     return bookmark.get('name');
                 } else {
                 } else {
                     return room.get('name');
                     return room.get('name');
@@ -236,7 +236,7 @@ converse.plugins.add('converse-roomslist', {
                 }
                 }
             },
             },
 
 
-            showOrHide (item) {
+            showOrHide () {
                 if (!this.model.models.length) {
                 if (!this.model.models.length) {
                     u.hideElement(this.el);
                     u.hideElement(this.el);
                 } else {
                 } else {

+ 4 - 8
src/converse-rosterview.js

@@ -9,10 +9,10 @@
 import "@converse/headless/converse-chatboxes";
 import "@converse/headless/converse-chatboxes";
 import "@converse/headless/converse-roster";
 import "@converse/headless/converse-roster";
 import "converse-modal";
 import "converse-modal";
+import "formdata-polyfill";
 import BrowserStorage from "backbone.browserStorage";
 import BrowserStorage from "backbone.browserStorage";
 import { OrderedListView } from "backbone.overview";
 import { OrderedListView } from "backbone.overview";
 import SHA1 from 'strophe.js/src/sha1';
 import SHA1 from 'strophe.js/src/sha1';
-import _FormData from "formdata-polyfill";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_add_contact_modal from "templates/add_contact_modal.html";
 import tpl_add_contact_modal from "templates/add_contact_modal.html";
 import tpl_group_header from "templates/group_header.html";
 import tpl_group_header from "templates/group_header.html";
@@ -21,9 +21,8 @@ import tpl_requesting_contact from "templates/requesting_contact.html";
 import tpl_roster from "templates/roster.html";
 import tpl_roster from "templates/roster.html";
 import tpl_roster_filter from "templates/roster_filter.html";
 import tpl_roster_filter from "templates/roster_filter.html";
 import tpl_roster_item from "templates/roster_item.html";
 import tpl_roster_item from "templates/roster_item.html";
-import tpl_search_contact from "templates/search_contact.html";
 
 
-const { Backbone, Strophe, $iq, sizzle, _ } = converse.env;
+const { Backbone, Strophe, _ } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 
 
@@ -58,7 +57,6 @@ converse.plugins.add('converse-rosterview', {
             'xa': __('This contact is away for an extended period'),
             'xa': __('This contact is away for an extended period'),
             'away': __('This contact is away')
             'away': __('This contact is away')
         };
         };
-        const LABEL_GROUPS = __('Groups');
 
 
 
 
         _converse.AddContactModal = _converse.BootstrapModal.extend({
         _converse.AddContactModal = _converse.BootstrapModal.extend({
@@ -266,7 +264,7 @@ converse.plugins.add('converse-rosterview', {
                 }
                 }
             },
             },
 
 
-            liveFilter: _.debounce(function (ev) {
+            liveFilter: _.debounce(function () {
                 this.model.save({
                 this.model.save({
                     'filter_text': this.el.querySelector('.roster-filter').value
                     'filter_text': this.el.querySelector('.roster-filter').value
                 });
                 });
@@ -496,9 +494,8 @@ converse.plugins.add('converse-rosterview', {
                 if (!_converse.allow_contact_removal) { return; }
                 if (!_converse.allow_contact_removal) { return; }
                 if (!confirm(__("Are you sure you want to remove this contact?"))) { return; }
                 if (!confirm(__("Are you sure you want to remove this contact?"))) { return; }
 
 
-                let iq;
                 try {
                 try {
-                    iq = await this.model.removeFromRoster();
+                    await this.model.removeFromRoster();
                     this.remove();
                     this.remove();
                     if (this.model.collection) {
                     if (this.model.collection) {
                         // The model might have already been removed as
                         // The model might have already been removed as
@@ -605,7 +602,6 @@ converse.plugins.add('converse-rosterview', {
                  * title.
                  * title.
                  */
                  */
                 let shown = 0;
                 let shown = 0;
-                const all_contact_views = this.getAll();
                 this.model.contacts.forEach(contact => {
                 this.model.contacts.forEach(contact => {
                     const contact_view = this.get(contact.get('id'));
                     const contact_view = this.get(contact.get('id'));
                     if (_.includes(contacts, contact)) {
                     if (_.includes(contacts, contact)) {

+ 1 - 4
src/converse-singleton.js

@@ -10,9 +10,6 @@
  */
  */
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 
 
-const { _, Strophe } = converse.env;
-const u = converse.env.utils;
-
 
 
 converse.plugins.add('converse-singleton', {
 converse.plugins.add('converse-singleton', {
 
 
@@ -31,7 +28,7 @@ converse.plugins.add('converse-singleton', {
             'hide_muc_server': true
             'hide_muc_server': true
         });
         });
         const { _converse } = this;
         const { _converse } = this;
-        if (!_.isArray(_converse.auto_join_rooms) && !_.isArray(_converse.auto_join_private_chats)) {
+        if (!Array.isArray(_converse.auto_join_rooms) && !Array.isArray(_converse.auto_join_private_chats)) {
             throw new Error("converse-singleton: auto_join_rooms must be an Array");
             throw new Error("converse-singleton: auto_join_rooms must be an Array");
         }
         }
         if (_converse.auto_join_rooms.length > 1 || _converse.auto_join_private_chats.length > 1) {
         if (_converse.auto_join_rooms.length > 1 || _converse.auto_join_private_chats.length > 1) {

+ 0 - 1
src/converse-uniview.js

@@ -16,7 +16,6 @@
 import "converse-chatview";
 import "converse-chatview";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 
 
-const { _, Strophe } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 
 

+ 1 - 1
src/headless/converse-bosh.js

@@ -12,7 +12,7 @@ import 'strophe.js/src/bosh';
 import BrowserStorage from "backbone.browserStorage";
 import BrowserStorage from "backbone.browserStorage";
 import converse from "./converse-core";
 import converse from "./converse-core";
 
 
-const { Backbone, Strophe, _ } = converse.env;
+const { Backbone, Strophe } = converse.env;
 
 
 const BOSH_SESSION_ID = 'converse.bosh-session';
 const BOSH_SESSION_ID = 'converse.bosh-session';
 
 

+ 5 - 5
src/headless/converse-chatboxes.js

@@ -13,7 +13,7 @@ import BrowserStorage from "backbone.browserStorage";
 import converse from "./converse-core";
 import converse from "./converse-core";
 import filesize from "filesize";
 import filesize from "filesize";
 
 
-const { $msg, Backbone, Strophe, dayjs, sizzle, utils, _ } = converse.env;
+const { $msg, Backbone, Strophe, dayjs, sizzle, utils } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 Strophe.addNamespace('MESSAGE_CORRECT', 'urn:xmpp:message-correct:0');
 Strophe.addNamespace('MESSAGE_CORRECT', 'urn:xmpp:message-correct:0');
@@ -404,7 +404,7 @@ converse.plugins.add('converse-chatboxes', {
                 this.announceReconnection();
                 this.announceReconnection();
             },
             },
 
 
-            validate (attrs, options) {
+            validate (attrs) {
                 if (!attrs.jid) {
                 if (!attrs.jid) {
                     return 'Ignored ChatBox without JID';
                     return 'Ignored ChatBox without JID';
                 }
                 }
@@ -453,7 +453,7 @@ converse.plugins.add('converse-chatboxes', {
                 }
                 }
             },
             },
 
 
-            getUpdatedMessageAttributes (message, stanza) {
+            getUpdatedMessageAttributes (message, stanza) {  // eslint-disable-line no-unused-vars
                 // Overridden in converse-muc and converse-mam
                 // Overridden in converse-muc and converse-mam
                 return {};
                 return {};
             },
             },
@@ -673,7 +673,7 @@ converse.plugins.add('converse-chatboxes', {
                 _converse.api.send(receipt_stanza);
                 _converse.api.send(receipt_stanza);
             },
             },
 
 
-            handleReceipt (stanza, from_jid, is_carbon, is_me, is_mam) {
+            handleReceipt (stanza, from_jid, is_carbon, is_me) {
                 const requests_receipt = sizzle(`request[xmlns="${Strophe.NS.RECEIPTS}"]`, stanza).pop() !== undefined;
                 const requests_receipt = sizzle(`request[xmlns="${Strophe.NS.RECEIPTS}"]`, stanza).pop() !== undefined;
                 if (requests_receipt && !is_carbon && !is_me) {
                 if (requests_receipt && !is_carbon && !is_me) {
                     this.sendReceiptStanza(from_jid, stanza.getAttribute('id'));
                     this.sendReceiptStanza(from_jid, stanza.getAttribute('id'));
@@ -1287,7 +1287,7 @@ converse.plugins.add('converse-chatboxes', {
                         chatbox.updateMessage(message, original_stanza);
                         chatbox.updateMessage(message, original_stanza);
                     }
                     }
                     if (!message &&
                     if (!message &&
-                            !chatbox.handleReceipt (stanza, from_jid, is_carbon, is_me, is_mam) &&
+                            !chatbox.handleReceipt (stanza, from_jid, is_carbon, is_me) &&
                             !chatbox.handleChatMarker(stanza, from_jid, is_carbon, is_roster_contact, is_mam)) {
                             !chatbox.handleChatMarker(stanza, from_jid, is_carbon, is_roster_contact, is_mam)) {
 
 
                         const attrs = await chatbox.getMessageAttributesFromStanza(stanza, original_stanza);
                         const attrs = await chatbox.getMessageAttributesFromStanza(stanza, original_stanza);

+ 1 - 1
src/headless/converse-core.js

@@ -7,6 +7,7 @@
  * @module converse-core
  * @module converse-core
  */
  */
 import 'strophe.js/src/websocket';
 import 'strophe.js/src/websocket';
+import './polyfill';
 import * as strophe from 'strophe.js/src/core';
 import * as strophe from 'strophe.js/src/core';
 import Backbone from 'backbone';
 import Backbone from 'backbone';
 import BrowserStorage from 'backbone.browserStorage';
 import BrowserStorage from 'backbone.browserStorage';
@@ -15,7 +16,6 @@ import advancedFormat from 'dayjs/plugin/advancedFormat';
 import dayjs from 'dayjs';
 import dayjs from 'dayjs';
 import i18n from './i18n';
 import i18n from './i18n';
 import pluggable from 'pluggable.js/src/pluggable';
 import pluggable from 'pluggable.js/src/pluggable';
-import polyfill from './polyfill';
 import sizzle from 'sizzle';
 import sizzle from 'sizzle';
 import u from '@converse/headless/utils/core';
 import u from '@converse/headless/utils/core';
 
 

+ 2 - 2
src/headless/converse-emoji.js

@@ -10,7 +10,7 @@ import * as twemoji from "twemoji";
 import _ from "./lodash.noconflict";
 import _ from "./lodash.noconflict";
 import converse from "./converse-core";
 import converse from "./converse-core";
 
 
-const { Backbone, Strophe } = converse.env;
+const { Backbone, } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 const ASCII_LIST = {
 const ASCII_LIST = {
@@ -253,7 +253,7 @@ converse.plugins.add('converse-emoji', {
              */
              */
             getEmojiRenderer () {
             getEmojiRenderer () {
                 const how = {
                 const how = {
-                    'attributes': (icon, variant) => {
+                    'attributes': (icon) => {
                         const codepoint = twemoji.default.convert.toCodePoint(icon);
                         const codepoint = twemoji.default.convert.toCodePoint(icon);
                         return {'title': `${u.getEmojisByAtrribute('cp')[codepoint]['sn']} ${icon}`}
                         return {'title': `${u.getEmojisByAtrribute('cp')[codepoint]['sn']} ${icon}`}
                     }
                     }

+ 1 - 1
src/headless/converse-mam.js

@@ -15,7 +15,7 @@ import { intersection, pick } from 'lodash'
 import converse from "./converse-core";
 import converse from "./converse-core";
 import sizzle from "sizzle";
 import sizzle from "sizzle";
 
 
-const { Strophe, $iq, $build, dayjs } = converse.env;
+const { Strophe, $iq, dayjs } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 // XEP-0313 Message Archive Management
 // XEP-0313 Message Archive Management

+ 3 - 5
src/headless/converse-muc.js

@@ -263,7 +263,7 @@ converse.plugins.add('converse-muc', {
                 }
                 }
             },
             },
 
 
-            onOccupantRemoved (occupant) {
+            onOccupantRemoved () {
                 this.stopListening(this.occupant);
                 this.stopListening(this.occupant);
                 delete this.occupant;
                 delete this.occupant;
                 const chatbox = _.get(this, 'collection.chatbox');
                 const chatbox = _.get(this, 'collection.chatbox');
@@ -484,7 +484,6 @@ converse.plugins.add('converse-muc', {
             },
             },
 
 
             initFeatures () {
             initFeatures () {
-                const storage = _converse.config.get('storage');
                 const id = `converse.muc-features-${_converse.bare_jid}-${this.get('jid')}`;
                 const id = `converse.muc-features-${_converse.bare_jid}-${this.get('jid')}`;
                 this.features = new Backbone.Model(
                 this.features = new Backbone.Model(
                     _.assign({id}, _.zipObject(converse.ROOM_FEATURES, converse.ROOM_FEATURES.map(_.stubFalse)))
                     _.assign({id}, _.zipObject(converse.ROOM_FEATURES, converse.ROOM_FEATURES.map(_.stubFalse)))
@@ -1176,7 +1175,6 @@ converse.plugins.add('converse-muc', {
             async updateMemberLists (members) {
             async updateMemberLists (members) {
                 const all_affiliations = ['member', 'admin', 'owner'];
                 const all_affiliations = ['member', 'admin', 'owner'];
                 const aff_lists = await Promise.all(all_affiliations.map(a => this.getAffiliationList(a)));
                 const aff_lists = await Promise.all(all_affiliations.map(a => this.getAffiliationList(a)));
-                const known_affiliations = all_affiliations.filter(a => !u.isErrorObject(aff_lists[all_affiliations.indexOf(a)]));
                 const old_members = aff_lists.reduce((acc, val) => (u.isErrorObject(val) ? acc: [...val, ...acc]), []);
                 const old_members = aff_lists.reduce((acc, val) => (u.isErrorObject(val) ? acc: [...val, ...acc]), []);
                 await this.setAffiliations(u.computeAffiliationsDelta(true, false, members, old_members));
                 await this.setAffiliations(u.computeAffiliationsDelta(true, false, members, old_members));
                 if (_converse.muc_fetch_members) {
                 if (_converse.muc_fetch_members) {
@@ -2329,9 +2327,9 @@ converse.plugins.add('converse-muc', {
                         attrs.nick = Strophe.getNodeFromJid(_converse.bare_jid);
                         attrs.nick = Strophe.getNodeFromJid(_converse.bare_jid);
                     }
                     }
                     if (_.isString(jids)) {
                     if (_.isString(jids)) {
-                        return getChatRoom(jids, attrs);
+                        return getChatRoom(jids, attrs, create);
                     }
                     }
-                    return jids.map(jid => getChatRoom(jid, attrs));
+                    return jids.map(jid => getChatRoom(jid, attrs, create));
                 }
                 }
             }
             }
         });
         });

+ 1 - 1
src/headless/converse-ping.js

@@ -10,7 +10,7 @@
  * as specified in XEP-0199 XMPP Ping.
  * as specified in XEP-0199 XMPP Ping.
  */
  */
 import converse from "./converse-core";
 import converse from "./converse-core";
-const { Strophe, $iq, _ } = converse.env;
+const { Strophe, $iq } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 Strophe.addNamespace('PING', "urn:xmpp:ping");
 Strophe.addNamespace('PING', "urn:xmpp:ping");

+ 2 - 3
src/headless/converse-pubsub.js

@@ -9,7 +9,7 @@
 import "./converse-disco";
 import "./converse-disco";
 import converse from "./converse-core";
 import converse from "./converse-core";
 
 
-const { Strophe, Backbone, $iq, $build, $msg, $pres, dayjs, _ } = converse.env;
+const { Strophe, $iq } = converse.env;
 
 
 Strophe.addNamespace('PUBSUB_ERROR', Strophe.NS.PUBSUB+"#errors");
 Strophe.addNamespace('PUBSUB_ERROR', Strophe.NS.PUBSUB+"#errors");
 
 
@@ -22,8 +22,7 @@ converse.plugins.add('converse-pubsub', {
         /* The initialize function gets called as soon as the plugin is
         /* The initialize function gets called as soon as the plugin is
          * loaded by converse.js's plugin machinery.
          * loaded by converse.js's plugin machinery.
          */
          */
-        const { _converse } = this,
-              { __ } = _converse;
+        const { _converse } = this;
 
 
 
 
         /************************ BEGIN API ************************/
         /************************ BEGIN API ************************/

+ 7 - 6
src/headless/converse-smacks.js

@@ -11,9 +11,10 @@
  */
  */
 import converse from "./converse-core";
 import converse from "./converse-core";
 
 
-const { Strophe, $build, _ } = converse.env;
+const { Strophe, } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
+
 Strophe.addNamespace('SM', 'urn:xmpp:sm:3');
 Strophe.addNamespace('SM', 'urn:xmpp:sm:3');
 
 
 
 
@@ -159,7 +160,7 @@ converse.plugins.add('converse-smacks', {
             stanzas.forEach(s => _converse.api.send(s));
             stanzas.forEach(s => _converse.api.send(s));
         }
         }
 
 
-        function onResumedStanza (el, resolve) {
+        function onResumedStanza (el) {
             saveSessionData(el);
             saveSessionData(el);
             handleAck(el);
             handleAck(el);
             resendUnackedStanzas();
             resendUnackedStanzas();
@@ -171,8 +172,8 @@ converse.plugins.add('converse-smacks', {
 
 
         async function sendResumeStanza () {
         async function sendResumeStanza () {
             const promise = u.getResolveablePromise();
             const promise = u.getResolveablePromise();
-            _converse.connection._addSysHandler(_.flow(onResumedStanza, promise.resolve), Strophe.NS.SM, 'resumed');
-            _converse.connection._addSysHandler(_.flow(onFailedStanza, promise.resolve), Strophe.NS.SM, 'failed');
+            _converse.connection._addSysHandler(el => promise.resolve(onResumedStanza(el)), Strophe.NS.SM, 'resumed');
+            _converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), Strophe.NS.SM, 'failed');
 
 
             const previous_id = _converse.session.get('smacks_stream_id');
             const previous_id = _converse.session.get('smacks_stream_id');
             const h = _converse.session.get('num_stanzas_handled');
             const h = _converse.session.get('num_stanzas_handled');
@@ -188,8 +189,8 @@ converse.plugins.add('converse-smacks', {
             }
             }
             if (await isStreamManagementSupported()) {
             if (await isStreamManagementSupported()) {
                 const promise = u.getResolveablePromise();
                 const promise = u.getResolveablePromise();
-                _converse.connection._addSysHandler(_.flow(saveSessionData, promise.resolve), Strophe.NS.SM, 'enabled');
-                _converse.connection._addSysHandler(_.flow(onFailedStanza, promise.resolve), Strophe.NS.SM, 'failed');
+                _converse.connection._addSysHandler(el => promise.resolve(saveSessionData(el)), Strophe.NS.SM, 'enabled');
+                _converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), Strophe.NS.SM, 'failed');
 
 
                 const resume = (_converse.api.connection.isType('websocket') || _converse.isTestEnv());
                 const resume = (_converse.api.connection.isType('websocket') || _converse.isTestEnv());
                 const stanza = u.toStanza(`<enable xmlns="${Strophe.NS.SM}" resume="${resume}"/>`);
                 const stanza = u.toStanza(`<enable xmlns="${Strophe.NS.SM}" resume="${resume}"/>`);

+ 1 - 1
src/headless/converse-vcard.js

@@ -10,7 +10,7 @@ import BrowserStorage from "backbone.browserStorage";
 import converse from "./converse-core";
 import converse from "./converse-core";
 import tpl_vcard from "./templates/vcard.html";
 import tpl_vcard from "./templates/vcard.html";
 
 
-const { Backbone, Strophe, _, $iq, $build, dayjs, sizzle } = converse.env;
+const { Backbone, Strophe, _, $iq, dayjs, } = converse.env;
 const u = converse.env.utils;
 const u = converse.env.utils;
 
 
 
 

+ 0 - 3
src/headless/i18n.js

@@ -6,12 +6,9 @@
 // Copyright (c) 2013-2017, Jan-Carel Brand <jc@opkode.com>
 // Copyright (c) 2013-2017, Jan-Carel Brand <jc@opkode.com>
 // Licensed under the Mozilla Public License (MPLv2)
 // Licensed under the Mozilla Public License (MPLv2)
 //
 //
-import * as strophe from 'strophe.js/src/core';
 import Jed from "jed";
 import Jed from "jed";
 import dayjs from "dayjs";
 import dayjs from "dayjs";
 
 
-const Strophe = strophe.default.Strophe;
-
 
 
 function detectLocale (library_check) {
 function detectLocale (library_check) {
     /* Determine which locale is supported by the user's system as well
     /* Determine which locale is supported by the user's system as well

+ 0 - 1
src/headless/utils/core.js

@@ -497,7 +497,6 @@ u.getSelectValues = function (select) {
 
 
 u.formatFingerprint = function (fp) {
 u.formatFingerprint = function (fp) {
     fp = fp.replace(/^05/, '');
     fp = fp.replace(/^05/, '');
-    const arr = [];
     for (let i=1; i<8; i++) {
     for (let i=1; i<8; i++) {
         const idx = i*8+i-1;
         const idx = i*8+i-1;
         fp = fp.slice(0, idx) + ' ' + fp.slice(idx);
         fp = fp.slice(0, idx) + ' ' + fp.slice(idx);

+ 0 - 1
src/headless/utils/muc.js

@@ -6,7 +6,6 @@
 // Copyright (c) 2013-2019, Jan-Carel Brand <jc@opkode.com>
 // Copyright (c) 2013-2019, Jan-Carel Brand <jc@opkode.com>
 // Licensed under the Mozilla Public License (MPLv2)
 // Licensed under the Mozilla Public License (MPLv2)
 //
 //
-/*global Jed */
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import u from "./core";
 import u from "./core";
 
 

+ 1 - 1
src/templates/profile_modal.html

@@ -91,7 +91,7 @@
                                             {{{o.__('Other OMEMO-enabled devices')}}}
                                             {{{o.__('Other OMEMO-enabled devices')}}}
                                             </label>
                                             </label>
                                         </li>
                                         </li>
-                                        {[ o._.forEach(o.view.other_devices, function (device) { ]}
+                                        {[ o.view.other_devices.forEach(function (device) { ]}
                                             {[ if (device.get('bundle') && device.get('bundle').fingerprint) { ]}
                                             {[ if (device.get('bundle') && device.get('bundle').fingerprint) { ]}
                                             <li class="fingerprint-removal-item list-group-item nopadding">
                                             <li class="fingerprint-removal-item list-group-item nopadding">
                                                 <label>
                                                 <label>

+ 7 - 4
src/utils/html.js

@@ -10,7 +10,6 @@ import URI from "urijs";
 import _ from "../headless/lodash.noconflict";
 import _ from "../headless/lodash.noconflict";
 import sizzle from "sizzle";
 import sizzle from "sizzle";
 import tpl_audio from  "../templates/audio.html";
 import tpl_audio from  "../templates/audio.html";
-import tpl_field from "@converse/headless/templates/field.html";
 import tpl_file from "../templates/file.html";
 import tpl_file from "../templates/file.html";
 import tpl_form_captcha from "../templates/form_captcha.html";
 import tpl_form_captcha from "../templates/form_captcha.html";
 import tpl_form_checkbox from "../templates/form_checkbox.html";
 import tpl_form_checkbox from "../templates/form_checkbox.html";
@@ -172,7 +171,7 @@ u.renderImageURLs = function (_converse, el) {
     const list = el.textContent.match(URL_REGEX) || [];
     const list = el.textContent.match(URL_REGEX) || [];
     return Promise.all(
     return Promise.all(
         list.map(url =>
         list.map(url =>
-            new Promise((resolve, reject) => {
+            new Promise((resolve) => {
                 if (u.isImageURL(url)) {
                 if (u.isImageURL(url)) {
                     return isImage(url).then(img => {
                     return isImage(url).then(img => {
                         const i = new Image();
                         const i = new Image();
@@ -290,8 +289,12 @@ u.ancestor = function (el, selector) {
     return parent;
     return parent;
 }
 }
 
 
-u.nextUntil = function (el, selector, include_self=false) {
-    /* Return the element's siblings until one matches the selector. */
+/**
+ * Return the element's siblings until one matches the selector.
+ * @private
+ * @method u#nextUntil
+ */
+u.nextUntil = function (el, selector) {
     const matches = [];
     const matches = [];
     let sibling_el = el.nextElementSibling;
     let sibling_el = el.nextElementSibling;
     while (sibling_el !== null && !sibling_el.matches(selector)) {
     while (sibling_el !== null && !sibling_el.matches(selector)) {

+ 2 - 2
src/website.js

@@ -1,7 +1,7 @@
 (function () {
 (function () {
-    document.addEventListener("DOMContentLoaded", function(event) { 
+    document.addEventListener("DOMContentLoaded", function () {
 
 
-        window.addEventListener('scroll', function (ev) {
+        window.addEventListener('scroll', function () {
             var navbar = document.querySelector(".navbar");
             var navbar = document.querySelector(".navbar");
             var rect = navbar.getBoundingClientRect();
             var rect = navbar.getBoundingClientRect();
             if (rect.top + window.scrollY > 50) {
             if (rect.top + window.scrollY > 50) {