diff --git a/converse.js b/converse.js index b01d8e5b5..09cdec059 100644 --- a/converse.js +++ b/converse.js @@ -100,18 +100,17 @@ }, off: function(evt, handler) { $(this).unbind(evt, handler); - } - }; - - converse.refreshWebkit = function () { - /* This works around a webkit bug. Refresh the browser's viewport, - * otherwise chatboxes are not moved along when one is closed. - */ - if ($.browser.webkit) { - var conversejs = document.getElementById('conversejs'); - conversejs.style.display = 'none'; - conversejs.offsetHeight; // no need to store this anywhere, the reference is enough - conversejs.style.display = 'block'; + }, + refreshWebkit: function () { + /* This works around a webkit bug. Refresh the browser's viewport, + * otherwise chatboxes are not moved along when one is closed. + */ + if ($.browser.webkit) { + var conversejs = document.getElementById('conversejs'); + conversejs.style.display = 'none'; + conversejs.offsetHeight; // no need to store this anywhere, the reference is enough + conversejs.style.display = 'block'; + } } }; @@ -150,6 +149,7 @@ this.bosh_service_url = undefined; // The BOSH connection manager URL. this.cache_otr_key = false; this.debug = false; + this.default_box_height = 324; // The default height, in pixels, for the control box, chat boxes and chatrooms. this.expose_rid_and_sid = false; this.hide_muc_server = false; this.i18n = locales.en; @@ -180,6 +180,7 @@ 'cache_otr_key', 'connection', 'debug', + 'default_box_height', 'expose_rid_and_sid', 'fullname', 'hide_muc_server', @@ -432,6 +433,22 @@ return new Date(Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7])); }; + this.applyHeightResistance = function (height) { + /* This method applies some resistance/gravity around the + * "default_box_height". If "height" is close enough to + * default_box_height, then that is returned instead. + */ + if (typeof height === 'undefined') { + return converse.default_box_height; + } + var resistance = 10; + if ((height !== converse.default_box_height) && + (Math.abs(height - converse.default_box_height) < resistance)) { + return converse.default_box_height; + } + return height; + }; + this.updateMsgCounter = function () { if (this.msg_counter > 0) { if (document.title.search(/^Messages \(\d+\) /) == -1) { @@ -516,10 +533,12 @@ $(document).on('mouseup', $.proxy(function (ev) { if (!this.resized_chatbox || !this.allow_dragresize) { return true; } + ev.preventDefault(); + var height = this.applyHeightResistance(this.resized_chatbox.height); if (this.connection) { - this.resized_chatbox.model.save({'height': this.resized_chatbox.height}); + this.resized_chatbox.model.save({'height': height}); } else { - this.resized_chatbox.model.set({'height': this.resized_chatbox.height}); + this.resized_chatbox.model.set({'height': height}); } this.resized_chatbox = null; }, this)); @@ -625,6 +644,7 @@ this.ChatBox = Backbone.Model.extend({ initialize: function () { + var height; if (this.get('box_id') !== 'controlbox') { this.messages = new converse.Messages(); this.messages.localStorage = new Backbone.LocalStorage( @@ -633,7 +653,8 @@ 'user_id' : Strophe.getNodeFromJid(this.get('jid')), 'box_id' : hex_sha1(this.get('jid')), 'otr_status': this.get('otr_status') || UNENCRYPTED, - 'minimized': this.get('minimized') || false + 'minimized': this.get('minimized') || false, + 'height': converse.applyHeightResistance(this.get('height')) }); } }, @@ -900,18 +921,11 @@ }, 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}); - } } + return this; }, showStatusNotification: function (message, replace) { @@ -1127,25 +1141,16 @@ setChatBoxHeight: function (height) { if (!this.model.get('minimized')) { - this.$el.children('.box-flyout')[0].style.height = height+'px'; + this.$el.children('.box-flyout')[0].style.height = converse.applyHeightResistance(height)+'px'; } }, resizeChatBox: function (ev) { var diff = ev.pageY - this.prev_pageY; if (!diff) { return; } - if (this.height - diff < this.min_height) { - diff = this.height - this.min_height; - } this.height -= diff; this.prev_pageY = ev.pageY; - 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.setChatBoxHeight(this.original_height); - } else { - this.setChatBoxHeight(this.height); - } + this.setChatBoxHeight(this.height); }, insertEmoticon: function (ev) { @@ -1299,8 +1304,6 @@ }, toggleChatBox: function (ev) { - // TODO: Restore chat box to original resized height. - // Requires that we save the custom height. this.$el.children('.box-flyout').attr('style', ''); this.saveToggleState(); this.$el.find('div.chat-body').slideToggle('fast'); @@ -1312,6 +1315,7 @@ } // Toggle drag resize ability this.$el.find('.dragresize-tm').toggle(); + this.setChatBoxHeight(this.height); }, updateVCard: function () { @@ -1883,7 +1887,8 @@ 'click .configure-chatroom-button': 'configureChatRoom', 'click .toggle-smiley': 'toggleEmoticonMenu', 'click .toggle-smiley ul li': 'insertEmoticon', - 'keypress textarea.chat-textarea': 'keyPressed' + 'keypress textarea.chat-textarea': 'keyPressed', + 'mousedown .dragresize-tm': 'onDragResizeStart' }, is_chatroom: true, @@ -1901,6 +1906,7 @@ this); this.$el.appendTo(converse.chatboxesview.$el); this.render().show().model.messages.fetch({add: true}); + this.initDragResize(); }, render: function () { @@ -3431,7 +3437,8 @@ converse.chatboxes.add({ id: 'controlbox', box_id: 'controlbox', - visible: true + visible: true, + height: converse.default_box_height }); if (converse.connection) { converse.chatboxes.get('controlbox').save(); diff --git a/src/templates/chatbox.html b/src/templates/chatbox.html index 0b73f5c3a..0b700e4fd 100644 --- a/src/templates/chatbox.html +++ b/src/templates/chatbox.html @@ -1,5 +1,6 @@ -
-
+
+
-
+
+
- +
{{ name }}

-
+
diff --git a/src/templates/controlbox.html b/src/templates/controlbox.html index d3ed37cff..e5f2220b9 100644 --- a/src/templates/controlbox.html +++ b/src/templates/controlbox.html @@ -1,4 +1,4 @@ -
+