This presentation uses an out-of-the box HTML slideshow script which by itself is inaccessible. Keybindings exist to traverse forward and backward with arrow keys, but focus never shifts as the slides advance. The slides themselves are well structured, so you can use a read all command to listen to everything linearly. I've also added a live region which should work well for screen readers that support live regions. As you traverse through the slides using arrow keys, the slide's content will be added to the live region. If all else fails, you can also access the slideshow content by turning off CSS and JavaScript.
What they are, how they work, and their challenges
Alice Boxhall, Google
Karl Groves, The Paciello Group
Root element | 1 |
Document metadata | 6 |
Scripting | 2 |
Sections | 101 |
Grouping | 14 |
Text-level semantics | 26 |
Edits | 2 |
Embedded content | 12 |
Tables | 10 |
Forms | 14 + 232 |
"Interactive elements" | 4 |
Total | 124 |
1. Counting all headings as one type
2. 23 types of <input>
<div>
s all the way down!<a href="..." class="selected sunken-menu-item">
<span class="octicon octicon-code"></span>
<span class="full-word">Code</span>
</a>
<gh-tab selected="true" icon="code">Code</gh-tab>
Reusable | Encapsulated |
Composeable | Extensible |
<link rel="import" href="gmail-widgets.html">
...
<gmail-app>
<gmail-folderlist>...</gmail-folderlist>
<gmail-toolbar>
<gmail-buttongroup>
 <button is="gmail-button" icon="return" action="back" tip="Back to search results"></button>
<gmail-buttongroup>
<template>
<template>
<template id="hello"><p>Hello, world!</p></template>
<script>
for(var i = 0; i < 3; i++) {
document.appendElement(
$("#hello").content.cloneNode(true));
}
</script>
<p>Hello, world!</p>
<p>Hello, world!</p>
<p>Hello, world!</p>
"unicorn-bike"
)
Object.prototype
)
Callback | Called when... |
---|---|
createdCallback() | this element instance is created |
attachedCallback() | this element is inserted into the document> |
attributeChangedCallback( | an attribute was added, removed, or updated |
detachedCallback() | this element is removed from the document |
function GmailButton() {}
GmailButton.prototype = {
__proto__: HTMLButtonElement.prototype,
createdCallback: function() {
var templateContent = $('template').content;
this.appendChild(templateContent.cloneNode(true)};
},
attributeChangedCallback: function(att, was, is) {},
extends: 'button'
}
document.registerElement('gmail-button', GmailButton);
<gmail-button></gmail-button>
<link rel="import" href="gmail-widgets.html">
document
references the importing document:
document.registerElement()
operates on the importing document
<label>
, or the focus style behavior of <button>
?
Specification | Chrome | Opera | Firefox | Safari | IE |
---|---|---|---|---|---|
Templates | Yes | Yes | Yes | No | No |
HTML Imports | Yes | Yes | Sort of | No | No |
Custom Elements | Yes | Yes | Sort of | No | No |
Shadow DOM | Yes | Yes | Sort of | No | No |
You can totally make these things accessible. This changes nothing from the accessibility perspective.
Web Components are the new jQuery plugins
90% ofscience fictionjQuery pluginsWeb Components are shit.-- Theodore Sturgeon
Something Karl Groves said: I'm writing a new talk titled "Demystifying Web Components Accessibility". It has one slide. It says "Same as regular ole web accessibility. Seriously. Stop overthinking it"
Things are changing
The final shape is yet to be decided
We have work to do!