68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
import $ from 'jquery';
|
|
|
|
const Nest = {
|
|
Feather(menu, type = 'zf') {
|
|
menu.attr('role', 'menubar');
|
|
|
|
var items = menu.find('li').attr({'role': 'menuitem'}),
|
|
subMenuClass = `is-${type}-submenu`,
|
|
subItemClass = `${subMenuClass}-item`,
|
|
hasSubClass = `is-${type}-submenu-parent`,
|
|
applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes.
|
|
|
|
items.each(function() {
|
|
var $item = $(this),
|
|
$sub = $item.children('ul');
|
|
|
|
if ($sub.length) {
|
|
$item.addClass(hasSubClass);
|
|
$sub.addClass(`submenu ${subMenuClass}`).attr({'data-submenu': ''});
|
|
if(applyAria) {
|
|
$item.attr({
|
|
'aria-haspopup': true,
|
|
'aria-label': $item.children('a:first').text()
|
|
});
|
|
// Note: Drilldowns behave differently in how they hide, and so need
|
|
// additional attributes. We should look if this possibly over-generalized
|
|
// utility (Nest) is appropriate when we rework menus in 6.4
|
|
if(type === 'drilldown') {
|
|
$item.attr({'aria-expanded': false});
|
|
}
|
|
}
|
|
$sub
|
|
.addClass(`submenu ${subMenuClass}`)
|
|
.attr({
|
|
'data-submenu': '',
|
|
'role': 'menubar'
|
|
});
|
|
if(type === 'drilldown') {
|
|
$sub.attr({'aria-hidden': true});
|
|
}
|
|
}
|
|
|
|
if ($item.parent('[data-submenu]').length) {
|
|
$item.addClass(`is-submenu-item ${subItemClass}`);
|
|
}
|
|
});
|
|
|
|
return;
|
|
},
|
|
|
|
Burn(menu, type) {
|
|
var //items = menu.find('li'),
|
|
subMenuClass = `is-${type}-submenu`,
|
|
subItemClass = `${subMenuClass}-item`,
|
|
hasSubClass = `is-${type}-submenu-parent`;
|
|
|
|
menu
|
|
.find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li')
|
|
.removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`)
|
|
.removeAttr('data-submenu').css('display', '');
|
|
|
|
}
|
|
}
|
|
|
|
export {Nest};
|