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