diff --git a/src/components/gui/gui.jsx b/src/components/gui/gui.jsx index dfcc7d8ddc9109788665cbf76eb776aefd9a9e9c..f8311e2542c2dc2ff647b66857397e095ecb3f3a 100644 --- a/src/components/gui/gui.jsx +++ b/src/components/gui/gui.jsx @@ -66,8 +66,10 @@ const GUIComponent = props => { backpackVisible, blocksTabVisible, cardsVisible, + canChangeLanguage, canCreateNew, canEditTitle, + canManageFiles, canRemix, canSave, canCreateCopy, @@ -202,9 +204,11 @@ const GUIComponent = props => { authorId={authorId} authorThumbnailUrl={authorThumbnailUrl} authorUsername={authorUsername} + canChangeLanguage={canChangeLanguage} canCreateCopy={canCreateCopy} canCreateNew={canCreateNew} canEditTitle={canEditTitle} + canManageFiles={canManageFiles} canRemix={canRemix} canSave={canSave} canShare={canShare} @@ -359,9 +363,11 @@ GUIComponent.propTypes = { backpackVisible: PropTypes.bool, basePath: PropTypes.string, blocksTabVisible: PropTypes.bool, + canChangeLanguage: PropTypes.bool, canCreateCopy: PropTypes.bool, canCreateNew: PropTypes.bool, canEditTitle: PropTypes.bool, + canManageFiles: PropTypes.bool, canRemix: PropTypes.bool, canSave: PropTypes.bool, canShare: PropTypes.bool, @@ -411,8 +417,10 @@ GUIComponent.defaultProps = { backpackHost: null, backpackVisible: false, basePath: './', + canChangeLanguage: true, canCreateNew: false, canEditTitle: false, + canManageFiles: true, canRemix: false, canSave: false, canCreateCopy: false, diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 6105a60e5ca161b36b96f3c0043a45c45a30b872..d4a5393e0ecf20baa070a4c56e8bc9bdda4482bb 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -331,7 +331,7 @@ class MenuBar extends React.Component { onClick={this.props.onClickLogo} /> </div> - <div + {(this.props.canChangeLanguage) && (<div className={classNames(styles.menuBarItem, styles.hoverable, styles.languageMenu)} > <div> @@ -345,82 +345,86 @@ class MenuBar extends React.Component { /> </div> <LanguageSelector label={this.props.intl.formatMessage(ariaMessages.language)} /> - </div> - <div - className={classNames(styles.menuBarItem, styles.hoverable, { - [styles.active]: this.props.fileMenuOpen - })} - onMouseUp={this.props.onClickFile} - > - <FormattedMessage - defaultMessage="File" - description="Text for file dropdown menu" - id="gui.menuBar.file" - /> - <MenuBarMenu - className={classNames(styles.menuBarMenu)} - open={this.props.fileMenuOpen} - place={this.props.isRtl ? 'left' : 'right'} - onRequestClose={this.props.onRequestCloseFile} + </div>)} + {(this.props.canManageFiles) && ( + <div + className={classNames(styles.menuBarItem, styles.hoverable, { + [styles.active]: this.props.fileMenuOpen + })} + onMouseUp={this.props.onClickFile} > - <MenuSection> - <MenuItem - isRtl={this.props.isRtl} - onClick={this.handleClickNew} - > - {newProjectMessage} - </MenuItem> - </MenuSection> - {(this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && ( + <FormattedMessage + defaultMessage="File" + description="Text for file dropdown menu" + id="gui.menuBar.file" + /> + <MenuBarMenu + className={classNames(styles.menuBarMenu)} + open={this.props.fileMenuOpen} + place={this.props.isRtl ? 'left' : 'right'} + onRequestClose={this.props.onRequestCloseFile} + > <MenuSection> - {this.props.canSave ? ( - <MenuItem onClick={this.handleClickSave}> - {saveNowMessage} - </MenuItem> - ) : []} - {this.props.canCreateCopy ? ( - <MenuItem onClick={this.handleClickSaveAsCopy}> - {createCopyMessage} - </MenuItem> - ) : []} - {this.props.canRemix ? ( - <MenuItem onClick={this.handleClickRemix}> - {remixMessage} - </MenuItem> - ) : []} + <MenuItem + isRtl={this.props.isRtl} + onClick={this.handleClickNew} + > + {newProjectMessage} + </MenuItem> </MenuSection> - )} - <MenuSection> - <SBFileUploader - canSave={this.props.canSave} - userOwnsProject={this.props.userOwnsProject} - onUpdateProjectTitle={this.props.onUpdateProjectTitle} - > - {(className, renderFileInput, loadProject) => ( + {(this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && ( + <MenuSection> + {this.props.canSave ? ( + <MenuItem onClick={this.handleClickSave}> + {saveNowMessage} + </MenuItem> + ) : []} + {this.props.canCreateCopy ? ( + <MenuItem onClick={this.handleClickSaveAsCopy}> + {createCopyMessage} + </MenuItem> + ) : []} + {this.props.canRemix ? ( + <MenuItem onClick={this.handleClickRemix}> + {remixMessage} + </MenuItem> + ) : []} + </MenuSection> + )} + <MenuSection> + <SBFileUploader + canSave={this.props.canSave} + userOwnsProject={this.props.userOwnsProject} + onUpdateProjectTitle={this.props.onUpdateProjectTitle} + > + {(className, renderFileInput, loadProject) => ( + <MenuItem + className={className} + onClick={loadProject} + > + {/* eslint-disable max-len */} + {this.props.intl.formatMessage(sharedMessages.loadFromComputerTitle)} + {/* eslint-enable max-len */} + {renderFileInput()} + </MenuItem> + )} + </SBFileUploader> + <SB3Downloader>{(className, downloadProjectCallback) => ( <MenuItem className={className} - onClick={loadProject} + onClick={this.handleSaveToComputer(downloadProjectCallback)} > - {this.props.intl.formatMessage(sharedMessages.loadFromComputerTitle)} - {renderFileInput()} + <FormattedMessage + defaultMessage="Save to your computer" + description="Menu bar item for downloading a project to your computer" // eslint-disable-line max-len + id="gui.menuBar.downloadToComputer" + /> </MenuItem> - )} - </SBFileUploader> - <SB3Downloader>{(className, downloadProjectCallback) => ( - <MenuItem - className={className} - onClick={this.handleSaveToComputer(downloadProjectCallback)} - > - <FormattedMessage - defaultMessage="Save to your computer" - description="Menu bar item for downloading a project to your computer" - id="gui.menuBar.downloadToComputer" - /> - </MenuItem> - )}</SB3Downloader> - </MenuSection> - </MenuBarMenu> - </div> + )}</SB3Downloader> + </MenuSection> + </MenuBarMenu> + </div> + )} <div className={classNames(styles.menuBarItem, styles.hoverable, { [styles.active]: this.props.editMenuOpen @@ -698,9 +702,11 @@ MenuBar.propTypes = { authorThumbnailUrl: PropTypes.string, authorUsername: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), autoUpdateProject: PropTypes.func, + canChangeLanguage: PropTypes.bool, canCreateCopy: PropTypes.bool, canCreateNew: PropTypes.bool, canEditTitle: PropTypes.bool, + canManageFiles: PropTypes.bool, canRemix: PropTypes.bool, canSave: PropTypes.bool, canShare: PropTypes.bool,