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) &&