Commit f72ace50 authored by JC Brand's avatar JC Brand

Replace the onChatBoxAdded override with event handlers

parent 934e8653
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
list = controlbox.el.querySelector('div.rooms-list-container'); list = controlbox.el.querySelector('div.rooms-list-container');
expect(_.includes(list.classList, 'hidden')).toBeTruthy(); expect(_.includes(list.classList, 'hidden')).toBeTruthy();
done(); done();
}); }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
} }
)); ));
}); });
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
item = room_els[0]; item = room_els[0];
expect(item.textContent.trim()).toBe('balcony@chat.shakespeare.lit'); expect(item.textContent.trim()).toBe('balcony@chat.shakespeare.lit');
done(); done();
}); }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
})); }));
it("has an info icon which opens a details modal when clicked", mock.initConverseWithPromises( it("has an info icon which opens a details modal when clicked", mock.initConverseWithPromises(
......
...@@ -244,7 +244,7 @@ ...@@ -244,7 +244,7 @@
'bookmarked': false, 'bookmarked': false,
'chat_state': undefined, 'chat_state': undefined,
'num_unread': 0, 'num_unread': 0,
'type': 'chatbox', 'type': _converse.PRIVATE_CHAT_TYPE,
'message_type': 'chat', 'message_type': 'chat',
'url': '', 'url': '',
'hidden': _.includes(['mobile', 'fullscreen'], _converse.view_mode) 'hidden': _.includes(['mobile', 'fullscreen'], _converse.view_mode)
...@@ -807,7 +807,6 @@ ...@@ -807,7 +807,6 @@
}, },
initialize () { initialize () {
this.model.on("add", this.onChatBoxAdded, this);
this.model.on("destroy", this.removeChat, this); this.model.on("destroy", this.removeChat, this);
this.el.classList.add(`converse-${_converse.view_mode}`); this.el.classList.add(`converse-${_converse.view_mode}`);
this.render(); this.render();
...@@ -830,13 +829,6 @@ ...@@ -830,13 +829,6 @@
this.row_el.insertAdjacentElement('afterBegin', el); this.row_el.insertAdjacentElement('afterBegin', el);
}, },
onChatBoxAdded (item) {
// Views aren't created here, since the core code doesn't
// contain any views. Instead, they're created in overrides in
// plugins, such as in converse-chatview.js and converse-muc.js
return this.get(item.get('id'));
},
removeChat (item) { removeChat (item) {
this.remove(item.get('id')); this.remove(item.get('id'));
}, },
...@@ -1031,7 +1023,7 @@ ...@@ -1031,7 +1023,7 @@
_converse.chatboxes.each(function (chatbox) { _converse.chatboxes.each(function (chatbox) {
// FIXME: Leaky abstraction from MUC. We need to add a // FIXME: Leaky abstraction from MUC. We need to add a
// base type for chat boxes, and check for that. // base type for chat boxes, and check for that.
if (chatbox.get('type') !== 'chatroom') { if (chatbox.get('type') !== _converse.CHATROOMS_TYPE) {
result.push(chatbox); result.push(chatbox);
} }
}); });
......
...@@ -64,27 +64,6 @@ ...@@ -64,27 +64,6 @@
*/ */
dependencies: ["converse-chatboxes", "converse-disco", "converse-message-view", "converse-modal"], dependencies: ["converse-chatboxes", "converse-disco", "converse-message-view", "converse-modal"],
overrides: {
// Overrides mentioned here will be picked up by converse.js's
// plugin architecture they will replace existing methods on the
// relevant objects or classes.
//
// New functions which don't exist yet can also be added.
//
ChatBoxViews: {
onChatBoxAdded (item) {
const { _converse } = this.__super__;
let view = this.get(item.get('id'));
if (!view) {
view = new _converse.ChatBoxView({model: item});
this.add(item.get('id'), view);
return view;
} else {
return this.__super__.onChatBoxAdded.apply(this, arguments);
}
}
}
},
initialize () { initialize () {
/* The initialize function gets called as soon as the plugin is /* The initialize function gets called as soon as the plugin is
...@@ -1280,6 +1259,15 @@ ...@@ -1280,6 +1259,15 @@
} }
}); });
_converse.on('chatBoxesInitialized', () => {
const that = _converse.chatboxviews;
_converse.chatboxes.on('add', item => {
if (!that.get(item.get('id')) && item.get('type') === _converse.PRIVATE_CHAT_TYPE) {
that.add(item.get('id'), new _converse.ChatBoxView({model: item}));
}
});
});
_converse.on('connected', () => { _converse.on('connected', () => {
// Advertise that we support XEP-0382 Message Spoilers // Advertise that we support XEP-0382 Message Spoilers
_converse.api.disco.own.features.add(Strophe.NS.SPOILER); _converse.api.disco.own.features.add(Strophe.NS.SPOILER);
......
...@@ -112,23 +112,6 @@ ...@@ -112,23 +112,6 @@
}, },
ChatBoxViews: { ChatBoxViews: {
onChatBoxAdded (item) {
const { _converse } = this.__super__;
if (item.get('box_id') === 'controlbox') {
let view = this.get(item.get('id'));
if (view) {
view.model = item;
view.initialize();
return view;
} else {
view = new _converse.ControlBoxView({model: item});
return this.add(item.get('id'), view);
}
} else {
return this.__super__.onChatBoxAdded.apply(this, arguments);
}
},
closeAllChatBoxes () { closeAllChatBoxes () {
const { _converse } = this.__super__; const { _converse } = this.__super__;
this.each(function (view) { this.each(function (view) {
...@@ -170,7 +153,6 @@ ...@@ -170,7 +153,6 @@
}, },
ChatBoxView: { ChatBoxView: {
insertIntoDOM () { insertIntoDOM () {
const view = this.__super__._converse.chatboxviews.get("controlbox"); const view = this.__super__._converse.chatboxviews.get("controlbox");
if (view) { if (view) {
...@@ -200,13 +182,14 @@ ...@@ -200,13 +182,14 @@
_converse.api.promises.add('controlboxInitialized'); _converse.api.promises.add('controlboxInitialized');
_converse.addControlBox = () => _converse.addControlBox = () => {
_converse.chatboxes.add({ return _converse.chatboxes.add({
id: 'controlbox', 'id': 'controlbox',
box_id: 'controlbox', 'box_id': 'controlbox',
type: 'controlbox', 'type': _converse.CONTROLBOX_TYPE,
closed: !_converse.show_controlbox_by_default 'closed': !_converse.show_controlbox_by_default
}) })
}
_converse.ControlBoxView = _converse.ChatBoxView.extend({ _converse.ControlBoxView = _converse.ChatBoxView.extend({
...@@ -584,6 +567,21 @@ ...@@ -584,6 +567,21 @@
} }
}); });
_converse.on('chatBoxesInitialized', () => {
const that = _converse.chatboxviews;
_converse.chatboxes.on('add', item => {
if (item.get('type') === _converse.CONTROLBOX_TYPE) {
const view = that.get(item.get('id'));
if (view) {
view.model = item;
view.initialize();
} else {
that.add(item.get('id'), new _converse.ControlBoxView({model: item}));
}
}
});
});
_converse.on('clearSession', () => { _converse.on('clearSession', () => {
if (_converse.config.get('trusted')) { if (_converse.config.get('trusted')) {
const chatboxes = _.get(_converse, 'chatboxes', null); const chatboxes = _.get(_converse, 'chatboxes', null);
......
...@@ -186,6 +186,14 @@ ...@@ -186,6 +186,14 @@
_converse.PAUSED = 'paused'; _converse.PAUSED = 'paused';
_converse.GONE = 'gone'; _converse.GONE = 'gone';
// Chat types
_converse.PRIVATE_CHAT_TYPE = 'chatbox';
_converse.CHATROOMS_TYPE = 'chatroom';
_converse.HEADLINES_TYPE = 'headline';
_converse.CONTROLBOX_TYPE = 'controlbox';
// Default configuration values // Default configuration values
// ---------------------------- // ----------------------------
_converse.default_settings = { _converse.default_settings = {
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
}(this, function (converse, tpl_chatbox) { }(this, function (converse, tpl_chatbox) {
"use strict"; "use strict";
const { _, utils } = converse.env; const { _, utils } = converse.env;
const HEADLINES_TYPE = 'headline';
converse.plugins.add('converse-headline', { converse.plugins.add('converse-headline', {
/* Plugin dependencies are other plugins which might be /* Plugin dependencies are other plugins which might be
...@@ -40,26 +39,12 @@ ...@@ -40,26 +39,12 @@
ChatBoxes: { ChatBoxes: {
model (attrs, options) { model (attrs, options) {
const { _converse } = this.__super__; const { _converse } = this.__super__;
if (attrs.type == HEADLINES_TYPE) { if (attrs.type == _converse.HEADLINES_TYPE) {
return new _converse.HeadlinesBox(attrs, options); return new _converse.HeadlinesBox(attrs, options);
} else { } else {
return this.__super__.model.apply(this, arguments); return this.__super__.model.apply(this, arguments);
} }
}, },
},
ChatBoxViews: {
onChatBoxAdded (item) {
const { _converse } = this.__super__;
let view = this.get(item.get('id'));
if (!view && item.get('type') === 'headline') {
view = new _converse.HeadlinesBoxView({model: item});
this.add(item.get('id'), view);
return view;
} else {
return this.__super__.onChatBoxAdded.apply(this, arguments);
}
}
} }
}, },
...@@ -73,7 +58,7 @@ ...@@ -73,7 +58,7 @@
_converse.HeadlinesBox = _converse.ChatBox.extend({ _converse.HeadlinesBox = _converse.ChatBox.extend({
defaults: { defaults: {
'type': 'headline', 'type': _converse.HEADLINES_TYPE,
'bookmarked': false, 'bookmarked': false,
'chat_state': undefined, 'chat_state': undefined,
'num_unread': 0, 'num_unread': 0,
...@@ -135,7 +120,7 @@ ...@@ -135,7 +120,7 @@
const chatbox = _converse.chatboxes.create({ const chatbox = _converse.chatboxes.create({
'id': from_jid, 'id': from_jid,
'jid': from_jid, 'jid': from_jid,
'type': 'headline', 'type': _converse.HEADLINES_TYPE,
'from': from_jid 'from': from_jid
}); });
chatbox.createMessage(message, message); chatbox.createMessage(message, message);
...@@ -149,6 +134,16 @@ ...@@ -149,6 +134,16 @@
} }
_converse.on('connected', registerHeadlineHandler); _converse.on('connected', registerHeadlineHandler);
_converse.on('reconnected', registerHeadlineHandler); _converse.on('reconnected', registerHeadlineHandler);
_converse.on('chatBoxesInitialized', () => {
const that = _converse.chatboxviews;
_converse.chatboxes.on('add', item => {
if (!that.get(item.get('id')) && item.get('type') === _converse.HEADLINES_TYPE) {
that.add(item.get('id'), new _converse.HeadlinesBoxView({model: item}));
}
});
});
} }
}); });
})); }));
...@@ -125,19 +125,6 @@ ...@@ -125,19 +125,6 @@
this.renderRoomsPanel(); this.renderRoomsPanel();
} }
}, },
},
ChatBoxViews: {
onChatBoxAdded (item) {
const { _converse } = this.__super__;
let view = this.get(item.get('id'));
if (!view && item.get('type') === converse.CHATROOMS_TYPE) {
view = new _converse.ChatRoomView({'model': item});
return this.add(item.get('id'), view);
} else {
return this.__super__.onChatBoxAdded.apply(this, arguments);
}
}
} }
}, },
...@@ -1957,6 +1944,16 @@ ...@@ -1957,6 +1944,16 @@
} }
/************************ BEGIN Event Handlers ************************/ /************************ BEGIN Event Handlers ************************/
_converse.on('chatBoxesInitialized', () => {
const that = _converse.chatboxviews;
_converse.chatboxes.on('add', item => {
if (!that.get(item.get('id')) && item.get('type') === _converse.CHATROOMS_TYPE) {
return that.add(item.get('id'), new _converse.ChatRoomView({'model': item}));
}
});
});
_converse.on('controlboxInitialized', (view) => { _converse.on('controlboxInitialized', (view) => {
if (!_converse.allow_muc) { if (!_converse.allow_muc) {
return; return;
...@@ -1970,7 +1967,7 @@ ...@@ -1970,7 +1967,7 @@
* all the open groupchats. * all the open groupchats.
*/ */
_converse.chatboxviews.each(function (view) { _converse.chatboxviews.each(function (view) {
if (view.model.get('type') === converse.CHATROOMS_TYPE) { if (view.model.get('type') === _converse.CHATROOMS_TYPE) {
view.model.save('connection_status', converse.ROOMSTATUS.DISCONNECTED); view.model.save('connection_status', converse.ROOMSTATUS.DISCONNECTED);
view.model.registerHandlers(); view.model.registerHandlers();
view.populateAndJoin(); view.populateAndJoin();
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
Strophe.addNamespace('MUC_USER', Strophe.NS.MUC + "#user"); Strophe.addNamespace('MUC_USER', Strophe.NS.MUC + "#user");
converse.MUC_NICK_CHANGED_CODE = "303"; converse.MUC_NICK_CHANGED_CODE = "303";
converse.CHATROOMS_TYPE = 'chatroom';
converse.ROOM_FEATURES = [ converse.ROOM_FEATURES = [
'passwordprotected', 'unsecured', 'hidden', 'passwordprotected', 'unsecured', 'hidden',
...@@ -77,7 +76,9 @@ ...@@ -77,7 +76,9 @@
// New functions which don't exist yet can also be added. // New functions which don't exist yet can also be added.
tearDown () { tearDown () {
const groupchats = this.chatboxes.where({'type': converse.CHATROOMS_TYPE}); const { _converse } = this.__super__,
groupchats = this.chatboxes.where({'type': _converse.CHATROOMS_TYPE});
_.each(groupchats, function (groupchat) { _.each(groupchats, function (groupchat) {
u.safeSave(groupchat, {'connection_status': converse.ROOMSTATUS.DISCONNECTED}); u.safeSave(groupchat, {'connection_status': converse.ROOMSTATUS.DISCONNECTED});
}); });
...@@ -87,7 +88,7 @@ ...@@ -87,7 +88,7 @@
ChatBoxes: { ChatBoxes: {
model (attrs, options) { model (attrs, options) {
const { _converse } = this.__super__; const { _converse } = this.__super__;
if (attrs.type == converse.CHATROOMS_TYPE) { if (attrs.type == _converse.CHATROOMS_TYPE) {
return new _converse.ChatRoom(attrs, options); return new _converse.ChatRoom(attrs, options);
} else { } else {
return this.__super__.model.apply(this, arguments); return this.__super__.model.apply(this, arguments);
...@@ -143,7 +144,7 @@ ...@@ -143,7 +144,7 @@
* are correct, for example that the "type" is set to * are correct, for example that the "type" is set to
* "chatroom". * "chatroom".
*/ */
settings.type = converse.CHATROOMS_TYPE; settings.type = _converse.CHATROOMS_TYPE;
settings.id = jid; settings.id = jid;
settings.box_id = b64_sha1(jid) settings.box_id = b64_sha1(jid)
const chatbox = _converse.chatboxes.getChatBox(jid, settings, true); const chatbox = _converse.chatboxes.getChatBox(jid, settings, true);
...@@ -175,7 +176,7 @@ ...@@ -175,7 +176,7 @@
'description': '', 'description': '',
'features_fetched': false, 'features_fetched': false,
'roomconfig': {}, 'roomconfig': {},
'type': converse.CHATROOMS_TYPE, 'type': _converse.CHATROOMS_TYPE,
'message_type': 'groupchat' 'message_type': 'groupchat'
} }
); );
...@@ -1213,7 +1214,7 @@ ...@@ -1213,7 +1214,7 @@
const getChatRoom = function (jid, attrs, create) { const getChatRoom = function (jid, attrs, create) {
jid = jid.toLowerCase(); jid = jid.toLowerCase();
attrs.type = converse.CHATROOMS_TYPE; attrs.type = _converse.CHATROOMS_TYPE;
attrs.id = jid; attrs.id = jid;
attrs.box_id = b64_sha1(jid) attrs.box_id = b64_sha1(jid)
return _converse.chatboxes.getChatBox(jid, attrs, create); return _converse.chatboxes.getChatBox(jid, attrs, create);
...@@ -1252,7 +1253,7 @@ ...@@ -1252,7 +1253,7 @@
* when fetched from session storage. * when fetched from session storage.
*/ */
_converse.chatboxes.each(function (model) { _converse.chatboxes.each(function (model) {
if (model.get('type') === converse.CHATROOMS_TYPE) { if (model.get('type') === _converse.CHATROOMS_TYPE) {
model.save('connection_status', converse.ROOMSTATUS.DISCONNECTED); model.save('connection_status', converse.ROOMSTATUS.DISCONNECTED);
} }
}); });
...@@ -1351,7 +1352,7 @@ ...@@ -1351,7 +1352,7 @@
if (_.isUndefined(jids)) { if (_.isUndefined(jids)) {
const result = []; const result = [];
_converse.chatboxes.each(function (chatbox) { _converse.chatboxes.each(function (chatbox) {
if (chatbox.get('type') === converse.CHATROOMS_TYPE) { if (chatbox.get('type') === _converse.CHATROOMS_TYPE) {
result.push(chatbox); result.push(chatbox);
} }
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment