Browse Source

feat(HelpOverflowButton): Implement.

master
Hristo Terezov 6 years ago
parent
commit
f295f60bea

+ 6
- 0
interface_config.js View File

189
      */
189
      */
190
     AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only'
190
     AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only'
191
 
191
 
192
+    /**
193
+     * The link to the user documentation.
194
+     */
195
+    // HELP_LINK: 'https://docs.example.com/video-meetings.html',
196
+
197
+
192
     /**
198
     /**
193
      * How many columns the tile view can expand to. The respected range is
199
      * How many columns the tile view can expand to. The respected range is
194
      * between 1 and 5.
200
      * between 1 and 5.

+ 2
- 0
lang/main.json View File

573
             "feedback": "Leave feedback",
573
             "feedback": "Leave feedback",
574
             "fullScreen": "Toggle full screen",
574
             "fullScreen": "Toggle full screen",
575
             "hangup": "Leave the call",
575
             "hangup": "Leave the call",
576
+            "help": "Help",
576
             "invite": "Invite people",
577
             "invite": "Invite people",
577
             "kick": "Kick participant",
578
             "kick": "Kick participant",
578
             "localRecording": "Toggle local recording controls",
579
             "localRecording": "Toggle local recording controls",
614
         "exitTileView": "Exit tile view",
615
         "exitTileView": "Exit tile view",
615
         "feedback": "Leave feedback",
616
         "feedback": "Leave feedback",
616
         "hangup": "Leave",
617
         "hangup": "Leave",
618
+        "help": "Help",
617
         "invite": "Invite people",
619
         "invite": "Invite people",
618
         "login": "Login",
620
         "login": "Login",
619
         "logout": "Logout",
621
         "logout": "Logout",

+ 1
- 0
react/features/base/icons/svg/help.svg View File

1
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/></svg>

+ 1
- 0
react/features/base/icons/svg/index.js View File

28
 export { default as IconFeedback } from './feedback.svg';
28
 export { default as IconFeedback } from './feedback.svg';
29
 export { default as IconFullScreen } from './full-screen.svg';
29
 export { default as IconFullScreen } from './full-screen.svg';
30
 export { default as IconHangup } from './hangup.svg';
30
 export { default as IconHangup } from './hangup.svg';
31
+export { default as IconHelp } from './help.svg';
31
 export { default as IconInfo } from './info.svg';
32
 export { default as IconInfo } from './info.svg';
32
 export { default as IconInvite } from './invite.svg';
33
 export { default as IconInvite } from './invite.svg';
33
 export { default as IconKick } from './kick.svg';
34
 export { default as IconKick } from './kick.svg';

+ 44
- 0
react/features/toolbox/components/web/HelpButton.js View File

1
+// @flow
2
+
3
+import { createToolbarEvent, sendAnalytics } from '../../../analytics';
4
+import { translate } from '../../../base/i18n';
5
+import { IconHelp } from '../../../base/icons';
6
+import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox';
7
+
8
+declare var interfaceConfig: Object;
9
+
10
+/**
11
+ * Implements an {@link AbstractButton} to open the user documentation in a new window.
12
+ */
13
+class HelpButton extends AbstractButton<AbstractButtonProps, *> {
14
+    accessibilityLabel = 'toolbar.accessibilityLabel.help';
15
+    icon = IconHelp;
16
+    label = 'toolbar.help';
17
+
18
+    /**
19
+     * Handles clicking / pressing the button, and opens a new window with the user documentation.
20
+     *
21
+     * @private
22
+     * @returns {void}
23
+     */
24
+    _handleClick() {
25
+        sendAnalytics(createToolbarEvent('help.pressed'));
26
+        window.open(interfaceConfig.HELP_LINK);
27
+    }
28
+
29
+    /**
30
+     * Implements React's {@link Component#render()}.
31
+     *
32
+     * @inheritdoc
33
+     * @returns {React$Node}
34
+     */
35
+    render(): React$Node {
36
+        if (typeof interfaceConfig.HELP_LINK === 'string') {
37
+            return super.render();
38
+        }
39
+
40
+        return null;
41
+    }
42
+}
43
+
44
+export default translate(HelpButton);

+ 34
- 63
react/features/toolbox/components/web/Toolbox.js View File

71
 import AudioMuteButton from '../AudioMuteButton';
71
 import AudioMuteButton from '../AudioMuteButton';
72
 import { isToolboxVisible } from '../../functions';
72
 import { isToolboxVisible } from '../../functions';
73
 import HangupButton from '../HangupButton';
73
 import HangupButton from '../HangupButton';
74
+import HelpButton from './HelpButton';
74
 import OverflowMenuButton from './OverflowMenuButton';
75
 import OverflowMenuButton from './OverflowMenuButton';
75
 import OverflowMenuProfileItem from './OverflowMenuProfileItem';
76
 import OverflowMenuProfileItem from './OverflowMenuProfileItem';
76
 import ToolbarButton from './ToolbarButton';
77
 import ToolbarButton from './ToolbarButton';
218
         this._onSetOverflowVisible = this._onSetOverflowVisible.bind(this);
219
         this._onSetOverflowVisible = this._onSetOverflowVisible.bind(this);
219
 
220
 
220
         this._onShortcutToggleChat = this._onShortcutToggleChat.bind(this);
221
         this._onShortcutToggleChat = this._onShortcutToggleChat.bind(this);
221
-        this._onShortcutToggleFullScreen
222
-            = this._onShortcutToggleFullScreen.bind(this);
223
-        this._onShortcutToggleRaiseHand
224
-            = this._onShortcutToggleRaiseHand.bind(this);
225
-        this._onShortcutToggleScreenshare
226
-            = this._onShortcutToggleScreenshare.bind(this);
227
-        this._onShortcutToggleVideoQuality
228
-            = this._onShortcutToggleVideoQuality.bind(this);
229
-        this._onToolbarOpenFeedback
230
-            = this._onToolbarOpenFeedback.bind(this);
222
+        this._onShortcutToggleFullScreen = this._onShortcutToggleFullScreen.bind(this);
223
+        this._onShortcutToggleRaiseHand = this._onShortcutToggleRaiseHand.bind(this);
224
+        this._onShortcutToggleScreenshare = this._onShortcutToggleScreenshare.bind(this);
225
+        this._onShortcutToggleVideoQuality = this._onShortcutToggleVideoQuality.bind(this);
226
+        this._onToolbarOpenFeedback = this._onToolbarOpenFeedback.bind(this);
231
         this._onToolbarOpenInvite = this._onToolbarOpenInvite.bind(this);
227
         this._onToolbarOpenInvite = this._onToolbarOpenInvite.bind(this);
232
-        this._onToolbarOpenKeyboardShortcuts
233
-            = this._onToolbarOpenKeyboardShortcuts.bind(this);
234
-        this._onToolbarOpenSpeakerStats
235
-            = this._onToolbarOpenSpeakerStats.bind(this);
236
-        this._onToolbarOpenVideoQuality
237
-            = this._onToolbarOpenVideoQuality.bind(this);
228
+        this._onToolbarOpenKeyboardShortcuts = this._onToolbarOpenKeyboardShortcuts.bind(this);
229
+        this._onToolbarOpenSpeakerStats = this._onToolbarOpenSpeakerStats.bind(this);
230
+        this._onToolbarOpenVideoQuality = this._onToolbarOpenVideoQuality.bind(this);
238
         this._onToolbarToggleChat = this._onToolbarToggleChat.bind(this);
231
         this._onToolbarToggleChat = this._onToolbarToggleChat.bind(this);
239
-        this._onToolbarToggleFullScreen
240
-            = this._onToolbarToggleFullScreen.bind(this);
241
-        this._onToolbarToggleProfile
242
-            = this._onToolbarToggleProfile.bind(this);
243
-        this._onToolbarToggleRaiseHand
244
-            = this._onToolbarToggleRaiseHand.bind(this);
245
-        this._onToolbarToggleScreenshare
246
-            = this._onToolbarToggleScreenshare.bind(this);
247
-        this._onToolbarToggleSharedVideo
248
-            = this._onToolbarToggleSharedVideo.bind(this);
249
-        this._onToolbarOpenLocalRecordingInfoDialog
250
-            = this._onToolbarOpenLocalRecordingInfoDialog.bind(this);
232
+        this._onToolbarToggleFullScreen = this._onToolbarToggleFullScreen.bind(this);
233
+        this._onToolbarToggleProfile = this._onToolbarToggleProfile.bind(this);
234
+        this._onToolbarToggleRaiseHand = this._onToolbarToggleRaiseHand.bind(this);
235
+        this._onToolbarToggleScreenshare = this._onToolbarToggleScreenshare.bind(this);
236
+        this._onToolbarToggleSharedVideo = this._onToolbarToggleSharedVideo.bind(this);
237
+        this._onToolbarOpenLocalRecordingInfoDialog = this._onToolbarOpenLocalRecordingInfoDialog.bind(this);
251
 
238
 
252
         this.state = {
239
         this.state = {
253
             windowWidth: window.innerWidth
240
             windowWidth: window.innerWidth
936
                     onClick = { this._onToolbarOpenVideoQuality } />,
923
                     onClick = { this._onToolbarOpenVideoQuality } />,
937
             this._shouldShowButton('fullscreen')
924
             this._shouldShowButton('fullscreen')
938
                 && <OverflowMenuItem
925
                 && <OverflowMenuItem
939
-                    accessibilityLabel =
940
-                        { t('toolbar.accessibilityLabel.fullScreen') }
941
-                    icon = { _fullScreen
942
-                        ? IconExitFullScreen
943
-                        : IconFullScreen }
926
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.fullScreen') }
927
+                    icon = { _fullScreen ? IconExitFullScreen : IconFullScreen }
944
                     key = 'fullscreen'
928
                     key = 'fullscreen'
945
                     onClick = { this._onToolbarToggleFullScreen }
929
                     onClick = { this._onToolbarToggleFullScreen }
946
-                    text = { _fullScreen
947
-                        ? t('toolbar.exitFullScreen')
948
-                        : t('toolbar.enterFullScreen') } />,
930
+                    text = { _fullScreen ? t('toolbar.exitFullScreen') : t('toolbar.enterFullScreen') } />,
949
             <LiveStreamButton
931
             <LiveStreamButton
950
                 key = 'livestreaming'
932
                 key = 'livestreaming'
951
                 showLabel = { true } />,
933
                 showLabel = { true } />,
954
                 showLabel = { true } />,
936
                 showLabel = { true } />,
955
             this._shouldShowButton('sharedvideo')
937
             this._shouldShowButton('sharedvideo')
956
                 && <OverflowMenuItem
938
                 && <OverflowMenuItem
957
-                    accessibilityLabel =
958
-                        { t('toolbar.accessibilityLabel.sharedvideo') }
939
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.sharedvideo') }
959
                     icon = { IconShareVideo }
940
                     icon = { IconShareVideo }
960
                     key = 'sharedvideo'
941
                     key = 'sharedvideo'
961
                     onClick = { this._onToolbarToggleSharedVideo }
942
                     onClick = { this._onToolbarToggleSharedVideo }
962
-                    text = { _sharingVideo
963
-                        ? t('toolbar.stopSharedVideo')
964
-                        : t('toolbar.sharedvideo') } />,
943
+                    text = { _sharingVideo ? t('toolbar.stopSharedVideo') : t('toolbar.sharedvideo') } />,
965
             this._shouldShowButton('etherpad')
944
             this._shouldShowButton('etherpad')
966
                 && <SharedDocumentButton
945
                 && <SharedDocumentButton
967
                     key = 'etherpad'
946
                     key = 'etherpad'
976
                 visible = { this._shouldShowButton('settings') } />,
955
                 visible = { this._shouldShowButton('settings') } />,
977
             this._shouldShowButton('stats')
956
             this._shouldShowButton('stats')
978
                 && <OverflowMenuItem
957
                 && <OverflowMenuItem
979
-                    accessibilityLabel =
980
-                        { t('toolbar.accessibilityLabel.speakerStats') }
958
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.speakerStats') }
981
                     icon = { IconPresentation }
959
                     icon = { IconPresentation }
982
                     key = 'stats'
960
                     key = 'stats'
983
                     onClick = { this._onToolbarOpenSpeakerStats }
961
                     onClick = { this._onToolbarOpenSpeakerStats }
985
             this._shouldShowButton('feedback')
963
             this._shouldShowButton('feedback')
986
                 && _feedbackConfigured
964
                 && _feedbackConfigured
987
                 && <OverflowMenuItem
965
                 && <OverflowMenuItem
988
-                    accessibilityLabel =
989
-                        { t('toolbar.accessibilityLabel.feedback') }
966
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.feedback') }
990
                     icon = { IconFeedback }
967
                     icon = { IconFeedback }
991
                     key = 'feedback'
968
                     key = 'feedback'
992
                     onClick = { this._onToolbarOpenFeedback }
969
                     onClick = { this._onToolbarOpenFeedback }
993
                     text = { t('toolbar.feedback') } />,
970
                     text = { t('toolbar.feedback') } />,
994
             this._shouldShowButton('shortcuts')
971
             this._shouldShowButton('shortcuts')
995
                 && <OverflowMenuItem
972
                 && <OverflowMenuItem
996
-                    accessibilityLabel =
997
-                        { t('toolbar.accessibilityLabel.shortcuts') }
973
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.shortcuts') }
998
                     icon = { IconOpenInNew }
974
                     icon = { IconOpenInNew }
999
                     key = 'shortcuts'
975
                     key = 'shortcuts'
1000
                     onClick = { this._onToolbarOpenKeyboardShortcuts }
976
                     onClick = { this._onToolbarOpenKeyboardShortcuts }
1001
-                    text = { t('toolbar.shortcuts') } />
977
+                    text = { t('toolbar.shortcuts') } />,
978
+            this._shouldShowButton('help')
979
+                && <HelpButton
980
+                    key = 'help'
981
+                    showLabel = { true } />
1002
         ];
982
         ];
1003
     }
983
     }
1004
 
984
 
1057
             case 'invite':
1037
             case 'invite':
1058
                 return (
1038
                 return (
1059
                     <OverflowMenuItem
1039
                     <OverflowMenuItem
1060
-                        accessibilityLabel =
1061
-                            { t('toolbar.accessibilityLabel.invite') }
1040
+                        accessibilityLabel = { t('toolbar.accessibilityLabel.invite') }
1062
                         icon = { IconInvite }
1041
                         icon = { IconInvite }
1063
                         key = 'invite'
1042
                         key = 'invite'
1064
                         onClick = { this._onToolbarOpenInvite }
1043
                         onClick = { this._onToolbarOpenInvite }
1069
             case 'localrecording':
1048
             case 'localrecording':
1070
                 return (
1049
                 return (
1071
                     <OverflowMenuItem
1050
                     <OverflowMenuItem
1072
-                        accessibilityLabel
1073
-                            = { t('toolbar.accessibilityLabel.localRecording') }
1051
+                        accessibilityLabel = { t('toolbar.accessibilityLabel.localRecording') }
1074
                         icon = { IconRec }
1052
                         icon = { IconRec }
1075
                         key = 'localrecording'
1053
                         key = 'localrecording'
1076
-                        onClick = {
1077
-                            this._onToolbarOpenLocalRecordingInfoDialog
1078
-                        }
1054
+                        onClick = { this._onToolbarOpenLocalRecordingInfoDialog }
1079
                         text = { t('localRecording.dialogTitle') } />
1055
                         text = { t('localRecording.dialogTitle') } />
1080
                 );
1056
                 );
1081
             default:
1057
             default:
1098
             t
1074
             t
1099
         } = this.props;
1075
         } = this.props;
1100
         const overflowMenuContent = this._renderOverflowMenuContent();
1076
         const overflowMenuContent = this._renderOverflowMenuContent();
1101
-        const overflowHasItems = Boolean(overflowMenuContent.filter(
1102
-            child => child).length);
1077
+        const overflowHasItems = Boolean(overflowMenuContent.filter(child => child).length);
1103
         const toolbarAccLabel = 'toolbar.accessibilityLabel.moreActionsMenu';
1078
         const toolbarAccLabel = 'toolbar.accessibilityLabel.moreActionsMenu';
1104
         const buttonsLeft = [];
1079
         const buttonsLeft = [];
1105
         const buttonsRight = [];
1080
         const buttonsRight = [];
1182
                         && this._renderDesktopSharingButton() }
1157
                         && this._renderDesktopSharingButton() }
1183
                     { buttonsLeft.indexOf('raisehand') !== -1
1158
                     { buttonsLeft.indexOf('raisehand') !== -1
1184
                         && <ToolbarButton
1159
                         && <ToolbarButton
1185
-                            accessibilityLabel =
1186
-                                {
1187
-                                    t('toolbar.accessibilityLabel.raiseHand')
1188
-                                }
1160
+                            accessibilityLabel = { t('toolbar.accessibilityLabel.raiseHand') }
1189
                             icon = { IconRaisedHand }
1161
                             icon = { IconRaisedHand }
1190
                             onClick = { this._onToolbarToggleRaiseHand }
1162
                             onClick = { this._onToolbarToggleRaiseHand }
1191
                             toggled = { _raisedHand }
1163
                             toggled = { _raisedHand }
1193
                     { buttonsLeft.indexOf('chat') !== -1
1165
                     { buttonsLeft.indexOf('chat') !== -1
1194
                         && <div className = 'toolbar-button-with-badge'>
1166
                         && <div className = 'toolbar-button-with-badge'>
1195
                             <ToolbarButton
1167
                             <ToolbarButton
1196
-                                accessibilityLabel =
1197
-                                    { t('toolbar.accessibilityLabel.chat') }
1168
+                                accessibilityLabel = { t('toolbar.accessibilityLabel.chat') }
1198
                                 icon = { IconChat }
1169
                                 icon = { IconChat }
1199
                                 onClick = { this._onToolbarToggleChat }
1170
                                 onClick = { this._onToolbarToggleChat }
1200
                                 toggled = { _chatOpen }
1171
                                 toggled = { _chatOpen }

Loading…
Cancel
Save