From e66309dde15b290b9d8a3d350b664d1ca611a2ae Mon Sep 17 00:00:00 2001 From: Tainan Felipe Date: Wed, 2 Jan 2019 15:31:57 -0200 Subject: [PATCH 01/12] Fix user rejoining to meeting when is ejected --- bigbluebutton-html5/imports/startup/client/base.jsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx index 5cd70b18d9..3a061b1314 100755 --- a/bigbluebutton-html5/imports/startup/client/base.jsx +++ b/bigbluebutton-html5/imports/startup/client/base.jsx @@ -45,11 +45,16 @@ class Base extends Component { this.updateLoadingState = this.updateLoadingState.bind(this); } - componentWillUpdate() { - const { approved } = this.props; + componentDidUpdate(prevProps) { + const { ejected, approved } = this.props; const { loading } = this.state; if (approved && loading) this.updateLoadingState(false); + + if (prevProps.ejected || ejected) { + Session.set('codeError', '403'); + Session.set('isMeetingEnded', true); + } } updateLoadingState(loading = false) { @@ -173,6 +178,7 @@ const BaseContainer = withTracker(() => { const subscriptionsReady = subscriptionsHandlers.every(handler => handler.ready()); return { approved: Users.findOne({ userId: Auth.userID, approved: true, guest: true }), + ejected: Users.findOne({ userId: Auth.userID, ejected: true }), meetingEnded: Session.get('isMeetingEnded'), locale, subscriptionsReady, From c1aacc8823a95369c0ab056a09df0e4af102511b Mon Sep 17 00:00:00 2001 From: Tainan Felipe Date: Thu, 3 Jan 2019 15:14:45 -0200 Subject: [PATCH 02/12] Add custom font feature and define desktop version to 14px --- .../imports/ui/components/app/component.jsx | 12 +-- .../ui/components/settings/component.jsx | 73 ++++++++++++++----- .../submenus/application/component.jsx | 52 ++++++++++--- .../submenus/application/container.jsx | 20 ----- .../private/config/settings.yml | 5 +- 5 files changed, 103 insertions(+), 59 deletions(-) delete mode 100644 bigbluebutton-html5/imports/ui/components/settings/submenus/application/container.jsx diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx index a4b497ffa8..4fccbb1cd8 100755 --- a/bigbluebutton-html5/imports/ui/components/app/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx @@ -15,6 +15,9 @@ import ChatAlertContainer from '../chat/alert/container'; import { styles } from './styles'; const MOBILE_MEDIA = 'only screen and (max-width: 40em)'; +const APP_CONFIG = Meteor.settings.public.app; +const DESKTOP_FONT_SIZE = APP_CONFIG.desktopFont; +const MOBILE_FONT_SIZE = APP_CONFIG.mobileFont; const intlMessages = defineMessages({ userListLabel: { @@ -36,7 +39,6 @@ const intlMessages = defineMessages({ }); const propTypes = { - fontSize: PropTypes.string, navbar: PropTypes.element, sidebar: PropTypes.element, media: PropTypes.element, @@ -49,7 +51,6 @@ const propTypes = { }; const defaultProps = { - fontSize: '16px', navbar: null, sidebar: null, media: null, @@ -70,13 +71,14 @@ class App extends Component { } componentDidMount() { - const { locale, fontSize } = this.props; + const { locale } = this.props; + const BROWSER_RESULTS = browser(); + const isMobileBrowser = BROWSER_RESULTS.mobile || BROWSER_RESULTS.os.includes('Android'); Modal.setAppElement('#app'); document.getElementsByTagName('html')[0].lang = locale; - document.getElementsByTagName('html')[0].style.fontSize = fontSize; + document.getElementsByTagName('html')[0].style.fontSize = isMobileBrowser ? MOBILE_FONT_SIZE : DESKTOP_FONT_SIZE; - const BROWSER_RESULTS = browser(); const body = document.getElementsByTagName('body')[0]; if (BROWSER_RESULTS && BROWSER_RESULTS.name) { body.classList.add(`browser-${BROWSER_RESULTS.name}`); diff --git a/bigbluebutton-html5/imports/ui/components/settings/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/component.jsx index 7f7e6a3f7d..fd0dc75ec8 100644 --- a/bigbluebutton-html5/imports/ui/components/settings/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/component.jsx @@ -1,10 +1,12 @@ import React, { Component } from 'react'; import Modal from '/imports/ui/components/modal/fullscreen/component'; -import { Tab, Tabs, TabList, TabPanel } from 'react-tabs'; +import { + Tab, Tabs, TabList, TabPanel, +} from 'react-tabs'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import ClosedCaptions from '/imports/ui/components/settings/submenus/closed-captions/component'; import DataSaving from '/imports/ui/components/settings/submenus/data-saving/component'; -import Application from '/imports/ui/components/settings/submenus/application/container'; +import Application from '/imports/ui/components/settings/submenus/application/component'; import _ from 'lodash'; import PropTypes from 'prop-types'; @@ -61,20 +63,43 @@ const intlMessages = defineMessages({ const propTypes = { intl: intlShape.isRequired, - dataSaving: PropTypes.object.isRequired, - application: PropTypes.object.isRequired, - cc: PropTypes.object.isRequired, - participants: PropTypes.object.isRequired, + dataSaving: PropTypes.shape({ + viewParticipantsWebcams: PropTypes.bool, + viewScreenshare: PropTypes.bool, + }).isRequired, + application: PropTypes.shape({ + chatAudioAlerts: PropTypes.bool, + chatPushAlerts: PropTypes.bool, + fallbackLocale: PropTypes.string, + fontSize: PropTypes.string, + locale: PropTypes.string, + }).isRequired, + cc: PropTypes.shape({ + backgroundColor: PropTypes.string, + enabled: PropTypes.bool, + fontColor: PropTypes.string, + fontFamily: PropTypes.string, + fontSize: PropTypes.string, + takeOwnership: PropTypes.bool, + }).isRequired, + participants: PropTypes.shape({ + layout: PropTypes.bool, + lockAll: PropTypes.bool, + microphone: PropTypes.bool, + muteAll: PropTypes.bool, + privateChat: PropTypes.bool, + publicChat: PropTypes.bool, + }).isRequired, updateSettings: PropTypes.func.isRequired, - availableLocales: PropTypes.object.isRequired, + availableLocales: PropTypes.objectOf(PropTypes.array).isRequired, mountModal: PropTypes.func.isRequired, - locales: PropTypes.array.isRequired, }; class Settings extends Component { static setHtmlFontSize(size) { document.getElementsByTagName('html')[0].style.fontSize = size; } + constructor(props) { super(props); @@ -104,7 +129,8 @@ class Settings extends Component { } componentWillMount() { - this.props.availableLocales.then((locales) => { + const { availableLocales } = this.props; + availableLocales.then((locales) => { this.setState({ availableLocales: locales }); }); } @@ -123,12 +149,17 @@ class Settings extends Component { renderModalContent() { const { intl } = this.props; - + const { + selectedTab, + availableLocales, + current, + locales, + } = this.state; return ( @@ -170,9 +201,9 @@ class Settings extends Component { {/* */} @@ -183,14 +214,14 @@ class Settings extends Component { {/* */} @@ -205,18 +236,22 @@ class Settings extends Component { ); } + render() { const { intl, mountModal, } = this.props; - + const { + current, + saved, + } = this.state; return ( { - this.updateSettings(this.state.current); + this.updateSettings(current); // router.push(location.pathname); // TODO 4767 /* We need to use mountModal(null) here to prevent submenu state updates, * from re-opening the modal. @@ -228,7 +263,7 @@ class Settings extends Component { }} dismiss={{ callback: () => { - Settings.setHtmlFontSize(this.state.saved.application.fontSize); + Settings.setHtmlFontSize(saved.application.fontSize); mountModal(null); }, label: intl.formatMessage(intlMessages.CancelLabel), diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/application/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/application/component.jsx index 9605cf4f5d..04cea4df29 100644 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/application/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/application/component.jsx @@ -1,13 +1,12 @@ import React from 'react'; -import Button from '/imports/ui/components/button/component'; import cx from 'classnames'; +import Button from '/imports/ui/components/button/component'; import Toggle from '/imports/ui/components/switch/component'; import { defineMessages, injectIntl } from 'react-intl'; import BaseMenu from '../base/component'; import { styles } from '../styles'; const MIN_FONTSIZE = 0; -const MAX_FONTSIZE = 4; const intlMessages = defineMessages({ applicationSectionTitle: { @@ -61,6 +60,10 @@ const intlMessages = defineMessages({ }); class ApplicationMenu extends BaseMenu { + static setHtmlFontSize(size) { + document.getElementsByTagName('html')[0].style.fontSize = size; + } + constructor(props) { super(props); @@ -69,41 +72,66 @@ class ApplicationMenu extends BaseMenu { settings: props.settings, isLargestFontSize: false, isSmallestFontSize: false, + fontSizes: [ + '12px', + '14px', + '16px', + '18px', + '20px', + ], }; } + componentDidMount() { + this.setInitialFontSize(); + } + + setInitialFontSize() { + const { fontSizes } = this.state; + const clientFont = document.getElementsByTagName('html')[0].style.fontSize; + const hasFont = fontSizes.includes(clientFont); + if (!hasFont) { + fontSizes.push(clientFont); + fontSizes.sort(); + } + const fontIndex = fontSizes.indexOf(clientFont); + this.changeFontSize(clientFont); + this.setState({ + isSmallestFontSize: fontIndex <= MIN_FONTSIZE, + isLargestFontSize: fontIndex >= (fontSizes.length - 1), + fontSizes, + }); + } + handleUpdateFontSize(size) { const obj = this.state; obj.settings.fontSize = size; this.handleUpdateSettings(this.state.settingsName, obj.settings); } - setHtmlFontSize(size) { - document.getElementsByTagName('html')[0].style.fontSize = size; - } - changeFontSize(size) { const obj = this.state; obj.settings.fontSize = size; this.setState(obj, () => { - this.setHtmlFontSize(this.state.settings.fontSize); + ApplicationMenu.setHtmlFontSize(this.state.settings.fontSize); this.handleUpdateFontSize(this.state.settings.fontSize); }); } handleIncreaseFontSize() { const currentFontSize = this.state.settings.fontSize; - const availableFontSizes = this.props.fontSizes; - const canIncreaseFontSize = availableFontSizes.indexOf(currentFontSize) < MAX_FONTSIZE; - const fs = canIncreaseFontSize ? availableFontSizes.indexOf(currentFontSize) + 1 : MAX_FONTSIZE; + const availableFontSizes = this.state.fontSizes; + const maxFontSize = availableFontSizes.length - 1; + const canIncreaseFontSize = availableFontSizes.indexOf(currentFontSize) < maxFontSize; + const fs = canIncreaseFontSize ? availableFontSizes.indexOf(currentFontSize) + 1 : maxFontSize; this.changeFontSize(availableFontSizes[fs]); - if (fs === MAX_FONTSIZE) this.setState({ isLargestFontSize: true }); + if (fs === maxFontSize) this.setState({ isLargestFontSize: true }); this.setState({ isSmallestFontSize: false }); } handleDecreaseFontSize() { const currentFontSize = this.state.settings.fontSize; - const availableFontSizes = this.props.fontSizes; + const availableFontSizes = this.state.fontSizes; const canDecreaseFontSize = availableFontSizes.indexOf(currentFontSize) > MIN_FONTSIZE; const fs = canDecreaseFontSize ? availableFontSizes.indexOf(currentFontSize) - 1 : MIN_FONTSIZE; this.changeFontSize(availableFontSizes[fs]); diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/application/container.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/application/container.jsx deleted file mode 100644 index b9011514dd..0000000000 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/application/container.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { withTracker } from 'meteor/react-meteor-data'; -import Application from './component'; - - -const ApplicationContainer = ({ children, ...props }) => ( - - {children} - -); - -export default withTracker(() => ({ - fontSizes: [ - '12px', - '14px', - '16px', - '18px', - '20px', - ], -}))(ApplicationContainer); diff --git a/bigbluebutton-html5/private/config/settings.yml b/bigbluebutton-html5/private/config/settings.yml index 69808d4d0b..d8e7dbacf2 100755 --- a/bigbluebutton-html5/private/config/settings.yml +++ b/bigbluebutton-html5/private/config/settings.yml @@ -1,7 +1,7 @@ public: app: - mobileFont: 16 - desktopFont: 14 + mobileFont: 16px + desktopFont: 14px audioChatNotification: false autoJoin: true showParticipantsOnLogin: true @@ -20,7 +20,6 @@ public: application: chatAudioAlerts: false chatPushAlerts: false - fontSize: 16px fallbackLocale: en audio: inputDeviceId: undefined From 38a91e45592989b97c09544e5403def4d78d15d8 Mon Sep 17 00:00:00 2001 From: Tainan Felipe Date: Thu, 3 Jan 2019 15:55:10 -0200 Subject: [PATCH 03/12] rename settings variables --- bigbluebutton-html5/imports/ui/components/app/component.jsx | 4 ++-- bigbluebutton-html5/private/config/settings.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx index 4fccbb1cd8..687f5eb9ac 100755 --- a/bigbluebutton-html5/imports/ui/components/app/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx @@ -16,8 +16,8 @@ import { styles } from './styles'; const MOBILE_MEDIA = 'only screen and (max-width: 40em)'; const APP_CONFIG = Meteor.settings.public.app; -const DESKTOP_FONT_SIZE = APP_CONFIG.desktopFont; -const MOBILE_FONT_SIZE = APP_CONFIG.mobileFont; +const DESKTOP_FONT_SIZE = APP_CONFIG.desktopFontSize; +const MOBILE_FONT_SIZE = APP_CONFIG.mobileFontSize; const intlMessages = defineMessages({ userListLabel: { diff --git a/bigbluebutton-html5/private/config/settings.yml b/bigbluebutton-html5/private/config/settings.yml index d8e7dbacf2..b2fbb0475d 100755 --- a/bigbluebutton-html5/private/config/settings.yml +++ b/bigbluebutton-html5/private/config/settings.yml @@ -1,7 +1,7 @@ public: app: - mobileFont: 16px - desktopFont: 14px + mobileFontSize: 16px + desktopFontSize: 14px audioChatNotification: false autoJoin: true showParticipantsOnLogin: true From 8ff95dbaacda6cf9e02234db70b45dcf6ae3f826 Mon Sep 17 00:00:00 2001 From: Bobak Oftadeh Date: Thu, 3 Jan 2019 23:22:17 +0000 Subject: [PATCH 04/12] Added margin to chat-window --- bigbluebutton-html5/imports/ui/components/app/styles.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bigbluebutton-html5/imports/ui/components/app/styles.scss b/bigbluebutton-html5/imports/ui/components/app/styles.scss index f5ad8b2ed2..a4ba150fc5 100755 --- a/bigbluebutton-html5/imports/ui/components/app/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/app/styles.scss @@ -9,6 +9,7 @@ --bars-padding: calc(var(--lg-padding-x) - .45rem); // -.45 so user-list and chat title is aligned with the presentation title --userlist-handle-width: 5px; // 5px so user-list and chat resize handle render as the same size --poll-pane-min-width: 20em; + --chat-margin-right: 0.1em; } .main { @@ -126,6 +127,7 @@ .chat { @extend %full-page; + margin-right: var(--chat-margin-right); order: 2; height: 100%; @include mq($small-only) { From 697b8da8039b796789db42324dbd0c1e5ce480fa Mon Sep 17 00:00:00 2001 From: Bobak Oftadeh Date: Fri, 4 Jan 2019 18:29:41 +0000 Subject: [PATCH 05/12] Moved margin to presentation --- .../imports/ui/components/app/styles.scss | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/app/styles.scss b/bigbluebutton-html5/imports/ui/components/app/styles.scss index a4ba150fc5..5448515e76 100755 --- a/bigbluebutton-html5/imports/ui/components/app/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/app/styles.scss @@ -9,7 +9,7 @@ --bars-padding: calc(var(--lg-padding-x) - .45rem); // -.45 so user-list and chat title is aligned with the presentation title --userlist-handle-width: 5px; // 5px so user-list and chat resize handle render as the same size --poll-pane-min-width: 20em; - --chat-margin-right: 0.1em; + --panel-margin-left: 0.1em; } .main { @@ -62,6 +62,8 @@ @extend %full-page; order: 3; + margin-left: var(--panel-margin-left); + &:before, &:after { content: ''; @@ -96,7 +98,7 @@ @extend %text-elipsis; z-index: 2; - overflow: visible; + overflow: visible; order: 1; @include mq($small-only) { @@ -127,7 +129,6 @@ .chat { @extend %full-page; - margin-right: var(--chat-margin-right); order: 2; height: 100%; @include mq($small-only) { @@ -178,7 +179,7 @@ order: 2; flex-direction: row; position: relative; - + margin-left: var(--panel-margin-right); @include mq($portrait) { flex-direction: column; } From e54823d1743808f1ce6b8478936dbc2cd93bb2c5 Mon Sep 17 00:00:00 2001 From: KDSBrowne Date: Tue, 8 Jan 2019 14:46:24 +0000 Subject: [PATCH 06/12] fix presentation positioning when data saving is enabled --- .../imports/ui/components/media/container.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/media/container.jsx b/bigbluebutton-html5/imports/ui/components/media/container.jsx index 142205160b..eb6ca0ce21 100755 --- a/bigbluebutton-html5/imports/ui/components/media/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/media/container.jsx @@ -7,7 +7,6 @@ import { notify } from '/imports/ui/services/notification'; import VideoService from '/imports/ui/components/video-provider/service'; import getFromUserSettings from '/imports/ui/services/users-settings'; import { withModalMounter } from '/imports/ui/components/modal/service'; -import VideoPreviewContainer from '/imports/ui/components/video-preview/container'; import Media from './component'; import MediaService, { getSwapLayout } from './service'; import PresentationPodsContainer from '../presentation-pod/container'; @@ -80,8 +79,9 @@ class MediaContainer extends Component { const chromeErrorElement = ( @@ -99,7 +99,7 @@ class MediaContainer extends Component { } } -export default withModalMounter(withTracker(({ mountModal }) => { +export default withModalMounter(withTracker(() => { const { dataSaving } = Settings; const { viewParticipantsWebcams, viewScreenshare } = dataSaving; @@ -118,7 +118,7 @@ export default withModalMounter(withTracker(({ mountModal }) => { } const usersVideo = VideoService.getAllUsersVideo(); - if (MediaService.shouldShowOverlay() && usersVideo.length) { + if (MediaService.shouldShowOverlay() && usersVideo.length && viewParticipantsWebcams) { data.floatingOverlay = usersVideo.length < 2; data.hideOverlay = usersVideo.length === 0; } From fa70c04375c483c5274d66f54203d72b3c8ece18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Francisco=20Siebel?= Date: Wed, 9 Jan 2019 09:36:14 -0200 Subject: [PATCH 07/12] add welcome message and moderator only message to save/copy chat feature and fix a race condition bug when clearing the chat. close #6314 --- .../server/modifiers/clearGroupChatMsg.js | 25 +++++++------ .../imports/ui/components/chat/service.js | 36 ++++++++++++++++--- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js index 940ffc29ca..172a200f3a 100644 --- a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js +++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js @@ -11,20 +11,19 @@ export default function clearGroupChatMsg(meetingId, chatId) { if (chatId) { GroupChatMsg.remove({ meetingId, chatId }, () => { Logger.info(`Cleared GroupChatMsg (${meetingId}, ${chatId})`); + const clearMsg = { + color: '0', + timestamp: Date.now(), + correlationId: `${PUBLIC_CHAT_SYSTEM_ID}-${Date.now()}`, + sender: { + id: PUBLIC_CHAT_SYSTEM_ID, + name: '', + }, + message: CHAT_CLEAR_MESSAGE, + }; + + return addGroupChatMsg(meetingId, PUBLIC_GROUP_CHAT_ID, clearMsg); }); - - const clearMsg = { - color: '0', - timestamp: Date.now(), - correlationId: `${PUBLIC_CHAT_SYSTEM_ID}-${Date.now()}`, - sender: { - id: PUBLIC_CHAT_SYSTEM_ID, - name: '', - }, - message: CHAT_CLEAR_MESSAGE, - }; - - return addGroupChatMsg(meetingId, PUBLIC_GROUP_CHAT_ID, clearMsg); } if (meetingId) { diff --git a/bigbluebutton-html5/imports/ui/components/chat/service.js b/bigbluebutton-html5/imports/ui/components/chat/service.js index 2dcf0e5dd8..7fa5eb8483 100755 --- a/bigbluebutton-html5/imports/ui/components/chat/service.js +++ b/bigbluebutton-html5/imports/ui/components/chat/service.js @@ -18,6 +18,7 @@ const PUBLIC_CHAT_ID = CHAT_CONFIG.public_id; const PUBLIC_GROUP_CHAT_ID = CHAT_CONFIG.public_group_id; const PRIVATE_CHAT_TYPE = CHAT_CONFIG.type_private; const PUBLIC_CHAT_USER_ID = CHAT_CONFIG.system_userid; +const PUBLIC_CHAT_CLEAR = CHAT_CONFIG.system_messages_keys.chat_clear; const ScrollCollection = new Mongo.Collection(null); @@ -248,8 +249,35 @@ const htmlDecode = (input) => { }; // Export the chat as [Hour:Min] user: message -const exportChat = messageList => ( - messageList.map((message) => { +const exportChat = (messageList) => { + const { welcomeProp } = getMeeting(); + const { isModerator, logTime } = getUser(Auth.userID); + const { welcomeMsg, modOnlyMessage } = welcomeProp; + + const clearMessage = messageList.filter(message => message.message === PUBLIC_CHAT_CLEAR); + + const hasClearMessage = clearMessage.length; + + if (!hasClearMessage || (hasClearMessage && clearMessage[0].timestamp < logTime)) { + messageList.push({ + timestamp: logTime, + message: welcomeMsg, + type: SYSTEM_CHAT_TYPE, + sender: PUBLIC_CHAT_USER_ID, + }); + if (isModerator) { + messageList.push({ + timestamp: logTime + 1, + message: modOnlyMessage, + type: SYSTEM_CHAT_TYPE, + sender: PUBLIC_CHAT_USER_ID, + }); + } + } + + messageList.sort((a, b) => a.timestamp - b.timestamp); + + return messageList.map((message) => { const date = new Date(message.timestamp); const hour = date.getHours().toString().padStart(2, 0); const min = date.getMinutes().toString().padStart(2, 0); @@ -259,8 +287,8 @@ const exportChat = messageList => ( } const userName = message.sender === PUBLIC_CHAT_USER_ID ? '' : `${getUser(message.sender).name} :`; return `${hourMin} ${userName} ${htmlDecode(message.message)}`; - }).join('\n') -); + }).join('\n'); +}; const setNotified = (chatType, item) => { const notified = Storage.getItem('notified'); From a0fac637e8c292a8e06d09e2fad85c7fa97fc27f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Francisco=20Siebel?= Date: Wed, 9 Jan 2019 09:41:52 -0200 Subject: [PATCH 08/12] remove moderator message in save/copy --- .../imports/ui/components/chat/service.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/chat/service.js b/bigbluebutton-html5/imports/ui/components/chat/service.js index 7fa5eb8483..70c6c3b152 100755 --- a/bigbluebutton-html5/imports/ui/components/chat/service.js +++ b/bigbluebutton-html5/imports/ui/components/chat/service.js @@ -251,8 +251,8 @@ const htmlDecode = (input) => { // Export the chat as [Hour:Min] user: message const exportChat = (messageList) => { const { welcomeProp } = getMeeting(); - const { isModerator, logTime } = getUser(Auth.userID); - const { welcomeMsg, modOnlyMessage } = welcomeProp; + const { logTime } = getUser(Auth.userID); + const { welcomeMsg } = welcomeProp; const clearMessage = messageList.filter(message => message.message === PUBLIC_CHAT_CLEAR); @@ -265,14 +265,6 @@ const exportChat = (messageList) => { type: SYSTEM_CHAT_TYPE, sender: PUBLIC_CHAT_USER_ID, }); - if (isModerator) { - messageList.push({ - timestamp: logTime + 1, - message: modOnlyMessage, - type: SYSTEM_CHAT_TYPE, - sender: PUBLIC_CHAT_USER_ID, - }); - } } messageList.sort((a, b) => a.timestamp - b.timestamp); From 5d45cb8214eec03733c3194fa33fcabab05aa249 Mon Sep 17 00:00:00 2001 From: Bobak Oftadeh Date: Wed, 9 Jan 2019 07:59:16 -0800 Subject: [PATCH 09/12] Removed margin when user panel is closed --- .../imports/ui/components/app/component.jsx | 6 ++++-- bigbluebutton-html5/imports/ui/components/app/styles.scss | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx index a4b497ffa8..d8d7904a38 100755 --- a/bigbluebutton-html5/imports/ui/components/app/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx @@ -192,14 +192,16 @@ class App extends Component { render() { const { - customStyle, customStyleUrl, micsLocked, + customStyle, customStyleUrl, micsLocked, openPanel, } = this.props; + console.log(openPanel); + return (
-
+
{this.renderNavBar()} {this.renderMedia()} {this.renderActionsBar()} diff --git a/bigbluebutton-html5/imports/ui/components/app/styles.scss b/bigbluebutton-html5/imports/ui/components/app/styles.scss index 5448515e76..0cd870e402 100755 --- a/bigbluebutton-html5/imports/ui/components/app/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/app/styles.scss @@ -58,12 +58,10 @@ } } -.content { +.content, .noPanelContent { @extend %full-page; order: 3; - margin-left: var(--panel-margin-left); - &:before, &:after { content: ''; @@ -92,6 +90,9 @@ } } +.content{ + margin-left: var(--panel-margin-left); +} .userList { @extend %full-page; From 381b28714ea17546d7f957848e97eeb5f2eb8611 Mon Sep 17 00:00:00 2001 From: Bobak Oftadeh Date: Wed, 9 Jan 2019 12:50:24 -0800 Subject: [PATCH 10/12] Removed console log --- bigbluebutton-html5/imports/ui/components/app/component.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx index d8d7904a38..2c63876413 100755 --- a/bigbluebutton-html5/imports/ui/components/app/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx @@ -195,8 +195,6 @@ class App extends Component { customStyle, customStyleUrl, micsLocked, openPanel, } = this.props; - console.log(openPanel); - return (
From 02e72e9a966741ce2acee3373610b54b19c4dd10 Mon Sep 17 00:00:00 2001 From: Anton Georgiev Date: Wed, 9 Jan 2019 16:03:34 -0500 Subject: [PATCH 11/12] Update tooltip for multi-user mode Closes #6333 --- bigbluebutton-html5/private/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bigbluebutton-html5/private/locales/en.json b/bigbluebutton-html5/private/locales/en.json index 253ab9b93c..fd0cb41f0c 100755 --- a/bigbluebutton-html5/private/locales/en.json +++ b/bigbluebutton-html5/private/locales/en.json @@ -456,8 +456,8 @@ "app.whiteboard.toolbar.color.silver": "Silver", "app.whiteboard.toolbar.undo": "Undo annotation", "app.whiteboard.toolbar.clear": "Clear all annotations", - "app.whiteboard.toolbar.multiUserOn": "Turn multi-user mode on", - "app.whiteboard.toolbar.multiUserOff": "Turn multi-user mode off", + "app.whiteboard.toolbar.multiUserOn": "Turn multi-user whiteboard on", + "app.whiteboard.toolbar.multiUserOff": "Turn multi-user whiteboard off", "app.whiteboard.toolbar.fontSize": "Font Size List", "app.feedback.title": "You have logged out of the conference", "app.feedback.subtitle": "We'd love to hear about your experience with BigBlueButton (optional)", From 3fbcb84bb222715eae418675f098be8f10cd2f01 Mon Sep 17 00:00:00 2001 From: Anton Georgiev Date: Wed, 9 Jan 2019 16:13:47 -0500 Subject: [PATCH 12/12] Change label of hand tool in whiteboard tools Closes #6297 --- bigbluebutton-html5/private/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bigbluebutton-html5/private/locales/en.json b/bigbluebutton-html5/private/locales/en.json index fd0cb41f0c..46ed71f02d 100755 --- a/bigbluebutton-html5/private/locales/en.json +++ b/bigbluebutton-html5/private/locales/en.json @@ -431,7 +431,7 @@ "app.sfu.noAvailableCodec2203": "Error 2203: Server could not find an appropriate codec", "app.meeting.endNotification.ok.label": "OK", "app.whiteboard.toolbar.tools": "Tools", - "app.whiteboard.toolbar.tools.hand": "Hand", + "app.whiteboard.toolbar.tools.hand": "Pan", "app.whiteboard.toolbar.tools.pencil": "Pencil", "app.whiteboard.toolbar.tools.rectangle": "Rectangle", "app.whiteboard.toolbar.tools.triangle": "Triangle",