Repository: mdn/learning-area
Branch: main
Commit: 6e1054d34402
Files: 828
Total size: 1.6 MB
Directory structure:
gitextract_a46r8vfx/
├── .github/
│ └── CODEOWNERS
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── .vscode/
│ ├── cspell.json
│ ├── extensions.json
│ └── project-words.txt
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── SECURITY.md
├── accessibility/
│ ├── aria/
│ │ ├── aria-div-buttons.html
│ │ ├── aria-live.html
│ │ ├── aria-no-live.html
│ │ ├── aria-tabbed-info-box.html
│ │ ├── form-validation-checkbox-disabled.html
│ │ ├── form-validation-updated.html
│ │ ├── quotes.json
│ │ ├── validation-checkbox-disabled.js
│ │ ├── validation.js
│ │ ├── website-aria-roles/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ └── website-no-roles/
│ │ ├── index.html
│ │ └── style.css
│ ├── assessment-finished/
│ │ ├── index.html
│ │ ├── main.js
│ │ ├── marking-guide.md
│ │ ├── media/
│ │ │ └── bear.ogg
│ │ ├── style.css
│ │ └── transcript.html
│ ├── assessment-start/
│ │ ├── assessment-files/
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ ├── media/
│ │ │ │ └── bear.ogg
│ │ │ └── style.css
│ │ ├── index.html
│ │ ├── main.js
│ │ ├── media/
│ │ │ └── bear.ogg
│ │ └── style.css
│ ├── css/
│ │ ├── form-css.html
│ │ ├── form-validation.html
│ │ ├── mouse-and-keyboard-events.html
│ │ ├── table-css.html
│ │ └── validation.js
│ ├── html/
│ │ ├── accessible-image.html
│ │ ├── bad-form.html
│ │ ├── bad-links.html
│ │ ├── bad-semantics.html
│ │ ├── bad-table.html
│ │ ├── dino-info.html
│ │ ├── good-form.html
│ │ ├── good-links.html
│ │ ├── good-semantics.html
│ │ ├── native-keyboard-accessibility.html
│ │ ├── style.css
│ │ └── table-layout.html
│ ├── mobile/
│ │ ├── common-job-types.html
│ │ ├── html5-form-examples.html
│ │ ├── multi-control-box-drag.html
│ │ ├── simple-box-drag.html
│ │ └── simple-button-example.html
│ ├── multimedia/
│ │ ├── audio-transcript-ui/
│ │ │ ├── index.html
│ │ │ └── main.js
│ │ ├── custom-controls-OOJS/
│ │ │ ├── index.html
│ │ │ └── main.js
│ │ ├── custom-controls-basic/
│ │ │ ├── index.html
│ │ │ └── main.js
│ │ ├── custom-controls-start.html
│ │ ├── custom-controls.css
│ │ ├── native-controls.html
│ │ ├── rabbit320.webm
│ │ └── viper.ogg
│ └── tasks/
│ ├── html-css/
│ │ ├── aria/
│ │ │ ├── aria1-download.html
│ │ │ ├── aria1.html
│ │ │ ├── aria2-download.html
│ │ │ ├── aria2.html
│ │ │ └── marking.md
│ │ ├── css/
│ │ │ ├── css-a11y1-download.html
│ │ │ ├── css-a11y1.html
│ │ │ ├── css-a11y2-download.html
│ │ │ ├── css-a11y2.html
│ │ │ └── marking.md
│ │ ├── html/
│ │ │ ├── html-a11y1-download.html
│ │ │ ├── html-a11y1.html
│ │ │ ├── html-a11y2-download.html
│ │ │ ├── html-a11y2.html
│ │ │ ├── html-a11y3-download.html
│ │ │ ├── html-a11y3.html
│ │ │ ├── html-a11y4-download.html
│ │ │ ├── html-a11y4.html
│ │ │ └── marking.md
│ │ ├── playable.js
│ │ └── styles.css
│ └── js/
│ ├── aria/
│ │ └── aria-js1-download.html
│ ├── js/
│ │ └── js1-download.html
│ ├── playable.js
│ └── styles.css
├── css/
│ ├── css-layout/
│ │ ├── flexbox/
│ │ │ ├── complex-flexbox.html
│ │ │ ├── flex-align0.html
│ │ │ ├── flex-align1.html
│ │ │ ├── flex-ordering.html
│ │ │ ├── flexbox-wrap0.html
│ │ │ ├── flexbox-wrap1.html
│ │ │ ├── flexbox0.html
│ │ │ ├── flexbox1.html
│ │ │ └── flexbox2.html
│ │ ├── floats/
│ │ │ ├── 0_two-column-layout.html
│ │ │ ├── 1-basic-example.html
│ │ │ ├── 1_three-column-layout.html
│ │ │ ├── 2-line-boxes.html
│ │ │ ├── 2_float-disaster.html
│ │ │ ├── 2a_fixed-by-clear.html
│ │ │ ├── 3-clearing.html
│ │ │ ├── 3_broken-layout.html
│ │ │ ├── 4-clearfix.html
│ │ │ ├── 4_fixed-layout-border-box.html
│ │ │ ├── 5-overflow.html
│ │ │ ├── 5_fixed-height-columns.html
│ │ │ ├── 6-flow-root.html
│ │ │ ├── fixed-layout-adjusted-percentages.html
│ │ │ ├── simple-float.html
│ │ │ ├── three-column-layout-wrong-order.html
│ │ │ └── two-column-layout-fixed.html
│ │ ├── fundamental-layout-comprehension/
│ │ │ ├── index.html
│ │ │ └── styles.css
│ │ ├── fundamental-layout-comprehension-finish/
│ │ │ ├── index.html
│ │ │ ├── marking-guide.md
│ │ │ └── styles.css
│ │ ├── grids/
│ │ │ ├── 0-starting-point.html
│ │ │ ├── 1-fixed-columns.html
│ │ │ ├── 10-template-completed.html
│ │ │ ├── 11-grid-system-starting-point.html
│ │ │ ├── 12-grid-system-completed.html
│ │ │ ├── 2-fr-tracks.html
│ │ │ ├── 3-gaps.html
│ │ │ ├── 4-repeat.html
│ │ │ ├── 5-auto-rows.html
│ │ │ ├── 6-min-max.html
│ │ │ ├── 7-auto-fill.html
│ │ │ ├── 8-placement-starting-point.html
│ │ │ ├── 9-placement-completed.html
│ │ │ ├── css-grid-finished.html
│ │ │ ├── css-grid.html
│ │ │ ├── css-tables-as-grid.html
│ │ │ ├── flexbox-grid.html
│ │ │ ├── fluid-grid-calc.html
│ │ │ ├── fluid-grid-offset.html
│ │ │ ├── fluid-grid.html
│ │ │ ├── html-skeleton-finished.html
│ │ │ ├── html-skeleton.html
│ │ │ ├── normalize.css
│ │ │ ├── simple-grid-finished.html
│ │ │ ├── simple-grid.html
│ │ │ └── skeleton.css
│ │ ├── multicol/
│ │ │ ├── 0-starting-point.html
│ │ │ ├── 1-simple-example.html
│ │ │ ├── 2-simple-example-width.html
│ │ │ ├── 3-gaps-rules.html
│ │ │ └── 4-breaking.html
│ │ ├── positioning/
│ │ │ ├── 0_basic-flow.html
│ │ │ ├── 1_static-positioning.html
│ │ │ ├── 2_relative-positioning.html
│ │ │ ├── 3_absolute-positioning.html
│ │ │ ├── 4_positioning-context.html
│ │ │ ├── 5_z-index.html
│ │ │ ├── 6_fixed-positioning.html
│ │ │ └── 7_sticky-positioning.html
│ │ ├── practical-positioning-examples/
│ │ │ ├── fixed-info-box.html
│ │ │ ├── hidden-info-panel-start.html
│ │ │ ├── hidden-info-panel.html
│ │ │ ├── tabbed-info-box-start.html
│ │ │ ├── tabbed-info-box.html
│ │ │ └── tabs-manual.js
│ │ └── stacking-and-float/
│ │ └── index.html
│ ├── introduction-to-css/
│ │ ├── box-model/
│ │ │ ├── app/
│ │ │ │ └── sass
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── cascade-and-inheritance/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── css-selectors/
│ │ │ ├── combinators.html
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── css-values-and-units/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── debugging-css/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── debugging-css-finished/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── fundamental-css-comprehension/
│ │ │ ├── index.html
│ │ │ └── style-resources.txt
│ │ ├── fundamental-css-comprehension-finished/
│ │ │ ├── index.html
│ │ │ ├── marking-guide.md
│ │ │ └── style.css
│ │ └── how-css-works/
│ │ ├── index.html
│ │ └── style.css
│ ├── styling-boxes/
│ │ ├── advanced_box_effects/
│ │ │ ├── background-clip-text.html
│ │ │ ├── blend-modes.html
│ │ │ ├── box-shadow.html
│ │ │ └── filters.html
│ │ ├── backgrounds/
│ │ │ ├── background-attachment.css
│ │ │ ├── background-attachment.html
│ │ │ ├── index.html
│ │ │ └── repeating-background.html
│ │ ├── borders/
│ │ │ ├── border-image.html
│ │ │ ├── border-longhand.html
│ │ │ └── rounded-corners.html
│ │ ├── box-model-recap/
│ │ │ ├── box-sizing-example.css
│ │ │ ├── box-sizing-example.html
│ │ │ ├── css-tables-example.html
│ │ │ ├── flexbox-example.html
│ │ │ ├── min-max-container.css
│ │ │ ├── min-max-container.html
│ │ │ ├── min-max-image-container.css
│ │ │ └── min-max-image-container.html
│ │ ├── cool-information-box-finished/
│ │ │ ├── index.html
│ │ │ ├── marking-guide.md
│ │ │ └── style.css
│ │ ├── cool-information-box-start/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── letterheaded-paper-finished/
│ │ │ ├── index.html
│ │ │ ├── marking-guide.md
│ │ │ └── style.css
│ │ ├── letterheaded-paper-start/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ └── styling-tables/
│ │ ├── punk-bands-complete.html
│ │ ├── punk-bands-unstyled.html
│ │ └── style.css
│ └── styling-text/
│ ├── fundamentals/
│ │ └── index.html
│ ├── styling-links/
│ │ ├── default-styles.html
│ │ ├── external-link-icon.html
│ │ ├── link-buttons.html
│ │ └── styled-links.html
│ ├── styling-lists/
│ │ ├── index.html
│ │ └── unstyled-list.html
│ ├── typesetting-a-homepage-finished/
│ │ ├── index.html
│ │ ├── marking-guide.md
│ │ ├── original-font-files/
│ │ │ ├── Lovato Light-Webfont/
│ │ │ │ ├── Licenses/
│ │ │ │ │ └── Webfont EULA 1.6.txt
│ │ │ │ ├── Reference/
│ │ │ │ │ └── How_to_use_webfonts.html
│ │ │ │ └── Webfonts/
│ │ │ │ └── lovato_light_macroman/
│ │ │ │ ├── Lovato-Light-demo.html
│ │ │ │ ├── specimen_files/
│ │ │ │ │ ├── easytabs.js
│ │ │ │ │ ├── grid_12-825-55-15.css
│ │ │ │ │ └── specimen_stylesheet.css
│ │ │ │ └── stylesheet.css
│ │ │ ├── josefin-slab/
│ │ │ │ └── SIL Open Font License.txt
│ │ │ └── webfontkit-20160419-074110/
│ │ │ ├── generator_config.txt
│ │ │ ├── josefinslab-bold-demo.html
│ │ │ ├── specimen_files/
│ │ │ │ ├── grid_12-825-55-15.css
│ │ │ │ └── specimen_stylesheet.css
│ │ │ └── stylesheet.css
│ │ └── style.css
│ ├── typesetting-a-homepage-start/
│ │ ├── index.html
│ │ └── style.css
│ └── web-fonts/
│ ├── fonts/
│ │ ├── cicle_fina-demo.html
│ │ ├── generator_config.txt
│ │ ├── specimen_files/
│ │ │ ├── grid_12-825-55-15.css
│ │ │ └── specimen_stylesheet.css
│ │ ├── stylesheet.css
│ │ └── zantroke-demo.html
│ ├── google-font.css
│ ├── google-font.html
│ ├── web-font-finished.css
│ ├── web-font-finished.html
│ ├── web-font-start.css
│ ├── web-font-start.html
│ └── zantroke/
│ ├── SIL Open Font License.txt
│ └── Zantroke.otf
├── html/
│ ├── forms/
│ │ ├── basic-input-examples/
│ │ │ └── index.html
│ │ ├── color-example/
│ │ │ └── index.html
│ │ ├── date-picker-fallback/
│ │ │ └── index.html
│ │ ├── datetime-local-example/
│ │ │ └── index.html
│ │ ├── datetime-local-picker-fallback/
│ │ │ └── index.html
│ │ ├── editable-input-example/
│ │ │ └── editable_input.html
│ │ ├── file-examples/
│ │ │ ├── file-example.html
│ │ │ ├── file-with-accept.html
│ │ │ └── simple-file.html
│ │ ├── form-validation/
│ │ │ ├── custom-error-message.html
│ │ │ ├── detailed-custom-validation.html
│ │ │ ├── fruit-length.html
│ │ │ ├── fruit-pattern.html
│ │ │ ├── fruit-required.html
│ │ │ ├── fruit-start.html
│ │ │ ├── full-example.html
│ │ │ └── min-max.html
│ │ ├── hidden-input-example/
│ │ │ └── index.html
│ │ ├── html-form-structure/
│ │ │ ├── checkbox-label.html
│ │ │ ├── fieldset-legend.html
│ │ │ └── required-labels.html
│ │ ├── image-type-example/
│ │ │ ├── index.html
│ │ │ └── xy-coordinates-example.html
│ │ ├── indeterminate-example/
│ │ │ └── index.html
│ │ ├── month-examples/
│ │ │ └── month-validation.html
│ │ ├── native-form-widgets/
│ │ │ ├── advanced-examples.html
│ │ │ ├── button-examples.html
│ │ │ ├── checkable-items.html
│ │ │ ├── drop-down-content.html
│ │ │ ├── multi-line-text-field.html
│ │ │ ├── other-examples.html
│ │ │ ├── positioned-legend.html
│ │ │ └── single-line-text-fields.html
│ │ ├── number-example/
│ │ │ └── index.html
│ │ ├── postcard-example/
│ │ │ ├── index.html
│ │ │ └── postcard-start.html
│ │ ├── pseudo-classes/
│ │ │ ├── basic-required-optional.html
│ │ │ ├── enabled-disabled-shipping.html
│ │ │ ├── out-of-range.html
│ │ │ ├── radios-checked-default.html
│ │ │ ├── radios-checked-indeterminate.html
│ │ │ ├── readonly-confirmation.html
│ │ │ ├── required-optional-generated.html
│ │ │ ├── user-valid-invalid.html
│ │ │ └── valid-invalid.html
│ │ ├── range-example/
│ │ │ └── index.html
│ │ ├── select-example/
│ │ │ └── select-multiple.html
│ │ ├── sending-form-data/
│ │ │ ├── get-method.html
│ │ │ ├── php-example.html
│ │ │ ├── php-example.php
│ │ │ ├── post-method.html
│ │ │ ├── python-example.py
│ │ │ └── templates/
│ │ │ ├── form.html
│ │ │ └── greeting.html
│ │ ├── styling-examples/
│ │ │ ├── appearance-tester.html
│ │ │ ├── checkboxes-styled.html
│ │ │ ├── radios-styled.html
│ │ │ ├── search-appearance.html
│ │ │ ├── styled-file-picker.html
│ │ │ ├── styled-search.html
│ │ │ └── ugly-controls.html
│ │ ├── tasks/
│ │ │ ├── advanced-styling/
│ │ │ │ ├── advanced-styling1-download.html
│ │ │ │ ├── advanced-styling1.html
│ │ │ │ ├── advanced-styling2-download.html
│ │ │ │ ├── advanced-styling2.html
│ │ │ │ ├── advanced-styling3-download.html
│ │ │ │ └── marking.md
│ │ │ ├── basic-controls/
│ │ │ │ ├── basic-controls1-download.html
│ │ │ │ ├── basic-controls1.html
│ │ │ │ ├── basic-controls2-download.html
│ │ │ │ ├── basic-controls2.html
│ │ │ │ ├── basic-controls3-download.html
│ │ │ │ ├── basic-controls3.html
│ │ │ │ └── marking.md
│ │ │ ├── form-structure/
│ │ │ │ ├── form-structure1-download.html
│ │ │ │ ├── form-structure1.html
│ │ │ │ └── marking.md
│ │ │ ├── form-validation/
│ │ │ │ ├── form-validation1-download.html
│ │ │ │ ├── form-validation2-download.html
│ │ │ │ ├── form-validation3-download.html
│ │ │ │ └── marking.md
│ │ │ ├── html5-controls/
│ │ │ │ ├── html5-controls1-download.html
│ │ │ │ ├── html5-controls1.html
│ │ │ │ ├── html5-controls2-download.html
│ │ │ │ ├── html5-controls2.html
│ │ │ │ └── marking.md
│ │ │ ├── other-controls/
│ │ │ │ ├── marking.md
│ │ │ │ ├── other-controls1-download.html
│ │ │ │ ├── other-controls1.html
│ │ │ │ ├── other-controls2-download.html
│ │ │ │ ├── other-controls2.html
│ │ │ │ ├── other-controls3-download.html
│ │ │ │ └── other-controls3.html
│ │ │ ├── playable.js
│ │ │ ├── styles.css
│ │ │ └── styling-basics/
│ │ │ ├── marking.md
│ │ │ └── styling-basics1-download.html
│ │ ├── tel-example/
│ │ │ └── index.html
│ │ ├── text-example/
│ │ │ └── index.html
│ │ ├── time-example/
│ │ │ └── index.html
│ │ ├── toggle-switch-example/
│ │ │ └── index.html
│ │ ├── url-example/
│ │ │ └── index.html
│ │ ├── week-example/
│ │ │ └── index.html
│ │ └── your-first-HTML-form/
│ │ ├── first-form-styled.html
│ │ └── first-form.html
│ ├── introduction-to-html/
│ │ ├── advanced-text-formatting/
│ │ │ ├── description-list.html
│ │ │ ├── other-semantics.html
│ │ │ └── quotations.html
│ │ ├── creating-hyperlinks/
│ │ │ ├── contacts.html
│ │ │ ├── index.html
│ │ │ └── projects/
│ │ │ └── index.html
│ │ ├── debugging-html/
│ │ │ ├── debug-example-fixed.html
│ │ │ └── debug-example.html
│ │ ├── document_and_website_structure/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── getting-started/
│ │ │ └── index.html
│ │ ├── html-text-formatting/
│ │ │ ├── text-complete.html
│ │ │ └── text-start.html
│ │ ├── marking-up-a-letter-finished/
│ │ │ ├── index.html
│ │ │ └── marking-guide.md
│ │ ├── marking-up-a-letter-start/
│ │ │ ├── css.txt
│ │ │ └── letter-text.txt
│ │ ├── navigation-menu-marked-up/
│ │ │ ├── index.html
│ │ │ ├── pictures.html
│ │ │ ├── projects.html
│ │ │ └── social.html
│ │ ├── navigation-menu-start/
│ │ │ ├── index.html
│ │ │ ├── pictures.html
│ │ │ ├── projects.html
│ │ │ └── social.html
│ │ ├── structuring-a-page-of-content-finished/
│ │ │ ├── index.html
│ │ │ ├── marking-guide.md
│ │ │ └── style.css
│ │ ├── structuring-a-page-of-content-start/
│ │ │ ├── index.html
│ │ │ └── style.css
│ │ ├── tasks/
│ │ │ ├── advanced-text/
│ │ │ │ ├── advanced-text1-download.html
│ │ │ │ ├── advanced-text1-finished.html
│ │ │ │ ├── advanced-text1.html
│ │ │ │ ├── advanced-text2-download.html
│ │ │ │ ├── advanced-text2-finished.html
│ │ │ │ ├── advanced-text2.html
│ │ │ │ └── marking.md
│ │ │ ├── basic-text/
│ │ │ │ ├── basic-text1-download.html
│ │ │ │ ├── basic-text1-finished.html
│ │ │ │ ├── basic-text1.html
│ │ │ │ ├── basic-text2-download.html
│ │ │ │ ├── basic-text2-finished.html
│ │ │ │ ├── basic-text2.html
│ │ │ │ ├── basic-text3-download.html
│ │ │ │ ├── basic-text3-finished.html
│ │ │ │ ├── basic-text3.html
│ │ │ │ └── marking.md
│ │ │ ├── links/
│ │ │ │ ├── links1-download.html
│ │ │ │ ├── links1.html
│ │ │ │ ├── links2-download.html
│ │ │ │ ├── links2.html
│ │ │ │ ├── links3-download.html
│ │ │ │ ├── links3.html
│ │ │ │ ├── marking.md
│ │ │ │ ├── narwhals.html
│ │ │ │ └── whales.html
│ │ │ ├── playable.js
│ │ │ └── styles.css
│ │ └── the-html-head/
│ │ ├── css-and-js.html
│ │ ├── meta-example.html
│ │ ├── script.js
│ │ ├── style.css
│ │ └── title-example.html
│ ├── multimedia-and-embedding/
│ │ ├── adding-vector-graphics-to-the-web/
│ │ │ └── vector-versus-raster.html
│ │ ├── images-in-html/
│ │ │ └── index.html
│ │ ├── mdn-splash-page-finished/
│ │ │ ├── index.html
│ │ │ └── marking-guide.md
│ │ ├── mdn-splash-page-start/
│ │ │ └── index.html
│ │ ├── other-embedding-technologies/
│ │ │ ├── iframe-detail.html
│ │ │ ├── iframe-youtube.html
│ │ │ ├── object-image.html
│ │ │ └── object-pdf.html
│ │ ├── responsive-images/
│ │ │ ├── not-responsive.html
│ │ │ ├── responsive.html
│ │ │ └── srcset-resolutions.html
│ │ ├── tasks/
│ │ │ ├── images/
│ │ │ │ ├── images1-download.html
│ │ │ │ ├── images1.html
│ │ │ │ ├── images2-download.html
│ │ │ │ ├── images2.html
│ │ │ │ ├── images3-download.html
│ │ │ │ ├── images3.html
│ │ │ │ └── marking.md
│ │ │ ├── media-embed/
│ │ │ │ ├── marking.md
│ │ │ │ ├── media/
│ │ │ │ │ ├── subtitles_en.vtt
│ │ │ │ │ └── video.webm
│ │ │ │ ├── mediaembed1-download.html
│ │ │ │ ├── mediaembed1.html
│ │ │ │ ├── mediaembed2-download.html
│ │ │ │ ├── mediaembed2.html
│ │ │ │ ├── mediaembed3-download.html
│ │ │ │ └── mediaembed3.html
│ │ │ ├── playable.js
│ │ │ └── styles.css
│ │ └── video-and-audio-content/
│ │ ├── extra-video-features.html
│ │ ├── multiple-audio-formats.html
│ │ ├── multiple-video-formats-no-controls.html
│ │ ├── multiple-video-formats.html
│ │ ├── rabbit320.webm
│ │ ├── simple-video.html
│ │ └── viper.ogg
│ └── tables/
│ ├── advanced/
│ │ ├── items-sold-headers.html
│ │ ├── items-sold-scope.html
│ │ ├── items-sold.html
│ │ ├── minimal-table.css
│ │ ├── nested-tables.html
│ │ ├── spending-record-finished.html
│ │ ├── spending-record.html
│ │ └── timetable-caption.html
│ ├── assessment-finished/
│ │ ├── marking-guide.md
│ │ ├── minimal-table.css
│ │ └── planets-data.html
│ ├── assessment-start/
│ │ ├── blank-template.html
│ │ ├── minimal-table.css
│ │ └── planets-data.txt
│ └── basic/
│ ├── animals-table-fixed.html
│ ├── animals-table.html
│ ├── blank-template.html
│ ├── dogs-table-fixed.html
│ ├── dogs-table.html
│ ├── minimal-table.css
│ ├── personal-pronouns-styled.html
│ ├── personal-pronouns.html
│ ├── simple-table.html
│ ├── timetable-fixed.html
│ └── timetable.html
├── javascript/
│ ├── apis/
│ │ ├── client-side-storage/
│ │ │ ├── cache-sw/
│ │ │ │ └── video-store-offline/
│ │ │ │ ├── index.html
│ │ │ │ ├── index.js
│ │ │ │ ├── style.css
│ │ │ │ ├── sw.js
│ │ │ │ └── videos/
│ │ │ │ ├── crystal.webm
│ │ │ │ ├── elf.webm
│ │ │ │ ├── frog.webm
│ │ │ │ ├── monster.webm
│ │ │ │ ├── pig.webm
│ │ │ │ └── rabbit.webm
│ │ │ ├── indexeddb/
│ │ │ │ ├── notes/
│ │ │ │ │ ├── index-start.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── video-store/
│ │ │ │ ├── index.html
│ │ │ │ ├── index.js
│ │ │ │ ├── style.css
│ │ │ │ └── videos/
│ │ │ │ ├── crystal.webm
│ │ │ │ ├── elf.webm
│ │ │ │ ├── frog.webm
│ │ │ │ ├── monster.webm
│ │ │ │ ├── pig.webm
│ │ │ │ └── rabbit.webm
│ │ │ └── web-storage/
│ │ │ ├── index.html
│ │ │ ├── index.js
│ │ │ └── personal-greeting.html
│ │ ├── document-manipulation/
│ │ │ ├── dom-example-manipulated.html
│ │ │ ├── dom-example.html
│ │ │ ├── shopping-list-finished.html
│ │ │ └── shopping-list.html
│ │ ├── drawing-graphics/
│ │ │ ├── getting-started/
│ │ │ │ ├── 0_canvas_start/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── 1_canvas_template/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── 2_canvas_rectangles/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── 3_canvas_paths/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── 4_canvas_text/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ └── 5_canvas_images/
│ │ │ │ ├── index.html
│ │ │ │ ├── script.js
│ │ │ │ └── style.css
│ │ │ ├── loops_animation/
│ │ │ │ ├── 6_canvas_for_loop/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── 7_canvas_walking_animation/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ └── 8_canvas_drawing_app/
│ │ │ │ ├── index.html
│ │ │ │ ├── script.js
│ │ │ │ └── style.css
│ │ │ ├── threejs-cube/
│ │ │ │ ├── index.html
│ │ │ │ ├── script.js
│ │ │ │ └── style.css
│ │ │ └── threejs-video-cube/
│ │ │ ├── index.html
│ │ │ ├── script.js
│ │ │ └── style.css
│ │ ├── fetching-data/
│ │ │ ├── can-store/
│ │ │ │ ├── can-script.js
│ │ │ │ ├── can-style.css
│ │ │ │ ├── index.html
│ │ │ │ └── products.json
│ │ │ ├── can-store-xhr/
│ │ │ │ ├── can-script.js
│ │ │ │ ├── can-style.css
│ │ │ │ ├── index.html
│ │ │ │ └── products.json
│ │ │ ├── fetch-finish.html
│ │ │ ├── fetch-start.html
│ │ │ ├── verse1.txt
│ │ │ ├── verse2.txt
│ │ │ ├── verse3.txt
│ │ │ └── verse4.txt
│ │ ├── introduction/
│ │ │ ├── bouncing-balls.html
│ │ │ ├── main.js
│ │ │ ├── style.css
│ │ │ └── web-audio/
│ │ │ └── index.html
│ │ ├── third-party-apis/
│ │ │ ├── mapquest/
│ │ │ │ ├── finished/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ └── start/
│ │ │ │ ├── index.html
│ │ │ │ ├── script.js
│ │ │ │ └── style.css
│ │ │ ├── nytimes/
│ │ │ │ ├── finished/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── style.css
│ │ │ │ └── start/
│ │ │ │ ├── index.html
│ │ │ │ ├── script.js
│ │ │ │ └── style.css
│ │ │ └── youtube/
│ │ │ ├── index.html
│ │ │ ├── script.js
│ │ │ └── youtube.css
│ │ └── video-audio/
│ │ ├── finished/
│ │ │ ├── custom-player.js
│ │ │ ├── index.html
│ │ │ ├── style.css
│ │ │ └── video/
│ │ │ └── sintel-short.webm
│ │ └── start/
│ │ ├── index.html
│ │ ├── style.css
│ │ └── video/
│ │ └── sintel-short.webm
│ ├── asynchronous/
│ │ ├── sequencing-animations/
│ │ │ ├── finished/
│ │ │ │ ├── index.html
│ │ │ │ ├── main.js
│ │ │ │ └── style.css
│ │ │ ├── marking-guide.md
│ │ │ └── start/
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ └── style.css
│ │ └── workers/
│ │ ├── finished/
│ │ │ ├── generate.js
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ └── style.css
│ │ └── start/
│ │ ├── generate.js
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── building-blocks/
│ │ ├── allowance-updater.html
│ │ ├── calendar-finished.html
│ │ ├── events/
│ │ │ ├── preventdefault-validation.html
│ │ │ ├── rabbit320.webm
│ │ │ ├── random-color-addeventlistener.html
│ │ │ ├── random-color-eventhandlerattributes.html
│ │ │ ├── random-color-eventhandlerproperty.html
│ │ │ ├── random-color-eventobject.html
│ │ │ ├── show-video-box-fixed.html
│ │ │ ├── show-video-box.html
│ │ │ └── useful-eventtarget.html
│ │ ├── functions/
│ │ │ ├── conflict.html
│ │ │ ├── first.js
│ │ │ ├── function-library-finished.html
│ │ │ ├── function-library.html
│ │ │ ├── function-scope.html
│ │ │ ├── function-stage-2.html
│ │ │ ├── function-stage-3.html
│ │ │ ├── function-stage-4.html
│ │ │ ├── function-start.html
│ │ │ └── second.js
│ │ ├── gallery/
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ ├── marking-guide.md
│ │ │ └── style.css
│ │ ├── loops/
│ │ │ ├── basic-for-improved.html
│ │ │ ├── basic-for.html
│ │ │ ├── contact-search.html
│ │ │ ├── do-while.html
│ │ │ ├── guest-list.html
│ │ │ ├── integer-squares.html
│ │ │ ├── launch-countdown.html
│ │ │ ├── random-canvas-circles.html
│ │ │ └── while.html
│ │ ├── more-color-choices-finished.html
│ │ ├── simple-else-if.html
│ │ ├── simple-switch.html
│ │ ├── simple-ternary.html
│ │ └── tasks/
│ │ ├── conditionals/
│ │ │ ├── conditionals1-download.html
│ │ │ ├── conditionals1.html
│ │ │ ├── conditionals2-download.html
│ │ │ ├── conditionals2.html
│ │ │ ├── conditionals3-download.html
│ │ │ ├── conditionals3.html
│ │ │ └── marking.md
│ │ ├── events/
│ │ │ ├── events1-download.html
│ │ │ ├── events1.html
│ │ │ ├── events2-download.html
│ │ │ ├── events2.html
│ │ │ ├── events3-download.html
│ │ │ ├── events3.html
│ │ │ └── marking.md
│ │ ├── functions/
│ │ │ ├── functions1-download.html
│ │ │ ├── functions1.html
│ │ │ ├── functions2-download.html
│ │ │ ├── functions2.html
│ │ │ ├── functions3-download.html
│ │ │ ├── functions3.html
│ │ │ ├── functions4-download.html
│ │ │ ├── functions4.html
│ │ │ └── marking.md
│ │ ├── loops/
│ │ │ ├── loops1-download.html
│ │ │ ├── loops2-download.html
│ │ │ ├── loops3-download.html
│ │ │ └── marking.md
│ │ ├── playable.js
│ │ └── styles.css
│ ├── introduction-to-js-1/
│ │ ├── assessment-finished/
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ └── marking-guide.md
│ │ ├── assessment-start/
│ │ │ ├── index.html
│ │ │ └── raw-text.txt
│ │ ├── first-splash/
│ │ │ ├── number-guessing-game-start.html
│ │ │ └── number-guessing-game.html
│ │ ├── maths/
│ │ │ ├── conditional.html
│ │ │ └── editable_canvas.html
│ │ ├── tasks/
│ │ │ ├── arrays/
│ │ │ │ ├── arrays1-download.html
│ │ │ │ ├── arrays1.html
│ │ │ │ ├── arrays2-download.html
│ │ │ │ ├── arrays2.html
│ │ │ │ ├── arrays3-download.html
│ │ │ │ ├── arrays3.html
│ │ │ │ ├── arrays4-download.html
│ │ │ │ ├── arrays4.html
│ │ │ │ └── marking.md
│ │ │ ├── math/
│ │ │ │ ├── marking.md
│ │ │ │ ├── math1-download.html
│ │ │ │ ├── math1.html
│ │ │ │ ├── math2-download.html
│ │ │ │ ├── math2.html
│ │ │ │ ├── math3-download.html
│ │ │ │ └── math3.html
│ │ │ ├── playable.js
│ │ │ ├── strings/
│ │ │ │ ├── marking.md
│ │ │ │ ├── strings1-download.html
│ │ │ │ ├── strings1.html
│ │ │ │ ├── strings2-download.html
│ │ │ │ ├── strings2.html
│ │ │ │ ├── strings3-download.html
│ │ │ │ ├── strings3.html
│ │ │ │ ├── strings4-download.html
│ │ │ │ └── strings4.html
│ │ │ ├── styles.css
│ │ │ └── variables/
│ │ │ ├── marking.md
│ │ │ ├── variables1-download.html
│ │ │ ├── variables1.html
│ │ │ ├── variables2-download.html
│ │ │ ├── variables2.html
│ │ │ ├── variables3-download.html
│ │ │ └── variables3.html
│ │ ├── troubleshooting/
│ │ │ └── number-game-errors.html
│ │ └── what-is-js/
│ │ ├── apply-javascript-external.html
│ │ ├── apply-javascript-internal.html
│ │ ├── apply-javascript.html
│ │ ├── javascript-label.html
│ │ └── script.js
│ └── oojs/
│ ├── advanced/
│ │ ├── es2015-class-inheritance.html
│ │ ├── es2015-getters-setters.html
│ │ ├── oojs-class-inheritance-finished.html
│ │ ├── oojs-class-inheritance-start.html
│ │ ├── oojs-class-inheritance-student.html
│ │ └── oojs-class-prototype.html
│ ├── assessment/
│ │ ├── index.html
│ │ ├── main.js
│ │ ├── marking-guide.md
│ │ └── style.css
│ ├── bouncing-balls/
│ │ ├── index-finished.html
│ │ ├── index.html
│ │ ├── main-finished.js
│ │ ├── main.js
│ │ └── style.css
│ ├── introduction/
│ │ ├── oojs-class-finished.html
│ │ ├── oojs-class-further-exercises.html
│ │ ├── oojs-finished.html
│ │ └── oojs.html
│ ├── json/
│ │ ├── JSONTest.html
│ │ ├── heroes-finished-json-parse.html
│ │ ├── heroes-finished.html
│ │ ├── heroes.html
│ │ ├── style.css
│ │ └── superheroes.json
│ └── tasks/
│ ├── json/
│ │ ├── json1-download.html
│ │ ├── json1.html
│ │ ├── marking.md
│ │ └── sample.json
│ ├── object-basics/
│ │ ├── marking.md
│ │ ├── object-basics1-download.html
│ │ ├── object-basics1.html
│ │ ├── object-basics2-download.html
│ │ ├── object-basics2.html
│ │ ├── object-basics3-download.html
│ │ ├── object-basics3.html
│ │ ├── object-basics4-download.html
│ │ └── object-basics4.html
│ ├── oojs/
│ │ ├── marking.md
│ │ ├── oojs1-download.html
│ │ ├── oojs1.html
│ │ ├── oojs2-download.html
│ │ └── oojs2.html
│ ├── playable.js
│ └── styles.css
└── tools-testing/
└── cross-browser-testing/
├── accessibility/
│ ├── bad-semantics.html
│ ├── fake-div-buttons.html
│ ├── good-semantics.html
│ └── native-keyboard-accessibility.html
├── automation/
│ ├── call_bstack.js
│ ├── call_sauce.js
│ ├── gulpfile.js
│ ├── index.html
│ ├── main.js
│ └── style.css
├── feature-detection/
│ ├── basic-styling.css
│ ├── css-feature-detect-finished.html
│ ├── css-feature-detect.html
│ ├── flex-layout.css
│ ├── float-layout.css
│ ├── modernizr-css.css
│ ├── modernizr-css.html
│ ├── modernizr-custom.js
│ ├── modernizr-js.html
│ ├── supports-feature-detect.html
│ └── supports-styling.css
├── html-css/
│ ├── MooTools-Core-1.6.0.js
│ ├── button-with-fallback.html
│ ├── forms-test.html
│ ├── selectivizr-example-start.html
│ ├── selectivizr-example.html
│ ├── selectivizr-min.js
│ └── style.css
├── javascript/
│ ├── .eslintrc.js
│ ├── arrow-function.html
│ ├── bad-for-loop.html
│ ├── broken-js-test.js
│ ├── es6-promise.js
│ ├── fetch-broken/
│ │ ├── index.html
│ │ ├── script.js
│ │ └── style.css
│ ├── fetch-fixed/
│ │ ├── index.html
│ │ ├── script.js
│ │ └── style.css
│ ├── fetch-polyfill-finished.html
│ ├── fetch-polyfill-only-when-needed.html
│ ├── fetch-polyfill.html
│ ├── fetch.js
│ ├── good-for-loop.html
│ ├── polyfills.js
│ └── style.css
├── selenium/
│ ├── bstack_google_test.js
│ ├── google_test.js
│ ├── google_test_multiple.js
│ ├── google_test_remote.js
│ ├── mocha_test.js
│ ├── quick_test.js
│ └── sauce_google_test.js
└── strategies/
└── hidden-info-panel.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
# ----------------------------------------------------------------------------
# CODEOWNERS
# ----------------------------------------------------------------------------
# Order is important. The last matching pattern takes precedence.
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
# ----------------------------------------------------------------------------
* @mdn/content-team
/.github/workflows/ @mdn/engineering
/.github/CODEOWNERS @mdn/content-team @mdn/engineering
/SECURITY.md @mdn/engineering
================================================
FILE: .gitignore
================================================
*.DS_Store
================================================
FILE: .prettierignore
================================================
# This .prettierignore file uses .gitignore syntax
# see https://prettier.io/docs/en/ignore.html#ignoring-files-prettierignore
/css/introduction-to-css/debugging-css/style.css
/html/introduction-to-html/debugging-html/debug-example.html
/tools-testing/cross-browser-testing/javascript/broken-js-test.js
================================================
FILE: .prettierrc.json
================================================
{
"bracketSameLine": true
}
================================================
FILE: .vscode/cspell.json
================================================
{
"$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",
"version": "0.2",
"language": "en-us",
"languageId": "*",
"dictionaries": [
"bash",
"css",
"cpp",
"django",
"filetypes",
"fonts",
"fullstack",
"html",
"latex",
"lorem-ipsum",
"markdown",
"node",
"npm",
"project-words",
"python",
"softwareTerms",
"svelte",
"typescript"
],
"ignorePaths": [
".vscode/cspell.json",
".vscode/extensions.json",
".markdownlint-cli2.jsonc",
"**/*.ogg",
"**/*.mp3",
"**/*.mp4",
"html/introduction-to-html/debugging-html/debug-example.html",
"css/styling-text/**/Lovato-Light-demo.html",
"css/styling-text/**/Lovato-Light-webfont.svg",
"javascript/apis/drawing-graphics/**/*/three.min.js",
"tools-testing/cross-browser-testing/**/*.js",
"css/**/*.otf"
],
"ignoreRegExpList": [
"#[\\w-]*",
"aria-activedescendant=\"(?:[^\\\"]+|\\.)*\"",
"aria-controls=\"(?:[^\\\"]+|\\.)*\"",
"aria-describedby=\"(?:[^\\\"]+|\\.)*\"",
"aria-details=\"(?:[^\\\"]+|\\.)*\"",
"aria-errormessage=\"(?:[^\\\"]+|\\.)*\"",
"aria-flowto=\"(?:[^\\\"]+|\\.)*\"",
"aria-labelledby=\"(?:[^\\\"]+|\\.)*\"",
"aria-owns=\"(?:[^\\\"]+|\\.)*\"",
"Base64",
"class=\"(?:[^\\\"]+|\\.)*\"",
"data-test-id=\"(?:[^\\\"]+|\\.)*\"",
"EscapeCharacters",
"for=\"(?:[^\\\"]+|\\.)*\"",
"HexValues",
"href=\"(?:[^\\\"]+|\\.)*\"",
"id=\"(?:[^\\\"]+|\\.)*\"",
"lang=\".*\">.*",
"src=\"(?:[^\\\"]+|\\.)*\"",
"url\\(\"data\\:image/svg\\+xml.*\"\\)[,;]",
"Urls"
],
"allowCompoundWords": true,
"dictionaryDefinitions": [
{
"name": "project-words",
"path": "./project-words.txt",
"addWords": true
}
]
}
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"davidanson.vscode-markdownlint",
"esbenp.prettier-vscode",
"streetsidesoftware.code-spell-checker"
]
}
================================================
FILE: .vscode/project-words.txt
================================================
Bublé
CEST
döner
Dwindlings
gastropub
Griffiths
Halloumi
iframes
kombucha
Kruse
Leia
Listicle
Lovato
Modernizr
ninjitsu
Nyancat
OOJS
poutine
Quokka
Renan
Selectivizr
Siouxsie
snape
Swindoll
umami
venmo
WASD
WEBVTT
XOXO
zantroke
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Community Participation Guidelines
This repository is governed by Mozilla's code of conduct and etiquette guidelines.
For more details, please read the
[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/).
## How to Report
For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page.
================================================
FILE: LICENSE
================================================
CC0 1.0 Universal
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator and
subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for the
purpose of contributing to a commons of creative, cultural and scientific
works ("Commons") that the public can reliably and without fear of later
claims of infringement build upon, modify, incorporate in other works, reuse
and redistribute as freely as possible in any form whatsoever and for any
purposes, including without limitation commercial purposes. These owners may
contribute to the Commons to promote the ideal of a free culture and the
further production of creative, cultural and scientific works, or to gain
reputation or greater distribution for their Work in part through the use and
efforts of others.
For these and/or other purposes and motivations, and without any expectation
of additional consideration or compensation, the person associating CC0 with a
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
and publicly distribute the Work under its terms, with knowledge of his or her
Copyright and Related Rights in the Work and the meaning and intended legal
effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not limited
to, the following:
i. the right to reproduce, adapt, distribute, perform, display, communicate,
and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or likeness
depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data in
a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation thereof,
including any amended or successor version of such directive); and
vii. other similar, equivalent or corresponding rights throughout the world
based on applicable law or treaty, and any national implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention of,
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
and Related Rights and associated claims and causes of action, whether now
known or unknown (including existing as well as future claims and causes of
action), in the Work (i) in all territories worldwide, (ii) for the maximum
duration provided by applicable law or treaty (including future time
extensions), (iii) in any current or future medium and for any number of
copies, and (iv) for any purpose whatsoever, including without limitation
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
the Waiver for the benefit of each member of the public at large and to the
detriment of Affirmer's heirs and successors, fully intending that such Waiver
shall not be subject to revocation, rescission, cancellation, termination, or
any other legal or equitable action to disrupt the quiet enjoyment of the Work
by the public as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason be
judged legally invalid or ineffective under applicable law, then the Waiver
shall be preserved to the maximum extent permitted taking into account
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
is so judged Affirmer hereby grants to each affected person a royalty-free,
non transferable, non sublicensable, non exclusive, irrevocable and
unconditional license to exercise Affirmer's Copyright and Related Rights in
the Work (i) in all territories worldwide, (ii) for the maximum duration
provided by applicable law or treaty (including future time extensions), (iii)
in any current or future medium and for any number of copies, and (iv) for any
purpose whatsoever, including without limitation commercial, advertising or
promotional purposes (the "License"). The License shall be deemed effective as
of the date CC0 was applied by Affirmer to the Work. Should any part of the
License for any reason be judged legally invalid or ineffective under
applicable law, such partial invalidity or ineffectiveness shall not
invalidate the remainder of the License, and in such case Affirmer hereby
affirms that he or she will not (i) exercise any of his or her remaining
Copyright and Related Rights in the Work or (ii) assert any associated claims
and causes of action with respect to the Work, in either case contrary to
Affirmer's express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or warranties
of any kind concerning the Work, express, implied, statutory or otherwise,
including without limitation warranties of title, merchantability, fitness
for a particular purpose, non infringement, or the absence of latent or
other defects, accuracy, or the present or absence of errors, whether or not
discoverable, all to the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without limitation
any person's Copyright and Related Rights in the Work. Further, Affirmer
disclaims responsibility for obtaining any necessary consents, permissions
or other rights required for any use of the Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to this
CC0 or use of the Work.
For more information, please see
================================================
FILE: README.md
================================================
# learning-area
Welcome to the GitHub repository for the [MDN Learning Area](https://developer.mozilla.org/en-US/Learn).
Most of the code examples shown and discussed in the Learning Area can be found here; the directories in the repo match the module structure of the articles.
The one exception is the [Server-side website programming](https://developer.mozilla.org/en-US/docs/Learn/Server-side) examples — we split these into two separate repositories to make them easier to manage:
* https://github.com/mdn/express-locallibrary-tutorial
* https://github.com/mdn/django-locallibrary-tutorial
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Overview
This policy applies to MDN's website (`developer.mozilla.org`), backend services, and GitHub repositories in the [`mdn`](https://github.com/mdn) organization. Issues affecting other Mozilla products or services should be reported through the [Mozilla Security Bug Bounty Program](https://www.mozilla.org/en-US/security/bug-bounty/).
For non-security issues, please file a [content bug](https://github.com/mdn/content/issues/new/choose), a [website bug](https://github.com/mdn/fred/issues/new/choose) or a [content/feature suggestion](https://github.com/mdn/mdn/issues/new/choose).
## Reporting a Vulnerability
If you discover a potential security issue, please report it privately via .
If you prefer not to use HackerOne, you can report it via .
## Bounty Program
Vulnerabilities in MDN may qualify for Mozilla's Bug Bounty Program. Eligibility and reward amounts are described on .
Please use the above channels even if you are not interested in a bounty reward.
## Responsible Disclosure
Please do not publicly disclose details until Mozilla's security team and the MDN engineering team have verified and fixed the issue.
We appreciate your efforts to keep MDN and its users safe.
================================================
FILE: accessibility/aria/aria-div-buttons.html
================================================
ARIA div buttons
ARIA div buttons
Click me!
Click me too!
And me!
================================================
FILE: accessibility/aria/aria-live.html
================================================
Random quotes
Random quote
================================================
FILE: accessibility/aria/aria-no-live.html
================================================
Random quotes
Random quote
================================================
FILE: accessibility/aria/aria-tabbed-info-box.html
================================================
ARIA tabbed info box
Tab 1
Tab 2
Tab 3
The first tab
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. Vestibulum et orci scelerisque, vulputate tellus quis, lobortis dui. Vivamus varius libero at ipsum mattis efficitur ut nec nisl. Nullam eget tincidunt metus. Donec ultrices, urna maximus consequat aliquet, dui neque eleifend lorem, a auctor libero turpis at sem. Aliquam ut porttitor urna. Nulla facilisi.
The second tab
This tab hasn't got any Lorem Ipsum in it. But the content isn't very exciting all the same.
The third tab
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. And now an ordered list: how exciting!
dui neque eleifend lorem, a auctor libero turpis at sem.
Aliquam ut porttitor urna.
Nulla facilisi
================================================
FILE: accessibility/aria/form-validation-checkbox-disabled.html
================================================
Form validation example
Form validation example
Fields marked with an asterisk (*) are required.
================================================
FILE: accessibility/aria/form-validation-updated.html
================================================
Form validation example
Form validation example
Fields marked with an asterisk (*) are required.
================================================
FILE: accessibility/aria/quotes.json
================================================
[
{
"quote" : "Life is about making an impact, not making an income.",
"author" : "Kevin Kruse"
},
{
"quote" : "Whatever the mind of man can conceive and believe, it can achieve.",
"author" : "Napoleon Hill"
},
{
"quote" : "Strive not to be a success, but rather to be of value.",
"author" : "Albert Einstein"
},
{
"quote" : "Two roads diverged in a wood, and I—I took the one less traveled by, And that has made all the difference",
"author" : "Robert Frost"
},
{
"quote" : "I attribute my success to this: I never gave or took any excuse.",
"author" : "Florence Nightingale"
},
{
"quote" : "You miss 100% of the shots you don’t take.",
"author" : "Wayne Gretzky"
},
{
"quote" : "I’ve missed more than 9000 shots in my career. I’ve lost almost 300 games. 26 times I’ve been trusted to take the game winning shot and missed. I’ve failed over and over and over again in my life. And that is why I succeed.",
"author" : "Michael Jordan"
},
{
"quote" : "The most difficult thing is the decision to act, the rest is merely tenacity.",
"author" : "Amelia Earhart"
},
{
"quote" : "Every strike brings me closer to the next home run.",
"author" : "Babe Ruth"
},
{
"quote" : "Definiteness of purpose is the starting point of all achievement.",
"author" : "W. Clement Stone"
},
{
"quote" : "Life isn’t about getting and having, it’s about giving and being.",
"author" : "Kevin Kruse"
},
{
"quote" : "Life is what happens to you while you’re busy making other plans.",
"author" : "John Lennon"
},
{
"quote" : "We become what we think about.",
"author" : "Earl Nightingale"
},
{
"quote" : "Twenty years from now you will be more disappointed by the things that you didn’t do than by the ones you did do, so throw off the bowlines, sail away from safe harbor, catch the trade winds in your sails. Explore, Dream, Discover.",
"author" : "Mark Twain"
},
{
"quote" : "Life is 10% what happens to me and 90% of how I react to it.",
"author" : "Charles Swindoll"
},
{
"quote" : "The most common way people give up their power is by thinking they don’t have any.",
"author" : "Alice Walker"
},
{
"quote" : "The mind is everything. What you think you become.",
"author" : "Buddha"
},
{
"quote" : "The best time to plant a tree was 20 years ago. The second best time is now.",
"author" : "Chinese Proverb"
},
{
"quote" : "An unexamined life is not worth living.",
"author" : "Socrates"
},
{
"quote" : "Eighty percent of success is showing up.",
"author" : "Woody Allen"
},
{
"quote" : "Your time is limited, so don’t waste it living someone else’s life.",
"author" : "Steve Jobs"
},
{
"quote" : "Winning isn’t everything, but wanting to win is.",
"author" : "Vince Lombardi"
},
{
"quote" : "I am not a product of my circumstances. I am a product of my decisions.",
"author" : "Stephen Covey"
},
{
"quote" : "Every child is an artist. The problem is how to remain an artist once he grows up.",
"author" : "Pablo Picasso"
},
{
"quote" : "You can never cross the ocean until you have the courage to lose sight of the shore.",
"author" : "Christopher Columbus"
}
]
================================================
FILE: accessibility/aria/validation-checkbox-disabled.js
================================================
const inputs = document.querySelectorAll('input');
const labels = document.querySelectorAll('label');
const form = document.querySelector('form');
let formItems = [];
const errorField = document.querySelector('.errors');
const errorList = document.querySelector('.errors ul');
let checkbox;
let checkboxLabel;
const hiddenAlert = document.querySelector('.hidden-alert');
for(let i = 0; i < inputs.length-1; i++) {
if(inputs[i].type !== 'checkbox') {
let obj = {};
obj.label = labels[i];
obj.input = inputs[i];
formItems.push(obj);
} else {
checkbox = inputs[i];
checkboxLabel = labels[i];
}
}
errorField.style.left = '-100%';
toggleMusician(false);
form.onsubmit = validate;
function validate(e) {
errorList.innerHTML = '';
for(let i = 0; i < formItems.length; i++) {
let testItem = formItems[i];
if(testItem.input.value === '' && testItem.input.disabled === false) {
errorField.style.left = '390px';
createLink(testItem);
}
}
if(errorList.innerHTML !== '') {
e.preventDefault();
}
}
function createLink(testItem) {
const listItem = document.createElement('li');
const anchor = document.createElement('a');
anchor.textContent = testItem.input.name + ' field is empty: fill in your ' + testItem.input.name + '.';
anchor.href = '#' + testItem.input.name;
anchor.onclick = function() {
testItem.input.focus();
};
listItem.appendChild(anchor);
errorList.appendChild(listItem);
}
checkbox.onchange = function() {
if(checkbox.checked) {
toggleMusician(true);
} else {
toggleMusician(false);
}
};
function toggleMusician(bool) {
let instruItem = formItems[formItems.length-1];
if(bool) {
instruItem.input.disabled = false;
instruItem.label.style.color = '#000';
instruItem.input.setAttribute('aria-disabled', 'false');
hiddenAlert.textContent = 'Instruments played field now enabled; use it to tell us what you play.';
} else {
instruItem.input.disabled = true;
instruItem.label.style.color = '#999';
instruItem.input.setAttribute('aria-disabled', 'true');
hiddenAlert.textContent = 'Instruments played field now disabled.';
}
}
================================================
FILE: accessibility/aria/validation.js
================================================
const inputs = document.querySelectorAll('input');
const labels = document.querySelectorAll('label');
const form = document.querySelector('form');
let formItems = [];
const errorField = document.querySelector('.errors');
const errorList = document.querySelector('.errors ul');
for(let i = 0; i < inputs.length-1; i++) {
let obj = {};
obj.label = labels[i];
obj.input = inputs[i];
formItems.push(obj);
}
errorField.style.left = '-100%';
form.onsubmit = validate;
function validate(e) {
errorList.innerHTML = '';
for(let i = 0; i < formItems.length; i++) {
let testItem = formItems[i];
if(testItem.input.value === '') {
errorField.style.left = '360px';
createLink(testItem);
}
}
if(errorList.innerHTML !== '') {
e.preventDefault();
}
}
function createLink(testItem) {
const listItem = document.createElement('li');
const anchor = document.createElement('a');
anchor.textContent = testItem.input.name + ' field is empty: fill in your ' + testItem.input.name + '.';
anchor.href = '#' + testItem.input.name;
anchor.onclick = function() {
testItem.input.focus();
};
listItem.appendChild(anchor);
errorList.appendChild(listItem);
}
================================================
FILE: accessibility/aria/website-aria-roles/index.html
================================================
Example website with ARIA roles
Header
Article heading
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.
subsection
Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.
Pelientesque auctor nisi id magna consequat sagittis. Curabitur dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.
Another subsection
Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum soclis natoque penatibus et manis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.
Vivamus fermentum semper porta. Nunc diam velit, adipscing ut tristique vitae sagittis vel odio. Maecenas convallis ullamcorper ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, is fringille sem nunc vet mi.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.
subsection
Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.
Pelientesque auctor nisi id magna consequat sagittis. Curabitur dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.
Another subsection
Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum soclis natoque penatibus et manis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.
Vivamus fermentum semper porta. Nunc diam velit, adipscing ut tristique vitae sagittis vel odio. Maecenas convallis ullamcorper ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, is fringille sem nunc vet mi.
Tall, lumbering, angry, dangerous. The real live bears of this world are proud, independent creatures, self-serving and always on the hunt for food. Nothing like the bears you see on TV, like Baloo from renowned documentary, The Jungle Book.
So what are bears really like, and why does the world's media portray them with such a skewed vision? In this article we try to answer those questions, and give you a real insight into the life of the bear.
Types of bear
Bears come in two varieties — large and medium. You don't get small bears. If you have seen a small bear, then it was in fact probably a baby bear (cub) from another species.
Bears can also be classified in terms of their habitat — both large and medium bears are just as at home in urban areas as they are in the countryside. Different habitats encourange different behaviour however, as you'll find out below. The below table also gives you some useful facts about bears.
Bear Type
Coat
Adult size
Habitat
Lifespan
Diet
Wild
Brown or black
1.4 to 2.8 meters
Woods and forests
25 to 28 years
Fish, meat, plants
Urban
North Face
18 to 22
Condos and coffee shops
20 to 32 years
Starbucks, sushi
Habitats and Eating habits
Wild bears eat a variety of meat, fish, fruit, nuts, and other naturally growing ingredients. In general they will hunt for food themselves in woodland or rivers, but at a push they will track down their sustenance from farms or country houses. They tend to live in relative isolation, in caves, tents, or cottages. The below image shows a big brown wild bear, standing in a river looking for fish to eat.
Urban (gentrified) bears on the other hand have largely abandoned the old ways. They will hunt other urban creatures if necessary (including other predators like rats and foxes), but prefer to scavenge from readily available urban food outlets like dumpsters, bins, and fast food joints. When food has proven scarce, urban bears have even been known to break into people's kitchens and steal essentials like baked beans, ready meals, and microwave ovens. Below you can see an urban polar bear, looking through the railings of his garden while contemplating whether to eat at Nandos or Taco Bell.
Urban bears will sleep anywhere they can, from bus shelters and parks, to the toilets in McDonald's, to their own apartment.
Mating rituals
Bears are romantic creatures by nature, and will naturally look for a mate that they can spend the rest of their lives with. They will woo a potential suitor by making their dwelling look attractive — for example with cave paintings or a bed of reeds in the case of a wild bear, and mood lighting and a Michael Bublé CD in the case of an urban bear.
The following audio clip contains a fact file providing more details about bear mating rituals, along with samples and quotes from experts. You can also access a text transcript of the audio clip.
Add comment
Comments
Bob Fossil
Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.
================================================
FILE: accessibility/assessment-finished/main.js
================================================
// functionality for showing/hiding the comments section
const showHideBtn = document.querySelector('.show-hide');
const commentWrapper = document.querySelector('.comment-wrapper');
commentWrapper.style.display = 'none';
showHideBtn.onclick = function() {
let showHideText = showHideBtn.textContent;
if(showHideText === 'Show comments') {
showHideBtn.textContent = 'Hide comments';
commentWrapper.style.display = 'block';
} else {
showHideBtn.textContent = 'Show comments';
commentWrapper.style.display = 'none';
}
};
// functionality for adding a new comment via the comments form
const form = document.querySelector('.comment-form');
const nameField = document.querySelector('#name');
const commentField = document.querySelector('#comment');
const list = document.querySelector('.comment-container');
form.onsubmit = function(e) {
e.preventDefault();
submitComment();
};
function submitComment() {
const listItem = document.createElement('li');
const namePara = document.createElement('p');
const commentPara = document.createElement('p');
const nameValue = nameField.value;
const commentValue = commentField.value;
namePara.textContent = nameValue;
commentPara.textContent = commentValue;
list.appendChild(listItem);
listItem.appendChild(namePara);
listItem.appendChild(commentPara);
nameField.value = '';
commentField.value = '';
}
================================================
FILE: accessibility/assessment-finished/marking-guide.md
================================================
# Marking guide for "Accessibility troubleshooting"
The following guide outlines a marking guide for the MDN Learning Area Accessibility Topic — [Accessibility troubleshooting](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/Accessibility_troubleshooting). Each subtask detailed in the assessment is listed below, along with an explanation of how many marks the task is worth, and the mark breakdown.
Note: These are guidelines, not set in stone rules — you are of course free to use your judgement on mark awarding when you meet an edge case, or something that isn't clear cut.
The overall mark awarded is out of 37. Work out their final mark, and then divide by 37 and multiply by 100 to give a percentage mark. For reference, you can find a [finished version of the site](index.html) that would be awarded top marks.
## Color
The text is difficult to read because of the current color scheme. Can you do a test of the current color contrast (text/background), report the results of the test, and then fix it by changing the assigned colors?
Two marks for this — one for checking the current text/background contrast in a checker like WebAIM's [Color Contrast Checker](http://webaim.org/resources/contrastchecker/) and reporting the results in some way, and one for updating the current color scheme to one with good contrast (i.e. passes WCAG AA in the checker).
## Semantic HTML
The content is still not very accessible - report on what happens when you try to navigate it using a screenreader.
One mark; Your report should give some kind of indication that you can't jump between headings and use them as signposts, and you can't even tell where headings and paragraphs start and end.
Can you update the article text to make it easier for screenreader users to navigate?
Eight marks.
The line breaks (<br> tags) all need to be removed (2).
The <font> elements need to be replaced with appropriate heading elements (<h1>, <h2>, <h3>) (2).
The paragraphs need to be wrapped in paragraph elements (<p>)(2).
In the CSS file, font[size="7"]/font[size="6"]/font[size="5"] need to be replaced with h1/h2/h3.
The navigation menu part of the site (wrapped in <div class="nav"></div>) could be made more accessible by putting it in a proper HTML5 semantic element. Which one should it be updated to? Make the update.
Three marks.
The <div class="nav"></div> needs be replaced with <nav></nav>
In the CSS file, instances of div[class="nav"] need to be replaced with nav.
## The images
The images are currently inaccessible to screenreader users. Can you fix this?
Three marks. You can fix this by adding in alternative text in any suitable way; see Text alternatives — describing the image in the text and perhaps also using aria-labelledby to link the two is good. you could also use a plain old alt attribute.
## The audio player
The audio isn't accessible to hearing impaired (deaf) people - can you add some kind of accessible alternative for these users?
Two marks. Any transcript system works for this simple example - a link to a separate file, the transcript written in the same page, etc. They just need to listen to the audio file, write out the transcription, and add it to their page in some way.
The audio isn't accessible to those using older browsers that don't support HTML5 audio. How can you allow them to still access the audio?
Two marks. Adding a link to the audio into the alternative contained inside the
## The forms
The input element in the search form at the top could do with a label, but we don't want to add a visible text label that would potentially spoil the design and isn't really needed by sighted users. How can you add a label that is only accessible to screenreaders?
Two marks. You can add a descriptive label into an aria-label attribute on the input element. This will then be read out by screenreaders when the input is encountered.
The two input elements in the comment form have visible text labels, but they are not unambiguously associated with their labels — how do you achieve this? Note that you'll need to update some of the CSS rule as well.
Four marks. The label text should be wrapped inside <label> elements, with for attributes containing the ID values of the input elements they are the labels for.
## The show/hide comment control
The show/hide comment control button is not current keyboard-accessible. Can you make it keyboard accessible, both in terms of focusing it, and activating it using the return key?
Two marks. This can be managed easily by changing the <div> element that currently marks the button up to a <button> element. Or you could use tabindex and JavaScript to fix the button; see Building keyboard accessibility back in. The former is a much easier method however.
## The table
The data table is not currently very accessible — it is hard for screenreader users to associate data rows and columns together, and the table also has no kind of summary to make it clear what it shows. Can you add some features to your HTML to fix this problem?
Six marks.
They should add a suitable summary of the table in a summary attribute or <caption> element.
They should turn each cell in the first row and column into headings (<th>).
They should add scope="col" to the headings in the first row, and scope="row" to the headings in the first column.
## Other considerations
Can you list two more ideas for improvements that would make the website more accessible?
Two marks for this. Anything reasonable really; the ideas we had are:
Add client-side validation to the comment form
Use media queries to make the site more usable on mobile devices.
Find a way to announce screenreader users how many comments are displayed when the show comments control button is clicked. For example, put the role attribute with "alert" value on the h2 element in the comments section and update its text like so "Comments (1 available)".
Tall, lumbering, angry, dangerous. The real live bears of this world are proud, independent creatures, self-serving and always on the hunt for food. Nothing like the bears you see on TV, like Baloo from renowned documentary, The Jungle Book.
So what are bears really like, and why does the world's media portray them with such a skewed vision? In this article we try to answer those questions, and give you a real insight into the life of the bear.
Types of bear
Bears come in two varieties — large and medium. You don't get small bears. If you have seen a small bear, then it was in fact probably a baby bear (cub) from another species.
Bears can also be classified in terms of their habitat — both large and medium bears are just as at home in urban areas as they are in the countryside. Different habitats encourange different behaviour however, as you'll find out below. The below table also gives you some useful facts about bears.
Bear Type
Coat
Adult size
Habitat
Lifespan
Diet
Wild
Brown or black
1.4 to 2.8 meters
Woods and forests
25 to 28 years
Fish, meat, plants
Urban
North Face
18 to 22
Condos and coffee shops
20 to 32 years
Starbucks, sushi
Habitats and Eating habits
Wild bears eat a variety of meat, fish, fruit, nuts, and other naturally growing ingredients. In general they will hunt for food themselves in woodland or rivers, but at a push they will track down their sustenance from farms or country houses. They tend to live in relative isolation, in caves, tents, or cottages.
Urban (gentrified) bears on the other hand have largely abandoned the old ways. They will hunt other urban creatures if necessary (including other predators like rats and foxes), but prefer to scavenge from readily available urban food outlets like dumpsters, bins, and fast food joints. When food has proven scarce, urban bears have even been known to break into people's kitchens and steal essentials like baked beans, ready meals, and microwave ovens.
Urban bears will sleep anywhere they can, from bus shelters and parks, to the toilets in McDonald's, to their own apartment.
Mating rituals
Bears are romantic creatures by nature, and will naturally look for a mate that they can spend the rest of their lives with. They will woo a potential suitor by making their dwelling look attractive — for example with cave paintings or a bed of reeds in the case of a wild bear, and mood lighting and a Michael Bublé CD in the case of an urban bear.
The following audio clip contains a fact file providing more details about bear mating rituals, along with samples and quotes from experts.
Show comments
Add comment
Comments
Bob Fossil
Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.
Tall, lumbering, angry, dangerous. The real live bears of this world are proud, independent creatures, self-serving and always on the hunt for food. Nothing like the bears you see on TV, like Baloo from renowned documentary, The Jungle Book.
So what are bears really like, and why does the world's media portray them with such a skewed vision? In this article we try to answer those questions, and give you a real insight into the life of the bear.
Types of bear
Bears come in two varieties — large and medium. You don't get small bears. If you have seen a small bear, then it was in fact probably a baby bear (cub) from another species.
Bears can also be classified in terms of their habitat — both large and medium bears are just as at home in urban areas as they are in the countryside. Different habitats encourange different behaviour however, as you'll find out below. The below table also gives you some useful facts about bears.
Bear Type
Coat
Adult size
Habitat
Lifespan
Diet
Wild
Brown or black
1.4 to 2.8 meters
Woods and forests
25 to 28 years
Fish, meat, plants
Urban
North Face
18 to 22
Condos and coffee shops
20 to 32 years
Starbucks, sushi
Habitats and Eating habits
Wild bears eat a variety of meat, fish, fruit, nuts, and other naturally growing ingredients. In general they will hunt for food themselves in woodland or rivers, but at a push they will track down their sustenance from farms or country houses. They tend to live in relative isolation, in caves, tents, or cottages.
Urban (gentrified) bears on the other hand have largely abandoned the old ways. They will hunt other urban creatures if necessary (including other predators like rats and foxes), but prefer to scavenge from readily available urban food outlets like dumpsters, bins, and fast food joints. When food has proven scarce, urban bears have even been known to break into people's kitchens and steal essentials like baked beans, ready meals, and microwave ovens.
Urban bears will sleep anywhere they can, from bus shelters and parks, to the toilets in McDonald's, to their own apartment.
Mating rituals
Bears are romantic creatures by nature, and will naturally look for a mate that they can spend the rest of their lives with. They will woo a potential suitor by making their dwelling look attractive — for example with cave paintings or a bed of reeds in the case of a wild bear, and mood lighting and a Michael Bublé CD in the case of an urban bear.
The following audio clip contains a fact file providing more details about bear mating rituals, along with samples and quotes from experts.
Show comments
Add comment
Comments
Bob Fossil
Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.
================================================
FILE: accessibility/css/form-validation.html
================================================
Form validation example
Form validation example
================================================
FILE: accessibility/css/mouse-and-keyboard-events.html
================================================
Mouse and keyboard events example
Mouse and keyboard events example
================================================
FILE: accessibility/css/table-css.html
================================================
Table CSS example
Table CSS example
Name
Age
Gender
Gabriel
13
Male
Elva
8
Female
Freida
5
Female
================================================
FILE: accessibility/css/validation.js
================================================
const inputs = document.querySelectorAll('input');
const labels = document.querySelectorAll('label');
const form = document.querySelector('form');
let formItems = [];
const errorField = document.querySelector('.errors');
const errorList = document.querySelector('.errors ul');
for(let i = 0; i < inputs.length-1; i++) {
let obj = {};
obj.label = labels[i];
obj.input = inputs[i];
formItems.push(obj);
}
errorField.style.left = '-100%';
form.onsubmit = validate;
function validate(e) {
errorList.innerHTML = '';
for(let i = 0; i < formItems.length; i++) {
let testItem = formItems[i];
if(testItem.input.value === '') {
errorField.style.left = '360px';
createLink(testItem);
}
}
if(errorList.innerHTML !== '') {
e.preventDefault();
}
}
function createLink(testItem) {
const listItem = document.createElement('li');
const anchor = document.createElement('a');
anchor.textContent = testItem.input.name + ' field is empty: fill in your ' + testItem.input.name + '.';
anchor.href = '#' + testItem.input.name;
anchor.onclick = function() {
testItem.input.focus();
};
listItem.appendChild(anchor);
errorList.appendChild(listItem);
}
================================================
FILE: accessibility/html/accessible-image.html
================================================
Accessible image example
Images
The Mozilla red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.
================================================
FILE: accessibility/html/bad-form.html
================================================
Bad form example
Bad form
================================================
FILE: accessibility/html/bad-links.html
================================================
Bad links example
================================================
FILE: accessibility/html/bad-semantics.html
================================================
Bad semantics exampleMy heading
Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl. Swab barque interloper chantey doubloon starboard grog black jack gangway rutters. Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors. Bring a spring upon her cable holystone blow the man down spanker Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to.
Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Case shot Shiver me timbers gangplank crack Jenny's tea cup ballast Blimey lee snow crow's nest. Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits. Crack Jennys tea cup Sail ho killick transom trysail Chain Shot. Measured fer yer chains lateen sail Davy Jones' Locker prow wench weigh anchor. Port me hang the jib Davy Jones' Locker skysail pirate. Sail ho run a shot across the bow fluke belaying pin boom carouser. Chase guns broadside Corsair mizzen provost Admiral of the Black. Red ensign list brigantine line booty hands. Booty topgallant grapple coffer pinnace fire ship.
My subheading
Yard Pirate Round hearties Sail ho log salmagundi. Ye scuttle smartly Jack Tar man-of-war measured fer yer chains. Shrouds sloop transom quarter wench case shot. Hempen halter Cat o'nine tails red ensign strike colors lugsail hogshead. Barbary Coast parrel bilge ho aft gibbet. Tack red ensign crimp yo-ho-ho Buccaneer gaff. Keel careen scuppers port hands reef sails. Hands square-rigged draft lugsail heave to bounty. Clap of thunder scuppers trysail cable yo-ho-ho coxswain. Jury mast cable mizzenmast hail-shot keelhaul execution dock. Black jack ho shrouds bilge water avast hardtack. Clipper deadlights brigantine measured fer yer chains poop deck Blimey. Topsail Arr yo-ho-ho pillage bucko handsomely. Draft pinnace holystone Cat o'nine tails Letter of Marque loaded to the gunwalls.
My 2nd subheading
Topgallant American Main coxswain poop deck sloop come about. Piracy hail-shot handsomely Spanish Main flogging interloper. Run a rig lee yo-ho-ho gangplank Pieces of Eight gabion. Sloop Spanish Main reef capstan deadlights rope's end. Six pounders red ensign mizzenmast mizzen chase guns topmast. Broadside fore splice the main brace heave down Chain Shot bounty. Poop deck ballast Jack Tar pressgang jack walk the plank.
================================================
FILE: accessibility/html/bad-table.html
================================================
Bad table example
A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.
================================================
FILE: accessibility/html/good-form.html
================================================
Good form example
Good form
================================================
FILE: accessibility/html/good-links.html
================================================
Good links example
================================================
FILE: accessibility/html/good-semantics.html
================================================
Good semantics example
My heading
Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl. Swab barque interloper chantey doubloon starboard grog black jack gangway rutters. Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors. Bring a spring upon her cable holystone blow the man down spanker Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to.
Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Case shot Shiver me timbers gangplank crack Jennys tea cup ballast Blimey lee snow crow's nest rutters. Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits. Crack Jennys tea cup Sail ho killick transom trysail Chain Shot. Measured fer yer chains lateen sail Davy Jones' Locker prow wench weigh anchor. Port me hang the jib Davy Jones' Locker skysail pirate. Sail ho run a shot across the bow fluke belaying pin boom carouser. Chase guns broadside Corsair mizzen provost Admiral of the Black. Red ensign list brigantine line booty hands. Booty topgallant grapple coffer pinnace fire ship.
My subheading
Yard Pirate Round hearties Sail ho log salmagundi. Ye scuttle smartly Jack Tar man-of-war measured fer yer chains. Shrouds sloop transom quarter wench case shot. Hempen halter Cat o'nine tails red ensign strike colors lugsail hogshead. Barbary Coast parrel bilge ho aft gibbet. Tack red ensign crimp yo-ho-ho Buccaneer gaff. Keel careen scuppers port hands reef sails. Hands square-rigged draft lugsail heave to bounty. Clap of thunder scuppers trysail cable yo-ho-ho coxswain. Jury mast cable mizzenmast hail-shot keelhaul execution dock. Black jack ho shrouds bilge water avast hardtack. Clipper deadlights brigantine measured fer yer chains poop deck Blimey. Topsail Arr yo-ho-ho pillage bucko handsomely. Draft pinnace holystone Cat o'nine tails Letter of Marque loaded to the gunwalls.
My 2nd subheading
Topgallant American Main coxswain poop deck sloop come about. Piracy hail-shot handsomely Spanish Main flogging interloper. Run a rig lee yo-ho-ho gangplank Pieces of Eight gabion. Sloop Spanish Main reef capstan deadlights rope's end. Six pounders red ensign mizzenmast mizzen chase guns topmast. Broadside fore splice the main brace heave down Chain Shot bounty. Poop deck ballast Jack Tar pressgang jack walk the plank.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.
subsection
Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.
Pelientesque auctor nisi id magna consequat sagittis. Curabitur dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.
Another subsection
Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum soclis natoque penatibus et manis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.
Vivamus fermentum semper porta. Nunc diam velit, adipscing ut tristique vitae sagittis vel odio. Maecenas convallis ullamcorper ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, is fringille sem nunc vet mi.
================================================
FILE: accessibility/mobile/common-job-types.html
================================================
Common job types example
Common job types form
================================================
FILE: accessibility/mobile/html5-form-examples.html
================================================
HTML5 form examples
HTML5 form examples
================================================
FILE: accessibility/mobile/multi-control-box-drag.html
================================================
Multi control box drag example
================================================
FILE: accessibility/mobile/simple-box-drag.html
================================================
Simple box drag example
================================================
FILE: accessibility/mobile/simple-button-example.html
================================================
Simple button example
Simple button example
================================================
FILE: accessibility/multimedia/audio-transcript-ui/index.html
================================================
Audio transcript example
Audio transcript example
00:00
Person1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at convallis libero, ut ultricies massa. Integer vel tempor nisi. Nunc scelerisque enim est. Duis lorem ipsum, semper vitae sem at, ultricies interdum ex.
Person 2: In consectetur maximus blandit. Curabitur convallis iaculis quam, eu porta erat suscipit sit amet. Morbi viverra placerat ipsum, non bibendum libero egestas eu. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed quis condimentum ante. Nullam ullamcorper faucibus eros. Quisque egestas non risus a faucibus. Curabitur luctus tincidunt turpis in scelerisque.
Person 1: Suspendisse sapien ipsum, lacinia eu bibendum in, congue eu purus. Sed fringilla sollicitudin faucibus. Cras sodales sapien neque, eget gravida augue lobortis ac. Mauris blandit faucibus porta.
Person 2: Fusce non libero eget nisl porta egestas ut sed elit. Nullam molestie lectus ut elementum sagittis. Donec dictum nunc leo, quis gravida diam varius non. Nam ac nisl vel nibh iaculis convallis vel eget arcu. Mauris pharetra purus ac ornare pellentesque. Fusce in leo nunc. Nunc eget vehicula sem, quis aliquam lorem.
Person 3: Ut auctor ornare pulvinar. Morbi nisl ipsum, pellentesque et bibendum eget, vestibulum in massa. Cras egestas cursus est sed ultrices. Etiam vel dui felis.
================================================
FILE: accessibility/tasks/html-css/aria/marking.md
================================================
# WAI-ARIA marking guide
The aim of these tasks is to demonstrate an understanding of the techniques covered in the [WAI-ARIA Basics](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/WAI-ARIA_basics) lesson in Learn Web Development on MDN.
## Task 1
In our first ARIA task, we present you with a section of non-semantic markup, which is obviously meant to be a list. Assuming you are not able to change the elements used, how can you allow screenreader users to recognize this as a list?
The `list` and `listitem` roles are what you need here. The updated markup would look like so:
```html
Pig
Gazelle
Llama
Majestic moose
Hedgehog
```
## Task 2
In our second WAI-ARIA task, we present a simple search form, and we want you to add in a couple of WAI-ARIA features to improve its accessibility:
1. How can you allow the search form to be called out as a separate landmark on the page by screenreaders, to make it easily findable?
2. How can you give the search input a suitable label, without explicitly adding a visible text label to the DOM?
Answers:
1. Give the `
```
## Task 3
For this final WAI-ARIA task, we return to an example we previously saw in the [CSS and JavaScript skilltest](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/CSS_and_JavaScript/Test_your_skills:_CSS_and_JavaScript_accessibility). As before, we have a simple app that presents a list of animal names. Clicking one of the animal names causes a further description of that animal to appear in a box below the list. Here, we are starting with a mouse- and keyboard-accessible version.
The problem we have now is that when the DOM changes to show a new description, screenreaders cannot see what has changed. Can you update it so that description changes are announced by the screenreader?
There are two ways to solve this:
- Add an `aria-live=""` attribute to the animal-description `
` to turn it into a live region, so when its content changes, the updated content will be read out by a screenreader. The best value is probably `assertive`, which makes the screenreader read out the updated content as soon as it changed. `polite` means that the screenreader will wait until other descriptions have finished before it starts reading out the changed content.
- Add a `role="alert"` attribute to the animal-description `
`, to make it have alert box semantics. This has the same effect on the screenreader as setting `aria-live="assertive"` on it.
================================================
FILE: accessibility/tasks/html-css/css/css-a11y1-download.html
================================================
CSS accessibility: Task 1
Swab barque interloper chantey doubloon starboard grog black jack gangway rutters.
I am the walrus
Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors.
================================================
FILE: accessibility/tasks/html-css/css/marking.md
================================================
# CSS and JS accessibility marking guide
The aim of these tasks is to demonstrate an understanding of the techniques covered in the [CSS and JavaScript accessibility best practices](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/CSS_and_JavaScript) lesson in Learn Web Development on MDN.
## Task 1
In the first task you are presented with a list of links. However, their accessibility is pretty bad — there is no way to really tell that they are links, or to tell which one the user is focussed on.
We'd like you to assume that the existing ruleset with the `a` selector is supplied by some CMS, and that you can't change it — instead, you need to create new rules to make the links look and behave like links, and for the user to be able to tell where they are in the list.
The CSS could look something like this:
```css
li a {
text-decoration: underline;
color: rgb(150, 0, 0);
}
li a:hover,
li a:focus {
text-decoration: none;
color: rgb(255, 0, 0);
}
```
## Task 2
In this next task you are presented with a simple bit of content — just headings and paragraphs. There are accessibility issues with the colors and sizing of the text; we'd like you to:
1. Explain what the problems are, and what the guidelines are that state the acceptable values for color and sizing.
2. Select new values for the color and font-size that fix the problem.
3. Update the CSS with these new values to fix the problem.
4. Test the code to make sure the problem is now fixed. Explain what tools or methods you used to select the new values and test the code.
The answers:
1. (Q1) The problems are that first of all, the color contrast is not acceptable, as per WCAG criteria [1.4.3 (AA)](https://www.w3.org/TR/WCAG21/#contrast-minimum) and [1.4.6 (AAA)](https://www.w3.org/TR/WCAG21/#contrast-enhanced), and secondly, the text is sized using vw units, which means that it is not zoomable in most browsers. [WCAG 1.4.4 (AA)](https://www.w3.org/TR/WCAG21/#resize-text) states that text should be resizable.
2. (Qs 2 and 3) to fix the code, you need to
- Choose a much better contrasting set of background and foreground colors.
- Use some different units to size the text (such as rem or even px), or even implement something that uses a combination of vw and other units, if you want it resizable but still relative in part to the viewport size
3. For testing:
- You can test color contrast using a tool such as [aXe](https://www.deque.com/axe/), The [Firefox Accessibility Inspector](https://developer.mozilla.org/en-US/docs/Tools/Accessibility_inspector), or even a simple standalone web page tool like the [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/).
- For text resizing, you'd need to load the example in a browser and try to resize it. Resizing vw unit-sized text works in Safari, but not Firefox or Chromium-based browsers.
For the updated code, something like this would work for the updated color scheme:
```css
main {
padding: 20px;
background-color: red;
}
h1,
h2,
p {
color: black;
}
```
And something like this would work for the font sizing:
```css
h1 {
font-size: calc(2.5rem);
}
h2 {
font-size: calc(2rem);
}
p {
font-size: calc(1.2rem);
}
```
Or this, if you want to do something a bit cleverer that gives you resizable viewport-relative units:
```css
h1 {
font-size: calc(1.5vw + 1rem);
}
h2 {
font-size: calc(1.2vw + 0.7rem);
}
p {
font-size: calc(1vw + 0.4rem);
}
```
## Task 3
In our final task here, you have some JavaScripting to do. We have a simple app that presents a list of animal names. Clicking one of the animal names causes a further description of that animal to appear in a box below the list.
But it is not very accessible — in its current state you can only operate it with the mouse. We'd like you to add to the HTML and JavaScript to make it keyboard acessible too.
Answers:
1. To begin with, you'll need to add `tabindex="0"` to the list items to make them focusable via the keyboard.
2. Then you'll need to add in another event listener inside the `forEach()` loop, to make the code respond to keys being pressed while the list items are selected. It is probably a good idea to make it respond to a specific key, such as "Enter", in which case something like the following is probably acceptable:
```css
item.addEventListener('keyup', function(e) {
if(e.key === 'Enter') {
handleSelection(e);
}
});
```
================================================
FILE: accessibility/tasks/html-css/html/html-a11y1-download.html
================================================
HTML accessibility: Task 1
Need help?
If you have any problems with our products, our support center can offer you all the help you need, whether you want:
1. Advice choosing a new product
2. Tech support on an existing product
3. Refund and cancellation assistance
Contact us now
Our help center contains live chat, e-mail addresses, and phone numbers.
Find Contact Details
Find out answers
Our Forums section contains a large knowledge base of searchable previously asked questions, and you can always ask a new question if you can't find the answer you're looking for.
Access Forums
================================================
FILE: accessibility/tasks/html-css/html/html-a11y1.html
================================================
HTML accessibility: Task 1
Need help?
If you have any problems with our products, our support center can offer you all the help you need, whether you want:
1. Advice choosing a new product
2. Tech support on an existing product
3. Refund and cancellation assistance
Contact us now
Our help center contains live chat, e-mail addresses, and phone numbers.
Find Contact Details
Find out answers
Our Forums section contains a large knowledge base of searchable previously asked questions, and you can always ask a new question if you can't find the answer you're looking for.
Access Forums
================================================
FILE: accessibility/tasks/html-css/html/html-a11y2-download.html
================================================
HTML accessibility: Task 2
================================================
FILE: accessibility/tasks/html-css/html/html-a11y2.html
================================================
HTML accessibility: Task 2
================================================
FILE: accessibility/tasks/html-css/html/html-a11y3-download.html
================================================
HTML accessibility: Task 3
For more information about our activities, check out our fundraising page (click here), education page (click here), sponsorship pack (click here), and assessment sheets (click here).
================================================
FILE: accessibility/tasks/html-css/html/html-a11y3.html
================================================
HTML accessibility: Task 3
For more information about our activities, check out our fundraising page (click here), education page (click here), sponsorship pack (click here), and assessment sheets (click here).
================================================
FILE: accessibility/tasks/html-css/html/html-a11y4-download.html
================================================
HTML accessibility: Task 4
Groovy images
================================================
FILE: accessibility/tasks/html-css/html/html-a11y4.html
================================================
HTML accessibility: Task 4
Groovy images
================================================
FILE: accessibility/tasks/html-css/html/marking.md
================================================
# HTML accessibility marking guide
The aim of these tasks is to demonstrate an understanding of the techniques covered in the [HTML: A good basis for accessibility](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/HTML) lesson in Learn Web Development on MDN.
## Task 1
In this task we will test your understanding of text semantics, and why they are good for accessibility. You don't need to worry too much about recreating the _exact_ same look and text sizing, as long as the semantics are good.
The given text is a simple information panel with action buttons:
```html
Need help?
If you have any problems with our products, our support center can offer you all
the help you need, whether you want:
1. Advice choosing a new product
2. Tech support on an existing product
3. Refund and cancellation assistance
Contact us now
Our help center contains live chat, e-mail addresses, and phone numbers.
Find Contact Details
Find out answers
Our Forums section contains a large knowledge base of searchable previously
asked questions, and you can always ask a new question if you can't find the
answer you're looking for.
Access forums
```
But of course, this is terrible for semantics and accessibility. A much better set of markup would look like so:
```html
Need help?
If you have any problems with our products, our support center can offer you
all the help you need, whether you want:
Advice choosing a new product
Tech support on an existing product
Refund and cancellation assistance
Contact us now
Our help center contains live chat, e-mail addresses, and phone numbers.
Find out answers
Our Forums section contains a large knowledge base of searchable previously
asked questions, and you can always ask a new question if you can't find the
answer you're looking for.
```
You can get a couple of extra marks for:
1. Just using `
Add comment
Comments
Bob Fossil
Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.