foundation.util.nest.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. 'use strict';
  2. import $ from 'jquery';
  3. const Nest = {
  4. Feather(menu, type = 'zf') {
  5. menu.attr('role', 'menubar');
  6. var items = menu.find('li').attr({'role': 'menuitem'}),
  7. subMenuClass = `is-${type}-submenu`,
  8. subItemClass = `${subMenuClass}-item`,
  9. hasSubClass = `is-${type}-submenu-parent`,
  10. applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes.
  11. items.each(function() {
  12. var $item = $(this),
  13. $sub = $item.children('ul');
  14. if ($sub.length) {
  15. $item.addClass(hasSubClass);
  16. if(applyAria) {
  17. $item.attr({
  18. 'aria-haspopup': true,
  19. 'aria-label': $item.children('a:first').text()
  20. });
  21. // Note: Drilldowns behave differently in how they hide, and so need
  22. // additional attributes. We should look if this possibly over-generalized
  23. // utility (Nest) is appropriate when we rework menus in 6.4
  24. if(type === 'drilldown') {
  25. $item.attr({'aria-expanded': false});
  26. }
  27. }
  28. $sub
  29. .addClass(`submenu ${subMenuClass}`)
  30. .attr({
  31. 'data-submenu': '',
  32. 'role': 'menubar'
  33. });
  34. if(type === 'drilldown') {
  35. $sub.attr({'aria-hidden': true});
  36. }
  37. }
  38. if ($item.parent('[data-submenu]').length) {
  39. $item.addClass(`is-submenu-item ${subItemClass}`);
  40. }
  41. });
  42. return;
  43. },
  44. Burn(menu, type) {
  45. var //items = menu.find('li'),
  46. subMenuClass = `is-${type}-submenu`,
  47. subItemClass = `${subMenuClass}-item`,
  48. hasSubClass = `is-${type}-submenu-parent`;
  49. menu
  50. .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li')
  51. .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`)
  52. .removeAttr('data-submenu').css('display', '');
  53. }
  54. }
  55. export {Nest};