|
1 | 1 | <script>
|
2 | 2 | $(document).ready(function() {
|
| 3 | + var ACTIVE_CLASS = 'active'; |
| 4 | + var ACTIVE_SELECTOR = '.' + ACTIVE_CLASS; |
| 5 | + var OPEN_CLASS = 'open'; |
| 6 | + |
3 | 7 | $('.nav__items > li, li.collapsed').each(function(i, li) {
|
4 | 8 | var $li = $(li);
|
5 | 9 | var $ul = $li.find('> ul');
|
6 |
| - $li.addClass('collapsible'); |
7 |
| - $li.find('> span').on('click', function(e) { |
8 |
| - $li.toggleClass('open'); |
9 |
| - $ul.toggle({ duration: 100 }); |
| 10 | + var hasActiveChild = $li.find(ACTIVE_SELECTOR).length !== 0; |
| 11 | + setInitialSubnavState($li, $ul, hasActiveChild); |
| 12 | + $li.find('> span').on('click', function() { |
| 13 | + toggleSubNav($li, $ul, hasActiveChild); |
10 | 14 | });
|
11 |
| - if ($li.hasClass('collapsed')) { |
12 |
| - if ($li.find('.active').length === 0) { |
13 |
| - $ul.hide(); |
| 15 | + }); |
| 16 | + |
| 17 | + function setInitialSubnavState($parentLi, $subnavUl, hasActiveChild) { |
| 18 | + $parentLi.addClass('collapsible'); |
| 19 | + if ($parentLi.hasClass('collapsed')) { |
| 20 | + if (hasActiveChild) { |
| 21 | + $parentLi.addClass(OPEN_CLASS); |
14 | 22 | } else {
|
15 |
| - $li.addClass('open'); |
| 23 | + $subnavUl.hide(); |
16 | 24 | }
|
| 25 | + } else { |
| 26 | + $parentLi.addClass(OPEN_CLASS); |
17 | 27 | }
|
18 |
| - }); |
| 28 | + } |
| 29 | + |
| 30 | + function toggleSubNav($parentLi, $subnavUl, hasActiveChild) { |
| 31 | + if (hasActiveChild) { |
| 32 | + if (!$parentLi.hasClass(OPEN_CLASS)) { |
| 33 | + $parentLi.removeClass(ACTIVE_CLASS); |
| 34 | + } else { |
| 35 | + $parentLi.addClass(ACTIVE_CLASS); |
| 36 | + } |
| 37 | + } |
| 38 | + $parentLi.toggleClass(OPEN_CLASS); |
| 39 | + $subnavUl.toggle({ duration: 100 }); |
| 40 | + } |
19 | 41 | });
|
20 | 42 | </script>
|
0 commit comments