瀏覽代碼

Remove some constants from the converse private global

JC Brand 1 年之前
父節點
當前提交
ef41e55cba
共有 34 個文件被更改,包括 120 次插入115 次删除
  1. 3 2
      src/headless/plugins/chat/api.js
  2. 2 4
      src/headless/plugins/chat/index.js
  3. 8 8
      src/headless/plugins/chat/model.js
  4. 3 2
      src/headless/plugins/chat/utils.js
  5. 3 2
      src/headless/plugins/headlines/api.js
  6. 3 3
      src/headless/plugins/headlines/feed.js
  7. 2 4
      src/headless/plugins/headlines/index.js
  8. 3 2
      src/headless/plugins/mam/index.js
  9. 3 2
      src/headless/plugins/mam/utils.js
  10. 3 2
      src/headless/plugins/muc/api.js
  11. 2 4
      src/headless/plugins/muc/index.js
  12. 2 1
      src/headless/plugins/muc/muc.js
  13. 4 3
      src/headless/plugins/muc/utils.js
  14. 2 2
      src/headless/plugins/roster/utils.js
  15. 30 40
      src/headless/shared/_converse.js
  16. 2 1
      src/plugins/bookmark-views/utils.js
  17. 2 2
      src/plugins/chatboxviews/templates/chats.js
  18. 3 2
      src/plugins/chatview/templates/chat-head.js
  19. 2 1
      src/plugins/chatview/templates/chat.js
  20. 2 4
      src/plugins/controlbox/index.js
  21. 3 2
      src/plugins/controlbox/model.js
  22. 2 1
      src/plugins/headlines-view/feed-list.js
  23. 2 2
      src/plugins/headlines-view/templates/feeds-list.js
  24. 2 1
      src/plugins/mam-views/utils.js
  25. 2 1
      src/plugins/minimize/index.js
  26. 2 1
      src/plugins/muc-views/index.js
  27. 2 2
      src/plugins/muc-views/templates/muc-chatarea.js
  28. 2 1
      src/plugins/muc-views/utils.js
  29. 8 7
      src/plugins/omemo/utils.js
  30. 2 1
      src/plugins/push/utils.js
  31. 2 1
      src/plugins/roomslist/templates/roomslist.js
  32. 3 2
      src/shared/chat/baseview.js
  33. 2 1
      src/shared/chat/emoji-dropdown.js
  34. 2 1
      src/shared/chat/message-actions.js

+ 3 - 2
src/headless/plugins/chat/api.js

@@ -1,6 +1,7 @@
 import _converse from '../../shared/_converse.js';
 import api from '../../shared/api/index.js';
 import log from "../../log.js";
+import { PRIVATE_CHAT_TYPE } from '../../shared/constants.js';
 
 
 export default {
@@ -128,7 +129,7 @@ export default {
                 if (!model && create) {
                     model = await api.chatboxes.create(jid, attrs, _converse.ChatBox);
                 } else {
-                    model = (model && model.get('type') === _converse.PRIVATE_CHAT_TYPE) ? model : null;
+                    model = (model && model.get('type') === PRIVATE_CHAT_TYPE) ? model : null;
                     if (model && Object.keys(attrs).length) {
                         model.save(attrs);
                     }
@@ -137,7 +138,7 @@ export default {
             }
             if (jids === undefined) {
                 const chats = await api.chatboxes.get();
-                return chats.filter(c => (c.get('type') === _converse.PRIVATE_CHAT_TYPE));
+                return chats.filter(c => (c.get('type') === PRIVATE_CHAT_TYPE));
             } else if (typeof jids === 'string') {
                 return _get(jids);
             }

+ 2 - 4
src/headless/plugins/chat/index.js

@@ -8,6 +8,7 @@ import Messages from './messages.js';
 import _converse from '../../shared/_converse.js';
 import api, { converse } from '../../shared/api/index.js';
 import chat_api from './api.js';
+import { PRIVATE_CHAT_TYPE } from '../../shared/constants.js';
 import {
     autoJoinChats,
     enableCarbons,
@@ -41,10 +42,7 @@ converse.plugins.add('converse-chat', {
         Object.assign(_converse, { ChatBox, Message, Messages, handleMessageStanza });
         Object.assign(api, chat_api);
 
-        api.chatboxes.registry.add(
-            _converse.PRIVATE_CHAT_TYPE,
-            ChatBox
-        );
+        api.chatboxes.registry.add(PRIVATE_CHAT_TYPE, ChatBox);
 
         routeToChat();
         addEventListener('hashchange', routeToChat);

+ 8 - 8
src/headless/plugins/chat/model.js

@@ -5,7 +5,7 @@ import pick from "lodash-es/pick";
 import _converse from '../../shared/_converse.js';
 import api, { converse } from '../../shared/api/index.js';
 import { Model } from '@converse/skeletor/src/model.js';
-import { PRIVATE_CHAT_TYPE } from '@converse/headless/shared/constants.js';
+import { PRIVATE_CHAT_TYPE, COMPOSING, INACTIVE, PAUSED, GONE } from '@converse/headless/shared/constants.js';
 import { TimeoutError } from '../../shared/errors.js';
 import { debouncedPruneHistory, handleCorrection } from '../../shared/chat/utils.js';
 import { filesize } from "filesize";
@@ -110,11 +110,11 @@ class ChatBox extends ModelWithContact {
 
     getNotificationsText () {
         const { __ } = _converse;
-        if (this.notifications?.get('chat_state') === _converse.COMPOSING) {
+        if (this.notifications?.get('chat_state') === COMPOSING) {
             return __('%1$s is typing', this.getDisplayName());
-        } else if (this.notifications?.get('chat_state') === _converse.PAUSED) {
+        } else if (this.notifications?.get('chat_state') === PAUSED) {
             return __('%1$s has stopped typing', this.getDisplayName());
-        } else if (this.notifications?.get('chat_state') === _converse.GONE) {
+        } else if (this.notifications?.get('chat_state') === GONE) {
             return __('%1$s has gone away', this.getDisplayName());
         } else {
             return '';
@@ -481,17 +481,17 @@ class ChatBox extends ModelWithContact {
             window.clearTimeout(this.chat_state_timeout);
             delete this.chat_state_timeout;
         }
-        if (state === _converse.COMPOSING) {
+        if (state === COMPOSING) {
             this.chat_state_timeout = window.setTimeout(
                 this.setChatState.bind(this),
                 _converse.TIMEOUTS.PAUSED,
-                _converse.PAUSED
+                PAUSED
             );
-        } else if (state === _converse.PAUSED) {
+        } else if (state === PAUSED) {
             this.chat_state_timeout = window.setTimeout(
                 this.setChatState.bind(this),
                 _converse.TIMEOUTS.INACTIVE,
-                _converse.INACTIVE
+                INACTIVE
             );
         }
         this.set('chat_state', state, options);

+ 3 - 2
src/headless/plugins/chat/utils.js

@@ -6,6 +6,7 @@ import log from '../../log.js';
 import { isArchived, isHeadline, isServerMessage, } from '../../shared/parsers';
 import { parseMessage } from './parsers.js';
 import { shouldClearCache } from '../../utils/session.js';
+import { CONTROLBOX_TYPE, PRIVATE_CHAT_TYPE } from "../../shared/constants.js";
 
 const { Strophe, u } = converse.env;
 
@@ -26,7 +27,7 @@ export async function onClearSession () {
         await Promise.all(
             _converse.chatboxes.map(c => c.messages && c.messages.clearStore({ 'silent': true }))
         );
-        const filter = o => o.get('type') !== _converse.CONTROLBOX_TYPE;
+        const filter = o => o.get('type') !== CONTROLBOX_TYPE;
         _converse.chatboxes.clearStore({ 'silent': true }, filter);
     }
 }
@@ -53,7 +54,7 @@ async function handleErrorMessage (stanza) {
         return;
     }
     const chatbox = await api.chatboxes.get(from_jid);
-    if (chatbox?.get('type') === _converse.PRIVATE_CHAT_TYPE) {
+    if (chatbox?.get('type') === PRIVATE_CHAT_TYPE) {
         chatbox?.handleErrorMessageStanza(stanza);
     }
 }

+ 3 - 2
src/headless/plugins/headlines/api.js

@@ -1,5 +1,6 @@
 import _converse from '../../shared/_converse.js';
 import api from '../../shared/api/index.js';
+import { HEADLINES_TYPE } from '../../shared/constants.js';
 
 export default {
     /**
@@ -26,7 +27,7 @@ export default {
                 if (!model && create) {
                     model = await api.chatboxes.create(jid, attrs, _converse.HeadlinesFeed);
                 } else {
-                    model = (model && model.get('type') === _converse.HEADLINES_TYPE) ? model : null;
+                    model = (model && model.get('type') === HEADLINES_TYPE) ? model : null;
                     if (model && Object.keys(attrs).length) {
                         model.save(attrs);
                     }
@@ -35,7 +36,7 @@ export default {
             }
             if (jids === undefined) {
                 const chats = await api.chatboxes.get();
-                return chats.filter(c => (c.get('type') === _converse.HEADLINES_TYPE));
+                return chats.filter(c => (c.get('type') === HEADLINES_TYPE));
             } else if (typeof jids === 'string') {
                 return _get(jids);
             }

+ 3 - 3
src/headless/plugins/headlines/feed.js

@@ -1,18 +1,18 @@
 import ChatBox from '../../plugins/chat/model.js';
-import _converse from '../../shared/_converse.js';
 import api from "../../shared/api/index.js";
+import { HEADLINES_TYPE } from '../../shared/constants.js';
 
 
 export default class HeadlinesFeed extends ChatBox {
 
-    defaults () { // eslint-disable-line class-methods-use-this
+    defaults () {
         return {
             'bookmarked': false,
             'hidden': ['mobile', 'fullscreen'].includes(api.settings.get("view_mode")),
             'message_type': 'headline',
             'num_unread': 0,
             'time_opened': this.get('time_opened') || (new Date()).getTime(),
-            'type': _converse.HEADLINES_TYPE
+            'type': HEADLINES_TYPE
         }
     }
 

+ 2 - 4
src/headless/plugins/headlines/index.js

@@ -7,6 +7,7 @@ import _converse from '../../shared/_converse.js';
 import api, { converse } from '../../shared/api/index.js';
 import headlines_api from './api.js';
 import { onHeadlineMessage } from './utils.js';
+import { HEADLINES_TYPE } from '../../shared/constants.js';
 
 converse.plugins.add('converse-headlines', {
     dependencies: ["converse-chat"],
@@ -31,9 +32,6 @@ converse.plugins.add('converse-headlines', {
 
         Object.assign(api, headlines_api);
 
-        api.chatboxes.registry.add(
-            _converse.HEADLINES_TYPE,
-            HeadlinesFeed
-        );
+        api.chatboxes.registry.add(HEADLINES_TYPE, HeadlinesFeed);
     }
 });

+ 3 - 2
src/headless/plugins/mam/index.js

@@ -8,6 +8,7 @@ import MAMPlaceholderMessage from './placeholder.js';
 import _converse from '../../shared/_converse.js';
 import api, { converse } from '../../shared/api/index.js';
 import mam_api from './api.js';
+import { PRIVATE_CHAT_TYPE } from '../..//shared/constants.js';
 import { Strophe } from 'strophe.js';
 import {
     onMAMError,
@@ -49,13 +50,13 @@ converse.plugins.add('converse-mam', {
         api.listen.on('enteredNewRoom', muc => muc.features.get('mam_enabled') && fetchNewestMessages(muc));
 
         api.listen.on('chatReconnected', chat => {
-            if (chat.get('type') === _converse.PRIVATE_CHAT_TYPE) {
+            if (chat.get('type') === PRIVATE_CHAT_TYPE) {
                 fetchNewestMessages(chat);
             }
         });
 
         api.listen.on('afterMessagesFetched', chat => {
-            if (chat.get('type') === _converse.PRIVATE_CHAT_TYPE) {
+            if (chat.get('type') === PRIVATE_CHAT_TYPE) {
                 fetchNewestMessages(chat);
             }
         });

+ 3 - 2
src/headless/plugins/mam/utils.js

@@ -6,6 +6,7 @@ import sizzle from 'sizzle';
 import { Strophe, $iq } from 'strophe.js';
 import { parseMUCMessage } from '../../plugins/muc/parsers';
 import { parseMessage } from '../../plugins/chat/parsers';
+import { CHATROOMS_TYPE } from '../../shared/constants.js';
 
 const { NS } = Strophe;
 const u = converse.env.utils;
@@ -77,7 +78,7 @@ export function preMUCJoinMAMFetch (muc) {
 
 export async function handleMAMResult (model, result, query, options, should_page) {
     await api.emojis.initialize();
-    const is_muc = model.get('type') === _converse.CHATROOMS_TYPE;
+    const is_muc = model.get('type') === CHATROOMS_TYPE;
     const doParseMessage = s => is_muc ? parseMUCMessage(s, model) : parseMessage(s);
     const messages = await Promise.all(result.messages.map(doParseMessage));
     result.messages = messages;
@@ -128,7 +129,7 @@ export async function fetchArchivedMessages (model, options = {}, should_page =
     if (model.disable_mam) {
         return;
     }
-    const is_muc = model.get('type') === _converse.CHATROOMS_TYPE;
+    const is_muc = model.get('type') === CHATROOMS_TYPE;
     const mam_jid = is_muc ? model.get('jid') : _converse.bare_jid;
     if (!(await api.disco.supports(NS.MAM, mam_jid))) {
         return;

+ 3 - 2
src/headless/plugins/muc/api.js

@@ -3,6 +3,7 @@ import api from '../../shared/api/index.js';
 import log from '../../log';
 import { Strophe } from 'strophe.js';
 import { getJIDFromURI } from '../../utils/jid.js';
+import { CHATROOMS_TYPE } from '../../shared/constants.js';
 
 
 export default {
@@ -146,7 +147,7 @@ export default {
                 if (!model && create) {
                     model = await api.chatboxes.create(jid, attrs, _converse.ChatRoom);
                 } else {
-                    model = model && model.get('type') === _converse.CHATROOMS_TYPE ? model : null;
+                    model = model && model.get('type') === CHATROOMS_TYPE ? model : null;
                     if (model && Object.keys(attrs).length) {
                         model.save(attrs);
                     }
@@ -155,7 +156,7 @@ export default {
             }
             if (jids === undefined) {
                 const chats = await api.chatboxes.get();
-                return chats.filter(c => c.get('type') === _converse.CHATROOMS_TYPE);
+                return chats.filter(c => c.get('type') === CHATROOMS_TYPE);
             } else if (typeof jids === 'string') {
                 return _get(jids);
             }

+ 2 - 4
src/headless/plugins/muc/index.js

@@ -15,6 +15,7 @@ import affiliations_api from './affiliations/api.js';
 import muc_api from './api.js';
 import _converse from '../../shared/_converse.js';
 import api, { converse } from '../../shared/api/index.js';
+import { CHATROOMS_TYPE } from '../..//shared/constants.js';
 import {
     autoJoinRooms,
     disconnectChatRooms,
@@ -184,10 +185,7 @@ converse.plugins.add('converse-muc', {
         _converse.ChatRoomOccupants = ChatRoomOccupants;
         _converse.ChatRoomOccupant = ChatRoomOccupant;
 
-        api.chatboxes.registry.add(
-            _converse.CHATROOMS_TYPE,
-            MUC
-        );
+        api.chatboxes.registry.add(CHATROOMS_TYPE, MUC);
 
         Object.assign(_converse, {
             getDefaultMUCNickname,

+ 2 - 1
src/headless/plugins/muc/muc.js

@@ -8,6 +8,7 @@ import pick from 'lodash-es/pick';
 import sizzle from 'sizzle';
 import { Model } from '@converse/skeletor/src/model.js';
 import { ROOMSTATUS } from './constants.js';
+import { CHATROOMS_TYPE } from '../../shared/constants.js';
 import { Strophe, $build, $iq, $msg, $pres } from 'strophe.js';
 import { TimeoutError } from '../../shared/errors.js';
 import { computeAffiliationsDelta, setAffiliations, getAffiliationList }  from './affiliations/utils.js';
@@ -86,7 +87,7 @@ class MUC extends ChatBox {
             'roomconfig': {},
             'time_opened': this.get('time_opened') || new Date().getTime(),
             'time_sent': new Date(0).toISOString(),
-            'type': _converse.CHATROOMS_TYPE
+            'type': CHATROOMS_TYPE
         };
     }
 

+ 4 - 3
src/headless/plugins/muc/utils.js

@@ -3,6 +3,7 @@ import api, { converse } from '../../shared/api/index.js';
 import log from '../../log.js';
 import { ROLES } from './constants.js';
 import { safeSave } from '../../utils/index.js';
+import { CHATROOMS_TYPE } from '../../shared/constants.js';
 
 const { Strophe, sizzle, u } = converse.env;
 
@@ -54,7 +55,7 @@ export function disconnectChatRooms () {
      * when fetched from session storage.
      */
     return _converse.chatboxes
-        .filter(m => m.get('type') === _converse.CHATROOMS_TYPE)
+        .filter(m => m.get('type') === CHATROOMS_TYPE)
         .forEach(m => m.session.save({ 'connection_status': converse.ROOMSTATUS.DISCONNECTED }));
 }
 
@@ -89,7 +90,7 @@ export async function routeToRoom (event) {
  * "chatroom".
  */
 export async function openChatRoom (jid, settings) {
-    settings.type = _converse.CHATROOMS_TYPE;
+    settings.type = CHATROOMS_TYPE;
     settings.id = jid;
     const chatbox = await api.rooms.get(jid, settings, true);
     chatbox.maybeShow(true);
@@ -210,7 +211,7 @@ export function onAddClientFeatures () {
 
 export function onBeforeTearDown () {
     _converse.chatboxes
-        .where({ 'type': _converse.CHATROOMS_TYPE })
+        .where({ 'type': CHATROOMS_TYPE })
         .forEach(muc => safeSave(muc.session, { 'connection_status': converse.ROOMSTATUS.DISCONNECTED }));
 }
 

+ 2 - 2
src/headless/plugins/roster/utils.js

@@ -4,7 +4,7 @@ import log from "../../log.js";
 import { Strophe } from 'strophe.js';
 import { Model } from '@converse/skeletor/src/model.js';
 import { RosterFilter } from '../../plugins/roster/filter.js';
-import { STATUS_WEIGHTS } from "../../shared/constants";
+import { STATUS_WEIGHTS, PRIVATE_CHAT_TYPE } from "../../shared/constants";
 import { initStorage } from '../../utils/storage.js';
 import { shouldClearCache } from '../../utils/session.js';
 
@@ -169,7 +169,7 @@ export function onChatBoxesInitialized () {
     _converse.chatboxes.on('change:num_unread', updateUnreadCounter);
 
     _converse.chatboxes.on('add', chatbox => {
-        if (chatbox.get('type') === _converse.PRIVATE_CHAT_TYPE) {
+        if (chatbox.get('type') === PRIVATE_CHAT_TYPE) {
             chatbox.setRosterContact(chatbox.get('jid'));
         }
     });

+ 30 - 40
src/headless/shared/_converse.js

@@ -6,23 +6,19 @@ import { getOpenPromise } from '@converse/openpromise';
 import {
     ACTIVE,
     ANONYMOUS,
-    CHATROOMS_TYPE,
     CLOSED,
     COMPOSING,
-    CONTROLBOX_TYPE,
     DEFAULT_IMAGE,
     DEFAULT_IMAGE_TYPE,
     EXTERNAL,
     FAILURE,
     GONE,
-    HEADLINES_TYPE,
     INACTIVE,
     LOGIN,
     LOGOUT,
     OPENED,
     PAUSED,
     PREBIND,
-    PRIVATE_CHAT_TYPE,
     SUCCESS,
     VERSION_NAME
 } from './constants';
@@ -34,7 +30,7 @@ import {
  * @global
  * @namespace _converse
  */
-class ConverseNamespace extends EventEmitter(Object) {
+class ConversePrivateGlobal extends EventEmitter(Object) {
 
     constructor () {
         super();
@@ -46,40 +42,34 @@ class ConverseNamespace extends EventEmitter(Object) {
             'initialized': getOpenPromise()
         };
 
-
-        Object.assign(this, {
-            ANONYMOUS,
-            CLOSED,
-            EXTERNAL,
-            LOGIN,
-            LOGOUT,
-            OPENED,
-            PREBIND,
-
-            SUCCESS,
-            FAILURE,
-
-            DEFAULT_IMAGE_TYPE,
-            DEFAULT_IMAGE,
-
-            INACTIVE,
-            ACTIVE,
-            COMPOSING,
-            PAUSED,
-            GONE,
-
-            PRIVATE_CHAT_TYPE,
-            CHATROOMS_TYPE,
-            HEADLINES_TYPE,
-            CONTROLBOX_TYPE,
-
-            // Set as module attr so that we can override in tests.
-            // TODO: replace with config settings
-            TIMEOUTS: {
-                PAUSED: 10000,
-                INACTIVE: 90000
-            },
-        });
+        this.ANONYMOUS = ANONYMOUS;
+        this.CLOSED = CLOSED;
+        this.EXTERNAL = EXTERNAL;
+        this.LOGIN = LOGIN;
+        this.LOGOUT = LOGOUT;
+        this.OPENED = OPENED;
+        this.PREBIND = PREBIND;
+
+        this.SUCCESS = SUCCESS;
+        this.FAILURE = FAILURE;
+
+        this.DEFAULT_IMAGE_TYPE = DEFAULT_IMAGE_TYPE;
+        this.DEFAULT_IMAGE = DEFAULT_IMAGE;
+
+        this.INACTIVE = INACTIVE;
+        this.ACTIVE = ACTIVE;
+        this.COMPOSING = COMPOSING;
+        this.PAUSED = PAUSED;
+        this.GONE = GONE;
+
+        // Set as module attr so that we can override in tests.
+        // TODO: replace with config settings
+        this.TIMEOUTS =  {
+            PAUSED: 10000,
+            INACTIVE: 90000
+        }
+
+        this.chatboxes = null;
     }
 
     /**
@@ -112,7 +102,7 @@ class ConverseNamespace extends EventEmitter(Object) {
     }
 }
 
-const _converse = new ConverseNamespace();
+const _converse = new ConversePrivateGlobal();
 
 // Make _converse pluggable
 pluggable.enable(_converse, '_converse', 'pluggable');

+ 2 - 1
src/plugins/bookmark-views/utils.js

@@ -1,10 +1,11 @@
 import { __ } from 'i18n';
 import { _converse, api, converse } from '@converse/headless';
 import { checkBookmarksSupport } from '@converse/headless/plugins/bookmarks/utils';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants';
 
 
 export function getHeadingButtons (view, buttons) {
-    if (api.settings.get('allow_bookmarks') && view.model.get('type') === _converse.CHATROOMS_TYPE) {
+    if (api.settings.get('allow_bookmarks') && view.model.get('type') === CHATROOMS_TYPE) {
         const data = {
             'i18n_title': __('Bookmark this groupchat'),
             'i18n_text': __('Bookmark'),

+ 2 - 2
src/plugins/chatboxviews/templates/chats.js

@@ -1,17 +1,17 @@
 import { html } from 'lit';
 import { repeat } from 'lit/directives/repeat.js';
 import { _converse, api } from '@converse/headless';
+import { CONTROLBOX_TYPE, CHATROOMS_TYPE, HEADLINES_TYPE } from '@converse/headless/shared/constants';
 
 
 function shouldShowChat (c) {
-    const { CONTROLBOX_TYPE } = _converse;
     const is_minimized = (api.settings.get('view_mode') === 'overlayed' && c.get('minimized'));
     return c.get('type') === CONTROLBOX_TYPE || !(c.get('hidden') || is_minimized);
 }
 
 
 export default () => {
-    const { chatboxes, CONTROLBOX_TYPE, CHATROOMS_TYPE, HEADLINES_TYPE } = _converse;
+    const { chatboxes } = _converse;
     const view_mode = api.settings.get('view_mode');
     const connection = api.connection.get();
     const logged_out = !connection?.connected || !connection?.authenticated || connection?.disconnecting;

+ 3 - 2
src/plugins/chatview/templates/chat-head.js

@@ -3,6 +3,7 @@ import { _converse } from '@converse/headless';
 import { getStandaloneButtons, getDropdownButtons } from 'shared/chat/utils.js';
 import { html } from "lit";
 import { until } from 'lit/directives/until.js';
+import { HEADLINES_TYPE } from '@converse/headless/shared/constants.js';
 
 
 export default (o) => {
@@ -19,9 +20,9 @@ export default (o) => {
         <div class="chatbox-title ${ o.status ? '' :  "chatbox-title--no-desc"}">
             <div class="chatbox-title--row">
                 ${ (!_converse.api.settings.get("singleton")) ?  html`<converse-controlbox-navback jid="${o.jid}"></converse-controlbox-navback>` : '' }
-                ${ (o.type !== _converse.HEADLINES_TYPE) ? html`<a class="show-msg-author-modal" @click=${o.showUserDetailsModal}>${ avatar }</a>` : '' }
+                ${ (o.type !== HEADLINES_TYPE) ? html`<a class="show-msg-author-modal" @click=${o.showUserDetailsModal}>${ avatar }</a>` : '' }
                 <div class="chatbox-title__text" title="${o.jid}">
-                    ${ (o.type !== _converse.HEADLINES_TYPE) ? html`<a class="user show-msg-author-modal" @click=${o.showUserDetailsModal}>${ display_name }</a>` : display_name }
+                    ${ (o.type !== HEADLINES_TYPE) ? html`<a class="user show-msg-author-modal" @click=${o.showUserDetailsModal}>${ display_name }</a>` : display_name }
                 </div>
             </div>
             <div class="chatbox-title__buttons row no-gutters">

+ 2 - 1
src/plugins/chatview/templates/chat.js

@@ -1,5 +1,6 @@
 import { html } from "lit";
 import { _converse } from '@converse/headless';
+import { CHATROOMS_TYPE } from "@converse/headless/shared/constants";
 
 export default (o) => html`
     <div class="flyout box-flyout">
@@ -18,7 +19,7 @@ export default (o) => html`
                                 .messages=${o.help_messages}
                                 ?hidden=${!o.show_help_messages}
                                 type="info"
-                                chat_type="${_converse.CHATROOMS_TYPE}"
+                                chat_type="${CHATROOMS_TYPE}"
                             ></converse-chat-help></div>` : '' }
                 </div>
                 <converse-chat-bottom-panel jid="${o.jid}" class="bottom-panel"> </converse-chat-bottom-panel>

+ 2 - 4
src/plugins/controlbox/index.js

@@ -12,6 +12,7 @@ import ControlBoxView from './controlbox.js';
 import controlbox_api from './api.js';
 import { _converse, api, converse, log } from '@converse/headless';
 import { addControlBox, clearSession, disconnect, onChatBoxesFetched } from './utils.js';
+import { CONTROLBOX_TYPE } from "@converse/headless/shared/constants.js";
 
 import './styles/_controlbox.scss';
 import './styles/controlbox-head.scss';
@@ -50,10 +51,7 @@ converse.plugins.add('converse-controlbox', {
         _converse.ControlBox = ControlBox;
         _converse.ControlBoxToggle = ControlBoxToggle;
 
-        api.chatboxes.registry.add(
-            _converse.CONTROLBOX_TYPE,
-            ControlBox
-        );
+        api.chatboxes.registry.add(CONTROLBOX_TYPE, ControlBox);
 
         api.listen.on('chatBoxesFetched', onChatBoxesFetched);
         api.listen.on('clearSession', clearSession);

+ 3 - 2
src/plugins/controlbox/model.js

@@ -1,5 +1,6 @@
 import { _converse, api, converse } from '@converse/headless';
 import { Model } from '@converse/skeletor/src/model.js';
+import { CONTROLBOX_TYPE } from '@converse/headless/shared/constants';
 
 const { dayjs } = converse.env;
 
@@ -21,13 +22,13 @@ class ControlBox extends Model {
             'closed': !api.settings.get('show_controlbox_by_default'),
             'num_unread': 0,
             'time_opened': dayjs(0).valueOf(),
-            'type': _converse.CONTROLBOX_TYPE,
+            'type': CONTROLBOX_TYPE,
             'url': ''
         };
     }
 
     validate (attrs) {
-        if (attrs.type === _converse.CONTROLBOX_TYPE) {
+        if (attrs.type === CONTROLBOX_TYPE) {
             if (api.settings.get('view_mode') === 'embedded' && api.settings.get('singleton')) {
                 return 'Controlbox not relevant in embedded view mode';
             }

+ 2 - 1
src/plugins/headlines-view/feed-list.js

@@ -1,6 +1,7 @@
 import tplFeedsList from './templates/feeds-list.js';
 import { CustomElement } from 'shared/components/element.js';
 import { _converse, api } from '@converse/headless';
+import { HEADLINES_TYPE } from '@converse/headless/shared/constants.js';
 
 /**
  * Custom element which renders a list of headline feeds
@@ -23,7 +24,7 @@ export class HeadlinesFeedsList extends CustomElement {
     }
 
     renderIfHeadline (model) {
-        return model?.get('type') === _converse.HEADLINES_TYPE && this.requestUpdate();
+        return model?.get('type') === HEADLINES_TYPE && this.requestUpdate();
     }
 
     async openHeadline (ev) { // eslint-disable-line class-methods-use-this

+ 2 - 2
src/plugins/headlines-view/templates/feeds-list.js

@@ -1,6 +1,6 @@
 import { __ } from 'i18n';
-import { _converse } from '@converse/headless';
 import { html } from "lit";
+import { HEADLINES_TYPE } from '@converse/headless/shared/constants';
 
 function tplHeadlinesFeedsListItem (el, feed) {
     const open_title = __('Click to open this server message');
@@ -17,7 +17,7 @@ function tplHeadlinesFeedsListItem (el, feed) {
 }
 
 export default (el) => {
-    const feeds = el.model.filter(m => m.get('type') === _converse.HEADLINES_TYPE);
+    const feeds = el.model.filter(m => m.get('type') === HEADLINES_TYPE);
     const heading_headline  = __('Announcements');
     return html`
         <div class="controlbox-section" id="headline">

+ 2 - 1
src/plugins/mam-views/utils.js

@@ -2,6 +2,7 @@ import MAMPlaceholderMessage from '@converse/headless/plugins/mam/placeholder.js
 import { _converse, api, log } from '@converse/headless';
 import { fetchArchivedMessages } from '@converse/headless/plugins/mam/utils';
 import { html } from 'lit/html.js';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants';
 
 
 export function getPlaceholderTemplate (message, tpl) {
@@ -17,7 +18,7 @@ export async function fetchMessagesOnScrollUp (view) {
         return;
     }
     if (view.model.messages.length) {
-        const is_groupchat = view.model.get('type') === _converse.CHATROOMS_TYPE;
+        const is_groupchat = view.model.get('type') === CHATROOMS_TYPE;
         const oldest_message = view.model.getOldestMessage();
         if (oldest_message) {
             const by_jid = is_groupchat ? view.model.get('jid') : _converse.bare_jid;

+ 2 - 1
src/plugins/minimize/index.js

@@ -8,6 +8,7 @@ import './components/minimized-chat.js';
 import debounce from 'lodash-es/debounce';
 import MinimizedChatsToggle from './toggle.js';
 import { _converse, api, converse } from '@converse/headless';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants.js';
 import {
     addMinimizeButtonToChat,
     addMinimizeButtonToMUC,
@@ -104,7 +105,7 @@ converse.plugins.add('converse-minimize', {
         api.listen.on('chatRoomInitialized', onChatInitialized);
 
         api.listen.on('getHeadingButtons', (view, buttons) => {
-            if (view.model.get('type') === _converse.CHATROOMS_TYPE) {
+            if (view.model.get('type') === CHATROOMS_TYPE) {
                 return addMinimizeButtonToMUC(view, buttons);
             } else {
                 return addMinimizeButtonToChat(view, buttons);

+ 2 - 1
src/plugins/muc-views/index.js

@@ -8,6 +8,7 @@ import './affiliation-form.js';
 import './role-form.js';
 import MUCView from './muc.js';
 import { api, converse } from '@converse/headless';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants.js';
 import { clearHistory, confirmDirectMUCInvitation, parseMessageForMUCCommands } from './utils.js';
 
 const { Strophe } = converse.env;
@@ -86,7 +87,7 @@ converse.plugins.add('converse-muc-views', {
         });
 
         api.listen.on('chatBoxClosed', (model) => {
-            if (model.get('type') === _converse.CHATROOMS_TYPE) {
+            if (model.get('type') === CHATROOMS_TYPE) {
                 clearHistory(model.get('jid'));
             }
         });

+ 2 - 2
src/plugins/muc-views/templates/muc-chatarea.js

@@ -2,7 +2,7 @@ import '../bottom-panel.js';
 import '../sidebar.js';
 import 'shared/chat/chat-content.js';
 import 'shared/chat/help-messages.js';
-import { _converse } from '@converse/headless';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants.js';
 import { html } from "lit";
 
 export default (o) => html`
@@ -18,7 +18,7 @@ export default (o) => html`
                         .model=${o.model}
                         .messages=${o.getHelpMessages()}
                         type="info"
-                        chat_type="${_converse.CHATROOMS_TYPE}"
+                        chat_type="${CHATROOMS_TYPE}"
                     ></converse-chat-help></div>` : '' }
         </div>
         <converse-muc-bottom-panel jid="${o.jid}" class="bottom-panel"></converse-muc-bottom-panel>

+ 2 - 1
src/plugins/muc-views/utils.js

@@ -3,6 +3,7 @@ import './modals/moderator-tools.js';
 import tplSpinner from 'templates/spinner.js';
 import { __ } from 'i18n';
 import { _converse, api, converse, log } from "@converse/headless";
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants.js';
 import { html } from "lit";
 import { setAffiliation } from '@converse/headless/plugins/muc/affiliations/utils.js';
 
@@ -241,7 +242,7 @@ export function showOccupantModal (ev, occupant) {
 export function parseMessageForMUCCommands (data, handled) {
     const model = data.model;
     if (handled ||
-            model.get('type') !== _converse.CHATROOMS_TYPE || (
+            model.get('type') !== CHATROOMS_TYPE || (
             api.settings.get('muc_disable_slash_commands') &&
             !Array.isArray(api.settings.get('muc_disable_slash_commands'))
     )) {

+ 8 - 7
src/plugins/omemo/utils.js

@@ -11,6 +11,7 @@ import { html } from 'lit';
 import { initStorage } from '@converse/headless/utils/storage.js';
 import { isError } from '@converse/headless/utils/object.js';
 import { isAudioURL, isImageURL, isVideoURL, getURI } from '@converse/headless/utils/url.js';
+import { CHATROOMS_TYPE, PRIVATE_CHAT_TYPE } from '@converse/headless/shared/constants.js';
 import { until } from 'lit/directives/until.js';
 import {
     appendArrayBuffer,
@@ -296,7 +297,7 @@ export async function parseEncryptedMessage (stanza, attrs) {
 export function onChatBoxesInitialized () {
     _converse.chatboxes.on('add', chatbox => {
         checkOMEMOSupported(chatbox);
-        if (chatbox.get('type') === _converse.CHATROOMS_TYPE) {
+        if (chatbox.get('type') === CHATROOMS_TYPE) {
             chatbox.occupants.on('add', o => onOccupantAdded(chatbox, o));
             chatbox.features.on('change', () => checkOMEMOSupported(chatbox));
         }
@@ -695,10 +696,10 @@ async function onOccupantAdded (chatroom, occupant) {
 
 async function checkOMEMOSupported (chatbox) {
     let supported;
-    if (chatbox.get('type') === _converse.CHATROOMS_TYPE) {
+    if (chatbox.get('type') === CHATROOMS_TYPE) {
         await api.waitUntil('OMEMOInitialized');
         supported = chatbox.features.get('nonanonymous') && chatbox.features.get('membersonly');
-    } else if (chatbox.get('type') === _converse.PRIVATE_CHAT_TYPE) {
+    } else if (chatbox.get('type') === PRIVATE_CHAT_TYPE) {
         supported = await _converse.contactHasOMEMOSupport(chatbox.get('jid'));
     }
     chatbox.set('omemo_supported', supported);
@@ -713,7 +714,7 @@ function toggleOMEMO (ev) {
     const toolbar_el = u.ancestor(ev.target, 'converse-chat-toolbar');
     if (!toolbar_el.model.get('omemo_supported')) {
         let messages;
-        if (toolbar_el.model.get('type') === _converse.CHATROOMS_TYPE) {
+        if (toolbar_el.model.get('type') === CHATROOMS_TYPE) {
             messages = [
                 __(
                     'Cannot use end-to-end encryption in this groupchat, ' +
@@ -735,7 +736,7 @@ function toggleOMEMO (ev) {
 
 export function getOMEMOToolbarButton (toolbar_el, buttons) {
     const model = toolbar_el.model;
-    const is_muc = model.get('type') === _converse.CHATROOMS_TYPE;
+    const is_muc = model.get('type') === CHATROOMS_TYPE;
     let title;
     if (model.get('omemo_supported')) {
         const i18n_plaintext = __('Messages are being sent in plaintext');
@@ -777,10 +778,10 @@ export function getOMEMOToolbarButton (toolbar_el, buttons) {
 async function getBundlesAndBuildSessions (chatbox) {
     const no_devices_err = __('Sorry, no devices found to which we can send an OMEMO encrypted message.');
     let devices;
-    if (chatbox.get('type') === _converse.CHATROOMS_TYPE) {
+    if (chatbox.get('type') === CHATROOMS_TYPE) {
         const collections = await Promise.all(chatbox.occupants.map(o => getDevicesForContact(o.get('jid'))));
         devices = collections.reduce((a, b) => a.concat(b.models), []);
-    } else if (chatbox.get('type') === _converse.PRIVATE_CHAT_TYPE) {
+    } else if (chatbox.get('type') === PRIVATE_CHAT_TYPE) {
         const their_devices = await getDevicesForContact(chatbox.get('jid'));
         if (their_devices.length === 0) {
             const err = new Error(no_devices_err);

+ 2 - 1
src/plugins/push/utils.js

@@ -1,4 +1,5 @@
 import { _converse, api, converse, log } from "@converse/headless";
+import { CHATROOMS_TYPE } from "@converse/headless/shared/constants";
 
 const { Strophe, $iq } = converse.env;
 
@@ -87,7 +88,7 @@ export async function enablePush (domain) {
 }
 
 export function onChatBoxAdded (model) {
-    if (model.get('type') == _converse.CHATROOMS_TYPE) {
+    if (model.get('type') == CHATROOMS_TYPE) {
         enablePush(Strophe.getDomainFromJid(model.get('jid')));
     }
 }

+ 2 - 1
src/plugins/roomslist/templates/roomslist.js

@@ -6,6 +6,7 @@ import { html } from "lit";
 import { isUniView } from '@converse/headless/utils/session.js';
 import { addBookmarkViaEvent } from 'plugins/bookmark-views/utils.js';
 import { tplRoomDomainGroupList } from 'plugins/roomslist/templates/groups.js';
+import { CHATROOMS_TYPE, CLOSED } from '@converse/headless/shared/constants.js';
 
 
 function isCurrentlyOpen (room) {
@@ -69,8 +70,8 @@ export function tplRoomItem (el, room) {
 }
 
 export default (el) => {
-    const { chatboxes, CHATROOMS_TYPE, CLOSED } = _converse;
     const group_by_domain = api.settings.get('muc_grouped_by_domain');
+    const { chatboxes } = _converse;
     const rooms = chatboxes.filter(m => m.get('type') === CHATROOMS_TYPE);
     rooms.sort((a, b) => (a.getDisplayName().toLowerCase() <= b.getDisplayName().toLowerCase() ? -1 : 1));
 

+ 3 - 2
src/shared/chat/baseview.js

@@ -1,6 +1,7 @@
 import { CustomElement } from '../components/element.js';
 import { _converse, api } from '@converse/headless';
 import { onScrolledDown } from './utils.js';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants.js';
 
 
 export default class BaseChatView extends CustomElement {
@@ -72,7 +73,7 @@ export default class BaseChatView extends CustomElement {
     }
 
     getBottomPanel () {
-        if (this.model.get('type') === _converse.CHATROOMS_TYPE) {
+        if (this.model.get('type') === CHATROOMS_TYPE) {
             return this.querySelector('converse-muc-bottom-panel');
         } else {
             return this.querySelector('converse-chat-bottom-panel');
@@ -80,7 +81,7 @@ export default class BaseChatView extends CustomElement {
     }
 
     getMessageForm () {
-        if (this.model.get('type') === _converse.CHATROOMS_TYPE) {
+        if (this.model.get('type') === CHATROOMS_TYPE) {
             return this.querySelector('converse-muc-message-form');
         } else {
             return this.querySelector('converse-message-form');

+ 2 - 1
src/shared/chat/emoji-dropdown.js

@@ -4,6 +4,7 @@ import { _converse, api, converse } from "@converse/headless";
 import { html } from "lit";
 import { initStorage } from '@converse/headless/utils/storage.js';
 import { until } from 'lit/directives/until.js';
+import { CHATROOMS_TYPE } from "@converse/headless/shared/constants.js";
 
 const u = converse.env.utils;
 
@@ -38,7 +39,7 @@ export default class EmojiDropdown extends DropdownBase {
     }
 
     render() {
-        const is_groupchat = this.chatview.model.get('type') === _converse.CHATROOMS_TYPE;
+        const is_groupchat = this.chatview.model.get('type') === CHATROOMS_TYPE;
         const color = is_groupchat ? '--muc-toolbar-btn-color' : '--chat-toolbar-btn-color';
         return html`
             <div class="dropup">

+ 2 - 1
src/shared/chat/message-actions.js

@@ -3,6 +3,7 @@ import { __ } from 'i18n';
 import { _converse, api, converse, log } from '@converse/headless';
 import { getAppSettings } from '@converse/headless/shared/settings/utils.js';
 import { getMediaURLs } from '@converse/headless/shared/chat/utils.js';
+import { CHATROOMS_TYPE } from '@converse/headless/shared/constants';
 import { html } from 'lit';
 import { isMediaURLDomainAllowed, isDomainWhitelisted } from '@converse/headless/utils/url.js';
 import { until } from 'lit/directives/until.js';
@@ -166,7 +167,7 @@ class MessageActions extends CustomElement {
     onMessageRetractButtonClicked (ev) {
         ev?.preventDefault?.();
         const chatbox = this.model.collection.chatbox;
-        if (chatbox.get('type') === _converse.CHATROOMS_TYPE) {
+        if (chatbox.get('type') === CHATROOMS_TYPE) {
             this.onMUCMessageRetractButtonClicked();
         } else {
             this.onDirectMessageRetractButtonClicked();