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
Web assistive technologies commonly help with...
Limited mobility, muscle slowness, tremors, low vision, color blindness, partial hearing loss, etc
👩🏽🔬 👨🏾🎨 👩🏻🔧 👨🏼✈️
I build software for humans
So I did some research...
✔️ Mouse Drag & Drop
✔️ Touch Drag & Drop
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!