瀏覽代碼

feat(HelpOverflowButton): Implement.

master
Hristo Terezov 6 年之前
父節點
當前提交
f295f60bea

+ 6
- 0
interface_config.js 查看文件

@@ -189,6 +189,12 @@ var interfaceConfig = {
189 189
      */
190 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 199
      * How many columns the tile view can expand to. The respected range is
194 200
      * between 1 and 5.

+ 2
- 0
lang/main.json 查看文件

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

+ 1
- 0
react/features/base/icons/svg/help.svg 查看文件

@@ -0,0 +1 @@
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 查看文件

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

+ 44
- 0
react/features/toolbox/components/web/HelpButton.js 查看文件

@@ -0,0 +1,44 @@
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 查看文件

@@ -71,6 +71,7 @@ import {
71 71
 import AudioMuteButton from '../AudioMuteButton';
72 72
 import { isToolboxVisible } from '../../functions';
73 73
 import HangupButton from '../HangupButton';
74
+import HelpButton from './HelpButton';
74 75
 import OverflowMenuButton from './OverflowMenuButton';
75 76
 import OverflowMenuProfileItem from './OverflowMenuProfileItem';
76 77
 import ToolbarButton from './ToolbarButton';
@@ -218,36 +219,22 @@ class Toolbox extends Component<Props, State> {
218 219
         this._onSetOverflowVisible = this._onSetOverflowVisible.bind(this);
219 220
 
220 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 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 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 239
         this.state = {
253 240
             windowWidth: window.innerWidth
@@ -936,16 +923,11 @@ class Toolbox extends Component<Props, State> {
936 923
                     onClick = { this._onToolbarOpenVideoQuality } />,
937 924
             this._shouldShowButton('fullscreen')
938 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 928
                     key = 'fullscreen'
945 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 931
             <LiveStreamButton
950 932
                 key = 'livestreaming'
951 933
                 showLabel = { true } />,
@@ -954,14 +936,11 @@ class Toolbox extends Component<Props, State> {
954 936
                 showLabel = { true } />,
955 937
             this._shouldShowButton('sharedvideo')
956 938
                 && <OverflowMenuItem
957
-                    accessibilityLabel =
958
-                        { t('toolbar.accessibilityLabel.sharedvideo') }
939
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.sharedvideo') }
959 940
                     icon = { IconShareVideo }
960 941
                     key = 'sharedvideo'
961 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 944
             this._shouldShowButton('etherpad')
966 945
                 && <SharedDocumentButton
967 946
                     key = 'etherpad'
@@ -976,8 +955,7 @@ class Toolbox extends Component<Props, State> {
976 955
                 visible = { this._shouldShowButton('settings') } />,
977 956
             this._shouldShowButton('stats')
978 957
                 && <OverflowMenuItem
979
-                    accessibilityLabel =
980
-                        { t('toolbar.accessibilityLabel.speakerStats') }
958
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.speakerStats') }
981 959
                     icon = { IconPresentation }
982 960
                     key = 'stats'
983 961
                     onClick = { this._onToolbarOpenSpeakerStats }
@@ -985,20 +963,22 @@ class Toolbox extends Component<Props, State> {
985 963
             this._shouldShowButton('feedback')
986 964
                 && _feedbackConfigured
987 965
                 && <OverflowMenuItem
988
-                    accessibilityLabel =
989
-                        { t('toolbar.accessibilityLabel.feedback') }
966
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.feedback') }
990 967
                     icon = { IconFeedback }
991 968
                     key = 'feedback'
992 969
                     onClick = { this._onToolbarOpenFeedback }
993 970
                     text = { t('toolbar.feedback') } />,
994 971
             this._shouldShowButton('shortcuts')
995 972
                 && <OverflowMenuItem
996
-                    accessibilityLabel =
997
-                        { t('toolbar.accessibilityLabel.shortcuts') }
973
+                    accessibilityLabel = { t('toolbar.accessibilityLabel.shortcuts') }
998 974
                     icon = { IconOpenInNew }
999 975
                     key = 'shortcuts'
1000 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,8 +1037,7 @@ class Toolbox extends Component<Props, State> {
1057 1037
             case 'invite':
1058 1038
                 return (
1059 1039
                     <OverflowMenuItem
1060
-                        accessibilityLabel =
1061
-                            { t('toolbar.accessibilityLabel.invite') }
1040
+                        accessibilityLabel = { t('toolbar.accessibilityLabel.invite') }
1062 1041
                         icon = { IconInvite }
1063 1042
                         key = 'invite'
1064 1043
                         onClick = { this._onToolbarOpenInvite }
@@ -1069,13 +1048,10 @@ class Toolbox extends Component<Props, State> {
1069 1048
             case 'localrecording':
1070 1049
                 return (
1071 1050
                     <OverflowMenuItem
1072
-                        accessibilityLabel
1073
-                            = { t('toolbar.accessibilityLabel.localRecording') }
1051
+                        accessibilityLabel = { t('toolbar.accessibilityLabel.localRecording') }
1074 1052
                         icon = { IconRec }
1075 1053
                         key = 'localrecording'
1076
-                        onClick = {
1077
-                            this._onToolbarOpenLocalRecordingInfoDialog
1078
-                        }
1054
+                        onClick = { this._onToolbarOpenLocalRecordingInfoDialog }
1079 1055
                         text = { t('localRecording.dialogTitle') } />
1080 1056
                 );
1081 1057
             default:
@@ -1098,8 +1074,7 @@ class Toolbox extends Component<Props, State> {
1098 1074
             t
1099 1075
         } = this.props;
1100 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 1078
         const toolbarAccLabel = 'toolbar.accessibilityLabel.moreActionsMenu';
1104 1079
         const buttonsLeft = [];
1105 1080
         const buttonsRight = [];
@@ -1182,10 +1157,7 @@ class Toolbox extends Component<Props, State> {
1182 1157
                         && this._renderDesktopSharingButton() }
1183 1158
                     { buttonsLeft.indexOf('raisehand') !== -1
1184 1159
                         && <ToolbarButton
1185
-                            accessibilityLabel =
1186
-                                {
1187
-                                    t('toolbar.accessibilityLabel.raiseHand')
1188
-                                }
1160
+                            accessibilityLabel = { t('toolbar.accessibilityLabel.raiseHand') }
1189 1161
                             icon = { IconRaisedHand }
1190 1162
                             onClick = { this._onToolbarToggleRaiseHand }
1191 1163
                             toggled = { _raisedHand }
@@ -1193,8 +1165,7 @@ class Toolbox extends Component<Props, State> {
1193 1165
                     { buttonsLeft.indexOf('chat') !== -1
1194 1166
                         && <div className = 'toolbar-button-with-badge'>
1195 1167
                             <ToolbarButton
1196
-                                accessibilityLabel =
1197
-                                    { t('toolbar.accessibilityLabel.chat') }
1168
+                                accessibilityLabel = { t('toolbar.accessibilityLabel.chat') }
1198 1169
                                 icon = { IconChat }
1199 1170
                                 onClick = { this._onToolbarToggleChat }
1200 1171
                                 toggled = { _chatOpen }

Loading…
取消
儲存