diff --git a/html5/verto/verto_communicator/src/css/verto.css b/html5/verto/verto_communicator/src/css/verto.css index 4e0175d583..89ffc0e7ca 100644 --- a/html5/verto/verto_communicator/src/css/verto.css +++ b/html5/verto/verto_communicator/src/css/verto.css @@ -21,7 +21,6 @@ body { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; - width: 160px; display: inline-block; } @@ -604,12 +603,24 @@ body .modal-body .btn-group .btn.active { transition-delay:0s; } + +#incall .dropdown-menu .selected { + background-color: #ccc; + color: white; +} + +#incall .dropdown-menu .selected:hover { + background-color: #ccc; + color: white; + cursor: pointer; +} + #incall .video-hover-buttons .btn-group .dropdown-menu { max-height: 200px; overflow: auto; } -#incall .video-hover-buttons .btn-group ul li a:hover { +#incall .video-hover-buttons .btn-group ul li a:not(.selected):hover { background-color: #EEE; cursor: pointer; } @@ -906,13 +917,11 @@ body .modal-body .btn-group .btn.active { } .members-name { - width: 160px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + width: 140px; } .members-number { + width: 140px; font-size: 10px; } @@ -970,6 +979,7 @@ body .modal-body .btn-group .btn.active { display: inline-block; line-height: 16px; margin-top: -3px; + width: 140px; } .chat-members .chat-members-status i { @@ -1018,6 +1028,17 @@ body .modal-body .btn-group .btn.active { vertical-align: -2px; } +.chat-members .resevartion-menu .icon { + color: #C5C5C5; +} + +.chat-members .resevartion-menu .dropdown-menu { + min-width: 0; +} + +.chat-members .resevartion-menu .dropdown-menu .selected { + font-weight: bold; +} /*.chat-messages {*/ /*border-top: 1px solid #E5E5E5;*/ diff --git a/html5/verto/verto_communicator/src/partials/chat.html b/html5/verto/verto_communicator/src/partials/chat.html index 23797d0b51..9cefd72615 100644 --- a/html5/verto/verto_communicator/src/partials/chat.html +++ b/html5/verto/verto_communicator/src/partials/chat.html @@ -23,12 +23,12 @@

-
{{ member.name }}
+
{{ member.name }}
({{ member.number }})
Floor
-
Presenter
+
{{ member.status.video.reservationID }}
Screen Share

@@ -57,12 +57,6 @@ Mute/Unmute Video -
  • - - - Presenter - -
  • @@ -103,6 +97,21 @@ +
    + +
    + diff --git a/html5/verto/verto_communicator/src/partials/video_call.html b/html5/verto/verto_communicator/src/partials/video_call.html index 9633149c77..7fcb9b71b2 100644 --- a/html5/verto/verto_communicator/src/partials/video_call.html +++ b/html5/verto/verto_communicator/src/partials/video_call.html @@ -31,7 +31,7 @@ diff --git a/html5/verto/verto_communicator/src/vertoControllers/controllers/ChatController.js b/html5/verto/verto_communicator/src/vertoControllers/controllers/ChatController.js index 3129db87c7..c990e0d5c2 100644 --- a/html5/verto/verto_communicator/src/vertoControllers/controllers/ChatController.js +++ b/html5/verto/verto_communicator/src/vertoControllers/controllers/ChatController.js @@ -49,6 +49,39 @@ }); }); + + $rootScope.$on('changedVideoLayout', function(event, layout) { + $scope.resIDs = getResByLayout(layout); + + // remove resIDs param to clear every members resID. + // passing $scope.resIDs results in preserving resIDs compatible + // with the current layout + clearMembersResID($scope.resIDs); + }); + + $rootScope.$on('conference.canvasInfo', function(event, data) { + $scope.currentLayout = data[0].layoutName; + $scope.resIDs = getResByLayout($scope.currentLayout); + }); + + function getResByLayout(layout) { + var layoutsData = verto.data.confLayoutsData; + for (var i = 0; i < layoutsData.length; i++) { + if (layoutsData[i].name === layout) { + return layoutsData[i].resIDS; + } + } + } + + // @preserve - a array of values to be preserved + function clearMembersResID(preserve) { + $scope.members.forEach(function(member) { + var resID = member.status.video.reservationID; + if (preserve && preserve.indexOf(resID) !== -1) return; + $scope.confResID(member.id, resID); + }); + }; + function findMemberByUUID(uuid) { var found = false; for (var idx in $scope.members) { @@ -171,6 +204,11 @@ verto.data.conf.presenter(memberID); }; + $scope.confResID = function(memberID, resID) { + console.log('Set', memberID, 'to', resID); + verto.setResevartionId(memberID, resID); + }; + $scope.confVideoFloor = function(memberID) { console.log('$scope.confVideoFloor'); verto.data.conf.videoFloor(memberID); diff --git a/html5/verto/verto_communicator/src/vertoControllers/controllers/InCallController.js b/html5/verto/verto_communicator/src/vertoControllers/controllers/InCallController.js index 93e510d5e3..4285ace586 100644 --- a/html5/verto/verto_communicator/src/vertoControllers/controllers/InCallController.js +++ b/html5/verto/verto_communicator/src/vertoControllers/controllers/InCallController.js @@ -73,6 +73,8 @@ $scope.confChangeVideoLayout = function(layout) { verto.data.conf.setVideoLayout(layout); + $scope.videoLayout = layout; + $rootScope.$emit('changedVideoLayout', layout); }; $scope.confChangeSpeaker = function(speakerId) { diff --git a/html5/verto/verto_communicator/src/vertoService/services/vertoService.js b/html5/verto/verto_communicator/src/vertoService/services/vertoService.js index 9bf54c3cbd..4a46b09066 100644 --- a/html5/verto/verto_communicator/src/vertoService/services/vertoService.js +++ b/html5/verto/verto_communicator/src/vertoService/services/vertoService.js @@ -391,7 +391,27 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora if (message.action == 'response') { // This is a response with the video layouts list. if (message['conf-command'] == 'list-videoLayouts') { - data.confLayouts = message.responseData.sort(); + var rdata = []; + + for (var i in message.responseData) { + rdata.push(message.responseData[i].name); + } + + var options = rdata.sort(function(a, b) { + var ga = a.substring(0, 6) == "group:" ? true : false; + var gb = b.substring(0, 6) == "group:" ? true : false; + + if ((ga || gb) && ga != gb) { + return ga ? -1 : 1; + } + + return ( ( a == b ) ? 0 : ( ( a > b ) ? 1 : -1 ) ); + }); + data.confLayoutsData = message.responseData; + data.confLayouts = options; + } else if (message['conf-command'] == 'canvasInfo') { + data.canvasInfo = message.responseData; + $rootScope.$emit('conference.canvasInfo', message.responseData); } else { $rootScope.$emit('conference.broadcast', message); } @@ -402,6 +422,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora if (data.confRole == "moderator") { console.log('>>> conf.listVideoLayouts();'); conf.listVideoLayouts(); + conf.modCommand('canvasInfo'); } data.conf = conf; @@ -913,6 +934,12 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora data.conf.sendChat(message, "message"); }, /* + * Method is used to set a member's resevartion Id. + */ + setResevartionId: function(memberID, resID) { + data.conf.modCommand('vid-res-id', memberID, resID); + }, + /* * Method is used to send user2user chats. * VC does not yet support that. */