1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-22 11:57:34 +00:00

[a11y] my libs: added 'keyboard access' for 'star/unstar', op menu & ops

This commit is contained in:
llj
2021-09-22 10:48:25 +08:00
parent ace2ea7a3e
commit 4db1ef92e3
2 changed files with 24 additions and 9 deletions

View File

@@ -78,7 +78,7 @@ class MylibRepoListItem extends React.Component {
switch(item) { switch(item) {
case 'Star': case 'Star':
case 'Unstar': case 'Unstar':
this.onStarRepo(); this.onToggleStarRepo();
break; break;
case 'Share': case 'Share':
this.onShareToggle(); this.onShareToggle();
@@ -131,7 +131,8 @@ class MylibRepoListItem extends React.Component {
this.props.onRepoClick(this.props.repo); this.props.onRepoClick(this.props.repo);
} }
onStarRepo = () => { onToggleStarRepo = (e) => {
e.preventDefault();
const repoName = this.props.repo.repo_name; const repoName = this.props.repo.repo_name;
if (this.state.isStarred) { if (this.state.isStarred) {
seafileAPI.unstarItem(this.props.repo.repo_id, '/').then(() => { seafileAPI.unstarItem(this.props.repo.repo_id, '/').then(() => {
@@ -278,8 +279,9 @@ class MylibRepoListItem extends React.Component {
return ( return (
<tr className={this.state.highlight ? 'tr-highlight' : ''} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave} onClick={this.onRepoClick}> <tr className={this.state.highlight ? 'tr-highlight' : ''} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave} onClick={this.onRepoClick}>
<td className="text-center"> <td className="text-center">
{!this.state.isStarred && <i className="far fa-star star-empty cursor-pointer" onClick={this.onStarRepo}></i>} <a href="#" role="button" aria-label={this.state.isStarred ? gettext('Unstar') : gettext('Star')} onClick={this.onToggleStarRepo}>
{this.state.isStarred && <i className="fas fa-star cursor-pointer" onClick={this.onStarRepo}></i>} <i className={`fa-star ${this.state.isStarred ? 'fas' : 'far star-empty'}`}></i>
</a>
</td> </td>
<td><img src={iconUrl} title={iconTitle} alt={iconTitle} width="24" /></td> <td><img src={iconUrl} title={iconTitle} alt={iconTitle} width="24" /></td>
<td> <td>

View File

@@ -27,10 +27,22 @@ class MylibRepoMenu extends React.Component {
this.props.onMenuItemClick(operation); this.props.onMenuItemClick(operation);
} }
onMenuItemKeyDown = (e) => {
if (e.key == 'Enter' || e.key == 'Space') {
this.onMenuItemClick(e);
}
}
onDropdownToggleClick = (e) => { onDropdownToggleClick = (e) => {
this.toggleOperationMenu(e); this.toggleOperationMenu(e);
} }
onDropdownToggleKeyDown = (e) => {
if (e.key == 'Enter' || e.key == 'Space') {
this.onDropdownToggleClick(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') {
@@ -134,19 +146,20 @@ class MylibRepoMenu extends React.Component {
return ( return (
<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')}
// onClick={this.clickOperationMenuToggle} onClick={this.onDropdownToggleClick}
onKeyDown={this.onDropdownToggleKeyDown}
data-toggle="dropdown" data-toggle="dropdown"
aria-expanded={this.state.isItemMenuShow} aria-haspopup={true}
style={{'minWidth': '0'}}
/> />
<DropdownMenu> <DropdownMenu>
{operations.map((item, index)=> { {operations.map((item, index)=> {
if (item == 'Divider') { if (item == 'Divider') {
return <DropdownItem key={index} divider />; return <DropdownItem key={index} divider />;
} else { } else {
return (<DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick}>{this.translateOperations(item)}</DropdownItem>); return (<DropdownItem key={index} data-toggle={item} onClick={this.onMenuItemClick} onKeyDown={this.onMenuItemKeyDown}>{this.translateOperations(item)}</DropdownItem>);
} }
})} })}
</DropdownMenu> </DropdownMenu>