mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 23:48:47 +00:00
add enable_wiki
This commit is contained in:
committed by
shanshuirenjia
parent
0de207a3b3
commit
7246dad55d
@@ -39,7 +39,7 @@ const ShareAdminLibrariesWrapper = MainContentWrapper(ShareAdminLibraries);
|
||||
const ShareAdminFoldersWrapper = MainContentWrapper(ShareAdminFolders);
|
||||
const ShareAdminShareLinksWrapper = MainContentWrapper(ShareAdminShareLinks);
|
||||
const ShareAdminUploadLinksWrapper = MainContentWrapper(ShareAdminUploadLinks);
|
||||
const Wikiswrapper = MainContentWrapper(Wikis);
|
||||
const WikisWrapper = MainContentWrapper(Wikis);
|
||||
|
||||
class App extends Component {
|
||||
|
||||
@@ -144,7 +144,7 @@ class App extends Component {
|
||||
<DirView path={siteRoot + 'library/:repoID/*'} onMenuClick={this.onShowSidePanel} updateCurrentTab={this.updateCurrentTab}/>
|
||||
<Groups path={siteRoot + 'groups'} onShowSidePanel={this.onShowSidePanel} onSearchedClick={this.onSearchedClick}/>
|
||||
<Group path={siteRoot + 'group/:groupID'} onShowSidePanel={this.onShowSidePanel} onSearchedClick={this.onSearchedClick}/>
|
||||
<Wikiswrapper path={siteRoot + 'wikis'} onShowSidePanel={this.onShowSidePanel} onSearchedClick={this.onSearchedClick}/>
|
||||
<WikisWrapper path={siteRoot + 'wikis'} onShowSidePanel={this.onShowSidePanel} onSearchedClick={this.onSearchedClick}/>
|
||||
</Router>
|
||||
</MainPanel>
|
||||
</div>
|
||||
|
@@ -8,7 +8,7 @@ const propTypes = {
|
||||
addWiki: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
class WikiDelete extends React.Component {
|
||||
class NewWikiDialog extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -64,6 +64,6 @@ class WikiDelete extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
WikiDelete.propTypes = propTypes;
|
||||
NewWikiDialog.propTypes = propTypes;
|
||||
|
||||
export default WikiDelete;
|
||||
export default NewWikiDialog;
|
@@ -8,7 +8,7 @@ const propTypes = {
|
||||
handleSubmit: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
class WikiDelete extends React.Component {
|
||||
class WikiDeleteDialog extends React.Component {
|
||||
|
||||
toggle = () => {
|
||||
this.props.toggleCancel();
|
||||
@@ -30,6 +30,6 @@ class WikiDelete extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
WikiDelete.propTypes = propTypes;
|
||||
WikiDeleteDialog.propTypes = propTypes;
|
||||
|
||||
export default WikiDelete;
|
||||
export default WikiDeleteDialog;
|
@@ -10,7 +10,7 @@ const propTypes = {
|
||||
addWiki: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
class WikiSelect extends React.Component {
|
||||
class WikiSelectDialog extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -84,6 +84,6 @@ class WikiSelect extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
WikiSelect.propTypes = propTypes;
|
||||
WikiSelectDialog.propTypes = propTypes;
|
||||
|
||||
export default WikiSelect;
|
||||
export default WikiSelectDialog;
|
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Link } from '@reach/router';
|
||||
import { gettext, siteRoot } from '../utils/constants';
|
||||
import { gettext, siteRoot, enableWiki } from '../utils/constants';
|
||||
import { seafileAPI } from '../utils/seafile-api';
|
||||
import { Badge } from 'reactstrap';
|
||||
|
||||
@@ -170,12 +170,14 @@ class MainSideNav extends React.Component {
|
||||
<span className="nav-text">{gettext('Acitivities')}</span>
|
||||
</Link>
|
||||
</li>
|
||||
<li className='nav-item'>
|
||||
{enableWiki &&
|
||||
<li className="nav-item">
|
||||
<Link className={`nav-link ellipsis ${this.getActiveClass('wikis')}`} to={siteRoot + 'wikis/'} title={gettext('Wikis')} onClick={() => this.tabItemClick('wikis')}>
|
||||
<span className="sf2-icon-wiki-view" aria-hidden="true"></span>
|
||||
{gettext('Wikis')}
|
||||
</Link>
|
||||
</li>
|
||||
}
|
||||
<li className="nav-item">
|
||||
<Link className={`nav-link ellipsis ${this.getActiveClass('linked-devices')}`} to={siteRoot + 'linked-devices/'} title={gettext('Linked Devices')} onClick={() => this.tabItemClick('linked-devices')}>
|
||||
<span className="sf2-icon-monitor" aria-hidden="true"></span>
|
||||
|
@@ -4,7 +4,7 @@ import { gettext } from '../../utils/constants';
|
||||
|
||||
const propTypes = {
|
||||
isShowWikiAdd: PropTypes.bool.isRequired,
|
||||
addPosition: PropTypes.object.isRequired,
|
||||
position: PropTypes.object.isRequired,
|
||||
onSelectToggle: PropTypes.func.isRequired,
|
||||
onCreateToggle: PropTypes.func.isRequired,
|
||||
};
|
||||
@@ -13,9 +13,9 @@ class WikiAdd extends React.Component {
|
||||
|
||||
render() {
|
||||
let style = {};
|
||||
let {isShowWikiAdd, addPosition} = this.props;
|
||||
let {isShowWikiAdd, position} = this.props;
|
||||
if (isShowWikiAdd) {
|
||||
style = {position: 'fixed', top: addPosition.top, left: addPosition.left, display: 'block'};
|
||||
style = {position: 'fixed', top: position.top, left: position.left, display: 'block'};
|
||||
}
|
||||
return (
|
||||
<ul className="dropdown-menu" style={style}>
|
||||
|
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { gettext } from '../../utils/constants';
|
||||
|
||||
const propTypes = {
|
||||
menuPosition: PropTypes.object.isRequired,
|
||||
position: PropTypes.object.isRequired,
|
||||
onRenameToggle: PropTypes.func.isRequired,
|
||||
onDeleteToggle: PropTypes.func.isRequired,
|
||||
};
|
||||
@@ -11,8 +11,8 @@ const propTypes = {
|
||||
class WikiMenu extends React.Component {
|
||||
|
||||
render() {
|
||||
let menuPosition = this.props.menuPosition;
|
||||
let style = {position: 'fixed', top: menuPosition.top, left: menuPosition.left, display: 'block'};
|
||||
let position = this.props.position;
|
||||
let style = {position: 'fixed', top: position.top, left: position.left, display: 'block'};
|
||||
|
||||
return (
|
||||
<ul className="dropdown-menu" style={style}>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import React, { Component } from 'react';
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { seafileAPI } from '../../utils/seafile-api';
|
||||
import { gettext, siteRoot, loginUrl } from '../../utils/constants';
|
||||
@@ -9,9 +9,10 @@ import MenuControl from '../../components/menu-control';
|
||||
import WikiAdd from './wiki-add';
|
||||
import WikiMenu from './wiki-menu';
|
||||
import WikiRename from './wiki-rename';
|
||||
import WikiDelete from './wiki-delete';
|
||||
import WikiSelect from './wiki-select';
|
||||
import WikiCreate from './wiki-create';
|
||||
import NewWikiDialog from '../../components/dialog/new-wiki-dialog';
|
||||
import WikiDeleteDialog from '../../components/dialog/wiki-delete-dialog';
|
||||
import WikiSelectDialog from '../../components/dialog/wiki-select-dialog';
|
||||
import ModalPortal from '../../components/modal-portal';
|
||||
|
||||
|
||||
const itempropTypes = {
|
||||
@@ -25,7 +26,7 @@ class Item extends Component {
|
||||
super(props);
|
||||
this.state = {
|
||||
isShowWikiMenu: false,
|
||||
menuPosition: {top:'', left: ''},
|
||||
position: {top:'', left: ''},
|
||||
isItemFreezed: false,
|
||||
isShowDeleteDialog: false,
|
||||
isShowMenuControl: false,
|
||||
@@ -59,7 +60,7 @@ class Item extends Component {
|
||||
let position = {top: top, left: left};
|
||||
this.setState({
|
||||
isShowWikiMenu: true,
|
||||
menuPosition: position,
|
||||
position: position,
|
||||
isItemFreezed: true,
|
||||
});
|
||||
}
|
||||
@@ -149,6 +150,7 @@ class Item extends Component {
|
||||
let userProfileURL = `${siteRoot}profile/${encodeURIComponent(wiki.owner)}/`;
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<tr className={this.state.highlight} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
|
||||
<td>
|
||||
{this.state.isRenameing ?
|
||||
@@ -165,19 +167,22 @@ class Item extends Component {
|
||||
/>
|
||||
{this.state.isShowWikiMenu &&
|
||||
<WikiMenu
|
||||
menuPosition={this.state.menuPosition}
|
||||
position={this.state.position}
|
||||
onRenameToggle={this.onRenameToggle}
|
||||
onDeleteToggle={this.onDeleteToggle}
|
||||
/>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
{this.state.isShowDeleteDialog &&
|
||||
<WikiDelete
|
||||
<ModalPortal>
|
||||
<WikiDeleteDialog
|
||||
toggleCancel={this.onDeleteToggle}
|
||||
handleSubmit={this.deleteWiki}
|
||||
/>
|
||||
</ModalPortal>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -237,7 +242,7 @@ class Wikis extends Component {
|
||||
errorMsg: '',
|
||||
wikis: [],
|
||||
isShowWikiAdd: false,
|
||||
addPosition: {top:'', left: ''},
|
||||
position: {top:'', left: ''},
|
||||
isShowSelectDialog: false,
|
||||
isShowCreateDialog: false,
|
||||
};
|
||||
@@ -248,10 +253,6 @@ class Wikis extends Component {
|
||||
this.getWikis();
|
||||
}
|
||||
|
||||
componentWillReceiveProps() {
|
||||
this.getWikis();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
document.removeEventListener('click', this.onHideWikiAdd);
|
||||
}
|
||||
@@ -302,7 +303,7 @@ class Wikis extends Component {
|
||||
let position = {top: top, left: left};
|
||||
this.setState({
|
||||
isShowWikiAdd: true,
|
||||
addPosition: position,
|
||||
position: position,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -374,6 +375,7 @@ class Wikis extends Component {
|
||||
|
||||
render() {
|
||||
return (
|
||||
<Fragment>
|
||||
<div className="main-panel-center">
|
||||
<div className="cur-view-container" id="wikis">
|
||||
<div className="cur-view-path">
|
||||
@@ -386,23 +388,11 @@ class Wikis extends Component {
|
||||
{this.state.isShowWikiAdd &&
|
||||
<WikiAdd
|
||||
isShowWikiAdd={this.state.isShowWikiAdd}
|
||||
addPosition={this.state.addPosition}
|
||||
position={this.state.position}
|
||||
onSelectToggle={this.onSelectToggle}
|
||||
onCreateToggle={this.onCreateToggle}
|
||||
/>
|
||||
}
|
||||
{this.state.isShowCreateDialog &&
|
||||
<WikiCreate
|
||||
toggleCancel={this.onCreateToggle}
|
||||
addWiki={this.addWiki}
|
||||
/>
|
||||
}
|
||||
{this.state.isShowSelectDialog &&
|
||||
<WikiSelect
|
||||
toggleCancel={this.onSelectToggle}
|
||||
addWiki={this.addWiki}
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
<div className="cur-view-content">
|
||||
{(this.state.loading || this.state.wikis.length !== 0) &&
|
||||
@@ -421,6 +411,23 @@ class Wikis extends Component {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{this.state.isShowCreateDialog &&
|
||||
<ModalPortal>
|
||||
<NewWikiDialog
|
||||
toggleCancel={this.onCreateToggle}
|
||||
addWiki={this.addWiki}
|
||||
/>
|
||||
</ModalPortal>
|
||||
}
|
||||
{this.state.isShowSelectDialog &&
|
||||
<ModalPortal>
|
||||
<WikiSelectDialog
|
||||
toggleCancel={this.onSelectToggle}
|
||||
addWiki={this.addWiki}
|
||||
/>
|
||||
</ModalPortal>
|
||||
}
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@ export const enableRepoSnapshotLabel = window.app.pageOptions.enableRepoSnapshot
|
||||
export const shareLinkExpireDaysMin = window.app.pageOptions.shareLinkExpireDaysMin;
|
||||
export const shareLinkExpireDaysMax = window.app.pageOptions.shareLinkExpireDaysMax;
|
||||
export const maxFileName = window.app.pageOptions.maxFileName;
|
||||
export const enableWiki = window.app.pageOptions.enableWiki;
|
||||
|
||||
// wiki
|
||||
export const slug = window.wiki ? window.wiki.config.slug : '';
|
||||
|
@@ -718,7 +718,7 @@ OTP_LOGIN_URL = '/profile/two_factor_authentication/setup/'
|
||||
TWO_FACTOR_DEVICE_REMEMBER_DAYS = 90
|
||||
|
||||
# Enable personal wiki, group wiki
|
||||
ENABLE_WIKI = False
|
||||
ENABLE_WIKI = True
|
||||
|
||||
# Enable 'repo snapshot label' feature
|
||||
ENABLE_REPO_SNAPSHOT_LABEL = False
|
||||
|
@@ -61,7 +61,8 @@
|
||||
enableRepoSnapshotLabel: {% if enable_repo_snapshot_label %} true {% else %} false {% endif %},
|
||||
shareLinkExpireDaysMin: "{{ share_link_expire_days_min }}",
|
||||
shareLinkExpireDaysMax: "{{ share_link_expire_days_max }}",
|
||||
maxFileName: "{{ max_file_name }}"
|
||||
maxFileName: "{{ max_file_name }}",
|
||||
enableWiki: {% if enable_wiki %} true {% else %} false {% endif %},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
@@ -1205,6 +1205,7 @@ def react_fake_view(request):
|
||||
|
||||
return render(request, "react_app.html", {
|
||||
'storages': get_library_storages(request),
|
||||
'enable_wiki': settings.ENABLE_WIKI,
|
||||
'enable_repo_snapshot_label': settings.ENABLE_REPO_SNAPSHOT_LABEL,
|
||||
'share_link_expire_days_min': SHARE_LINK_EXPIRE_DAYS_MIN,
|
||||
'share_link_expire_days_max': SHARE_LINK_EXPIRE_DAYS_MAX,
|
||||
|
Reference in New Issue
Block a user