import React from 'react'; import PropTypes from 'prop-types'; import { gettext, canGenerateShareLink, isPro, mediaUrl, canLockUnlockFile } from '../../utils/constants'; import { IconButton, ButtonGroup, CollabUsersButton } from '@seafile/seafile-editor/dist/components/topbar-component/editor-toolbar'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Tooltip } from 'reactstrap'; import FileInfo from '@seafile/seafile-editor/dist/components/topbar-component/file-info'; const { seafileCollabServer } = window.app.config; const { canDownloadFile } = window.app.pageOptions; const propTypes = { isDocs: PropTypes.bool.isRequired, hasDraft: PropTypes.bool.isRequired, isDraft: PropTypes.bool.isRequired, editorApi: PropTypes.object.isRequired, collabUsers: PropTypes.array.isRequired, fileInfo: PropTypes.object.isRequired, toggleShareLinkDialog: PropTypes.func.isRequired, onEdit: PropTypes.func.isRequired, toggleNewDraft: PropTypes.func.isRequired, toggleStar: PropTypes.func.isRequired, openParentDirectory: PropTypes.func.isRequired, openDialogs: PropTypes.func.isRequired, showFileHistory: PropTypes.bool.isRequired, toggleHistory: PropTypes.func.isRequired, editorMode: PropTypes.string.isRequired, readOnly: PropTypes.bool.isRequired, contentChanged: PropTypes.bool.isRequired, saving: PropTypes.bool.isRequired, showDraftSaved: PropTypes.bool.isRequired, isLocked: PropTypes.bool.isRequired, lockedByMe: PropTypes.bool.isRequired, toggleLockFile: PropTypes.func.isRequired, }; const MoreMenuPropTypes = { readOnly: PropTypes.bool.isRequired, openDialogs: PropTypes.func.isRequired, onEdit: PropTypes.func.isRequired, editorMode: PropTypes.string.isRequired, isSmallScreen: PropTypes.bool, toggleShareLinkDialog: PropTypes.func, openParentDirectory: PropTypes.func, showFileHistory: PropTypes.bool, toggleHistory: PropTypes.func, }; class MoreMenu extends React.PureComponent { constructor(props) { super(props); this.state = { tooltipOpen: false, dropdownOpen:false }; } tooltipToggle = () => { this.setState({ tooltipOpen: !this.state.tooltipOpen }); } dropdownToggle = () => { this.setState({ dropdownOpen:!this.state.dropdownOpen }); } downloadFile = () => { location.href = '?dl=1'; } render() { const editorMode = this.props.editorMode; const isSmall = this.props.isSmallScreen; return ( {gettext('More')} {(!this.props.readOnly && editorMode === 'rich') && {gettext('Switch to plain text editor')}} {(!this.props.readOnly && editorMode === 'plain') && {gettext('Switch to rich text editor')}} {!isSmall && this.props.showFileHistory && {gettext('History')}} {(this.props.openDialogs && editorMode === 'rich') && {gettext('Help')} } {isSmall && {gettext('Open parent directory')}} {isSmall && canGenerateShareLink && {gettext('Share')}} {(isSmall && this.props.showFileHistory) && {gettext('History')} } {isSmall && canDownloadFile && {gettext('Download')} } ); } } MoreMenu.propTypes = MoreMenuPropTypes; class MarkdownViewerToolbar extends React.Component { constructor(props) { super(props); } downloadFile = () => { location.href = '?dl=1'; } openFileViaClient = () => { const { repoID, path } = this.props.fileInfo; location.href = `seafile://openfile?repo_id=${encodeURIComponent(repoID)}&path=${encodeURIComponent(path)}`; } render() { let { contentChanged, saving, isLocked, lockedByMe } = this.props; let canPublishDraft = this.props.fileInfo.permission == 'rw'; let canCreateDraft = canPublishDraft && (!this.props.hasDraft && !this.props.isDraft && this.props.isDocs); if (this.props.editorMode === 'rich') { return (
{(this.props.hasDraft && !this.props.isDraft) &&
{gettext('This file is in draft stage.')} {gettext('View Draft')}
}
{canCreateDraft && } {this.props.isDraft &&
{canPublishDraft && }
} {(seafileCollabServer && this.props.collabUsers.length > 0) && } {(canLockUnlockFile && !isLocked) && } {(canLockUnlockFile && lockedByMe) && } {canGenerateShareLink && } {saving ? : } {canDownloadFile && ( )} {this.props.fileInfo.permission == 'rw' && }
{saving ? : }
); } else if (this.props.editorMode === 'plain') { return (
{(seafileCollabServer && this.props.collabUsers.length > 0) && } { saving ? : }
{saving ? : }
); } } } MarkdownViewerToolbar.propTypes = propTypes; export default MarkdownViewerToolbar;