Author: solomax
Date: Wed Feb 22 06:02:13 2017
New Revision: 1783969

URL: http://svn.apache.org/viewvc?rev=1783969&view=rev
Log:
[OPENMEETINGS-1572] activities are made resizable, chat is isolated

Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
    
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/ChatPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
    
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/ChatPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/chat.js

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
 Wed Feb 22 06:02:13 2017
@@ -9,7 +9,7 @@
   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
@@ -21,7 +21,7 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
        <div class="ui-widget-header">
-               <div onclick="toggleActivities();" class="clickable control 
block ui-widget-header ui-state-active"><div class="ui-icon ui-icon-carat-1-n 
sort-icon"></div><div class="label"><wicket:message key="1363"/></div></div>
+               <div onclick="Activities.toggle();" class="clickable control 
block ui-widget-header ui-state-active"><div class="ui-icon ui-icon-carat-1-n 
sort-icon"></div><div class="label"><wicket:message key="1363"/></div></div>
        </div>
        <div wicket:id="container" class="area ui-widget-content">
                <div wicket:id="activities" class="activity item 
ui-helper-clearfix ui-corner-all">

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 Wed Feb 22 06:02:13 2017
@@ -247,7 +247,7 @@ public class ActivitiesPanel extends Bas
                activities.put(a.getId(), a);
                update(handler);
                if (isVisible()) {
-                       handler.appendJavaScript("hightlightActivities();");
+                       handler.appendJavaScript("Activities.hightlight();");
                }
        }
 

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
 Wed Feb 22 06:02:13 2017
@@ -16,35 +16,59 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-var closedHeight = "20px", openedHeight = "345px";
-function activitiesClosed(activities) {
-       return activities.height() < 24;
-}
-function openActivities() {
-       var activities = $('#activities');
-       if (activitiesClosed(activities)) {
-               $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
-               $('.control.block', 
activities).removeClass('ui-state-highlight');
-               activities.animate({height: openedHeight}, 1000);
+var Activities = function() {
+       var closedHeight = "20px", openedHeight = "345px";
+
+       function isInited(activities) {
+               return !!activities.resizable("instance");
        }
-}
-function closeActivities() {
-       var activities = $('#activities');
-       if (!activitiesClosed(activities)) {
-               $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
-               activities.animate({height: closedHeight}, 1000);
+       function isClosed(activities) {
+               return activities.height() < 24;
        }
-}
-function toggleActivities() {
-       if (activitiesClosed($('#activities'))) {
-               openActivities();
-       } else {
-               closeActivities();
+       function open() {
+               var activities = $('#activities');
+               if (!isInited(activities)) {
+                       activities.resizable({
+                               handles: "n, e"
+                               , disabled: isClosed(activities)
+                               , alsoResize: "#activities .area"
+                               , minHeight: 195
+                               , minWidth: 260
+                               , stop: function(event, ui) {
+                                       activities.css({'top': '', 'right': 
''});
+                                       openedHeight = ui.size.height + "px";
+                               }
+                       });
+               }
+               if (isClosed(activities)) {
+                       $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
+                       $('.control.block', 
activities).removeClass('ui-state-highlight');
+                       activities.animate({height: openedHeight}, 1000);
+                       activities.resizable("option", "disabled", false);
+               }
        }
-}
-function hightlightActivities() {
-       var activities = $('#activities');
-       if (activitiesClosed(activities)) {
-               $('.control.block', activities).addClass('ui-state-highlight');
+       function close() {
+               var activities = $('#activities');
+               if (!isClosed(activities)) {
+                       $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
+                       activities.animate({height: closedHeight}, 1000);
+                       activities.resizable("option", "disabled", false);
+               }
        }
-}
+
+       return {
+               hightlight: function() {
+                       var activities = $('#activities');
+                       if (isClosed(activities)) {
+                               $('.control.block', 
activities).addClass('ui-state-highlight');
+                       }
+               }
+               , toggle: function() {
+                       if (isClosed($('#activities'))) {
+                               open();
+                       } else {
+                               close();
+                       }
+               }
+       };
+}();

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 Wed Feb 22 06:02:13 2017
@@ -71,8 +71,8 @@ function roomUnload() {
        Wicket.Event.unsubscribe("/websocket/closed", roomClosed);
 }
 function startPrivateChat(el) {
-       addChatTab('chatTab-u' + el.parent().parent().data("userid"), 
el.parent().parent().find('.user.name').text());
-       openChat();
+       Chat.addTab('chatTab-u' + el.parent().parent().data("userid"), 
el.parent().parent().find('.user.name').text());
+       Chat.open();
        $('#chatMessage .wysiwyg-editor').click();
 }
 /***** functions required by SIP   ******/

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 Wed Feb 22 06:02:13 2017
@@ -119,7 +119,7 @@ public class Chat extends Panel {
        }
 
        public static CharSequence getReinit() {
-               StringBuilder sb = new StringBuilder("chatReinit(");
+               StringBuilder sb = new StringBuilder("Chat.reinit(");
                sb.append('\'').append(Application.getString(1494)).append('\'')
                                
.append(',').append('\'').append(Application.getString(406)).append('\'');
                return sb.append("); ");
@@ -127,10 +127,10 @@ public class Chat extends Panel {
 
        public CharSequence addRoom(Room r) {
                StringBuilder sb = new StringBuilder();
-               sb.append(String.format("addChatTab('%1$s%2$d', '%3$s %2$d');", 
ID_ROOM_PREFIX, r.getId(), Application.getString(406)));
+               sb.append(String.format("Chat.addTab('%1$s%2$d', '%3$s 
%2$d');", ID_ROOM_PREFIX, r.getId(), Application.getString(406)));
                List<ChatMessage> list = 
getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || 
isModerator(getUserId(), r.getId()));
                if (list.size() > 0) {
-                       
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
+                       
sb.append("Chat.addMessage(").append(getMessage(list).toString()).append(");");
                }
                return sb;
        }
@@ -154,7 +154,7 @@ public class Chat extends Panel {
                list.addAll(dao.getUserRecent(getUserId(), 
Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
                StringBuilder sb = new StringBuilder(getReinit());
                if (list.size() > 0) {
-                       
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
+                       
sb.append("Chat.addMessage(").append(getMessage(list).toString()).append(");");
                }
                response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
        }

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=1783969&r1=1783968&r2=1783969&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
 Wed Feb 22 06:02:13 2017
@@ -21,9 +21,8 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
        <div id="chat" class="ui-state-default">
-               <div onclick="toggleChat();" 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 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>
 </wicket:panel>
 </html>
-

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
 Wed Feb 22 06:02:13 2017
@@ -58,7 +58,7 @@ public class ChatPanel extends BasePanel
                        sb.append("$('#chat').show();");
                }
                sb.append(chat.addRoom(r));
-               sb.append(r.isChatOpened() ? "openChat();" : "closeChat();");
+               sb.append(r.isChatOpened() ? "Chat.open();" : "Chat.close();");
                sb.append("});");
                target.appendJavaScript(sb);
        }
@@ -67,7 +67,7 @@ public class ChatPanel extends BasePanel
                if (r.isHidden(RoomElement.Chat)) {
                        return;
                }
-               handler.appendJavaScript(String.format("if (typeof 
removeChatTab == 'function') { removeChatTab('%1$s%2$d'); }", ID_ROOM_PREFIX, 
r.getId()));
+               handler.appendJavaScript(String.format("if (typeof Chat == 
'object') { Chat.removeTab('%1$s%2$d'); }", ID_ROOM_PREFIX, r.getId()));
                if (!showDashboardChat) {
                        StringBuilder sb = new StringBuilder();
                        sb.append("$(function() {");

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
 Wed Feb 22 06:02:13 2017
@@ -31,36 +31,6 @@
                        left: -50px;
                }
        </style>
-       <script type="text/javascript">
-               function emtClick(emoticon) {
-                       var editor = $('#chatMessage .wysiwyg-editor');
-                       editor.html(editor.html() + ' ' + emoticon + ' ');
-               }
-               function initChatToolbar() {
-                       var emtBtn = $('#emoticons');
-                       emtBtn.html('');
-                       emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b 
class="caret"></b>');
-                       var emots = [].concat.apply([], 
[emoticon.threeCharEmoticons, emoticon.twoCharEmoticons]);
-                       for (var ei in emoticon.specialEmoticons) {
-                               emots.push(ei);
-                       }
-                       var emotMenuList = $('#emotMenuList');
-                       emotMenuList.html('');
-                       var rowSize = 20;
-                       var row = $('<tr></tr>');
-                       for (var i = 0; i < emots.length; ++i) {
-                               row.append('<td><div class="emt" 
onclick="emtClick(\'' + emots[i] + '\');">'
-                                       + emoticon.emoticonize(emots[i]) + 
'</div></td>');
-                               if (i != 0 && i % rowSize == 0) {
-                                       emotMenuList.append(row);
-                                       row = $('<tr></tr>');
-                               }
-                       }
-               }
-               $(function() {
-                       initChatToolbar();
-               });
-       </script>
 </wicket:head>
 <wicket:panel>
        <div wicket:id="toolbar" class="btn-toolbar" data-role="editor-toolbar">

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=1783969&r1=1783968&r2=1783969&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
 Wed Feb 22 06:02:13 2017
@@ -16,18 +16,175 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-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>"
-       , acceptTemplate = "<div class='tick om-icon align-right clickable' 
data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);acceptMessage(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";
-var emoticon = new CSSEmoticon();
-var allPrefix = "All", roomPrefix = "Room ";
+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>"
+               , acceptTemplate = "<div class='tick om-icon align-right 
clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);acceptMessage(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"
+               , allPrefix = "All"
+               , roomPrefix = "Room "
+               , emoticon = new CSSEmoticon();
+       
+       function emtClick(emoticon) {
+               var editor = $('#chatMessage .wysiwyg-editor');
+               editor.html(editor.html() + ' ' + emoticon + ' ');
+       }
+       function initToolbar() {
+               var emtBtn = $('#emoticons');
+               emtBtn.html('');
+               emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b 
class="caret"></b>');
+               var emots = [].concat.apply([], [emoticon.threeCharEmoticons, 
emoticon.twoCharEmoticons]);
+               for (var ei in emoticon.specialEmoticons) {
+                       emots.push(ei);
+               }
+               var emotMenuList = $('#emotMenuList');
+               emotMenuList.html('');
+               var rowSize = 20;
+               var row = $('<tr></tr>');
+               for (var i = 0; i < emots.length; ++i) {
+                       row.append('<td><div class="emt" onclick="emtClick(\'' 
+ emots[i] + '\');">'
+                               + emoticon.emoticonize(emots[i]) + 
'</div></td>');
+                       if (i != 0 && i % rowSize == 0) {
+                               emotMenuList.append(row);
+                               row = $('<tr></tr>');
+                       }
+               }
+       }
+       function isClosed() {
+               return $('#chatPanel').height() < 24;
+       }
+       function activateTab(id) {
+               chatTabs.tabs("option", "active", chatTabs.find('a[href="#' + 
id + '"]').parent().index());
+       }
+       function isInited() {
+               return !!$("#chatTabs").data("ui-tabs");
+       }
+       return {
+               reinit: function(_allPrefix, _roomPrefix) {
+                       allPrefix = _allPrefix;
+                       roomPrefix = _roomPrefix;
+                       initToolbar();
+                       chatTabs = $("#chatTabs").tabs({
+                               activate: function(event, ui) {
+                                       
$('#activeChatTab').val(ui.newPanel[0].id);
+                               }
+                       });
+                       // close icon: removing the tab on click
+                       chatTabs.delegate("span.ui-icon-close", "click", 
function() {
+                               var panelId = 
$(this).closest("li").remove().attr("aria-controls");
+                               $("#" + panelId).remove();
+                               chatTabs.tabs("refresh");
+                       });
+                       $('#chatPanel').resizable({
+                               handles: "n, w"
+                               , disabled: isClosed()
+                               , alsoResize: "#chat, #chat .ui-tabs 
.ui-tabs-panel.messageArea"
+                               , minHeight: 195
+                               , minWidth: 260
+                               , stop: function(event, ui) {
+                                       $('#chatPanel').css({'top': '', 'left': 
''});
+                                       openedHeight = ui.size.height + "px";
+                               }
+                       });
+               }
+               , removeTab: function(id) {
+                       $('li[aria-controls="' + id + '"]').remove();
+                       $('#' + id).remove();
+                       if (isInited()) {
+                               chatTabs.tabs("refresh");
+                       }
+               }
+               , addTab: function(id, label) {
+                       if (!isInited()) {
+                               this.reinit();
+                       }
+                       if ($('#chat').length < 1 || $('#' + id).length) {
+                               return;
+                       }
+                       if (!label) {
+                               label = id == "chatTab-all" ? allPrefix : 
roomPrefix + id.substr(9);
+                       }
+                       var li = $(tabTemplate.replace(/#\{href\}/g, "#" + 
id).replace(/#\{label\}/g, label));
+                       if (id.indexOf("chatTab-r") != 0) {
+                               li.append(closeBlock);
+                       }
+                       chatTabs.find(".ui-tabs-nav").append(li);
+                       chatTabs.append("<div class='messageArea' id='" + id + 
"'></div>");
+                       chatTabs.tabs("refresh");
+                       activateTab(id);
+               }
+               , addMessage: function(m) {
+                       if ($('#chat').length > 0 && m && m.type == "chat") {
+                               if (isClosed()) {
+                                       $('#chat 
.control.block').addClass('ui-state-highlight');
+                               }
+                               var msg;
+                               for (var i = 0; i < m.msg.length; ++i) {
+                                       var cm = m.msg[i];
+                                       msg = $(msgTemplate.replace(/#\{id\}/g, 
cm.id)
+                                                       
.replace(/#\{userId\}/g, cm.from.id)
+                                                       
.replace(/#\{imgSrc\}/g, cm.from.img)
+                                                       .replace(/#\{from\}/g, 
cm.from.name)
+                                                       .replace(/#\{sent\}/g, 
cm.sent)
+                                                       .replace(/#\{msg\}/g, 
emoticon.emoticonize(!!cm.message ? cm.message : "")));
+                                       var date = msg.children('.date');
+                                       
date.after(infoTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                       if ("full" == cm.actions) {
+                                               
date.after(addTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                               
date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                               
date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                       }
+                                       if (cm.needModeration) {
+                                               
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
+                                       }
+                                       if (!$('#' + cm.scope).length) {
+                                               this.addTab(cm.scope, 
cm.scopeName);
+                                       }
+                                       if (m.mode == "accept") {
+                                               $('#chat-msg-id-' + 
cm.id).remove();
+                                       }
+                                       msg.append(clearBlock);
+                                       $('#' + cm.scope).append(msg);
+                               }
+                               if (msg[0]) {
+                                       msg[0].scrollIntoView();
+                               }
+                       }
+               }
+               , 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);
+                               $('#chatPanel').resizable("option", "disabled", 
false);
+                       }
+               }
+               , 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);
+                               $('#chatPanel').resizable("option", "disabled", 
true);
+                       }
+               }
+               , toggle: function() {
+                       if (isClosed()) {
+                               this.open();
+                       } else {
+                               this.close();
+                       }
+               }
+       };
+}();
+
 $(function() {
        Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
                try {
@@ -35,7 +192,7 @@ $(function() {
                        if (m) {
                                switch(m.type) {
                                        case "chat":
-                                               addChatMessage(m);
+                                               Chat.addMessage(m);
                                                break;
                                }
                        }
@@ -44,126 +201,3 @@ $(function() {
                }
        });
 });
-function chatReinit(_allPrefix, _roomPrefix) {
-       allPrefix = _allPrefix;
-       roomPrefix = _roomPrefix;
-       initChatToolbar();
-       chatTabs = $("#chatTabs").tabs({
-               activate: function(event, ui) {
-                       $('#activeChatTab').val(ui.newPanel[0].id);
-               }
-       });
-       // close icon: removing the tab on click
-       chatTabs.delegate("span.ui-icon-close", "click", function() {
-               var panelId = 
$(this).closest("li").remove().attr("aria-controls");
-               $("#" + panelId).remove();
-               chatTabs.tabs("refresh");
-       });
-       $('#chatPanel').resizable({
-               handles: "n, w"
-               , disabled: chatClosed()
-               , alsoResize: "#chat, #chat .ui-tabs .ui-tabs-panel.messageArea"
-               , minHeight: 195
-               , minWidth: 260
-               , stop: function(event, ui) {
-                       $('#chatPanel').css({'top': '', 'left': ''});
-                       openedHeight = ui.size.height + "px";
-               }
-       });
-}
-function chatClosed() {
-       return $('#chatPanel').height() < 24;
-}
-function openChat() {
-       if (chatClosed()) {
-               $('#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);
-               $('#chatPanel').resizable("option", "disabled", false);
-       }
-}
-function closeChat() {
-       if (!chatClosed()) {
-               $('#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);
-               $('#chatPanel').resizable("option", "disabled", true);
-       }
-}
-function toggleChat() {
-       if (chatClosed()) {
-               openChat();
-       } else {
-               closeChat();
-       }
-}
-function activateTab(id) {
-       chatTabs.tabs("option", "active", chatTabs.find('a[href="#' + id + 
'"]').parent().index());
-}
-function chatInited() {
-       return !!$("#chatTabs").data("ui-tabs");
-}
-function addChatTab(id, label) {
-       if (!chatInited()) {
-               chatReinit();
-       }
-       if ($('#chat').length < 1 || $('#' + id).length) {
-               return;
-       }
-       if (!label) {
-               label = id == "chatTab-all" ? allPrefix : roomPrefix + 
id.substr(9);
-       }
-       var li = $(tabTemplate.replace(/#\{href\}/g, "#" + 
id).replace(/#\{label\}/g, label));
-       if (id.indexOf("chatTab-r") != 0) {
-               li.append(closeBlock);
-       }
-       chatTabs.find(".ui-tabs-nav").append(li);
-       chatTabs.append("<div class='messageArea' id='" + id + "'></div>");
-       chatTabs.tabs("refresh");
-       activateTab(id);
-}
-function removeChatTab(id) {
-       $('li[aria-controls="' + id + '"]').remove();
-       $('#' + id).remove();
-       if (chatInited()) {
-               chatTabs.tabs("refresh");
-       }
-}
-function addChatMessage(m) {
-       if ($('#chat').length > 0 && m && m.type == "chat") {
-               if (chatClosed()) {
-                       $('#chat 
.control.block').addClass('ui-state-highlight');
-               }
-               var msg;
-               for (var i = 0; i < m.msg.length; ++i) {
-                       var cm = m.msg[i];
-                       msg = $(msgTemplate.replace(/#\{id\}/g, cm.id)
-                                       .replace(/#\{userId\}/g, cm.from.id)
-                                       .replace(/#\{imgSrc\}/g, cm.from.img)
-                                       .replace(/#\{from\}/g, cm.from.name)
-                                       .replace(/#\{sent\}/g, cm.sent)
-                                       .replace(/#\{msg\}/g, 
emoticon.emoticonize(!!cm.message ? cm.message : "")));
-                       var date = msg.children('.date');
-                       date.after(infoTemplate.replace(/#\{userId\}/g, 
cm.from.id));
-                       if ("full" == cm.actions) {
-                               date.after(addTemplate.replace(/#\{userId\}/g, 
cm.from.id));
-                               
date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id));
-                               
date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id));
-                       }
-                       if (cm.needModeration) {
-                               
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
-                       }
-                       if (!$('#' + cm.scope).length) {
-                               addChatTab(cm.scope, cm.scopeName);
-                       }
-                       if (m.mode == "accept") {
-                               $('#chat-msg-id-' + cm.id).remove();
-                       }
-                       msg.append(clearBlock);
-                       $('#' + cm.scope).append(msg);
-               }
-               if (msg[0]) {
-                       msg[0].scrollIntoView();
-               }
-       }
-}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
 Wed Feb 22 06:02:13 2017
@@ -9,7 +9,7 @@
   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
@@ -21,7 +21,7 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
        <div class="ui-widget-header">
-               <div onclick="toggleActivities();" class="clickable control 
block ui-widget-header ui-state-active"><div class="ui-icon ui-icon-carat-1-n 
sort-icon"></div><div class="label"><wicket:message key="1363"/></div></div>
+               <div onclick="Activities.toggle();" class="clickable control 
block ui-widget-header ui-state-active"><div class="ui-icon ui-icon-carat-1-n 
sort-icon"></div><div class="label"><wicket:message key="1363"/></div></div>
        </div>
        <div wicket:id="container" class="area ui-widget-content">
                <div wicket:id="activities" class="activity item 
ui-helper-clearfix ui-corner-all">

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 Wed Feb 22 06:02:13 2017
@@ -247,7 +247,7 @@ public class ActivitiesPanel extends Bas
                activities.put(a.getId(), a);
                update(handler);
                if (isVisible()) {
-                       handler.appendJavaScript("hightlightActivities();");
+                       handler.appendJavaScript("Activities.hightlight();");
                }
        }
 

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
 Wed Feb 22 06:02:13 2017
@@ -16,35 +16,59 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-var closedHeight = "20px", openedHeight = "345px";
-function activitiesClosed(activities) {
-       return activities.height() < 24;
-}
-function openActivities() {
-       var activities = $('#activities');
-       if (activitiesClosed(activities)) {
-               $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
-               $('.control.block', 
activities).removeClass('ui-state-highlight');
-               activities.animate({height: openedHeight}, 1000);
+var Activities = function() {
+       var closedHeight = "20px", openedHeight = "345px";
+
+       function isInited(activities) {
+               return !!activities.resizable("instance");
        }
-}
-function closeActivities() {
-       var activities = $('#activities');
-       if (!activitiesClosed(activities)) {
-               $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
-               activities.animate({height: closedHeight}, 1000);
+       function isClosed(activities) {
+               return activities.height() < 24;
        }
-}
-function toggleActivities() {
-       if (activitiesClosed($('#activities'))) {
-               openActivities();
-       } else {
-               closeActivities();
+       function open() {
+               var activities = $('#activities');
+               if (!isInited(activities)) {
+                       activities.resizable({
+                               handles: "n, e"
+                               , disabled: isClosed(activities)
+                               , alsoResize: "#activities .area"
+                               , minHeight: 195
+                               , minWidth: 260
+                               , stop: function(event, ui) {
+                                       activities.css({'top': '', 'right': 
''});
+                                       openedHeight = ui.size.height + "px";
+                               }
+                       });
+               }
+               if (isClosed(activities)) {
+                       $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-n').addClass('ui-icon-caret-1-s');
+                       $('.control.block', 
activities).removeClass('ui-state-highlight');
+                       activities.animate({height: openedHeight}, 1000);
+                       activities.resizable("option", "disabled", false);
+               }
        }
-}
-function hightlightActivities() {
-       var activities = $('#activities');
-       if (activitiesClosed(activities)) {
-               $('.control.block', activities).addClass('ui-state-highlight');
+       function close() {
+               var activities = $('#activities');
+               if (!isClosed(activities)) {
+                       $('.control.block .ui-icon', 
activities).removeClass('ui-icon-caret-1-s').addClass('ui-icon-caret-1-n');
+                       activities.animate({height: closedHeight}, 1000);
+                       activities.resizable("option", "disabled", false);
+               }
        }
-}
+
+       return {
+               hightlight: function() {
+                       var activities = $('#activities');
+                       if (isClosed(activities)) {
+                               $('.control.block', 
activities).addClass('ui-state-highlight');
+                       }
+               }
+               , toggle: function() {
+                       if (isClosed($('#activities'))) {
+                               open();
+                       } else {
+                               close();
+                       }
+               }
+       };
+}();

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 Wed Feb 22 06:02:13 2017
@@ -111,8 +111,8 @@ function roomUnload() {
        Wicket.Event.unsubscribe("/websocket/closed", roomClosed);
 }
 function startPrivateChat(el) {
-       addChatTab('chatTab-u' + el.parent().parent().data("userid"), 
el.parent().parent().find('.user.name').text());
-       openChat();
+       Chat.addTab('chatTab-u' + el.parent().parent().data("userid"), 
el.parent().parent().find('.user.name').text());
+       Chat.open();
        $('#chatMessage .wysiwyg-editor').click();
 }
 /***** functions required by SIP   ******/

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 Wed Feb 22 06:02:13 2017
@@ -119,7 +119,7 @@ public class Chat extends Panel {
        }
 
        public static CharSequence getReinit() {
-               StringBuilder sb = new StringBuilder("chatReinit(");
+               StringBuilder sb = new StringBuilder("Chat.reinit(");
                sb.append('\'').append(Application.getString(1494)).append('\'')
                                
.append(',').append('\'').append(Application.getString(406)).append('\'');
                return sb.append("); ");
@@ -127,10 +127,10 @@ public class Chat extends Panel {
 
        public CharSequence addRoom(Room r) {
                StringBuilder sb = new StringBuilder();
-               sb.append(String.format("addChatTab('%1$s%2$d', '%3$s %2$d');", 
ID_ROOM_PREFIX, r.getId(), Application.getString(406)));
+               sb.append(String.format("Chat.addTab('%1$s%2$d', '%3$s 
%2$d');", ID_ROOM_PREFIX, r.getId(), Application.getString(406)));
                List<ChatMessage> list = 
getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || 
isModerator(getUserId(), r.getId()));
                if (list.size() > 0) {
-                       
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
+                       
sb.append("Chat.addMessage(").append(getMessage(list).toString()).append(");");
                }
                return sb;
        }
@@ -154,7 +154,7 @@ public class Chat extends Panel {
                list.addAll(dao.getUserRecent(getUserId(), 
Date.from(Instant.now().minus(Duration.ofHours(1L))), 0, 30));
                StringBuilder sb = new StringBuilder(getReinit());
                if (list.size() > 0) {
-                       
sb.append("addChatMessage(").append(getMessage(list).toString()).append(");");
+                       
sb.append("Chat.addMessage(").append(getMessage(list).toString()).append(");");
                }
                response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
        }

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=1783969&r1=1783968&r2=1783969&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
 Wed Feb 22 06:02:13 2017
@@ -21,9 +21,8 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
        <div id="chat" class="ui-state-default">
-               <div onclick="toggleChat();" 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 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>
 </wicket:panel>
 </html>
-

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatPanel.java
 Wed Feb 22 06:02:13 2017
@@ -58,7 +58,7 @@ public class ChatPanel extends BasePanel
                        sb.append("$('#chat').show();");
                }
                sb.append(chat.addRoom(r));
-               sb.append(r.isChatOpened() ? "openChat();" : "closeChat();");
+               sb.append(r.isChatOpened() ? "Chat.open();" : "Chat.close();");
                sb.append("});");
                target.appendJavaScript(sb);
        }
@@ -67,7 +67,7 @@ public class ChatPanel extends BasePanel
                if (r.isHidden(RoomElement.Chat)) {
                        return;
                }
-               handler.appendJavaScript(String.format("if (typeof 
removeChatTab == 'function') { removeChatTab('%1$s%2$d'); }", ID_ROOM_PREFIX, 
r.getId()));
+               handler.appendJavaScript(String.format("if (typeof Chat == 
'object') { Chat.removeTab('%1$s%2$d'); }", ID_ROOM_PREFIX, r.getId()));
                if (!showDashboardChat) {
                        StringBuilder sb = new StringBuilder();
                        sb.append("$(function() {");

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html?rev=1783969&r1=1783968&r2=1783969&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
 Wed Feb 22 06:02:13 2017
@@ -31,36 +31,6 @@
                        left: -50px;
                }
        </style>
-       <script type="text/javascript">
-               function emtClick(emoticon) {
-                       var editor = $('#chatMessage .wysiwyg-editor');
-                       editor.html(editor.html() + ' ' + emoticon + ' ');
-               }
-               function initChatToolbar() {
-                       var emtBtn = $('#emoticons');
-                       emtBtn.html('');
-                       emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b 
class="caret"></b>');
-                       var emots = [].concat.apply([], 
[emoticon.threeCharEmoticons, emoticon.twoCharEmoticons]);
-                       for (var ei in emoticon.specialEmoticons) {
-                               emots.push(ei);
-                       }
-                       var emotMenuList = $('#emotMenuList');
-                       emotMenuList.html('');
-                       var rowSize = 20;
-                       var row = $('<tr></tr>');
-                       for (var i = 0; i < emots.length; ++i) {
-                               row.append('<td><div class="emt" 
onclick="emtClick(\'' + emots[i] + '\');">'
-                                       + emoticon.emoticonize(emots[i]) + 
'</div></td>');
-                               if (i != 0 && i % rowSize == 0) {
-                                       emotMenuList.append(row);
-                                       row = $('<tr></tr>');
-                               }
-                       }
-               }
-               $(function() {
-                       initChatToolbar();
-               });
-       </script>
 </wicket:head>
 <wicket:panel>
        <div wicket:id="toolbar" class="btn-toolbar" data-role="editor-toolbar">

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=1783969&r1=1783968&r2=1783969&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
 Wed Feb 22 06:02:13 2017
@@ -16,18 +16,175 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-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>"
-       , acceptTemplate = "<div class='tick om-icon align-right clickable' 
data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);acceptMessage(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";
-var emoticon = new CSSEmoticon();
-var allPrefix = "All", roomPrefix = "Room ";
+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>"
+               , acceptTemplate = "<div class='tick om-icon align-right 
clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var 
e=$(this);acceptMessage(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"
+               , allPrefix = "All"
+               , roomPrefix = "Room "
+               , emoticon = new CSSEmoticon();
+       
+       function emtClick(emoticon) {
+               var editor = $('#chatMessage .wysiwyg-editor');
+               editor.html(editor.html() + ' ' + emoticon + ' ');
+       }
+       function initToolbar() {
+               var emtBtn = $('#emoticons');
+               emtBtn.html('');
+               emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b 
class="caret"></b>');
+               var emots = [].concat.apply([], [emoticon.threeCharEmoticons, 
emoticon.twoCharEmoticons]);
+               for (var ei in emoticon.specialEmoticons) {
+                       emots.push(ei);
+               }
+               var emotMenuList = $('#emotMenuList');
+               emotMenuList.html('');
+               var rowSize = 20;
+               var row = $('<tr></tr>');
+               for (var i = 0; i < emots.length; ++i) {
+                       row.append('<td><div class="emt" onclick="emtClick(\'' 
+ emots[i] + '\');">'
+                               + emoticon.emoticonize(emots[i]) + 
'</div></td>');
+                       if (i != 0 && i % rowSize == 0) {
+                               emotMenuList.append(row);
+                               row = $('<tr></tr>');
+                       }
+               }
+       }
+       function isClosed() {
+               return $('#chatPanel').height() < 24;
+       }
+       function activateTab(id) {
+               chatTabs.tabs("option", "active", chatTabs.find('a[href="#' + 
id + '"]').parent().index());
+       }
+       function isInited() {
+               return !!$("#chatTabs").data("ui-tabs");
+       }
+       return {
+               reinit: function(_allPrefix, _roomPrefix) {
+                       allPrefix = _allPrefix;
+                       roomPrefix = _roomPrefix;
+                       initToolbar();
+                       chatTabs = $("#chatTabs").tabs({
+                               activate: function(event, ui) {
+                                       
$('#activeChatTab').val(ui.newPanel[0].id);
+                               }
+                       });
+                       // close icon: removing the tab on click
+                       chatTabs.delegate("span.ui-icon-close", "click", 
function() {
+                               var panelId = 
$(this).closest("li").remove().attr("aria-controls");
+                               $("#" + panelId).remove();
+                               chatTabs.tabs("refresh");
+                       });
+                       $('#chatPanel').resizable({
+                               handles: "n, w"
+                               , disabled: isClosed()
+                               , alsoResize: "#chat, #chat .ui-tabs 
.ui-tabs-panel.messageArea"
+                               , minHeight: 195
+                               , minWidth: 260
+                               , stop: function(event, ui) {
+                                       $('#chatPanel').css({'top': '', 'left': 
''});
+                                       openedHeight = ui.size.height + "px";
+                               }
+                       });
+               }
+               , removeTab: function(id) {
+                       $('li[aria-controls="' + id + '"]').remove();
+                       $('#' + id).remove();
+                       if (isInited()) {
+                               chatTabs.tabs("refresh");
+                       }
+               }
+               , addTab: function(id, label) {
+                       if (!isInited()) {
+                               this.reinit();
+                       }
+                       if ($('#chat').length < 1 || $('#' + id).length) {
+                               return;
+                       }
+                       if (!label) {
+                               label = id == "chatTab-all" ? allPrefix : 
roomPrefix + id.substr(9);
+                       }
+                       var li = $(tabTemplate.replace(/#\{href\}/g, "#" + 
id).replace(/#\{label\}/g, label));
+                       if (id.indexOf("chatTab-r") != 0) {
+                               li.append(closeBlock);
+                       }
+                       chatTabs.find(".ui-tabs-nav").append(li);
+                       chatTabs.append("<div class='messageArea' id='" + id + 
"'></div>");
+                       chatTabs.tabs("refresh");
+                       activateTab(id);
+               }
+               , addMessage: function(m) {
+                       if ($('#chat').length > 0 && m && m.type == "chat") {
+                               if (isClosed()) {
+                                       $('#chat 
.control.block').addClass('ui-state-highlight');
+                               }
+                               var msg;
+                               for (var i = 0; i < m.msg.length; ++i) {
+                                       var cm = m.msg[i];
+                                       msg = $(msgTemplate.replace(/#\{id\}/g, 
cm.id)
+                                                       
.replace(/#\{userId\}/g, cm.from.id)
+                                                       
.replace(/#\{imgSrc\}/g, cm.from.img)
+                                                       .replace(/#\{from\}/g, 
cm.from.name)
+                                                       .replace(/#\{sent\}/g, 
cm.sent)
+                                                       .replace(/#\{msg\}/g, 
emoticon.emoticonize(!!cm.message ? cm.message : "")));
+                                       var date = msg.children('.date');
+                                       
date.after(infoTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                       if ("full" == cm.actions) {
+                                               
date.after(addTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                               
date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                               
date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id));
+                                       }
+                                       if (cm.needModeration) {
+                                               
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
+                                       }
+                                       if (!$('#' + cm.scope).length) {
+                                               this.addTab(cm.scope, 
cm.scopeName);
+                                       }
+                                       if (m.mode == "accept") {
+                                               $('#chat-msg-id-' + 
cm.id).remove();
+                                       }
+                                       msg.append(clearBlock);
+                                       $('#' + cm.scope).append(msg);
+                               }
+                               if (msg[0]) {
+                                       msg[0].scrollIntoView();
+                               }
+                       }
+               }
+               , 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);
+                               $('#chatPanel').resizable("option", "disabled", 
false);
+                       }
+               }
+               , 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);
+                               $('#chatPanel').resizable("option", "disabled", 
true);
+                       }
+               }
+               , toggle: function() {
+                       if (isClosed()) {
+                               this.open();
+                       } else {
+                               this.close();
+                       }
+               }
+       };
+}();
+
 $(function() {
        Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
                try {
@@ -35,7 +192,7 @@ $(function() {
                        if (m) {
                                switch(m.type) {
                                        case "chat":
-                                               addChatMessage(m);
+                                               Chat.addMessage(m);
                                                break;
                                }
                        }
@@ -44,126 +201,3 @@ $(function() {
                }
        });
 });
-function chatReinit(_allPrefix, _roomPrefix) {
-       allPrefix = _allPrefix;
-       roomPrefix = _roomPrefix;
-       initChatToolbar();
-       chatTabs = $("#chatTabs").tabs({
-               activate: function(event, ui) {
-                       $('#activeChatTab').val(ui.newPanel[0].id);
-               }
-       });
-       // close icon: removing the tab on click
-       chatTabs.delegate("span.ui-icon-close", "click", function() {
-               var panelId = 
$(this).closest("li").remove().attr("aria-controls");
-               $("#" + panelId).remove();
-               chatTabs.tabs("refresh");
-       });
-       $('#chatPanel').resizable({
-               handles: "n, w"
-               , disabled: chatClosed()
-               , alsoResize: "#chat, #chat .ui-tabs .ui-tabs-panel.messageArea"
-               , minHeight: 195
-               , minWidth: 260
-               , stop: function(event, ui) {
-                       $('#chatPanel').css({'top': '', 'left': ''});
-                       openedHeight = ui.size.height + "px";
-               }
-       });
-}
-function chatClosed() {
-       return $('#chatPanel').height() < 24;
-}
-function openChat() {
-       if (chatClosed()) {
-               $('#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);
-               $('#chatPanel').resizable("option", "disabled", false);
-       }
-}
-function closeChat() {
-       if (!chatClosed()) {
-               $('#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);
-               $('#chatPanel').resizable("option", "disabled", true);
-       }
-}
-function toggleChat() {
-       if (chatClosed()) {
-               openChat();
-       } else {
-               closeChat();
-       }
-}
-function activateTab(id) {
-       chatTabs.tabs("option", "active", chatTabs.find('a[href="#' + id + 
'"]').parent().index());
-}
-function chatInited() {
-       return !!$("#chatTabs").data("ui-tabs");
-}
-function addChatTab(id, label) {
-       if (!chatInited()) {
-               chatReinit();
-       }
-       if ($('#chat').length < 1 || $('#' + id).length) {
-               return;
-       }
-       if (!label) {
-               label = id == "chatTab-all" ? allPrefix : roomPrefix + 
id.substr(9);
-       }
-       var li = $(tabTemplate.replace(/#\{href\}/g, "#" + 
id).replace(/#\{label\}/g, label));
-       if (id.indexOf("chatTab-r") != 0) {
-               li.append(closeBlock);
-       }
-       chatTabs.find(".ui-tabs-nav").append(li);
-       chatTabs.append("<div class='messageArea' id='" + id + "'></div>");
-       chatTabs.tabs("refresh");
-       activateTab(id);
-}
-function removeChatTab(id) {
-       $('li[aria-controls="' + id + '"]').remove();
-       $('#' + id).remove();
-       if (chatInited()) {
-               chatTabs.tabs("refresh");
-       }
-}
-function addChatMessage(m) {
-       if ($('#chat').length > 0 && m && m.type == "chat") {
-               if (chatClosed()) {
-                       $('#chat 
.control.block').addClass('ui-state-highlight');
-               }
-               var msg;
-               for (var i = 0; i < m.msg.length; ++i) {
-                       var cm = m.msg[i];
-                       msg = $(msgTemplate.replace(/#\{id\}/g, cm.id)
-                                       .replace(/#\{userId\}/g, cm.from.id)
-                                       .replace(/#\{imgSrc\}/g, cm.from.img)
-                                       .replace(/#\{from\}/g, cm.from.name)
-                                       .replace(/#\{sent\}/g, cm.sent)
-                                       .replace(/#\{msg\}/g, 
emoticon.emoticonize(!!cm.message ? cm.message : "")));
-                       var date = msg.children('.date');
-                       date.after(infoTemplate.replace(/#\{userId\}/g, 
cm.from.id));
-                       if ("full" == cm.actions) {
-                               date.after(addTemplate.replace(/#\{userId\}/g, 
cm.from.id));
-                               
date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id));
-                               
date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id));
-                       }
-                       if (cm.needModeration) {
-                               
msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, 
cm.scope.substring(9)));
-                       }
-                       if (!$('#' + cm.scope).length) {
-                               addChatTab(cm.scope, cm.scopeName);
-                       }
-                       if (m.mode == "accept") {
-                               $('#chat-msg-id-' + cm.id).remove();
-                       }
-                       msg.append(clearBlock);
-                       $('#' + cm.scope).append(msg);
-               }
-               if (msg[0]) {
-                       msg[0].scrollIntoView();
-               }
-       }
-}


Reply via email to