File tree Expand file tree Collapse file tree 2 files changed +39
-2
lines changed Expand file tree Collapse file tree 2 files changed +39
-2
lines changed Original file line number Diff line number Diff line change @@ -82,14 +82,15 @@ class DetailsElement extends ControlStateMixin(ElementMixin(ThemableMixin(Polyme
8282 on-keydown ="_onToggleKeyDown "
8383 disabled$ ="[[disabled]] "
8484 aria-expanded$ ="[[_getAriaExpanded(opened)]] "
85+ aria-controls$ ="[[_contentId]] "
8586 >
8687 < span part ="toggle "> </ span >
8788 < span part ="summary-content "> < slot name ="summary "> </ slot > </ span >
8889 </ div >
8990 </ div >
90- < div part ="content " aria-hidden$ ="[[_getAriaHidden(opened)]] ">
91+ < section id$ =" [[_contentId]] " part ="content " aria-hidden$ ="[[_getAriaHidden(opened)]] ">
9192 < slot > </ slot >
92- </ div >
93+ </ section >
9394 ` ;
9495 }
9596
@@ -136,6 +137,8 @@ class DetailsElement extends ControlStateMixin(ElementMixin(ThemableMixin(Polyme
136137
137138 ready ( ) {
138139 super . ready ( ) ;
140+ const uniqueId = ( DetailsElement . _uniqueId = 1 + DetailsElement . _uniqueId || 0 ) ;
141+ this . _contentId = `${ this . constructor . is } -content-${ uniqueId } ` ;
139142 // prevent Shift + Tab on content from host blur
140143 this . _collapsible . addEventListener ( 'keydown' , ( e ) => {
141144 if ( e . shiftKey && e . keyCode === 9 ) {
Original file line number Diff line number Diff line change @@ -129,6 +129,40 @@ describe('vaadin-details', () => {
129129 details . opened = true ;
130130 expect ( content . getAttribute ( 'aria-hidden' ) ) . to . equal ( 'false' ) ;
131131 } ) ;
132+
133+ it ( 'should set aria-controls on toggle button' , ( ) => {
134+ const idRegex = / ^ v a a d i n - d e t a i l s - c o n t e n t - \d + $ / ;
135+ expect ( idRegex . test ( toggle . getAttribute ( 'aria-controls' ) ) ) . to . be . true ;
136+ } ) ;
137+ } ) ;
138+
139+ describe ( 'unique IDs' , ( ) => {
140+ const idRegex = / ^ v a a d i n - d e t a i l s - c o n t e n t - \d + $ / ;
141+ let container , details ;
142+
143+ beforeEach ( ( ) => {
144+ container = fixtureSync ( `
145+ <div>
146+ <vaadin-details>
147+ <div slot="summary">Summary</div>
148+ <input>
149+ </vaadin-details>
150+ <vaadin-details>
151+ <div slot="summary">Summary</div>
152+ <input>
153+ </vaadin-details>
154+ </div>
155+ ` ) ;
156+ details = container . querySelectorAll ( 'vaadin-details' ) ;
157+ } ) ;
158+
159+ it ( 'should set unique id on the content' , ( ) => {
160+ const detailsId1 = details [ 0 ] . _collapsible . id ;
161+ const detailsId2 = details [ 1 ] . _collapsible . id ;
162+ expect ( idRegex . test ( detailsId1 ) ) . to . be . true ;
163+ expect ( idRegex . test ( detailsId2 ) ) . to . be . true ;
164+ expect ( detailsId1 ) . to . not . equal ( detailsId2 ) ;
165+ } ) ;
132166 } ) ;
133167
134168 describe ( 'keyboard events' , ( ) => {
You can’t perform that action at this time.
0 commit comments