You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/02/22 06:02:14 UTC

svn commit: r1783969 - in /openmeetings/application: branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ branches/3.2.x/openmeetings-...

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();
-		}
-	}
-}