From 9032bc99710c6be43a74d980ada963356fcc55fa Mon Sep 17 00:00:00 2001 From: Jon Schectman Date: Fri, 2 Sep 2016 14:03:14 -0700 Subject: [PATCH] added tooltip and arialabel to menu item. Also added aria label to contextmenu --- .../ContextualMenu/ContextualMenu.Props.ts | 6 ++ .../ContextualMenu/ContextualMenu.tsx | 81 +++++++++++-------- .../examples/ContextualMenu.Basic.Example.tsx | 10 +-- 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/components/ContextualMenu/ContextualMenu.Props.ts b/src/components/ContextualMenu/ContextualMenu.Props.ts index 3d52b61dbe4af4..6c999ba07a97e7 100644 --- a/src/components/ContextualMenu/ContextualMenu.Props.ts +++ b/src/components/ContextualMenu/ContextualMenu.Props.ts @@ -75,6 +75,12 @@ export interface IContextualMenuProps extends React.Props, IPosi */ beakWidth?: number; + /** + * Aria label for accessibility for the ContextualMenu. + * If none specified no aria label will be applied to the ContextualMenu. + */ + ariaLabel?: string; + } export interface IContextualMenuItem { diff --git a/src/components/ContextualMenu/ContextualMenu.tsx b/src/components/ContextualMenu/ContextualMenu.tsx index 3ff882bbc0fc11..54b91e1dcf454c 100644 --- a/src/components/ContextualMenu/ContextualMenu.tsx +++ b/src/components/ContextualMenu/ContextualMenu.tsx @@ -144,18 +144,19 @@ export class ContextualMenu extends React.Component this._focusZone = focusZone } rootProps={ { role: 'menu' } } > -
    +
      { items.map((item, index) => ( // If the item name is equal to '-', a divider will be generated. item.name === '-' ? (
    • + className={ css('ms-ContextualMenu-divider', item.className) }/> ) : (
    • - { this._renderMenuItem(item, index, hasCheckmarks, hasIcons) } + className={ css('ms-ContextualMenu-item', item.className) }> + { this._renderMenuItem(item, index, hasCheckmarks, hasIcons) }
    • ) )) } @@ -217,26 +221,37 @@ export class ContextualMenu extends React.Component { location.href = item.href; } : null, - onKeyDown: item.items && item.items.length ? this._onItemKeyDown.bind(this, item) : null, - onMouseEnter: this._onItemMouseEnter.bind(this, item), - onMouseLeave: this._onMouseLeave, - onMouseDown: (ev: any) => this._onItemMouseDown(item, ev), - disabled: item.isDisabled, - dataCommandKey: index, - role: 'menuitem', - href: item.href, - 'aria-haspopup': item.items && item.items.length ? true : null, - 'aria-owns': item.key === expandedMenuItemKey ? subMenuId : null }, - this._renderMenuItemChildren(item, index, hasCheckmarks, hasIcons)); + 'button', + { + className: css('ms-ContextualMenu-link', { 'is-expanded': (expandedMenuItemKey === item.key) }), + onClick: item.onClick || (item.items && item.items.length) ? this._onItemClick.bind(this, item) : item.href ? () => { location.href = item.href; } : null, + onKeyDown: item.items && item.items.length ? this._onItemKeyDown.bind(this, item) : null, + onMouseEnter: this._onItemMouseEnter.bind(this, item), + onMouseLeave: this._onMouseLeave, + onMouseDown: (ev: any) => this._onItemMouseDown(item, ev), + disabled: item.isDisabled, + dataCommandKey: index, + role: 'menuitem', + href: item.href, + title: item.title, + 'aria-label': ariaLabel, + 'aria-haspopup': item.items && item.items.length ? true : null, + 'aria-owns': item.key === expandedMenuItemKey ? subMenuId : null + }, + this._renderMenuItemChildren(item, index, hasCheckmarks, hasIcons)); } private _renderMenuItemChildren(item: IContextualMenuItem, index: number, hasCheckmarks: boolean, hasIcons: boolean) { @@ -245,17 +260,17 @@ export class ContextualMenu extends React.Component ) : (null) } {(hasIcons) ? ( - ) : (null)} + ) : (null) } { item.name } {(item.items && item.items.length) ? ( - ) : (null)} + ) : (null) } ); } diff --git a/src/demo/pages/ContextualMenuPage/examples/ContextualMenu.Basic.Example.tsx b/src/demo/pages/ContextualMenuPage/examples/ContextualMenu.Basic.Example.tsx index 1e794a2a8c12c2..ddc234e48215b9 100644 --- a/src/demo/pages/ContextualMenuPage/examples/ContextualMenu.Basic.Example.tsx +++ b/src/demo/pages/ContextualMenuPage/examples/ContextualMenu.Basic.Example.tsx @@ -14,14 +14,14 @@ export class ContextualMenuBasicExample extends React.Component { public render() { return (
      - + { this.state.isContextMenuVisible ? (