mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-06 17:33:18 +00:00
repair heighlight bug
This commit is contained in:
@@ -51,7 +51,7 @@ class WikiSelectDialog extends React.Component {
|
|||||||
return (
|
return (
|
||||||
<Modal isOpen={true}>
|
<Modal isOpen={true}>
|
||||||
<ModalHeader toggle={this.toggle}>{gettext('Choose a library as Wiki')}</ModalHeader>
|
<ModalHeader toggle={this.toggle}>{gettext('Choose a library as Wiki')}</ModalHeader>
|
||||||
<ModalBody>
|
<ModalBody className="dialog-list-container">
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@@ -9,10 +9,13 @@ import Toast from '../toast';
|
|||||||
import WikiMenu from './wiki-menu';
|
import WikiMenu from './wiki-menu';
|
||||||
import WikiRename from './wiki-rename';
|
import WikiRename from './wiki-rename';
|
||||||
|
|
||||||
const itempropTypes = {
|
const propTypes = {
|
||||||
wiki: PropTypes.object.isRequired,
|
wiki: PropTypes.object.isRequired,
|
||||||
renameWiki: PropTypes.func.isRequired,
|
renameWiki: PropTypes.func.isRequired,
|
||||||
deleteWiki: PropTypes.func.isRequired,
|
deleteWiki: PropTypes.func.isRequired,
|
||||||
|
isItemFreezed: PropTypes.bool.isRequired,
|
||||||
|
onFreezedItem: PropTypes.func.isRequired,
|
||||||
|
onUnfreezedItem: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
class WikiListItem extends Component {
|
class WikiListItem extends Component {
|
||||||
@@ -21,7 +24,6 @@ class WikiListItem extends Component {
|
|||||||
this.state = {
|
this.state = {
|
||||||
isShowWikiMenu: false,
|
isShowWikiMenu: false,
|
||||||
position: {top:'', left: ''},
|
position: {top:'', left: ''},
|
||||||
isItemFreezed: false,
|
|
||||||
isShowDeleteDialog: false,
|
isShowDeleteDialog: false,
|
||||||
isShowMenuControl: false,
|
isShowMenuControl: false,
|
||||||
isRenameing: false,
|
isRenameing: false,
|
||||||
@@ -55,19 +57,21 @@ class WikiListItem extends Component {
|
|||||||
this.setState({
|
this.setState({
|
||||||
isShowWikiMenu: true,
|
isShowWikiMenu: true,
|
||||||
position: position,
|
position: position,
|
||||||
isItemFreezed: true,
|
|
||||||
});
|
});
|
||||||
|
this.props.onFreezedItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
onHideWikiMenu = () => {
|
onHideWikiMenu = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
isShowWikiMenu: false,
|
isShowWikiMenu: false,
|
||||||
isItemFreezed: false,
|
isShowMenuControl: false,
|
||||||
|
highlight: '',
|
||||||
});
|
});
|
||||||
|
this.props.onUnfreezedItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
onMouseEnter = () => {
|
onMouseEnter = () => {
|
||||||
if (!this.state.isItemFreezed) {
|
if (!this.props.isItemFreezed) {
|
||||||
this.setState({
|
this.setState({
|
||||||
isShowMenuControl: true,
|
isShowMenuControl: true,
|
||||||
highlight: 'tr-highlight',
|
highlight: 'tr-highlight',
|
||||||
@@ -76,7 +80,7 @@ class WikiListItem extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMouseLeave = () => {
|
onMouseLeave = () => {
|
||||||
if (!this.state.isItemFreezed) {
|
if (!this.props.isItemFreezed) {
|
||||||
this.setState({
|
this.setState({
|
||||||
isShowMenuControl: false,
|
isShowMenuControl: false,
|
||||||
highlight: '',
|
highlight: '',
|
||||||
@@ -84,10 +88,12 @@ class WikiListItem extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onRenameToggle = () => {
|
onRenameToggle = (e) => {
|
||||||
|
e.nativeEvent.stopImmediatePropagation();
|
||||||
|
this.props.onFreezedItem();
|
||||||
this.setState({
|
this.setState({
|
||||||
isShowWikiMenu: false,
|
isShowWikiMenu: false,
|
||||||
isItemFreezed: true,
|
isShowMenuControl: false,
|
||||||
isRenameing: true,
|
isRenameing: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -114,10 +120,8 @@ class WikiListItem extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onRenameCancel = () => {
|
onRenameCancel = () => {
|
||||||
this.setState({
|
this.setState({isRenameing: false});
|
||||||
isRenameing: false,
|
this.props.onUnfreezedItem();
|
||||||
isItemFreezed: false,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onDeleteToggle = () => {
|
onDeleteToggle = () => {
|
||||||
@@ -146,7 +150,7 @@ class WikiListItem extends Component {
|
|||||||
return (
|
return (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<tr className={this.state.highlight} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
|
<tr className={this.state.highlight} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
|
||||||
<td>
|
<td className="name">
|
||||||
{this.state.isRenameing ?
|
{this.state.isRenameing ?
|
||||||
<WikiRename wiki={wiki} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> :
|
<WikiRename wiki={wiki} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> :
|
||||||
<a href={wiki.link}>{gettext(wiki.name)}</a>
|
<a href={wiki.link}>{gettext(wiki.name)}</a>
|
||||||
@@ -154,7 +158,7 @@ class WikiListItem extends Component {
|
|||||||
</td>
|
</td>
|
||||||
<td><a href={userProfileURL} target='_blank'>{gettext(wiki.owner_nickname)}</a></td>
|
<td><a href={userProfileURL} target='_blank'>{gettext(wiki.owner_nickname)}</a></td>
|
||||||
<td>{moment(wiki.updated_at).fromNow()}</td>
|
<td>{moment(wiki.updated_at).fromNow()}</td>
|
||||||
<td className="menu-toggle" onClick={this.onMenuToggle}>
|
<td className="menu-toggle">
|
||||||
<MenuControl
|
<MenuControl
|
||||||
isShow={this.state.isShowMenuControl}
|
isShow={this.state.isShowMenuControl}
|
||||||
onClick={this.onMenuToggle}
|
onClick={this.onMenuToggle}
|
||||||
@@ -181,6 +185,6 @@ class WikiListItem extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WikiListItem.propTypes = itempropTypes;
|
WikiListItem.propTypes = propTypes;
|
||||||
|
|
||||||
export default WikiListItem;
|
export default WikiListItem;
|
@@ -1,9 +1,9 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { gettext } from '../../utils/constants';
|
import { gettext } from '../../utils/constants';
|
||||||
import WikiListItem from './wiki-list-item';
|
import WikiListItem from './wiki-list-item';
|
||||||
|
|
||||||
const contentpropTypes = {
|
const propTypes = {
|
||||||
data: PropTypes.object.isRequired,
|
data: PropTypes.object.isRequired,
|
||||||
renameWiki: PropTypes.func.isRequired,
|
renameWiki: PropTypes.func.isRequired,
|
||||||
deleteWiki: PropTypes.func.isRequired,
|
deleteWiki: PropTypes.func.isRequired,
|
||||||
@@ -11,6 +11,21 @@ const contentpropTypes = {
|
|||||||
|
|
||||||
class WikiListView extends Component {
|
class WikiListView extends Component {
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = {
|
||||||
|
isItemFreezed: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onFreezedItem = () => {
|
||||||
|
this.setState({isItemFreezed: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
onUnfreezedItem = () => {
|
||||||
|
this.setState({isItemFreezed: false});
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let {loading, errorMsg, wikis} = this.props.data;
|
let {loading, errorMsg, wikis} = this.props.data;
|
||||||
|
|
||||||
@@ -32,9 +47,14 @@ class WikiListView extends Component {
|
|||||||
<tbody>
|
<tbody>
|
||||||
{wikis.map((wiki, index) => {
|
{wikis.map((wiki, index) => {
|
||||||
return(
|
return(
|
||||||
<WikiListItem key={index} wiki={wiki}
|
<WikiListItem
|
||||||
|
key={index}
|
||||||
|
wiki={wiki}
|
||||||
renameWiki={this.props.renameWiki}
|
renameWiki={this.props.renameWiki}
|
||||||
deleteWiki={this.props.deleteWiki}
|
deleteWiki={this.props.deleteWiki}
|
||||||
|
isItemFreezed={this.state.isItemFreezed}
|
||||||
|
onFreezedItem={this.onFreezedItem}
|
||||||
|
onUnfreezedItem={this.onUnfreezedItem}
|
||||||
/>);
|
/>);
|
||||||
})}
|
})}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -44,6 +64,6 @@ class WikiListView extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WikiListView.propTypes = contentpropTypes;
|
WikiListView.propTypes = propTypes;
|
||||||
|
|
||||||
export default WikiListView;
|
export default WikiListView;
|
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import { gettext, loginUrl } from '../../utils/constants';
|
import { gettext, loginUrl } from '../../utils/constants';
|
||||||
import WikiAdd from './wiki-add';
|
import WikiAdd from './wiki-add';
|
||||||
import Toast from '../../components/toast';
|
import toaster from '../../components/toast';
|
||||||
import ModalPortal from '../../components/modal-portal';
|
import ModalPortal from '../../components/modal-portal';
|
||||||
import NewWikiDialog from '../../components/dialog/new-wiki-dialog';
|
import NewWikiDialog from '../../components/dialog/new-wiki-dialog';
|
||||||
import WikiSelectDialog from '../../components/dialog/wiki-select-dialog';
|
import WikiSelectDialog from '../../components/dialog/wiki-select-dialog';
|
||||||
@@ -110,7 +110,7 @@ class Wikis extends Component {
|
|||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
if(error.response) {
|
if(error.response) {
|
||||||
let errorMsg = error.response.data.error_msg;
|
let errorMsg = error.response.data.error_msg;
|
||||||
Toast.error(errorMsg);
|
toaster.danger(errorMsg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -123,28 +123,25 @@ class Wikis extends Component {
|
|||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
this.setState({
|
this.setState({wikis: wikis});
|
||||||
wikis: wikis
|
|
||||||
});
|
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
if(error.response) {
|
if(error.response) {
|
||||||
let errorMsg = error.response.data.error_msg;
|
let errorMsg = error.response.data.error_msg;
|
||||||
Toast.error(errorMsg);
|
toaster.danger(errorMsg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteWiki = (wiki) => {
|
deleteWiki = (wiki) => {
|
||||||
seafileAPI.deleteWiki(wiki.slug).then(() => {
|
seafileAPI.deleteWiki(wiki.slug).then(() => {
|
||||||
this.setState({
|
let wikis = this.state.wikis.filter(item => {
|
||||||
wikis: this.state.wikis.filter(item => {
|
return item.name !== wiki.name;
|
||||||
return item.name !== wiki.name
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
|
this.setState({wikis: wikis});
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
if(error.response) {
|
if(error.response) {
|
||||||
let errorMsg = error.response.data.error_msg;
|
let errorMsg = error.response.data.error_msg;
|
||||||
Toast.error(errorMsg);
|
toaster.danger(errorMsg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -155,9 +152,11 @@ class Wikis extends Component {
|
|||||||
<div className="main-panel-center">
|
<div className="main-panel-center">
|
||||||
<div className="cur-view-container" id="wikis">
|
<div className="cur-view-container" id="wikis">
|
||||||
<div className="cur-view-path">
|
<div className="cur-view-path">
|
||||||
<h3 className="sf-heading">{gettext('Wikis')}</h3>
|
<div className="path-container">
|
||||||
<div style={{float:'right'}} className="operation">
|
<h3 className="sf-heading">{gettext('Wikis')}</h3>
|
||||||
<button className="btn btn-secondary operation-item" onClick={this.onAddMenuToggle}>
|
</div>
|
||||||
|
<div className="path-toolbar">
|
||||||
|
<button className="btn btn-secondary operation-item" style={{marginTop: '-0.25rem'}} onClick={this.onAddMenuToggle}>
|
||||||
<i className="fa fa-plus-square op-icon"></i>
|
<i className="fa fa-plus-square op-icon"></i>
|
||||||
{gettext('Add Wiki')}
|
{gettext('Add Wiki')}
|
||||||
</button>
|
</button>
|
||||||
|
@@ -163,6 +163,11 @@ ul,ol,li {
|
|||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dialog-list-container { /*for content is list dialog*/
|
||||||
|
height: 20rem;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* UI Widget */
|
/* UI Widget */
|
||||||
|
|
||||||
/**** caret ****/
|
/**** caret ****/
|
||||||
@@ -812,6 +817,10 @@ table .star .empty {
|
|||||||
color: #d0d0d0;
|
color: #d0d0d0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table .name {
|
||||||
|
line-height: 1.5rem; /*for wiki height*/
|
||||||
|
}
|
||||||
|
|
||||||
table .rename-container input {
|
table .rename-container input {
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
padding: 2px 3px;
|
padding: 2px 3px;
|
||||||
|
Reference in New Issue
Block a user