From d20ca106389802e5f91a5400d041cd433180187f Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 4 Mar 2014 15:09:16 +0200 Subject: [PATCH] Add closured get/set methods for views from chatboxesview --- converse.js | 16 +++++++++------- spec/chatbox.js | 22 +++++++++++----------- spec/chatroom.js | 34 +++++++++++++++++----------------- spec/controlbox.js | 8 ++++---- tests/utils.js | 16 ++++++++-------- 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/converse.js b/converse.js index e0a58eb28..f48f44baa 100644 --- a/converse.js +++ b/converse.js @@ -348,7 +348,7 @@ }; this.showLoginButton = function () { - var view = converse.chatboxesview.views.controlbox; + var view = converse.chatboxesview.get('controlbox'); if (typeof view.loginpanel !== 'undefined') { view.loginpanel.showLoginButton(); } @@ -1759,7 +1759,7 @@ 'box_id' : hex_sha1(jid) }); if (!chatroom.get('connected')) { - converse.chatboxesview.views[jid].connect(null); + converse.chatboxesview.get(jid).connect(null); } } }); @@ -2351,7 +2351,7 @@ onChatRoomRoster: function (roster, room) { this.renderChatArea(); - var controlboxview = converse.chatboxesview.views.controlbox, + var controlboxview = converse.chatboxesview.get('controlbox'), roster_size = _.size(roster), $participant_list = this.$el.find('.participant-list'), participants = [], keys = _.keys(roster), i; @@ -2466,10 +2466,12 @@ el: '#conversejs', initialize: function () { - // boxesviewinit - this.views = {}; + var views = {}; + this.get = function (id) { return views[id]; }; + this.set = function (id, view) { views[id] = view; }; + this.model.on("add", function (item) { - var view = this.views[item.get('id')]; + var view = this.get(item.get('id')); if (!view) { if (item.get('chatroom')) { view = new converse.ChatRoomView({'model': item}); @@ -2479,7 +2481,7 @@ } else { view = new converse.ChatBoxView({model: item}); } - this.views[item.get('id')] = view; + this.set(item.get('id'), view); } else { delete view.model; // Remove ref to old model to help garbage collection view.model = item; diff --git a/spec/chatbox.js b/spec/chatbox.js index e032af005..2cd5ae389 100644 --- a/spec/chatbox.js +++ b/spec/chatbox.js @@ -79,8 +79,8 @@ it("can be closed by clicking a DOM element with class 'close-chatbox-button'", $.proxy(function () { var chatbox = utils.openChatBoxes(1)[0], - controlview = this.chatboxesview.views.controlbox, // The controlbox is currently open - chatview = this.chatboxesview.views[chatbox.get('jid')]; + controlview = this.chatboxesview.get('controlbox'), // The controlbox is currently open + chatview = this.chatboxesview.get(chatbox.get('jid')); spyOn(chatview, 'closeChat').andCallThrough(); spyOn(controlview, 'closeChat').andCallThrough(); spyOn(converse, 'emit'); @@ -141,7 +141,7 @@ var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost'; utils.openChatBoxFor(contact_jid); var chatbox = this.chatboxes.get(contact_jid); - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); expect(chatbox).toBeDefined(); expect(view).toBeDefined(); var $toolbar = view.$el.find('ul.chat-toolbar'); @@ -153,7 +153,7 @@ var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost'; utils.openChatBoxFor(contact_jid); var chatbox = this.chatboxes.get(contact_jid); - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); var $toolbar = view.$el.find('ul.chat-toolbar'); var $textarea = view.$el.find('textarea.chat-textarea'); expect($toolbar.children('li.toggle-smiley').length).toBe(1); @@ -213,7 +213,7 @@ var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost'; utils.openChatBoxFor(contact_jid); var chatbox = this.chatboxes.get(contact_jid); - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); var $toolbar = view.$el.find('ul.chat-toolbar'); expect($toolbar.children('li.toggle-otr').length).toBe(1); // Register spies @@ -239,7 +239,7 @@ var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost'; utils.openChatBoxFor(contact_jid); var chatbox = this.chatboxes.get(contact_jid); - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); var $toolbar = view.$el.find('ul.chat-toolbar'); var callButton = $toolbar.find('.toggle-call'); @@ -278,7 +278,7 @@ runs($.proxy(function () { // Check that the chatbox and its view now exist var chatbox = this.chatboxes.get(sender_jid); - var chatboxview = this.chatboxesview.views[sender_jid]; + var chatboxview = this.chatboxesview.get(sender_jid); expect(chatbox).toBeDefined(); expect(chatboxview).toBeDefined(); // Check that the message was received and check the @@ -311,7 +311,7 @@ var one_day_ago = new Date(new Date().setDate(new Date().getDate()-1)); var message = 'This is a day old message'; var chatbox = this.chatboxes.get(contact_jid); - var chatboxview = this.chatboxesview.views[contact_jid]; + var chatboxview = this.chatboxesview.get(contact_jid); var $chat_content = chatboxview.$el.find('.chat-content'); var msg_obj; var msg_txt; @@ -380,7 +380,7 @@ waits(250); runs(function () { expect(converse.emit).toHaveBeenCalledWith('onChatBoxFocused', jasmine.any(Object)); - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); var message = 'This message is sent from this chatbox'; spyOn(view, 'sendMessage').andCallThrough(); view.$el.find('.chat-textarea').text(message); @@ -396,7 +396,7 @@ it("are sanitized to prevent Javascript injection attacks", $.proxy(function () { var contact_jid = mock.cur_names[0].replace(' ','.').toLowerCase() + '@localhost'; utils.openChatBoxFor(contact_jid); - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); var message = 'This message contains markup'; spyOn(view, 'sendMessage').andCallThrough(); view.$el.find('.chat-textarea').text(message); @@ -413,7 +413,7 @@ it("'/clear' can be used to clear messages in a conversation", $.proxy(function () { spyOn(converse, 'emit'); var contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost'; - var view = this.chatboxesview.views[contact_jid]; + var view = this.chatboxesview.get(contact_jid); var message = 'This message is another sent from this chatbox'; // Lets make sure there is at least one message already // (e.g for when this test is run on its own). diff --git a/spec/chatroom.js b/spec/chatroom.js index 14668bef0..91c509b0a 100644 --- a/spec/chatroom.js +++ b/spec/chatroom.js @@ -24,7 +24,7 @@ waits(300); runs(function () { // Open a new chatroom - var roomspanel = converse.chatboxesview.views.controlbox.roomspanel; + var roomspanel = converse.chatboxesview.get('controlbox').roomspanel; var $input = roomspanel.$el.find('input.new-chatroom-name'); var $nick = roomspanel.$el.find('input.new-chatroom-nick'); var $server = roomspanel.$el.find('input.new-chatroom-server'); @@ -42,7 +42,7 @@ }); it("shows users currently present in the room", $.proxy(function () { - var chatroomview = this.chatboxesview.views['lounge@muc.localhost'], + var chatroomview = this.chatboxesview.get('lounge@muc.localhost'), $participant_list; var roster = {}, room = {}, i; for (i=0; i-1; i--) { chatbox = converse.chatboxes.models[i]; - converse.chatboxesview.views[chatbox.get('id')].closeChat(); + converse.chatboxesview.get(chatbox.get('id')).closeChat(); } return this; }; @@ -22,11 +22,11 @@ var i, chatbox, num_chatboxes = converse.chatboxes.models.length; for (i=num_chatboxes-1; i>-1; i--) { chatbox = converse.chatboxes.models[i]; - converse.chatboxesview.views[chatbox.get('id')].closeChat(); - converse.chatboxesview.views[chatbox.get('id')].$el.remove(); + converse.chatboxesview.get(chatbox.get('id')).closeChat(); + converse.chatboxesview.get(chatbox.get('id')).$el.remove(); } - converse.chatboxesview.views.controlbox.closeChat(); - converse.chatboxesview.views.controlbox.$el.remove(); + converse.chatboxesview.get('controlbox').closeChat(); + converse.chatboxesview.get('controlbox').$el.remove(); return this; }; @@ -66,13 +66,13 @@ }; utils.openContactsPanel = function () { - var cbview = converse.chatboxesview.views.controlbox; + var cbview = converse.chatboxesview.get('controlbox'); var $tabs = cbview.$el.find('#controlbox-tabs'); $tabs.find('li').first().find('a').click(); }; utils.openRoomsPanel = function () { - var cbview = converse.chatboxesview.views.controlbox; + var cbview = converse.chatboxesview.get('controlbox'); var $tabs = cbview.$el.find('#controlbox-tabs'); $tabs.find('li').last().find('a').click(); }; @@ -91,7 +91,7 @@ }; utils.clearChatBoxMessages = function (jid) { - var view = converse.chatboxesview.views[jid]; + var view = converse.chatboxesview.get(jid); view.$el.find('.chat-content').empty(); view.model.messages.reset().localStorage._clear(); };