Quellcode durchsuchen

Coding style

master
Lyubo Marinov vor 7 Jahren
Ursprung
Commit
a42496ba53

+ 31
- 37
react/features/always-on-top/AlwaysOnTop.js Datei anzeigen

7
 const { api } = window.alwaysOnTop;
7
 const { api } = window.alwaysOnTop;
8
 
8
 
9
 /**
9
 /**
10
- * The timeout in ms for hidding the toolbar.
10
+ * The timeout in ms for hiding the toolbar.
11
  */
11
  */
12
 const TOOLBAR_TIMEOUT = 4000;
12
 const TOOLBAR_TIMEOUT = 4000;
13
 
13
 
14
 /**
14
 /**
15
- * The type of the React {@code Component} state of {@link FeedbackButton}.
15
+ * The type of the React {@code Component} state of {@link AlwaysOnTop}.
16
  */
16
  */
17
 type State = {
17
 type State = {
18
     avatarURL: string,
18
     avatarURL: string,
40
         super(props);
40
         super(props);
41
 
41
 
42
         this.state = {
42
         this.state = {
43
-            visible: true,
43
+            avatarURL: '',
44
             displayName: '',
44
             displayName: '',
45
             isVideoDisplayed: true,
45
             isVideoDisplayed: true,
46
-            avatarURL: ''
46
+            visible: true
47
         };
47
         };
48
 
48
 
49
         // Bind event handlers so they are only bound once per instance.
49
         // Bind event handlers so they are only bound once per instance.
50
         this._avatarChangedListener = this._avatarChangedListener.bind(this);
50
         this._avatarChangedListener = this._avatarChangedListener.bind(this);
51
-        this._largeVideoChangedListener
52
-            = this._largeVideoChangedListener.bind(this);
53
         this._displayNameChangedListener
51
         this._displayNameChangedListener
54
             = this._displayNameChangedListener.bind(this);
52
             = this._displayNameChangedListener.bind(this);
53
+        this._largeVideoChangedListener
54
+            = this._largeVideoChangedListener.bind(this);
55
         this._mouseMove = this._mouseMove.bind(this);
55
         this._mouseMove = this._mouseMove.bind(this);
56
         this._onMouseOut = this._onMouseOut.bind(this);
56
         this._onMouseOut = this._onMouseOut.bind(this);
57
         this._onMouseOver = this._onMouseOver.bind(this);
57
         this._onMouseOver = this._onMouseOver.bind(this);
65
      * @returns {void}
65
      * @returns {void}
66
      */
66
      */
67
     _avatarChangedListener({ avatarURL, id }) {
67
     _avatarChangedListener({ avatarURL, id }) {
68
-        if (api._getOnStageParticipant() !== id) {
69
-            return;
70
-        }
71
-
72
-        if (avatarURL !== this.state.avatarURL) {
68
+        if (api._getOnStageParticipant() === id
69
+                && avatarURL !== this.state.avatarURL) {
73
             this.setState({ avatarURL });
70
             this.setState({ avatarURL });
74
         }
71
         }
75
     }
72
     }
82
      * @returns {void}
79
      * @returns {void}
83
      */
80
      */
84
     _displayNameChangedListener({ formattedDisplayName, id }) {
81
     _displayNameChangedListener({ formattedDisplayName, id }) {
85
-        if (api._getOnStageParticipant() !== id) {
86
-            return;
87
-        }
88
-
89
-        if (formattedDisplayName !== this.state.displayName) {
82
+        if (api._getOnStageParticipant() === id
83
+                && formattedDisplayName !== this.state.displayName) {
90
             this.setState({ displayName: formattedDisplayName });
84
             this.setState({ displayName: formattedDisplayName });
91
         }
85
         }
92
     }
86
     }
97
      * @returns {void}
91
      * @returns {void}
98
      */
92
      */
99
     _hideToolbarAfterTimeout() {
93
     _hideToolbarAfterTimeout() {
100
-        setTimeout(() => {
101
-            if (this._hovered) {
102
-                this._hideToolbarAfterTimeout();
103
-
104
-                return;
105
-            }
106
-            this.setState({ visible: false });
107
-        }, TOOLBAR_TIMEOUT);
94
+        setTimeout(
95
+            () => {
96
+                if (this._hovered) {
97
+                    this._hideToolbarAfterTimeout();
98
+                } else {
99
+                    this.setState({ visible: false });
100
+                }
101
+            },
102
+            TOOLBAR_TIMEOUT);
108
     }
103
     }
109
 
104
 
110
     _largeVideoChangedListener: () => void;
105
     _largeVideoChangedListener: () => void;
116
      */
111
      */
117
     _largeVideoChangedListener() {
112
     _largeVideoChangedListener() {
118
         const userID = api._getOnStageParticipant();
113
         const userID = api._getOnStageParticipant();
119
-        const displayName = api._getFormattedDisplayName(userID);
120
         const avatarURL = api.getAvatarURL(userID);
114
         const avatarURL = api.getAvatarURL(userID);
115
+        const displayName = api._getFormattedDisplayName(userID);
121
         const isVideoDisplayed = Boolean(api._getLargeVideo());
116
         const isVideoDisplayed = Boolean(api._getLargeVideo());
122
 
117
 
123
         this.setState({
118
         this.setState({
135
      * @returns {void}
130
      * @returns {void}
136
      */
131
      */
137
     _mouseMove() {
132
     _mouseMove() {
138
-        if (!this.state.visible) {
139
-            this.setState({ visible: true });
140
-        }
133
+        this.state.visible || this.setState({ visible: true });
141
     }
134
     }
142
 
135
 
143
     _onMouseOut: () => void;
136
     _onMouseOut: () => void;
201
      * @returns {void}
194
      * @returns {void}
202
      */
195
      */
203
     componentDidMount() {
196
     componentDidMount() {
204
-        api.on('largeVideoChanged', this._largeVideoChangedListener);
205
-        api.on('displayNameChange', this._displayNameChangedListener);
206
         api.on('avatarChanged', this._avatarChangedListener);
197
         api.on('avatarChanged', this._avatarChangedListener);
198
+        api.on('displayNameChange', this._displayNameChangedListener);
199
+        api.on('largeVideoChanged', this._largeVideoChangedListener);
207
 
200
 
208
         this._largeVideoChangedListener();
201
         this._largeVideoChangedListener();
209
 
202
 
219
      * @returns {void}
212
      * @returns {void}
220
      */
213
      */
221
     componentWillUnmount() {
214
     componentWillUnmount() {
222
-        api.removeListener('largeVideoChanged',
223
-            this._largeVideoChangedListener);
224
-        api.removeListener('displayNameChange',
225
-            this._displayNameChangedListener);
226
         api.removeListener('avatarChanged', this._avatarChangedListener);
215
         api.removeListener('avatarChanged', this._avatarChangedListener);
216
+        api.removeListener(
217
+            'displayNameChange',
218
+            this._displayNameChangedListener);
219
+        api.removeListener(
220
+            'largeVideoChanged',
221
+            this._largeVideoChangedListener);
222
+
227
         window.removeEventListener('mousemove', this._mouseMove);
223
         window.removeEventListener('mousemove', this._mouseMove);
228
     }
224
     }
229
 
225
 
252
                     className = { this.state.visible ? 'fadeIn' : 'fadeOut' }
248
                     className = { this.state.visible ? 'fadeIn' : 'fadeOut' }
253
                     onMouseOut = { this._onMouseOut }
249
                     onMouseOut = { this._onMouseOut }
254
                     onMouseOver = { this._onMouseOver } />
250
                     onMouseOver = { this._onMouseOver } />
255
-                {
256
-                    this._renderVideoNotAvailableScreen()
257
-                }
251
+                { this._renderVideoNotAvailableScreen() }
258
             </div>
252
             </div>
259
         );
253
         );
260
     }
254
     }

+ 41
- 40
react/features/always-on-top/AudioMuteButton.js Datei anzeigen

1
 // @flow
1
 // @flow
2
 
2
 
3
-// XXX: AlwaysOnTop imports the button directly in order to avoid bringing in
4
-// other components that use lib-jitsi-meet, which always on top does not
5
-// import.
3
+// XXX Import the button directly in order to avoid bringing in other components
4
+// that use lib-jitsi-meet, which always-on-top does not import.
6
 import AbstractAudioMuteButton
5
 import AbstractAudioMuteButton
7
     from '../toolbox/components/buttons/AbstractAudioMuteButton';
6
     from '../toolbox/components/buttons/AbstractAudioMuteButton';
8
 import type { Props } from '../toolbox/components/buttons/AbstractButton';
7
 import type { Props } from '../toolbox/components/buttons/AbstractButton';
9
 
8
 
10
 const { api } = window.alwaysOnTop;
9
 const { api } = window.alwaysOnTop;
11
 
10
 
11
+/**
12
+ * The type of the React {@code Component} state of {@link AudioMuteButton}.
13
+ */
12
 type State = {
14
 type State = {
13
 
15
 
14
     /**
16
     /**
23
 };
25
 };
24
 
26
 
25
 /**
27
 /**
26
- * Stateless hangup button for the Always-on-Top windows.
28
+ * Stateless "mute/unmute audio" button for the Always-on-Top windows.
27
  */
29
  */
28
 export default class AudioMuteButton
30
 export default class AudioMuteButton
29
     extends AbstractAudioMuteButton<Props, State> {
31
     extends AbstractAudioMuteButton<Props, State> {
62
             api.isAudioAvailable(),
64
             api.isAudioAvailable(),
63
             api.isAudioMuted()
65
             api.isAudioMuted()
64
         ])
66
         ])
65
-            .then(values => {
66
-                const [ audioAvailable, audioMuted ] = values;
67
-
67
+            .then(([ audioAvailable, audioMuted ]) =>
68
                 this.setState({
68
                 this.setState({
69
                     audioAvailable,
69
                     audioAvailable,
70
                     audioMuted
70
                     audioMuted
71
-                });
72
-            })
71
+                }))
73
             .catch(console.error);
72
             .catch(console.error);
74
     }
73
     }
75
 
74
 
80
      * @returns {void}
79
      * @returns {void}
81
      */
80
      */
82
     componentWillUnmount() {
81
     componentWillUnmount() {
83
-        api.removeListener('audioAvailabilityChanged',
82
+        api.removeListener(
83
+            'audioAvailabilityChanged',
84
             this._audioAvailabilityListener);
84
             this._audioAvailabilityListener);
85
-        api.removeListener('audioMuteStatusChanged',
85
+        api.removeListener(
86
+            'audioMuteStatusChanged',
86
             this._audioMutedListener);
87
             this._audioMutedListener);
87
     }
88
     }
88
 
89
 
90
+    _audioAvailabilityListener: ({ available: boolean }) => void;
91
+
89
     /**
92
     /**
90
-     * Indicates whether this button is disabled or not.
93
+     * Handles audio available api events.
91
      *
94
      *
92
-     * @override
93
-     * @private
94
-     * @returns {boolean}
95
+     * @param {{ available: boolean }} status - The new available status.
96
+     * @returns {void}
95
      */
97
      */
96
-    _isDisabled() {
97
-        return !this.state.audioAvailable;
98
+    _audioAvailabilityListener({ available }) {
99
+        this.setState({ audioAvailable: available });
100
+    }
101
+
102
+    _audioMutedListener: ({ muted: boolean }) => void;
103
+
104
+    /**
105
+     * Handles audio muted api events.
106
+     *
107
+     * @param {{ muted: boolean }} status - The new muted status.
108
+     * @returns {void}
109
+     */
110
+    _audioMutedListener({ muted }) {
111
+        this.setState({ audioMuted: muted });
98
     }
112
     }
99
 
113
 
100
     /**
114
     /**
109
     }
123
     }
110
 
124
 
111
     /**
125
     /**
112
-     * Changes the muted state.
126
+     * Indicates whether this button is disabled or not.
113
      *
127
      *
114
-     * @param {boolean} audioMuted - Whether audio should be muted or not.
128
+     * @override
115
      * @private
129
      * @private
116
-     * @returns {void}
117
-     */
118
-    _setAudioMuted(audioMuted: boolean) { // eslint-disable-line no-unused-vars
119
-        this.state.audioAvailable && api.executeCommand('toggleAudio');
120
-    }
121
-
122
-    _audioAvailabilityListener: ({ available: boolean }) => void;
123
-
124
-    /**
125
-     * Handles audio available api events.
126
-     *
127
-     * @param {{ available: boolean }} status - The new available status.
128
-     * @returns {void}
130
+     * @returns {boolean}
129
      */
131
      */
130
-    _audioAvailabilityListener({ available }) {
131
-        this.setState({ audioAvailable: available });
132
+    _isDisabled() {
133
+        return !this.state.audioAvailable;
132
     }
134
     }
133
 
135
 
134
-    _audioMutedListener: ({ muted: boolean }) => void;
135
-
136
     /**
136
     /**
137
-     * Handles audio muted api events.
137
+     * Changes the muted state.
138
      *
138
      *
139
-     * @param {{ muted: boolean }} status - The new muted status.
139
+     * @param {boolean} audioMuted - Whether audio should be muted or not.
140
+     * @private
140
      * @returns {void}
141
      * @returns {void}
141
      */
142
      */
142
-    _audioMutedListener({ muted }) {
143
-        this.setState({ audioMuted: muted });
143
+    _setAudioMuted(audioMuted: boolean) { // eslint-disable-line no-unused-vars
144
+        this.state.audioAvailable && api.executeCommand('toggleAudio');
144
     }
145
     }
145
 }
146
 }

+ 2
- 3
react/features/always-on-top/HangupButton.js Datei anzeigen

1
 // @flow
1
 // @flow
2
 
2
 
3
-// XXX: AlwaysOnTop imports the button directly in order to avoid bringing in
4
-// other components that use lib-jitsi-meet, which always on top does not
5
-// import.
3
+// XXX Import the button directly in order to avoid bringing in other components
4
+// that use lib-jitsi-meet, which always-on-top does not import.
6
 import AbstractHangupButton
5
 import AbstractHangupButton
7
     from '../toolbox/components/buttons/AbstractHangupButton';
6
     from '../toolbox/components/buttons/AbstractHangupButton';
8
 import type { Props } from '../toolbox/components/buttons/AbstractButton';
7
 import type { Props } from '../toolbox/components/buttons/AbstractButton';

+ 1
- 1
react/features/always-on-top/Toolbar.js Datei anzeigen

24
     /**
24
     /**
25
      * Callback invoked when the mouse has moved over the toolbar.
25
      * Callback invoked when the mouse has moved over the toolbar.
26
      */
26
      */
27
-     onMouseOver: Function
27
+    onMouseOver: Function
28
 };
28
 };
29
 
29
 
30
 /**
30
 /**

+ 12
- 11
react/features/always-on-top/VideoMuteButton.js Datei anzeigen

1
 // @flow
1
 // @flow
2
 
2
 
3
-// XXX: AlwaysOnTop imports the button directly in order to avoid bringing in
4
-// other components that use lib-jitsi-meet, which always on top does not
5
-// import.
3
+// XXX Import the button directly in order to avoid bringing in other components
4
+// that use lib-jitsi-meet, which always-on-top does not import.
6
 import AbstractVideoMuteButton
5
 import AbstractVideoMuteButton
7
     from '../toolbox/components/buttons/AbstractVideoMuteButton';
6
     from '../toolbox/components/buttons/AbstractVideoMuteButton';
8
 import type { Props } from '../toolbox/components/buttons/AbstractButton';
7
 import type { Props } from '../toolbox/components/buttons/AbstractButton';
9
 
8
 
10
 const { api } = window.alwaysOnTop;
9
 const { api } = window.alwaysOnTop;
11
 
10
 
11
+/**
12
+ * The type of the React {@code Component} state of {@link VideoMuteButton}.
13
+ */
12
 type State = {
14
 type State = {
13
 
15
 
14
     /**
16
     /**
23
 };
25
 };
24
 
26
 
25
 /**
27
 /**
26
- * Stateless hangup button for the Always-on-Top windows.
28
+ * Stateless "mute/unmute video" button for the Always-on-Top windows.
27
  */
29
  */
28
 export default class VideoMuteButton
30
 export default class VideoMuteButton
29
     extends AbstractVideoMuteButton<Props, State> {
31
     extends AbstractVideoMuteButton<Props, State> {
62
             api.isVideoAvailable(),
64
             api.isVideoAvailable(),
63
             api.isVideoMuted()
65
             api.isVideoMuted()
64
         ])
66
         ])
65
-            .then(values => {
66
-                const [ videoAvailable, videoMuted ] = values;
67
-
67
+            .then(([ videoAvailable, videoMuted ]) =>
68
                 this.setState({
68
                 this.setState({
69
                     videoAvailable,
69
                     videoAvailable,
70
                     videoMuted
70
                     videoMuted
71
-                });
72
-            })
71
+                }))
73
             .catch(console.error);
72
             .catch(console.error);
74
     }
73
     }
75
 
74
 
80
      * @returns {void}
79
      * @returns {void}
81
      */
80
      */
82
     componentWillUnmount() {
81
     componentWillUnmount() {
83
-        api.removeListener('videoAvailabilityChanged',
82
+        api.removeListener(
83
+            'videoAvailabilityChanged',
84
             this._videoAvailabilityListener);
84
             this._videoAvailabilityListener);
85
-        api.removeListener('videoMuteStatusChanged',
85
+        api.removeListener(
86
+            'videoMuteStatusChanged',
86
             this._videoMutedListener);
87
             this._videoMutedListener);
87
     }
88
     }
88
 
89
 

+ 8
- 8
react/features/always-on-top/index.js Datei anzeigen

1
+// @flow
2
+
1
 import React from 'react';
3
 import React from 'react';
2
 import ReactDOM from 'react-dom';
4
 import ReactDOM from 'react-dom';
3
 
5
 
4
 import AlwaysOnTop from './AlwaysOnTop';
6
 import AlwaysOnTop from './AlwaysOnTop';
5
 
7
 
6
 // Render the main/root Component.
8
 // Render the main/root Component.
7
-ReactDOM.render(
8
-    <AlwaysOnTop />,
9
-    document.getElementById('react')
10
-);
11
-
12
-window.addEventListener('beforeunload', () => {
13
-    ReactDOM.unmountComponentAtNode(document.getElementById('react'));
14
-});
9
+// $FlowExpectedError
10
+ReactDOM.render(<AlwaysOnTop />, document.getElementById('react'));
11
+
12
+window.addEventListener(
13
+    'beforeunload',
14
+    () => ReactDOM.unmountComponentAtNode(document.getElementById('react')));

+ 8
- 5
react/features/conference/components/Conference.web.js Datei anzeigen

139
     render() {
139
     render() {
140
         const {
140
         const {
141
             VIDEO_QUALITY_LABEL_DISABLED,
141
             VIDEO_QUALITY_LABEL_DISABLED,
142
-            filmStripOnly
142
+
143
+            // XXX The character casing of the name filmStripOnly utilized by
144
+            // interfaceConfig is obsolete but legacy support is required.
145
+            filmStripOnly: filmstripOnly
143
         } = interfaceConfig;
146
         } = interfaceConfig;
144
         const hideVideoQualityLabel
147
         const hideVideoQualityLabel
145
-            = filmStripOnly
148
+            = filmstripOnly
146
                 || VIDEO_QUALITY_LABEL_DISABLED
149
                 || VIDEO_QUALITY_LABEL_DISABLED
147
                 || this.props._iAmRecorder;
150
                 || this.props._iAmRecorder;
148
 
151
 
153
                 <div id = 'videospace'>
156
                 <div id = 'videospace'>
154
                     <LargeVideo
157
                     <LargeVideo
155
                         hideVideoQualityLabel = { hideVideoQualityLabel } />
158
                         hideVideoQualityLabel = { hideVideoQualityLabel } />
156
-                    <Filmstrip filmstripOnly = { filmStripOnly } />
159
+                    <Filmstrip filmstripOnly = { filmstripOnly } />
157
                 </div>
160
                 </div>
158
 
161
 
159
-                { !filmStripOnly && <Toolbox /> }
160
-                { !filmStripOnly && <SidePanel /> }
162
+                { filmstripOnly || <Toolbox /> }
163
+                { filmstripOnly || <SidePanel /> }
161
 
164
 
162
                 <DialogContainer />
165
                 <DialogContainer />
163
                 <NotificationsContainer />
166
                 <NotificationsContainer />

+ 22
- 23
react/features/filmstrip/components/Filmstrip.web.js Datei anzeigen

9
 
9
 
10
 import { setFilmstripHovered } from '../actions';
10
 import { setFilmstripHovered } from '../actions';
11
 import { shouldRemoteVideosBeVisible } from '../functions';
11
 import { shouldRemoteVideosBeVisible } from '../functions';
12
-
13
 import Toolbar from './Toolbar';
12
 import Toolbar from './Toolbar';
14
 
13
 
15
 declare var interfaceConfig: Object;
14
 declare var interfaceConfig: Object;
36
      */
35
      */
37
     static propTypes = {
36
     static propTypes = {
38
         /**
37
         /**
39
-         * Whether or not the conference is in filmstripOnly mode.
38
+         * Whether the UI/UX is filmstrip-only.
40
          */
39
          */
41
-        _filmStripOnly: PropTypes.bool,
40
+        _filmstripOnly: PropTypes.bool,
42
 
41
 
43
         /**
42
         /**
44
          * Whether or not remote videos are currently being hovered over.
43
          * Whether or not remote videos are currently being hovered over.
58
         _toolboxVisible: PropTypes.bool,
57
         _toolboxVisible: PropTypes.bool,
59
 
58
 
60
         /**
59
         /**
61
-         * Updates the redux store with filmstrip hover changes.
60
+         * The redux {@code dispatch} function.
62
          */
61
          */
63
         dispatch: PropTypes.func
62
         dispatch: PropTypes.func
64
     };
63
     };
85
         this._isHovered = false;
84
         this._isHovered = false;
86
 
85
 
87
         // Bind event handlers so they are only bound once for every instance.
86
         // Bind event handlers so they are only bound once for every instance.
88
-        this._onMouseOver = this._onMouseOver.bind(this);
89
         this._onMouseOut = this._onMouseOut.bind(this);
87
         this._onMouseOut = this._onMouseOut.bind(this);
88
+        this._onMouseOver = this._onMouseOver.bind(this);
90
     }
89
     }
91
 
90
 
92
     /**
91
     /**
97
      */
96
      */
98
     render() {
97
     render() {
99
         const {
98
         const {
100
-            _filmStripOnly,
99
+            _filmstripOnly,
101
             _remoteVideosVisible,
100
             _remoteVideosVisible,
102
             _toolboxVisible
101
             _toolboxVisible
103
         } = this.props;
102
         } = this.props;
104
 
103
 
105
-        /**
106
-         * Note: Appending of {@code RemoteVideo} views is handled through
107
-         * VideoLayout. The views do not get blown away on render() because
108
-         * ReactDOMComponent is only aware of the given JSX and not new appended
109
-         * DOM. As such, when updateDOMProperties gets called, only attributes
110
-         * will get updated without replacing the DOM. If the known DOM gets
111
-         * modified, then the views will get blown away.
112
-         */
104
+        // Note: Appending of {@code RemoteVideo} views is handled through
105
+        // VideoLayout. The views do not get blown away on render() because
106
+        // ReactDOMComponent is only aware of the given JSX and not new appended
107
+        // DOM. As such, when updateDOMProperties gets called, only attributes
108
+        // will get updated without replacing the DOM. If the known DOM gets
109
+        // modified, then the views will get blown away.
113
         const reduceHeight
110
         const reduceHeight
114
             = _toolboxVisible && interfaceConfig.TOOLBAR_BUTTONS.length;
111
             = _toolboxVisible && interfaceConfig.TOOLBAR_BUTTONS.length;
115
-        const filmstripClassNames = `filmstrip ${_remoteVideosVisible
116
-            ? '' : 'hide-videos'} ${reduceHeight ? 'reduce-height' : ''}`;
112
+        const classNames
113
+            = `filmstrip ${
114
+                _remoteVideosVisible ? '' : 'hide-videos'} ${
115
+                reduceHeight ? 'reduce-height' : ''}`;
117
 
116
 
118
         return (
117
         return (
119
-            <div className = { filmstripClassNames }>
120
-                { _filmStripOnly && <Toolbar /> }
118
+            <div className = { classNames }>
119
+                { _filmstripOnly && <Toolbar /> }
121
                 <div
120
                 <div
122
                     className = 'filmstrip__videos'
121
                     className = 'filmstrip__videos'
123
                     id = 'remoteVideos'>
122
                     id = 'remoteVideos'>
131
                     <div
130
                     <div
132
                         className = 'filmstrip__videos'
131
                         className = 'filmstrip__videos'
133
                         id = 'filmstripRemoteVideos'>
132
                         id = 'filmstripRemoteVideos'>
134
-                        {/**
135
-                          * This extra video container is needed for scrolling
136
-                          * thumbnails in Firefox; otherwise, the flex
133
+                        {/*
134
+                          * XXX This extra video container is needed for
135
+                          * scrolling thumbnails in Firefox; otherwise, the flex
137
                           * thumbnails resize instead of causing overflow.
136
                           * thumbnails resize instead of causing overflow.
138
                           */}
137
                           */}
139
                         <div
138
                         <div
192
  * @param {Object} state - The Redux state.
191
  * @param {Object} state - The Redux state.
193
  * @private
192
  * @private
194
  * @returns {{
193
  * @returns {{
195
- *     _filmStripOnly: boolean,
194
+ *     _filmstripOnly: boolean,
196
  *     _hovered: boolean,
195
  *     _hovered: boolean,
197
  *     _remoteVideosVisible: boolean,
196
  *     _remoteVideosVisible: boolean,
198
  *     _toolboxVisible: boolean
197
  *     _toolboxVisible: boolean
202
     const { hovered } = state['features/filmstrip'];
201
     const { hovered } = state['features/filmstrip'];
203
 
202
 
204
     return {
203
     return {
205
-        _filmStripOnly: Boolean(interfaceConfig.filmStripOnly),
204
+        _filmstripOnly: Boolean(interfaceConfig.filmStripOnly),
206
         _hovered: hovered,
205
         _hovered: hovered,
207
         _remoteVideosVisible: shouldRemoteVideosBeVisible(state),
206
         _remoteVideosVisible: shouldRemoteVideosBeVisible(state),
208
         _toolboxVisible: state['features/toolbox'].visible
207
         _toolboxVisible: state['features/toolbox'].visible

+ 5
- 2
react/features/filmstrip/components/Toolbar.web.js Datei anzeigen

12
 
12
 
13
 declare var interfaceConfig: Object;
13
 declare var interfaceConfig: Object;
14
 
14
 
15
+/**
16
+ * The type of the React {@code Component} props of {@link Toolbar}.
17
+ */
15
 type Props = {
18
 type Props = {
16
 
19
 
17
     /**
20
     /**
18
-     * Set of buttons which should be visible in this toolbar.
21
+     * The set of buttons which should be visible in this {@code Toolbar}.
19
      */
22
      */
20
     _visibleButtons: Set<string>
23
     _visibleButtons: Set<string>
21
 };
24
 };
22
 
25
 
23
 /**
26
 /**
24
- * Implements the conference toolbar on React/Web for filmstrip only mode.
27
+ * Implements the conference toolbar on React/Web for filmstrip-only mode.
25
  *
28
  *
26
  * @extends Component
29
  * @extends Component
27
  */
30
  */

+ 5
- 5
react/features/toolbox/components/buttons/web/SettingsButton.js Datei anzeigen

17
     /**
17
     /**
18
      * Whether we are in filmstrip only mode or not.
18
      * Whether we are in filmstrip only mode or not.
19
      */
19
      */
20
-    _filmStripOnly: boolean,
20
+    _filmstripOnly: boolean,
21
 
21
 
22
     /**
22
     /**
23
      * Array containing the enabled settings sections.
23
      * Array containing the enabled settings sections.
46
      * @returns {void}
46
      * @returns {void}
47
      */
47
      */
48
     _handleClick() {
48
     _handleClick() {
49
-        const { _filmStripOnly, _sections, dispatch } = this.props;
49
+        const { _filmstripOnly, _sections, dispatch } = this.props;
50
 
50
 
51
         sendAnalytics(createToolbarEvent('settings'));
51
         sendAnalytics(createToolbarEvent('settings'));
52
-        if (_filmStripOnly
52
+        if (_filmstripOnly
53
                 || (_sections.length === 1 && _sections.includes('devices'))) {
53
                 || (_sections.length === 1 && _sections.includes('devices'))) {
54
             dispatch(openDeviceSelectionDialog());
54
             dispatch(openDeviceSelectionDialog());
55
         } else {
55
         } else {
76
  * @param {Object} state - The Redux state.
76
  * @param {Object} state - The Redux state.
77
  * @private
77
  * @private
78
  * @returns {{
78
  * @returns {{
79
- *     _filmStripOnly: boolean
79
+ *     _filmstripOnly: boolean
80
  * }}
80
  * }}
81
  */
81
  */
82
 function _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars
82
 function _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars
84
     // interfaceConfig is part of redux we will.
84
     // interfaceConfig is part of redux we will.
85
 
85
 
86
     return {
86
     return {
87
-        _filmStripOnly: Boolean(interfaceConfig.filmStripOnly),
87
+        _filmstripOnly: Boolean(interfaceConfig.filmStripOnly),
88
         _sections: interfaceConfig.SETTINGS_SECTIONS || []
88
         _sections: interfaceConfig.SETTINGS_SECTIONS || []
89
     };
89
     };
90
 }
90
 }

Laden…
Abbrechen
Speichern