From 96c678c870cbae16b21246ef48c4b624b79654fe Mon Sep 17 00:00:00 2001 From: Michael An <1822852997@qq.com> Date: Sun, 5 May 2019 12:05:29 +0800 Subject: [PATCH 1/3] add lock button and adjust sequence --- .../toolbar/markdown-viewer-toolbar.js | 21 +++++++++++++++---- frontend/src/markdown-editor.js | 20 +++++++++++++++++- seahub/templates/view_file_markdown.html | 3 +++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/toolbar/markdown-viewer-toolbar.js b/frontend/src/components/toolbar/markdown-viewer-toolbar.js index 221e864c0c..bc3cfc50d6 100644 --- a/frontend/src/components/toolbar/markdown-viewer-toolbar.js +++ b/frontend/src/components/toolbar/markdown-viewer-toolbar.js @@ -1,10 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { gettext, canGenerateShareLink } from '../../utils/constants'; +import { gettext, canGenerateShareLink, isPro, mediaUrl } from '../../utils/constants'; import { IconButton, ButtonGroup, CollabUsersButton } from '@seafile/seafile-editor/dist/components/topbarcomponent/editorToolBar'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Tooltip } from 'reactstrap'; import FileInfo from '@seafile/seafile-editor/dist/components/topbarcomponent/file-info'; +const { canLockUnlockFile } = window.app.pageOptions; const { seafileCollabServer } = window.app.config; const propTypes = { @@ -27,6 +28,9 @@ const propTypes = { 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 = { @@ -98,7 +102,7 @@ class MarkdownViewerToolbar extends React.Component { } render() { - let { contentChanged, saving } = this.props; + 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); @@ -111,6 +115,9 @@ class MarkdownViewerToolbar extends React.Component { editorUtilities={this.props.editorUtilities} fileInfo={this.props.fileInfo} showDraftSaved={this.props.showDraftSaved} + isLocked={this.props.isLocked} + isPro={isPro} mediaUrl={mediaUrl} + isStarred={this.props.fileInfo.isStarred} /> {(this.props.hasDraft && !this.props.isDraft) &&
@@ -141,12 +148,18 @@ class MarkdownViewerToolbar extends React.Component { /> } + + {(canLockUnlockFile && !isLocked) && + + } + {(canLockUnlockFile && lockedByMe) && + + } {canGenerateShareLink && } - { this.props.showFileHistory && diff --git a/frontend/src/markdown-editor.js b/frontend/src/markdown-editor.js index d0b32cd1e3..c736c7f158 100644 --- a/frontend/src/markdown-editor.js +++ b/frontend/src/markdown-editor.js @@ -18,7 +18,7 @@ import './css/markdown-viewer/markdown-editor.css'; const CryptoJS = require('crypto-js'); const URL = require('url-parse'); -const { repoID, repoName, filePath, fileName, mode, draftID, isDraft, hasDraft } = window.app.pageOptions; +const { repoID, repoName, filePath, fileName, mode, draftID, isDraft, hasDraft, isLocked, lockedByMe } = window.app.pageOptions; const { siteRoot, serviceUrl, seafileCollabServer } = window.app.config; const userInfo = window.app.userInfo; const userName = userInfo.username; @@ -292,6 +292,8 @@ class MarkdownEditor extends React.Component { readOnly: true, contentChanged: false, saving: false, + isLocked: isLocked, + lockedByMe: lockedByMe, }; if (this.state.collabServer) { @@ -305,6 +307,19 @@ class MarkdownEditor extends React.Component { } } + toggleLockFile = () => { + const { repoID, path } = this.state.fileInfo; + if (this.state.isLocked) { + seafileAPI.unlockfile(repoID, path).then((res) => { + this.setState({ isLocked: false, lockedByMe: false }); + }); + } else { + seafileAPI.lockfile(repoID, path).then((res) => { + this.setState({ isLocked: true, lockedByMe: true }); + }); + } + } + emitSwitchEditor = (is_editing=false) => { if (userInfo && this.state.collabServer) { const { repoID, path } = this.state.fileInfo; @@ -690,6 +705,9 @@ class MarkdownEditor extends React.Component { contentChanged={this.state.contentChanged} saving={this.state.saving} showDraftSaved={this.state.showDraftSaved} + isLocked={this.state.isLocked} + lockedByMe={this.state.lockedByMe} + toggleLockFile={this.toggleLockFile} /> Date: Wed, 8 May 2019 16:11:36 +0800 Subject: [PATCH 2/3] update --- frontend/src/components/toolbar/markdown-viewer-toolbar.js | 3 +-- frontend/src/utils/constants.js | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/toolbar/markdown-viewer-toolbar.js b/frontend/src/components/toolbar/markdown-viewer-toolbar.js index bc3cfc50d6..098e4c9fb3 100644 --- a/frontend/src/components/toolbar/markdown-viewer-toolbar.js +++ b/frontend/src/components/toolbar/markdown-viewer-toolbar.js @@ -1,11 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { gettext, canGenerateShareLink, isPro, mediaUrl } from '../../utils/constants'; +import { gettext, canGenerateShareLink, isPro, mediaUrl, canLockUnlockFile } from '../../utils/constants'; import { IconButton, ButtonGroup, CollabUsersButton } from '@seafile/seafile-editor/dist/components/topbarcomponent/editorToolBar'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Tooltip } from 'reactstrap'; import FileInfo from '@seafile/seafile-editor/dist/components/topbarcomponent/file-info'; -const { canLockUnlockFile } = window.app.pageOptions; const { seafileCollabServer } = window.app.config; const propTypes = { diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js index 963bb6dd2f..f8fcc452bf 100644 --- a/frontend/src/utils/constants.js +++ b/frontend/src/utils/constants.js @@ -48,6 +48,7 @@ export const thumbnailSizeForOriginal = window.app.pageOptions.thumbnailSizeForO export const repoPasswordMinLength = window.app.pageOptions.repoPasswordMinLength; export const canAddPublicRepo = window.app.pageOptions.canAddPublicRepo; export const canInvitePeople = window.app.pageOptions.canInvitePeople; +export const canLockUnlockFile = window.app.pageOptions.canLockUnlockFile; export const curNoteMsg = window.app.pageOptions.curNoteMsg; export const curNoteID = window.app.pageOptions.curNoteID; From 490989718a9ea74caf5eeaf4322c9330e45ef20b Mon Sep 17 00:00:00 2001 From: Michael An <1822852997@qq.com> Date: Wed, 8 May 2019 17:59:26 +0800 Subject: [PATCH 3/3] update --- frontend/src/components/toolbar/markdown-viewer-toolbar.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/toolbar/markdown-viewer-toolbar.js b/frontend/src/components/toolbar/markdown-viewer-toolbar.js index 098e4c9fb3..44858c2586 100644 --- a/frontend/src/components/toolbar/markdown-viewer-toolbar.js +++ b/frontend/src/components/toolbar/markdown-viewer-toolbar.js @@ -114,8 +114,9 @@ class MarkdownViewerToolbar extends React.Component { editorUtilities={this.props.editorUtilities} fileInfo={this.props.fileInfo} showDraftSaved={this.props.showDraftSaved} - isLocked={this.props.isLocked} - isPro={isPro} mediaUrl={mediaUrl} + isLocked={isLocked} + isPro={isPro} + mediaUrl={mediaUrl} isStarred={this.props.fileInfo.isStarred} /> {(this.props.hasDraft && !this.props.isDraft) &&