├── lesson1-overview
├── README.md
└── 06-experiencing-screen-reader
│ ├── koala.jpg
│ ├── basic.html
│ ├── main.css
│ └── modal.js
├── lesson5-semantics-aria
├── README.md
├── 21-dialog
│ ├── uair-2000.jpg
│ ├── solution
│ │ ├── uair-2000.jpg
│ │ ├── modal.js
│ │ └── main.css
│ ├── modal.js
│ └── main.css
├── 06-radio-group
│ ├── main.css
│ ├── solution
│ │ ├── main.css
│ │ ├── radiogroup.html
│ │ └── radiogroup.js
│ ├── radiogroup.html
│ └── radiogroup.js
├── 19-aria-live
│ ├── main.css
│ ├── number.js
│ └── number.html
├── 03-first-steps
│ ├── checkboxes.html
│ ├── solution
│ │ ├── checkboxes.html
│ │ ├── main.css
│ │ └── checkboxes.js
│ ├── main.css
│ └── checkboxes.js
├── 02-why-aria
│ ├── checkboxes.html
│ ├── main.css
│ └── checkboxes.js
└── 13-combobox
│ ├── combobox.html
│ ├── solution
│ ├── combobox.html
│ └── combobox.css
│ └── combobox.css
├── lesson3-semantics-built-in
├── README.md
├── 05-writing-semantic-html
│ ├── wombat.jpg
│ ├── wombats.js
│ ├── main.css
│ └── wombats.html
├── 17-text-alternatives
│ ├── images
│ │ ├── bee.jpg
│ │ ├── dog.jpg
│ │ ├── goat.jpg
│ │ ├── logo.png
│ │ ├── coffee.jpg
│ │ ├── football.jpg
│ │ ├── telephone.jpg
│ │ ├── 160204193356-01-cat-500.jpg
│ │ └── search.svg
│ ├── main.css
│ └── funion.html
├── 02-chromevox-lite
│ ├── embed.css
│ ├── chromevox-no-background.svg
│ └── chromevox-no-background-off.svg
├── 16-labelling-input-elements
│ ├── label.js
│ └── solution
│ │ └── label.js
└── 03-experience-screen-reader
│ └── contact.html
├── lesson4-semantics-navigating
├── README.md
├── 08-link-text
│ ├── logo.png
│ ├── sandwich.jpg
│ ├── cappuccino.jpg
│ ├── solution
│ │ ├── logo.png
│ │ ├── sandwich.jpg
│ │ ├── cappuccino.jpg
│ │ ├── main.css
│ │ └── index.html
│ ├── main.css
│ └── index.html
└── 10-landmarks
│ └── blog.css
├── CODEOWNERS
├── .gitignore
├── lesson2-focus
├── 01-basic-form
│ ├── uair-2000.jpg
│ ├── README.md
│ └── main.css
├── 02-dom-order
│ ├── images
│ │ ├── bee.jpg
│ │ ├── cat.jpg
│ │ ├── dog.jpg
│ │ ├── goat.jpg
│ │ ├── coffee.jpg
│ │ ├── football.jpg
│ │ ├── telephone.jpg
│ │ └── search.svg
│ ├── solution
│ │ ├── images
│ │ │ ├── bee.jpg
│ │ │ ├── cat.jpg
│ │ │ ├── dog.jpg
│ │ │ ├── goat.jpg
│ │ │ ├── coffee.jpg
│ │ │ ├── football.jpg
│ │ │ ├── telephone.jpg
│ │ │ └── search.svg
│ │ ├── main.css
│ │ └── index.html
│ ├── README.md
│ ├── main.css
│ └── index.html
├── 06-skip-links
│ ├── images
│ │ ├── bee.jpg
│ │ ├── cat.jpg
│ │ ├── dog.jpg
│ │ ├── goat.jpg
│ │ ├── coffee.jpg
│ │ ├── football.jpg
│ │ ├── telephone.jpg
│ │ └── search.svg
│ ├── README.md
│ ├── main.css
│ └── index.html
├── 03-managing-focus
│ ├── images
│ │ └── vegemite.jpg
│ ├── solution
│ │ ├── images
│ │ │ └── vegemite.jpg
│ │ └── scripts
│ │ │ └── main.js
│ ├── README.md
│ └── scripts
│ │ └── main.js
├── 04-offscreen-content
│ ├── README.md
│ ├── solution
│ │ └── blog.css
│ └── blog.css
├── 07-modals-and-keyboard-traps
│ ├── README.md
│ ├── main.css
│ ├── solution
│ │ ├── main.css
│ │ ├── index.html
│ │ └── modal.js
│ ├── index.html
│ └── modal.js
└── 05-radio-group
│ ├── main.css
│ ├── solution
│ ├── main.css
│ ├── index.html
│ └── radiogroup.js
│ ├── README.md
│ ├── index.html
│ └── radiogroup.js
├── final-project
├── ecommerce-site
│ ├── images
│ │ ├── art.jpg
│ │ ├── bag.png
│ │ ├── food.jpg
│ │ ├── fashion.jpg
│ │ ├── music.jpg
│ │ ├── nature.jpg
│ │ ├── sport.jpg
│ │ ├── star-on.png
│ │ ├── arrow-up.png
│ │ ├── landscape.jpg
│ │ ├── star-off.png
│ │ ├── vacation.jpg
│ │ ├── woodfire.jpg
│ │ ├── workspace.jpg
│ │ ├── architecture.jpg
│ │ ├── card-guide.jpg
│ │ ├── coffee-cups.jpg
│ │ ├── decoration.jpg
│ │ ├── down-arrow.png
│ │ ├── photography.jpg
│ │ └── travelling.jpg
│ ├── solution
│ │ ├── images
│ │ │ ├── art.jpg
│ │ │ ├── bag.png
│ │ │ ├── food.jpg
│ │ │ ├── music.jpg
│ │ │ ├── sport.jpg
│ │ │ ├── arrow-up.png
│ │ │ ├── fashion.jpg
│ │ │ ├── nature.jpg
│ │ │ ├── star-off.png
│ │ │ ├── star-on.png
│ │ │ ├── vacation.jpg
│ │ │ ├── woodfire.jpg
│ │ │ ├── card-guide.jpg
│ │ │ ├── decoration.jpg
│ │ │ ├── down-arrow.png
│ │ │ ├── landscape.jpg
│ │ │ ├── travelling.jpg
│ │ │ ├── wallabies.jpg
│ │ │ ├── workspace.jpg
│ │ │ ├── architecture.jpg
│ │ │ ├── coffee-cups.jpg
│ │ │ └── photography.jpg
│ │ ├── scripts
│ │ │ ├── shopping-bag.js
│ │ │ ├── number.js
│ │ │ └── stars.js
│ │ ├── third_party
│ │ │ └── handlebars-grouped-each.js
│ │ └── placeholder.html
│ ├── scripts
│ │ ├── shopping-bag.js
│ │ ├── number.js
│ │ └── stars.js
│ ├── third_party
│ │ └── handlebars-grouped-each.js
│ └── placeholder.html
├── README.md
└── ANSWERS.md
├── lesson6-styling
├── 01-focus-styles
│ ├── README.md
│ ├── main.css
│ ├── solution
│ │ ├── main.css
│ │ └── index.html
│ └── index.html
├── 02-style-aria-states
│ ├── README.md
│ ├── main.css
│ ├── disclosure.js
│ ├── solution
│ │ ├── disclosure.js
│ │ ├── main.css
│ │ └── index.html
│ └── index.html
├── 03-contrast-audit
│ ├── blog.css
│ └── solution
│ │ └── blog.css
└── 04-mobile-screenreader
│ └── blog.css
├── LICENSE
├── README.md
└── styles
└── components.css
/lesson1-overview/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson5-semantics-aria/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @udacity/active-public-content
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | bower_components
4 | *.sketch
5 | stock-photos
6 |
--------------------------------------------------------------------------------
/lesson2-focus/01-basic-form/uair-2000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/01-basic-form/uair-2000.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/bee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/bee.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/cat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/cat.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/dog.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/goat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/goat.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/bee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/bee.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/cat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/cat.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/dog.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/art.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/art.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/bag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/bag.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/food.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/food.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/coffee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/coffee.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/goat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/goat.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/fashion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/fashion.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/music.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/music.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/nature.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/nature.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/sport.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/sport.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/star-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/star-on.png
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/football.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/football.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/telephone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/images/telephone.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/coffee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/coffee.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/football.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/football.jpg
--------------------------------------------------------------------------------
/lesson5-semantics-aria/21-dialog/uair-2000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson5-semantics-aria/21-dialog/uair-2000.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/arrow-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/arrow-up.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/landscape.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/landscape.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/star-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/star-off.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/vacation.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/vacation.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/woodfire.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/woodfire.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/workspace.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/workspace.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/telephone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/06-skip-links/images/telephone.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/architecture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/architecture.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/card-guide.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/card-guide.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/coffee-cups.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/coffee-cups.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/decoration.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/decoration.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/down-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/down-arrow.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/photography.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/photography.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/images/travelling.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/images/travelling.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/art.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/art.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/bag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/bag.png
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/bee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/bee.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/cat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/cat.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/dog.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/goat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/goat.jpg
--------------------------------------------------------------------------------
/lesson2-focus/03-managing-focus/images/vegemite.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/03-managing-focus/images/vegemite.jpg
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/08-link-text/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson4-semantics-navigating/08-link-text/logo.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/food.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/food.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/music.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/music.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/sport.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/sport.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/coffee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/coffee.jpg
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/08-link-text/sandwich.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson4-semantics-navigating/08-link-text/sandwich.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/arrow-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/arrow-up.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/fashion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/fashion.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/nature.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/nature.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/star-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/star-off.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/star-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/star-on.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/vacation.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/vacation.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/woodfire.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/woodfire.jpg
--------------------------------------------------------------------------------
/lesson1-overview/06-experiencing-screen-reader/koala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson1-overview/06-experiencing-screen-reader/koala.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/football.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/football.jpg
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/telephone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/02-dom-order/solution/images/telephone.jpg
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/08-link-text/cappuccino.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson4-semantics-navigating/08-link-text/cappuccino.jpg
--------------------------------------------------------------------------------
/lesson5-semantics-aria/21-dialog/solution/uair-2000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson5-semantics-aria/21-dialog/solution/uair-2000.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/card-guide.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/card-guide.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/decoration.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/decoration.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/down-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/down-arrow.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/landscape.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/landscape.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/travelling.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/travelling.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/wallabies.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/wallabies.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/workspace.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/workspace.jpg
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/08-link-text/solution/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson4-semantics-navigating/08-link-text/solution/logo.png
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/architecture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/architecture.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/coffee-cups.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/coffee-cups.jpg
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/images/photography.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/final-project/ecommerce-site/solution/images/photography.jpg
--------------------------------------------------------------------------------
/lesson2-focus/03-managing-focus/solution/images/vegemite.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson2-focus/03-managing-focus/solution/images/vegemite.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/05-writing-semantic-html/wombat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/05-writing-semantic-html/wombat.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/bee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/bee.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/dog.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/goat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/goat.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/logo.png
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/08-link-text/solution/sandwich.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson4-semantics-navigating/08-link-text/solution/sandwich.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/coffee.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/coffee.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/football.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/football.jpg
--------------------------------------------------------------------------------
/lesson4-semantics-navigating/08-link-text/solution/cappuccino.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson4-semantics-navigating/08-link-text/solution/cappuccino.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/telephone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/telephone.jpg
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/160204193356-01-cat-500.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/udacity/ud891/HEAD/lesson3-semantics-built-in/17-text-alternatives/images/160204193356-01-cat-500.jpg
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/README.md:
--------------------------------------------------------------------------------
1 | Visual presentation doesn't match DOM order
2 | There are floated elements and absolutely positioned elements, completely screwing up the
3 | tab flow.
4 | Currently failing audit tool :\
5 |
--------------------------------------------------------------------------------
/lesson6-styling/01-focus-styles/README.md:
--------------------------------------------------------------------------------
1 | The buttons on this page don’t currently have focus styles, making them pretty
2 | much useless to a keyboard user. With your new CSS knowledge, try using the
3 | :focus pseudo-class to give these buttons interesting focus states.
4 |
--------------------------------------------------------------------------------
/lesson6-styling/02-style-aria-states/README.md:
--------------------------------------------------------------------------------
1 | See if you can do a better job styling this button using ARIA states. One huge
2 | benefit to styling with ARIA is that it provides visual feedback that you've
3 | applied the state correctly, which can act as a safeguard when you're testing
4 | and debugging your code.
5 |
--------------------------------------------------------------------------------
/lesson2-focus/04-offscreen-content/README.md:
--------------------------------------------------------------------------------
1 | Using either the [Accessibility Developer Tools extension](https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb?hl=en) or `document.activeElement` see if you can track down the element that's
2 | stealing focus and fix the page.
3 |
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/README.md:
--------------------------------------------------------------------------------
1 | Tabbing around the page should reveal a mixed up tab order. Read through the
2 | `index.html` and see if there are any places where elements may be in the wrong
3 | order. If something looks out of place see if you can fix it so the tab order
4 | works as expected. If you get stuck you can refer to the `solution` directory.
5 |
--------------------------------------------------------------------------------
/lesson2-focus/07-modals-and-keyboard-traps/README.md:
--------------------------------------------------------------------------------
1 | See if you can figure out what needs to be added to the `modal.js` file to trap
2 | the keyboard.
3 |
4 | There's quite a bit of code involved in created a keyboard trap so don't worry
5 | if it seems overwhelming. Take your time and refer back to [this video](https://www.udacity.com/course/viewer#!/c-ud891/l-7962031279/m-7962141423)
6 | if you get stuck.
7 |
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/images/search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson2-focus/06-skip-links/images/search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson2-focus/02-dom-order/solution/images/search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/17-text-alternatives/images/search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lesson2-focus/01-basic-form/README.md:
--------------------------------------------------------------------------------
1 | Navigate the page using nothing but your keyboard.
2 | You'll need to search for a ticket that matches the following criteria:
3 |
4 | The ticket should...
5 |
6 | - Be a round trip
7 | - to Melbourne
8 | - leaving on 10/12/2017
9 | - returning on 10/23/2017
10 | - window seat
11 | - and you DO NOT want to receive promotional offers 😀
12 |
13 | When you have all the field filled out correctly you can return to the lesson
14 |
--------------------------------------------------------------------------------
/final-project/ecommerce-site/scripts/shopping-bag.js:
--------------------------------------------------------------------------------
1 | function ShoppingBag(bag, count) {
2 | this._el = bag;
3 | this._el.setAttribute('data-count', count);
4 | var itemPhrase = count === 1 ? `${count} item` : `${count} items`;
5 | this._el.setAttribute('aria-label', `${itemPhrase} in cart`);
6 | }
7 |
8 | var shoppingBags = document.querySelectorAll('.shopping-bag');
9 | for (var i = 0; i < shoppingBags.length; i++) {
10 | // We'll fake the number of items that the user has by passing in 2
11 | // In a real app this would probably come from some user data in the backend
12 | new ShoppingBag(shoppingBags[i], 2);
13 | }
14 |
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/scripts/shopping-bag.js:
--------------------------------------------------------------------------------
1 | function ShoppingBag(bag, count) {
2 | this._el = bag;
3 | this._el.setAttribute('data-count', count);
4 | var itemPhrase = count === 1 ? `${count} item` : `${count} items`;
5 | this._el.setAttribute('aria-label', `${itemPhrase} in cart`);
6 | }
7 |
8 | var shoppingBags = document.querySelectorAll('.shopping-bag');
9 | for (var i = 0; i < shoppingBags.length; i++) {
10 | // We'll fake the number of items that the user has by passing in 2
11 | // In a real app this would probably come from some user data in the backend
12 | new ShoppingBag(shoppingBags[i], 2);
13 | }
14 |
--------------------------------------------------------------------------------
/lesson2-focus/05-radio-group/main.css:
--------------------------------------------------------------------------------
1 | .demo {
2 | width: 200px;
3 | }
4 |
5 | .radiogroup {
6 | list-style: none;
7 | }
8 |
9 | .radio {
10 | position: relative;
11 | }
12 |
13 | .radio::before {
14 | content: '';
15 | display: block;
16 | width: 10px;
17 | height: 10px;
18 | border: 1px solid black;
19 | position: absolute;
20 | left: -18px;
21 | top: 3px;
22 | border-radius: 50%;
23 | }
24 |
25 | .radio[checked]::after {
26 | content: '';
27 | display: block;
28 | width: 8px;
29 | height: 8px;
30 | background: red;
31 | position: absolute;
32 | left: -16px;
33 | top: 5px;
34 | border-radius: 50%;
35 | }
36 |
--------------------------------------------------------------------------------
/lesson2-focus/05-radio-group/solution/main.css:
--------------------------------------------------------------------------------
1 | .demo {
2 | width: 200px;
3 | }
4 |
5 | .radiogroup {
6 | list-style: none;
7 | }
8 |
9 | .radio {
10 | position: relative;
11 | }
12 |
13 | .radio::before {
14 | content: '';
15 | display: block;
16 | width: 10px;
17 | height: 10px;
18 | border: 1px solid black;
19 | position: absolute;
20 | left: -18px;
21 | top: 3px;
22 | border-radius: 50%;
23 | }
24 |
25 | .radio[checked]::after {
26 | content: '';
27 | display: block;
28 | width: 8px;
29 | height: 8px;
30 | background: red;
31 | position: absolute;
32 | left: -16px;
33 | top: 5px;
34 | border-radius: 50%;
35 | }
36 |
--------------------------------------------------------------------------------
/lesson5-semantics-aria/06-radio-group/main.css:
--------------------------------------------------------------------------------
1 | .demo {
2 | margin: 50px;
3 | }
4 |
5 | .radiogroup {
6 | list-style: none;
7 | }
8 |
9 | .radio {
10 | position: relative;
11 | }
12 |
13 | .radio::before {
14 | content: '';
15 | display: block;
16 | width: 10px;
17 | height: 10px;
18 | border: 1px solid black;
19 | position: absolute;
20 | left: -18px;
21 | top: 3px;
22 | border-radius: 50%;
23 | }
24 |
25 | .radio[checked]::after {
26 | content: '';
27 | display: block;
28 | width: 8px;
29 | height: 8px;
30 | background: red;
31 | position: absolute;
32 | left: -16px;
33 | top: 5px;
34 | border-radius: 50%;
35 | }
36 |
--------------------------------------------------------------------------------
/final-project/ecommerce-site/third_party/handlebars-grouped-each.js:
--------------------------------------------------------------------------------
1 | // Credit to https://funkjedi.com/technology/412-every-nth-item-in-handlebars/
2 |
3 | Handlebars.registerHelper('grouped_each', function(every, context, options) {
4 | var out = "",
5 | subcontext = [],
6 | i;
7 | if (context && context.length > 0) {
8 | for (i = 0; i < context.length; i++) {
9 | context[i].outer_index = i;
10 | if (i > 0 && i % every === 0) {
11 | out += options.fn(subcontext);
12 | subcontext = [];
13 | }
14 | subcontext.push(context[i]);
15 | }
16 | out += options.fn(subcontext);
17 | }
18 | return out;
19 | });
20 |
--------------------------------------------------------------------------------
/lesson2-focus/05-radio-group/README.md:
--------------------------------------------------------------------------------
1 | You can find the files for this example in the `lesson2-focus/05-radio-group`
2 | directory.
3 |
4 | Using the ARIA Authoring Best Practices doc (either
5 | [version 1.0](https://www.w3.org/TR/wai-aria-practices/) or [version 1.1](https://www.w3.org/TR/wai-aria-practices-1.1/)) find the radio pattern
6 | and implement support for the `Down Arrow and Right Arrow` pattern.
7 |
8 | **Note**: The 1.0 version of the doc refers to this as a "Radio Button" whereas
9 | the 1.1 version of the doc refers to this as a "Radio Group".
10 |
11 | You'll want to work in the `radiogroup.js` file to implement your keyboarding
12 | support.
13 |
--------------------------------------------------------------------------------
/lesson5-semantics-aria/06-radio-group/solution/main.css:
--------------------------------------------------------------------------------
1 | .demo {
2 | margin: 50px;
3 | }
4 |
5 | .radiogroup {
6 | list-style: none;
7 | }
8 |
9 | .radio {
10 | position: relative;
11 | }
12 |
13 | .radio::before {
14 | content: '';
15 | display: block;
16 | width: 10px;
17 | height: 10px;
18 | border: 1px solid black;
19 | position: absolute;
20 | left: -18px;
21 | top: 3px;
22 | border-radius: 50%;
23 | }
24 |
25 | .radio[checked]::after {
26 | content: '';
27 | display: block;
28 | width: 8px;
29 | height: 8px;
30 | background: red;
31 | position: absolute;
32 | left: -16px;
33 | top: 5px;
34 | border-radius: 50%;
35 | }
36 |
--------------------------------------------------------------------------------
/final-project/ecommerce-site/solution/third_party/handlebars-grouped-each.js:
--------------------------------------------------------------------------------
1 | // Credit to https://funkjedi.com/technology/412-every-nth-item-in-handlebars/
2 |
3 | Handlebars.registerHelper('grouped_each', function(every, context, options) {
4 | var out = "",
5 | subcontext = [],
6 | i;
7 | if (context && context.length > 0) {
8 | for (i = 0; i < context.length; i++) {
9 | context[i].outer_index = i;
10 | if (i > 0 && i % every === 0) {
11 | out += options.fn(subcontext);
12 | subcontext = [];
13 | }
14 | subcontext.push(context[i]);
15 | }
16 | out += options.fn(subcontext);
17 | }
18 | return out;
19 | });
20 |
--------------------------------------------------------------------------------
/lesson6-styling/01-focus-styles/main.css:
--------------------------------------------------------------------------------
1 | .masthead {
2 | margin: 32px 0;
3 | }
4 |
5 | button:hover,
6 | button:focus,
7 | a:hover,
8 | a:focus {
9 | outline: none;
10 | color: inherit;
11 | text-decoration: none;
12 | }
13 |
14 | .nav > li > a {
15 | padding: 0 16px;
16 | margin: 0 8px;
17 | }
18 |
19 | .nav > li > a:focus {
20 | text-decoration: none;
21 | background: transparent;
22 | }
23 |
24 | .jumbotron .mdl-button {
25 | background-color: #008b00;
26 | color: #FFFFFF;
27 | }
28 |
29 | .mdl-button.raised {
30 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14),
31 | 0 3px 1px -2px rgba(0, 0, 0, .2),
32 | 0 1px 5px 0 rgba(0, 0, 0, .12);
33 | }
34 |
--------------------------------------------------------------------------------
/lesson2-focus/03-managing-focus/README.md:
--------------------------------------------------------------------------------
1 | To run this example you'll need to use a local server. The easiest way to do
2 | so is to use the [Web Server for Chrome extension](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb?hl=en).
3 |
4 | Make sure your settings look like this:
5 |
6 |
7 |
8 | Under the heading that says "Web Server URL(s)" click the first link to preview
9 | the app on your local server.
10 |
11 | Take a look at the `scripts/main.js` file to figure out how the route is updated
12 | and to determine when you would need to step in and manage focus.
13 |
--------------------------------------------------------------------------------
/final-project/README.md:
--------------------------------------------------------------------------------
1 | # Final Project
2 |
3 | It's time to take the skills you've learned in this course and apply them to
4 | a real project. We've gone ahead and created a very fancy looking site but
5 | there are a number of accessibility issues that could be improved. Do your
6 | best to fix as many as you can and if you get stuck or need a hint you can
7 | check out the [answers file](ANSWERS.md) or the [full solution](https://github.com/udacity/ud891/tree/gh-pages/final-project/ecommerce-site/solution).
8 |
9 | Accessibility is one of those things that you can always improve upon so it's
10 | very possible you'll think up additions and solutions that even we didn't
11 | cover in our final version. Have fun with it and see if you can build an
12 | access that you think all of your users will love.
13 |
--------------------------------------------------------------------------------
/lesson5-semantics-aria/19-aria-live/main.css:
--------------------------------------------------------------------------------
1 | .demo {
2 | margin: 50px;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | height: 100%;
9 | font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;
10 | }
11 |
12 |
13 | .label {
14 | display: block;
15 | font-size: 14px;
16 | color: #3F51B5;
17 | margin-bottom: 8px;
18 | }
19 |
20 | [role=spinbutton] {
21 | border-radius: 4px;
22 | border: 1px solid #9E9E9E;
23 | font-size: 18px;
24 | padding: 4px;
25 | font-family: inherit;
26 | font-weight: 100;
27 | color: #616161;
28 | display: inline-block;
29 | }
30 |
31 | [role=spinbutton] #number {
32 | padding-top: 1px;
33 | width: 3em;
34 | }
35 |
36 | button {
37 | color: white;
38 | background: #3F51B5;
39 | border: none;
40 | border-radius: 4px;
41 | font-size: 20px;
42 | font-family: inherit;
43 | font-weight: 100;
44 | }
45 |
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/02-chromevox-lite/embed.css:
--------------------------------------------------------------------------------
1 | .hide-unless-focused {
2 | position: absolute;
3 | left: -10000px;
4 | top: -10000px;
5 | }
6 |
7 | .hide-unless-focused:focus {
8 | left: 10px;
9 | top: 10px;
10 | }
11 |
12 | button#enable-cvox {
13 | border: none;
14 | border-radius: 4px;
15 | font-weight: 100;
16 | font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;
17 | background-color: #2196F3;
18 | color: white;
19 | z-index: 1000;
20 | padding: 2px 7px;
21 | font-size: 18px;
22 | }
23 |
24 | body[cvox-enabled] button#enable-cvox {
25 | display: none;
26 | }
27 |
28 | div#self-destruct {
29 | position: absolute;
30 | left: -1000px;
31 | top: -1000px;
32 | }
33 |
34 | .blur {
35 | -webkit-filter: blur(10px);
36 | -moz-filter: blur(10px);
37 | -o-filter: blur(10px);
38 | -ms-filter: blur(10px);
39 | filter: blur(10px);
40 | }
41 |
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/16-labelling-input-elements/label.js:
--------------------------------------------------------------------------------
1 | var checkbox = document.querySelector('input#jLetter');
2 | var parent = checkbox.parentElement;
3 | var labelText = parent.textContent.trim();
4 |
5 | function observe(records, self) {
6 | if (!checkbox || !parent) {
7 | console.error('You deleted the element you were supposed to label! Maybe refresh the page and try again...');
8 | return;
9 | }
10 |
11 | if (!checkbox.labels)
12 | return;
13 |
14 | for (var i = 0; i < checkbox.labels.length; i++) {
15 | var label = checkbox.labels[i];
16 | if (label.textContent.trim() != labelText)
17 | continue;
18 |
19 | document.querySelector('.secret').textContent = 'The secret word is: "BILBY"'
20 | document.querySelector('.header').classList.add('success');
21 | }
22 |
23 | }
24 | var observer = new MutationObserver(observe);
25 | observer.observe(parent, { childList: true, subtree: true });
26 |
--------------------------------------------------------------------------------
/lesson2-focus/07-modals-and-keyboard-traps/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: 'Georgia', sans-serif;
3 | }
4 |
5 | .modal {
6 | width: 50%;
7 | border-radius: 4px;
8 | margin-left: auto;
9 | margin-right: auto;
10 | padding: 24px;
11 | background-color: #fff;
12 | z-index: 3; /* places the modal on top of everything */
13 | position: fixed;
14 | top: 25%;
15 | left: 25%;
16 | display: none;
17 | }
18 |
19 | .modal-overlay {
20 | width: 100%;
21 | height: 100%;
22 | z-index: 2; /* places the modalOverlay between the main page and the modal dialog */
23 | background-color: #000;
24 | opacity: 0.5;
25 | position: fixed;
26 | top: 0;
27 | left: 0;
28 | display: none;
29 | margin: 0;
30 | padding: 0;
31 | }
32 |
33 | h1 {
34 | margin-top: 0;
35 | }
36 |
37 | .field {
38 | display: inline-block;
39 | vertical-align: bottom;
40 | }
41 |
42 | label {
43 | display: block;
44 | margin-bottom: 4px;
45 | }
46 |
--------------------------------------------------------------------------------
/lesson3-semantics-built-in/16-labelling-input-elements/solution/label.js:
--------------------------------------------------------------------------------
1 | var checkbox = document.querySelector('input#jLetter');
2 | var parent = checkbox.parentElement;
3 | var labelText = parent.textContent.trim();
4 |
5 | function observe(records, self) {
6 | if (!checkbox || !parent) {
7 | console.error('You deleted the element you were supposed to label! Maybe refresh the page and try again...');
8 | return;
9 | }
10 |
11 | if (!checkbox.labels)
12 | return;
13 |
14 | for (var i = 0; i < checkbox.labels.length; i++) {
15 | var label = checkbox.labels[i];
16 | if (label.textContent.trim() != labelText)
17 | continue;
18 |
19 | document.querySelector('.secret').textContent = 'The secret word is: "BILBY"'
20 | document.querySelector('.header').classList.add('success');
21 | }
22 |
23 | }
24 | var observer = new MutationObserver(observe);
25 | observer.observe(parent, { childList: true, subtree: true });
26 |
--------------------------------------------------------------------------------
/lesson2-focus/07-modals-and-keyboard-traps/solution/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: 'Georgia', sans-serif;
3 | }
4 |
5 | .modal {
6 | width: 50%;
7 | border-radius: 4px;
8 | margin-left: auto;
9 | margin-right: auto;
10 | padding: 24px;
11 | background-color: #fff;
12 | z-index: 3; /* places the modal on top of everything */
13 | position: fixed;
14 | top: 25%;
15 | left: 25%;
16 | display: none;
17 | }
18 |
19 | .modal-overlay {
20 | width: 100%;
21 | height: 100%;
22 | z-index: 2; /* places the modalOverlay between the main page and the modal dialog */
23 | background-color: #000;
24 | opacity: 0.5;
25 | position: fixed;
26 | top: 0;
27 | left: 0;
28 | display: none;
29 | margin: 0;
30 | padding: 0;
31 | }
32 |
33 | h1 {
34 | margin-top: 0;
35 | }
36 |
37 | .field {
38 | display: inline-block;
39 | vertical-align: bottom;
40 | }
41 |
42 | label {
43 | display: block;
44 | margin-bottom: 4px;
45 | }
46 |
--------------------------------------------------------------------------------
/lesson5-semantics-aria/19-aria-live/number.js:
--------------------------------------------------------------------------------
1 | var number = document.querySelector('#number');
2 | function increment() {
3 | var oldValue = number.textContent;
4 | number.textContent = parseInt(oldValue, 10) + 10;
5 | }
6 |
7 | function decrement() {
8 | var oldValue = number.textContent;
9 | number.textContent = parseInt(oldValue, 10) - 10;
10 | }
11 |
12 | document.querySelector('#add').addEventListener('click', increment);
13 | document.querySelector('#subtract').addEventListener('click', decrement);
14 |
15 | var VK_UP = 38;
16 | var VK_DOWN = 40;
17 | var spinbutton = document.querySelector('[role=spinbutton]');
18 | spinbutton.addEventListener('keydown', function(e) {
19 | switch (e.keyCode) {
20 | case VK_UP:
21 | increment();
22 | e.stopPropagation();
23 | e.preventDefault();
24 | break;
25 | case VK_DOWN:
26 | decrement();
27 | e.stopPropagation();
28 | e.preventDefault();
29 | break;
30 | }
31 | });
32 |
--------------------------------------------------------------------------------
/lesson2-focus/05-radio-group/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |