diff --git a/converse.js b/converse.js
index 380fea9ae..7d0d2f799 100644
--- a/converse.js
+++ b/converse.js
@@ -511,11 +511,16 @@
$(document).on('mousemove', $.proxy(function (ev) {
if (!this.resized_chatbox || !this.allow_dragresize) { return true; }
ev.preventDefault();
- this.resized_chatbox.resizeChatbox(ev);
+ this.resized_chatbox.resizeChatBox(ev);
}, this));
$(document).on('mouseup', $.proxy(function (ev) {
if (!this.resized_chatbox || !this.allow_dragresize) { return true; }
+ if (this.connection) {
+ this.resized_chatbox.model.save({'height': this.resized_chatbox.height});
+ } else {
+ this.resized_chatbox.model.set({'height': this.resized_chatbox.height});
+ }
this.resized_chatbox = null;
}, this));
@@ -553,7 +558,6 @@
this.initRoster();
this.chatboxes.onConnected();
this.connection.roster.get(function () {});
- this.registerGlobalEventHandlers();
this.giveFeedback(__('Online Contacts'));
if (this.callback) {
@@ -867,22 +871,30 @@
this.updateVCard();
this.$el.appendTo(converse.chatboxesview.$el);
this.render().show().focus().model.messages.fetch({add: true});
-
if (this.model.get('status')) {
this.showStatusMessage(this.model.get('status'));
}
-
- // Drag to resize values
- this.height = this.$el.children('.box-flyout').height();
- this.min_height = 150;
- this.original_height = this.height;
- this.prev_pageY = 0; // To store last known mouse position
-
+ this.initDragResize();
if ((_.contains([UNVERIFIED, VERIFIED], this.model.get('otr_status'))) || converse.use_otr_by_default) {
this.model.initiateOTR();
}
},
+ initDragResize: function () {
+ this.min_height = 150;
+ this.prev_pageY = 0; // To store last known mouse position
+ this.original_height = this.$el.children('.box-flyout').height();
+ if (converse.connection) {
+ this.height = this.model.get('height');
+ if (this.height) {
+ this.setChatBoxHeight(this.height);
+ } else {
+ this.height = this.original_height;
+ this.model.save({'height': this.height});
+ }
+ }
+ },
+
render: function () {
this.$el.attr('id', this.model.get('box_id'))
.html(
@@ -1112,7 +1124,11 @@
this.prev_pageY = ev.pageY;
},
- resizeChatbox: function (ev) {
+ setChatBoxHeight: function (height) {
+ this.$el.children('.box-flyout')[0].style.height = height + 'px';
+ },
+
+ resizeChatBox: function (ev) {
var diff = ev.pageY - this.prev_pageY;
if (!diff) { return; }
if (this.height - diff < this.min_height) {
@@ -1120,12 +1136,12 @@
}
this.height -= diff;
this.prev_pageY = ev.pageY;
- if (Math.abs(this.height - this.original_height) < 7) {
+ if (Math.abs(this.height - this.original_height) < 10) {
// Add some resistance around the original height, to allow
// users to more easily return to it.
- this.$el.children('.box-flyout')[0].style.height = this.original_height + 'px';
+ this.setChatBoxHeight(this.original_height);
} else {
- this.$el.children('.box-flyout')[0].style.height = this.height + 'px';
+ this.setChatBoxHeight(this.height);
}
},
@@ -1498,7 +1514,6 @@
if (!data.length) {
$ul.append('
'+__('No users found')+'');
}
-
$(data).each(function (idx, obj) {
$ul.append(
$('')
@@ -1747,7 +1762,8 @@
id: 'controlbox',
events: {
'click a.close-chatbox-button': 'closeChat',
- 'click ul#controlbox-tabs li a': 'switchTab'
+ 'click ul#controlbox-tabs li a': 'switchTab',
+ 'mousedown .dragresize-tm': 'onDragResizeStart'
},
initialize: function () {
@@ -1778,6 +1794,28 @@
}
},
+ render: function () {
+ if ((!converse.prebind) && (!converse.connection)) {
+ // Add login panel if the user still has to authenticate
+ this.$el.html(converse.templates.controlbox(this.model.toJSON()));
+ this.loginpanel = new converse.LoginPanel({'$parent': this.$el.find('.controlbox-panes'), 'model': this});
+ this.loginpanel.render();
+ this.initDragResize();
+ } else if (!this.contactspanel) {
+ this.$el.html(converse.templates.controlbox(this.model.toJSON()));
+ this.contactspanel = new converse.ContactsPanel({'$parent': this.$el.find('.controlbox-panes')});
+ this.contactspanel.render();
+ converse.xmppstatusview = new converse.XMPPStatusView({'model': converse.xmppstatus});
+ converse.xmppstatusview.render();
+ if (converse.allow_muc) {
+ this.roomspanel = new converse.RoomsPanel({'$parent': this.$el.find('.controlbox-panes')});
+ this.roomspanel.render();
+ }
+ this.initDragResize();
+ }
+ return this;
+ },
+
hide: function (callback) {
this.$el.hide('fast', function () {
converse.emit('onChatBoxClosed', this);
@@ -1791,16 +1829,9 @@
show: function () {
converse.controlboxtoggle.hide($.proxy(function () {
- if (converse.animate) {
- this.$el.css({'opacity': 0, 'display': 'inline'}).animate({opacity: '1'}, 200, null, converse.refreshWebkit);
- } else {
- this.$el.css({'opacity': 1, 'display': 'inline'}); converse.refreshWebkit();
- }
- if (converse.connection) {
- // Without a connection, we haven't yet initialized
- // localstorage
- this.model.save();
- }
+ this.$el.show('fast', function () {
+ converse.refreshWebkit();
+ }.bind(this));
converse.emit('onControlBoxOpened', this);
}, this));
return this;
@@ -1837,26 +1868,6 @@
showHelpMessages: function (msgs) {
// Override showHelpMessages in ChatBoxView, for now do nothing.
return;
- },
-
- render: function () {
- if ((!converse.prebind) && (!converse.connection)) {
- // Add login panel if the user still has to authenticate
- this.$el.html(converse.templates.controlbox(this.model.toJSON()));
- this.loginpanel = new converse.LoginPanel({'$parent': this.$el.find('.controlbox-panes'), 'model': this});
- this.loginpanel.render();
- } else if (!this.contactspanel) {
- this.$el.html(converse.templates.controlbox(this.model.toJSON()));
- this.contactspanel = new converse.ContactsPanel({'$parent': this.$el.find('.controlbox-panes')});
- this.contactspanel.render();
- converse.xmppstatusview = new converse.XMPPStatusView({'model': converse.xmppstatus});
- converse.xmppstatusview.render();
- if (converse.allow_muc) {
- this.roomspanel = new converse.RoomsPanel({'$parent': this.$el.find('.controlbox-panes')});
- this.roomspanel.render();
- }
- }
- return this;
}
});
@@ -2380,11 +2391,10 @@
id: 'controlbox',
box_id: 'controlbox'
});
- } else {
- this.get('controlbox').save();
}
+ this.get('controlbox').fetch();
// This line below will make sure the Roster is set up
- this.get('controlbox').set({connected:true});
+ this.get('controlbox').save({connected:true});
this.registerMessageHandler();
// Get cached chatboxes from localstorage
this.fetch({
@@ -3463,6 +3473,7 @@
this.onConnected();
}
if (this.show_controlbox_by_default) { this.controlboxtoggle.showControlBox(); }
+ this.registerGlobalEventHandlers();
converse.emit('onInitialized');
};
return {