Skip to content

Commit

Permalink
menu: After disabled state tabindex has not been set
Browse files Browse the repository at this point in the history
fix #1767
  • Loading branch information
Vladimir Varankin committed Apr 16, 2016
1 parent 612b2c2 commit 3e5ea09
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 8 deletions.
5 changes: 4 additions & 1 deletion common.blocks/control/control.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@ provide(BEMDOM.decl(this.name, /** @lends control.prototype */{
// if block already has focused mod, we need to focus control
this.hasMod('focused') && this._focus();

this._tabIndex = this.elem('control').attr('tabindex');
this._tabIndex = typeof this.params.tabIndex !== 'undefined'?
this.params.tabIndex :
this.elem('control').attr('tabindex');

if(this.hasMod('disabled') && this._tabIndex !== 'undefined')
this.elem('control').removeAttr('tabindex');
}
Expand Down
6 changes: 5 additions & 1 deletion common.blocks/menu/menu.bemhtml
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,9 @@ block('menu')(
return attrs;
}),
js()(true),
mix()([{ elem : 'control' }])
mix()({ elem : 'control' }),
mod('disabled', true)
.js()(function() {
return this.extend(applyNext(), { tabIndex : 0 });
})
);
9 changes: 6 additions & 3 deletions common.blocks/menu/menu.bh.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ module.exports = function(bh) {
attrs = { role : 'menu' };

ctx
.js(true)
.tParam('menuMods', mods)
.mix({ elem : 'control' });

mods.disabled?
attrs['aria-disabled'] = 'true' :
if(mods.disabled) {
attrs['aria-disabled'] = 'true';
ctx.js({ tabIndex : 0 });
} else {
attrs.tabindex = 0;
ctx.js(true);
}

ctx.attrs(attrs);

Expand Down
20 changes: 20 additions & 0 deletions common.blocks/menu/menu.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,26 @@ describe('menu', function() {
control.attr('tabindex').should.be.equal('0');
});

it('should restore "tabindex" attribute on enable if was disabled initially', function() {
var menu = buildMenu({
block : 'menu',
mods : { disabled : true },
content : [
{
block : 'menu-item',
content : 'item 1'
}
]
}),
control = menu.elem('control');

expect(control.attr('tabindex')).to.be.undefined;
menu.delMod('disabled');
control.attr('tabindex').should.be.equal('0');

BEMDOM.destruct(menu.domElem);
});

it('should pass disabled mod to menu items', function() {
menu.setMod('disabled');
menuItems.forEach(function(menuItem) {
Expand Down
2 changes: 1 addition & 1 deletion common.blocks/menu/menu.tmpl-specs/10-default.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div aria-disabled="true" class="menu menu_theme_islands menu_disabled menu__control i-bem" data-bem="{&quot;menu&quot;:{}}" role="menu">
<div aria-disabled="true" class="menu menu_theme_islands menu_disabled menu__control i-bem" data-bem="{&quot;menu&quot;:{&quot;tabIndex&quot;:0}}" role="menu">
<div aria-disabled="true" role="menuitem" id class="menu-item menu-item_theme_islands menu-item_disabled i-bem" data-bem="{&quot;menu-item&quot;:{&quot;val&quot;:1}}">item 1</div>
<div aria-disabled="true" role="menuitem" id class="menu-item menu-item_theme_islands menu-item_disabled i-bem" data-bem="{&quot;menu-item&quot;:{&quot;val&quot;:2}}">item 2</div>
</div>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div aria-disabled="true" class="menu menu_theme_islands menu_size_m menu_disabled menu__control i-bem" role="menu" data-bem="{&quot;menu&quot;:{}}">
<div aria-disabled="true" class="menu menu_theme_islands menu_size_m menu_disabled menu__control i-bem" role="menu" data-bem="{&quot;menu&quot;:{&quot;tabIndex&quot;:0}}">
<div aria-disabled="true" id class="menu-item menu-item_theme_islands menu-item_disabled menu-item_type_link i-bem" role="menuitem" data-bem="{&quot;menu-item&quot;:{}}">
<a aria-disabled="true" class="link link_disabled link__control i-bem" data-bem="{&quot;link&quot;:{&quot;url&quot;:&quot;//yandex.ru&quot;}}" role="link">Yandex</a>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<input class="select__control" type="hidden" value="1" disabled="disabled" autocomplete="off" />
<button aria-labelledby="" class="button button_theme_islands button_disabled button__control select__button i-bem" data-bem="{&quot;button&quot;:{}}" role="listbox" aria-owns="{{\w+\s\w+}}" type="button" disabled="disabled"><span class="button__text" id>first</span><span class="icon select__tick"></span></button>
<div aria-hidden="true" class="popup popup_theme_islands popup_autoclosable popup_target_anchor i-bem" data-bem="{&quot;popup&quot;:{&quot;directions&quot;:[&quot;bottom-left&quot;,&quot;bottom-right&quot;,&quot;top-left&quot;,&quot;top-right&quot;]}}">
<div aria-disabled="true" class="menu menu_theme_islands menu_disabled menu_mode_radio menu__control select__menu i-bem" data-bem="{&quot;menu&quot;:{}}">
<div aria-disabled="true" class="menu menu_theme_islands menu_disabled menu_mode_radio menu__control select__menu i-bem" data-bem="{&quot;menu&quot;:{&quot;tabIndex&quot;:0}}">
<div id aria-checked="true" aria-disabled="true" class="menu-item menu-item_checked menu-item_disabled menu-item_theme_islands i-bem" data-bem="{&quot;menu-item&quot;:{&quot;val&quot;:1}}" role="option">first</div>
<div id aria-checked="false" aria-disabled="true" class="menu-item menu-item_disabled menu-item_theme_islands i-bem" data-bem="{&quot;menu-item&quot;:{&quot;val&quot;:2}}" role="option">second</div>
</div>
Expand Down

0 comments on commit 3e5ea09

Please sign in to comment.