Author: solomax
Date: Wed Feb 22 08:56:05 2017
New Revision: 1783980
URL: http://svn.apache.org/viewvc?rev=1783980&view=rev
Log:
[OPENMEETINGS-1209] chat typing indicator is added
Modified:
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
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/chat.js
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
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/chat.js
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
Modified:
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
Wed Feb 22 08:56:05 2017
@@ -30,7 +30,6 @@ import java.util.Set;
import javax.activation.MimetypesFileTypeMap;
-import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.util.string.Strings;
public class StoredFile {
@@ -67,7 +66,7 @@ public class StoredFile {
ext.addAll(pdfExtensions);
ext.addAll(chartExtensions);
StringBuilder sb = new
StringBuilder("audio/*,video/*,image/*,.");
- sb.append(StringUtils.join(ext, ",.")); // TODO java8
String.join("|.", ext);
+ sb.append(String.join("|.", ext));
return sb.toString();
}
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
Wed Feb 22 08:56:05 2017
@@ -20,8 +20,8 @@
-->
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="room container">
- <div wicket:id="roomContainer" style="height: 100%">
+ <div class="room holder">
+ <div class="room container" wicket:id="roomContainer">
<div class="room menu" wicket:id="menu"></div>
<div class="room sidebar left"
wicket:id="sidebar"></div>
<div wicket:id="wb-area" class="room wb area">
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
Wed Feb 22 08:56:05 2017
@@ -63,6 +63,7 @@ import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import
org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.markup.head.IHeaderResponse;
@@ -151,6 +152,7 @@ public class RoomPanel extends BasePanel
Component eventDetail = new
WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
room.add(menu = new RoomMenuPanel("menu", this));
+ room.add(AttributeAppender.append("data-room-id", r.getId()));
Droppable<FileItem> wbArea = new Droppable<FileItem>("wb-area")
{
private static final long serialVersionUID = 1L;
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=1783980&r1=1783979&r2=1783980&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 08:56:05 2017
@@ -78,22 +78,32 @@ public class Chat extends Panel {
private static final Logger log =
Red5LoggerFactory.getLogger(Chat.class, webAppRootKey);
private static final String PARAM_MSG_ID = "msgid";
private static final String PARAM_ROOM_ID = "roomid";
- private final AbstractDefaultAjaxBehavior acceptMessage = new
AbstractDefaultAjaxBehavior() {
+ private static final String PARAM_TYPE = "type";
+ private final AbstractDefaultAjaxBehavior chatActivity = new
AbstractDefaultAjaxBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void respond(AjaxRequestTarget target) {
try {
- long msgId =
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
+ String type =
getRequest().getRequestParameters().getParameterValue(PARAM_TYPE).toString(null);
long roomId =
getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
- ChatDao dao = getBean(ChatDao.class);
- ChatMessage m = dao.get(msgId);
- if (m.isNeedModeration() &&
isModerator(getUserId(), roomId)) {
- m.setNeedModeration(false);
- dao.update(m);
- WebSocketHelper.sendRoom(m,
getMessage(Arrays.asList(m)).put("mode", "accept"));
- } else {
- log.error("It seems like we are being
hacked!!!!");
+ if ("accept".equals(type)) {
+ long msgId =
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
+ ChatDao dao = getBean(ChatDao.class);
+ ChatMessage m = dao.get(msgId);
+ if (m.isNeedModeration() &&
isModerator(getUserId(), roomId)) {
+ m.setNeedModeration(false);
+ dao.update(m);
+ WebSocketHelper.sendRoom(m,
getMessage(Arrays.asList(m)).put("mode", "accept"));
+ } else {
+ log.error("It seems like we are
being hacked!!!!");
+ }
+ } else if (type != null &&
type.indexOf("typing") > -1) {
+ WebSocketHelper.sendRoom(roomId
+ , new
JSONObject().put("type", "typing")
+
.put("active", type.indexOf("start") > -1)
+
.put("uid", getUid())
+
.toString());
}
} catch (Exception e) {
log.error("Unexpected exception while accepting
chat message", e);
@@ -101,6 +111,10 @@ public class Chat extends Panel {
}
};
+ private String getUid() {
+ return findParent(MainPanel.class).getClient().getUid(); //TODO
HACK
+ }
+
public JSONObject getMessage(List<ChatMessage> list) {
return getMessage(getUserId(), list);
}
@@ -114,7 +128,7 @@ public class Chat extends Panel {
setOutputMarkupPlaceholderTag(true);
setMarkupId(id);
- add(acceptMessage);
+ add(chatActivity);
add(new ChatForm("sendForm"));
}
@@ -142,7 +156,7 @@ public class Chat extends Panel {
response.render(new
PriorityHeaderItem(JavaScriptHeaderItem.forReference(new
JavaScriptResourceReference(Chat.class, "chat.js"))));
response.render(CssHeaderItem.forReference(EMOTIONS_CSS_REFERENCE));
response.render(CssHeaderItem.forUrl("css/chat.css"));
- response.render(new
PriorityHeaderItem(getNamedFunction("acceptMessage", acceptMessage,
explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID))));
+ response.render(new
PriorityHeaderItem(getNamedFunction("chatActivity", chatActivity,
explicit(PARAM_TYPE), explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID))));
ChatDao dao = getBean(ChatDao.class);
//FIXME limited count should be loaded with "earlier" link
@@ -205,8 +219,7 @@ public class Chat extends Panel {
dao.update(m);
JSONObject msg =
getMessage(Arrays.asList(m));
if (m.getToRoom() != null) {
- String uid =
findParent(MainPanel.class).getClient().getUid(); //TODO HACK
-
getBean(MobileService.class).sendChatMessage(uid, m, getDateFormat()); //let's
send to mobile users
+
getBean(MobileService.class).sendChatMessage(getUid(), m, getDateFormat());
//let's send to mobile users
WebSocketHelper.sendRoom(m, msg);
} else if (m.getToUser() !=
null) {
WebSocketHelper.sendUser(getUserId(), msg.toString());
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=1783980&r1=1783979&r2=1783980&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 08:56:05 2017
@@ -20,7 +20,7 @@ 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>"
+ , acceptTemplate = "<div class='tick om-icon align-right
clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var
e=$(this);chatActivity('accept',e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>"
, infoTemplate = "<div class='user om-icon align-right
clickable' data-user-id='#{userId}' onclick='var
e=$(this);showUserInfo(e.data(\"userId\"));'></div>"
, addTemplate = "<div class='add om-icon align-right clickable'
data-user-id='#{userId}' onclick='var
e=$(this);addContact(e.data(\"userId\"));'></div>"
, messageTemplate = "<div class='new-email om-icon align-right
clickable' data-user-id='#{userId}' onclick='var
e=$(this);privateMessage(e.data(\"userId\"));'></div>"
@@ -31,8 +31,15 @@ var Chat = function() {
, openedHeight = "345px"
, allPrefix = "All"
, roomPrefix = "Room "
- , emoticon = new CSSEmoticon();
-
+ , emoticon = new CSSEmoticon()
+ , typingTimer
+ , doneTypingInterval = 5000 //time in ms, 5 second for example
+ ;
+
+ function doneTyping () {
+ typingTimer = null;
+ chatActivity('typing_stop',
$('.room.container').data('room-id'));
+ }
function emtClick(emoticon) {
var editor = $('#chatMessage .wysiwyg-editor');
editor.html(editor.html() + ' ' + emoticon + ' ');
@@ -94,6 +101,17 @@ var Chat = function() {
openedHeight = ui.size.height + "px";
}
});
+ $('#chatMessage').off().on('input propertychange
paste', function () {
+ var room = $('.room.container');
+ if (room.length) {
+ if (!!typingTimer) {
+ clearTimeout(typingTimer);
+ } else {
+ chatActivity('typing_start',
room.data('room-id'));
+ }
+ typingTimer = setTimeout(doneTyping,
doneTypingInterval);
+ }
+ });
}
, removeTab: function(id) {
$('li[aria-controls="' + id + '"]').remove();
@@ -194,6 +212,11 @@ $(function() {
case "chat":
Chat.addMessage(m);
break;
+ case "typing":
+ if (typeof typingActivity ==
"function") {
+ typingActivity(m.uid,
m.active);
+ }
+ break;
}
}
} catch (err) {
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
Wed Feb 22 08:56:05 2017
@@ -19,9 +19,12 @@
.room.sidebar #busy-indicator {
margin: 8px;
}
-.room.container {
+.room.holder {
width: 100%;
}
+.room.container {
+ height: 100%;
+}
.ui-icon.room.menu.exit {
background-image: url(images/exit_button.png);
background-repeat: no-repeat;
Modified:
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
(original)
+++
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
Wed Feb 22 08:56:05 2017
@@ -30,7 +30,6 @@ import java.util.Set;
import javax.activation.MimetypesFileTypeMap;
-import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.util.string.Strings;
public class StoredFile {
@@ -67,7 +66,7 @@ public class StoredFile {
ext.addAll(pdfExtensions);
ext.addAll(chartExtensions);
StringBuilder sb = new
StringBuilder("audio/*,video/*,image/*,.");
- sb.append(StringUtils.join(ext, ",.")); // TODO java8
String.join("|.", ext);
+ sb.append(String.join("|.", ext));
return sb.toString();
}
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
Wed Feb 22 08:56:05 2017
@@ -20,8 +20,8 @@
-->
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="room container">
- <div wicket:id="roomContainer" style="height: 100%">
+ <div class="room holder">
+ <div class="room container" wicket:id="roomContainer">
<div class="room menu" wicket:id="menu"></div>
<div class="room sidebar left"
wicket:id="sidebar"></div>
<div wicket:id="wb-area" class="room wb area">
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
Wed Feb 22 08:56:05 2017
@@ -63,6 +63,7 @@ import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import
org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.markup.head.IHeaderResponse;
@@ -161,6 +162,7 @@ public class RoomPanel extends BasePanel
Component eventDetail = new
WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
room.add(menu = new RoomMenuPanel("menu", this));
+ room.add(AttributeAppender.append("data-room-id", r.getId()));
Droppable<FileItem> wbArea = new Droppable<FileItem>("wb-area")
{
private static final long serialVersionUID = 1L;
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=1783980&r1=1783979&r2=1783980&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 08:56:05 2017
@@ -78,22 +78,32 @@ public class Chat extends Panel {
private static final Logger log =
Red5LoggerFactory.getLogger(Chat.class, webAppRootKey);
private static final String PARAM_MSG_ID = "msgid";
private static final String PARAM_ROOM_ID = "roomid";
- private final AbstractDefaultAjaxBehavior acceptMessage = new
AbstractDefaultAjaxBehavior() {
+ private static final String PARAM_TYPE = "type";
+ private final AbstractDefaultAjaxBehavior chatActivity = new
AbstractDefaultAjaxBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void respond(AjaxRequestTarget target) {
try {
- long msgId =
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
+ String type =
getRequest().getRequestParameters().getParameterValue(PARAM_TYPE).toString(null);
long roomId =
getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
- ChatDao dao = getBean(ChatDao.class);
- ChatMessage m = dao.get(msgId);
- if (m.isNeedModeration() &&
isModerator(getUserId(), roomId)) {
- m.setNeedModeration(false);
- dao.update(m);
- WebSocketHelper.sendRoom(m,
getMessage(Arrays.asList(m)).put("mode", "accept"));
- } else {
- log.error("It seems like we are being
hacked!!!!");
+ if ("accept".equals(type)) {
+ long msgId =
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
+ ChatDao dao = getBean(ChatDao.class);
+ ChatMessage m = dao.get(msgId);
+ if (m.isNeedModeration() &&
isModerator(getUserId(), roomId)) {
+ m.setNeedModeration(false);
+ dao.update(m);
+ WebSocketHelper.sendRoom(m,
getMessage(Arrays.asList(m)).put("mode", "accept"));
+ } else {
+ log.error("It seems like we are
being hacked!!!!");
+ }
+ } else if (type != null &&
type.indexOf("typing") > -1) {
+ WebSocketHelper.sendRoom(roomId
+ , new
JSONObject().put("type", "typing")
+
.put("active", type.indexOf("start") > -1)
+
.put("uid", getUid())
+
.toString());
}
} catch (Exception e) {
log.error("Unexpected exception while accepting
chat message", e);
@@ -101,6 +111,10 @@ public class Chat extends Panel {
}
};
+ private String getUid() {
+ return findParent(MainPanel.class).getClient().getUid(); //TODO
HACK
+ }
+
public JSONObject getMessage(List<ChatMessage> list) {
return getMessage(getUserId(), list);
}
@@ -114,7 +128,7 @@ public class Chat extends Panel {
setOutputMarkupPlaceholderTag(true);
setMarkupId(id);
- add(acceptMessage);
+ add(chatActivity);
add(new ChatForm("sendForm"));
}
@@ -142,7 +156,7 @@ public class Chat extends Panel {
response.render(new
PriorityHeaderItem(JavaScriptHeaderItem.forReference(new
JavaScriptResourceReference(Chat.class, "chat.js"))));
response.render(CssHeaderItem.forReference(EMOTIONS_CSS_REFERENCE));
response.render(CssHeaderItem.forUrl("css/chat.css"));
- response.render(new
PriorityHeaderItem(getNamedFunction("acceptMessage", acceptMessage,
explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID))));
+ response.render(new
PriorityHeaderItem(getNamedFunction("chatActivity", chatActivity,
explicit(PARAM_TYPE), explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID))));
ChatDao dao = getBean(ChatDao.class);
//FIXME limited count should be loaded with "earlier" link
@@ -205,8 +219,7 @@ public class Chat extends Panel {
dao.update(m);
JSONObject msg =
getMessage(Arrays.asList(m));
if (m.getToRoom() != null) {
- String uid =
findParent(MainPanel.class).getClient().getUid(); //TODO HACK
-
getBean(MobileService.class).sendChatMessage(uid, m, getDateFormat()); //let's
send to mobile users
+
getBean(MobileService.class).sendChatMessage(getUid(), m, getDateFormat());
//let's send to mobile users
WebSocketHelper.sendRoom(m, msg);
} else if (m.getToUser() !=
null) {
WebSocketHelper.sendUser(getUserId(), msg.toString());
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=1783980&r1=1783979&r2=1783980&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 08:56:05 2017
@@ -20,7 +20,7 @@ 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>"
+ , acceptTemplate = "<div class='tick om-icon align-right
clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var
e=$(this);chatActivity('accept',e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>"
, infoTemplate = "<div class='user om-icon align-right
clickable' data-user-id='#{userId}' onclick='var
e=$(this);showUserInfo(e.data(\"userId\"));'></div>"
, addTemplate = "<div class='add om-icon align-right clickable'
data-user-id='#{userId}' onclick='var
e=$(this);addContact(e.data(\"userId\"));'></div>"
, messageTemplate = "<div class='new-email om-icon align-right
clickable' data-user-id='#{userId}' onclick='var
e=$(this);privateMessage(e.data(\"userId\"));'></div>"
@@ -31,8 +31,15 @@ var Chat = function() {
, openedHeight = "345px"
, allPrefix = "All"
, roomPrefix = "Room "
- , emoticon = new CSSEmoticon();
-
+ , emoticon = new CSSEmoticon()
+ , typingTimer
+ , doneTypingInterval = 5000 //time in ms, 5 second for example
+ ;
+
+ function doneTyping () {
+ typingTimer = null;
+ chatActivity('typing_stop',
$('.room.container').data('room-id'));
+ }
function emtClick(emoticon) {
var editor = $('#chatMessage .wysiwyg-editor');
editor.html(editor.html() + ' ' + emoticon + ' ');
@@ -94,6 +101,17 @@ var Chat = function() {
openedHeight = ui.size.height + "px";
}
});
+ $('#chatMessage').off().on('input propertychange
paste', function () {
+ var room = $('.room.container');
+ if (room.length) {
+ if (!!typingTimer) {
+ clearTimeout(typingTimer);
+ } else {
+ chatActivity('typing_start',
room.data('room-id'));
+ }
+ typingTimer = setTimeout(doneTyping,
doneTypingInterval);
+ }
+ });
}
, removeTab: function(id) {
$('li[aria-controls="' + id + '"]').remove();
@@ -194,6 +212,11 @@ $(function() {
case "chat":
Chat.addMessage(m);
break;
+ case "typing":
+ if (typeof typingActivity ==
"function") {
+ typingActivity(m.uid,
m.active);
+ }
+ break;
}
}
} catch (err) {
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1783980&r1=1783979&r2=1783980&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
Wed Feb 22 08:56:05 2017
@@ -19,9 +19,12 @@
.room.sidebar #busy-indicator {
margin: 8px;
}
-.room.container {
+.room.holder {
width: 100%;
}
+.room.container {
+ height: 100%;
+}
.ui-icon.room.menu.exit {
background-image: url(images/exit_button.png);
background-repeat: no-repeat;