var tests = [ { id: 'semantics', name: 'Semantics', column: 'left', items: [ { id: 'parsing', name: 'Parsing rules', status: 'stable', items: [ { id: 'doctype', name: '<!DOCTYPE html> triggers standards mode', urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/syntax.html#the-doctype' ] ] }, { id: 'tokenizer', name: 'HTML5 tokenizer', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/syntax.html#parsing' ], [ 'mdn', '/HTML/HTML5/HTML5_Parser' ] ] }, { id: 'tree', name: 'HTML5 tree building', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/syntax.html#parsing' ], [ 'mdn', '/HTML/HTML5/HTML5_Parser' ] ] }, 'HTML5 defines rules for embedding SVG and MathML inside a regular HTML document. Support for SVG and MathML is not required though, so no actual points are awarded if your browser supports embedding these two technologies.', { id: 'svg', name: 'SVG in text/html', urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#svg' ], [ 'mdn', '/SVG' ] ] }, { id: 'mathml', name: 'MathML in text/html', urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#mathml' ], [ 'mdn', '/MathML' ] ] } ] }, { id: 'elements', name: 'Elements', status: 'stable', items: [ { id: 'dataset', name: 'Embedding custom non-visible data', value: 3, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes' ], [ 'mdn', '/DOM/element.dataset' ] ] }, 'New or modified elements', { id: 'section', name: 'Section elements', urls: [ [ 'mdn', '/Sections_and_Outlines_of_an_HTML5_document' ] ], items: [ { id: 'section', name: 'section element', value: 1, url: 'http://www.w3.org/TR/html5/sections.html#the-section-element' }, { id: 'nav', name: 'nav element', value: 1, url: 'http://www.w3.org/TR/html5/sections.html#the-nav-element' }, { id: 'article', name: 'article element', value: 1, url: 'http://www.w3.org/TR/html5/sections.html#the-article-element' }, { id: 'aside', name: 'aside element', value: 1, url: 'http://www.w3.org/TR/html5/sections.html#the-aside-element' }, { id: 'header', name: 'header element', value: 1, url: 'http://www.w3.org/TR/html5/sections.html#the-header-element' }, { id: 'footer', name: 'footer element', value: 1, url: 'http://www.w3.org/TR/html5/sections.html#the-footer-element' } ] }, { id: 'grouping', name: 'Grouping content elements', urls: [ [ 'mdn', '/Sections_and_Outlines_of_an_HTML5_document' ] ], items: [ { id: 'main', name: 'main element', value: 1, url: 'http://www.w3.org/html/wg/drafts/html/master/single-page.html#the-main-element' }, { id: 'figure', name: 'figure element', value: 1, url: 'http://www.w3.org/TR/html5/grouping-content.html#the-figure-element' }, { id: 'figcaption', name: 'figcaption element', value: 1, url: 'http://www.w3.org/TR/html5/grouping-content.html#the-figcaption-element' }, { id: 'ol', name: 'reversed attribute on the ol element', value: 1, url: 'http://www.w3.org/TR/html5/grouping-content.html#the-ol-element' } ] }, { id: 'semantic', name: 'Text-level semantic elements', items: [ { id: 'download', name: 'download attribute on the a element', value: 1, urls: [ [ 'whatwg', 'http://developers.whatwg.org/links.html#attr-hyperlink-download' ] ] }, { id: 'ping', name: 'ping attribute on the a element', value: 1, urls: [ [ 'whatwg', 'http://developers.whatwg.org/links.html#ping' ] ] }, { id: 'mark', name: 'mark element', value: 1, url: 'http://www.w3.org/TR/html5/text-level-semantics.html#the-mark-element' }, { id: 'ruby', name: 'ruby, rt and rp elements', value: 3, url: 'http://www.w3.org/TR/html5/text-level-semantics.html#the-ruby-element' }, { id: 'time', name: 'time element', value: 1, url: 'http://www.w3.org/TR/html5/text-level-semantics.html#the-time-element' }, { id: 'wbr', name: 'wbr element', value: 1, url: 'http://www.w3.org/TR/html5/text-level-semantics.html#the-wbr-element' } ] }, { id: 'interactive', name: 'Interactive elements', items: [ { id: 'details', name: 'details element', value: 1, url: 'http://www.w3.org/TR/html5/interactive-elements.html#the-details-element' }, { id: 'summary', name: 'summary element', value: 1, url: 'http://www.w3.org/TR/html5/interactive-elements.html#the-summary-element' }, { id: 'menutoolbar', name: 'menu element of type toolbar', status: 'proposal', value: 1, url: 'http://www.w3.org/TR/html5/interactive-elements.html#the-menu-element' }, { id: 'menupopup', name: 'menu element of type popup', status: 'proposal', value: 2, url: 'http://www.w3.org/TR/html5/interactive-elements.html#the-menu-element' }, { id: 'dialog', name: 'dialog element', status: 'proposal', value: 1, url: 'http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#the-dialog-element' } ] }, 'Global attributes or methods', { id: 'hidden', name: 'hidden attribute', value: 1, url: 'http://www.w3.org/TR/html5/editing.html#the-hidden-attribute' }, { id: 'dynamic', name: 'Dynamic markup insertion', items: [ { id: 'outerHTML', name: 'outerHTML property', value: 1, urls: [ [ 'whatwg', 'http://domparsing.spec.whatwg.org/#outerhtml' ] ] }, { id: 'insertAdjacentHTML', name: 'insertAdjacentHTML function', value: 1, urls: [ ['whatwg', 'http://domparsing.spec.whatwg.org/#insertadjacenthtml%28%29' ] ] } ] } ] }, { id: 'form', name: 'Forms', status: 'stable', items: [ 'Field types', { id: 'text', name: 'input type=text', items: [ { id: 'element', name: 'Minimal element support' }, { id: 'selection', name: 'Selection Direction', value: 2 } ] }, { id: 'search', name: 'input type=search', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#text-(type=text)-state-and-search-state-(type=search)' } ] }, { id: 'tel', name: 'input type=tel', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#telephone-state-(type=tel)' } ] }, { id: 'url', name: 'input type=url', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#url-state-(type=url)' }, { id: 'validation', name: 'Field validation', url: 'http://www.w3.org/TR/html5/forms.html#the-constraint-validation-api' } ] }, { id: 'email', name: 'input type=email', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#e-mail-state-(type=email)' }, { id: 'validation', name: 'Field validation', url: 'http://www.w3.org/TR/html5/forms.html#the-constraint-validation-api' } ] }, { id: 'date', name: 'input type=date', items: [ { id: 'element', name: 'Minimal element support', value: 3, url: 'http://www.w3.org/TR/html5/forms.html#date-state-(type=date)' }, { id: 'ui', value: 2, name: 'Custom user-interface' }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsDate', name: 'valueAsDate() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasdate' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'month', name: 'input type=month', items: [ { id: 'element', name: 'Minimal element support', value: 3, url: 'http://www.w3.org/TR/html5/forms.html#month-state-(type=month)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsDate', name: 'valueAsDate() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasdate' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'week', name: 'input type=week', items: [ { id: 'element', name: 'Minimal element support', value: 3, url: 'http://www.w3.org/TR/html5/forms.html#week-state-(type=week)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsDate', name: 'valueAsDate() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasdate' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'time', name: 'input type=time', items: [ { id: 'element', name: 'Minimal element support', value: 3, url: 'http://www.w3.org/TR/html5/forms.html#time-state-(type=time)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsDate', name: 'valueAsDate() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasdate' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'datetime', name: 'input type=datetime', items: [ { id: 'element', name: 'Minimal element support', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#date-and-time-state-(type=datetime)' }, { id: 'ui', name: 'Custom user-interface', value: 1 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'datetime-local', name: 'input type=datetime-local', items: [ { id: 'element', name: 'Minimal element support', value: 3, url: 'http://www.w3.org/TR/html5/forms.html#local-date-and-time-state-(type=datetime-local)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'number', name: 'input type=number', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#number-state-(type=number)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'validation', name: 'Field validation', url: 'http://www.w3.org/TR/html5/forms.html#the-constraint-validation-api' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'range', name: 'input type=range', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#range-state-(type=range)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' }, { id: 'min', name: 'min attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min' }, { id: 'max', name: 'max attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max' }, { id: 'step', name: 'step attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step' }, { id: 'stepDown', name: 'stepDown() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown' }, { id: 'stepUp', name: 'stepUp() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepup' }, { id: 'valueAsNumber', name: 'valueAsNumber() method', url: 'http://www.w3.org/TR/html5/forms.html#dom-input-valueasnumber' } ] }, { id: 'color', name: 'input type=color', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#color-state-(type=color)' }, { id: 'ui', name: 'Custom user-interface', value: 2 }, { id: 'sanitization', name: 'Value sanitization', url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm' } ] }, { id: 'checkbox', name: 'input type=checkbox', items: [ { id: 'element', name: 'Minimal element support', url: 'http://www.w3.org/TR/html5/forms.html#checkbox-state-(type=checkbox)' }, { id: 'indeterminate', name: 'indeterminate property', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#dom-input-indeterminate' } ] }, { id: 'image', name: 'input type=image', items: [ { id: 'element', name: 'Minimal element support', url: 'http://www.w3.org/TR/html5/forms.html#image-button-state-(type=image)' }, { id: 'width', name: 'width property', value: 0, url: 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-dim-width' }, { id: 'height', name: 'height property', value: 0, url: 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-dim-height' } ] }, { id: 'file', name: 'input type=file', items: [ { id: 'element', name: 'Minimal element support', url: 'http://www.w3.org/TR/html5/forms.html#file-upload-state-(type=file)' }, { id: 'files', name: 'files property', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#dom-input-files' } ] }, { id: 'textarea', name: 'textarea', items: [ { id: 'element', name: 'Minimal element support', url: 'http://www.w3.org/TR/html5/forms.html#the-textarea-element' }, { id: 'maxlength', name: 'maxlength attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-textarea-maxlength' }, { id: 'wrap', name: 'wrap attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-textarea-wrap' } ] }, { id: 'select', name: 'select', items: [ { id: 'element', name: 'Minimal element support', url: 'http://www.w3.org/TR/html5/forms.html#the-select-element' }, { id: 'required', name: 'required attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-select-required' } ] }, { id: 'fieldset', name: 'fieldset', items: [ { id: 'element', name: 'Minimal element support', url: 'http://www.w3.org/TR/html5/forms.html#the-fieldset-element' }, { id: 'elements', name: 'elements attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#dom-fieldset-elements' }, { id: 'disabled', name: 'disabled attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#dom-fieldset-disabled' } ] }, { id: 'datalist', name: 'datalist', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#the-datalist-element' }, { id: 'list', name: 'list attribute for fields', url: 'http://www.w3.org/TR/html5/forms.html#attr-input-list' } ] }, { id: 'keygen', name: 'keygen', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#the-keygen-element' }, { id: 'challenge', name: 'challenge attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-keygen-challenge' }, { id: 'keytype', name: 'keytype attribute', url: 'http://www.w3.org/TR/html5/forms.html#attr-keygen-keytype' } ] }, { id: 'output', name: 'output', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#the-output-element' } ] }, { id: 'progress', name: 'progress', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#the-progress-element' } ] }, { id: 'meter', name: 'meter', items: [ { id: 'element', name: 'Minimal element support', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#the-meter-element' } ] }, 'Fields', { id: 'validation', name: 'Field validation', items: [ { id: 'pattern', name: 'pattern attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-input-pattern' }, { id: 'required', name: 'required attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-input-required' } ] }, { id: 'association', name: 'Association of controls and forms', items: [ { id: 'control', name: 'control property on labels', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#dom-label-control' }, { id: 'form', name: 'form property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fae-form' }, { id: 'formAction', name: 'formAction property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formaction' }, { id: 'formEnctype', name: 'formEnctype property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype' }, { id: 'formMethod', name: 'formMethod property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod' }, { id: 'formNoValidate', name: 'formNoValidate property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formnovalidate' }, { id: 'formTarget', name: 'formTarget property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget' }, { id: 'labels', name: 'labels property on fields', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#dom-lfe-labels' } ] }, { id: 'other', name: 'Other attributes', items: [ { id: 'autofocus', name: 'autofocus attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-fe-autofocus' }, { id: 'autocomplete', name: 'autocomplete attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-input-autocomplete' }, { id: 'placeholder', name: 'placeholder attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-input-placeholder' }, { id: 'multiple', name: 'multiple attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-input-multiple' }, { id: 'dirname', name: 'dirName attribute', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#attr-input-dirname' } ] }, { id: 'selectors', name: 'CSS selectors', items: [ { id: 'valid', name: ':valid selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-valid' }, { id: 'invalid', name: ':invalid selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-invalid' }, { id: 'optional', name: ':optional selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-optional' }, { id: 'required', name: ':required selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-required' }, { id: 'in-range', name: ':in-range selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-in-range' }, { id: 'out-of-range', name: ':out-of-range selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-out-of-range' }, { id: 'read-write', name: ':read-write selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-read-write' }, { id: 'read-only', name: ':read-only selector', value: 2, url: 'http://www.w3.org/TR/html5/links.html#selector-read-only' } ] }, { id: 'events', name: 'Events', items: [ { id: 'oninput', name: 'oninput event', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#event-input-input' }, { id: 'onchange', name: 'onchange event', value: 1, url: 'http://www.w3.org/TR/html5/forms.html#event-input-change' }, { id: 'oninvalid', name: 'oninvalid event', value: 1, url: 'http://www.w3.org/TR/html5/webappapis.html#events' } ] }, 'Forms', { id: 'formvalidation', name: 'Form validation', items: [ { id: 'checkValidity', name: 'checkValidity method', value: 8, url: 'http://www.w3.org/TR/html5/forms.html#dom-form-checkvalidity' }, { id: 'noValidate', name: 'noValidate attribute', value: 2, url: 'http://www.w3.org/TR/html5/forms.html#dom-fs-novalidate' } ] } ] }, { id: 'microdata', name: 'Microdata', status: 'rejected', items: [ { id: 'microdata', name: 'Microdata', value: 5, url: 'http://www.w3.org/TR/microdata/' } ] } ] }, { id: 'deviceaccess', name: 'Device Access', column: 'left', items: [ { id: 'location', name: 'Location and Orientation', status: 'stable', items: [ { id: 'geolocation', name: 'Geolocation', value: 15, urls: [ [ 'w3c', 'http://www.w3.org/TR/geolocation-API/' ], [ 'wp', '/apis/geolocation' ], [ 'mdn', '/Using_geolocation' ] ] }, { id: 'orientation', name: 'Device Orientation', value: 5, urls: [ [ 'w3c', 'http://dev.w3.org/geo/api/spec-source-orientation.html' ], [ 'mdn', '/Mozilla_event_reference/devicemotion' ] ] } ] }, { id: 'output', name: 'Output', status: 'proposal', items: [ { id: 'requestFullScreen', name: 'Full screen support', value: 5, urls: [ [ 'w3c', 'http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api' ], [ 'wp', '/dom/methods/requestFullscreen' ], [ 'mdn', '/DOM/Using_fullscreen_mode' ] ] }, { id: 'notifications', name: 'Web Notifications', value: 5, url: 'http://www.w3.org/TR/notifications/' } ] }, { id: 'input', name: 'Input', status: 'proposal', items: [ { id: 'getUserMedia', name: 'Access the webcam', value: 10, urls: [ [ 'w3c', 'http://dev.w3.org/2011/webrtc/editor/getusermedia.html' ], [ 'wp', '/dom/methods/getUserMedia' ], [ 'mdn', '/WebRTC' ] ] }, { id: 'getGamepads', name: 'Gamepad control', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/gamepad/' ], [ 'wp', '/apis/gamepad' ] ] }, { id: 'pointerevents', name: 'Pointer Events', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/pointerevents/' ], [ 'wp', '/concepts/Pointer_Events' ] ] }, { id: 'pointerLock', name: 'Pointer Lock support', value: 3, urls: [ [ 'w3c', 'http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html' ], [ 'wp', '/dom/methods/requestPointerLock' ], [ 'mdn', '/API/Pointer_Lock_API' ] ] } ] } ] }, { id: 'multimedia', name: 'Multimedia', column: 'right', items: [ { id: 'video', name: 'Video', status: 'stable', items: [ { id: 'element', name: 'video element', value: 20, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element' ], [ 'wp', '/html/elements/video' ], [ 'mdn', '/Using_HTML5_audio_and_video' ] ] }, { id: 'drm', name: 'DRM support', status: 'controversial', url: 'http://www.w3.org/TR/encrypted-media/' }, { id: 'mediasource', name: 'Media Source extensions', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/media-source/' ], [ 'wp', '/apis/media_source_extensions' ] ] }, { id: 'subtitle', name: 'Subtitle support', value: 8, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#the-track-element' ], [ 'wp', '/html/elements/track' ] ] }, { id: 'poster', name: 'Poster image support', value: 1, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-video-poster' ], [ 'wp', '/dom/apis/audio-video/properties/poster' ] ] }, { id: 'canplaytype', name: 'Codec detection', value: 4, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#dom-navigator-canplaytype' ], [ 'wp', '/dom/apis/audio-video/methods/canPlayType' ] ] }, 'The following tests go beyond the requirements of the HTML5 specification and are not counted towards the total score.', { id: 'mpeg4', name: 'MPEG-4 support', status: 'optional' }, { id: 'h264', name: 'H.264 support', status: 'optional', urls: [ [ 'other', 'http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf' ] ] }, { id: 'theora', name: 'Ogg Theora support', status: 'optional', urls: [ [ 'xiph', 'http://theora.org/doc/Theora.pdf' ] ] }, { id: 'webmvp8', name: 'WebM with VP8 support', status: 'optional', urls: [ [ 'webm', 'http://www.webmproject.org/' ], [ 'ietf', 'http://www.rfc-editor.org/rfc/rfc6386.txt' ] ] }, { id: 'webmvp9', name: 'WebM with VP9 support', status: 'optional', urls: [ [ 'webm', 'http://www.webmproject.org/' ], [ 'ietf', 'http://tools.ietf.org/id/draft-grange-vp9-bitstream-00.txt' ] ] } ] }, { id: 'audio', name: 'Audio', status: 'stable', items: [ { id: 'element', name: 'audio element', value: 20, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#the-audio-element' ], [ 'wp', '/html/elements/audio' ], [ 'mdn', '/Using_HTML5_audio_and_video' ] ] }, { id: 'webaudio', name: 'Web Audio API', status: 'proposal', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/webaudio/' ], [ 'wp', '/apis/webaudio' ] ] }, { id: 'speechrecognition', name: 'Speech Recognition', status: 'experimental', value: 3, url: 'https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html' }, { id: 'speechsynthesis', name: 'Speech Synthesis', status: 'experimental', value: 2, url: 'https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html' }, 'The following tests go beyond the requirements of the HTML5 specification and are not counted towards the total score.', { id: 'pcm', name: 'PCM audio support', status: 'optional' }, { id: 'aac', name: 'AAC support', status: 'optional' }, { id: 'mp3', name: 'MP3 support', status: 'optional' }, { id: 'vorbis', name: 'Ogg Vorbis support', status: 'optional' }, { id: 'opus', name: 'Ogg Opus support', status: 'optional' }, { id: 'webm', name: 'WebM with Vorbis support', status: 'optional' }, { id: 'webmopus', name: 'WebM with Opus support', status: 'optional' } ] }, { id: 'webrtc', name: 'Peer To Peer', status: 'proposal', items: [ { id: 'peerconnection', name: 'WebRTC', value: 10, urls: [ [ 'w3c', 'http://www.w3.org/TR/webrtc/' ], [ 'wp', '/apis/webrtc/RTCPeerConnection' ], [ 'mdn', '/WebRTC' ] ] }, { id: 'datachannel', name: 'Data channel', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/webrtc/' ], [ 'wp', '/apis/webrtc/RTCDataChannel' ], [ 'mdn', '/WebRTC' ] ] } ] } ] }, { id: 'graphicseffects', name: '3D, Graphics & Effects', column: 'right', items: [ { id: 'canvas', name: '2D Graphics', status: 'stable', items: [ { id: 'context', name: 'Canvas 2D graphics', value: 10, urls: [ [ 'w3c', 'http://www.w3.org/TR/2dcontext/' ], [ 'wp', '/apis/canvas' ], [ 'mdn', '/HTML/Canvas' ] ] }, 'Drawing primitives', { id: 'text', name: 'Text support', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/2dcontext/#drawing-text-to-the-canvas' ], [ 'wp', '/apis/canvas/CanvasRenderingContext2D/fillText' ] ] }, { id: 'path', name: 'Path support', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/2dcontext/#path-objects' ], [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path2d-objects' ] ] }, { id: 'ellipse', name: 'Ellipse support', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/2dcontext/#dom-context-2d-ellipse' ], [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-ellipse' ] ] }, { id: 'dashed', name: 'Dashed line support', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/2dcontext/#dom-context-2d-setlinedash' ], [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-setlinedash' ] ] }, 'Features', { id: 'hittest', name: 'Hit testing support', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/2dcontext/#dom-context-2d-addhitregion' ], [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-addhitregion' ] ] }, { id: 'blending', name: 'Blending modes', status: 'proposal', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/compositing-1/#canvascompositingandblending' ] ] }, 'Image export formats', { id: 'png', name: 'PNG support' }, { id: 'jpeg', name: 'JPEG support' }, { id: 'jpegxr', name: 'JPEG-XR support' }, { id: 'webp', name: 'WebP support' } ] }, { id: 'webgl', status: 'stable', name: '3D Graphics', items: [ { id: 'context', name: 'WebGL 3D graphics', value: 20, urls: [ [ 'khronos', 'http://www.khronos.org/registry/webgl/specs/latest/' ], [ 'wp', '/webgl' ], [ 'mdn', '/docs/WebGL' ] ] }, { id: 'context2', name: 'WebGL 2 3D graphics', status: 'experimental', value: 5, urls: [ [ 'khronos', 'http://www.khronos.org/registry/webgl/specs/latest/2.0/' ] ] } ] }, { id: 'animation', status: 'stable', name: 'Animation', items: [ { id: 'requestAnimationFrame', name: 'window.requestAnimationFrame', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/animation-timing/#requestAnimationFrame' ], [ 'wp', '/apis/timing/methods/requestAnimationFrame' ], [ 'mdn', '/DOM/window.requestAnimationFrame' ] ] } ] } ] }, { id: 'connectivity', name: 'Connectivity', column: 'right', items: [ { id: 'communication', status: 'stable', name: 'Communication', items: [ { id: 'eventSource', name: 'Server-Sent Events', value: 8, urls: [ [ 'w3c', 'http://www.w3.org/TR/eventsource/' ], [ 'mdn', '/Server-sent_events/Using_server-sent_events' ] ] }, 'XMLHttpRequest Level 2', { id: 'xmlhttprequest2.upload', name: 'Upload files', value: 5, url: 'http://www.w3.org/TR/XMLHttpRequest2/#the-upload-attribute' }, { id: 'xmlhttprequest2.response', name: 'Response type support', urls: [ [ 'mdn', '/DOM/XMLHttpRequest' ] ], items: [ { id: 'text', name: 'Text response type', value: 1, url: 'http://www.w3.org/TR/XMLHttpRequest2/#dom-xmlhttprequest-responsetype' }, { id: 'document', name: 'Document response type', value: 2, url: 'http://www.w3.org/TR/XMLHttpRequest2/#dom-xmlhttprequest-responsetype' }, { id: 'array', name: 'ArrayBuffer response type', value: 2, url: 'http://www.w3.org/TR/XMLHttpRequest2/#dom-xmlhttprequest-responsetype' }, { id: 'blob', name: 'Blob response type', value: 2, url: 'http://www.w3.org/TR/XMLHttpRequest2/#dom-xmlhttprequest-responsetype' } ] }, 'WebSocket', { id: 'websocket.basic', name: 'Basic socket communication', value: 10, urls: [ [ 'w3c', 'http://www.w3.org/TR/websockets/' ], [ 'mdn', '/docs/WebSockets' ] ] }, { id: 'websocket.binary', name: 'ArrayBuffer and Blob support', value: 5, urls: [ [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/multipage/network.html#dom-websocket-binarytype' ], [ 'mdn', '/docs/WebSockets' ] ] } ] } ] }, { id: 'performanceintegration', name: 'Performance & Integration', column: 'left', items: [ { id: 'interaction', status: 'stable', name: 'User interaction', items: [ 'Drag and drop', { id: 'dragdrop.attributes', name: 'Attributes', urls: [ [ 'mdn', '/DragDrop/Drag_and_Drop' ] ], items: [ { id: 'draggable', name: 'draggable attribute', value: 2, url: 'http://www.w3.org/TR/html5/editing.html#the-draggable-attribute' }, { id: 'dropzone', name: 'dropzone attribute', value: 1, url: 'http://www.w3.org/TR/html5/editing.html#the-dropzone-attribute ' } ] }, { id: 'dragdrop.events', name: 'Events', urls: [ [ 'mdn', '/DragDrop/Drag_and_Drop' ] ], items: [ { id: 'ondrag', name: 'ondrag event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' }, { id: 'ondragstart', name: 'ondragstart event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' }, { id: 'ondragenter', name: 'ondragenter event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' }, { id: 'ondragover', name: 'ondragover event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' }, { id: 'ondragleave', name: 'ondragleave event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' }, { id: 'ondragend', name: 'ondragend event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' }, { id: 'ondrop', name: 'ondrop event', url: 'http://www.w3.org/TR/html5/editing.html#dndevents' } ] }, 'HTML editing', { id: 'editing.elements', name: 'Editing elements', urls: [ [ 'mdn', '/HTML/Content_Editable' ] ], items: [ { id: 'contentEditable', name: 'contentEditable attribute', value: 9, url: 'http://www.w3.org/TR/html5/editing.html#contenteditable' }, { id: 'isContentEditable', name: 'isContentEditable property', value: 1, url: 'http://www.w3.org/TR/html5/editing.html#contenteditable' } ] }, { id: 'editing.documents', name: 'Editing documents', urls: [ [ 'mdn', '/HTML/Content_Editable' ] ], items: [ { id: 'designMode', name: 'designMode attribute', value: 2, url: 'http://www.w3.org/TR/html5/editing.html#designMode' } ] }, { id: 'editing.selectors', name: 'CSS selectors', urls: [ [ 'mdn', '/HTML/Content_Editable' ] ], items: [ { id: 'read-write', name: ':read-write selector', value: 1, url: 'http://www.w3.org/TR/html5/links.html#selector-read-write' }, { id: 'read-only', name: ':read-only selector', value: 1, url: 'http://www.w3.org/TR/html5/links.html#selector-read-only' } ] }, { id: 'editing.apis', name: 'APIs', urls: [ [ 'mdn', '/HTML/Content_Editable' ] ], items: [ { id: 'execCommand', name: 'execCommand method', value: 1, url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html' }, { id: 'queryCommandEnabled', name: 'queryCommandEnabled method', value: 1, url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html' }, { id: 'queryCommandIndeterm', name: 'queryCommandIndeterm method', value: 1, url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html' }, { id: 'queryCommandState', name: 'queryCommandState method', value: 1, url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html' }, { id: 'queryCommandSupported', name: 'queryCommandSupported method', value: 1, url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html' }, { id: 'queryCommandValue', name: 'queryCommandValue method', value: 1, url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html' } ] }, 'Spellcheck', { id: 'spellcheck', name: 'spellcheck attribute', value: 2, url: 'http://www.w3.org/TR/html5/editing.html#attr-spellcheck' } ] }, { id: 'performance', status: 'stable', name: 'Performance', items: [ { id: 'datatypes', name: 'Native binary data', status: 'proposal', items: [ { id: 'ArrayBuffer', name: 'ArrayBuffer', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#5' ] ] }, { id: 'Int8Array', name: 'Int8Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Uint8Array', name: 'Uint8Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Int16Array', name: 'Int16Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Uint16Array', name: 'Uint16Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Int32Array', name: 'Int32Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Uint32Array', name: 'Uint32Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Float32Array', name: 'Float32Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'Float64Array', name: 'Float64Array', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] }, { id: 'DataView', name: 'DataView', value: 1, urls: [ [ 'khronos', 'http://www.khronos.org/registry/typedarray/specs/latest/#7' ] ] } ] }, 'Workers', { id: 'worker', name: 'Web Workers', value: 10, urls: [ [ 'w3c', 'http://www.w3.org/TR/workers/#dedicated-workers-and-the-worker-interface' ], [ 'mdn', '/DOM/Using_web_workers' ] ] }, { id: 'sharedWorker', name: 'Shared Workers', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/workers/#shared-workers-and-the-sharedworker-interface' ], [ 'mdn', '/DOM/Using_web_workers' ] ] } ] }, { id: 'security', status: 'stable', name: 'Security', items: [ { id: 'crypto', name: 'Web Cryptography API', status: 'experimental', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/WebCryptoAPI/' ] ] }, { id: 'csp10', name: 'Content Security Policy 1.0', value: 3, urls: [ [ 'w3c', 'http://www.w3.org/TR/CSP/' ], [ 'mdn', '/Security/CSP' ] ] }, { id: 'csp11', name: 'Content Security Policy 1.1', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/CSP/' ], [ 'mdn', '/Security/CSP' ] ] }, { id: 'cors', name: 'Cross-Origin Resource Sharing', value: 5, urls: [ [ 'mdn', '/HTTP/Access_control_CORS' ] ] }, { id: 'postMessage', name: 'Cross-document messaging', value: 5, urls: [ [ 'w3c', 'http://dev.w3.org/html5/postmsg/' ], [ 'wp', '/apis/web-messaging' ], [ 'mdn', '/DOM/window.postMessage' ] ] }, 'Iframes', { id: 'sandbox', name: 'Sandboxed iframe', value: 10, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-sandbox' ], [ 'mdn', '/HTML/Element/iframe' ] ] }, { id: 'seamless', name: 'Seamless iframe', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-seamless' ], [ 'mdn', '/HTML/Element/iframe' ] ] }, { id: 'srcdoc', name: 'iframe with inline contents', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-srcdoc' ], [ 'mdn', '/HTML/Element/iframe' ] ] } ] }, { id: 'history', name: 'History and navigation', status: 'stable', items: [ { id: 'history', name: 'Session history', value: 10, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/browsers.html#the-history-interface' ], [ 'wp', '/dom/history' ], [ 'mdn', '/DOM/Manipulating_the_browser_history' ] ] } ] } ] }, { id: 'offlinestorage', name: 'Offline & Storage', column: 'right', items: [ { id: 'offline', name: 'Web applications', status: 'stable', items: [ { id: 'applicationCache', name: 'Application Cache', value: 15, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/browsers.html#offline' ], [ 'wp', '/apis/appcache/ApplicationCache' ], [ 'mdn', '/HTML/Using_the_application_cache' ] ] }, { id: 'registerProtocolHandler', name: 'Custom scheme handlers', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/webappapis.html#custom-handlers' ], [ 'mdn', '/docs/Web-based_protocol_handlers' ] ] }, { id: 'registerContentHandler', name: 'Custom content handlers', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/webappapis.html#custom-handlers' ], [ 'mdn', '/DOM/window.navigator.registerContentHandler' ] ] }, { id: 'addSearchProvider', name: 'Custom search providers', value: 1, urls: [ [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/#dom-external-addsearchprovider' ] ] } ] }, { id: 'storage', name: 'Storage', status: 'stable', items: [ 'Key-value storage', { id: 'sessionStorage', name: 'Session Storage', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/webstorage/#the-sessionstorage-attribute' ], [ 'wp', '/apis/web-storage' ], [ 'mdn', '/DOM/Storage' ] ] }, { id: 'localStorage', name: 'Local Storage', value: 5, urls: [ [ 'w3c', 'http://www.w3.org/TR/webstorage/#the-localstorage-attribute' ], [ 'wp', '/apis/web-storage' ], [ 'mdn', '/DOM/Storage' ] ] }, 'Database storage', { id: 'indexedDB.basic', name: 'IndexedDB', status: 'proposal', value: 16, urls: [ [ 'w3c', 'http://www.w3.org/TR/IndexedDB/' ], [ 'wp', '/apis/indexedDB' ], [ 'mdn', '/IndexedDB' ] ] }, { id: 'indexedDB.blob', name: 'Objectstore Blob support', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/IndexedDB/' ], [ 'wp', '/apis/indexedDB' ], [ 'mdn', '/IndexedDB' ] ] }, { id: 'indexedDB.arraybuffer', name: 'Objectstore ArrayBuffer support', status: 'proposal', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/IndexedDB/' ], [ 'wp', '/apis/indexedDB' ], [ 'mdn', '/IndexedDB' ] ] }, 'The Web SQL Database specification is no longer being updated and has been replaced by IndexedDB. Because at least 3 vendors have shipped implementations of this specification we still include it in this test.', { id: 'sqlDatabase', name: 'Web SQL Database', status: 'rejected', value: { maximum: 5, conditional: '!storage.indexedDB.basic' }, url: 'http://www.w3.org/TR/webdatabase/' } ] }, { id: 'files', name: 'Files', status: 'stable', items: [ { id: 'fileReader', name: 'File API', value: 10, urls: [ [ 'w3c', 'http://dev.w3.org/2006/webapi/FileAPI/#filereader-interface' ], [ 'wp', '/apis/file' ], [ 'mdn', '/Using_files_from_web_applications' ] ] }, 'The Directories and System API proposal has failed to gain traction among browser vendors and is only supported in some Webkit based browsers. No additional points are awarded for supporting this API.', { id: 'fileSystem', name: 'File API: Directories and System', status: 'rejected', url: [ [ 'w3c', 'http://www.w3.org/TR/file-system-api/' ] [ 'wp', '/apis/filesystem' ] ] } ] } ] }, { id: 'other', name: 'Other', column: 'right', items: [ { id: 'other', name: 'Other', status: 'stable', items: [ 'Styling', { id: 'scoped', name: 'Scoped style element', value: 4, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/document-metadata.html#attr-style-scoped' ], [ 'wp', '/Meta:HTML/Elements/style' ] ] }, 'Scripts', { id: 'async', name: 'Asyncronous script execution', value: 3, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/scripting-1.html#attr-script-async' ], [ 'mdn', '/HTML/Element/script' ], [ 'wp', '/html/elements/script' ] ] }, { id: 'onerror', name: 'Runtime script error reporting', value: 1, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/webappapis.html#report-the-error' ], [ 'mdn', '/DOM/window.onerror' ] ] }, { id: 'executionevents', name: 'Script execution events', value: 2, urls: [ [ 'whatwg', 'http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#the-script-element' ], [ 'mdn', '/Web/Reference/Events/beforescriptexecute' ] ] }, { id: 'base64', name: 'Base64 encoding and decoding', value: 1, urls: [ [ 'w3c', 'http://www.w3.org/TR/html5/webappapis.html#atob' ], [ 'mdn', '/DOM/window.atob' ] ] }, { id: 'json', name: 'JSON encoding and decoding', value: 1, urls: [ [ 'mdn', '/JSON' ], [ 'wp', '/apis/json' ] ] }, { id: 'mutationObserver', name: 'Mutation Observer', value: 3, urls: [ [ 'w3c', 'http://www.w3.org/TR/dom/#mutation-observers' ], [ 'mdn', '/DOM/MutationObserver' ] ] }, 'Other', { id: 'pagevisiblity', name: 'Page Visibility', value: 2, urls: [ [ 'w3c', 'http://www.w3.org/TR/page-visibility/' ], [ 'mdn', '/DOM/Using_the_Page_Visibility_API' ] ] }, { id: 'getSelection', name: 'Text selection', value: 2, url: 'http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#selections' }, { id: 'scrollIntoView', name: 'Scroll into view', value: 1 } ] } ] } ]