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 2020/04/11 15:36:37 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2250] moderated chat seems to work

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d3d756  [OPENMEETINGS-2250] moderated chat seems to work
4d3d756 is described below

commit 4d3d75690ccfd8d910b1f404dc81d093e9ec5dd2
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Apr 11 22:36:23 2020 +0700

    [OPENMEETINGS-2250] moderated chat seems to work
---
 .../openmeetings/web/room/raw-video-manager.js     |  6 +--
 .../apache/openmeetings/web/user/chat/Chat.html    | 27 ++++------
 .../apache/openmeetings/web/user/chat/Chat.java    |  4 +-
 .../apache/openmeetings/web/user/chat/raw-chat.js  | 58 ++++++++++++++++------
 openmeetings-web/src/main/webapp/css/raw-chat.css  |  4 ++
 5 files changed, 62 insertions(+), 37 deletions(-)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index cffa437..9313770 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -68,7 +68,7 @@ var VideoManager = (function() {
 					_closeV($(this));
 				});
 				if (share.data('cuid') === m.uid) {
-					share.off('click').hide();
+					share.off().hide();
 				}
 				break;
 			case 'broadcastStopped':
@@ -206,7 +206,7 @@ var VideoManager = (function() {
 						.data('cuid', sd.cuid)
 						.show()
 					, 'btn-outline-warning', 10);
-				share.tooltip().off('click').click(function() {
+				share.tooltip().off().click(function() {
 					_playSharing(sd, iceServers);
 				});
 				if (Room.getOptions().autoOpenSharing === true) {
@@ -225,7 +225,7 @@ var VideoManager = (function() {
 			_closeV(v);
 		}
 		if (!showShareBtn && uid === share.data('uid')) {
-			share.off('click').hide();
+			share.off().hide();
 		}
 	}
 	function _find(uid) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
index 67f4d5c..7bd1581 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.html
@@ -41,30 +41,25 @@
 		<div id="chat-date-template" class='date-row'></div>
 		<div id="chat-msg-template" class='msg-row'>
 			<div class='user-row'>
-				<div class='from'></div>
-				<span class='time'></span>
+				<div class='from align-left'></div>
+				<span class='time align-right'></span>
 				<div class="clear"></div>
 			</div>
-			<div class='msg'></div>
+			<div class='msg align-left'></div>
 			<div class="clear"></div>
 		</div>
-		<div id="chat-accept-template" class='tick om-icon clickable' wicket:message="title:1190"
-			onclick='const e=$(this);chatActivity("accept", e.data("roomid"), e.data("msgid")); e.parent().remove();'></div>
+		<div id="chat-actions-short-template" class='user clickable' wicket:message="title:1167"><i class="fas fa-address-card"></i></div>
+		<div id="chat-actions-others-template">
+			<div class='add clickable' wicket:message="title:1186"><i class="fas fa-plus-circle"></i></div>
+			<div class='new-email clickable' wicket:message="title:1253"><i class="fas fa-envelope"></i></div>
+			<div class='invite clickable' wicket:message="title:1131"><i class="fas fa-link"></i></div>
+		</div>
+		<div id="chat-actions-accept-template" class='accept clickable' wicket:message="title:1190"><i class="fas fa-check"></i></div>
 		<button id="chat-close-block" class="btn btn-sm btn-outline-secondary close-chat" wicket:message="title:85">
 			<i class="fas fa-times"></i>
 			<span class="sr-only"><wicket:message key="85"/></span>
 		</button>
-		<div id="chat-msg-area-template" class="messageArea bg-white tab-pane h-100" role="tabpanel">
-			<div class="clear icons actions short">
-				<div class='user clickable' wicket:message="title:1167"><i class="fas fa-address-card"></i></div>
-			</div>
-			<div class="clear icons actions full">
-				<div class='user clickable' wicket:message="title:1167"><i class="fas fa-address-card"></i></div>
-				<div class='add clickable' wicket:message="title:1186"><i class="fas fa-plus-circle"></i></div>
-				<div class='new-email clickable' wicket:message="title:1253"><i class="fas fa-envelope"></i></div>
-				<div class='invite clickable' wicket:message="title:1131"><i class="fas fa-link"></i></div>
-			</div>
-		</div>
+		<div id="chat-msg-area-template" class="messageArea bg-white tab-pane h-100" role="tabpanel"></div>
 	</div>
 </wicket:panel>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
index d31175e..de8c9ca 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
@@ -63,8 +63,8 @@ import com.github.openjson.JSONObject;
 public class Chat extends Panel {
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = LoggerFactory.getLogger(Chat.class);
-	private static final String PARAM_MSG_ID = "msgid";
-	private static final String PARAM_ROOM_ID = "roomid";
+	private static final String PARAM_MSG_ID = "msgId";
+	private static final String PARAM_ROOM_ID = "roomId";
 	private static final String PARAM_TYPE = "type";
 	private boolean showDashboardChat;
 	private final AbstractDefaultAjaxBehavior chatActivity = new AbstractDefaultAjaxBehavior() {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
index 30b90a4..94463a3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
@@ -1,8 +1,6 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 var Chat = function() {
-	const align = 'align-left'
-		, alignIco = 'align-right'
-		, msgIdPrefix = 'chat-msg-id-'
+	const msgIdPrefix = 'chat-msg-id-'
 		, closedSize = 20
 		, closedSizePx = closedSize + "px"
 		, emoticon = new CSSEmoticon()
@@ -187,7 +185,7 @@ var Chat = function() {
 				});
 			__setCssHeight(closedSize);
 		}
-		ctrl.off('click').click(Chat.toggle);
+		ctrl.off().click(Chat.toggle);
 		$('#chatMessage').off().on('input propertychange paste', function () {
 			const room = $('.room-block .room-container');
 			if (room.length) {
@@ -229,32 +227,51 @@ var Chat = function() {
 			link.append(OmUtil.tmpl('#chat-close-block'));
 		}
 		tabs.find('.nav.nav-tabs').append(li);
-		tabs.find('.tab-content').append(OmUtil.tmpl('#chat-msg-area-template', id));
+		const msgArea = OmUtil.tmpl('#chat-msg-area-template', id);
+		tabs.find('.tab-content').append(msgArea);
+		msgArea.append($('<div class="clear icons actions align-left">').addClass('short')
+				.append(OmUtil.tmpl('#chat-actions-short-template')));
+		msgArea.append($('<div class="clear icons actions align-left">').addClass('short-mod')
+				.append(OmUtil.tmpl('#chat-actions-short-template'))
+				.append(OmUtil.tmpl('#chat-actions-accept-template')));
+		msgArea.append($('<div class="clear icons actions align-left">').addClass('full')
+				.append(OmUtil.tmpl('#chat-actions-short-template'))
+				.append(OmUtil.tmpl('#chat-actions-others-template').children().clone()));
+		msgArea.append($('<div class="clear icons actions align-left">').addClass('full-mod')
+				.append(OmUtil.tmpl('#chat-actions-short-template'))
+				.append(OmUtil.tmpl('#chat-actions-others-template').children().clone())
+				.append(OmUtil.tmpl('#chat-actions-accept-template')));
 		const actions = __hideActions();
-		actions.addClass(align);
-		actions.find('.user').off('click').click(function() {
+		actions.find('.user').off().click(function() {
 			const e = $(this).parent();
 			showUserInfo(e.data("userId"));
 		});
-		actions.find('.add').off('click').click(function() {
+		actions.find('.add').off().click(function() {
 			const e = $(this).parent();
 			addContact(e.data("userId"));
 		});
-		actions.find('.new-email').off('click').click(function() {
+		actions.find('.new-email').off().click(function() {
 			const e = $(this).parent();
 			privateMessage(e.data("userId"));
 		});
-		actions.find('.invite').off('click').click(function() {
+		actions.find('.invite').off().click(function() {
 			const e = $(this).parent();
 			inviteUser(e.data("userId"));
 		});
+		actions.find('.accept').off().click(function() {
+			const e = $(this).parent()
+				, msgId = e.data('msgId');
+			chatActivity('accept', e.data('roomId'), msgId);
+			__hideActions();
+			$('#chat-msg-id-' + msgId).remove();
+		});
 		activateTab(id);
 	}
 	function __hideActions() {
 		return $('#chat .tab-content .messageArea .icons').hide();
 	}
 	function __getActions(row) {
-		return row.closest('.messageArea').find('.actions.' + ('full' === row.data('actions') ? 'full' : 'short'));
+		return row.closest('.messageArea').find('.actions.' + row.data('actions'));
 	}
 	function _addMessage(m) {
 		if ($('#chat').length > 0 && m && m.type === "chat") {
@@ -264,22 +281,30 @@ var Chat = function() {
 				if (cm.from.id !== userId) {
 					notify = true;
 				}
+				const actions = ('full' === cm.actions ? 'full' : 'short') + (cm.needModeration ? '-mod' : '');
 				msg = OmUtil.tmpl('#chat-msg-template', msgIdPrefix + cm.id)
-				msg.find('.user-row')
+				const row = msg.find('.user-row')
 					.data('userId', cm.from.id)
-					.data('actions', cm.actions)
+					.data('actions', actions)
 					.mouseenter(function() {
 						__hideActions();
 						__getActions($(this))
 							.data('userId', $(this).data('userId'))
+							.data('roomId', $(this).data('roomId'))
+							.data('msgId', $(this).data('msgId'))
 							.css('top', ($(this).closest('.msg-row')[0].offsetTop + 20) + 'px')
 							.show();
 					});
+				if (cm.needModeration) {
+					row.parent().addClass('need-moderation');
+					row.data('roomId', cm.scope.substring(9))
+						.data('msgId', cm.id);
+				}
 				area.mouseleave(function() {
 					__hideActions();
 				});
-				msg.find('.from').addClass(align).data('user-id', cm.from.id).html(cm.from.name || cm.from.displayName);
-				msg.find('.time').addClass(alignIco).html(cm.time).attr('title', cm.sent);
+				msg.find('.from').data('user-id', cm.from.id).html(cm.from.name || cm.from.displayName);
+				msg.find('.time').html(cm.time).attr('title', cm.sent);
 				if (!area.length) {
 					_addTab(cm.scope, cm.scopeName);
 					area = $('#' + cm.scope);
@@ -297,7 +322,7 @@ var Chat = function() {
 				area.append(msg);
 				msg.find('.user-row')[0].style.backgroundImage = 'url(' + (!!cm.from.img ? cm.from.img : './profile/' + cm.from.id + '?anticache=' + Date.now()) + ')';
 
-				msg.find('.msg').addClass(align).html(emoticon.emoticonize(!!cm.message ? cm.message : ""));
+				msg.find('.msg').html(emoticon.emoticonize(!!cm.message ? cm.message : ""));
 				if (btm) {
 					_scrollDown(area);
 				}
@@ -344,6 +369,7 @@ var Chat = function() {
 				p.resizable("option", "disabled", false);
 			}
 			p.removeClass('closed').animate(opts, 1000, function() {
+				__hideActions();
 				p.removeClass('closed');
 				p.css({'height': '', 'width': ''});
 				if (typeof(handler) === 'function') {
diff --git a/openmeetings-web/src/main/webapp/css/raw-chat.css b/openmeetings-web/src/main/webapp/css/raw-chat.css
index 4f847e8..fc5d844 100644
--- a/openmeetings-web/src/main/webapp/css/raw-chat.css
+++ b/openmeetings-web/src/main/webapp/css/raw-chat.css
@@ -49,6 +49,9 @@
 .main.room #chatPanel.closed #chatPopup .control.block i::before {
 	content: "\f104";
 }
+#chat .messageArea .msg-row.need-moderation {
+	background-color: var(--warning);
+}
 #chat .messageArea .time {
 	margin-right: 5px;
 	font-style: italic;
@@ -69,6 +72,7 @@
 #chat .messageArea .icons div {
 	display: inline-block;
 	vertical-align: super;
+	margin-right: 2px;
 }
 html[dir="rtl"] #chat .messageArea .icons {
 	left: initial;