Prechádzať zdrojové kódy

Simplified by setting height via template, not JS

Also dropped the minimum height restriction
JC Brand 11 rokov pred
rodič
commit
4f2125c20e

+ 45 - 38
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();

+ 3 - 2
src/templates/chatbox.html

@@ -1,5 +1,6 @@
-<div class="box-flyout {[ if (minimized) { ]} minimized {[ } ]}">
-    <div class="dragresize dragresize-tm"></div>
+<div class="box-flyout {[if (minimized) {]} minimized {[}]}"
+    {[if (!minimized) {]} style="height: {{height}}px" {[}]}>
+    <div class="dragresize dragresize-tm" {[ if (minimized) { ]} style="display:none" {[ } ]}></div>
     <div class="chat-head chat-head-chatbox">
         <a class="close-chatbox-button icon-close"></a>
         <a class="toggle-chatbox-button

+ 10 - 4
src/templates/chatroom.html

@@ -1,11 +1,17 @@
-<div class="box-flyout">
-    <div class="dragresize dragresize-tm"></div>
+<div class="box-flyout {[if (minimized) {]} minimized {[}]}"
+    {[if (!minimized) {]} style="height: {{height}}px" {[}]}>
+    <div class="dragresize dragresize-tm" {[ if (minimized) { ]} style="display:none" {[ } ]}></div>
     <div class="chat-head chat-head-chatroom">
         <a class="close-chatbox-button icon-close"></a>
-        <a class="toggle-chatbox-button icon-minus"></a>
+        <a class="toggle-chatbox-button
+                  {[ if (minimized) { ]} icon-plus {[ } ]}
+                  {[ if (!minimized) { ]} icon-minus {[ } ]}
+                 "></a>
         <a class="configure-chatroom-button icon-wrench" style="display:none"></a>
         <div class="chat-title"> {{ name }} </div>
         <p class="chatroom-topic"><p/>
     </div>
-    <div class="chat-body"><span class="spinner centered"/></div>
+    <div class="chat-body" {[ if (minimized) { ]} style="display:none" {[ } ]}>
+        <span class="spinner centered"/>
+    </div>
 </div>

+ 1 - 1
src/templates/controlbox.html

@@ -1,4 +1,4 @@
-<div class="box-flyout">
+<div class="box-flyout" style="height: {{height}}px">
     <div class="dragresize dragresize-tm"></div>
     <div class="chat-head controlbox-head">
         <ul id="controlbox-tabs"></ul>