diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserConnectedToGlobalAudioMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserConnectedToGlobalAudioMsgHdlr.scala index 0e9108e9b2c12d5da24f7cbda4dff107e1530371..ffe13b6b9dc56bc0f1bc33563b081fd6cac9959e 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserConnectedToGlobalAudioMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UserConnectedToGlobalAudioMsgHdlr.scala @@ -29,6 +29,7 @@ trait UserConnectedToGlobalAudioMsgHdlr { for { user <- Users2x.findWithIntId(liveMeeting.users2x, msg.body.userId) } yield { + val vu = VoiceUserState(intId = user.intId, voiceUserId = user.intId, callingWith = "flash", callerName = user.name, callerNum = user.name, muted = true, talking = false, listenOnly = true) VoiceUsers.add(liveMeeting.voiceUsers, vu) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserJoinedVoiceConfEvtMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserJoinedVoiceConfEvtMsgHdlr.scala index 5fde42e71140ef84db27cb57a0d9cdb2d04a7580..15e35a59bf57d996fe77dee9856fa304bccf7379 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserJoinedVoiceConfEvtMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserJoinedVoiceConfEvtMsgHdlr.scala @@ -41,8 +41,9 @@ trait UserJoinedVoiceConfEvtMsgHdlr extends BreakoutHdlrHelpers { outGW.send(msgEvent) } - val voiceUserState = VoiceUserState(intId, voiceUserId, callingWith, callerIdName, callerIdNum, muted, talking, listenOnly = false) + val isListenOnly = if (callerIdName.startsWith("LISTENONLY")) true else false + val voiceUserState = VoiceUserState(intId, voiceUserId, callingWith, callerIdName, callerIdNum, muted, talking, listenOnly = isListenOnly) VoiceUsers.add(liveMeeting.voiceUsers, voiceUserState) broadcastEvent(voiceUserState) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala index 45be25433044093c9aed82ff328b73da8543e6f5..f9f11212f159a0ee1be9b1ef1795b2d1bb49eb8f 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala @@ -37,7 +37,6 @@ object VoiceUsers { } yield { val vu = u.modify(_.muted).setTo(muted) .modify(_.talking).setTo(false) - .modify(_.listenOnly).setTo(false) users.save(vu) vu } @@ -49,7 +48,6 @@ object VoiceUsers { } yield { val vu = u.modify(_.muted).setTo(false) .modify(_.talking).setTo(talkng) - .modify(_.listenOnly).setTo(false) users.save(vu) vu } @@ -61,7 +59,6 @@ object VoiceUsers { } yield { val vu = u.modify(_.muted).setTo(true) .modify(_.talking).setTo(false) - .modify(_.listenOnly).setTo(true) users.save(vu) vu } @@ -73,7 +70,6 @@ object VoiceUsers { } yield { val vu = u.modify(_.muted).setTo(false) .modify(_.talking).setTo(false) - .modify(_.listenOnly).setTo(false) users.save(vu) vu } diff --git a/bigbluebutton-client/branding/default/style/css/V2Theme.css b/bigbluebutton-client/branding/default/style/css/V2Theme.css index 0c6e0511b405124ae1e4c42a84202f6a874c2e87..41fe87c6d38f8da597e390999d0f49dd63da7a3a 100755 --- a/bigbluebutton-client/branding/default/style/css/V2Theme.css +++ b/bigbluebutton-client/branding/default/style/css/V2Theme.css @@ -143,7 +143,7 @@ phonecomponents|MuteMeButton { .toolbarMainBox { backgroundColor : #FFFFFF; - paddingTop : 6; + paddingTop : 0; paddingBottom : 6; } @@ -156,7 +156,7 @@ phonecomponents|MuteMeButton { } .topBoxStyle { - paddingTop : 0; + paddingTop : 6; paddingBottom : 0; paddingLeft : 8; paddingRight : 8; @@ -429,7 +429,7 @@ mx|Button { borderAlphaUp : 1; borderAlphaOver : 1; borderAlphaDown : 1; - borderAlphaDisabled : 1; + borderAlphaDisabled : 0.25; borderThickness : 1; @@ -546,6 +546,10 @@ views|BrowserPermissionHelper { //------------------------------ */ +views|ClientStatusWindow { + horizontalAlign : right; +} + views|ClientStatusItemRenderer { iconSuccess : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Success"); iconWarning : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Warning"); @@ -636,7 +640,7 @@ chat|AddChatTabBox { } .chatOptionsLabel { - fontSize : 14; + fontSize : 14; } .chatMessageListStyle { @@ -911,6 +915,7 @@ views|LockSettings { */ views|MainApplicationShell { + borderStyle : none; paddingBottom : 0; verticalGap : 0; } @@ -1063,6 +1068,35 @@ views|NetworkStatsWindow { iconRefresh : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Refresh"); } +/* +//------------------------------ +// NumericStepper +//------------------------------ +*/ + +mx|NumericStepper { + /* Normal state */ + fillColorUp : #FFFFFF; + fillColorOver : #CDD4DB; + fillColorDown : #ACB2B7; + fillColorDisabled : #F0F2F6; + borderColorUp : #CDD4DB; + borderColorOver : #1070D7; + borderColorDown : #0A5EAC; + borderColorDisabled : #CDD4DB; + + /* Icon states */ + iconColor : #4E5A66; + iconColorOver : #1070D7; + iconColorDown : #4E5A66; + + borderThickness : 1; + + /* Skins */ + downArrowSkin : ClassReference("org.bigbluebutton.skins.NumericStepperDownSkin"); + upArrowSkin : ClassReference("org.bigbluebutton.skins.NumericStepperUpSkin"); +} + /* //------------------------------ // PopUpButton @@ -1581,6 +1615,9 @@ users|StatusItemRenderer { iconMoodThumbsUp : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_ThumbsUp"); iconMoodThumbsDown : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_ThumbsDown"); iconMoodApplause : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Applause"); + verticalAlign : middle; + horizontalAlign : center; + horizontalGap : 2; } users|MediaItemRenderer { @@ -1596,7 +1633,7 @@ users|MediaItemRenderer { iconEject : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Eject"); glowFilterColor : #1070D7; verticalAlign : middle; - horizontalGap : 8; + horizontalGap : 2; horizontalAlign : center; } diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as index 17869687a4fd46b750df112b26f0d5871aa91337..2449dea7b3006977b5b045564e4639a1ba51e657 100644 --- a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as +++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as @@ -22,24 +22,6 @@ package org.bigbluebutton.skins { public class ButtonSkin extends Border { - //-------------------------------------------------------------------------- - // - // Constructor - // - //-------------------------------------------------------------------------- - - /** - * Constructor. - * - * @langversion 3.0 - * @playerversion Flash 9 - * @playerversion AIR 1.1 - * @productversion Flex 3 - */ - public function ButtonSkin() { - super(); - } - //-------------------------------------------------------------------------- // // Overridden properties diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperDownSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperDownSkin.as new file mode 100644 index 0000000000000000000000000000000000000000..6b0456bb1a53f86c1e8c5d9441cfeb33efef07a5 --- /dev/null +++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperDownSkin.as @@ -0,0 +1,166 @@ +/** + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2017 BigBlueButton Inc. and by respective authors (see below). + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 3.0 of the License, or (at your option) any later + * version. + * + * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. + * + */ + +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package org.bigbluebutton.skins { + import flash.display.Graphics; + + import mx.skins.Border; + + public class NumericStepperDownSkin extends Border { + + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // measuredWidth + //---------------------------------- + + /** + * @private + */ + override public function get measuredWidth():Number { + return 19; + } + + //---------------------------------- + // measuredHeight + //---------------------------------- + + /** + * @private + */ + override public function get measuredHeight():Number { + return 11; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override protected function updateDisplayList(w:Number, h:Number):void { + super.updateDisplayList(w, h); + + var borderColorUp:uint = getStyle("borderColorUp"); + var borderColorOver:uint = getStyle("borderColorOver"); + var borderColorDown:uint = getStyle("borderColorDown"); + var borderColorDisabled:uint = getStyle("borderColorDisabled"); + + var borderThickness:uint = getStyle("borderThickness"); + + var fillColorUp:uint = getStyle("fillColorUp"); + var fillColorOver:uint = getStyle("fillColorOver"); + var fillColorDown:uint = getStyle("fillColorDown"); + var fillColorDisabled:uint = getStyle("fillColorDisabled"); + + // User-defined styles. + var arrowColor:uint = getStyle("iconColor"); + var arrowColorOver:uint = getStyle("iconColorOver"); + var arrowColorDown:uint = getStyle("iconColorDown"); + + var cornerRadius:Number = getStyle("cornerRadius"); + + var cr:Object = {tl: 0, tr: 0, bl: 0, br: cornerRadius}; + var cr1:Object = {tl: 0, tr: 0, bl: 0, br: Math.max(cornerRadius - 1, 0)}; + + // Draw the background and border. + var g:Graphics = graphics; + + g.clear(); + + switch (name) { + case "downArrowUpSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorUp, 1, null, null, null, {x: 1, y: 0, w: w - 2, h: h - 1, r: cr1}); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1); + + break; + } + + case "downArrowOverSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorOver, 1, null, null, null, {x: 1, y: 0, w: w - 2, h: h - 1, r: cr1}); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorOver, 1, null); + + break; + } + + case "downArrowDownSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorDown, 1); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDown, 1); + + break; + } + + case "downArrowDisabledSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorDisabled, 0.5, null, null, null, {x: 1, y: 0, w: w - 2, h: h - 1, r: cr1}); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 0.5, null); + + arrowColor = getStyle("disabledIconColor"); + break; + } + } + + // Draw the arrow. + g.beginFill(arrowColor); + g.moveTo(w / 2, h / 2 + 1.5); + g.lineTo(w / 2 - 3.5, h / 2 - 2.5); + g.lineTo(w / 2 + 3.5, h / 2 - 2.5); + g.lineTo(w / 2, h / 2 + 1.5); + g.endFill(); + } + } +} + diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperUpSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperUpSkin.as new file mode 100644 index 0000000000000000000000000000000000000000..26f2938c3ddd4f7ecd68032017dafff338647ccd --- /dev/null +++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperUpSkin.as @@ -0,0 +1,165 @@ +/** + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2017 BigBlueButton Inc. and by respective authors (see below). + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 3.0 of the License, or (at your option) any later + * version. + * + * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. + * + */ + +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package org.bigbluebutton.skins { + import flash.display.Graphics; + + import mx.skins.Border; + + public class NumericStepperUpSkin extends Border { + + //-------------------------------------------------------------------------- + // + // Overridden properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // measuredWidth + //---------------------------------- + + /** + * @private + */ + override public function get measuredWidth():Number { + return 19; + } + + //---------------------------------- + // measuredHeight + //---------------------------------- + + /** + * @private + */ + override public function get measuredHeight():Number { + return 11; + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + override protected function updateDisplayList(w:Number, h:Number):void { + super.updateDisplayList(w, h); + + var borderColorUp:uint = getStyle("borderColorUp"); + var borderColorOver:uint = getStyle("borderColorOver"); + var borderColorDown:uint = getStyle("borderColorDown"); + var borderColorDisabled:uint = getStyle("borderColorDisabled"); + + var borderThickness:uint = getStyle("borderThickness"); + + var fillColorUp:uint = getStyle("fillColorUp"); + var fillColorOver:uint = getStyle("fillColorOver"); + var fillColorDown:uint = getStyle("fillColorDown"); + var fillColorDisabled:uint = getStyle("fillColorDisabled"); + + // User-defined styles. + var arrowColor:uint = getStyle("iconColor"); + var arrowColorOver:uint = getStyle("iconColorOver"); + var arrowColorDown:uint = getStyle("iconColorDown"); + + var cornerRadius:Number = getStyle("cornerRadius"); + + var cr:Object = {tl: 0, tr: cornerRadius, bl: 0, br: 0}; + var cr1:Object = {tl: 0, tr: Math.max(cornerRadius - 1, 0), bl: 0, br: 0}; + + // Draw the background and border. + var g:Graphics = graphics; + + g.clear(); + + switch (name) { + case "upArrowUpSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorUp, 1, null, null, null, {x: 1, y: 1, w: w - 2, h: h - 2, r: cr1}); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1); + + break; + } + + case "upArrowOverSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorOver, 1, null, null, null, {x: 1, y: 1, w: w - 2, h: h - 2, r: cr1}); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorOver, 1, null); + + break; + } + + case "upArrowDownSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorDown, 1); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDown, 1); + + break; + } + + case "upArrowDisabledSkin": { + // border + drawRoundRect(0, 0, w, h, cr, borderColorDisabled, 0.5, null, null, null, {x: 1, y: 1, w: w - 2, h: h - 2, r: cr1}); + + // button fill + drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 0.5, null); + + arrowColor = getStyle("disabledIconColor"); + break; + } + } + + // Draw the arrow. + g.beginFill(arrowColor); + g.moveTo(w / 2, h / 2 - 2.5); + g.lineTo(w / 2 - 3.5, h / 2 + 1.5); + g.lineTo(w / 2 + 3.5, h / 2 + 1.5); + g.lineTo(w / 2, h / 2 - 2.5); + g.endFill(); + } + } +} diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as index d98beece30ff2ee0009cc90d7515e9c27ec1c870..4393939c032e2245e73f4ad1b068fabe20752483 100644 --- a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as +++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as @@ -40,7 +40,7 @@ package org.bigbluebutton.skins { import flash.display.DisplayObjectContainer; import flash.utils.describeType; import flash.utils.getQualifiedClassName; - + import mx.core.EdgeMetrics; import mx.core.UIComponent; import mx.skins.Border; @@ -48,17 +48,6 @@ package org.bigbluebutton.skins { public class TabSkin extends Border { - //-------------------------------------------------------------------------- - // - // Class variables - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - private static var cache:Object = {}; - //-------------------------------------------------------------------------- // // Overridden properties diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties index 14696be96fe9c8725933e0a4961629a41d030f09..ff717853fc9230d4be7d3d8e556f2497e85b66ff 100755 --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -246,7 +246,7 @@ bbb.presentation.fitToWidth.toolTip = Fit Presentation To Width bbb.presentation.fitToPage.toolTip = Fit Presentation To Page bbb.presentation.uploadPresBtn.toolTip = Upload Presentation bbb.presentation.downloadPresBtn.toolTip = Download Presentations -bbb.presentation.poll.response = Response to poll +bbb.presentation.poll.response = Respond to poll bbb.presentation.backBtn.toolTip = Previous slide bbb.presentation.btnSlideNum.accessibilityName = Slide {0} of {1} bbb.presentation.btnSlideNum.toolTip = Select a slide @@ -369,6 +369,7 @@ bbb.video.publish.closeBtn.accessName = Close the webcam settings dialog box bbb.video.publish.closeBtn.label = Cancel bbb.video.publish.titleBar = Publish Webcam Window bbb.video.streamClose.toolTip = Close stream for: {0} +bbb.video.message.browserhttp = This server is not configured with SSL. As a result, {0} disables sharing of your webcam. bbb.screensharePublish.title = Screen Sharing: Presenter's Preview bbb.screensharePublish.pause.tooltip = Pause screen share bbb.screensharePublish.pause.label = Pause @@ -448,6 +449,7 @@ bbb.toolbar.deskshare.toolTip.stop = Stop Sharing Your Screen bbb.toolbar.sharednotes.toolTip = Open Shared Notes bbb.toolbar.video.toolTip.start = Share Your Webcam bbb.toolbar.video.toolTip.stop = Stop Sharing Your Webcam +bbb.layout.addButton.label = Add bbb.layout.addButton.toolTip = Add the custom layout to the list bbb.layout.overwriteLayoutName.title = Overwrite layout bbb.layout.overwriteLayoutName.text = Name already in use. Do you want to overwrite? @@ -461,6 +463,8 @@ bbb.layout.combo.custom = * Custom layout bbb.layout.combo.customName = Custom layout bbb.layout.combo.remote = Remote bbb.layout.window.name = Layout name +bbb.layout.window.close.tooltip = Close +bbb.layout.window.close.accessibilityName = Close add new layout window bbb.layout.save.complete = Layouts were successfully saved bbb.layout.save.ioerror = Layouts were not saved. Try saving again. bbb.layout.load.complete = Layouts were successfully loaded @@ -856,54 +860,3 @@ bbb.users.roomsGrid.join = Join bbb.users.roomsGrid.noUsers = No users is this room bbb.langSelector.default=Default language -bbb.langSelector.ar=Arabic -bbb.langSelector.az_AZ=Azerbaijani -bbb.langSelector.eu_EU=Basque -bbb.langSelector.bn_BN=Bengali -bbb.langSelector.bg_BG=Bulgarian -bbb.langSelector.ca_ES=Catalan -bbb.langSelector.zh_CN=Chinese (Simplified) -bbb.langSelector.zh_TW=Chinese (Traditional) -bbb.langSelector.hr_HR=Croatian -bbb.langSelector.cs_CZ=Czech -bbb.langSelector.da_DK=Danish -bbb.langSelector.nl_NL=Dutch -bbb.langSelector.en_US=English -bbb.langSelector.et_EE=Estonian -bbb.langSelector.fa_IR=Farsi -bbb.langSelector.fi_FI=Finnish -bbb.langSelector.fr_FR=French -bbb.langSelector.fr_CA=French (Canadian) -bbb.langSelector.ff_SN=Fulah -bbb.langSelector.de_DE=German -bbb.langSelector.el_GR=Greek -bbb.langSelector.he_IL=Hebrew -bbb.langSelector.hu_HU=Hungarian -bbb.langSelector.id_ID=Indonesian -bbb.langSelector.it_IT=Italian -bbb.langSelector.ja_JP=Japanese -bbb.langSelector.ko_KR=Korean -bbb.langSelector.lv_LV=Latvian -bbb.langSelector.lt_LT=Lithuania -bbb.langSelector.mn_MN=Mongolian -bbb.langSelector.ne_NE=Nepali -bbb.langSelector.no_NO=Norwegian -bbb.langSelector.pl_PL=Polish -bbb.langSelector.pt_BR=Portuguese (Brazilian) -bbb.langSelector.pt_PT=Portuguese -bbb.langSelector.ro_RO=Romanian -bbb.langSelector.ru_RU=Russian -bbb.langSelector.sr_SR=Serbian (Cyrillic) -bbb.langSelector.sr_RS=Serbian (Latin) -bbb.langSelector.si_LK=Sinhala -bbb.langSelector.sk_SK=Slovak -bbb.langSelector.sl_SL=Slovenian -bbb.langSelector.es_ES=Spanish -bbb.langSelector.es_LA=Spanish (Latin American) -bbb.langSelector.sv_SE=Swedish -bbb.langSelector.th_TH=Thai -bbb.langSelector.tr_TR=Turkish -bbb.langSelector.uk_UA=Ukrainian -bbb.langSelector.vi_VN=Vietnamese -bbb.langSelector.cy_GB=Welsh -bbb.langSelector.oc=Occitan diff --git a/bigbluebutton-client/resources/prod/lib/bbb_blinker.js b/bigbluebutton-client/resources/prod/lib/bbb_blinker.js index beb32772ddab5652b26ce23a19a4c434c397edbf..eded9d29f0b4b55fb50dec1407e81a78c5a85795 100755 --- a/bigbluebutton-client/resources/prod/lib/bbb_blinker.js +++ b/bigbluebutton-client/resources/prod/lib/bbb_blinker.js @@ -97,11 +97,9 @@ function determineBrowser() var nameOffset,verOffset,ix; // In Opera, the true version is after "Opera" or after "Version" - if ((verOffset=nAgt.indexOf("Opera"))!=-1) { + if ((verOffset=nAgt.indexOf("OPR/"))!=-1) { browserName = "Opera"; - fullVersion = nAgt.substring(verOffset+6); - if ((verOffset=nAgt.indexOf("Version"))!=-1) - fullVersion = nAgt.substring(verOffset+8); + fullVersion = nAgt.substring(verOffset+4); } // In MSIE, the true version is after "MSIE" in userAgent else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { diff --git a/bigbluebutton-client/resources/prod/locales.xml b/bigbluebutton-client/resources/prod/locales.xml index 9a8c3f18e2eff2239df2584aca8395b59cb396b4..7279506b28feed865b1123f556a48cba7f038cbe 100755 --- a/bigbluebutton-client/resources/prod/locales.xml +++ b/bigbluebutton-client/resources/prod/locales.xml @@ -1,54 +1,54 @@ <?xml version="1.0" ?> <locales> - <locale code="ar" name="Arabic" direction="rtl"/> - <locale code="az_AZ" name="Azerbaijani"/> - <locale code="eu_EU" name="Basque" /> - <locale code="bn_BN" name="Bengali" /> - <locale code="bg_BG" name="Bulgarian" /> - <locale code="ca_ES" name="Catalan" /> - <locale code="zh_CN" name="Chinese (Simplified)"/> - <locale code="zh_TW" name="Chinese (Traditional)"/> - <locale code="hr_HR" name="Croatian" /> - <locale code="cs_CZ" name="Czech" /> - <locale code="da_DK" name="Danish" /> - <locale code="nl_NL" name="Dutch" /> - <locale code="en_US" name="English"/> - <locale code="et_EE" name="Estonian"/> - <locale code="fa_IR" name="Farsi" /> - <locale code="fi_FI" name="Finnish"/> - <locale code="fr_FR" name="French"/> - <locale code="fr_CA" name="French (Canadian)"/> - <locale code="ff_SN" name="Fulah"/> - <locale code="de_DE" name="German"/> - <locale code="el_GR" name="Greek"/> - <locale code="he_IL" name="Hebrew" direction="rtl"/> - <locale code="hu_HU" name="Hungarian"/> - <locale code="id_ID" name="Indonesian"/> - <locale code="it_IT" name="Italian"/> - <locale code="ja_JP" name="Japanese"/> - <locale code="ko_KR" name="Korean"/> - <locale code="lv_LV" name="Latvian"/> - <locale code="lt_LT" name="Lithuania"/> - <locale code="mn_MN" name="Mongolian"/> - <locale code="ne_NE" name="Nepali"/> - <locale code="no_NO" name="Norwegian"/> - <locale code="oc" name="Occitan"/> - <locale code="pl_PL" name="Polish"/> - <locale code="pt_BR" name="Portuguese (Brazilian)"/> - <locale code="pt_PT" name="Portuguese"/> - <locale code="ro_RO" name="Romanian"/> - <locale code="ru_RU" name="Russian"/> - <locale code="sr_SR" name="Serbian (Cyrillic)"/> - <locale code="sr_RS" name="Serbian (Latin)"/> - <locale code="si_LK" name="Sinhala"/> - <locale code="sk_SK" name="Slovak"/> - <locale code="sl_SL" name="Slovenian"/> - <locale code="es_ES" name="Spanish"/> - <locale code="es_LA" name="Spanish (Latin American)"/> - <locale code="sv_SE" name="Swedish"/> - <locale code="th_TH" name="Thai"/> - <locale code="tr_TR" name="Turkish"/> - <locale code="uk_UA" name="Ukrainian"/> - <locale code="vi_VN" name="Vietnamese"/> - <locale code="cy_GB" name="Welsh"/> + <locale code="ar" name="Arabic" native="العربيّة" direction="rtl"/> + <locale code="az_AZ" name="Azerbaijani" native="AzÉ™rbaycan"/> + <locale code="eu_EU" name="Basque" native="Euskara"/> + <locale code="bn_BN" name="Bengali" native="বাংলা (baɛṅlÄ)"/> + <locale code="bg_BG" name="Bulgarian" native="БългарÑки"/> + <locale code="ca_ES" name="Catalan" native="Català "/> + <locale code="zh_CN" name="Chinese (Simplified)" native="䏿–‡ï¼ˆç®€ä½“)"/> + <locale code="zh_TW" name="Chinese (Traditional)" native="䏿–‡ï¼ˆç¹é«”)"/> + <locale code="hr_HR" name="Croatian" native="Hrvatski"/> + <locale code="cs_CZ" name="Czech" native="ÄŒeÅ¡tina"/> + <locale code="da_DK" name="Danish" native="Dansk"/> + <locale code="nl_NL" name="Dutch" native="Nederlands"/> + <locale code="en_US" name="English" native="English"/> + <locale code="et_EE" name="Estonian" native="Eesti"/> + <locale code="fa_IR" name="Farsi" native="ÙØ§Ø±Ø³Ù‰"/> + <locale code="fi_FI" name="Finnish" native="Suomi"/> + <locale code="fr_FR" name="French" native="Français"/> + <locale code="fr_CA" name="French (Canadian)" native="Français (Canadien)"/> + <locale code="ff_SN" name="Fula" native="Fulfulde"/> + <locale code="de_DE" name="German" native="Deutsch"/> + <locale code="el_GR" name="Greek" native="Ελληνικά"/> + <locale code="he_IL" name="Hebrew" native="עִבְרִית" direction="rtl"/> + <locale code="hu_HU" name="Hungarian" native="Magyar"/> + <locale code="id_ID" name="Indonesian" native="Indonesia"/> + <locale code="it_IT" name="Italian" native="Italiano"/> + <locale code="ja_JP" name="Japanese" native="日本語"/> + <locale code="ko_KR" name="Korean" native="한êµì–´"/> + <locale code="lv_LV" name="Latvian" native="LatvieÅ¡u"/> + <locale code="lt_LT" name="Lithuania" native="Lietuvių"/> + <locale code="mn_MN" name="Mongolian" native="Монгол"/> + <locale code="ne_NE" name="Nepali" native="नेपाली"/> + <locale code="no_NO" name="Norwegian" native="Norsk"/> + <locale code="oc" name="Occitan" native="Occitan"/> + <locale code="pl_PL" name="Polish" native="Polski"/> + <locale code="pt_BR" name="Portuguese (Brazilian)" native="Português (Brasileiro)"/> + <locale code="pt_PT" name="Portuguese" native="Português"/> + <locale code="ro_RO" name="Romanian" native="Român"/> + <locale code="ru_RU" name="Russian" native="РуÑÑкий"/> + <locale code="sr_SR" name="Serbian (Cyrillic)" native="СрпÑки (ћирилица)"/> + <locale code="sr_RS" name="Serbian (Latin)" native="Srpski (latinica)"/> + <locale code="si_LK" name="Sinhala" native="සිංහල"/> + <locale code="sk_SK" name="Slovak" native="SlovenÄina"/> + <locale code="sl_SL" name="Slovenian" native="SlovenÅ¡Äina"/> + <locale code="es_ES" name="Spanish" native="Español"/> + <locale code="es_LA" name="Spanish (Latin American)" native="Español (Latinoamericano)"/> + <locale code="sv_SE" name="Swedish" native="Svenska"/> + <locale code="th_TH" name="Thai" native="ภาษาไทย"/> + <locale code="tr_TR" name="Turkish" native="Türkçe"/> + <locale code="uk_UA" name="Ukrainian" native="УкраїнÑька"/> + <locale code="vi_VN" name="Vietnamese" native="Tiếng việt"/> + <locale code="cy_GB" name="Welsh" native="Cymraeg"/> </locales> diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/IKeyboardClose.as b/bigbluebutton-client/src/org/bigbluebutton/common/IKeyboardClose.as new file mode 100644 index 0000000000000000000000000000000000000000..56fc919a237772830753b559600bdd6ae7607ef0 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/common/IKeyboardClose.as @@ -0,0 +1,26 @@ +/** + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2017 BigBlueButton Inc. and by respective authors (see below). + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 3.0 of the License, or (at your option) any later + * version. + * + * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. + * + */ +package org.bigbluebutton.common { + + /** + * Add it to popup classes to add the Keyboard.ESCAPE close behaviour + */ + public interface IKeyboardClose { + } +} diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as index d500bd937b60d2e196c7ac84e265230a9745d580..af268ec346ac0700cafc828d1b0ae9c56fa964de 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as @@ -17,76 +17,90 @@ * */ package org.bigbluebutton.core { - import flash.display.DisplayObject; - import flash.utils.Dictionary; - import flash.utils.getQualifiedClassName; + import flash.display.DisplayObject; + import flash.events.KeyboardEvent; + import flash.ui.Keyboard; + import flash.utils.Dictionary; + import flash.utils.getQualifiedClassName; - import mx.core.FlexGlobals; - import mx.core.IChildList; - import mx.core.IFlexDisplayObject; - import mx.core.IUIComponent; - import mx.managers.PopUpManager; - import mx.managers.SystemManager; + import mx.core.FlexGlobals; + import mx.core.IChildList; + import mx.core.IFlexDisplayObject; + import mx.core.IUIComponent; + import mx.managers.PopUpManager; + import mx.managers.SystemManager; - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.common.IKeyboardClose; - public final class PopUpUtil { + public final class PopUpUtil { - private static const LOGGER:ILogger = getClassLogger(PopUpUtil); + private static const LOGGER:ILogger = getClassLogger(PopUpUtil); - private static var popUpDict:Dictionary = new Dictionary(true); + private static var popUpDict:Dictionary = new Dictionary(true); - public static function createNonModelPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject { - if (!checkPopUpExists(className)) { - return addPopUpToStage(parent, className, false, center); - } - return null; - } + public static function createNonModalPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject { + if (!checkPopUpExists(className)) { + return addPopUpToStage(parent, className, false, center); + } + return null; + } - public static function createModalPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject { - if (!checkPopUpExists(className)) { - return addPopUpToStage(parent, className, true, center); - } - return null; - } + public static function createModalPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject { + if (!checkPopUpExists(className)) { + return addPopUpToStage(parent, className, true, center); + } + return null; + } - public static function removePopUp(classOrInstance:*):void { - var fqcn:String = getQualifiedClassName(classOrInstance); - if (popUpDict[fqcn] != undefined) { - PopUpManager.removePopUp(popUpDict[fqcn]) - delete popUpDict[fqcn]; - LOGGER.debug("Removed PopUp with type [{0}]", [fqcn]); - } - } + public static function removePopUp(classOrInstance:*):void { + var fqcn:String = getQualifiedClassName(classOrInstance); + if (popUpDict[fqcn] != undefined) { + PopUpManager.removePopUp(popUpDict[fqcn]) + delete popUpDict[fqcn]; + LOGGER.debug("Removed PopUp with type [{0}]", [fqcn]); + } + } - private static function checkPopUpExists(className:Class):Boolean { - LOGGER.debug("Checking if [{0}] exists as a PopUp", [className]); - var systemManager:SystemManager = FlexGlobals.topLevelApplication.systemManager; + private static function checkPopUpExists(className:Class):Boolean { + LOGGER.debug("Checking if [{0}] exists as a PopUp", [className]); + var systemManager:SystemManager = FlexGlobals.topLevelApplication.systemManager; - var childList:IChildList = systemManager.rawChildren; - for (var i:int = childList.numChildren - 1; i >= 0; i--) { - var childObject:IUIComponent = childList.getChildAt(i) as IUIComponent; - // PopUp already exists - if (childObject is className && childObject.isPopUp) { - LOGGER.debug("PopUp with type [{0}] found", [className]); - return true; - } - } - LOGGER.debug("No PopUp with type [{0}] not found", [className]); - return false; - } + var childList:IChildList = systemManager.rawChildren; + for (var i:int = childList.numChildren - 1; i >= 0; i--) { + var childObject:IUIComponent = childList.getChildAt(i) as IUIComponent; + // PopUp already exists + if (childObject is className && childObject.isPopUp) { + LOGGER.debug("PopUp with type [{0}] found", [className]); + return true; + } + } + LOGGER.debug("No PopUp with type [{0}] not found", [className]); + return false; + } - private static function addPopUpToStage(parent:DisplayObject, className:Class, modal:Boolean = false, center:Boolean = true):IFlexDisplayObject { - var popUp:IFlexDisplayObject = PopUpManager.createPopUp(parent, className, modal); - if (center) { - PopUpManager.centerPopUp(popUp) - } - popUpDict[getQualifiedClassName(className)] = popUp; + private static function addPopUpToStage(parent:DisplayObject, className:Class, modal:Boolean = false, center:Boolean = true):IFlexDisplayObject { + var popUp:IFlexDisplayObject = PopUpManager.createPopUp(parent, className, modal); + if (center) { + PopUpManager.centerPopUp(popUp) + } + popUpDict[getQualifiedClassName(className)] = popUp; - LOGGER.debug("Created PopUp with type [{0}]", [className]); + if (popUp is IKeyboardClose) { + popUp.addEventListener(KeyboardEvent.KEY_DOWN, escapeKeyDownHandler); + } - return popUp; - } - } + LOGGER.debug("Created PopUp with type [{0}]", [className]); + + return popUp; + } + + private static function escapeKeyDownHandler(event:KeyboardEvent):void { + if (event.charCode == Keyboard.ESCAPE) { + event.currentTarget.removeEventListener(KeyboardEvent.KEY_DOWN, escapeKeyDownHandler); + removePopUp(event.currentTarget); + } + } + } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/api/JSAPI.as b/bigbluebutton-client/src/org/bigbluebutton/main/api/JSAPI.as index dd6afc395f0c795f620e85bebfdf8283b1058552..cb0afcc91436bc2401ff9936af45cedc8458e2f1 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/api/JSAPI.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/api/JSAPI.as @@ -44,12 +44,6 @@ package org.bigbluebutton.main.api return false; } - public function getBrowserInfo():Array { - if (ExternalInterface.available) { - return ExternalInterface.call("determineBrowser"); - } - return ["unknown", 0, 0]; - } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml index eee6319ad3fdf1aef5e8ddf123ba20c5b773ce9e..96342523040b0e904a5674908f3b2cc516ce2b47 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml @@ -23,9 +23,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" xmlns:common="org.bigbluebutton.common.*" + implements="org.bigbluebutton.common.IKeyboardClose" + show="this.setFocus()" initialize="init()" layout="absolute" - close="onCancelClicked()" verticalScrollPolicy="off" horizontalScrollPolicy="off" showCloseButton="false"> @@ -44,18 +45,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand; import org.bigbluebutton.modules.phone.events.UseFlashModeCommand; import org.bigbluebutton.modules.phone.models.PhoneOptions; + import org.bigbluebutton.util.browser.BrowserCheck; import org.bigbluebutton.util.i18n.ResourceUtil; private static const LOGGER:ILogger = getClassLogger(AudioSelectionWindow); private var phoneOptions:PhoneOptions; - private var browserInfo:Array; private function init():void { phoneOptions = Options.getOptions(PhoneOptions) as PhoneOptions; - browserInfo = JSAPI.getInstance().getBrowserInfo(); - if (!phoneOptions.listenOnlyMode) btnListenOnly.enabled = false; @@ -75,23 +74,22 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } // If Puffin browser is deteted and version is less than 4.6 - if (browserInfo[0] == "Puffin" && String(browserInfo[2]).substr(0, 3) < "4.6") { + if (BrowserCheck.isPuffinBelow46()) { vboxListen.percentWidth = 100; } } - + private function onMicClick():void { LOGGER.debug("AudioSelectionWindow - Share Microphone Clicked"); var dispatcher:Dispatcher = new Dispatcher(); - if (browserInfo[0] == "Puffin" && String(browserInfo[2]).substr(0, 3) >= "4.6") { - dispatcher.dispatchEvent(new UseFlashModeCommand()); - } - else { + if (BrowserCheck.isPuffin46AndAbove() || (!BrowserCheck.isHttps() && ((BrowserCheck.isChrome() && BrowserCheck.browserMajorVersion >= "60") || (BrowserCheck.isOpera() && BrowserCheck.browserMajorVersion >= "47")))) { + dispatcher.dispatchEvent(new UseFlashModeCommand()); + } else { var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand(); command.mic = true; dispatcher.dispatchEvent(command); } - + PopUpUtil.removePopUp(this); } @@ -106,7 +104,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function onCancelClicked():void { - LOGGER.debug("AudioSelectionWindow - Cancel clicked"); + LOGGER.debug("AudioSelectionWindow - Close clicked"); var dispatcher:Dispatcher = new Dispatcher(); dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.CLOSED_AUDIO_SELECTION)); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml index ef9fc85597cad67749505ce61f05ce6a43d2827e..84c386eac9eba1eb47d02d8ab10920f04eb4ba2b 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml @@ -3,6 +3,8 @@ xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:common="org.bigbluebutton.common.*" xmlns:mate="http://mate.asfusion.com/" + implements="org.bigbluebutton.common.IKeyboardClose" + show="this.setFocus()" layout="vertical" horizontalAlign="center" showCloseButton="false" @@ -14,6 +16,7 @@ import mx.core.UIComponent; import mx.managers.PopUpManager; + import org.bigbluebutton.common.IKeyboardClose; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.util.i18n.ResourceUtil; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml index 3aaea09d0cbe9c5c11aeee9bdf09c2b05d72ea24..5391b2262dcc46be17f37c4d96868eee1e9ed47c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml @@ -25,7 +25,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. layout="absolute" verticalScrollPolicy="off" horizontalScrollPolicy="off" width="630" height="450" creationComplete="onCreationComplete()" styleName="cameraDisplaySettingsWindowStyle" - showCloseButton="false" close="onCancelClicked()" keyDown="handleKeyDown(event)"> + showCloseButton="false" keyDown="handleKeyDown(event)"> <fx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; @@ -34,7 +34,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import mx.collections.ArrayCollection; import mx.collections.ArrayList; - import mx.events.CloseEvent; import org.bigbluebutton.common.Media; import org.bigbluebutton.core.BBB; @@ -188,8 +187,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function handleKeyDown(event:KeyboardEvent):void { if (event.charCode == Keyboard.ESCAPE) { - disableCamera(); - this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); + onCancelClicked(); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml index f58613d45a7d53a9ed1de0f8a9bf43299a87f7c7..4904357c7ec4831dd8593436d9677eabcb2cf7e6 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml @@ -23,12 +23,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:chat="org.bigbluebutton.modules.chat.views.*" width="500" height="400" + implements="org.bigbluebutton.common.IKeyboardClose" + show="this.setFocus()" horizontalScrollPolicy="off" title="{ResourceUtil.getInstance().getString('bbb.clientstatus.title')}" - horizontalAlign="center" creationComplete="onCreationComplete();"> <fx:Script> <![CDATA[ + import org.bigbluebutton.common.IKeyboardClose; import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.util.i18n.ResourceUtil; @@ -45,6 +47,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } ]]> </fx:Script> - <chat:AdvancedList id="messageList" width="100%" dragEnabled="false" variableRowHeight="true" wordWrap="true" alternatingItemColors="[#EFEFEF, #FEFEFE]" itemRenderer="org.bigbluebutton.main.views.ClientStatusItemRenderer"/> + <chat:AdvancedList id="messageList" width="100%" height="100%" dragEnabled="false" variableRowHeight="true" wordWrap="true" itemRenderer="org.bigbluebutton.main.views.ClientStatusItemRenderer"/> <mx:Button id="closeBtn" label="{ResourceUtil.getInstance().getString('bbb.clientstatus.close')}" click="handleCloseButtonClick();" /> </mx:TitleWindow> diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml index f9b180daa6514a71a2a836310ac903babb6ab473..c5fab8fe03f26bd63ce141e2f284558bc648ecf8 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml @@ -25,8 +25,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. width="600" height="390" verticalScrollPolicy="off" creationComplete="onCreationComplete()" - showCloseButton="false" - close="onCancelClicked()" + showCloseButton="false" keyDown="handleKeyDown(event)"> <fx:Declarations> @@ -44,7 +43,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import flash.ui.Keyboard; import mx.controls.sliderClasses.Slider; - import mx.events.CloseEvent; import mx.events.SliderEvent; import org.as3commons.logging.api.ILogger; @@ -184,7 +182,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. // Added by Chad to enable closing the window without clicking the X private function handleKeyDown(event:KeyboardEvent):void { if (event.charCode == Keyboard.ESCAPE) { - this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); + onCancelClicked(); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml index 21262cec7d80b38a20cdd703782b10e852d7d63b..21601df606c3966582ae7d7fe52facfb264d3fce 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml @@ -128,7 +128,6 @@ $Id: $ public function closeWindow():void { this.visible = false; PopUpManager.removePopUp(this); - //dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); } ]]> diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml index 0b44af2ca2d84d860de68c9673c353003a555f2a..dee7d02fc8d7e96b415120e158a391f3563a4348 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml @@ -25,7 +25,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. xmlns:mate="http://mate.asfusion.com/" dataProvider="{ResourceUtil.getInstance().locales}" change="changeLanguage()" - labelField="name" + labelField="native" rowCount="15" width="120" height="22"> <fx:Declarations> diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml index cba5732e212519d275465df4cc0a217e15491978..82da5cbe347b1d786a9beebd310ba7221e93c9d4 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml @@ -21,15 +21,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" + implements="org.bigbluebutton.common.IKeyboardClose" + show="this.setFocus()" xmlns:common="org.bigbluebutton.common.*" minWidth="340" showCloseButton="false" - close="onCancelClicked()" keyDown="handleKeyDown(event)"> <fx:Script> <![CDATA[ - import mx.events.CloseEvent; - import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.core.events.LockControlEvent; import org.bigbluebutton.core.vo.LockSettingsVO; @@ -49,7 +48,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function handleKeyDown(event:KeyboardEvent):void { if (event.charCode == Keyboard.ESCAPE) { - this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); + onCancelClicked(); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml index 1d7dfdbee6996145fda94d36b0a60e2830c676f0..7fbcafb862f8ca76e7c293db655370d10d20caa7 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml @@ -22,6 +22,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" + implements="org.bigbluebutton.common.IKeyboardClose" verticalScrollPolicy="off" horizontalScrollPolicy="off" horizontalAlign="center" diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml index f618e7a54db1906e3185286936c190f468862c91..b4af325d646e1db8de59c2fb4bd05a5c0f69306a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml @@ -150,6 +150,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import org.bigbluebutton.modules.phone.events.WebRTCEchoTestEvent; import org.bigbluebutton.modules.phone.events.WebRTCMediaEvent; import org.bigbluebutton.modules.phone.models.PhoneOptions; + import org.bigbluebutton.util.browser.BrowserCheck; import org.bigbluebutton.modules.users.model.UsersOptions; import org.bigbluebutton.modules.users.views.BreakoutRoomSettings; import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent; @@ -492,21 +493,19 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function versionCheck():void { var browserOptions : BrowserVersionsOptions = Options.getOptions(BrowserVersionsOptions) as BrowserVersionsOptions; if (!StringUtils.isEmpty(browserOptions.chrome) && !StringUtils.isEmpty(browserOptions.firefox) && !StringUtils.isEmpty(browserOptions.flash)) { - //find browser version - var browserVersion:Array = ExternalInterface.call("determineBrowser"); //check browser version - if ((browserVersion[0].toString().toLowerCase() == "chrome" && browserVersion[1] < browserOptions.chrome) || browserVersion[0].toString().toLowerCase() == "firefox" && browserVersion[1] < browserOptions.firefox) { + if ((BrowserCheck.isChrome() && BrowserCheck.browserMajorVersion < browserOptions.chrome) || BrowserCheck.isFirefox() && BrowserCheck.browserMajorVersion < browserOptions.firefox) { globalDispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.WARNING_MESSAGE_EVENT, ResourceUtil.getInstance().getString("bbb.clientstatus.browser.title"), - ResourceUtil.getInstance().getString("bbb.clientstatus.browser.message", [browserVersion[0]+" "+browserVersion[1]]), + ResourceUtil.getInstance().getString("bbb.clientstatus.browser.message", [BrowserCheck.browserName+" "+BrowserCheck.browserMajorVersion]), 'bbb.clientstatus.browser.message')); } //find flash version var flashVersion:Object = getFlashVersion(); //check flash version - if ((flashVersion.os == 'LNX' && browserVersion[0].toString().toLowerCase() != "chrome" && flashVersion.major < 11) || - ((flashVersion.os != 'LNX' || browserVersion[0].toString().toLowerCase() == "chrome") && flashVersion.major < browserOptions.flash)) { + if ((flashVersion.os == 'LNX' && !BrowserCheck.isChrome() && flashVersion.major < 11) || + ((flashVersion.os != 'LNX' || BrowserCheck.isChrome()) && flashVersion.major < browserOptions.flash)) { globalDispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.WARNING_MESSAGE_EVENT, ResourceUtil.getInstance().getString("bbb.clientstatus.flash.title"), ResourceUtil.getInstance().getString("bbb.clientstatus.flash.message", [flashVersion.major+"."+flashVersion.minor+"."+flashVersion.build]), @@ -607,7 +606,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function wrongLocaleVersion():void { - var localeWindow:OldLocaleWarnWindow = PopUpUtil.createNonModelPopUp(mdiCanvas, OldLocaleWarnWindow, false) as OldLocaleWarnWindow; + var localeWindow:OldLocaleWarnWindow = PopUpUtil.createNonModalPopUp(mdiCanvas, OldLocaleWarnWindow, false) as OldLocaleWarnWindow; if (localeWindow) { var point1:Point = new Point(); // Calculate position of TitleWindow in Application's coordinates. @@ -629,9 +628,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function handleWebRTCMediaRequestEvent(event:WebRTCMediaEvent):void { var options:PhoneOptions = new PhoneOptions(); if (!options.showMicrophoneHint) return; - var browser:String = ExternalInterface.call("determineBrowser")[0]; var browserPermissionHelper:BrowserPermissionHelper = PopUpUtil.createModalPopUp(mdiCanvas, BrowserPermissionHelper, false) as BrowserPermissionHelper; - if (browser == "Firefox") { + if (BrowserCheck.isFirefox()) { if (browserPermissionHelper) { if (Capabilities.os.indexOf("Mac") >= 0){ browserPermissionHelper.currentState = "firefoxMicMacOSX"; @@ -642,7 +640,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. browserPermissionHelper.x = 50; browserPermissionHelper.y = 200; } - } else if (browser == "Chrome") { + } else if (BrowserCheck.isChrome()) { if (browserPermissionHelper) { browserPermissionHelper.currentState = "chromeMic"; browserPermissionHelper.x = 50; @@ -666,14 +664,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function handleShareCameraRequestEvent(event:ShareCameraRequestEvent):void { - if (ExternalInterface.call("determineBrowser")[0] == "Chrome") { + if (BrowserCheck.isChrome()) { // Show browserPermissionHelper component after showing the webcam window due event listeners registration order setTimeout(showbrowserPermissionHelper, 100); } } private function showbrowserPermissionHelper() : void { - var browserPermissionHelper : BrowserPermissionHelper = PopUpUtil.createNonModelPopUp(mdiCanvas, BrowserPermissionHelper, false) as BrowserPermissionHelper; + var browserPermissionHelper : BrowserPermissionHelper = PopUpUtil.createNonModalPopUp(mdiCanvas, BrowserPermissionHelper, false) as BrowserPermissionHelper; if (browserPermissionHelper) { browserPermissionHelper.currentState = "chromeCam"; browserPermissionHelper.x = 20; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml index f939574e9649e32d20de1b5da79741da5641a9ca..4c89be6da6d21a1ec2a0dab11ad0df8436ef0e06 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml @@ -75,6 +75,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import org.bigbluebutton.common.events.ToolbarButtonEvent; import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.core.TimerUtil; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.events.MeetingTimeRemainingEvent; @@ -300,14 +301,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function confirmLogout():void { if (toolbarOptions.confirmLogout) { - var logoutWindow:LogoutWindow; - logoutWindow = LogoutWindow(PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, LogoutWindow, true)); + var logoutWindow:LogoutWindow = PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, LogoutWindow, true) as LogoutWindow; var newX:Number = this.width - logoutWindow.width - 5; var newY:Number = btnLogout.y + btnLogout.height + 5; - PopUpManager.centerPopUp(logoutWindow); - logoutWindow.x = newX; logoutWindow.y = newY; } else { @@ -517,8 +515,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function onSettingsButtonClick():void { - settingsPopup = BBBSettings(PopUpManager.createPopUp(this.parent, BBBSettings, true)); + settingsPopup = PopUpUtil.createModalPopUp(this.parent, BBBSettings, true) as BBBSettings; settingsPopup.pushComponents(settingsComponents); + PopUpManager.centerPopUp(settingsPopup); } private function refreshRole(e:ChangeMyRole):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml index 87f69ff8a22bba353570f058119c8a8bbf408a83..2e31a4454a1a2f797926061f4603f674905f85b6 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml @@ -24,8 +24,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. xmlns:common="org.bigbluebutton.common.*" width="600" height="380" creationComplete="onCreationComplete()" - showCloseButton="false" - close="onCancelClicked()"> + showCloseButton="false"> <fx:Declarations> <mate:Listener type="{WebRTCEchoTestStartedEvent.WEBRTC_ECHO_TEST_STARTED}" method="handleWebRTCEchoTestStartedEvent" /> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml index 7887fc9f9e9208dac8349da3567caefee201f741..70155be04396be5833ed5606a65963b35a2c3003 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml @@ -199,7 +199,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <common:TabIndexer id="tabIndexer" startIndex="1" tabIndices="{[usersList, cmbFontSize, chatNoiseCheckBox, saveBtn, copyBtn, clearBtn]}"/> </fx:Declarations> - <mx:Label id="lblSelect" styleName="chatOptionsLabel" + <common:AdvancedLabel id="lblSelect" styleName="chatOptionsLabel" width="100%" text="{ResourceUtil.getInstance().getString('bbb.chat.privateChatSelect')}" visible="{chatOptions.privateEnabled}" includeInLayout="{chatOptions.privateEnabled}"/> <mx:List id="usersList" height="50%" width="100%" dataProvider="{users}" dragEnabled="false" @@ -210,7 +210,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. keyDown="onUserListKeyDown(event)" toolTip="{ResourceUtil.getInstance().getString('bbb.chat.usersList.toolTip')}" accessibilityName="{ResourceUtil.getInstance().getString('bbb.chat.usersList.accessibilityName')}"/> - <mx:Label styleName="chatOptionsLabel" text="{ResourceUtil.getInstance().getString('bbb.chat.chatOptions')}" /> + <mx:Label styleName="chatOptionsLabel" width="100%" fontWeight="bold" text="{ResourceUtil.getInstance().getString('bbb.chat.chatOptions')}" /> <mx:HBox width="100%"> <mx:Label styleName="chatOptionsLabel" text="{ResourceUtil.getInstance().getString('bbb.chat.fontSize')}" width="100%"/> <mx:ComboBox width="60" id="cmbFontSize" dataProvider="{fontSizes}" change="changeFontSize()" diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as index 1cc0824e14012f022f9d6ea54964c9a51be4948b..8789bd413f8f2be157101797fdc91088fa810d0b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as @@ -33,7 +33,6 @@ package org.bigbluebutton.modules.layout.managers import mx.events.CloseEvent; import mx.events.EffectEvent; import mx.events.ResizeEvent; - import mx.managers.PopUpManager; import flexlib.mdi.containers.MDICanvas; import flexlib.mdi.containers.MDIWindow; @@ -43,6 +42,7 @@ package org.bigbluebutton.modules.layout.managers import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.common.CustomMdiWindow; import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.events.SwitchedLayoutEvent; import org.bigbluebutton.core.model.LiveMeeting; @@ -130,9 +130,8 @@ package org.bigbluebutton.modules.layout.managers public function alertSaveCurrentLayoutFile(e:CloseEvent):void { // Check to see if the YES button was pressed. if (e.detail==Alert.YES) { - var layoutNameWindow:CustomLayoutNameWindow = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true) as CustomLayoutNameWindow; + var layoutNameWindow:CustomLayoutNameWindow = PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true) as CustomLayoutNameWindow; layoutNameWindow.savingForFileDownload = true; - PopUpManager.centerPopUp(layoutNameWindow); } else if (e.detail==Alert.NO){ saveLayoutsWindow(); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml index 8379e718a56b126b79eec8b8248fa383700bd320..94a959779e4f7ca7d1b649817e04fec1db06c40b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml @@ -34,9 +34,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import flash.events.Event; import mx.core.FlexGlobals; - import mx.core.IFlexDisplayObject; - import mx.managers.PopUpManager; + import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.util.i18n.ResourceUtil; @@ -46,8 +45,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function onClick(e:Event):void { - var layoutNameWindow:IFlexDisplayObject = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true); - PopUpManager.centerPopUp(layoutNameWindow); + PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true); } public function refreshRole(amIModerator:Boolean):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml index 0a76cea90ca0fd8806c1a47e165005325eee0815..fb9c77872605c83fadc7b9947fa86721ac9d0878 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml @@ -22,14 +22,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" + xmlns:common="org.bigbluebutton.common.*" + implements="org.bigbluebutton.common.IKeyboardClose" verticalScrollPolicy="off" horizontalScrollPolicy="off" horizontalAlign="center" - showCloseButton="true" - close="onCancelClicked()" + layout="absolute" + showCloseButton="false" creationComplete="onCreationComplete()" - width="250" - title="{ResourceUtil.getInstance().getString('bbb.layout.window.name')}"> + width="280"> <fx:Declarations> <mate:Listener type="{LayoutNameInUseEvent.LAYOUT_NAME_IN_USE_EVENT}" method="handleLayoutNameInUse"/> @@ -37,13 +38,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import mx.managers.PopUpManager; - - import org.bigbluebutton.modules.layout.events.LayoutEvent; - import org.bigbluebutton.modules.layout.events.LayoutNameInUseEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import mx.managers.PopUpManager; + + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.modules.layout.events.LayoutEvent; + import org.bigbluebutton.modules.layout.events.LayoutNameInUseEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; + + private static const LOGGER:ILogger = getClassLogger(CustomLayoutNameWindow); public var savingForFileDownload:Boolean = false; @@ -65,7 +70,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. savingForFileDownload = false; } } else { - trace("The name is already in use, waiting for overwrite command or rename"); + LOGGER.debug("The name is already in use, waiting for overwrite command or rename"); } } @@ -79,8 +84,23 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. ]]> </fx:Script> - <mx:HBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"> - <mx:TextInput id="textInput" maxChars="140" width="100%" text="{ResourceUtil.getInstance().getString('bbb.layout.combo.customName')}" enter="addButton_clickHandler()"/> - <mx:Button id="addButton" click="addButton_clickHandler()" enabled="{textInput.text.length > 0}" styleName="addLayoutButtonStyle" toolTip="{ResourceUtil.getInstance().getString('bbb.layout.addButton.toolTip')}"/> - </mx:HBox> + <mx:VBox width="100%" + height="100%" + paddingTop="5" + horizontalAlign="center"> + <common:AdvancedLabel text="{ResourceUtil.getInstance().getString('bbb.layout.window.name')}" + styleName="titleWindowStyle" + width="180" /> + <mx:TextInput id="textInput" height="26" maxChars="140" width="100%" + text="{ResourceUtil.getInstance().getString('bbb.layout.combo.customName')}" + enter="addButton_clickHandler()" /> + <mx:Button id="addButton" height="30" width="100%" click="addButton_clickHandler()" enabled="{textInput.text.length > 0}" styleName="mainActionButton" + label="{ResourceUtil.getInstance().getString('bbb.layout.addButton.label')}" toolTip="{ResourceUtil.getInstance().getString('bbb.layout.addButton.toolTip')}" /> + </mx:VBox> + + <mx:Button id="closeButton" click="onCancelClicked()" styleName="titleWindowCloseButton" + toolTip="{ResourceUtil.getInstance().getString('bbb.layout.window.close.tooltip')}" + top="15" right="10" + accessibilityName="{ResourceUtil.getInstance().getString('bbb.layout.window.accessibilityName')}" /> + </mx:TitleWindow> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as index e21ee048af77da323b6082b210596457e4b2306b..732d6406026782f56c7844cbd82cac80944d53fb 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as @@ -14,7 +14,6 @@ package org.bigbluebutton.modules.phone.managers import org.as3commons.logging.util.jsonXify; import org.bigbluebutton.core.Options; import org.bigbluebutton.core.UsersUtil; - import org.bigbluebutton.main.api.JSAPI; import org.bigbluebutton.main.events.ClientStatusEvent; import org.bigbluebutton.main.model.users.AutoReconnect; import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent; @@ -36,8 +35,6 @@ package org.bigbluebutton.modules.phone.managers private static const LOGGER:ILogger = getClassLogger(WebRTCCallManager); private const MAX_RETRIES:Number = 3; - private var browserType:String = "unknown"; - private var browserVersion:int = 0; private var dispatcher:Dispatcher = new Dispatcher(); private var echoTestDone:Boolean = false; @@ -50,11 +47,6 @@ package org.bigbluebutton.modules.phone.managers private var reconnecting:Boolean = false; public function WebRTCCallManager() { - var browserInfo:Array = JSAPI.getInstance().getBrowserInfo(); - if (browserInfo != null) { - browserType = browserInfo[0]; - browserVersion = browserInfo[1]; - } options = Options.getOptions(PhoneOptions) as PhoneOptions; // only show the warning if the admin has enabled WebRTC diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml index 816fc93020d6a6336ae25863ee02e9d24d29510e..7ebd65c0be60d25b577b86f4546f85644171a7b6 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml @@ -21,15 +21,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" + xmlns:common="org.bigbluebutton.common.*" width="350" layout="vertical" - close="onCloseClicked()" - show="{focusManager.setFocus(choiceFirst)}" xmlns:common="org.bigbluebutton.common.*"> + implements="org.bigbluebutton.common.IKeyboardClose" + show="focusManager.setFocus(choiceFirst)"> <fx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; import org.as3commons.lang.ArrayUtils; import org.as3commons.lang.StringUtils; + import org.bigbluebutton.common.IKeyboardClose; import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.modules.polling.events.StartCustomPollEvent; import org.bigbluebutton.modules.present.ui.views.PresentationWindow; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml index 4544f32ad88d72bc1dd32e69f68c23477f72b914..8d41b611f7588dfd3135ae0a3916c9b605f55975 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml @@ -24,9 +24,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" xmlns:common="org.bigbluebutton.common.*" + implements="org.bigbluebutton.common.IKeyboardClose" layout="absolute" width="580" height="410" + creationComplete="creationCompleteHandler(event)" close="onCancelClicked()" initialize="initData();" > @@ -37,6 +39,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; + import mx.events.FlexEvent; import org.bigbluebutton.modules.present.events.DownloadEvent; import org.bigbluebutton.modules.present.model.PresentationModel; @@ -44,6 +47,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. [Bindable] private var downloadablePresentations:ArrayCollection; + + protected function creationCompleteHandler(event:FlexEvent):void { + closeButton.setFocus() + } override public function move(x:Number, y:Number):void { return; @@ -56,6 +63,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function onCancelClicked():void { globalDispatch.dispatchEvent(new DownloadEvent(DownloadEvent.CLOSE_DOWNLOAD_WINDOW)); } + ]]> </fx:Script> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as index 3f6ce65b49f99b2657ca25a9e4c14c660a73e44e..031bbe8f8ff1fc4230aa0c887a3794ab7491ccc5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as @@ -36,7 +36,7 @@ package org.bigbluebutton.modules.screenshare.managers { import org.bigbluebutton.modules.screenshare.model.ScreenshareModel; import org.bigbluebutton.modules.screenshare.model.ScreenshareOptions; import org.bigbluebutton.modules.screenshare.services.ScreenshareService; - import org.bigbluebutton.modules.screenshare.utils.BrowserCheck; + import org.bigbluebutton.util.browser.BrowserCheck; public class ScreenshareManager { private static const LOGGER:ILogger = getClassLogger(ScreenshareManager); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/BrowserCheck.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/BrowserCheck.as deleted file mode 100755 index fb83f9057f4f06553cca241315b8aacee8ab609d..0000000000000000000000000000000000000000 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/BrowserCheck.as +++ /dev/null @@ -1,51 +0,0 @@ -/** -* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ -* -* Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). -* -* This program is free software; you can redistribute it and/or modify it under the -* terms of the GNU Lesser General Public License as published by the Free Software -* Foundation; either version 3.0 of the License, or (at your option) any later -* version. -* -* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY -* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License along -* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. -* -*/ - -package org.bigbluebutton.modules.screenshare.utils -{ - import flash.external.ExternalInterface; - - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - - public class BrowserCheck { - private static const LOGGER:ILogger = getClassLogger(BrowserCheck); - - public static function isWebRTCSupported():Boolean { - /*LOGGER.debug("isWebRTCSupported - ExternalInterface.available=[{0}], isWebRTCAvailable=[{1}]", [ExternalInterface.available, ExternalInterface.call("isWebRTCAvailable")]);*/ - return (ExternalInterface.available && ExternalInterface.call("isWebRTCAvailable")); - } - - public static function isChrome():Boolean { - var browser:Array = ExternalInterface.call("determineBrowser"); - return browser[0] == "Chrome"; - } - - public static function isFirefox():Boolean { - var browser:Array = ExternalInterface.call("determineBrowser"); - return browser[0] == "Firefox"; - } - - public static function isHttps():Boolean { - var url:String = ExternalInterface.call("window.location.href.toString"); - var httpsPattern:RegExp = /^https/; - return httpsPattern.test(url); - } - } -} diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/WebRTCScreenshareUtility.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/WebRTCScreenshareUtility.as index 49c52d33ba3fb3148a43d36a69b728ee7db41b08..3cafe37827d60d3167de125dd157c192f4778774 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/WebRTCScreenshareUtility.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/utils/WebRTCScreenshareUtility.as @@ -26,6 +26,7 @@ package org.bigbluebutton.modules.screenshare.utils import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.Options; import org.bigbluebutton.modules.screenshare.model.ScreenshareOptions; + import org.bigbluebutton.util.browser.BrowserCheck; public class WebRTCScreenshareUtility { private static const LOGGER:ILogger = getClassLogger(WebRTCScreenshareUtility); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml index 52461fc6ae8fd5b5b4b945fe08193bf2f9e4ebe9..839f808a5a543a66a43a48f0631dbf17d69303f8 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreensharePublishWindow.mxml @@ -128,8 +128,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. os = ""; } - browser = ExternalInterface.call("determineBrowser")[0]; - windowControls.maximizeRestoreBtn.enabled = false; titleBarOverlay.tabIndex = dsOptions.baseTabIndex; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml index a116d2546140e111a6b5271c8e517f4b8cbea842..432a3b1bb33a7b921464a4c4c12f7d412e8bb76a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml @@ -23,21 +23,22 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" + implements="org.bigbluebutton.common.IKeyboardClose" verticalScrollPolicy="off" horizontalScrollPolicy="off" horizontalAlign="center" - close="onCancelClicked()" layout="absolute" creationComplete="onCreationComplete()" keyUp="keyUpHandler(event)" - width="240" xmlns:common="org.bigbluebutton.common.*"> + width="280" xmlns:common="org.bigbluebutton.common.*"> <fx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; - + import mx.managers.PopUpManager; - + + import org.bigbluebutton.common.IKeyboardClose; import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.modules.sharednotes.events.SharedNotesEvent; import org.bigbluebutton.util.i18n.ResourceUtil; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml index 0e5c1ac1653df60c5bf692417b8c2654bb8ce167..6de89f5dfa3b487e31892350cefd8567866a33f4 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml @@ -50,11 +50,9 @@ import mx.controls.Alert; import mx.controls.Menu; import mx.core.FlexGlobals; - import mx.core.IFlexDisplayObject; import mx.events.CloseEvent; import mx.events.FlexEvent; import mx.events.MenuEvent; - import mx.managers.PopUpManager; import flashx.textLayout.formats.Direction; @@ -66,6 +64,7 @@ import org.bigbluebutton.common.Role; import org.bigbluebutton.common.events.LocaleChangeEvent; import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.PopUpUtil; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.main.events.ShortcutEvent; @@ -479,8 +478,7 @@ } protected function newNoteHandler():void { - var noteNameWindow:IFlexDisplayObject = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, SharedNotesNameWindow, true); - PopUpManager.centerPopUp(noteNameWindow); + PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, SharedNotesNameWindow, true); } protected function btnUndo_clickHandler(event:MouseEvent = null):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml index 0062d520004bf22948b8c1aee5c5377920bab3a4..e3c45162dfada46ff5a4941ea3bb88d1fec161e4 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml @@ -25,8 +25,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:mate="http://mate.asfusion.com/" xmlns:common="org.bigbluebutton.common.*" + implements="org.bigbluebutton.common.IKeyboardClose" + show="this.setFocus()" width="630" - close="onCloseClicked()" visible="false" showCloseButton="false"> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml index 8cbb7d6d08bf5332f1d525cf98f4221c71500e61..1e68d2f5e3bd5beec31b22a6ca4dc0f9168200ed 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml @@ -23,6 +23,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" + implements="org.bigbluebutton.common.IKeyboardClose" + show="this.setFocus()" close="onCloseClick()" layout="absolute" width="600" xmlns:common="org.bigbluebutton.common.*"> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml index 67af52f13cbd51634c60551ae5ab99c2e5f42a3c..95f897cf8b9f266aaf37c392f7bcce75ef44a49f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml @@ -24,10 +24,7 @@ xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mate="http://mate.asfusion.com/" creationComplete="onCreationComplete()" - verticalScrollPolicy="off" horizontalScrollPolicy="off" - verticalAlign="middle" - horizontalGap="8" - horizontalAlign="center"> + verticalScrollPolicy="off" horizontalScrollPolicy="off"> <fx:Declarations> <mate:Listener type="{UsersRollEvent.USER_ROLL_OVER}" method="onRollOver" /> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml index 83a32b116251dad95afa4f504f6629a5c806f956..1992f62e615156a607c9cc234f34714f0e71cea9 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml @@ -166,9 +166,9 @@ $Id: $ private const LISTEN_TO_BREAKOUT_ROOM:String = "Listen To Breakout Room"; private const JOIN_BREAKOUT_ROOM:String = "Join Breakout Room"; - private const STATUS_GRID_WIDTH:int = 56; + private const STATUS_GRID_WIDTH:int = 50; private const NAME_GRID_MIN_WIDTH:int = 80; - private const MEDIA_GRID_WIDTH:int = 118; + private const MEDIA_GRID_WIDTH:int = 100; private var muteMeRolled:Boolean = false; @@ -375,7 +375,7 @@ $Id: $ } private function openEmojiStatusMenu():void { - var moodMenu:MoodMenu = PopUpUtil.createNonModelPopUp(DisplayObject(FlexGlobals.topLevelApplication), MoodMenu, false) as MoodMenu; + var moodMenu:MoodMenu = PopUpUtil.createNonModalPopUp(DisplayObject(FlexGlobals.topLevelApplication), MoodMenu, false) as MoodMenu; moodMenu.btn = emojiStatusBtn; moodMenu.show(); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as index 2df9f2f81727875b30351f2dbbf11be2ab2c4dc4..9fd13901574f9a1d9a840e92c0177f4d167db926 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as @@ -18,7 +18,7 @@ */ package org.bigbluebutton.modules.videoconf.model { import org.bigbluebutton.core.Options; - import org.bigbluebutton.main.api.JSAPI; + import org.bigbluebutton.util.browser.BrowserCheck; public class VideoConfOptions extends Options { public var uri:String = "rtmp://localhost/video"; @@ -58,10 +58,8 @@ package org.bigbluebutton.modules.videoconf.model { } override protected function handleExtraData():void { - var browserInfo:Array = JSAPI.getInstance().getBrowserInfo(); - // If we are using Puffin browser - if (browserInfo[0] == "Puffin" && String(browserInfo[2]).substr(0, 3) < "4.6") { + if (BrowserCheck.isPuffinBelow46()) { showButton = false; } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml index bcfa0b19b9986c2e5dfa05bd93e524dc0d89089b..84b20d8289b0336cea6e7946a6b7d3b0ac36dfc8 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml @@ -42,25 +42,31 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; + import com.asfusion.mate.events.Dispatcher; + + import mx.controls.Alert; + import mx.controls.Menu; + import mx.events.MenuEvent; + import mx.styles.IStyleManager2; + import mx.styles.StyleManager; + + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.common.Media; + import org.bigbluebutton.core.events.LockControlEvent; + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.main.events.BBBEvent; + import org.bigbluebutton.main.events.ShortcutEvent; + import org.bigbluebutton.main.model.users.events.ChangeMyRole; + import org.bigbluebutton.main.views.MainToolbar; + import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent; + import org.bigbluebutton.modules.videoconf.events.StopShareCameraRequestEvent; + import org.bigbluebutton.util.browser.BrowserCheck; + import org.bigbluebutton.util.i18n.ResourceUtil; + + - import mx.controls.Menu; - import mx.events.MenuEvent; - import mx.styles.IStyleManager2; - import mx.styles.StyleManager; - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - import org.bigbluebutton.common.Media; - import org.bigbluebutton.core.events.LockControlEvent; - import org.bigbluebutton.core.model.LiveMeeting; - import org.bigbluebutton.main.events.BBBEvent; - import org.bigbluebutton.main.events.ShortcutEvent; - import org.bigbluebutton.main.model.users.events.ChangeMyRole; - import org.bigbluebutton.main.views.MainToolbar; - import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent; - import org.bigbluebutton.modules.videoconf.events.StopShareCameraRequestEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; private static const LOGGER:ILogger = getClassLogger(ToolbarPopupButton); @@ -177,6 +183,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function openPublishWindow():void{ + if (!BrowserCheck.isHttps() && ((BrowserCheck.isChrome() && BrowserCheck.browserMajorVersion >= "60") || (BrowserCheck.isOpera() && BrowserCheck.browserMajorVersion >= "47"))) { + Alert.show(ResourceUtil.getInstance().getString("bbb.video.message.browserhttp", [BrowserCheck.browserName])); + return; + } this.enabled = false; if(_currentState == ON_STATE) { LOGGER.debug("[ToolbarPopupButton:openPublishWindow] Close window"); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserAvatar.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserAvatar.as old mode 100644 new mode 100755 index 65a6aa23e324cbbbfc01f5aa636af0956b5796b1..e86c44b7f65974eb33952ec426732b1a89628cde --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserAvatar.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserAvatar.as @@ -3,6 +3,8 @@ package org.bigbluebutton.modules.videoconf.views import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; + + import mx.core.UIComponent; public class UserAvatar extends UserGraphic { @@ -18,14 +20,17 @@ package org.bigbluebutton.modules.videoconf.views _completed = false; _imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete); - addChild(_imageLoader); + var request:URLRequest = new URLRequest(avatarUrl); _imageLoader.load(request); } private function onLoadingComplete(event:Event):void { _completed = true; + addChild(_imageLoader); setOriginalDimensions(_imageLoader.width, _imageLoader.height); + if (parent && parent is UIComponent) + UIComponent(parent).invalidateDisplayList(); } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphic.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphic.as index 494db394b799329f8bd7a514ff8b8884fdd56404..f81e95db79a0ca3eeb6fd1ab26882983c2aefa88 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphic.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/UserGraphic.as @@ -62,12 +62,12 @@ package org.bigbluebutton.modules.videoconf.views object_height = unscaledHeight; object_width = Math.ceil(unscaledHeight * aspectRatio); object_y = BORDER_THICKNESS; - object_x = Math.floor((unscaledWidth - object.width) / 2); + object_x = Math.floor((unscaledWidth - object_width) / 2); } else { object_width = unscaledWidth; object_height = Math.ceil(unscaledWidth / aspectRatio); object_x = BORDER_THICKNESS; - object_y = Math.floor((unscaledHeight - object.height) / 2); + object_y = Math.floor((unscaledHeight - object_height) / 2); } object.x = object_x; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as index bd3f9dc173d8e301e4b1362eaedceb8b1aa0af4d..153d0ee7386098b400caa965c9670a10fc7862fe 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.as @@ -76,6 +76,7 @@ package org.bigbluebutton.modules.whiteboard.views { whiteboardToolbar.whiteboardAccessModified(wbModel.multiUser); this.clipContent = true; + this.mouseEnabled = false; //create the annotation display container this.addChild(graphicObjectHolder); @@ -119,12 +120,14 @@ package org.bigbluebutton.modules.whiteboard.views { addEventListener(MouseEvent.MOUSE_DOWN, doMouseDown); addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); + mouseEnabled = true; } private function unregisterForMouseEvents():void { removeEventListener(MouseEvent.MOUSE_DOWN, doMouseDown); removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver); removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut); + mouseEnabled = false; } private function doMouseUp(event:MouseEvent):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/util/browser/BrowserCheck.as b/bigbluebutton-client/src/org/bigbluebutton/util/browser/BrowserCheck.as new file mode 100755 index 0000000000000000000000000000000000000000..7325903ba6866114d6a67a49aa4ba7fdec21a3f7 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/util/browser/BrowserCheck.as @@ -0,0 +1,95 @@ +/** + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 3.0 of the License, or (at your option) any later + * version. + * + * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. + * + */ + +package org.bigbluebutton.util.browser { + import flash.external.ExternalInterface; + + import org.as3commons.lang.StringUtils; + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + + public class BrowserCheck { + private static const LOGGER:ILogger = getClassLogger(BrowserCheck); + + private static var _browserName:String; + + private static var _majorVersion:String; + + private static var _fullVersion:String; + + // The function below is called in $cinit, while the class is used for the first time. + getBrowserInfo(); + + public static function isWebRTCSupported():Boolean { + /*LOGGER.debug("isWebRTCSupported - ExternalInterface.available=[{0}], isWebRTCAvailable=[{1}]", [ExternalInterface.available, ExternalInterface.call("isWebRTCAvailable")]);*/ + return (ExternalInterface.available && ExternalInterface.call("isWebRTCAvailable")); + } + + public static function get browserName():String { + return _browserName; + } + + public static function get browserMajorVersion():String { + return _majorVersion; + } + + public static function get browserFullVersion():String { + return _fullVersion; + } + + public static function isChrome():Boolean { + return _browserName.toLowerCase() == "chrome"; + } + + public static function isOpera():Boolean { + return _browserName.toLowerCase() == "opera"; + } + + public static function isFirefox():Boolean { + return _browserName.toLowerCase() == "firefox"; + } + + public static function isPuffinBelow46():Boolean { + return _browserName.toLowerCase() == "puffin" && String(_fullVersion).substr(0, 3) < "4.6"; + } + + public static function isPuffin46AndAbove():Boolean { + return browserName.toLowerCase() == "puffin" && String(_fullVersion).substr(0, 3) >= "4.6"; + } + + private static function getBrowserInfo():void { + if (ExternalInterface.available && StringUtils.isEmpty(browserName)) { + var browserInfo:Array = ExternalInterface.call("determineBrowser"); + _browserName = browserInfo[0]; + _majorVersion = String(browserInfo[1]); + _fullVersion = String(browserInfo[2]); + } else { + _browserName = "unknown"; + _majorVersion = "0"; + _fullVersion = "0"; + } + } + + public static function isHttps():Boolean { + var url:String = ExternalInterface.call("window.location.href.toString"); + var httpsPattern:RegExp = /^https/; + return httpsPattern.test(url); + } + } +} diff --git a/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as b/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as index 99776db9ad3930604499e54fce9ad4dc3b413fd5..2f7a84f010996fbf8491ad88bd454f9aac769347 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as @@ -116,6 +116,7 @@ package org.bigbluebutton.util.i18n locales.push({ code: DEFAULT_LOCALE_IDENTIFIER, name: "", + native: "", direction: "ltr" }); @@ -123,6 +124,7 @@ package org.bigbluebutton.util.i18n locales.push({ code: locale.@code.toString(), name: locale.@name.toString(), + native: locale.@native.toString(), direction: locale.@direction.valueOf().toString().toLowerCase() == "rtl" ? "rtl" : "ltr" }); } @@ -177,13 +179,7 @@ package org.bigbluebutton.util.i18n } private function reloadLocaleNames():void { - for each (var item:* in locales) { - if (item.code == DEFAULT_LOCALE_IDENTIFIER) { - item.name = ResourceUtil.getInstance().getString("bbb.langSelector." + item.code, null, getDefaultLocale()); - } else { - item.name = ResourceUtil.getInstance().getString("bbb.langSelector." + item.code, null, preferredLocale); - } - } + locales[0].name = locales[0].native = ResourceUtil.getInstance().getString("bbb.langSelector." + locales[0].code, null, getDefaultLocale()); locales.sort(localesCompareFunction); } diff --git a/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js b/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js index ac1c2fc6133d5577d4156fe392ad8d4df1716143..ba11154b81ad76f6dc10b4fb6d1bed4434a56592 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js +++ b/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js @@ -357,15 +357,15 @@ export default function addAnnotation(meetingId, whiteboardId, userId, annotatio const cb = (err, numChanged) => { if (err) { - return Logger.error(`Adding annotation2x to collection: ${err}`); + return Logger.error(`Adding annotation to collection: ${err}`); } const { insertedId } = numChanged; if (insertedId) { - return Logger.info(`Added annotation2x id=${annotation.id} whiteboard=${whiteboardId}`); + return Logger.info(`Added annotation id=${annotation.id} whiteboard=${whiteboardId}`); } - return Logger.info(`Upserted annotation2x id=${annotation.id} whiteboard=${whiteboardId}`); + return Logger.info(`Upserted annotation id=${annotation.id} whiteboard=${whiteboardId}`); }; return Annotations.upsert(query.selector, query.modifier, cb); diff --git a/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js b/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js index 8873ca47ca8f4f9f13b4cdce852cbcafb4a2f96d..c543326780c7a7a8a4fb78ec23a629e87c2b27d6 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js +++ b/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js @@ -18,7 +18,7 @@ export default function clearAnnotations(meetingId, whiteboardId, userId) { const cb = (err) => { if (err) { - return Logger.error(`Removing Shapes2x from collection: ${err}`); + return Logger.error(`Removing Annotations from collection: ${err}`); } if (!meetingId) { @@ -26,10 +26,10 @@ export default function clearAnnotations(meetingId, whiteboardId, userId) { } if (userId) { - return Logger.info(`Removed Shapes2x for userId=${userId} where whiteboard=${whiteboardId}`); + return Logger.info(`Removed Annotations for userId=${userId} where whiteboard=${whiteboardId}`); } - return Logger.info(`Removed Shapes2x where whiteboard=${whiteboardId}`); + return Logger.info(`Removed Annotations where whiteboard=${whiteboardId}`); }; return Annotations.remove(selector, cb); diff --git a/bigbluebutton-html5/imports/api/annotations/server/publishers.js b/bigbluebutton-html5/imports/api/annotations/server/publishers.js index 06d085e5983bbe6c33592892c0da7bdd6542bae7..e682fcb49c91696e91e0b6c0bf5600b8af7e7c52 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/publishers.js +++ b/bigbluebutton-html5/imports/api/annotations/server/publishers.js @@ -11,7 +11,7 @@ function annotations(credentials) { check(requesterUserId, String); check(requesterToken, String); - Logger.info(`Publishing Annotations2x for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing Annotations for ${meetingId} ${requesterUserId} ${requesterToken}`); return Annotations.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/breakouts/index.js b/bigbluebutton-html5/imports/api/breakouts/index.js index 09388c9cc001a97d82ec127f88b851c4171ef9a6..41c6ed54e407cd6ee5d1090a9554feb6fd75af35 100644 --- a/bigbluebutton-html5/imports/api/breakouts/index.js +++ b/bigbluebutton-html5/imports/api/breakouts/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Breakouts = new Mongo.Collection('breakouts2x'); +const Breakouts = new Mongo.Collection('breakouts'); if (Meteor.isServer) { // types of queries for the breakouts: diff --git a/bigbluebutton-html5/imports/api/breakouts/server/publishers.js b/bigbluebutton-html5/imports/api/breakouts/server/publishers.js index 6efb01dd1f5d9525d67e8534bd70ea42958f47bb..f61d464c0ccc784de5cc3e1481251beed5b3bd8f 100644 --- a/bigbluebutton-html5/imports/api/breakouts/server/publishers.js +++ b/bigbluebutton-html5/imports/api/breakouts/server/publishers.js @@ -9,7 +9,7 @@ function breakouts(credentials) { requesterUserId, } = credentials; - Logger.info(`Publishing Breakouts2x for ${meetingId} ${requesterUserId}`); + Logger.info(`Publishing Breakouts for ${meetingId} ${requesterUserId}`); return Breakouts.find({ $or: [ @@ -29,4 +29,4 @@ function publish(...args) { return mapToAcl('subscriptions.breakouts', boundBreakouts)(args); } -Meteor.publish('breakouts2x', publish); +Meteor.publish('breakouts', publish); diff --git a/bigbluebutton-html5/imports/api/captions/index.js b/bigbluebutton-html5/imports/api/captions/index.js index 657d998ccf44b9776822ba8555e6ecd0e58397c2..b5d076f34bf1e8fd7b25201f9187004f743f379e 100644 --- a/bigbluebutton-html5/imports/api/captions/index.js +++ b/bigbluebutton-html5/imports/api/captions/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Captions = new Mongo.Collection('captions2x'); +const Captions = new Mongo.Collection('captions'); if (Meteor.isServer) { // types of queries for the captions: diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js index 3b69f980230ec36f9035e8c69e43b052834deda7..c9642a93ee95cee3effbdc00ec9697ca20567881 100644 --- a/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js +++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js @@ -37,15 +37,15 @@ export default function addCaption(meetingId, locale, captionHistory, id = false const cb = (err, numChanged) => { if (err) { - return Logger.error(`Adding caption2x to collection: ${err}`); + return Logger.error(`Adding caption to collection: ${err}`); } const { insertedId } = numChanged; if (insertedId) { - return Logger.verbose(`Added caption2x locale=${locale} meeting=${meetingId}`); + return Logger.verbose(`Added caption locale=${locale} meeting=${meetingId}`); } - return Logger.verbose(`Upserted caption2x locale=${locale} meeting=${meetingId}`); + return Logger.verbose(`Upserted caption locale=${locale} meeting=${meetingId}`); }; return Captions.upsert(selector, modifier, cb); diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js index 4e492c86b057542541ca6b3e4776335ad506620c..9d10d369cd3ff37cef465f99832ee8299eee3df6 100644 --- a/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js +++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js @@ -3,8 +3,8 @@ import Logger from '/imports/startup/server/logger'; export default function clearCaptions(meetingId) { if (meetingId) { - return Captions.remove({ meetingId }, Logger.info(`Cleared Captions2x (${meetingId})`)); + return Captions.remove({ meetingId }, Logger.info(`Cleared Captions (${meetingId})`)); } - return Captions.remove({}, Logger.info('Cleared Captions2x (all)')); + return Captions.remove({}, Logger.info('Cleared Captions (all)')); } diff --git a/bigbluebutton-html5/imports/api/captions/server/publishers.js b/bigbluebutton-html5/imports/api/captions/server/publishers.js index 987ce08597517a3efad02a7698fa0febfee20c34..869949618a90956baae7a0f4db38d59b43f2befc 100644 --- a/bigbluebutton-html5/imports/api/captions/server/publishers.js +++ b/bigbluebutton-html5/imports/api/captions/server/publishers.js @@ -11,7 +11,7 @@ function captions(credentials) { check(requesterUserId, String); check(requesterToken, String); - Logger.verbose(`Publishing Captions2x for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.verbose(`Publishing Captions for ${meetingId} ${requesterUserId} ${requesterToken}`); return Captions.find({ meetingId }); } @@ -21,4 +21,4 @@ function publish(...args) { return mapToAcl('subscriptions.captions', boundCaptions)(args); } -Meteor.publish('captions2x', publish); +Meteor.publish('captions', publish); diff --git a/bigbluebutton-html5/imports/api/chat/index.js b/bigbluebutton-html5/imports/api/chat/index.js index 5338ef2f36650d2321e5416021d2171957ac54a8..a28361d05c70d390b43ae25f3e904ef8e09c241d 100644 --- a/bigbluebutton-html5/imports/api/chat/index.js +++ b/bigbluebutton-html5/imports/api/chat/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Chat = new Mongo.Collection('chat2x'); +const Chat = new Mongo.Collection('chat'); if (Meteor.isServer) { // types of queries for the chat: diff --git a/bigbluebutton-html5/imports/api/chat/server/publishers.js b/bigbluebutton-html5/imports/api/chat/server/publishers.js index a5d58a409c6326a2dcd7eae8af6dfd25d52f9fbf..752e9da7271ef8911ec23cbe9f97b1946be1207d 100644 --- a/bigbluebutton-html5/imports/api/chat/server/publishers.js +++ b/bigbluebutton-html5/imports/api/chat/server/publishers.js @@ -37,4 +37,4 @@ function publish(...args) { return mapToAcl('subscriptions.chat', boundChat)(args); } -Meteor.publish('chat2x', publish); +Meteor.publish('chat', publish); diff --git a/bigbluebutton-html5/imports/api/cursor/index.js b/bigbluebutton-html5/imports/api/cursor/index.js index e023b336bd6e4c7cda74ca76587bf7be26be5dc2..b058fa39db50b38c392ca22cb614defc2533fdae 100644 --- a/bigbluebutton-html5/imports/api/cursor/index.js +++ b/bigbluebutton-html5/imports/api/cursor/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Cursor = new Mongo.Collection('cursor2x'); +const Cursor = new Mongo.Collection('cursor'); if (Meteor.isServer) { // types of queries for the cursor: diff --git a/bigbluebutton-html5/imports/api/cursor/server/publishers.js b/bigbluebutton-html5/imports/api/cursor/server/publishers.js index 7710e006040d456b9b8a7028991df51eae391d7b..dc693e60bac8c3cc84a90521d6fcd967c3aa6cec 100644 --- a/bigbluebutton-html5/imports/api/cursor/server/publishers.js +++ b/bigbluebutton-html5/imports/api/cursor/server/publishers.js @@ -12,7 +12,7 @@ function cursor(credentials) { check(requesterUserId, String); check(requesterToken, String); - Logger.debug(`Publishing Cursor2x for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing Cursor for ${meetingId} ${requesterUserId} ${requesterToken}`); return Cursor.find({ meetingId }); } @@ -22,5 +22,5 @@ function publish(...args) { return mapToAcl('subscriptions.cursor', boundCursor)(args); } -Meteor.publish('cursor2x', publish); +Meteor.publish('cursor', publish); diff --git a/bigbluebutton-html5/imports/api/meetings/index.js b/bigbluebutton-html5/imports/api/meetings/index.js index ce719639feb8d41af22a508f26424b7049a23e49..1324a4a61fd7e41b1fe1e7ccc7b2498de455ec7c 100644 --- a/bigbluebutton-html5/imports/api/meetings/index.js +++ b/bigbluebutton-html5/imports/api/meetings/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Meetings = new Mongo.Collection('meetings2x'); +const Meetings = new Mongo.Collection('meetings'); if (Meteor.isServer) { // types of queries for the meetings: diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js index 8a6e28e6df155621d1abb00e7e59de0ea5568870..d18c31243958ec2e3c5d5f4b991f3e1a5ce578c1 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js +++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js @@ -79,11 +79,11 @@ export default function addMeeting(meeting) { const { insertedId } = numChanged; if (insertedId) { - Logger.info(`Added meeting2x id=${meetingId}`); + Logger.info(`Added meeting id=${meetingId}`); } if (numChanged) { - Logger.info(`Upserted meeting2x id=${meetingId}`); + Logger.info(`Upserted meeting id=${meetingId}`); } }; diff --git a/bigbluebutton-html5/imports/api/meetings/server/publishers.js b/bigbluebutton-html5/imports/api/meetings/server/publishers.js index c3cc4d404481cba26f1ba3eb8ccb2a88d02d85b7..df5b44f8dfc206f2c4ca1f0fc14287b5c7998ffc 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/publishers.js +++ b/bigbluebutton-html5/imports/api/meetings/server/publishers.js @@ -11,7 +11,7 @@ function meetings(credentials) { check(requesterUserId, String); check(requesterToken, String); - Logger.info(`Publishing meeting2x =${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing meeting =${meetingId} ${requesterUserId} ${requesterToken}`); return Meetings.find({ meetingId, @@ -23,5 +23,5 @@ function publish(...args) { return mapToAcl('subscriptions.meetings', boundMeetings)(args); } -Meteor.publish('meetings2x', publish); +Meteor.publish('meetings', publish); diff --git a/bigbluebutton-html5/imports/api/polls/index.js b/bigbluebutton-html5/imports/api/polls/index.js index 1bb2c01a955c2035c9166a94e4e1b1f55023f755..da84a1e41714dc94c870673a96e34230854b7d90 100644 --- a/bigbluebutton-html5/imports/api/polls/index.js +++ b/bigbluebutton-html5/imports/api/polls/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Polls = new Mongo.Collection('polls2x'); +const Polls = new Mongo.Collection('polls'); if (Meteor.isServer) { // We can have just one active poll per meeting diff --git a/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js b/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js index 192c80af2ce883d6e54e39549b102e3286e69fb2..bc59d38e06d85cadeb75388256af9206beb725c2 100644 --- a/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js +++ b/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js @@ -43,10 +43,10 @@ export default function publishVote(credentials, id, pollAnswerId) { // TODO dis const cb = (err) => { if (err) { - return Logger.error(`Updating Polls2x collection: ${err}`); + return Logger.error(`Updating Polls collection: ${err}`); } - return Logger.info(`Updating Polls2x collection (meetingId: ${meetingId}, + return Logger.info(`Updating Polls collection (meetingId: ${meetingId}, pollId: ${currentPoll.id}!)`); }; diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js index 703a9a07fbe2a289dd63de9372275c8b3c3b4824..40fa737ef17f702511ccb4569333320c42ec0116 100644 --- a/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js +++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js @@ -48,15 +48,15 @@ export default function addPoll(meetingId, requesterId, poll) { const cb = (err, numChanged) => { if (err != null) { - return Logger.error(`Adding Poll2x to collection: ${poll.id}`); + return Logger.error(`Adding Poll to collection: ${poll.id}`); } const { insertedId } = numChanged; if (insertedId) { - return Logger.info(`Added Poll2x id=${poll.id}`); + return Logger.info(`Added Poll id=${poll.id}`); } - return Logger.info(`Upserted Poll2x id=${poll.id}`); + return Logger.info(`Upserted Poll id=${poll.id}`); }; return Polls.upsert(selector, modifier, cb); diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js index 8461cf46b24318003c79912d67292721d12eee68..d614528ebf32449b050282a3aeca4348984c9d37 100644 --- a/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js +++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js @@ -3,8 +3,8 @@ import Logger from '/imports/startup/server/logger'; export default function clearPolls(meetingId) { if (meetingId) { - return Polls.remove({ meetingId }, Logger.info(`Cleared Polls2x (${meetingId})`)); + return Polls.remove({ meetingId }, Logger.info(`Cleared Polls (${meetingId})`)); } - return Polls.remove({}, Logger.info('Cleared Polls2x (all)')); + return Polls.remove({}, Logger.info('Cleared Polls (all)')); } diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js index 92d4e5d06defd0f7164ec6d6d4b309f48e36cc46..6d59f73cbde6cde7b0a61442b86eb5b3584c9441 100644 --- a/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js +++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js @@ -13,10 +13,10 @@ export default function removePoll(meetingId, id) { const cb = (err) => { if (err) { - return Logger.error(`Removing Poll2x from collection: ${err}`); + return Logger.error(`Removing Poll from collection: ${err}`); } - return Logger.info(`Removed Poll2x id=${id}`); + return Logger.info(`Removed Poll id=${id}`); }; return Polls.remove(selector, cb); diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js index c8b79259a0f19890778902a46d062c65a92672de..3cb37bd1dab58047d9bb316397a9b1f089adaac0 100644 --- a/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js +++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js @@ -37,10 +37,10 @@ export default function updateVotes(poll, meetingId, requesterId) { const cb = (err) => { if (err) { - return Logger.error(`Updating Polls2x collection: ${err}`); + return Logger.error(`Updating Polls collection: ${err}`); } - return Logger.info(`Updating Polls2x collection (meetingId: ${meetingId}, pollId: ${id}!)`); + return Logger.info(`Updating Polls collection (meetingId: ${meetingId}, pollId: ${id}!)`); }; return Polls.update(selector, modifier, cb); diff --git a/bigbluebutton-html5/imports/api/polls/server/publishers.js b/bigbluebutton-html5/imports/api/polls/server/publishers.js index d1f9bd215206a929cc47296e8142fad8ea48995c..15e9815a5c1678d14627036555f70fe584b4406c 100644 --- a/bigbluebutton-html5/imports/api/polls/server/publishers.js +++ b/bigbluebutton-html5/imports/api/polls/server/publishers.js @@ -11,7 +11,7 @@ function polls(credentials) { check(requesterUserId, String); check(requesterToken, String); - Logger.info(`Publishing polls2x =${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing polls =${meetingId} ${requesterUserId} ${requesterToken}`); const selector = { meetingId, @@ -26,5 +26,5 @@ function publish(...args) { return mapToAcl('subscriptions.polls', boundPolls)(args); } -Meteor.publish('polls2x', publish); +Meteor.publish('polls', publish); diff --git a/bigbluebutton-html5/imports/api/presentations/index.js b/bigbluebutton-html5/imports/api/presentations/index.js index adcc4305c5b6f5ecbca61947ea085e6cd8178a63..e0df4849a02a1ac8b3216832f82c582c4219694e 100644 --- a/bigbluebutton-html5/imports/api/presentations/index.js +++ b/bigbluebutton-html5/imports/api/presentations/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Presentations = new Mongo.Collection('presentations2x'); +const Presentations = new Mongo.Collection('presentations'); if (Meteor.isServer) { // types of queries for the presentations: diff --git a/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js b/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js index 809660d99b22cd8dd655e69208b64b7c43b82a64..a8c192261342d621083d34ba86fed75dd7b520c4 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js +++ b/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js @@ -71,15 +71,15 @@ export default function handlePresentationConversionUpdate({ body }, meetingId) const cb = (err, numChanged) => { if (err) { - return Logger.error(`Updating conversion status presentation2x to collection: ${err}`); + return Logger.error(`Updating conversion status presentation to collection: ${err}`); } const { insertedId } = numChanged; if (insertedId) { - return Logger.info(`Updated presentation2x conversion status=${status} id=${presentationId} meeting=${meetingId}`); + return Logger.info(`Updated presentation conversion status=${status} id=${presentationId} meeting=${meetingId}`); } - return Logger.info(`Upserted presentation2x conversion status=${status} id=${presentationId} meeting=${meetingId}`); + return Logger.info(`Upserted presentation conversion status=${status} id=${presentationId} meeting=${meetingId}`); }; return Presentations.upsert(selector, modifier, cb); diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js index fe9282148717cf23c6457ec9508e220687a09e46..db07ede3a8196bbdc9b27819e6f42a5b029275a3 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js +++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js @@ -54,7 +54,7 @@ export default function addPresentation(meetingId, presentation) { const cb = (err, numChanged) => { if (err) { - return Logger.error(`Adding presentation2x to collection: ${err}`); + return Logger.error(`Adding presentation to collection: ${err}`); } addSlides(meetingId, presentation.id, presentation.pages); @@ -65,10 +65,10 @@ export default function addPresentation(meetingId, presentation) { setCurrentPresentation(meetingId, presentation.id); } - return Logger.info(`Added presentation2x id=${presentation.id} meeting=${meetingId}`); + return Logger.info(`Added presentation id=${presentation.id} meeting=${meetingId}`); } - return Logger.info(`Upserted presentation2x id=${presentation.id} meeting=${meetingId}`); + return Logger.info(`Upserted presentation id=${presentation.id} meeting=${meetingId}`); }; return Presentations.upsert(selector, modifier, cb); diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js index b92072dc395b04f03907b04b8aca425439ca8a7f..2d084f2b7bad4eeb7109936f167aaeabeae9b2a1 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js +++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js @@ -4,7 +4,7 @@ import Logger from '/imports/startup/server/logger'; export default function clearPresentations(meetingId) { if (meetingId) { return Presentations.remove({ meetingId }, - Logger.info(`Cleared Presentations2x (${meetingId})`)); + Logger.info(`Cleared Presentations (${meetingId})`)); } return Presentations.remove({}, Logger.info('Cleared Presentations (all)')); } diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js index d67aaf6e22931b5cd672292bb2a26e417ea25349..3343376422d350e443f6fe4196777b607e1d64a6 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js +++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js @@ -33,10 +33,10 @@ export default function setCurrentPresentation(meetingId, presentationId) { }, callback: (err) => { if (err) { - return Logger.error(`Setting as current presentation2x id=${presentationId}: ${err}`); + return Logger.error(`Setting as current presentation id=${presentationId}: ${err}`); } - return Logger.info(`Setted as current presentation2x id=${presentationId}`); + return Logger.info(`Setted as current presentation id=${presentationId}`); }, }; diff --git a/bigbluebutton-html5/imports/api/presentations/server/publishers.js b/bigbluebutton-html5/imports/api/presentations/server/publishers.js index 23186c5ee34369d7b824b88dd60612c0f8ece35f..4d070b9c837ac02c6bb115c78a9ce101869cb89c 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/publishers.js +++ b/bigbluebutton-html5/imports/api/presentations/server/publishers.js @@ -11,7 +11,7 @@ function presentations(credentials) { check(requesterUserId, String); check(requesterToken, String); - Logger.info(`Publishing Presentations2x for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing Presentations for ${meetingId} ${requesterUserId} ${requesterToken}`); return Presentations.find({ meetingId }); } @@ -21,4 +21,4 @@ function publish(...args) { return mapToAcl('subscriptions.presentations', boundPresentations)(args); } -Meteor.publish('presentations2x', publish); +Meteor.publish('presentations', publish); diff --git a/bigbluebutton-html5/imports/api/slides/index.js b/bigbluebutton-html5/imports/api/slides/index.js index 7831569b538ad980ee2843959160dfb24189efeb..8ee878085f9b22f14efe4b6f099e5c5a82f26bae 100644 --- a/bigbluebutton-html5/imports/api/slides/index.js +++ b/bigbluebutton-html5/imports/api/slides/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Slides = new Mongo.Collection('slides2x'); +const Slides = new Mongo.Collection('slides'); if (Meteor.isServer) { // types of queries for the slides: diff --git a/bigbluebutton-html5/imports/api/slides/server/publishers.js b/bigbluebutton-html5/imports/api/slides/server/publishers.js index 6c6054e1448b951f27fba5580d1ee5802623c94e..f517b7538225e08ea8a58d5933e29a1372726ae2 100644 --- a/bigbluebutton-html5/imports/api/slides/server/publishers.js +++ b/bigbluebutton-html5/imports/api/slides/server/publishers.js @@ -21,4 +21,4 @@ function publish(...args) { return mapToAcl('subscriptions.slides', boundSlides)(args); } -Meteor.publish('slides2x', publish); +Meteor.publish('slides', publish); diff --git a/bigbluebutton-html5/imports/api/users/index.js b/bigbluebutton-html5/imports/api/users/index.js index 62f1d206fc5b90e297ba3e615b187453551f849a..6f7e08d42626fcf2722d9846bf8e3b9ca900c6ca 100644 --- a/bigbluebutton-html5/imports/api/users/index.js +++ b/bigbluebutton-html5/imports/api/users/index.js @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -const Users = new Mongo.Collection('users2x'); +const Users = new Mongo.Collection('users'); if (Meteor.isServer) { // types of queries for the users: diff --git a/bigbluebutton-html5/imports/api/users/server/methods.js b/bigbluebutton-html5/imports/api/users/server/methods.js index 0e41df246ffcdcc01015766fd143544d716b064b..4aa61b73a820007222945324e240caf0e0303291 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods.js +++ b/bigbluebutton-html5/imports/api/users/server/methods.js @@ -16,4 +16,4 @@ Meteor.methods(mapToAcl(['methods.userLogout', 'methods.setEmojiStatus', 'method kickUser, })); -Meteor.methods({ validateAuthToken2x: validateAuthToken }); +Meteor.methods({ validateAuthToken, }); diff --git a/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js index 257cc16c336c18f1bb73effe350dc5242e275778..b1b3ed4adff593a57029a8845ddc603b6cc70fa3 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js @@ -3,7 +3,7 @@ import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; -import createDummyUser2x from '../modifiers/createDummyUser'; +import createDummyUser from '../modifiers/createDummyUser'; import setConnectionStatus from '../modifiers/setConnectionStatus'; const ONLINE_CONNECTION_STATUS = 'online'; @@ -25,7 +25,7 @@ export default function validateAuthToken(credentials) { }); if (!User) { - createDummyUser2x(meetingId, requesterUserId, requesterToken); + createDummyUser(meetingId, requesterUserId, requesterToken); } else if (User.validated) { setConnectionStatus(meetingId, requesterUserId, ONLINE_CONNECTION_STATUS); } diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js b/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js index c3fe5b94976ddc90a47046a3518db942a6fcf2b1..a292b1bf077b8924906ee02d5a2a9cd0fbde7ca7 100644 --- a/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js +++ b/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js @@ -3,7 +3,7 @@ import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; -export default function createDummyUser2x(meetingId, userId, authToken) { +export default function createDummyUser(meetingId, userId, authToken) { check(meetingId, String); check(userId, String); check(authToken, String); @@ -26,7 +26,7 @@ export default function createDummyUser2x(meetingId, userId, authToken) { return Logger.error(`Creating dummy user to collection: ${err}`); } - Logger.info(`Created dummy user 2x id=${userId} token=${authToken} meeting=${meetingId}`); + Logger.info(`Created dummy user id=${userId} token=${authToken} meeting=${meetingId}`); }; return Users.insert(doc, cb); diff --git a/bigbluebutton-html5/imports/api/users/server/publishers.js b/bigbluebutton-html5/imports/api/users/server/publishers.js index 20257202542c8f135d258aa3847eafb728bc42b6..a75d672863e4fa38d029bc68e71d18cdce420d47 100644 --- a/bigbluebutton-html5/imports/api/users/server/publishers.js +++ b/bigbluebutton-html5/imports/api/users/server/publishers.js @@ -6,7 +6,7 @@ import mapToAcl from '/imports/startup/mapToAcl'; import userLeaving from './methods/userLeaving'; -Meteor.publish('current-user2x', (credentials) => { +Meteor.publish('current-user', (credentials) => { const { meetingId, requesterUserId, requesterToken } = credentials; check(meetingId, String); @@ -57,7 +57,7 @@ function users(credentials) { }, }; - Logger.info(`Publishing Users2x for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing Users for ${meetingId} ${requesterUserId} ${requesterToken}`); return Users.find(selector, options); } @@ -67,4 +67,4 @@ function publish(...args) { return mapToAcl('subscriptions.users', boundUsers)(args); } -Meteor.publish('users2x', publish); +Meteor.publish('users', publish); diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx index de705b4421dab3143d33157a14363768177b4fcf..425f64adcd25fb502cdb292a1ad78ee35f7b429b 100644 --- a/bigbluebutton-html5/imports/startup/client/base.jsx +++ b/bigbluebutton-html5/imports/startup/client/base.jsx @@ -84,8 +84,8 @@ Base.propTypes = propTypes; Base.defaultProps = defaultProps; const SUBSCRIPTIONS_NAME = [ - 'users2x', 'chat2x', 'cursor2x', 'meetings2x', 'polls2x', 'presentations2x', 'annotations', - 'slides2x', 'captions2x', 'breakouts2x', 'voiceUsers', 'whiteboard-multi-user', + 'users', 'chat', 'cursor', 'meetings', 'polls', 'presentations', 'annotations', + 'slides', 'captions', 'breakouts', 'voiceUsers', 'whiteboard-multi-user', ]; const BaseContainer = createContainer(({ params }) => { diff --git a/bigbluebutton-html5/imports/startup/server/redis.js b/bigbluebutton-html5/imports/startup/server/redis.js index 43151cb5254b7f7be565d19932ac9ce0a32b4eeb..4e15cf962aea24a8f79b2d77b3655f2a3a7acd9f 100644 --- a/bigbluebutton-html5/imports/startup/server/redis.js +++ b/bigbluebutton-html5/imports/startup/server/redis.js @@ -90,7 +90,7 @@ class MettingMessageQueue { } } -class RedisPubSub2x { +class RedisPubSub { static handlePublishError(err) { if (err) { @@ -189,7 +189,7 @@ class RedisPubSub2x { const envelope = makeEnvelope(channel, eventName, header, payload); - return this.pub.publish(channel, envelope, RedisPubSub2x.handlePublishError); + return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError); } publishSystemMessage(channel, eventName, payload) { @@ -199,7 +199,7 @@ class RedisPubSub2x { const envelope = makeEnvelope(channel, eventName, header, payload); - return this.pub.publish(channel, envelope, RedisPubSub2x.handlePublishError); + return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError); } publishMeetingMessage(channel, eventName, meetingId, payload) { @@ -210,7 +210,7 @@ class RedisPubSub2x { const envelope = makeEnvelope(channel, eventName, header, payload); - return this.pub.publish(channel, envelope, RedisPubSub2x.handlePublishError); + return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError); } publishUserMessage(channel, eventName, meetingId, userId, payload) { @@ -222,11 +222,11 @@ class RedisPubSub2x { const envelope = makeEnvelope(channel, eventName, header, payload); - return this.pub.publish(channel, envelope, RedisPubSub2x.handlePublishError); + return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError); } } -const RedisPubSubSingleton = new RedisPubSub2x(); +const RedisPubSubSingleton = new RedisPubSub(); Meteor.startup(() => { const REDIS_CONFIG = Meteor.settings.redis; diff --git a/bigbluebutton-html5/imports/ui/components/app/container.jsx b/bigbluebutton-html5/imports/ui/components/app/container.jsx index b82aaf2edbe132cbc1a5c3e35ece03457fe14b0c..e96bffca8894c02584f4658179bc25afdd97c9db 100644 --- a/bigbluebutton-html5/imports/ui/components/app/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/container.jsx @@ -28,7 +28,6 @@ const propTypes = { actionsbar: PropTypes.node, media: PropTypes.node, location: PropTypes.object.isRequired, - children: PropTypes.node, }; const defaultProps = { @@ -70,9 +69,7 @@ const AppContainer = (props) => { actionsbar={actionsbar} media={media} {...otherProps} - > - {props.children} - </App> + /> ); }; diff --git a/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx index 894ec742b1b63a6e38625575567840ad315f9048..905c88571bace25567e2f7db3cfcada491280a34 100644 --- a/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx @@ -120,7 +120,7 @@ class ChatDropdown extends Component { > <DropdownTrigger tabIndex={0} - ariaLabel={intl.formatMessage(intlMessages.options)} + aria-label={intl.formatMessage(intlMessages.options)} className={styles.btn} > <Icon iconName="more" /> diff --git a/bigbluebutton-html5/imports/ui/components/dropdown/trigger/component.jsx b/bigbluebutton-html5/imports/ui/components/dropdown/trigger/component.jsx index a55cb8a379976891038a02d2af3d539ba4038ce9..9c15694103da63879ea48a996e83243c1b4edd98 100644 --- a/bigbluebutton-html5/imports/ui/components/dropdown/trigger/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/dropdown/trigger/component.jsx @@ -41,7 +41,17 @@ export default class DropdownTrigger extends Component { } render() { - const { children, className, ...restProps } = this.props; + const remainingProps = { ...this.props }; + delete remainingProps.dropdownToggle; + delete remainingProps.dropdownShow; + delete remainingProps.dropdownHide; + + const { + children, + className, + ...restProps + } = remainingProps; + const TriggerComponent = React.Children.only(children); const TriggerComponentBounded = React.cloneElement(TriggerComponent, { diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx index a312d765e0a7c694b4527849f9c64f2486a91846..fe237918b046f8183b9c4ce32789df0bbb64405c 100644 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx @@ -45,6 +45,9 @@ const openBreakoutJoinConfirmation = (breakoutURL, breakoutName, mountModal) => breakoutName={breakoutName} />); +const closeBreakoutJoinConfirmation = (mountModal) => + mountModal(null); + class NavBar extends Component { constructor(props) { super(props); @@ -143,13 +146,20 @@ class NavBar extends Component { ); } - componentDidUpdate() { + componentDidUpdate(oldProps) { const { breakouts, getBreakoutJoinURL, isBreakoutRoom, } = this.props; + const hadBreakouts = oldProps.breakouts.length; + const hasBreakouts = breakouts.length; + + if(!hasBreakouts && hadBreakouts) { + closeBreakoutJoinConfirmation(this.props.mountModal); + } + breakouts.forEach((breakout) => { if (!breakout.users) { return; diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx index 8c5d28c042fbf2a7f3b526e0aba6558d6ad4ed57..ad40945cdc135fc731b62236171f124fe7edc2cb 100755 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx @@ -191,7 +191,6 @@ class UserParticipants extends Component { className={styles.scrollableList} role="tabpanel" tabIndex={0} - refScrollContainer ref={(ref) => { this.refScrollContainer = ref; }} > <CSSTransitionGroup diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js index 04bfec590168c9ba36a2d36529f17b1c011793d4..1274790f133a5abea3931a4461bd4edc080ad264 100644 --- a/bigbluebutton-html5/imports/ui/services/auth/index.js +++ b/bigbluebutton-html5/imports/ui/services/auth/index.js @@ -3,7 +3,7 @@ import { Tracker } from 'meteor/tracker'; import Storage from '/imports/ui/services/storage/session'; -import Users2x from '/imports/api/users'; +import Users from '/imports/api/users'; import { makeCall, logClient } from '/imports/ui/services/api'; const CONNECTION_TIMEOUT = Meteor.settings.public.app.connectionTimeout; @@ -158,7 +158,7 @@ class Auth { }); }, 5000); - const subscription = Meteor.subscribe('current-user2x', credentials); + const subscription = Meteor.subscribe('current-user', credentials); if (!subscription.ready()) return; resolve(c); @@ -187,7 +187,7 @@ class Auth { Tracker.autorun((c) => { const selector = { meetingId: this.meetingID, userId: this.userID }; - const query = Users2x.find(selector); + const query = Users.find(selector); query.observeChanges({ changed: (id, fields) => { @@ -208,7 +208,7 @@ class Auth { }); }); - makeCall('validateAuthToken2x'); + makeCall('validateAuthToken'); }); } diff --git a/record-and-playback/core/scripts/utils/gen_webvtt b/record-and-playback/core/scripts/utils/gen_webvtt index aedbf721eb5706ebcdb02f099ff3c7fdc24c72a7..0221a4ccb5b306b73f0abf35a02591d383d02c7e 100755 --- a/record-and-playback/core/scripts/utils/gen_webvtt +++ b/record-and-playback/core/scripts/utils/gen_webvtt @@ -72,8 +72,11 @@ class Caption: if i < len(self.timestamps) and timestamp > self.timestamps[i]: timestamp = self._del_timestamps[i] - if timestamp is None and i > 0: - timestamp = self.timestamps[i-1] + if timestamp is None: + if i > 0: + timestamp = self.timestamps[i-1] + else: + timestamp = self.timestamps[i] logger.debug("Out of order timestamps, using ts: %d", timestamp) self._del_timestamps[i:j] = [del_timestamp] * len(text)