Skip to content
This repository has been archived by the owner on Sep 22, 2022. It is now read-only.

Commit

Permalink
Merge pull request #53 from github/nested
Browse files Browse the repository at this point in the history
Fix nested details misfiring close events
  • Loading branch information
muan authored Mar 10, 2020
2 parents fd291fb + a020337 commit 7a31780
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 14 deletions.
4 changes: 2 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ function allowClosingDialog(details: Element): boolean {

function onSummaryClick(event: Event): void {
if (!(event.currentTarget instanceof Element)) return
const details = event.currentTarget.closest('details[open]')
if (!details) return
const details = event.currentTarget.closest('details')
if (!details || !details.hasAttribute('open')) return

// Prevent summary click events if details-dialog-close was cancelled
if (!allowClosingDialog(details)) {
Expand Down
31 changes: 19 additions & 12 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,25 @@ describe('details-dialog-element', function() {
beforeEach(function() {
const container = document.createElement('div')
container.innerHTML = `
<details>
<summary>Click</summary>
<details-dialog>
<p>Hello</p>
<button data-button>Button</button>
<button hidden>hidden</button>
<div hidden><button>hidden</button></div>
<details><button>Button in closed details</button></details>
<button ${CLOSE_ATTR}>Goodbye</button>
</details-dialog>
<details open>
<details id="details">
<summary id="summary">Click</summary>
<details-dialog>
<p>Hello</p>
<button data-button>Button</button>
<button hidden>hidden</button>
<div hidden><button>hidden</button></div>
<details><button>Button in closed details</button></details>
<button ${CLOSE_ATTR}>Goodbye</button>
</details-dialog>
</details>
</details>
`
document.body.append(container)

details = document.querySelector('details')
details = document.querySelector('#details')
dialog = details.querySelector('details-dialog')
summary = details.querySelector('summary')
summary = details.querySelector('#summary')
close = dialog.querySelector(CLOSE_SELECTOR)
})

Expand Down Expand Up @@ -135,6 +137,11 @@ describe('details-dialog-element', function() {
allowCloseToHappen = true
close.click()
assert(!details.open)
assert.equal(closeRequestCount, 5)

summary.click()
assert(details.open)
assert.equal(closeRequestCount, 5)
})

describe('when no summary element is present', function() {
Expand Down

0 comments on commit 7a31780

Please sign in to comment.