diff --git a/converse.js b/converse.js index e5d580381..de4ab6c5d 100644 --- a/converse.js +++ b/converse.js @@ -1269,8 +1269,9 @@ ) ) ); + this.$content = this.$el.find('.chat-content'); this.renderToolbar().renderAvatar(); - this.$el.find('.chat-content').on('scroll', _.debounce(this.onScroll.bind(this), 100)); + this.$content.on('scroll', _.debounce(this.onScroll.bind(this), 100)); converse.emit('chatBoxOpened', this); setTimeout(converse.refreshWebkit, 50); return this.showStatusMessage(); @@ -1281,7 +1282,7 @@ if ($(ev.target).scrollTop() === 0) { oldest = this.model.messages.where({'time': this.model.messages.pluck('time').sort()[0]}); if (oldest) { - this.$el.find('.chat-content').prepend(''); + this.$content.prepend(''); this.fetchArchivedMessages({ 'before': oldest[0].get('archive_id'), 'with': this.model.get('jid'), @@ -1368,11 +1369,10 @@ }, showStatusNotification: function (message, keep_old) { - var $chat_content = this.$el.find('.chat-content'); if (!keep_old) { - $chat_content.find('div.chat-event').remove(); + this.$content.find('div.chat-event').remove(); } - $chat_content.append($('
').text(message)); + this.$content.append($('
').text(message)); this.scrollDown(); }, @@ -1380,27 +1380,25 @@ if (typeof ev !== "undefined") { ev.stopPropagation(); } var result = confirm(__("Are you sure you want to clear the messages from this room?")); if (result === true) { - this.$el.find('.chat-content').empty(); + this.$content.empty(); } return this; }, clearSpinner: function () { - var $content = this.$el.find('.chat-content'); - if ($content.children(':first').is('span.spinner')) { - $content.children(':first').first().remove(); + if (this.$content.children(':first').is('span.spinner')) { + this.$content.children(':first').first().remove(); } }, showMessage: function (msg_dict) { - var $content = this.$el.find('.chat-content'), - msg_time = moment(msg_dict.time) || moment, + var msg_time = moment(msg_dict.time) || moment, text = msg_dict.message, match = text.match(/^\/(.*?)(?: (.*))?$/), fullname = this.model.get('fullname') || msg_dict.fullname, extra_classes = msg_dict.delayed && 'delayed' || '', num_messages = this.model.messages.length, - has_scrollbar = $content.get(0).scrollHeight > $content[0].clientHeight, + has_scrollbar = this.$content.get(0).scrollHeight > this.$content[0].clientHeight, template, username, insertMessage; // FIXME: A better approach here is probably to look at what is @@ -1412,12 +1410,12 @@ insertMessage = _.compose( this.scrollDownMessageHeight.bind(this), function ($el) { - $content.prepend($el); + this.$content.prepend($el); return $el; - } + }.bind(this) ); } else { - insertMessage = _.compose(_.debounce(this.scrollDown.bind(this), 50), $content.append.bind($content)); + insertMessage = _.compose(_.debounce(this.scrollDown.bind(this), 50), this.$content.append.bind(this.$content)); } if ((match) && (match[1] === 'me')) { text = text.replace(/^\/me/, ''); @@ -1427,7 +1425,7 @@ template = converse.templates.message; username = msg_dict.sender === 'me' && __('me') || fullname; } - $content.find('div.chat-event').remove(); + this.$content.find('div.chat-event').remove(); if (this.is_chatroom && msg_dict.sender == 'them' && (new RegExp("\\b"+this.model.get('nick')+"\\b")).test(text)) { // Add special class to mark groupchat messages in which we @@ -1450,15 +1448,14 @@ }, showHelpMessages: function (msgs, type, spinner) { - var $chat_content = this.$el.find('.chat-content'), i, - msgs_length = msgs.length; + var i, msgs_length = msgs.length; for (i=0; i'+msgs[i]+'')); + this.$content.append($('
'+msgs[i]+'
')); } if (spinner === true) { - $chat_content.append(''); + this.$content.append(''); } else if (spinner === false) { - $chat_content.find('span.spinner').remove(); + this.$content.find('span.spinner').remove(); } return this.scrollDown(); }, @@ -1476,7 +1473,7 @@ prev_date = moment(previous_message.get('time')); if (prev_date.isBefore(time, 'day')) { this_date = moment(time); - this.$el.find('.chat-content').append(converse.templates.new_day({ + this.$content.append(converse.templates.new_day({ isodate: this_date.format("YYYY-MM-DD"), datestring: this_date.format("dddd MMM Do YYYY") })); @@ -1490,7 +1487,7 @@ this.showStatusNotification(message.get('fullname')+' '+__('has stopped typing')); return; } else if (_.contains([INACTIVE, ACTIVE], message.get('chat_state'))) { - this.$el.find('.chat-content div.chat-event').remove(); + this.$content.find('div.chat-event').remove(); return; } else if (message.get('chat_state') === GONE) { this.showStatusNotification(message.get('fullname')+' '+__('has gone away')); @@ -1673,7 +1670,7 @@ if (ev && ev.preventDefault) { ev.preventDefault(); } var result = confirm(__("Are you sure you want to clear the messages from this chat box?")); if (result === true) { - this.$el.find('.chat-content').empty(); + this.$content.empty(); this.model.messages.reset(); this.model.messages.browserStorage._clear(); } @@ -1985,17 +1982,15 @@ }, scrollDownMessageHeight: function ($message) { - var $content = this.$('.chat-content'); - if ($content.is(':visible')) { - $content.scrollTop($content.scrollTop() + $message[0].scrollHeight); + if (this.$content.is(':visible')) { + this.$content.scrollTop(this.$content.scrollTop() + $message[0].scrollHeight); } return this; }, scrollDown: function () { - var $content = this.$('.chat-content'); - if ($content.is(':visible')) { - $content.scrollTop($content[0].scrollHeight); + if (this.$content.is(':visible')) { + this.$content.scrollTop(this.$content[0].scrollHeight); } return this; } @@ -2749,6 +2744,7 @@ })) .append(this.occupantsview.render().$el); this.renderToolbar(); + this.$content = this.$el.find('.chat-content'); } // XXX: This is a bit of a hack, to make sure that the // sidebar's state is remembered. @@ -2767,16 +2763,12 @@ this.model.save({hidden_occupants: true}); $el.removeClass('icon-hide-users').addClass('icon-show-users'); this.$('form.sendXMPPMessage, .chat-area').animate({width: '100%'}); - this.$('div.participants').animate({width: 0}, function () { - this.scrollDown(); - }.bind(this)); + this.$('div.participants').animate({width: 0}, this.scrollDown.bind(this)); } else { this.model.save({hidden_occupants: false}); $el.removeClass('icon-show-users').addClass('icon-hide-users'); this.$('.chat-area, form.sendXMPPMessage').css({width: ''}); - this.$('div.participants').show().animate({width: 'auto'}, function () { - this.scrollDown(); - }.bind(this)); + this.$('div.participants').show().animate({width: 'auto'}, this.scrollDown.bind(this)); } }, @@ -3213,8 +3205,7 @@ * Allow user to configure chat room if they are the owner. * See: http://xmpp.org/registrar/mucstatus.html */ - var $chat_content, - disconnect_msgs = [], + var disconnect_msgs = [], msgs = [], reasons = []; $el.find('x[xmlns="'+Strophe.NS.MUC_USER+'"]').each(function (idx, x) { @@ -3258,9 +3249,8 @@ this.model.set('connection_status', Strophe.Status.DISCONNECTED); return; } - $chat_content = this.$el.find('.chat-content'); for (i=0; i