Skip to content

Commit 7967018

Browse files
ghenrypi0
authored andcommitted
feat(nav-item-dropdown): add extra-toggle-classes prop with tests and docs. closes bootstrap-vue#1550. (bootstrap-vue#1555)
1 parent 6a8022f commit 7967018

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

src/components/nav/README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ Use `<b-nav-item-dropdown>` to place dropdown items within your nav.
121121
<b-nav pills>
122122
<b-nav-item active>Active</b-nav-item>
123123
<b-nav-item>Link</b-nav-item>
124-
<b-nav-item-dropdown id="nav7_ddown" text="Dropdown" right>
124+
<b-nav-item-dropdown id="nav7_ddown" text="Dropdown" extra-toggle-classes="nav-link-custom" right>
125125
<b-dropdown-item>one</b-dropdown-item>
126126
<b-dropdown-item>two</b-dropdown-item>
127127
<b-dropdown-divider></b-dropdown-divider>
@@ -132,6 +132,18 @@ Use `<b-nav-item-dropdown>` to place dropdown items within your nav.
132132
<!-- nav-dropdown.vue -->
133133
```
134134

135+
Sometimes you want to add your own class names to the generated dropdown toggle button, that by default has
136+
the classes `nav-link` and `dropdown-toggle`. Use the `extra-toggle-classes` prop to add them (like above) which
137+
will produce something like:
138+
139+
```html
140+
<li id="nav7_ddown" class="nav-item b-nav-dropdown dropdown">
141+
<a href="#" id="nav7_ddown__BV_button_" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle nav-link-custom">
142+
</a>
143+
...
144+
</li>
145+
```
146+
135147
Refer to [`<b-dropdown>`](../dropdown) for a list of supported sub-components.
136148

137149
### `<b-nav-item-dropdown>` Component Alias

src/components/nav/nav-item-dropdown.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ export default {
5656
return [
5757
'nav-link',
5858
this.noCaret ? '' : 'dropdown-toggle',
59-
this.disabled ? 'disabled' : ''
59+
this.disabled ? 'disabled' : '',
60+
this.extraToggleClasses ? this.extraToggleClasses : ''
6061
]
6162
},
6263
menuClasses () {
@@ -72,6 +73,11 @@ export default {
7273
type: Boolean,
7374
default: false
7475
},
76+
extraToggleClasses: {
77+
// Extra Toggle classes
78+
type: String,
79+
default: ''
80+
},
7581
role: {
7682
type: String,
7783
default: 'menu'

src/components/navbar/fixtures/navbar.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
Sign out
3434
</a>
3535
</b-nav-item-dropdown>
36+
<b-nav-item-dropdown ref="extraToggleClasses" extra-toggle-classes="nav-link-custom">
37+
<b-dropdown-item>CustomClassInNavLink</b-dropdown-item>
38+
</b-nav-item-dropdown>
3639
</b-navbar-nav>
3740
</b-collapse>
3841

src/components/navbar/navbar.spec.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,12 @@ import {loadFixture, testVM} from '../../../tests/utils'
33
describe('navbar', async () => {
44
beforeEach(loadFixture(__dirname, 'navbar'))
55
testVM()
6+
7+
it('should have custom toggle class in nav-item-dropdown', async () => {
8+
const { app: { $refs } } = window
9+
const extraClass = $refs.extraToggleClasses
10+
expect(extraClass).toBeDefined()
11+
expect(extraClass.$refs.toggle).toBeDefined()
12+
expect(extraClass.$refs.toggle).toHaveAllClasses(['nav-link', 'dropdown-toggle', 'nav-link-custom'])
13+
})
614
})

0 commit comments

Comments
 (0)