Author: solomax
Date: Thu Mar 30 05:13:05 2017
New Revision: 1789431

URL: http://svn.apache.org/viewvc?rev=1789431&view=rev
Log:
[OPENMEETINGS-1616] chat is fixed to add messages  to the bottom

Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/chat.css

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html?rev=1789431&r1=1789430&r2=1789431&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
 Thu Mar 30 05:13:05 2017
@@ -7,20 +7,20 @@
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
-  
+
       http://www.apache.org/licenses/LICENSE-2.0
-  
+
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-  
+
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
-       <div id="chat" class="ui-state-default">
+       <div id="chatPopup" class="ui-state-default">
                <div onclick="Chat.toggle();" class="control block clickable 
ui-widget-header ui-state-active"><div class="ui-icon ui-icon-caret-1-n 
sort-icon"></div><div class="label"><wicket:message key="244"/></div></div>
                <div wicket:id="chat"></div>
        </div>

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js?rev=1789431&r1=1789430&r2=1789431&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
 Thu Mar 30 05:13:05 2017
@@ -19,13 +19,12 @@
 var Chat = function() {
        var chatTabs
                , tabTemplate = "<li><a href='#{href}'>#{label}</a></li>"
-               , msgTemplate = "<div id='chat-msg-id-#{id}'><img 
class='profile' src='#{imgSrc}'/><span class='from' 
data-user-id='#{userId}'>#{from}</span><span class='date 
align-right'>#{sent}</span>#{msg}</div>"
+               , msgTemplate = "<div class='clear' id='chat-msg-id-#{id}'><img 
class='profile' src='#{imgSrc}'/><span class='from' 
data-user-id='#{userId}'>#{from}</span><span class='date 
align-right'>#{sent}</span>#{msg}</div>"
                , acceptTemplate = "<div class='tick om-icon align-right 
clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);chatActivity('accept',e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>"
                , infoTemplate = "<div class='user om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);showUserInfo(e.data(\"userId\"));'></div>"
                , addTemplate = "<div class='add om-icon align-right clickable' 
data-user-id='#{userId}' onclick='var 
e=$(this);addContact(e.data(\"userId\"));'></div>"
                , messageTemplate = "<div class='new-email om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);privateMessage(e.data(\"userId\"));'></div>"
                , inviteTemplate = "<div class='invite om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);inviteUser(e.data(\"userId\"));'></div>"
-               , clearBlock = "<div class='clear'></div>"
                , closeBlock = "<span class='ui-icon ui-icon-close' 
role='presentation'></span>"
                , closedHeight = "20px"
                , openedHeight = "345px"
@@ -90,7 +89,7 @@ var Chat = function() {
                        $('#chatPanel').resizable({
                                handles: "n, w"
                                , disabled: isClosed()
-                               , alsoResize: "#chat, #chat .ui-tabs 
.ui-tabs-panel.messageArea"
+                               , alsoResize: "#chatPopup, #chat .ui-tabs 
.ui-tabs-panel.messageArea"
                                , minHeight: 195
                                , minWidth: 260
                                , stop: function(event, ui) {
@@ -139,11 +138,12 @@ var Chat = function() {
                , addMessage: function(m) {
                        if ($('#chat').length > 0 && m && m.type == "chat") {
                                if (isClosed()) {
-                                       $('#chat 
.control.block').addClass('ui-state-highlight');
+                                       $('#chatPopup 
.control.block').addClass('ui-state-highlight');
                                        audio.play();
                                }
                                var msg, cm;
                                while (!!(cm = m.msg.pop())) {
+                                       var area = $('#' + cm.scope);
                                        msg = $(msgTemplate.replace(/#\{id\}/g, 
cm.id)
                                                        
.replace(/#\{userId\}/g, cm.from.id)
                                                        
.replace(/#\{imgSrc\}/g, !!cm.from.img ? cm.from.img : './profile/' + 
cm.from.id + '?anticache=' + Date.now())
@@ -160,30 +160,37 @@ var Chat = function() {
                                        if (cm.needModeration) {
                                                
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
                                        }
-                                       if (!$('#' + cm.scope).length) {
+                                       if (!area.length) {
                                                this.addTab(cm.scope, 
cm.scopeName);
                                        }
                                        if (m.mode == "accept") {
                                                $('#chat-msg-id-' + 
cm.id).remove();
                                        }
-                                       msg.append(clearBlock);
-                                       $('#' + cm.scope).prepend(msg);
+                                       var btm = area.scrollTop() + 
area.innerHeight() >= area[0].scrollHeight;
+                                       area.append(msg);
+                                       if (btm) {
+                                               area.animate({
+                                                       scrollTop: 
area[0].scrollHeight
+                                               }, 300);
+                                       }
                                }
                        }
                }
                , open: function() {
                        if (isClosed()) {
-                               $('#chat .control.block 
.ui-icon').removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
-                               $('#chat 
.control.block').removeClass('ui-state-highlight');
-                               $('#chatPanel, #chat').animate({height: 
openedHeight}, 1000);
+                               $('#chatPopup .control.block 
.ui-icon').removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
+                               $('#chatPopup 
.control.block').removeClass('ui-state-highlight');
+                               $('#chatPanel, #chatPopup').animate({height: 
openedHeight}, 1000);
                                $('#chatPanel').resizable("option", "disabled", 
false);
+                               $('#chat .messageArea').each(function(idx) {
+                                       
$(this).scrollTop($(this)[0].scrollHeight);
+                               });
                        }
                }
                , close: function() {
                        if (!isClosed()) {
-                               $('#chat .control.block 
.ui-icon').removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
-                               $('#chatPanel').animate({height: closedHeight}, 
1000);
-                               $('#chatPanel, #chat').animate({height: 
closedHeight}, 1000);
+                               $('#chatPopup .control.block 
.ui-icon').removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
+                               $('#chatPanel, #chatPopup').animate({height: 
closedHeight}, 1000);
                                $('#chatPanel').resizable("option", "disabled", 
true);
                        }
                }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css?rev=1789431&r1=1789430&r2=1789431&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/chat.css
 Thu Mar 30 05:13:05 2017
@@ -24,10 +24,10 @@
        width: 600px;
        height: 20px;
 }
-#chatPanel #chat {
+#chatPanel #chatPopup {
        height: 20px;
 }
-##chat .btn-toolbar {
+#chat .btn-toolbar {
        margin-top: 2px;
        margin-bottom: 0;
        margin-left: 5px;
@@ -48,10 +48,10 @@
        padding: 2px .5em;
        float: left;
 }
-#chat .control.block .ui-icon {
+#chatPopup .control.block .ui-icon {
        text-align: center;
 }
-#chat .control.block .label {
+#chatPopup .control.block .label {
        display: inline-block;
        padding-left: 20px;
 }
@@ -73,7 +73,7 @@
 .ui-tabs .ui-tabs-panel.messageArea {
        height: 165px;
        overflow-y: auto;
-       padding: 5px;
+       padding: 0 5px;
 }
 #chatMessage .wysiwyg-editor {
        height: 70px;

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html?rev=1789431&r1=1789430&r2=1789431&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.html
 Thu Mar 30 05:13:05 2017
@@ -7,20 +7,20 @@
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
-  
+
       http://www.apache.org/licenses/LICENSE-2.0
-  
+
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-  
+
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
-       <div id="chat" class="ui-state-default">
+       <div id="chatPopup" class="ui-state-default">
                <div onclick="Chat.toggle();" class="control block clickable 
ui-widget-header ui-state-active"><div class="ui-icon ui-icon-caret-1-n 
sort-icon"></div><div class="label"><wicket:message key="244"/></div></div>
                <div wicket:id="chat"></div>
        </div>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js?rev=1789431&r1=1789430&r2=1789431&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
 Thu Mar 30 05:13:05 2017
@@ -19,13 +19,12 @@
 var Chat = function() {
        var chatTabs
                , tabTemplate = "<li><a href='#{href}'>#{label}</a></li>"
-               , msgTemplate = "<div id='chat-msg-id-#{id}'><img 
class='profile' src='#{imgSrc}'/><span class='from' 
data-user-id='#{userId}'>#{from}</span><span class='date 
align-right'>#{sent}</span>#{msg}</div>"
+               , msgTemplate = "<div class='clear' id='chat-msg-id-#{id}'><img 
class='profile' src='#{imgSrc}'/><span class='from' 
data-user-id='#{userId}'>#{from}</span><span class='date 
align-right'>#{sent}</span>#{msg}</div>"
                , acceptTemplate = "<div class='tick om-icon align-right 
clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);chatActivity('accept',e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>"
                , infoTemplate = "<div class='user om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);showUserInfo(e.data(\"userId\"));'></div>"
                , addTemplate = "<div class='add om-icon align-right clickable' 
data-user-id='#{userId}' onclick='var 
e=$(this);addContact(e.data(\"userId\"));'></div>"
                , messageTemplate = "<div class='new-email om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);privateMessage(e.data(\"userId\"));'></div>"
                , inviteTemplate = "<div class='invite om-icon align-right 
clickable' data-user-id='#{userId}' onclick='var 
e=$(this);inviteUser(e.data(\"userId\"));'></div>"
-               , clearBlock = "<div class='clear'></div>"
                , closeBlock = "<span class='ui-icon ui-icon-close' 
role='presentation'></span>"
                , closedHeight = "20px"
                , openedHeight = "345px"
@@ -90,7 +89,7 @@ var Chat = function() {
                        $('#chatPanel').resizable({
                                handles: "n, w"
                                , disabled: isClosed()
-                               , alsoResize: "#chat, #chat .ui-tabs 
.ui-tabs-panel.messageArea"
+                               , alsoResize: "#chatPopup, #chat .ui-tabs 
.ui-tabs-panel.messageArea"
                                , minHeight: 195
                                , minWidth: 260
                                , stop: function(event, ui) {
@@ -139,11 +138,12 @@ var Chat = function() {
                , addMessage: function(m) {
                        if ($('#chat').length > 0 && m && m.type == "chat") {
                                if (isClosed()) {
-                                       $('#chat 
.control.block').addClass('ui-state-highlight');
+                                       $('#chatPopup 
.control.block').addClass('ui-state-highlight');
                                        audio.play();
                                }
                                var msg, cm;
                                while (!!(cm = m.msg.pop())) {
+                                       var area = $('#' + cm.scope);
                                        msg = $(msgTemplate.replace(/#\{id\}/g, 
cm.id)
                                                        
.replace(/#\{userId\}/g, cm.from.id)
                                                        
.replace(/#\{imgSrc\}/g, !!cm.from.img ? cm.from.img : './profile/' + 
cm.from.id + '?anticache=' + Date.now())
@@ -160,30 +160,37 @@ var Chat = function() {
                                        if (cm.needModeration) {
                                                
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
                                        }
-                                       if (!$('#' + cm.scope).length) {
+                                       if (!area.length) {
                                                this.addTab(cm.scope, 
cm.scopeName);
                                        }
                                        if (m.mode == "accept") {
                                                $('#chat-msg-id-' + 
cm.id).remove();
                                        }
-                                       msg.append(clearBlock);
-                                       $('#' + cm.scope).prepend(msg);
+                                       var btm = area.scrollTop() + 
area.innerHeight() >= area[0].scrollHeight;
+                                       area.append(msg);
+                                       if (btm) {
+                                               area.animate({
+                                                       scrollTop: 
area[0].scrollHeight
+                                               }, 300);
+                                       }
                                }
                        }
                }
                , open: function() {
                        if (isClosed()) {
-                               $('#chat .control.block 
.ui-icon').removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
-                               $('#chat 
.control.block').removeClass('ui-state-highlight');
-                               $('#chatPanel, #chat').animate({height: 
openedHeight}, 1000);
+                               $('#chatPopup .control.block 
.ui-icon').removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
+                               $('#chatPopup 
.control.block').removeClass('ui-state-highlight');
+                               $('#chatPanel, #chatPopup').animate({height: 
openedHeight}, 1000);
                                $('#chatPanel').resizable("option", "disabled", 
false);
+                               $('#chat .messageArea').each(function(idx) {
+                                       
$(this).scrollTop($(this)[0].scrollHeight);
+                               });
                        }
                }
                , close: function() {
                        if (!isClosed()) {
-                               $('#chat .control.block 
.ui-icon').removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
-                               $('#chatPanel').animate({height: closedHeight}, 
1000);
-                               $('#chatPanel, #chat').animate({height: 
closedHeight}, 1000);
+                               $('#chatPopup .control.block 
.ui-icon').removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
+                               $('#chatPanel, #chatPopup').animate({height: 
closedHeight}, 1000);
                                $('#chatPanel').resizable("option", "disabled", 
true);
                        }
                }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/chat.css
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/chat.css?rev=1789431&r1=1789430&r2=1789431&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/chat.css 
(original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/chat.css 
Thu Mar 30 05:13:05 2017
@@ -24,10 +24,10 @@
        width: 600px;
        height: 20px;
 }
-#chatPanel #chat {
+#chatPanel #chatPopup {
        height: 20px;
 }
-##chat .btn-toolbar {
+#chat .btn-toolbar {
        margin-top: 2px;
        margin-bottom: 0;
        margin-left: 5px;
@@ -48,10 +48,10 @@
        padding: 2px .5em;
        float: left;
 }
-#chat .control.block .ui-icon {
+#chatPopup .control.block .ui-icon {
        text-align: center;
 }
-#chat .control.block .label {
+#chatPopup .control.block .label {
        display: inline-block;
        padding-left: 20px;
 }
@@ -73,7 +73,7 @@
 .ui-tabs .ui-tabs-panel.messageArea {
        height: 165px;
        overflow-y: auto;
-       padding: 5px;
+       padding: 0 5px;
 }
 #chatMessage .wysiwyg-editor {
        height: 70px;


Reply via email to