From d655985b19283862670ad9d0b272b14cd8f781ff Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 21 Feb 2020 00:34:56 -0400 Subject: [PATCH 01/24] feat(b-pagination-nav): improve aria accessibility --- src/mixins/pagination.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/mixins/pagination.js b/src/mixins/pagination.js index 81e5d4da46e..672d7fa2f2a 100644 --- a/src/mixins/pagination.js +++ b/src/mixins/pagination.js @@ -430,6 +430,8 @@ export default { const { showFirstDots, showLastDots } = this.paginationParams const currentPage = this.computedCurrentPage const fill = this.align === 'fill' + // Used to control what type of aria attributes are rendered and wrapper + const isNav = this.isNav // Helper function and flag const isActivePage = pageNum => pageNum === currentPage @@ -448,8 +450,8 @@ export default { staticClass: 'page-link', props: isDisabled ? {} : this.linkProps(linkTo), attrs: { - role: 'menuitem', - tabindex: isDisabled ? null : '-1', + role: isNav ? null : 'menuitem', + tabindex: isDisabled || isNav ? null : '-1', 'aria-label': ariaLabel, 'aria-controls': this.ariaControls || null, 'aria-disabled': isDisabled ? 'true' : null @@ -472,7 +474,7 @@ export default { staticClass: 'page-item', class: [{ disabled: isDisabled, 'flex-fill': fill }, btnClass], attrs: { - role: 'presentation', + role: isNav ? null : 'presentation', 'aria-hidden': isDisabled ? 'true' : null } }, @@ -504,17 +506,18 @@ export default { // Active page will have tabindex of 0, or if no current page and first page button const tabIndex = disabled ? null : active || (noCurrentPage && idx === 0) ? '0' : '-1' const attrs = { - role: 'menuitemradio', + role: isNav ? null : 'menuitemradio', 'aria-disabled': disabled ? 'true' : null, 'aria-controls': this.ariaControls || null, 'aria-label': isFunction(this.labelPage) ? this.labelPage(page.number) : `${this.labelPage} ${page.number}`, - 'aria-checked': active ? 'true' : 'false', + 'aria-checked': isNav ? null : active ? 'true' : 'false', + 'aria-current': isNav && active ? 'page' : null, 'aria-posinset': page.number, 'aria-setsize': numberOfPages, - // ARIA "roving tabindex" method - tabindex: tabIndex + // ARIA "roving tabindex" method (except in isNav mode) + tabindex: isNav ? null : tabIndex } const btnContent = toString(this.makePage(page.number)) const scope = { @@ -547,7 +550,7 @@ export default { key: `page-${page.number}`, staticClass: 'page-item', class: [{ disabled, active, 'flex-fill': fill }, page.classes, this.pageClass], - attrs: { role: 'presentation' } + attrs: { role: isNav ? null : 'presentation' } }, [inner] ) @@ -641,7 +644,7 @@ export default { staticClass: 'pagination', class: ['b-pagination', this.btnSize, this.alignment, this.styleClass], attrs: { - role: 'menubar', + role: isNav ? null : 'menubar', 'aria-disabled': disabled ? 'true' : 'false', 'aria-label': this.ariaLabel || null }, From e82c5638fda9d6bb59c0d0b78f718a7bf5773e55 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 21 Feb 2020 00:39:16 -0400 Subject: [PATCH 02/24] Update pagination-nav.spec.js --- src/components/pagination-nav/pagination-nav.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pagination-nav/pagination-nav.spec.js b/src/components/pagination-nav/pagination-nav.spec.js index beb80af340d..1715bfce9b5 100644 --- a/src/components/pagination-nav/pagination-nav.spec.js +++ b/src/components/pagination-nav/pagination-nav.spec.js @@ -41,7 +41,7 @@ describe('pagination-nav', () => { expect($ul.classes()).not.toContain('justify-content-center') expect($ul.classes()).not.toContain('justify-content-end') // UL Attributes - expect($ul.attributes('role')).toBe('menubar') + expect($ul.attributes('role')).not.toBe('menubar') expect($ul.attributes('aria-disabled')).toBe('false') expect($ul.attributes('aria-label')).toBe('Pagination') @@ -126,7 +126,7 @@ describe('pagination-nav', () => { expect($ul.classes()).toContain('b-pagination') // UL Attributes - expect($ul.attributes('role')).toBe('menubar') + expect($ul.attributes('role')).not.toBe('menubar') expect($ul.attributes('aria-disabled')).toBe('true') // LI classes From 2303e3d447c4fa8f5f7ef6c62d73734f62d94566 Mon Sep 17 00:00:00 2001 From: Troy Morehouse Date: Fri, 21 Feb 2020 00:42:23 -0400 Subject: [PATCH 03/24] Update pagination.js --- src/mixins/pagination.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/pagination.js b/src/mixins/pagination.js index 672d7fa2f2a..3393e0eed48 100644 --- a/src/mixins/pagination.js +++ b/src/mixins/pagination.js @@ -654,7 +654,7 @@ export default { ) // If we are ``, wrap in `