diff --git a/CHANGELOG.md b/CHANGELOG.md index 4679bab..5cc75fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Remove `tabindex="0"` - Add `role="region"` - Swap `aria-expanded` for `data-expanded` and updated example usage +- Yield button to control expanding - Use function helpers - Update animation utils diff --git a/addon/components/expander/button.hbs b/addon/components/expander/button.hbs new file mode 100644 index 0000000..3677324 --- /dev/null +++ b/addon/components/expander/button.hbs @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/addon/components/expander/index.hbs b/addon/components/expander/index.hbs index 511597f..2c49200 100644 --- a/addon/components/expander/index.hbs +++ b/addon/components/expander/index.hbs @@ -1,10 +1,16 @@ {{! template-lint-disable no-unsupported-role-attributes }} -{{this.registerContent - (component - this.ExpanderContent onInsert=this.registerContentElement style=this.style +{{this.registerComponents + (hash + Button=(component + this.ExpanderButton aria-controls=this.id aria-expanded=this.isExpanded + ) + Content=(component + this.ExpanderContent onInsert=this.registerContentElement style=this.style + ) ) }}
{ - this.Content = Content; + registerComponents = (components) => { + assign(this, components); }; get api() { return seal( assign(this._api, { Content: this.renderContent ? this.Content : null, + Button: this.Button, contentElement: this.contentElement, toggle: this.toggle, expand: this.expand, diff --git a/app/components/expander/content.js b/app/components/expander/content.js deleted file mode 100644 index 3dff3ac..0000000 --- a/app/components/expander/content.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@zestia/ember-expander/components/expander/content'; diff --git a/tests/dummy/app/templates/application.hbs b/tests/dummy/app/templates/application.hbs index d5a9abb..f2b8927 100644 --- a/tests/dummy/app/templates/application.hbs +++ b/tests/dummy/app/templates/application.hbs @@ -7,15 +7,10 @@
- - + + Hello @@ -57,25 +47,15 @@ Nested - - + - - + Hello diff --git a/tests/integration/components/expander-test.js b/tests/integration/components/expander-test.js index 257421f..9d72129 100644 --- a/tests/integration/components/expander-test.js +++ b/tests/integration/components/expander-test.js @@ -39,12 +39,35 @@ module('expander', function (hooks) { assert.dom('.expander').hasAttribute('role', 'region'); }); + test('it render a button', async function (assert) { + assert.expect(2); + + await render(hbs` + + + + `); + + assert.ok( + find('.expander') + .getAttribute('id') + .match(/[\w\d]+/) + ); + + assert + .dom('.expander__button') + .hasAttribute('aria-controls', find('.expander').getAttribute('id')); + }); + test('expanding', async function (assert) { - assert.expect(9); + assert.expect(11); await render(hbs` - + + Expand + +
@@ -53,14 +76,16 @@ module('expander', function (hooks) { assert.dom('.expander').hasAttribute('data-expanded', 'false'); assert.dom('.expander').hasAttribute('data-transitioning', 'false'); + assert.dom('.expander__button').hasAttribute('aria-expanded', 'false'); assert.dom('.expander__content').doesNotExist(); - click('button'); + click('.expander__button'); await waitFor('.expander'); assert.dom('.expander').hasAttribute('data-expanded', 'true'); assert.dom('.expander').hasAttribute('data-transitioning', 'true'); + assert.dom('.expander__button').hasAttribute('aria-expanded', 'true'); assert.dom('.expander__content').exists(); assert.dom('.expander__content').hasAttribute('style', 'max-height: 10px'); @@ -73,11 +98,14 @@ module('expander', function (hooks) { }); test('collapsing', async function (assert) { - assert.expect(9); + assert.expect(11); await render(hbs` - + + Collapse + +
@@ -86,15 +114,17 @@ module('expander', function (hooks) { assert.dom('.expander').hasAttribute('data-expanded', 'true'); assert.dom('.expander').hasAttribute('data-transitioning', 'false'); + assert.dom('.expander__button').hasAttribute('aria-expanded', 'true'); assert.dom('.expander__content').exists(); assert.dom('.expander__content').hasAttribute('style', ''); - click('button'); + click('.expander__button'); await waitFor('.expander'); assert.dom('.expander').hasAttribute('data-expanded', 'false'); assert.dom('.expander').hasAttribute('data-transitioning', 'true'); + assert.dom('.expander__button').hasAttribute('aria-expanded', 'false'); assert.dom('.expander__content').hasAttribute('style', 'max-height: 0px'); await waitForAnimation('.expander__content', { @@ -117,17 +147,20 @@ module('expander', function (hooks) { @onCollapsed={{this.handleCollapsed}} as |expander| > - + + Toggle + + Hello World
`); - click('button'); + click('.expander__button'); await waitUntil(this.midWay); - await click('button'); + await click('.expander__button'); assert.verifySteps(['collapsed']); }); @@ -142,7 +175,10 @@ module('expander', function (hooks) { @onCollapsed={{this.handleCollapsed}} as |expander| > - + + Toggle + + Hello World @@ -152,10 +188,10 @@ module('expander', function (hooks) { this.set('handleExpanded', () => assert.step('expanded')); this.set('handleCollapsed', () => assert.step('collapsed')); - click('button'); + click('.expander__button'); await waitUntil(this.midWay); - await click('button'); + await click('.expander__button'); assert.verifySteps(['expanded']); }); @@ -177,6 +213,7 @@ module('expander', function (hooks) { keys(this.api), [ 'Content', + 'Button', 'contentElement', 'toggle', 'expand', @@ -214,18 +251,21 @@ module('expander', function (hooks) { @onCollapsed={{this.handleCollapsed}} as |expander| > - + + Toggle + + Hello World
`); - await click('button'); + await click('.expander__button'); assert.verifySteps(['expanded']); - await click('button'); + await click('.expander__button'); assert.verifySteps(['collapsed']); }); @@ -241,15 +281,18 @@ module('expander', function (hooks) { @onCollapsed={{this.handleCollapsed}} as |expander| > - + + Collapse + + Hello World
`); - click('button'); - await click('button'); + click('.expander__button'); + await click('.expander__button'); assert.verifySteps(['collapsed']); }); @@ -261,15 +304,18 @@ module('expander', function (hooks) { await render(hbs` - + + Expand + + Hello World `); - click('button'); - await click('button'); + click('.expander__button'); + await click('.expander__button'); assert.verifySteps(['expanded']); }); @@ -281,7 +327,10 @@ module('expander', function (hooks) { await render(hbs` - + + Expand + + Hello World