diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000000000000000000000000000000000000..f272a0abed4e70c11a35003fa40cf8376935f2a7
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,8 @@
+{
+    "arrowParens": "avoid",
+    "trailingComma": "es5",
+    "tabWidth": 4,
+    "singleQuote": true,
+    "quoteProps": "preserve",
+    "printWidth": 120
+}
\ No newline at end of file
diff --git a/build-scss.js b/build-scss.js
index afd914d7e638387ba27606b95ef620b062b8ec4a..ea8fa4334d5c3000b75bdbc7af90afc24d26e089 100644
--- a/build-scss.js
+++ b/build-scss.js
@@ -3,15 +3,16 @@ const sass = require('sass');
 const fs = require('fs');
 
 sass.render({
-  file: 'src/styles/index.scss',
-  outFile: 'dist/index.css',
+    file: 'src/styles/index.scss',
+    outFile: 'dist/index.css',
 }, function(error, result) {
-  if(!error){
-    if (!fs.existsSync('dist')){
-      fs.mkdirSync('dist', { recursive: true });
+    if (!error) {
+        if (!fs.existsSync('dist')) {
+            fs.mkdirSync('dist', { recursive: true });
+        }
+        fs.writeFile('dist/index.css', String(result.css).replace(/\/lib\/solid-xmpp-chat/g, path), (e) => {
+        });
+    } else {
+        console.error(error);
     }
-    fs.writeFile('dist/index.css', String(result.css).replace(/\/lib\/solid-xmpp-chat/g, path), (e) =>{});
-  } else {
-    console.error(error);
-  }
-});
\ No newline at end of file
+});
diff --git a/package-lock.json b/package-lock.json
index ba4b4f6d1bd230d7284076b8ee045b70be0ffa87..3134d39f7cc8095df4691c5142008cfccd44e9c7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1864,6 +1864,12 @@
       "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
       "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
     },
+    "prettier": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
+      "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
+      "dev": true
+    },
     "process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
diff --git a/package.json b/package.json
index b0e3bfa472e2a7ee51ad64b18ed74c15c32159f9..218578537d7814b56bda29bdee778e98d64bbb51 100644
--- a/package.json
+++ b/package.json
@@ -57,6 +57,7 @@
     "sass": "^1.32.5"
   },
   "devDependencies": {
+    "prettier": "^2.2.1",
     "watch-cli": "^0.2.3"
   },
   "scripts": {
diff --git a/src/index.js b/src/index.js
index 214aaca02ff69f56b18c3c03b49436e39c42bd60..52a1909885505177e57edac06693597c1d4201ad 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,3 +1,3 @@
 import { SolidXMPPChat } from './solid-xmpp-chat.js';
 
-export { SolidXMPPChat }
+export { SolidXMPPChat };
diff --git a/src/path.js b/src/path.js
index 92c1e6f8c5803067f51daae548e32d243fbd533a..3d432789081d7d4602b63b0270e40bb24058ae6e 100644
--- a/src/path.js
+++ b/src/path.js
@@ -1,3 +1,3 @@
-const path = "/lib/solid-xmpp-chat";
+const path = '/lib/solid-xmpp-chat';
 
 module.exports = path;
diff --git a/src/plugins/converse-rai.js b/src/plugins/converse-rai.js
index f0db84ec7bf26e51b544bfcd4c0000b4192cb053..d52f0678206f863d6a619920157cbbacea0d418f 100644
--- a/src/plugins/converse-rai.js
+++ b/src/plugins/converse-rai.js
@@ -1,18 +1,12 @@
-(function (root, factory) {
-    if (typeof define === 'function' && define.amd) {
-        define(["converse"], factory);
-    } else {
-        factory(converse);
-    }
-}(this, function (converse) {
-    var Strophe, $iq, $msg, $pres, $build, b64_sha1, _ ,Backbone, dayjs, _converse;
-    var interestingServers = new Set();
-    var subscribedServers = new Set();
+(function() {
+    let Strophe, $iq, $msg, $pres, $build, b64_sha1, _, Backbone, dayjs, _converse;
+    let interestingServers = new Set();
+    let subscribedServers = new Set();
 
-    converse.plugins.add("rai", {
+    converse.plugins.add('rai', {
         'dependencies': [],
 
-        'initialize': function () {
+        'initialize': function() {
             _converse = this._converse;
 
             Strophe = converse.env.Strophe;
@@ -27,36 +21,34 @@
 
             _converse.api.settings.extend({
                 rai_notification: true,
-                rai_notification_label: "Room Activity Indicator"
+                rai_notification_label: 'Room Activity Indicator',
             });
 
-            _converse.api.listen.on('connected', function () {
+            _converse.api.listen.on('connected', function() {
                 setupRoomActivityIndicators();
             });
 
-            _converse.api.listen.on('chatRoomViewInitialized', function (view)
-            {
-                const jid = view.model.get("jid");
+            _converse.api.listen.on('chatRoomViewInitialized', function(view) {
+                const jid = view.model.get('jid');
 
-                if (view.model.get("num_unread") > 0 || view.model.get("num_unread_general") > 0) {
+                if (view.model.get('num_unread') > 0 || view.model.get('num_unread_general') > 0) {
                     emitNotification(jid);
                 }
             });
 
-            _converse.api.listen.on('raiRoomsUpdated', function (rooms) {
+            _converse.api.listen.on('raiRoomsUpdated', function(rooms) {
                 interestingServers = new Set(rooms.filter(room => room).map(Strophe.getDomainFromJid));
-                if(_converse.api.connection.connected()) {
-	            updateSubscriptions();
-	        }
+                if (_converse.api.connection.connected()) {
+                    updateSubscriptions();
+                }
             });
 
-            _converse.api.listen.on('chatBoxScrolledDown', function (view)
-            {
+            _converse.api.listen.on('chatBoxScrolledDown', function(view) {
                 const jid = view.chatbox.get('jid');
                 const id_attr = 'stanza_id ' + jid;
                 const messages = view.chatbox.messages;
 
-                if(!getUnreadStatus(jid)) {
+                if (!getUnreadStatus(jid)) {
                     return;
                 }
 
@@ -65,46 +57,41 @@
 
                     if (message.has(id_attr)) {
                         let id = message.get(id_attr);
-                        if(id != sessionStorage.getItem("rai_displayed." + jid)) {
-                            sessionStorage.setItem("rai_displayed." + jid, id);
+                        if (id != sessionStorage.getItem('rai_displayed.' + jid)) {
+                            sessionStorage.setItem('rai_displayed.' + jid, id);
                             setUnreadStatus(jid, false);
-                            setTimeout(() => sendMarker(jid, id, "displayed"), 0);
+                            setTimeout(() => sendMarker(jid, id, 'displayed'), 0);
                         }
                         break;
                     }
                 }
             });
 
-            _converse.api.listen.on('chatBoxInsertedIntoDOM', function (view)
-            {
-                const jid = view.model.get("jid");
+            _converse.api.listen.on('chatBoxInsertedIntoDOM', function(view) {
+                const jid = view.model.get('jid');
 
-                if (view.model.get("num_unread") > 0)
-                {
+                if (view.model.get('num_unread') > 0) {
                     emitNotification(jid);
                 }
 
             });
 
-            _converse.api.listen.on('message', function (data)
-            {
+            _converse.api.listen.on('message', function(data) {
                 var chatbox = data.chatbox;
                 var history = data.attrs.is_archived;
                 var sender = data.attrs.sender;
                 var body = data.attrs.body;
 
-                if (!history && body && chatbox && sender !== 'me')
-                {
-                    const alert = chatbox.get("num_unread") > 0;
-                    const notify = chatbox.get("num_unread_general") > 0;
+                if (!history && body && chatbox && sender !== 'me') {
+                    const alert = chatbox.get('num_unread') > 0;
+                    const notify = chatbox.get('num_unread_general') > 0;
 
-                    if ( alert || notify)
-                    {
-                        emitNotification(chatbox.get("jid"),  alert);
+                    if (alert || notify) {
+                        emitNotification(chatbox.get('jid'), alert);
                     }
                 }
             });
-        }
+        },
     });
 
 
@@ -112,105 +99,97 @@
         const id = Math.random().toString(36).substr(2, 9);
         _converse.connection.send(converse.env.$pres({
             to: server_name,
-            id: id
+            id: id,
         }).c('rai', {
-            'xmlns': "xmpp:prosody.im/protocol/rai"
+            'xmlns': 'xmpp:prosody.im/protocol/rai',
         }));
     }
 
     function unsubscribeServer(server_name) {
         _converse.connection.send(converse.env.$pres({
-            to: server_name, type: "unavailable"
+            to: server_name, type: 'unavailable',
         }).c('rai', {
-            'xmlns': "xmpp:prosody.im/protocol/rai"
+            'xmlns': 'xmpp:prosody.im/protocol/rai',
         }));
     }
 
     function updateSubscriptions() {
         var new_servers = new Set([...interestingServers].filter(server => !subscribedServers.has(server)));
         var obsolete_servers = new Set([...subscribedServers].filter(server => !interestingServers.has(server)));
-        for(let server of obsolete_servers) {
+        for (let server of obsolete_servers) {
             unsubscribeServer(server);
         }
-        for(let server of new_servers) {
+        for (let server of new_servers) {
             subscribeServer(server);
         }
     }
 
-    function setupRoomActivityIndicators()
-    {
+    function setupRoomActivityIndicators() {
         updateSubscriptions();
         // If we already have unread notifications stored for this session, emit them now
-        for (var i = 0; i < sessionStorage.length; i++)
-        {
-            if (sessionStorage.key(i).indexOf("rai_notify.") == 0)
-            {
+        for (var i = 0; i < sessionStorage.length; i++) {
+            if (sessionStorage.key(i).indexOf('rai_notify.') == 0) {
                 const jid = sessionStorage.key(i).substring(11);
                 emitNotification(jid);
             }
         }
 
-	// Listen for incoming RAI from the server
-        _converse.connection.addHandler(function (message) {
-            const from_jid = message.attributes.from?.nodevalue
-            const room_jid = from_jid?.split("/")[0]
+        // Listen for incoming RAI from the server
+        _converse.connection.addHandler(function(message) {
+            const from_jid = message.attributes.from?.nodevalue;
+            const room_jid = from_jid?.split('/')[0];
             const room = '';
             let ignore = false;
-            for (let i = 0; i < _converse.chatboxes.models.length; i++){
-                if(_converse.chatboxes.models[i].id === room_jid){
+            for (let i = 0; i < _converse.chatboxes.models.length; i++) {
+                if (_converse.chatboxes.models[i].id === room_jid) {
                     room = _converse.chatboxes.models[i].id;
                     break;
                 }
             }
-            if (room && from_jid && room_jid){
-                if (from_jid === room_jid+'/'+room.get('nick')){
+            if (room && from_jid && room_jid) {
+                if (from_jid === room_jid + '/' + room.get('nick')) {
                     ignore = true;
                 }
             }
-            if(message && !ignore)
-                message.querySelectorAll('activity').forEach(function (activity)
-                {
-                    if (activity && activity.namespaceURI == "xmpp:prosody.im/protocol/rai")
-                    {
+            if (message && !ignore)
+                message.querySelectorAll('activity').forEach(function(activity) {
+                    if (activity && activity.namespaceURI == 'xmpp:prosody.im/protocol/rai') {
                         const jid = activity.textContent;
                         setUnreadStatus(jid, true);
                         emitNotification(jid);
                     }
                 });
-                return true;
+            return true;
         }, null, 'message');
     }
 
-    function setUnreadStatus(jid, flag)
-    {
-        if(flag) {
-            sessionStorage.setItem("rai_notify." + jid, "true");
+    function setUnreadStatus(jid, flag) {
+        if (flag) {
+            sessionStorage.setItem('rai_notify.' + jid, 'true');
         } else {
-            sessionStorage.removeItem("rai_notify." + jid);
+            sessionStorage.removeItem('rai_notify.' + jid);
         }
     }
 
     function getUnreadStatus(jid) {
-        return sessionStorage.getItem("rai_notify." + jid) == "true";
+        return sessionStorage.getItem('rai_notify.' + jid) == 'true';
     }
 
-    function emitNotification(jid, alert)
-    {
+    function emitNotification(jid, alert) {
         _converse.api.trigger('chatRoomActivityIndicators', jid);
     }
 
-    function sendMarker(to_jid, id, type)
-    {
+    function sendMarker(to_jid, id, type) {
         const stanza = converse.env.$msg({
-          'from': _converse.connection.jid,
-          'id': Math.random().toString(36).substr(2,9),
-          'to': to_jid,
-          'type': 'groupchat'
+            'from': _converse.connection.jid,
+            'id': Math.random().toString(36).substr(2, 9),
+            'to': to_jid,
+            'type': 'groupchat',
         }).c(type, {
-          'xmlns': converse.env.Strophe.NS.MARKERS,
-          'id': id
+            'xmlns': converse.env.Strophe.NS.MARKERS,
+            'id': id,
         });
 
         _converse.api.send(stanza);
     }
-}));
+})();
diff --git a/src/solid-xmpp-chat.js b/src/solid-xmpp-chat.js
index 563716e93bf05353423824c5863b2bf9cbb2aee5..95e2078a85bb396839162eb73c98b125911c98c6 100644
--- a/src/solid-xmpp-chat.js
+++ b/src/solid-xmpp-chat.js
@@ -5,335 +5,339 @@ import { Sib, store, StoreMixin } from 'https://cdn.skypack.dev/@startinblox/cor
 import ComponentPath from './path.js';
 
 class Deferred {
-  constructor() {
-    this.promise = new Promise(((resolve, reject) => {
-      this.resolve = resolve;
-      this.reject = reject;
-    }).bind(this));
-    this.then = this.promise.then.bind(this.promise);
-    this.catch = this.promise.catch.bind(this.promise);
-  }
+    constructor() {
+        this.promise = new Promise(((resolve, reject) => {
+            this.resolve = resolve;
+            this.reject = reject;
+        }).bind(this));
+        this.then = this.promise.then.bind(this.promise);
+        this.catch = this.promise.catch.bind(this.promise);
+    }
 }
 
 export const SolidXMPPChat = {
-  name: 'solid-xmpp-chat',
-  use: [ StoreMixin ],
-  attributes: {
-    authentication: {
-      type: String,
-      default: 'login',
-    },
-    autoLogin: {
-      type: Boolean,
-      default: true,
-    },
-    i18n: {
-      type: String,
-      default: 'fr',
-    },
-    websocketUrl: {
-      type: String,
-      default: 'wss://jabber.happy-dev.fr/xmpp-websocket',
+    name: 'solid-xmpp-chat',
+    use: [StoreMixin],
+    attributes: {
+        authentication: {
+            type: String,
+            default: 'login',
+        },
+        autoLogin: {
+            type: Boolean,
+            default: true,
+        },
+        i18n: {
+            type: String,
+            default: 'fr',
+        },
+        websocketUrl: {
+            type: String,
+            default: 'wss://jabber.happy-dev.fr/xmpp-websocket',
+        },
     },
-  },
 
-  get extra_context() {
-    return { "foaf": 'http://xmlns.com/foaf/0.1/', "chatProfile": "http://happy-dev.fr/owl/#chatProfile", "jabberID": "foaf:jabberID" };
-  },
+    get extra_context() {
+        return {
+            'foaf': 'http://xmlns.com/foaf/0.1/',
+            'chatProfile': 'http://happy-dev.fr/owl/#chatProfile',
+            'jabberID': 'foaf:jabberID',
+        };
+    },
 
-  async created() {
-    const check_identified = await document.querySelector('sib-auth').getUserIdToken();
-    if(check_identified) {
-      this.element.attachShadow({
-        mode: "open"
-      });
-      this.importCSS(`${ComponentPath}/dist/conversejs/converse.min.css?min`);
-      this.importCSS(`${ComponentPath}/dist/index.css?min`);
-      if (window.converse_sib === undefined) {
-        this.initializeConverse();
-      }
-    } // Else, not logged in on page load (even if not on chat)
-  },
+    async created() {
+        const check_identified = await document.querySelector('sib-auth').getUserIdToken();
+        if (check_identified) {
+            this.element.attachShadow({
+                mode: 'open',
+            });
+            this.importCSS(`${ComponentPath}/dist/conversejs/converse.min.css?min`);
+            this.importCSS(`${ComponentPath}/dist/index.css?min`);
+            if (window.converse_sib === undefined) {
+                this.initializeConverse();
+            }
+        } // Else, not logged in on page load (even if not on chat)
+    },
 
-  importCSS(path) {
-    let link = document.createElement('link');
-    link.rel = 'stylesheet';
-    link.href = path;
-    this.element.shadowRoot.append(link);
-  },
+    importCSS(path) {
+        let link = document.createElement('link');
+        link.rel = 'stylesheet';
+        link.href = path;
+        this.element.shadowRoot.append(link);
+    },
 
-  empty() {
-    this.element.innerHTML = 'Loading...';
-  },
+    empty() {
+        this.element.innerHTML = 'Loading...';
+    },
 
-  async populate() {
-    if(typeof converse_sib !== 'undefined') {
-      await converse_sib.loaded_deferred;
-      if (this.resource) {
-        if (await this.resource.jabberRoom) {
-          this.jid = await this.resource['jabberID'];
-        } else {
-          this.jid = await this.resource['chatProfile.jabberID'];
-          const user = await document.querySelector('sib-auth').getUser();
-          const userProfile = await store.getData(user['@id'], this.context);
-          const contactsURL = await userProfile['contacts.@id'];
-          const contactInterval = setInterval(async () => {
-            let retry = false;
-            let userContacts = [];
-            for (let contact of await userProfile['contacts.ldp:contains']) {
-              if (contact) {
-                userContacts.push(await contact['contact.@id']);
-              } else {
-                retry = true;
-              }
-            }
-            if (!retry) {
-              clearInterval(contactInterval);
-              if(!userContacts.includes(this.resource['@id'])) {
-                store.post({
-                  "contact": this.resource['@id'],
-                  "@context": this.context
-                }, contactsURL);
-              }
-            }
-          }, 100);
-        }
-        await converse_sib.connected_deferred;
-        converse_sib.service.plugins.sibChat.changeChat(
-          this.jid,
-          await this.resource.jabberRoom,
-          this.element.shadowRoot,
-        );
-        window.dispatchEvent(new CustomEvent('read', {
-          detail: {
-            resource: {
-              "@id": this.resource['@id']
+    async populate() {
+        if (typeof converse_sib !== 'undefined') {
+            await converse_sib.loaded_deferred;
+            if (this.resource) {
+                if (await this.resource.jabberRoom) {
+                    this.jid = await this.resource['jabberID'];
+                } else {
+                    this.jid = await this.resource['chatProfile.jabberID'];
+                    const user = await document.querySelector('sib-auth').getUser();
+                    const userProfile = await store.getData(user['@id'], this.context);
+                    const contactsURL = await userProfile['contacts.@id'];
+                    const contactInterval = setInterval(async () => {
+                        let retry = false;
+                        let userContacts = [];
+                        for (let contact of await userProfile['contacts.ldp:contains']) {
+                            if (contact) {
+                                userContacts.push(await contact['contact.@id']);
+                            } else {
+                                retry = true;
+                            }
+                        }
+                        if (!retry) {
+                            clearInterval(contactInterval);
+                            if (!userContacts.includes(this.resource['@id'])) {
+                                store.post({
+                                    'contact': this.resource['@id'],
+                                    '@context': this.context,
+                                }, contactsURL);
+                            }
+                        }
+                    }, 100);
+                }
+                await converse_sib.connected_deferred;
+                converse_sib.service.plugins.sibChat.changeChat(
+                    this.jid,
+                    await this.resource.jabberRoom,
+                    this.element.shadowRoot,
+                );
+                window.dispatchEvent(new CustomEvent('read', {
+                    detail: {
+                        resource: {
+                            '@id': this.resource['@id'],
+                        },
+                    },
+                }));
             }
-          }
-        }));
-      }
-    } // Else, not logged in, on chat change
-  },
+        } // Else, not logged in, on chat change
+    },
 
-  initializeConverse() {
-    window.converse_sib = {};
+    initializeConverse() {
+        window.converse_sib = {};
 
-    // Deferred resolved at the end of this function
-    converse_sib.loaded_deferred = new Deferred();
+        // Deferred resolved at the end of this function
+        converse_sib.loaded_deferred = new Deferred();
 
-    // Deferred resolved after converse.initialize
-    converse_sib.connected_deferred = new Deferred();
+        // Deferred resolved after converse.initialize
+        converse_sib.connected_deferred = new Deferred();
 
-    // Registering window.converse_sib.service
-    converse_sib.service = {
-      'waitUntilLoaded': converse_sib.loaded_deferred.promise,
-      'initialize': function (options) {
-        this.waitUntilLoaded().done(this.api.initialize, options);
-      },
-      'waitUntilConnected': converse_sib.connected_deferred.promise,
-      'plugins': {}
-    };
+        // Registering window.converse_sib.service
+        converse_sib.service = {
+            'waitUntilLoaded': converse_sib.loaded_deferred.promise,
+            'initialize': function(options) {
+                this.waitUntilLoaded().done(this.api.initialize, options);
+            },
+            'waitUntilConnected': converse_sib.connected_deferred.promise,
+            'plugins': {},
+        };
 
-    for(var key in sessionStorage){
-        if(sessionStorage.hasOwnProperty(key) && /converse/.test(key)){
-            sessionStorage.removeItem(key);
+        for (var key in sessionStorage) {
+            if (sessionStorage.hasOwnProperty(key) && /converse/.test(key)) {
+                sessionStorage.removeItem(key);
+            }
         }
-    }
-    for(var key in localStorage){
-        if(localStorage.hasOwnProperty(key) && /converse/.test(key)){
-            localStorage.removeItem(key);
+        for (var key in localStorage) {
+            if (localStorage.hasOwnProperty(key) && /converse/.test(key)) {
+                localStorage.removeItem(key);
+            }
         }
-    }
-    indexedDB.deleteDatabase('converse-persistent');
+        indexedDB.deleteDatabase('converse-persistent');
 
-    // Alias for solid-xmpp-chat use # want to un-expose converse from window later
-    // window.converse_sib.service.api === window.converse
-    converse_sib.service.api = converse;
+        // Alias for solid-xmpp-chat use # want to un-expose converse from window later
+        // window.converse_sib.service.api === window.converse
+        converse_sib.service.api = converse;
 
-    // Change chat plugin
-    converse_sib.service.plugins.sibChat = new(class {
-      changeChat(jid, is_groupchat, root) {
-        // function isEmptyMessage (attrs) {
-        //   if (attrs && attrs.attributes) {
-        //       attrs = attrs.attributes;
-        //   }
-        //   return !attrs['oob_url'] &&
-        //       !attrs['file'] &&
-        //       !(attrs['is_encrypted'] && attrs['plaintext']) &&
-        //       !attrs['message'];
-        // };
+        // Change chat plugin
+        converse_sib.service.plugins.sibChat = new (class {
+            changeChat(jid, is_groupchat, root) {
+                // function isEmptyMessage (attrs) {
+                //   if (attrs && attrs.attributes) {
+                //       attrs = attrs.attributes;
+                //   }
+                //   return !attrs['oob_url'] &&
+                //       !attrs['file'] &&
+                //       !(attrs['is_encrypted'] && attrs['plaintext']) &&
+                //       !attrs['message'];
+                // };
 
-        // function removeUnnecessaryDayIndicators(view) {
-        //   const pred = (el) =>
-        //     el.matches('.date-separator') && el.nextElementSibling.matches('.date-separator');
-        //   const container = view.el.querySelector('.chat-content__messages');
-        //   const to_remove = Array.from(container.children).filter(pred);
-        //   to_remove.forEach((el) => el.parentElement.removeChild(el));
-        // };
-        // function isHidden(classList){
-        //   for(let i = 0; i < classList.length; i++){
-        //     if(classList[i] === 'hidden'){
-        //       return true;
-        //     }
-        //   }
-        //   return false;
-        // }
-        if (!jid) {
-          return;
-        }
-        jid = jid.toLowerCase();
-        this._converse.root = root;
+                // function removeUnnecessaryDayIndicators(view) {
+                //   const pred = (el) =>
+                //     el.matches('.date-separator') && el.nextElementSibling.matches('.date-separator');
+                //   const container = view.el.querySelector('.chat-content__messages');
+                //   const to_remove = Array.from(container.children).filter(pred);
+                //   to_remove.forEach((el) => el.parentElement.removeChild(el));
+                // };
+                // function isHidden(classList){
+                //   for(let i = 0; i < classList.length; i++){
+                //     if(classList[i] === 'hidden'){
+                //       return true;
+                //     }
+                //   }
+                //   return false;
+                // }
+                if (!jid) {
+                    return;
+                }
+                jid = jid.toLowerCase();
+                this._converse.root = root;
 
-        // Get the current used solid-xmpp-chat
-        const converse_el = Array.from(document.querySelectorAll('solid-xmpp-chat'))
-          .map(el => el.shadowRoot.getElementById('conversejs'))
-          .filter(el => el)
-          .pop();
+                // Get the current used solid-xmpp-chat
+                const converse_el = Array.from(document.querySelectorAll('solid-xmpp-chat'))
+                    .map(el => el.shadowRoot.getElementById('conversejs'))
+                    .filter(el => el)
+                    .pop();
 
-        if (converse_el) {
-          root.appendChild(converse_el);
-          // if (is_groupchat) {
-          //   const jid_to_clear = converse_el.getElementsByClassName('converse-chatboxes');
-          //   let room_to_clear_view = '';
-          //   if (jid_to_clear.length && jid_to_clear[0].children.length){
-          //     for (let i = 0; i < jid_to_clear[0].children.length; i++) {
-          //         if(!isHidden(jid_to_clear[0].children[i].classList)){
-          //           room_to_clear_view = this._converse.chatboxviews.views[jid_to_clear[0].children[i].id.split('-')[1]];
-          //           break;
-          //         }
-          //     }
-          //   }
-          //   if (room_to_clear_view) {
-          //     if (room_to_clear_view.model.messages.length > 30) {
-          //       const non_empty_messages = room_to_clear_view.model.messages.filter((m) => !isEmptyMessage(m));
-          //       if (non_empty_messages.length > 30) {
-          //       while (non_empty_messages.length > 30) {
-          //           non_empty_messages.shift().destroy();
-          //       }
-          //       removeUnnecessaryDayIndicators(room_to_clear_view);
-          //       }
-          //     }
-          //   }
-          // }
-        }
-        if (is_groupchat) {
-          this._converse.api.rooms.open(jid, {}, true);
-        } else {
-          this._converse.api.chats.open(jid, {}, true);
-        }
-      }
-    });
-    // Initialize deferred resolution plugin
-    setTimeout(async () => {
-      // Initialize change change plugin
-      converse.plugins.add('conversejs-changechat', converse_sib.service.plugins.sibChat);
+                if (converse_el) {
+                    root.appendChild(converse_el);
+                    // if (is_groupchat) {
+                    //   const jid_to_clear = converse_el.getElementsByClassName('converse-chatboxes');
+                    //   let room_to_clear_view = '';
+                    //   if (jid_to_clear.length && jid_to_clear[0].children.length){
+                    //     for (let i = 0; i < jid_to_clear[0].children.length; i++) {
+                    //         if(!isHidden(jid_to_clear[0].children[i].classList)){
+                    //           room_to_clear_view = this._converse.chatboxviews.views[jid_to_clear[0].children[i].id.split('-')[1]];
+                    //           break;
+                    //         }
+                    //     }
+                    //   }
+                    //   if (room_to_clear_view) {
+                    //     if (room_to_clear_view.model.messages.length > 30) {
+                    //       const non_empty_messages = room_to_clear_view.model.messages.filter((m) => !isEmptyMessage(m));
+                    //       if (non_empty_messages.length > 30) {
+                    //       while (non_empty_messages.length > 30) {
+                    //           non_empty_messages.shift().destroy();
+                    //       }
+                    //       removeUnnecessaryDayIndicators(room_to_clear_view);
+                    //       }
+                    //     }
+                    //   }
+                    // }
+                }
+                if (is_groupchat) {
+                    this._converse.api.rooms.open(jid, {}, true);
+                } else {
+                    this._converse.api.chats.open(jid, {}, true);
+                }
+            }
+        });
+        // Initialize deferred resolution plugin
+        setTimeout(async () => {
+            // Initialize change change plugin
+            converse.plugins.add('conversejs-changechat', converse_sib.service.plugins.sibChat);
 
-      // Initialize deferred resolution plugin
-      converse.plugins.add('conversejs-sib-connected', {
-        initialize() {
-          this._converse.api.listen.on('connectionInitialized', converse_sib.connected_deferred.resolve);
-        }
-      });
+            // Initialize deferred resolution plugin
+            converse.plugins.add('conversejs-sib-connected', {
+                initialize() {
+                    this._converse.api.listen.on('connectionInitialized', converse_sib.connected_deferred.resolve);
+                },
+            });
 
-      // Initialize AUTHFAIL plugin
-      converse.plugins.add('conversejs-sib-disconnected', {
-        initialize() {
-          this._converse.api.listen.on('disconnected', () => {
-            if(this._converse.connfeedback.attributes.connection_status === converse.env.Strophe.Status.AUTHFAIL) {
-              Array.from(document.querySelectorAll('solid-xmpp-chat')).map(el => el.shadowRoot.innerHTML =
-                `<div style='margin:3em;line-height:32px;'><b style='color:red;'>Erreur d'authentification.</b><br /><i style='color:grey;'>Êtes-vous sur le Hubl affilié à votre compte ?</i></div>`
-              );
-            } else {
-              Array.from(document.querySelectorAll('solid-xmpp-chat')).map(el => el.shadowRoot.innerHTML =
-                `<div style='margin:3em;line-height:32px;'><b style='color:red;'>Erreur.</b><br /><i style='color:grey;'>${this._converse.connfeedback.attributes.message}</i></div>`
-              );
-            }
-          });
-        }
-      });
+            // Initialize AUTHFAIL plugin
+            converse.plugins.add('conversejs-sib-disconnected', {
+                initialize() {
+                    this._converse.api.listen.on('disconnected', () => {
+                        if (this._converse.connfeedback.attributes.connection_status === converse.env.Strophe.Status.AUTHFAIL) {
+                            Array.from(document.querySelectorAll('solid-xmpp-chat')).map(el => el.shadowRoot.innerHTML =
+                                `<div style='margin:3em;line-height:32px;'><b style='color:red;'>Erreur d'authentification.</b><br /><i style='color:grey;'>Êtes-vous sur le Hubl affilié à votre compte ?</i></div>`,
+                            );
+                        } else {
+                            Array.from(document.querySelectorAll('solid-xmpp-chat')).map(el => el.shadowRoot.innerHTML =
+                                `<div style='margin:3em;line-height:32px;'><b style='color:red;'>Erreur.</b><br /><i style='color:grey;'>${this._converse.connfeedback.attributes.message}</i></div>`,
+                            );
+                        }
+                    });
+                },
+            });
 
-      // Initialize rai plugin
-      converse.plugins.add('conversejs-rai', {
-        async initialize() {
+            // Initialize rai plugin
+            converse.plugins.add('conversejs-rai', {
+                async initialize() {
 
-          let userRooms = (await Promise.all([
-            new Promise((resolve, reject) => {
-              const circleInterval = setInterval(async () => {
-                let retry = false;
-                let circles = [];
-                const user = await document.querySelector('sib-auth').getUser();
-                const userProfile = await store.getData(user['@id'], this.context);
-                for (let circleMembership of await userProfile['circles.ldp:contains']) {
-                  if (circleMembership) {
-                    circles.push(await circleMembership['circle.jabberID']);
-                  } else {
-                    retry = true;
-                  }
-                }
-                if (!retry) {
-                  clearInterval(circleInterval);
-                  resolve(circles);
-                }
-              }, 250);
-            }),
-            new Promise((resolve, reject) => {
-              const projectInterval = setInterval(async () => {
-                let retry = false;
-                let projects = [];
-                const user = await document.querySelector('sib-auth').getUser();
-                const userProfile = await store.getData(user['@id'], this.context);
-                for (let projectMembership of await userProfile['projects.ldp:contains']) {
-                  if (projectMembership) {
-                    projects.push(await projectMembership['project.jabberID']);
-                  } else {
-                    retry = true;
-                  }
-                }
-                if (!retry) {
-                  clearInterval(projectInterval);
-                  resolve(projects);
-                }
-              }, 250);
-            })
-          ])).flat();
+                    let userRooms = (await Promise.all([
+                        new Promise((resolve, reject) => {
+                            const circleInterval = setInterval(async () => {
+                                let retry = false;
+                                let circles = [];
+                                const user = await document.querySelector('sib-auth').getUser();
+                                const userProfile = await store.getData(user['@id'], this.context);
+                                for (let circleMembership of await userProfile['circles.ldp:contains']) {
+                                    if (circleMembership) {
+                                        circles.push(await circleMembership['circle.jabberID']);
+                                    } else {
+                                        retry = true;
+                                    }
+                                }
+                                if (!retry) {
+                                    clearInterval(circleInterval);
+                                    resolve(circles);
+                                }
+                            }, 250);
+                        }),
+                        new Promise((resolve, reject) => {
+                            const projectInterval = setInterval(async () => {
+                                let retry = false;
+                                let projects = [];
+                                const user = await document.querySelector('sib-auth').getUser();
+                                const userProfile = await store.getData(user['@id'], this.context);
+                                for (let projectMembership of await userProfile['projects.ldp:contains']) {
+                                    if (projectMembership) {
+                                        projects.push(await projectMembership['project.jabberID']);
+                                    } else {
+                                        retry = true;
+                                    }
+                                }
+                                if (!retry) {
+                                    clearInterval(projectInterval);
+                                    resolve(projects);
+                                }
+                            }, 250);
+                        }),
+                    ])).flat();
 
-          // @MattJ Here userRooms is an array of each jabberID the user is on.
-          this._converse.api.trigger('raiRoomsUpdated', userRooms);
+                    // @MattJ Here userRooms is an array of each jabberID the user is on.
+                    this._converse.api.trigger('raiRoomsUpdated', userRooms);
 
-          this._converse.api.listen.on('chatRoomActivityIndicators', function (jid) {
-            window.dispatchEvent(new CustomEvent('newMessage', {
-              detail: {
-                jid: jid
-              }
-            }));
-          });
-        }
-      });
+                    this._converse.api.listen.on('chatRoomActivityIndicators', function(jid) {
+                        window.dispatchEvent(new CustomEvent('newMessage', {
+                            detail: {
+                                jid: jid,
+                            },
+                        }));
+                    });
+                },
+            });
 
-      // Transform hats to custom values
-      converse.plugins.add('custom-hats', {
-        overrides: {
-          getHats: function () {
-            const hat_conversions = {'admin': 'Administrateur'};
-            const _converse = this;
-            const hats = _converse.__super__.getHats.apply(this, arguments);
-            if (!hat_conversions) {
-              return hats;
-            } else {
-              const role_affiliations = Object.keys(hat_conversions);
-              const custom_hats = hats.map((hat) => {
-                if (role_affiliations.includes(hat.title)){
-                    return({title: hat_conversions[hat.title]});
-                } else {
-                    return hat;
-                }
-              })
-              return custom_hats
-            }
-          }
-        }
-      });
-      //Highly experimental DO NOT USE
+            // Transform hats to custom values
+            converse.plugins.add('custom-hats', {
+                overrides: {
+                    getHats: function() {
+                        const hat_conversions = { 'admin': 'Administrateur' };
+                        const _converse = this;
+                        const hats = _converse.__super__.getHats.apply(this, arguments);
+                        if (!hat_conversions) {
+                            return hats;
+                        } else {
+                            const role_affiliations = Object.keys(hat_conversions);
+                            const custom_hats = hats.map((hat) => {
+                                if (role_affiliations.includes(hat.title)) {
+                                    return ({ title: hat_conversions[hat.title] });
+                                } else {
+                                    return hat;
+                                }
+                            });
+                            return custom_hats;
+                        }
+                    },
+                },
+            });
+            //Highly experimental DO NOT USE
 //       converse.plugins.add('custom-storage', {
 //         overrides: {
 //           createStore: function () {
@@ -345,107 +349,127 @@ export const SolidXMPPChat = {
 //           }
 //         }
 //       });
-      //Override converse's request permission with an empty function
-      //so that permission request for notifications don't happen
-      converse.plugins.add('remove-notifications', {
-        overrides: {
-          requestPermission: function () {},
-          showMessageNotification: function () {},
-          showChatStateNotification: function () {},
-          showContactRequestNotification: function () {},
-          showFeedbackNotification: function () {},
-          handleChatStateNotification: function () {},
-          handleMessageNotification: function () {},
-          handleContactRequestNotification: function () {},
-          handleFeedback: function () {},
-        }
-      });
-      // Initialize deferred resolution plugin
-      converse.plugins.add('conversejs-sib-focused', {
-        initialize() {
-          this._converse.api.listen.on('chatBoxFocused', function() {
-            // Get the currently used solid-xmpp-chat & send read event of
-            const resource = Array.from(document.querySelectorAll('solid-xmpp-chat'))
-              .filter(el => {return el.shadowRoot.getElementById('conversejs')})
-              .pop()
-              .component.resource;
-            window.dispatchEvent(new CustomEvent('read', {
-              detail: {
-                resource: resource
-              }
-            }));
-          });
-        }
-      });
+            //Override converse's request permission with an empty function
+            //so that permission request for notifications don't happen
+            converse.plugins.add('remove-notifications', {
+                overrides: {
+                    requestPermission: function() {
+                    },
+                    showMessageNotification: function() {
+                    },
+                    showChatStateNotification: function() {
+                    },
+                    showContactRequestNotification: function() {
+                    },
+                    showFeedbackNotification: function() {
+                    },
+                    handleChatStateNotification: function() {
+                    },
+                    handleMessageNotification: function() {
+                    },
+                    handleContactRequestNotification: function() {
+                    },
+                    handleFeedback: function() {
+                    },
+                },
+            });
+            // Initialize deferred resolution plugin
+            converse.plugins.add('conversejs-sib-focused', {
+                initialize() {
+                    this._converse.api.listen.on('chatBoxFocused', function() {
+                        // Get the currently used solid-xmpp-chat & send read event of
+                        const resource = Array.from(document.querySelectorAll('solid-xmpp-chat'))
+                            .filter(el => {
+                                return el.shadowRoot.getElementById('conversejs');
+                            })
+                            .pop()
+                            .component.resource;
+                        window.dispatchEvent(new CustomEvent('read', {
+                            detail: {
+                                resource: resource,
+                            },
+                        }));
+                    });
+                },
+            });
 
-      const user = await document.querySelector('sib-auth').getUser();
-      const userProfile = await store.getData(user['@id'], this.context);
-      const jabberID = await userProfile['chatProfile.jabberID'];
+            const user = await document.querySelector('sib-auth').getUser();
+            const userProfile = await store.getData(user['@id'], this.context);
+            const jabberID = await userProfile['chatProfile.jabberID'];
 
-      if(this.resource) {
-        if (await this.resource.jabberRoom) {
-          this.jid = await this.resource['jabberID'];
-        } else {
-          this.jid = await this.resource['chatProfile.jabberID'];
-        }
-      } else {
-        this.jid = jabberID;
-      }
+            if (this.resource) {
+                if (await this.resource.jabberRoom) {
+                    this.jid = await this.resource['jabberID'];
+                } else {
+                    this.jid = await this.resource['chatProfile.jabberID'];
+                }
+            } else {
+                this.jid = jabberID;
+            }
 
-      const idToken = await document.querySelector('sib-auth').getUserIdToken();
+            const idToken = await document.querySelector('sib-auth').getUserIdToken();
 
-      converse.initialize({
-        'assets_path': (/skypack/.test(ComponentPath) ? ComponentPath.replace('cdn.skypack.dev', 'unpkg.com') : ComponentPath) + '/dist/conversejs/',
-        'authentication': this.element.dataset.authentication || 'login',
-        'password': idToken,
-        'allow_bookmarks': false,
-        'allow_chat_pending_contacts': true,
-        'allow_message_retraction': 'moderator',
-        'allow_non_roster_messaging': true,
-        'allow_dragresize': false,
-        'allow_logout': false,
-        'archived_messages_page_size': "30",
-        'auto_list_rooms': true,
-        'auto_login': this.element.dataset.autoLogin === 'true',
-        'auto_join_on_invite': true,
-        'auto_reconnect': true,
-        'auto_register_muc_nickname': false,
-        'websocket_url': this.element.dataset.websocketUrl || 'wss://jabber.happy-dev.fr/xmpp-websocket',
-        'enable_smacks': true,
-        "clear_messages_on_reconnection": false,
-        "discover_connection_methods": false,
-        'jid': jabberID.toLowerCase(),
-        'i18n': this.element.dataset.i18n || 'fr',
-        'loglevel': 'fatal',
-        'message_archiving': 'always',
-        'message_archiving_timeout': 60000,
-        'muc_disable_slash_commands': true,
-        'muc_hats': ['hats', 'vcard_roles', 'admin'],
-        'role_affiliation_hat_conversions': {'admin': 'Administrateur'},
-        'muc_nickname_from_jid': false,
-        'muc_fetch_members': true,
-        'muc_show_info_messages': [],
-        'play_sounds': false,
-        'root': this.element.shadowRoot,
-        'show_client_info': false,
-        'show_desktop_notifications': false,
-        'persistent_store': 'none',
-        'sounds_path': ComponentPath + '/dist/conversejs/',
-        'show_send_button': false,
-        'view_mode': 'fullscreen',
-        'visible_toolbar_buttons': {
-          call: false,
-          spoiler: false,
-          emoji: true,
-          fileupload: true, // Not working in current Converse
-          toggle_occupants: false
-        },
-        'whitelisted_plugins': ['rai', 'conversejs-sib-disconnected', 'conversejs-sib-connected', 'conversejs-sib-focused', 'conversejs-changechat', 'conversejs-rai', 'custom-hats', 'remove-notifications'],
-      });
+            converse.initialize({
+                'assets_path': (/skypack/.test(ComponentPath) ? ComponentPath.replace('cdn.skypack.dev', 'unpkg.com') : ComponentPath) + '/dist/conversejs/',
+                'authentication': this.element.dataset.authentication || 'login',
+                'password': idToken,
+                'allow_bookmarks': false,
+                'allow_chat_pending_contacts': true,
+                'allow_message_retraction': 'moderator',
+                'allow_non_roster_messaging': true,
+                'allow_dragresize': false,
+                'allow_logout': false,
+                'archived_messages_page_size': '30',
+                'auto_list_rooms': true,
+                'auto_login': this.element.dataset.autoLogin === 'true',
+                'auto_join_on_invite': true,
+                'auto_reconnect': true,
+                'auto_register_muc_nickname': false,
+                'websocket_url': this.element.dataset.websocketUrl || 'wss://jabber.happy-dev.fr/xmpp-websocket',
+                'enable_smacks': true,
+                'clear_messages_on_reconnection': false,
+                'discover_connection_methods': false,
+                'jid': jabberID.toLowerCase(),
+                'i18n': this.element.dataset.i18n || 'fr',
+                'loglevel': 'fatal',
+                'message_archiving': 'always',
+                'message_archiving_timeout': 60000,
+                'muc_disable_slash_commands': true,
+                'muc_hats': ['hats', 'vcard_roles', 'admin'],
+                'role_affiliation_hat_conversions': { 'admin': 'Administrateur' },
+                'muc_nickname_from_jid': false,
+                'muc_fetch_members': true,
+                'muc_show_info_messages': [],
+                'play_sounds': false,
+                'root': this.element.shadowRoot,
+                'show_client_info': false,
+                'show_desktop_notifications': false,
+                'persistent_store': 'none',
+                'sounds_path': ComponentPath + '/dist/conversejs/',
+                'show_send_button': false,
+                'view_mode': 'fullscreen',
+                'visible_toolbar_buttons': {
+                    call: false,
+                    spoiler: false,
+                    emoji: true,
+                    fileupload: true, // Not working in current Converse
+                    toggle_occupants: false,
+                },
+                'whitelisted_plugins': [
+                    'rai',
+                    'conversejs-sib-disconnected',
+                    'conversejs-sib-connected',
+                    'conversejs-sib-focused',
+                    'conversejs-changechat',
+                    'conversejs-rai',
+                    'custom-hats',
+                    'remove-notifications',
+                ],
+            });
 
-      converse_sib.loaded_deferred.resolve();
-    }, 0);
-  }
+            converse_sib.loaded_deferred.resolve();
+        }, 0);
+    },
 };
 
 Sib.register(SolidXMPPChat);