33 class =" dropdown-wrapper"
44 :class =" { open }"
55 >
6- <a
6+ <button
77 class =" dropdown-title"
8+ type =" button"
9+ :aria-label =" dropdownAriaLabel"
810 @click =" toggle"
911 >
1012 <span class =" title" >{{ item.text }}</span >
1113 <span
1214 class =" arrow"
1315 :class =" open ? 'down' : 'right'"
1416 ></span >
15- </a >
17+ </button >
1618
1719 <DropdownTransition >
1820 <ul
3537 :key =" childSubItem.link"
3638 v-for =" childSubItem in subItem.items"
3739 >
38- <NavLink :item =" childSubItem" />
40+ <NavLink
41+ @focusout ="
42+ isLastItemOfArray(childSubItem, subItem.items) &&
43+ isLastItemOfArray(subItem, item.items) &&
44+ toggle()
45+ "
46+ :item =" childSubItem" />
3947 </li >
4048 </ul >
4149
4250 <NavLink
4351 v-else
52+ @focusout =" isLastItemOfArray(subItem, item.items) && toggle()"
4453 :item =" subItem"
4554 />
4655 </li >
5261<script >
5362import NavLink from ' @theme/components/NavLink.vue'
5463import DropdownTransition from ' @theme/components/DropdownTransition.vue'
64+ import last from ' lodash/last'
5565
5666export default {
5767 components: { NavLink, DropdownTransition },
@@ -68,9 +78,26 @@ export default {
6878 }
6979 },
7080
81+ computed: {
82+
83+ dropdownAriaLabel () {
84+ return this .item .ariaLabel || this .item .text
85+ }
86+ },
87+
7188 methods: {
7289 toggle () {
7390 this .open = ! this .open
91+ },
92+
93+ isLastItemOfArray (item , array ) {
94+ return last (array) === item
95+ }
96+ },
97+
98+ watch: {
99+ $route () {
100+ this .open = false
74101 }
75102 }
76103}
@@ -81,6 +108,11 @@ export default {
81108 cursor pointer
82109 .dropdown-title
83110 display block
111+ font-size 0.9rem
112+ background transparent
113+ border none
114+ font-weight 500
115+ color $textColor
84116 & :hover
85117 border-color transparent
86118 .arrow
@@ -149,9 +181,12 @@ export default {
149181@media (min-width : $MQMobile)
150182 .dropdown-wrapper
151183 height 1.8rem
152- & :hover .nav-dropdown
184+ & :hover .nav-dropdown ,
185+ & .open .nav-dropdown
153186 // override the inline style.
154187 display block !important
188+ & .open : blur
189+ display none
155190 .dropdown-title .arrow
156191 // make the arrow always down at desktop
157192 border-left 4px solid transparent
0 commit comments