ottawajs: angular accessibility

47
Single Page Apps, AngularJS and Accessibility

Upload: derek-featherstone

Post on 13-Apr-2017

1.157 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: OttawaJS: angular accessibility

Single Page Apps, AngularJS and Accessibility

Page 2: OttawaJS: angular accessibility

Derek Featherstone

[email protected] @feather

Page 3: OttawaJS: angular accessibility
Page 4: OttawaJS: angular accessibility
Page 5: OttawaJS: angular accessibility

All this has happened before, and it will all happen again.

Page 6: OttawaJS: angular accessibility

Single page apps

Page 7: OttawaJS: angular accessibility

Focus management

Page 8: OttawaJS: angular accessibility
Page 9: OttawaJS: angular accessibility

Getting lost

Page 10: OttawaJS: angular accessibility
Page 11: OttawaJS: angular accessibility
Page 12: OttawaJS: angular accessibility

Angular and Accessibility

Page 13: OttawaJS: angular accessibility

examples.simplyaccessible.com/angular-ticket-tracker

Page 14: OttawaJS: angular accessibility

PROBLEMCreating dynamic page titles What responds to clicks? Focus management/keyboard accessAdding ARIA

Page 15: OttawaJS: angular accessibility

sateach.es/spangular

Page 16: OttawaJS: angular accessibility

Dynamic page titles

Page 17: OttawaJS: angular accessibility
Page 18: OttawaJS: angular accessibility
Page 19: OttawaJS: angular accessibility

<html class="no-js" ng-app="a11yTicketApp" lang="en"><title ng-bind="title">Accessibility Ticket Tracker</title>

Page 20: OttawaJS: angular accessibility

.config(function ($routeProvider) { $routeProvider .when('/main', { templateUrl: 'views/main.html', controller: 'MainCtrl', title: 'Accessibility Ticket Tracker' }) .when('/edit/:id', { templateUrl: 'views/edit.html', controller: 'EditCtrl', title: 'Edit Ticket' }) ... .otherwise({ redirectTo: '/main' });})

Page 21: OttawaJS: angular accessibility

What do we click?

Page 22: OttawaJS: angular accessibility

<div ng-click="doSomething(id);" class="im-a-button">

I'm not a button </div>

Page 23: OttawaJS: angular accessibility

<input type="button" value="Cancel" class="btn btn-primary" ng-click="go('main')">

Page 24: OttawaJS: angular accessibility

<a href=“#expandDetails—J_vholpQ_vUoGmtAnJR"> Color contrast of form labels </a>

Page 25: OttawaJS: angular accessibility

<a href="#expandDetails-{{ ticket.$id }}" ng-click="toggleTicketDetails($event,$index)"> {{ ticket.summary }}

<span class="visuallyhidden">{{ index==$index ? " - click to hide details" : " - click to show details"}}</span>

</a>

Page 26: OttawaJS: angular accessibility

Focus management

Page 27: OttawaJS: angular accessibility
Page 28: OttawaJS: angular accessibility
Page 29: OttawaJS: angular accessibility
Page 30: OttawaJS: angular accessibility

$('h1').attr("tabIndex", -1)$('h1').focus();

Page 31: OttawaJS: angular accessibility
Page 32: OttawaJS: angular accessibility
Page 33: OttawaJS: angular accessibility
Page 34: OttawaJS: angular accessibility

Hiding things

Page 35: OttawaJS: angular accessibility
Page 36: OttawaJS: angular accessibility

<a href="#/edit/{{ ticket.$id }}" class="edit-btn"> <span class="glyphicon glyphicon-edit" aria-hidden="true"></span> <span class="visuallyhidden"> Edit {{ ticket.summary }} </span></a>

Page 37: OttawaJS: angular accessibility

Using ARIA

Page 38: OttawaJS: angular accessibility
Page 39: OttawaJS: angular accessibility
Page 40: OttawaJS: angular accessibility
Page 41: OttawaJS: angular accessibility

<div role="status" id="ticket-table-info" aria-live="polite" aria-atomic=“true">

Showing {{(tickets|filter:search).length}} of {{tickets.length}} </div>

Page 42: OttawaJS: angular accessibility

ngAria

Page 43: OttawaJS: angular accessibility
Page 44: OttawaJS: angular accessibility
Page 45: OttawaJS: angular accessibility

SUMMARYSemantic markup still matters. Bind your clicks to natively clickable controls. Take control and manage focus. Provide backup mechanisms for way finding and navigation Use ARIA to your advantage.

Page 46: OttawaJS: angular accessibility

Derek Featherstone

[email protected] @feather

Page 47: OttawaJS: angular accessibility