mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-17 07:41:26 +00:00
Merge branch '6.3'
Conflicts: frontend/build/frontend/js/main.js frontend/build/frontend/js/main.js.map frontend/build/frontend/js/wiki.js frontend/build/frontend/js/wiki.js.map frontend/src/components/constance.js frontend/src/pages/wiki/main-panel.js frontend/src/pages/wiki/side-panel.js frontend/src/wiki.js
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
let slug, repoID, serviceUrl, initialFilePath;
|
||||
|
||||
export const dirPath = '/';
|
||||
export const gettext = window.gettext;
|
||||
@@ -10,12 +9,10 @@ export const mediaUrl = window.app.config.mediaUrl;
|
||||
export const siteTitle = window.app.config.siteTitle;
|
||||
export const logoWidth = window.app.config.logoWidth;
|
||||
export const logoHeight = window.app.config.logoHeight;
|
||||
export const isPro = window.app.config.isPro === "True";
|
||||
|
||||
if (window.wiki) {
|
||||
slug = window.wiki.config.slug;
|
||||
repoID = window.wiki.config.repoId;
|
||||
serviceUrl = window.wiki.config.serviceUrl;
|
||||
initialFilePath = window.wiki.config.initial_file_path;
|
||||
}
|
||||
|
||||
export { slug, repoID, serviceUrl, initialFilePath }
|
||||
export const slug = window.wiki ? window.wiki.config.slug : '';
|
||||
export const repoID = window.wiki ? window.wiki.config.repoId : '';
|
||||
export const serviceUrl = window.wiki ? window.wiki.config.serviceUrl : '';
|
||||
export const initialFilePath = window.wiki ? window.wiki.config.initial_file_path : '';
|
||||
export const permission = window.wiki ? window.wiki.config.permission : '';
|
||||
|
@@ -6,6 +6,8 @@ import WikiOutline from './wiki-outline';
|
||||
|
||||
var URL = require('url-parse');
|
||||
|
||||
const gettext = window.gettext;
|
||||
|
||||
require('@seafile/seafile-editor/src/lib/code-hight-package');
|
||||
|
||||
const contentClass = "wiki-md-viewer-rendered-content";
|
||||
@@ -181,7 +183,7 @@ class MarkdownViewer extends React.Component {
|
||||
renderingContent={this.state.renderingContent} html={this.state.html}
|
||||
onLinkClick={this.props.onLinkClick}
|
||||
/>
|
||||
<p id="wiki-page-last-modified">Last modified by {this.props.latestContributor}, <span>{this.props.lastModified}</span></p>
|
||||
<p id="wiki-page-last-modified">{gettext("Last modified by")} {this.props.latestContributor}, <span>{this.props.lastModified}</span></p>
|
||||
</div>
|
||||
<div className="markdown-outline">
|
||||
<WikiOutline
|
||||
|
@@ -59,7 +59,6 @@ class Rename extends React.Component {
|
||||
|
||||
render() {
|
||||
let type = this.props.currentNode.type;
|
||||
let preName = this.props.currentNode.name;
|
||||
return (
|
||||
<Modal isOpen={true} toggle={this.toggle}>
|
||||
<ModalHeader toggle={this.toggle}>{type === 'file' ? gettext("Rename File") : gettext("Rename Folder") }</ModalHeader>
|
||||
|
@@ -1,101 +1,24 @@
|
||||
import React from 'react'
|
||||
import Delete from './menu-dialog/delete-dialog';
|
||||
import CreateFlieFolder from './menu-dialog/create-fileforder-dialog';
|
||||
import Rename from './menu-dialog/rename-dialog';
|
||||
|
||||
const gettext = window.gettext;
|
||||
|
||||
class NodeMenu extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
showDelete: false,
|
||||
showAddFileFolder: false,
|
||||
showRename: false,
|
||||
isFile: false
|
||||
};
|
||||
}
|
||||
|
||||
toggleDelete = () => {
|
||||
this.setState({showDelete: !this.state.showDelete});
|
||||
this.props.onHideContextMenu();
|
||||
}
|
||||
|
||||
|
||||
toggleAddFileFolder = (ev, flag) => {
|
||||
if(flag){
|
||||
this.setState({
|
||||
showAddFileFolder: !this.state.showAddFileFolder,
|
||||
isFile: true
|
||||
});
|
||||
} else {
|
||||
this.setState({
|
||||
showAddFileFolder: !this.state.showAddFileFolder,
|
||||
isFile: false
|
||||
})
|
||||
}
|
||||
this.props.onHideContextMenu();
|
||||
this.props.toggleAddFileFolder(flag);
|
||||
}
|
||||
|
||||
|
||||
toggleRename = () => {
|
||||
this.setState({showRename: !this.state.showRename});
|
||||
this.props.onHideContextMenu();
|
||||
this.props.toggleRename();
|
||||
}
|
||||
|
||||
onDelete = () => {
|
||||
this.setState({showDelete: !this.state.showDelete});
|
||||
this.props.onDeleteNode();
|
||||
}
|
||||
|
||||
deleteCancel = () => {
|
||||
this.setState({showDelete: !this.state.showDelete});
|
||||
}
|
||||
|
||||
onAddFile = (filePath) => {
|
||||
this.setState({
|
||||
showAddFileFolder: !this.state.showAddFileFolder,
|
||||
isFile: false
|
||||
});
|
||||
this.props.onAddFileNode(filePath);
|
||||
}
|
||||
|
||||
addFileCancel = () => {
|
||||
this.setState({
|
||||
showAddFileFolder: !this.state.showAddFileFolder,
|
||||
isFile: false
|
||||
});
|
||||
}
|
||||
|
||||
onAddFolder = (dirPath) => {
|
||||
this.setState({
|
||||
showAddFileFolder: !this.state.showAddFileFolder,
|
||||
isFile: false
|
||||
});
|
||||
this.props.onAddFolderNode(dirPath);
|
||||
}
|
||||
|
||||
addFolderCancel = () => {
|
||||
this.setState({
|
||||
showAddFileFolder: !this.state.showAddFileFolder,
|
||||
isFile: false
|
||||
});
|
||||
}
|
||||
|
||||
onRename = (newName) => {
|
||||
this.setState({showRename: !this.state.showRename});
|
||||
this.props.onRenameNode(newName);
|
||||
}
|
||||
|
||||
renameCancel = () => {
|
||||
this.setState({showRename: !this.state.showRename});
|
||||
|
||||
toggleDelete = () => {
|
||||
this.props.toggleDelete();
|
||||
}
|
||||
|
||||
renderNodeMenu() {
|
||||
let style = null;
|
||||
let position = this.props.menuPosition;
|
||||
if (this.props.isShowMenu) {
|
||||
style = {position: "fixed",left: position.left, top: position.top, display: 'block'};
|
||||
}
|
||||
let style = {position: "fixed",left: position.left, top: position.top, display: 'block'};
|
||||
|
||||
if (this.props.currentNode.type === "dir") {
|
||||
|
||||
@@ -134,30 +57,6 @@ class NodeMenu extends React.Component {
|
||||
return (
|
||||
<div className="node-menu-module">
|
||||
{this.renderNodeMenu()}
|
||||
{this.state.showDelete &&
|
||||
<Delete
|
||||
currentNode={this.props.currentNode}
|
||||
handleSubmit={this.onDelete}
|
||||
toggleCancel={this.deleteCancel}
|
||||
/>
|
||||
}
|
||||
{this.state.showAddFileFolder &&
|
||||
<CreateFlieFolder
|
||||
isFile={this.state.isFile}
|
||||
currentNode={this.props.currentNode}
|
||||
onAddFolder={this.onAddFolder}
|
||||
addFolderCancel={this.addFolderCancel}
|
||||
onAddFile={this.onAddFile}
|
||||
addFileCancel={this.addFileCancel}
|
||||
/>
|
||||
}
|
||||
{this.state.showRename &&
|
||||
<Rename
|
||||
currentNode={this.props.currentNode}
|
||||
onRename={this.onRename}
|
||||
toggleCancel={this.renameCancel}
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { serviceUrl } from '../constance';
|
||||
class TreeDirList extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
@@ -18,7 +18,7 @@ class TreeDirList extends React.Component {
|
||||
return (
|
||||
<tr className='row' onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
|
||||
<td className="dirent-icon" style={{width: "5%"}}>
|
||||
<img src={node.type === "dir" ? "/media/img/folder-192.png" : "/media/img/file/192/txt.png"}></img>
|
||||
<img src={node.type === "dir" ? serviceUrl + "/media/img/folder-192.png" : serviceUrl + "/media/img/file/192/txt.png"}></img>
|
||||
</td>
|
||||
<td style={{width: "60%"}}>
|
||||
<a className="custom-link" onClick={this.onMainNodeClick}>{node.name}</a>
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import MenuControl from '../menu-component/node-menu-control'
|
||||
import MenuControl from '../menu-component/node-menu-control';
|
||||
import { permission } from '../constance';
|
||||
|
||||
function sortByType(a, b) {
|
||||
if (a.type == "dir" && b.type != "dir") {
|
||||
@@ -110,7 +111,6 @@ class TreeNodeView extends React.Component {
|
||||
paddingLeft={this.props.paddingLeft}
|
||||
treeView={this.props.treeView}
|
||||
isNodeItemFrezee={this.props.isNodeItemFrezee}
|
||||
permission={this.props.permission}
|
||||
currentFilePath={this.props.currentFilePath}
|
||||
onDirCollapse={this.props.onDirCollapse}
|
||||
/>
|
||||
@@ -124,7 +124,7 @@ class TreeNodeView extends React.Component {
|
||||
}
|
||||
|
||||
renderMenuController() {
|
||||
if (this.props.permission === "rw") {
|
||||
if (permission === "True") {
|
||||
let isShow = (this.props.node.path === this.props.currentFilePath);
|
||||
return (
|
||||
<div className="right-icon">
|
||||
|
@@ -1,5 +1,9 @@
|
||||
import Node from './node';
|
||||
import moment from 'moment';
|
||||
import { bytesToSize } from '../utils';
|
||||
|
||||
const lang = window.app.config.lang;
|
||||
moment.locale(lang)
|
||||
|
||||
class Tree {
|
||||
|
||||
@@ -90,8 +94,7 @@ class Tree {
|
||||
return findNode;
|
||||
}
|
||||
|
||||
setNodeToActivated(node) {
|
||||
this.setTreeToUnActivated();
|
||||
expandNode(node) {
|
||||
let treeNode = this.findNodeFromTree(node);
|
||||
if (treeNode) {
|
||||
treeNode.isExpanded = true;
|
||||
@@ -104,7 +107,16 @@ class Tree {
|
||||
return false;
|
||||
}
|
||||
|
||||
setTreeToUnActivated() {
|
||||
collapseNode(node) {
|
||||
let treeNode = this.findNodeFromTree(node);
|
||||
if (treeNode) {
|
||||
treeNode.isExpanded = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
resetTreeState() {
|
||||
function cb(treeNode) {
|
||||
treeNode.isExpanded = false;
|
||||
return false;
|
||||
@@ -172,7 +184,7 @@ class Tree {
|
||||
var node = new Node({
|
||||
name: model.name,
|
||||
type: model.type,
|
||||
size: model.size,
|
||||
size: bytesToSize(model.size),
|
||||
last_update_time: moment.unix(model.last_update_time).fromNow(),
|
||||
isExpanded: false
|
||||
});
|
||||
@@ -200,7 +212,7 @@ class Tree {
|
||||
let node = new Node({
|
||||
name: nodeObj.name,
|
||||
type: nodeObj.type,
|
||||
size: nodeObj.size,
|
||||
size: bytesToSize(nodeObj.size),
|
||||
last_update_time: moment.unix(nodeObj.last_update_time).fromNow(),
|
||||
isExpanded: false
|
||||
});
|
||||
@@ -226,7 +238,7 @@ class Tree {
|
||||
var node = new Node({
|
||||
name: node.name,
|
||||
type: node.type,
|
||||
size: node.size,
|
||||
size: bytesToSize(node.size),
|
||||
last_update_time: moment.unix(node.last_update_time).fromNow(),
|
||||
isExpanded: false
|
||||
});
|
||||
|
Reference in New Issue
Block a user