diff --git a/package.json b/package.json index 45758c8..52b696c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webfactory-accordion", - "version": "5.1.1", + "version": "5.1.2", "description": "A tiny script that progressively enhances static HTML with accessible and keyboard-enabled accordion functionality.", "main": "src/main.js", "repository": { diff --git a/src/accordion.js b/src/accordion.js index 185a24a..3d1f600 100644 --- a/src/accordion.js +++ b/src/accordion.js @@ -133,7 +133,7 @@ class wfaccordionGroup { ...options }; this.accordions = Array.from(this.group.querySelectorAll(this.settings.accordionRoot)) - .filter(root => this.group === root.parentElement) + .filter(root => this.group === root.closest(this.settings.accordionGroup)) .map((root) => { return new wfaccordion(root, options); }); diff --git a/tests/basic-integration.test.js b/tests/basic-integration.test.js index 3bc17e0..52f3348 100644 --- a/tests/basic-integration.test.js +++ b/tests/basic-integration.test.js @@ -116,6 +116,19 @@ describe('Simple accordion e2e tests', () => { expect(isExpanded(accordion)).toBeTruthy(); }); + test('Accordion with more complicated markup and additional wrappers can be opened', () => { + createAccordionGroup({hasAdditionalWrappers: true}); + + wfaccordionsInit(); + + const accordion = document.querySelector('.js-accordion'); + const trigger = accordion.querySelector('.js-accordion__trigger'); + + simulateClick(trigger); + + expect(isExpanded(accordion)).toBeTruthy(); + }); + test('Nested accordion expands parent accordion if nested accordion is remotely opened', () => { const customOuterId = 'outer-accordion'; const customInnerId = 'nested-inner-accordion'; diff --git a/tests/mocks/accordion.html.js b/tests/mocks/accordion.html.js index 710be62..2df6857 100644 --- a/tests/mocks/accordion.html.js +++ b/tests/mocks/accordion.html.js @@ -7,6 +7,7 @@ * @param {string} options.placeholder – e.g. `…` * @param {string} options.placeholderContent – e.g. `I am ` * @param {boolean} options.hasPanel – optional param to simulate an accordion without panel + * @param {boolean} options.hasAdditionalWrappers – optional param to simulate more complicated markup */ export function createAccordionGroup(options) { // set defaults @@ -16,7 +17,8 @@ export function createAccordionGroup(options) { dataAttr: undefined, placeholder: undefined, placeholderContent: undefined, - hasPanel: true + hasPanel: true, + hasAdditionalWrappers: false, }, ...options } @@ -25,15 +27,19 @@ export function createAccordionGroup(options) { let placeholderInnerHtml = options.placeholderContent ? options.placeholderContent : `Title`; let placeholderOuterHtml = options.placeholder ? options.placeholder : `${placeholderInnerHtml}`; let panel = options.hasPanel ? `Text` : ''; + let additionalWrapperOpen = options.hasAdditionalWrappers ? '' : ''; + let additionalWrapperClose = options.hasAdditionalWrappers ? '' : ''; document.body.innerHTML = ` + ${additionalWrapperOpen} ${placeholderOuterHtml} ${panel} + ${additionalWrapperClose} `; }