From f7c5a2b4738b17fa52e092094e4f63d83609f669 Mon Sep 17 00:00:00 2001 From: Deepak kudi Date: Thu, 4 Jun 2026 09:03:50 +0530 Subject: [PATCH] Fix button aria-pressed initialization --- js/src/button.js | 10 ++++++++++ js/tests/unit/button.spec.js | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/js/src/button.js b/js/src/button.js index a797f5050d40..9d63d2134f7c 100644 --- a/js/src/button.js +++ b/js/src/button.js @@ -27,6 +27,16 @@ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` */ class Button extends BaseComponent { + constructor(element) { + super(element) + + if (!this._element || this._element.hasAttribute('aria-pressed')) { + return + } + + this._element.setAttribute('aria-pressed', this._element.classList.contains(CLASS_NAME_ACTIVE)) + } + // Getters static get NAME() { return NAME diff --git a/js/tests/unit/button.spec.js b/js/tests/unit/button.spec.js index 6624fee7c98e..0e613feef4f2 100644 --- a/js/tests/unit/button.spec.js +++ b/js/tests/unit/button.spec.js @@ -22,6 +22,20 @@ describe('Button', () => { expect(buttonByElement._element).toEqual(buttonEl) }) + it('should initialize aria-pressed when missing', () => { + fixtureEl.innerHTML = [ + '', + '' + ].join('') + + const buttons = fixtureEl.querySelectorAll('[data-bs-toggle="button"]') + const buttonInstances = [...buttons].map(button => new Button(button)) + + expect(buttonInstances).toHaveSize(2) + expect(buttons[0].getAttribute('aria-pressed')).toEqual('false') + expect(buttons[1].getAttribute('aria-pressed')).toEqual('true') + }) + describe('VERSION', () => { it('should return plugin version', () => { expect(Button.VERSION).toEqual(jasmine.any(String))