Skip to content

Commit f87d17d

Browse files
committed
Initialize aria-pressed for toggle buttons
1 parent 6f20e52 commit f87d17d

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

js/src/button.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
2727
*/
2828

2929
class Button extends BaseComponent {
30+
constructor(element) {
31+
super(element)
32+
33+
if (!this._element || this._element.hasAttribute('aria-pressed')) {
34+
return
35+
}
36+
37+
this._element.setAttribute('aria-pressed', this._element.classList.contains(CLASS_NAME_ACTIVE))
38+
}
39+
3040
// Getters
3141
static get NAME() {
3242
return NAME

js/tests/unit/button.spec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,23 @@ describe('Button', () => {
2222
expect(buttonByElement._element).toEqual(buttonEl)
2323
})
2424

25+
it('should initialize aria-pressed when missing', () => {
26+
fixtureEl.innerHTML = [
27+
'<button class="btn" data-bs-toggle="button"></button>',
28+
'<button class="btn active" data-bs-toggle="button"></button>',
29+
'<button class="btn active" data-bs-toggle="button" aria-pressed="false"></button>'
30+
].join('')
31+
32+
const buttons = fixtureEl.querySelectorAll('[data-bs-toggle="button"]')
33+
34+
const buttonInstances = [...buttons].map(button => new Button(button))
35+
36+
expect(buttonInstances).toHaveSize(3)
37+
expect(buttons[0].getAttribute('aria-pressed')).toEqual('false')
38+
expect(buttons[1].getAttribute('aria-pressed')).toEqual('true')
39+
expect(buttons[2].getAttribute('aria-pressed')).toEqual('false')
40+
})
41+
2542
describe('VERSION', () => {
2643
it('should return plugin version', () => {
2744
expect(Button.VERSION).toEqual(jasmine.any(String))

0 commit comments

Comments
 (0)