Ava Wroten
She/Her
On Gitlab @gaiety
Or Github @sharpshark28
A project feature saved by A11y
Mouse Drag & Drop
Do we support Touch?
What about A11y?
A11Y
A....11.....Y
Accessibility
Equity
Limited mobility, muscle slowness, tremors, low vision, color blindness, partial hearing loss, etc
Web assistive technologies commonly help with...
👩🏽🔬 👨🏾🎨 👩🏻🔧 👨🏼✈️
I build software for humans
So I did some research...
W3C Pattern Rearrangable Listbox
✔️ Mouse Drag & Drop
✔️ Touch Drag & Drop
✔️ High Ember Observer Ranking
Heres the final result...
index.hbs
<SortableGroupAccessible
tabindex="0"
class="border focus:border-teal-400"
> Foo </SortableGroupAccessible>
sortable-group-accessible.hbs
<div ...attributes>
{{yield}}
</div>
rendered html
<div tabindex="0" class="border focus:border-teal-400"
> Foo </div>
sortable-group-accessible.hbs
<div
{{on 'focus' this.handleFocus}}
{{on 'blur' this.handleBlur}}
{{key-up this.handleArrowUp key='ArrowUp'}}
{{key-up this.handleArrowDown key='ArrowDown'}}
modifiers/key-up.js
import { modifier } from 'ember-modifier';
const listener = (evt) => {
if (!desiredKey || desiredKey === evt.key) handler(evt);
}
export default modifier(function keyUp(element, [handler], { key: desiredKey }) {
element.addEventListener('keyup', listener);
return () => { element.removeEventListener('keyup', listener); }
});
modifiers/key-up-test.js
test('it can listen for specific key up events', async function(assert) {
this.keyUp = ({ key }) => {
assert.step('key up');
assert.equal(key, 'Enter');
};
await render(hbs`
<div {{key-up this.keyUp}} data-test-id='keyup'></div>`);
let selector = '[data-test-id=keyup]';
await triggerKeyEvent(selector, 'keyup', 'Enter');
assert.verifySteps(['key up']);
});
index-test.js
assert.dom(findAll('[data-test-id=item]')[0]).hasText('Item 1');
assert.dom(findAll('[data-test-id=item]')[1]).hasText('Item 2');
await triggerEvent('[data-test-id=group]', 'focus');
await click('[data-test-id=sort-down]');
assert.dom(findAll('[data-test-id=item]')[0]).hasText('Item 2');
assert.dom(findAll('[data-test-id=item]')[1]).hasText('Item 1');
v2.x.x ember-sortable
Hire someone different than you.
Make A11y a priority at your next design meeting!
Thank you