mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-16 23:29:49 +00:00
12.0 add buttons animation (#6167)
* add library container animation * change animation and style
This commit is contained in:
@@ -4,6 +4,7 @@ import listener from '../context-menu/globalEventListener';
|
|||||||
import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';
|
import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';
|
||||||
import { gettext } from '../../utils/constants';
|
import { gettext } from '../../utils/constants';
|
||||||
import { Utils } from '../../utils/utils';
|
import { Utils } from '../../utils/utils';
|
||||||
|
import ModalPortal from '../modal-portal';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
tagName: PropTypes.string,
|
tagName: PropTypes.string,
|
||||||
@@ -158,17 +159,19 @@ class ItemDropdownMenu extends React.Component {
|
|||||||
onKeyDown={this.onDropdownToggleKeyDown}
|
onKeyDown={this.onDropdownToggleKeyDown}
|
||||||
// onClick={this.onDropdownToggleClick}
|
// onClick={this.onDropdownToggleClick}
|
||||||
/>
|
/>
|
||||||
<DropdownMenu>
|
<ModalPortal>
|
||||||
{menuList.map((menuItem, index) => {
|
<DropdownMenu>
|
||||||
if (menuItem === 'Divider') {
|
{menuList.map((menuItem, index) => {
|
||||||
return <DropdownItem key={index} divider />;
|
if (menuItem === 'Divider') {
|
||||||
} else {
|
return <DropdownItem key={index} divider />;
|
||||||
return (
|
} else {
|
||||||
<DropdownItem key={index} data-toggle={menuItem.key} onClick={this.onMenuItemClick} onKeyDown={this.onMenuItemKeyDown}>{menuItem.value}</DropdownItem>
|
return (
|
||||||
);
|
<DropdownItem key={index} data-toggle={menuItem.key} onClick={this.onMenuItemClick} onKeyDown={this.onMenuItemKeyDown}>{menuItem.value}</DropdownItem>
|
||||||
}
|
);
|
||||||
})}
|
}
|
||||||
</DropdownMenu>
|
})}
|
||||||
|
</DropdownMenu>
|
||||||
|
</ModalPortal>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -336,7 +336,7 @@ class MultipleDirOperationToolbar extends React.Component {
|
|||||||
<Fragment>
|
<Fragment>
|
||||||
<div className="selected-dirents-toolbar">
|
<div className="selected-dirents-toolbar">
|
||||||
{selectedLen > 0 &&
|
{selectedLen > 0 &&
|
||||||
<span className="cur-view-path-btn px-2" onClick={this.props.unSelectDirent}>
|
<span className="cur-view-path-btn px-2" style={{ marginLeft: '-10px' }} onClick={this.props.unSelectDirent}>
|
||||||
<span className="sf3-font-x-01 sf3-font mr-2" aria-label={gettext('Unselect')} title={gettext('Unselect')}></span>
|
<span className="sf3-font-x-01 sf3-font mr-2" aria-label={gettext('Unselect')} title={gettext('Unselect')}></span>
|
||||||
<span>{selectedLen}{' '}{gettext('selected')}</span>
|
<span>{selectedLen}{' '}{gettext('selected')}</span>
|
||||||
</span>
|
</span>
|
||||||
|
@@ -129,6 +129,20 @@
|
|||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cur-view-path:after {
|
||||||
|
position: absolute;
|
||||||
|
left: 16px;
|
||||||
|
right: 16px;
|
||||||
|
bottom: 0;
|
||||||
|
content: '';
|
||||||
|
}
|
||||||
|
|
||||||
|
.cur-view-path {
|
||||||
|
transition-property: all;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
.cur-view-content {
|
.cur-view-content {
|
||||||
padding: 0rem 1rem;
|
padding: 0rem 1rem;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
@@ -4,6 +4,12 @@
|
|||||||
|
|
||||||
.cur-view-content.lib-content-container {
|
.cur-view-content.lib-content-container {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
background-color: #fff;
|
||||||
|
position: absolute;
|
||||||
|
top: 48px;
|
||||||
|
z-index: 2;
|
||||||
|
width: 100%;
|
||||||
|
border-top: 1px solid #e8e8e8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view-mode-container {
|
.view-mode-container {
|
||||||
@@ -41,7 +47,7 @@
|
|||||||
|
|
||||||
/*tree view */
|
/*tree view */
|
||||||
.tree-view {
|
.tree-view {
|
||||||
margin-left: -9px;
|
margin-left: -12px;
|
||||||
padding: 12px 12px 12px 0;
|
padding: 12px 12px 12px 0;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
@@ -35,6 +35,63 @@
|
|||||||
|
|
||||||
/* end file-operation toolbar */
|
/* end file-operation toolbar */
|
||||||
|
|
||||||
|
/* begin view-mode toolbar */
|
||||||
|
.view-modes {
|
||||||
|
padding: 2px;
|
||||||
|
background-color: #e5e6e7;
|
||||||
|
border-radius: 3px;
|
||||||
|
height: 32px;
|
||||||
|
width: 92px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sf-view-mode-btn {
|
||||||
|
width: 44px;
|
||||||
|
height: 28px;
|
||||||
|
padding: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #444;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 2;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-weight: normal;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2;
|
||||||
|
width: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sf-view-mode-btn:hover {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sf-view-mode-btn:focus {
|
||||||
|
color: #444;
|
||||||
|
background-color: transparent;
|
||||||
|
border-color: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sf-view-mode-btn.btn-secondary:not(:disabled):not(.disabled):active:focus {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-modes .view-modes-bg.transition-all {
|
||||||
|
transition-property: all;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 150ms;
|
||||||
|
background-color: #fff;
|
||||||
|
position: absolute;
|
||||||
|
width: 44px;
|
||||||
|
height: 28px;
|
||||||
|
top: 2px;
|
||||||
|
left: 2px;
|
||||||
|
z-index: 1;
|
||||||
|
opacity: 0.75;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
/* end view-mode toolbar */
|
||||||
|
|
||||||
#cur-folder-more-op-toggle {
|
#cur-folder-more-op-toggle {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-right: -4px;
|
margin-right: -4px;
|
||||||
|
@@ -173,6 +173,10 @@ class LibContentContainer extends React.Component {
|
|||||||
isRepoInfoBarShow = true;
|
isRepoInfoBarShow = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let curViewPathStyle = { 'borderBottom': 'none' };
|
||||||
|
if (this.props.isDirentSelected) {
|
||||||
|
curViewPathStyle.transform = 'translateY(-50px)';
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
@@ -182,32 +186,8 @@ class LibContentContainer extends React.Component {
|
|||||||
{gettext('This library has been set to read-only by admin and cannot be updated.')}
|
{gettext('This library has been set to read-only by admin and cannot be updated.')}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<div className="cur-view-path">
|
<div className="cur-view-path d-block" style={curViewPathStyle}>
|
||||||
{this.props.isDirentSelected ?
|
<div className="d-flex justify-content-between align-items-center CurDirPath" style={{height: '32px'}}>
|
||||||
<ToolbarForSelectedDirents
|
|
||||||
repoID={this.props.repoID}
|
|
||||||
path={this.props.path}
|
|
||||||
userPerm={this.props.userPerm}
|
|
||||||
repoEncrypted={this.props.repoEncrypted}
|
|
||||||
repoTags={this.props.repoTags}
|
|
||||||
selectedDirentList={this.props.selectedDirentList}
|
|
||||||
direntList={this.props.direntList}
|
|
||||||
onItemsMove={this.props.onItemsMove}
|
|
||||||
onItemsCopy={this.props.onItemsCopy}
|
|
||||||
onItemsDelete={this.props.onItemsDelete}
|
|
||||||
onItemRename={this.props.onItemRename}
|
|
||||||
isRepoOwner={this.props.isRepoOwner}
|
|
||||||
currentRepoInfo={this.props.currentRepoInfo}
|
|
||||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
|
||||||
updateDirent={this.props.updateDirent}
|
|
||||||
unSelectDirent={this.props.unSelectDirent}
|
|
||||||
onFilesTagChanged={this.props.onFilesTagChanged}
|
|
||||||
showShareBtn={this.props.showShareBtn}
|
|
||||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
|
||||||
showDirentDetail={this.props.showDirentDetail}
|
|
||||||
currentMode={this.props.currentMode}
|
|
||||||
switchViewMode={this.props.switchViewMode}
|
|
||||||
/> :
|
|
||||||
<CurDirPath
|
<CurDirPath
|
||||||
repoID={repoID}
|
repoID={repoID}
|
||||||
repoName={this.props.currentRepoInfo.repo_name}
|
repoName={this.props.currentRepoInfo.repo_name}
|
||||||
@@ -241,7 +221,33 @@ class LibContentContainer extends React.Component {
|
|||||||
onFileTagChanged={this.props.onToolbarFileTagChanged}
|
onFileTagChanged={this.props.onToolbarFileTagChanged}
|
||||||
repoTags={this.props.repoTags}
|
repoTags={this.props.repoTags}
|
||||||
/>
|
/>
|
||||||
}
|
</div>
|
||||||
|
<div style={{marginTop: '24px'}}>
|
||||||
|
<ToolbarForSelectedDirents
|
||||||
|
repoID={this.props.repoID}
|
||||||
|
path={this.props.path}
|
||||||
|
userPerm={this.props.userPerm}
|
||||||
|
repoEncrypted={this.props.repoEncrypted}
|
||||||
|
repoTags={this.props.repoTags}
|
||||||
|
selectedDirentList={this.props.selectedDirentList}
|
||||||
|
direntList={this.props.direntList}
|
||||||
|
onItemsMove={this.props.onItemsMove}
|
||||||
|
onItemsCopy={this.props.onItemsCopy}
|
||||||
|
onItemsDelete={this.props.onItemsDelete}
|
||||||
|
onItemRename={this.props.onItemRename}
|
||||||
|
isRepoOwner={this.props.isRepoOwner}
|
||||||
|
currentRepoInfo={this.props.currentRepoInfo}
|
||||||
|
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||||
|
updateDirent={this.props.updateDirent}
|
||||||
|
unSelectDirent={this.props.unSelectDirent}
|
||||||
|
onFilesTagChanged={this.props.onFilesTagChanged}
|
||||||
|
showShareBtn={this.props.showShareBtn}
|
||||||
|
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||||
|
showDirentDetail={this.props.showDirentDetail}
|
||||||
|
currentMode={this.props.currentMode}
|
||||||
|
switchViewMode={this.props.switchViewMode}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={`cur-view-content lib-content-container ${this.props.isTreePanelShown ? 'view-mode-container' : ''}`} onScroll={this.onItemsScroll}>
|
<div className={`cur-view-content lib-content-container ${this.props.isTreePanelShown ? 'view-mode-container' : ''}`} onScroll={this.onItemsScroll}>
|
||||||
{!this.props.pathExist && this.errMessage}
|
{!this.props.pathExist && this.errMessage}
|
||||||
|
Reference in New Issue
Block a user