From 31ccb4a10f6b14e93ddaca825d5e6bf2db8dd1ee Mon Sep 17 00:00:00 2001 From: Hzunax Date: Thu, 28 May 2020 20:22:47 +0200 Subject: [PATCH] fix(button): aria-disabled for button and switch --- packages/button/src/LionButton.js | 3 +++ packages/button/test/lion-button.test.js | 3 +++ packages/switch/src/LionSwitchButton.js | 6 ++++++ packages/switch/test/lion-switch-button.test.js | 8 ++++++++ 4 files changed, 20 insertions(+) diff --git a/packages/button/src/LionButton.js b/packages/button/src/LionButton.js index 34a96e786..67466ff1d 100644 --- a/packages/button/src/LionButton.js +++ b/packages/button/src/LionButton.js @@ -184,6 +184,9 @@ export class LionButton extends DisabledWithTabIndexMixin(SlotMixin(LitElement)) native.type = this.type; } } + if (changedProperties.has('disabled')) { + this.setAttribute('aria-disabled', `${this.disabled}`); // create mixin if we need it in more places + } } /** diff --git a/packages/button/test/lion-button.test.js b/packages/button/test/lion-button.test.js index b46279605..f38d10611 100644 --- a/packages/button/test/lion-button.test.js +++ b/packages/button/test/lion-button.test.js @@ -57,15 +57,18 @@ describe('lion-button', () => { it('can be disabled imperatively', async () => { const el = await fixture(`foo`); expect(el.getAttribute('tabindex')).to.equal('-1'); + expect(el.getAttribute('aria-disabled')).to.equal('true'); el.disabled = false; await el.updateComplete; expect(el.getAttribute('tabindex')).to.equal('0'); + expect(el.getAttribute('aria-disabled')).to.equal('false'); expect(el.hasAttribute('disabled')).to.equal(false); el.disabled = true; await el.updateComplete; expect(el.getAttribute('tabindex')).to.equal('-1'); + expect(el.getAttribute('aria-disabled')).to.equal('true'); expect(el.hasAttribute('disabled')).to.equal(true); }); diff --git a/packages/switch/src/LionSwitchButton.js b/packages/switch/src/LionSwitchButton.js index 877907147..033aed84c 100644 --- a/packages/switch/src/LionSwitchButton.js +++ b/packages/switch/src/LionSwitchButton.js @@ -113,6 +113,12 @@ export class LionSwitchButton extends DisabledWithTabIndexMixin(LitElement) { } } + updated(changedProperties) { + if (changedProperties.has('disabled')) { + this.setAttribute('aria-disabled', `${this.disabled}`); // create mixin if we need it in more places + } + } + /** * We synchronously update aria-checked to support voice over on safari. * diff --git a/packages/switch/test/lion-switch-button.test.js b/packages/switch/test/lion-switch-button.test.js index c02beca11..09a8b05be 100644 --- a/packages/switch/test/lion-switch-button.test.js +++ b/packages/switch/test/lion-switch-button.test.js @@ -108,4 +108,12 @@ describe('lion-switch-button', () => { expect(el.getAttribute('aria-checked')).to.equal('false'); }); }); + it('should manage "aria-disabled"', async () => { + el.disabled = true; + await el.updateComplete; + expect(el.getAttribute('aria-disabled')).to.equal('true'); + el.disabled = false; + await el.updateComplete; + expect(el.getAttribute('aria-disabled')).to.equal('false'); + }); });