mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-03 16:10:26 +00:00
[a11y] shared repos: improved 'more operations' dropdown & 'star/unstar'
This commit is contained in:
@@ -85,6 +85,12 @@ class SharedRepoListItem extends React.Component {
|
|||||||
this.toggleOperationMenu(e);
|
this.toggleOperationMenu(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDropdownToggleKeyDown = (e) => {
|
||||||
|
if (e.key == 'Enter' || e.key == 'Space') {
|
||||||
|
this.clickOperationMenuToggle(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
toggleOperationMenu = (e) => {
|
toggleOperationMenu = (e) => {
|
||||||
let dataset = e.target ? e.target.dataset : null;
|
let dataset = e.target ? e.target.dataset : null;
|
||||||
if (dataset && dataset.toggle && dataset.toggle === 'Rename') {
|
if (dataset && dataset.toggle && dataset.toggle === 'Rename') {
|
||||||
@@ -118,6 +124,12 @@ class SharedRepoListItem extends React.Component {
|
|||||||
return { iconUrl, iconTitle, libPath };
|
return { iconUrl, iconTitle, libPath };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMenuItemKeyDown = (e) => {
|
||||||
|
if (e.key == 'Enter' || e.key == 'Space') {
|
||||||
|
this.onMenuItemClick(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onMenuItemClick = (e) => {
|
onMenuItemClick = (e) => {
|
||||||
let operation = e.target.dataset.toggle;
|
let operation = e.target.dataset.toggle;
|
||||||
switch(operation) {
|
switch(operation) {
|
||||||
@@ -403,16 +415,18 @@ class SharedRepoListItem extends React.Component {
|
|||||||
{deleteOperation}
|
{deleteOperation}
|
||||||
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
|
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
|
||||||
<DropdownToggle
|
<DropdownToggle
|
||||||
tag="i"
|
className="sf-dropdown-toggle sf2-icon-caret-down border-0 p-0"
|
||||||
className="sf-dropdown-toggle sf2-icon-caret-down"
|
|
||||||
title={gettext('More Operations')}
|
title={gettext('More Operations')}
|
||||||
data-toggle="dropdown"
|
data-toggle="dropdown"
|
||||||
aria-expanded={this.state.isItemMenuShow}
|
aria-expanded={this.state.isItemMenuShow}
|
||||||
|
aria-haspopup={true}
|
||||||
|
style={{'minWidth': '0'}}
|
||||||
onClick={this.clickOperationMenuToggle}
|
onClick={this.clickOperationMenuToggle}
|
||||||
|
onKeyDown={this.onDropdownToggleKeyDown}
|
||||||
/>
|
/>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
{operations.map((item, index) => {
|
{operations.map((item, index) => {
|
||||||
return <DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick}>{this.translateMenuItem(item)}</DropdownItem>;
|
return <DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick} onKeyDown={this.onMenuItemKeyDown}>{this.translateMenuItem(item)}</DropdownItem>;
|
||||||
})}
|
})}
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
@@ -440,9 +454,13 @@ class SharedRepoListItem extends React.Component {
|
|||||||
|
|
||||||
onToggleStarRepo = (e) => {
|
onToggleStarRepo = (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
const { repo_name: repoName } = this.props.repo;
|
||||||
if (this.state.isStarred) {
|
if (this.state.isStarred) {
|
||||||
seafileAPI.unstarItem(this.props.repo.repo_id, '/').then(() => {
|
seafileAPI.unstarItem(this.props.repo.repo_id, '/').then(() => {
|
||||||
this.setState({isStarred: !this.state.isStarred});
|
this.setState({isStarred: !this.state.isStarred});
|
||||||
|
const msg = gettext('Successfully unstarred {library_name_placeholder}.')
|
||||||
|
.replace('{library_name_placeholder}', repoName);
|
||||||
|
toaster.success(msg);
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
let errMessage = Utils.getErrorMsg(error);
|
let errMessage = Utils.getErrorMsg(error);
|
||||||
toaster.danger(errMessage);
|
toaster.danger(errMessage);
|
||||||
@@ -450,6 +468,9 @@ class SharedRepoListItem extends React.Component {
|
|||||||
} else {
|
} else {
|
||||||
seafileAPI.starItem(this.props.repo.repo_id, '/').then(() => {
|
seafileAPI.starItem(this.props.repo.repo_id, '/').then(() => {
|
||||||
this.setState({isStarred: !this.state.isStarred});
|
this.setState({isStarred: !this.state.isStarred});
|
||||||
|
const msg = gettext('Successfully starred {library_name_placeholder}.')
|
||||||
|
.replace('{library_name_placeholder}', repoName);
|
||||||
|
toaster.success(msg);
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
let errMessage = Utils.getErrorMsg(error);
|
let errMessage = Utils.getErrorMsg(error);
|
||||||
toaster.danger(errMessage);
|
toaster.danger(errMessage);
|
||||||
@@ -471,7 +492,7 @@ class SharedRepoListItem extends React.Component {
|
|||||||
<td><img src={iconUrl} title={iconTitle} alt={iconTitle} width="24" /></td>
|
<td><img src={iconUrl} title={iconTitle} alt={iconTitle} width="24" /></td>
|
||||||
<td>
|
<td>
|
||||||
{this.state.isRenaming ?
|
{this.state.isRenaming ?
|
||||||
<Rename name={repo.repo_name} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> :
|
<Rename name={repo.repo_name} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> :
|
||||||
<Link to={libPath}>{repo.repo_name}</Link>
|
<Link to={libPath}>{repo.repo_name}</Link>
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
|
Reference in New Issue
Block a user