3
3
class =" dropdown-wrapper"
4
4
:class =" { open }"
5
5
>
6
- <a
6
+ <button
7
7
class =" dropdown-title"
8
+ type =" button"
9
+ :aria-label =" dropdownAriaLabel"
8
10
@click =" toggle"
9
11
>
10
12
<span class =" title" >{{ item.text }}</span >
11
13
<span
12
14
class =" arrow"
13
15
:class =" open ? 'down' : 'right'"
14
16
></span >
15
- </a >
17
+ </button >
16
18
17
19
<DropdownTransition >
18
20
<ul
35
37
:key =" childSubItem.link"
36
38
v-for =" childSubItem in subItem.items"
37
39
>
38
- <NavLink :item =" childSubItem" />
40
+ <NavLink
41
+ @focusout ="
42
+ isLastItemOfArray(childSubItem, subItem.items) &&
43
+ isLastItemOfArray(subItem, item.items) &&
44
+ toggle()
45
+ "
46
+ :item =" childSubItem" />
39
47
</li >
40
48
</ul >
41
49
42
50
<NavLink
43
51
v-else
52
+ @focusout =" isLastItemOfArray(subItem, item.items) && toggle()"
44
53
:item =" subItem"
45
54
/>
46
55
</li >
52
61
<script >
53
62
import NavLink from ' @theme/components/NavLink.vue'
54
63
import DropdownTransition from ' @theme/components/DropdownTransition.vue'
64
+ import last from ' lodash/last'
Has a conversation. Original line has a conversation. 55
65
56
66
export default {
57
67
components: { NavLink, DropdownTransition },
@@ -68,9 +78,26 @@ export default {
68
78
}
69
79
},
70
80
81
+ computed: {
82
+
83
+ dropdownAriaLabel () {
84
+ return this .item .ariaLabel || this .item .text
85
+ }
86
+ },
87
+
71
88
methods: {
72
89
toggle () {
73
90
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
74
101
}
75
102
}
76
103
}
@@ -81,6 +108,11 @@ export default {
81
108
cursor pointer
82
109
.dropdown-title
83
110
display block
111
+ font-size 0.9rem
112
+ background transparent
113
+ border none
114
+ font-weight 500
115
+ color $textColor
84
116
& :hover
85
117
border-color transparent
86
118
.arrow
@@ -149,9 +181,12 @@ export default {
149
181
@media (min-width : $MQMobile)
150
182
.dropdown-wrapper
151
183
height 1.8rem
152
- & :hover .nav-dropdown
184
+ & :hover .nav-dropdown ,
185
+ & .open .nav-dropdown
153
186
// override the inline style.
154
187
display block !important
188
+ & .open : blur
189
+ display none
155
190
.dropdown-title .arrow
156
191
// make the arrow always down at desktop
157
192
border-left 4px solid transparent