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 2014/10/03 20:11:33 UTC

svn commit: r1629279 - in /openmeetings/trunk/singlewebapp/openmeetings-web/src/main: java/org/apache/openmeetings/web/room/ java/org/apache/openmeetings/web/user/ webapp/css/

Author: solomax
Date: Fri Oct  3 18:11:33 2014
New Revision: 1629279

URL: http://svn.apache.org/r1629279
Log:
[OPENMEETINGS-1097] dynamic tabs are added to the chat

Modified:
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1629279&r1=1629278&r2=1629279&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Fri Oct  3 18:11:33 2014
@@ -71,6 +71,7 @@ import org.apache.openmeetings.web.room.
 import org.apache.openmeetings.web.room.poll.CreatePollDialog;
 import org.apache.openmeetings.web.room.poll.PollResultsDialog;
 import org.apache.openmeetings.web.room.poll.VoteDialog;
+import org.apache.openmeetings.web.user.ChatPanel;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -342,8 +343,10 @@ public class RoomPanel extends BasePanel
 						updateUserMenuIcons(wsEvent.getHandler());
 						break;
 					case roomEnter:
+						wsEvent.getHandler().appendJavaScript(String.format("addChatTab('%1$s%2$d', '%3$s %2$d');", ChatPanel.ID_ROOM_PREFIX, roomId, WebSession.getString(406)));
 						updateUserMenuIcons(wsEvent.getHandler());
 					case roomExit:
+						//TODO check user/remove tab
 						users.setList(getUsers());
 						wsEvent.getHandler().add(userList);
 						break;

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html?rev=1629279&r1=1629278&r2=1629279&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html Fri Oct  3 18:11:33 2014
@@ -22,7 +22,12 @@
 <wicket:panel>
 	<div id="chat">
 		<div id="controlBlock" onclick="toggleChat();"><div id="control" class="ui-icon ui-icon-carat-1-n sort-icon"></div></div>
-		<div wicket:id="messages"></div>
+		<div id="chatTabs">
+			<ul>
+				<li><a href="#chatTab-all"><wicket:ommessage key="1494"/></a></li>
+			</ul>
+			<div id="chatTab-all" class="messageArea"></div>
+		</div>
 		<form wicket:id="sendForm">
 			<div wicket:id="toolbarContainer"></div>
 			<table style="width: 100%">

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1629279&r1=1629278&r2=1629279&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java Fri Oct  3 18:11:33 2014
@@ -40,7 +40,6 @@ import org.apache.wicket.markup.head.IHe
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.protocol.ws.WebSocketSettings;
@@ -59,7 +58,20 @@ import com.googlecode.wicket.jquery.ui.p
 public class ChatPanel extends BasePanel {
 	private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
 	private static final long serialVersionUID = 1L;
-	private static final String MESSAGE_AREA_ID = "messageArea";
+	private static final String ID_TAB_PREFIX = "chatTab-";
+	private static final String ID_USER_PREFIX = ID_TAB_PREFIX + "u";
+	public static final String ID_ROOM_PREFIX = ID_TAB_PREFIX + "r";
+	private static final String ID_ALL = ID_TAB_PREFIX + "all";
+	
+	private String getScope(ChatMessage m) {
+		if (m.getToUser() != null) {
+			return ID_USER_PREFIX + m.getToUser().getId();
+		} else if (m.getToRoom() != null) {
+			return ID_ROOM_PREFIX + m.getToRoom().getId();
+		} else {
+			return ID_ALL;
+		}
+	}
 	
 	private JSONObject getMessage(ChatMessage m) throws JSONException {
 		String msg = m.getMessage();
@@ -68,6 +80,7 @@ public class ChatPanel extends BasePanel
 			.put("type", "chat")
 			.put("msg", new JSONObject()
 				.put("id", m.getId())
+				.put("scope", getScope(m))
 				.put("message", msg)
 				.put("from", m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname())
 				.put("sent", getDateFormat().format(m.getSent()))
@@ -92,7 +105,7 @@ public class ChatPanel extends BasePanel
 						sb.append("addChatMessageInternal(").append(getMessage(m).toString()).append(");");
 					}
 					if (sb.length() > 0) {
-						sb.append("$('#").append(MESSAGE_AREA_ID).append("').emoticonize();");
+						sb.append("$('.messageArea').emoticonize();");
 						response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
 					}
 				} catch (JSONException e) {
@@ -101,8 +114,7 @@ public class ChatPanel extends BasePanel
 				super.renderHead(component, response);
 			}
 		});
-		add(new EmoticonsBehavior("#" + MESSAGE_AREA_ID));
-		add(new WebMarkupContainer("messages").setMarkupId(MESSAGE_AREA_ID));
+		add(new EmoticonsBehavior(".messageArea"));
 		ChatToolbar toolbar = new ChatToolbar("toolbarContainer");
 		final WysiwygEditor chatMessage = new WysiwygEditor("chatMessage", Model.of(""), toolbar);
 		add(new Form<Void>("sendForm").add(

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js?rev=1629279&r1=1629278&r2=1629279&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js Fri Oct  3 18:11:33 2014
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+var chatTabs, tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'></span></li>";
 $(function() {
 	Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
 		var m = jQuery.parseJSON(msg);
@@ -32,25 +33,41 @@ $(function() {
 			}
 		}
 	});
+	chatTabs = $("#chatTabs").tabs();
+	// 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");
+	});
 });
 function toggleChat() {
 	var chat = $('#chat');
 	$('#chat #controlBlock #control')
 		.removeClass('ui-icon-carat-1-' + (chat.height() < 20 ? 'n' : 's'))
 		.addClass('ui-icon-carat-1-' + (chat.height() < 20 ? 's' : 'n'));
-	chat.animate({ height: chat.height() < 20 ? "320px" : "16px" }, 1000);
+	chat.animate({ height: chat.height() < 20 ? "380px" : "16px" }, 1000);
+}
+function addChatTab(id, label) {
+	var li = $(tabTemplate.replace(/#\{href\}/g, "#" + id).replace(/#\{label\}/g, label));
+	chatTabs.find(".ui-tabs-nav").append(li);
+	chatTabs.append("<div class='messageArea' id='" + id + "'></div>");
+	chatTabs.tabs("refresh");
 }
 function addChatMessageInternal(m) {
 	if (m && m.type == "chat") {
 		var msg = $('<div><span class="from">' + m.msg.from + '</span><span class="date">'
 				+ m.msg.sent + '</span>' + m.msg.message + '</div>');
-		$('#messageArea').append(msg);
+		if (!$('#' + m.msg.scope).length) {
+			addChatTab(m.scope, 'Test');
+		}
+		$('#' + m.msg.scope).append(msg);
 		msg[0].scrollIntoView();
 	}
 }
 function addChatMessage(m) {
 	if (m && m.type == "chat") {
 		addChatMessageInternal(m);
-		$('#messageArea').emoticonize();
+		$('.messageArea').emoticonize();
 	}
 }

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css?rev=1629279&r1=1629278&r2=1629279&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css Fri Oct  3 18:11:33 2014
@@ -87,6 +87,18 @@ html, body {
 	height: 10px;
 	background-color: #F2FAFF;
 }
+#chatPanel #chat #chatTabs.ui-tabs {
+	padding: 0;
+}
+#chatPanel #chat #chatTabs.ui-tabs .ui-tabs-nav {
+	padding: 0;
+}
+#chatPanel #chat #chatTabs..ui-tabs .ui-tabs-nav li {
+	margin: 0;
+}
+#chatPanel #chat #chatTabs.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	padding: 2px .5em;
+}
 #chatPanel #chat #controlBlock {
 	background-color: #5294BB;
 }
@@ -98,17 +110,17 @@ html, body {
 	margin-left: 50%;
 	margin-right: 50%;
 }
-#chatPanel #chat #messageArea .date {
+#chatPanel #chat .messageArea .date {
     margin-right: 5px;
     font-style: italic;
     font-size: smaller;
 }
-#chatPanel #chat #messageArea .from {
+#chatPanel #chat .messageArea .from {
 	margin-left: 5px;
     margin-right: 5px;
 	font-weight: bold;
 }
-#messageArea {
+.messageArea {
 	height: 165px;
 	overflow-y: auto;
 }