diff --git a/about.html b/about.html index 1fd42b92..09e670b9 100644 --- a/about.html +++ b/about.html @@ -48,16 +48,20 @@
We cannot distinguish between a browser that supports a particular feature and a browser that lies about supporting that feature. The only way do deal with these situations it to manually confirm the test results. And if a browser - is found to be overly confidant about claiming support for certain features we can put that browser on a blacklist. + is found to be overly confident about claiming support for certain features we can put that browser on a blacklist. That means that that even though the browser claims to support a particular feature, we ignore what the browser says and do not give any points. This is usually just a temporary problem and once the browser has been fixed we will remove the new version from the blacklist. @@ -256,7 +260,7 @@
Copyright 2010-2012 by Sights
-April, 2012 - version 3.0
+October, 2012 - version 4.0
The HTML5 test is being developed at Github. Please file an issue there if you find any bugs or think of any improvements to this test. Please note that the HTML5 test is not affiliated with the W3C or the HTML5 working group. diff --git a/backend/browser.php b/backend/browser.php index d1e7b31c..4228f77a 100644 --- a/backend/browser.php +++ b/backend/browser.php @@ -15,18 +15,20 @@ SELECT b.unique AS id, b.nickname, b.details, '" . $type . "' AS type FROM - browsers AS b, - scores AS s + browsers AS b + LEFT JOIN scores AS s ON (b.unique = s.id) + LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) WHERE - b.unique = s.id AND b.listed = 1 AND FIND_IN_SET('" . $type . "',b.type) AND s.version = '" . $version . "' AND - s.points != '' + f.points != '' ORDER BY id, nickname "); + echo mysql_error(); + while ($row = mysql_fetch_object($res)) { $results[] = $row; } @@ -38,62 +40,87 @@ $show = explode('/', $_REQUEST['show']); if (isset($show[0])) { - $res = mysql_query(" - SELECT - b.unique AS id, b.nickname, s.score, s.bonus, s.points, s.results - FROM - browsers AS b, - scores AS s - WHERE - b.unique = s.id AND - b.listed = 1 AND - s.version = '" . $version . "' AND - b.unique ='" . mysql_real_escape_string($show[0]) . "' - "); + if (preg_match("/^[0-9]+\_[a-f0-9]{4,4}$/", $show[0])) { + if ($row = getResultsForUniqueId($show[0])) { + $tpl->set('one', json_encode($row)); + } + } - if ($row = mysql_fetch_object($res)) { - $tpl->set('one', json_encode($row)); + else { + if ($row = getResultsForBrowser($show[0], $version)) { + $tpl->set('one', json_encode($row)); + } } } if (isset($show[1])) { - $res = mysql_query(" - SELECT - b.unique AS id, b.nickname, s.score, s.bonus, s.points, s.results - FROM - browsers AS b, - scores AS s - WHERE - b.unique = s.id AND - b.listed = 1 AND - s.version = '" . $version . "' AND - b.unique ='" . mysql_real_escape_string($show[1]) . "' - "); + if (preg_match("/^[0-9]+\_[a-f0-9]{4,4}$/", $show[1])) { + if ($row = getResultsForUniqueId($show[1])) { + $tpl->set('two', json_encode($row)); + } + } - if ($row = mysql_fetch_object($res)) { - $tpl->set('two', json_encode($row)); + else { + if ($row = getResultsForBrowser($show[1], $version)) { + $tpl->set('two', json_encode($row)); + } } } if (isset($show[2])) { - $res = mysql_query(" - SELECT - b.unique AS id, b.nickname, s.score, s.bonus, s.points, s.results - FROM - browsers AS b, - scores AS s - WHERE - b.unique = s.id AND - b.listed = 1 AND - s.version = '" . $version . "' AND - b.unique ='" . mysql_real_escape_string($show[2]) . "' - "); + if (preg_match("/^[0-9]+\_[a-f0-9]{4,4}$/", $show[2])) { + if ($row = getResultsForUniqueId($show[2])) { + $tpl->set('three', json_encode($row)); + } + } - if ($row = mysql_fetch_object($res)) { - $tpl->set('three', json_encode($row)); + else { + if ($row = getResultsForBrowser($show[2], $version)) { + $tpl->set('three', json_encode($row)); + } } } } - echo $tpl->fetch(); \ No newline at end of file + echo $tpl->fetch(); + + + function getResultsForBrowser($browser, $version) { + $res = mysql_query(" + SELECT + b.unique AS id, b.nickname, f.score, f.bonus, f.points, f.results + FROM + browsers AS b + LEFT JOIN scores AS s ON (b.unique = s.id) + LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) + WHERE + b.listed = 1 AND + s.version = '" . $version . "' AND + b.unique ='" . mysql_real_escape_string($browser) . "' + "); + + if ($row = mysql_fetch_object($res)) { + return $row; + } + } + + + + function getResultsForUniqueId($id) { + $res = mysql_query(" + SELECT + r.uniqueid AS id, 'Unique id' AS nickname, r.score, r.bonus, r.points, r.results, humanReadable, useragentHeader AS useragent, deviceWidth, deviceHeight + FROM + results AS r + WHERE + r.uniqueid ='" . mysql_real_escape_string($id) . "' + "); + + if ($row = mysql_fetch_object($res)) { + return $row; + } + } + + + \ No newline at end of file diff --git a/backend/config.php b/backend/config.php index 66c85416..c621df03 100644 --- a/backend/config.php +++ b/backend/config.php @@ -1,7 +1,7 @@ $value) { + if (!in_array(strtolower($key), array( + 'accept', 'host', 'connection', 'dnt', 'user-agent', 'accept-encoding', 'accept-language', + 'accept-charset', 'referer', 'cookie', 'content-type', 'content-length', 'content-transfer-encoding', + 'origin', 'pragma', 'cache-control', 'via', 'clientip', 'x-bluecoat-via', 'x-piper-id', + 'x-forwarded-for', 'x-teacup', 'x-saucer', 'isajaxrequest', 'keep-alive', 'max-forwards', + 'xroxy-connection', 'client-ip', 'cookie2', 'x-via', 'x-imforwards', 'http-client-id', + 'x-proxy-id', 'z-forwarded-for', 'expect', 'x-ip-address', 'x-rbt-optimized-by', 'qpr-loop', + 'cuda_cliip', 'x-source-id', 'x-clickoncesupport' + ))) { + $filteredHeaders .= $key . ": " . $value . "\n"; + } + } + + if (!$readonly && intval($payload->version) >= 4) { + $useragentHeader = $_SERVER['HTTP_USER_AGENT']; + $useragentId = preg_replace("/(; ?)[a-z][a-z](?:-[a-zA-Z][a-zA-Z])?([;)])/", '$1xx$2', $useragentHeader); - if (!$readonly) { mysql_query(' INSERT INTO results @@ -113,13 +129,27 @@ deviceHeight = "' . mysql_real_escape_string($payload->deviceHeight) . '", deviceType = "' . mysql_real_escape_string($payload->deviceType) . '", useragent = "' . mysql_real_escape_string($payload->useragent) . '", + useragentHeader = "' . mysql_real_escape_string($useragentHeader) . '", + useragentId = "' . mysql_real_escape_string(md5($useragentId)) . '", humanReadable = "' . mysql_real_escape_string($payload->humanReadable) . '", - xWapProfile = "' . mysql_real_escape_string($xWapProfile) . '", - xOperaMiniPhoneUA = "' . mysql_real_escape_string($xOperaMiniPhoneUA) . '", + headers = "' . mysql_real_escape_string($filteredHeaders) . '", results = "' . mysql_real_escape_string($payload->results) . '", points = "' . mysql_real_escape_string($payload->points) . '", + fingerprint = "' . mysql_real_escape_string(md5($payload->results.$payload->points)) . '", status = 0 '); + + mysql_query(' + INSERT INTO + fingerprints + SET + fingerprint = "' . mysql_real_escape_string(md5($payload->results.$payload->points)) . '", + version = "' . mysql_real_escape_string($payload->version) . '", + score = "' . mysql_real_escape_string($payload->score) . '", + bonus = "' . mysql_real_escape_string($payload->bonus) . '", + results = "' . mysql_real_escape_string($payload->results) . '", + points = "' . mysql_real_escape_string($payload->points) . '" + '); } break; diff --git a/backend/results.php b/backend/results.php index 938d50fc..cee17a26 100644 --- a/backend/results.php +++ b/backend/results.php @@ -18,12 +18,12 @@ $res = mysql_query(" SELECT - b.status, b.unique, b.nickname, b.details, b.description, s.score, s.bonus, s.points, s.results + b.status, b.unique, b.nickname, b.details, b.description, f.score, f.bonus, f.points, f.results FROM - browsers AS b, - scores AS s + browsers AS b + LEFT JOIN scores AS s ON (b.unique = s.id) + LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) WHERE - b.unique = s.id AND b.listed = 1 AND s.version = '" . $version . "' AND FIND_IN_SET('" . $type . "',type) @@ -37,9 +37,9 @@ $tpl->set('results', $results); - if (count($results['current']) > 0) $tpl->set('first', $results['current'][0]); - if (count($results['current']) > 1) $tpl->set('runnerup', $results['current'][1]); - if (count($results['development']) > 0) $tpl->set('upcoming', $results['development'][0]); + if (isset($results['current']) && count($results['current']) > 0) $tpl->set('first', $results['current'][0]); + if (isset($results['current']) && count($results['current']) > 1) $tpl->set('runnerup', $results['current'][1]); + if (isset($results['development']) && count($results['development']) > 0) $tpl->set('upcoming', $results['development'][0]); @@ -48,19 +48,22 @@ $res = mysql_query(" SELECT - b.grouped, b.unique, b.nickname, b.details, IF(ISNULL(b.release),DATE(NOW()),b.release) AS `release`, b.status, s.score + b.grouped, b.unique, b.nickname, b.details, IF(ISNULL(b.release),DATE(NOW()),b.release) AS `release`, b.status, f.score FROM - browsers AS b, - scores AS s + browsers AS b + LEFT JOIN scores AS s ON (b.unique = s.id) + LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) WHERE - b.unique = s.id AND (!ISNULL(b.release) OR b.status = 'development') AND s.version = '" . $version . "' AND - FIND_IN_SET('" . $type . "',type) + FIND_IN_SET('" . $type . "',type) AND + !ISNULL(f.score) ORDER BY b.grouped, `release` "); + echo mysql_error(); + while ($row = mysql_fetch_object($res)) { $sets[$row->grouped]['name'] = $row->grouped; $sets[$row->grouped]['data'][] = $row; diff --git a/backend/templates/browser.html b/backend/templates/browser.html index 4e0933f6..821f20bd 100644 --- a/backend/templates/browser.html +++ b/backend/templates/browser.html @@ -19,7 +19,7 @@ - + @@ -28,16 +28,20 @@
The HTML5 test is created by Niels Leenheer. Visit my website at rakaz.nl or follow me on twitter.
@@ -177,7 +195,7 @@Copyright 2010-2012 by Sights
-April, 2012 - version 3.0
+October, 2012 - version 4.0
The HTML5 test is being developed at Github. Please file an issue there if you find any bugs or think of any improvements to this test. Please note that the HTML5 test is not affiliated with the W3C or the HTML5 working group. @@ -326,7 +344,7 @@
text/html
',
- url: 'http://www.w3.org/TR/html5/the-map-element.html#svg-0'
+ url2: {
+ 'w3c': 'http://www.w3.org/TR/html5/embedded-content-0.html#svg',
+ 'mdn': '/SVG'
+ }
+
}, {
id: 'mathml',
name: 'MathML in text/html
',
- url: 'http://www.w3.org/TR/html5/the-map-element.html#mathml'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/embedded-content-0.html#mathml',
+ 'mdn': '/MathML'
+ }
}
]
}, {
@@ -36,15 +49,23 @@ var tests = [
{
id: 'element',
name: 'canvas
element',
- url: 'http://www.w3.org/TR/html5/the-canvas-element.html#the-canvas-element'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/embedded-content-0.html#the-canvas-element',
+ 'wp': '/canvas',
+ 'mdn': '/HTML/Canvas'
+ }
}, {
id: 'context',
name: '2D context',
- url: 'http://www.w3.org/TR/2dcontext/'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/2dcontext/'
+ }
}, {
id: 'text',
name: 'Text',
- url: 'http://www.w3.org/TR/2dcontext/#text'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/2dcontext/#text'
+ }
}
]
}, {
@@ -54,15 +75,19 @@ var tests = [
{
id: 'element',
name: 'video
element',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#the-video-element'
+ 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: 'subtitle',
name: 'Subtitle support',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#the-track-element'
+ url: 'http://www.w3.org/TR/html5/embedded-content-0.html#the-track-element'
}, {
id: 'poster',
name: 'Poster image support',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#dom-video-poster'
+ url: 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-video-poster'
},
'The following tests go beyond the requirements of the HTML5 specification and are not counted towards the total score. If browser support for one or more video codecs is detected, two bonus points are awarded for each codec.',
@@ -88,7 +113,11 @@ var tests = [
{
id: 'element',
name: 'audio
element',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#the-audio-element'
+ 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'
+ }
},
'The following tests go beyond the requirements of the HTML5 specification and are not counted towards the total score. If browser support for one or more audio codecs is detected, one bonus point is awarded for each codec.',
@@ -105,6 +134,9 @@ var tests = [
}, {
id: 'vorbis',
name: 'Ogg Vorbis support'
+ }, {
+ id: 'opus',
+ name: 'Ogg Opus support'
}, {
id: 'webm',
name: 'WebM support'
@@ -117,7 +149,10 @@ var tests = [
{
id: 'dataset',
name: 'Embedding custom non-visible data',
- url: 'http://www.w3.org/TR/html5/elements.html#dom-dataset'
+ 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',
@@ -125,6 +160,9 @@ var tests = [
{
id: 'section',
name: 'Section elements',
+ urls: {
+ 'mdn': '/Sections_and_Outlines_of_an_HTML5_document'
+ },
items: [
{
id: 'section',
@@ -160,6 +198,9 @@ var tests = [
}, {
id: 'grouping',
name: 'Grouping content elements',
+ urls: {
+ 'mdn': '/Sections_and_Outlines_of_an_HTML5_document'
+ },
items: [
{
id: 'figure',
@@ -180,6 +221,14 @@ var tests = [
name: 'Text-level semantic elements',
items: [
{
+ id: 'download',
+ name: 'download
attribute on the a
element',
+ url: 'http://developers.whatwg.org/links.html#attr-hyperlink-download'
+ }, {
+ id: 'ping',
+ name: 'ping
attribute on the a
element',
+ url: 'http://developers.whatwg.org/links.html#ping'
+ }, {
id: 'mark',
name: 'mark
element',
url: 'http://www.w3.org/TR/html5/text-level-semantics.html#the-mark-element'
@@ -242,11 +291,11 @@ var tests = [
{
id: 'outerHTML',
name: 'outerHTML
property',
- url: 'http://www.w3.org/TR/html5/apis-in-html-documents.html#outerhtml'
+ url: 'http://domparsing.spec.whatwg.org/#outerhtml'
}, {
id: 'insertAdjacentHTML',
name: 'insertAdjacentHTML
function',
- url: 'http://www.w3.org/TR/html5/apis-in-html-documents.html#dom-insertadjacenthtml'
+ url: 'http://domparsing.spec.whatwg.org/#insertadjacenthtml%28%29'
}
]
}
@@ -276,7 +325,7 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#text-state-and-search-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#text-(type=text)-state-and-search-state-(type=search)'
}
]
}, {
@@ -286,7 +335,7 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#telephone-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#telephone-state-(type=tel)'
}
]
}, {
@@ -296,11 +345,11 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#url-state'
+ 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/association-of-controls-and-forms.html#dom-cva-validity'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-constraint-validation-api'
}
]
}, {
@@ -310,11 +359,11 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#e-mail-state'
+ 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/association-of-controls-and-forms.html#dom-cva-validity'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-constraint-validation-api'
}
]
}, {
@@ -324,34 +373,42 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#date-and-time-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#date-and-time-state-(type=datetime)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -361,34 +418,42 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#date-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#date-state-(type=date)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -398,34 +463,42 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#month-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#month-state-(type=month)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -435,34 +508,42 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#week-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#week-state-(type=week)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -472,34 +553,42 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#time-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#time-state-(type=time)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -509,34 +598,38 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/states-of-the-type-attribute.html#local-date-and-time-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#local-date-and-time-state-(type=datetime-local)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -546,38 +639,42 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/number-state.html#number-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#number-state-(type=number)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'validation',
name: 'Field validation',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#dom-cva-validity'
+ 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/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -587,34 +684,38 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/number-state.html#range-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#range-state-(type=range)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}, {
id: 'min',
name: 'min
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-min'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-min'
}, {
id: 'max',
name: 'max
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-max'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-max'
}, {
id: 'step',
name: 'step
attribute',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-step'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-step'
}, {
id: 'stepDown',
name: 'stepDown()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepdown'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-stepdown'
}, {
id: 'stepUp',
name: 'stepUp()
method',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-stepup'
+ 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'
}
]
}, {
@@ -624,18 +725,14 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/number-state.html#color-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#color-state-(type=color)'
}, {
id: 'ui',
name: 'Custom user-interface'
}, {
id: 'sanitization',
name: 'Value sanitization',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#value-sanitization-algorithm'
- }, {
- id: 'validation',
- name: 'Field validation',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#dom-cva-validity'
+ url: 'http://www.w3.org/TR/html5/forms.html#value-sanitization-algorithm'
}
]
}, {
@@ -645,11 +742,11 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/number-state.html#checkbox-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#checkbox-state-(type=checkbox)'
}, {
id: 'indeterminate',
name: 'indeterminate
property',
- url: 'http://www.w3.org/TR/html5/the-input-element.html#dom-input-indeterminate'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-indeterminate'
}
]
}, {
@@ -659,15 +756,15 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/number-state.html#image-button-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#image-button-state-(type=image)'
}, {
id: 'width',
name: 'width
property',
- url: 'http://www.w3.org/TR/html5/the-map-element.html#attr-dim-width'
+ url: 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-dim-width'
}, {
id: 'height',
name: 'height
property',
- url: 'http://www.w3.org/TR/html5/the-map-element.html#attr-dim-height'
+ url: 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-dim-height'
}
]
}, {
@@ -677,11 +774,11 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/number-state.html#file-upload-state'
+ url: 'http://www.w3.org/TR/html5/forms.html#file-upload-state-(type=file)'
}, {
id: 'files',
name: 'files
property',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#dom-input-files'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-input-files'
}
]
}, {
@@ -691,15 +788,15 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-textarea-element'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-textarea-element'
}, {
id: 'maxlength',
name: 'maxlength
attribute',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#attr-textarea-maxlength'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-textarea-maxlength'
}, {
id: 'wrap',
name: 'wrap
attribute',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#attr-textarea-wrap'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-textarea-wrap'
}
]
}, {
@@ -709,11 +806,11 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-select-element'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-select-element'
}, {
id: 'required',
name: 'required
attribute',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#dom-select-required'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-select-required'
}
]
}, {
@@ -741,11 +838,11 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-datalist-element'
+ 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/common-input-element-attributes.html#attr-input-list'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-list'
}
]
}, {
@@ -755,15 +852,15 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-keygen-element'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-keygen-element'
}, {
id: 'challenge',
name: 'challenge
attribute',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#attr-keygen-challenge'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-keygen-challenge'
}, {
id: 'keytype',
name: 'keytype
attribute',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#dom-keygen-keytype'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-keygen-keytype'
}
]
}, {
@@ -773,7 +870,7 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-output-element'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-output-element'
}
]
}, {
@@ -783,7 +880,7 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-progress-element'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-progress-element'
}
]
}, {
@@ -793,7 +890,7 @@ var tests = [
{
id: 'element',
name: 'Minimal element support',
- url: 'http://www.w3.org/TR/html5/the-button-element.html#the-meter-element'
+ url: 'http://www.w3.org/TR/html5/forms.html#the-meter-element'
}
]
},
@@ -807,11 +904,11 @@ var tests = [
{
id: 'pattern',
name: 'pattern
attribute',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#attr-input-pattern'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-pattern'
}, {
id: 'required',
name: 'required
attribute',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#attr-input-required'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-required'
}
]
}, {
@@ -825,27 +922,27 @@ var tests = [
}, {
id: 'form',
name: 'form
property on fields',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fae-form'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fae-form'
}, {
id: 'formAction',
name: 'formAction
property on fields',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-formaction'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formaction'
}, {
id: 'formEnctype',
name: 'formEnctype
property on fields',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-formenctype'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype'
}, {
id: 'formMethod',
name: 'formMethod
property on fields',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-formmethod'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod'
}, {
id: 'formNoValidate',
name: 'formNoValidate
property on fields',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-formnovalidate'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formnovalidate'
}, {
id: 'formTarget',
name: 'formTarget
property on fields',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-formtarget'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget'
}, {
id: 'labels',
name: 'labels
property on fields',
@@ -859,23 +956,23 @@ var tests = [
{
id: 'autofocus',
name: 'autofocus
attribute',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#autofocusing-a-form-control'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-fe-autofocus'
}, {
id: 'autocomplete',
name: 'autocomplete
attribute',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#attr-input-autocomplete'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-autocomplete'
}, {
id: 'placeholder',
name: 'placeholder
attribute',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#attr-input-placeholder'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-placeholder'
}, {
id: 'multiple',
name: 'multiple
attribute',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#attr-input-multiple'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-multiple'
}, {
id: 'dirname',
name: 'dirName
attribute',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#attr-input-dirname'
+ url: 'http://www.w3.org/TR/html5/forms.html#attr-input-dirname'
}
]
}, {
@@ -923,11 +1020,11 @@ var tests = [
{
id: 'oninput',
name: 'oninput
event',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#event-input-input'
+ url: 'http://www.w3.org/TR/html5/forms.html#event-input-input'
}, {
id: 'onchange',
name: 'onchange
event',
- url: 'http://www.w3.org/TR/html5/common-input-element-attributes.html#event-input-change'
+ url: 'http://www.w3.org/TR/html5/forms.html#event-input-change'
}, {
id: 'oninvalid',
name: 'oninvalid
event',
@@ -949,7 +1046,7 @@ var tests = [
}, {
id: 'noValidate',
name: 'noValidate
attribute',
- url: 'http://www.w3.org/TR/html5/association-of-controls-and-forms.html#attr-fs-novalidate'
+ url: 'http://www.w3.org/TR/html5/forms.html#dom-fs-novalidate'
}
]
}
@@ -963,49 +1060,55 @@ var tests = [
{
id: 'attributes',
name: 'Attributes',
+ urls: {
+ 'mdn': '/DragDrop/Drag_and_Drop'
+ },
items: [
{
id: 'draggable',
name: 'draggable
attribute',
- url: 'http://www.w3.org/TR/html5/dnd.html#the-draggable-attribute'
+ url: 'http://www.w3.org/TR/html5/editing.html#the-draggable-attribute'
}, {
id: 'dropzone',
name: 'dropzone
attribute',
- url: 'http://www.w3.org/TR/html5/dnd.html#the-dropzone-attribute'
+ url: 'http://www.w3.org/TR/html5/editing.html#the-dropzone-attribute '
}
]
}, {
id: 'events',
name: 'Events',
+ urls: {
+ 'mdn': '/DragDrop/Drag_and_Drop'
+ },
items: [
{
id: 'ondrag',
name: 'ondrag
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}, {
id: 'ondragstart',
name: 'ondragstart
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}, {
id: 'ondragenter',
name: 'ondragenter
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}, {
id: 'ondragover',
name: 'ondragover
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}, {
id: 'ondragleave',
name: 'ondragleave
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}, {
id: 'ondragend',
name: 'ondragend
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}, {
id: 'ondrop',
name: 'ondrop
event',
- url: 'http://www.w3.org/TR/html5/dnd.html#dndevents'
+ url: 'http://www.w3.org/TR/html5/editing.html#dndevents'
}
]
},
@@ -1015,6 +1118,9 @@ var tests = [
{
id: 'editingElements',
name: 'Editing elements',
+ urls: {
+ 'mdn': '/HTML/Content_Editable'
+ },
items: [
{
id: 'contentEditable',
@@ -1029,6 +1135,9 @@ var tests = [
}, {
id: 'editingDocuments',
name: 'Editing documents',
+ urls: {
+ 'mdn': '/HTML/Content_Editable'
+ },
items: [
{
id: 'designMode',
@@ -1039,31 +1148,34 @@ var tests = [
}, {
id: 'apis',
name: 'APIs',
+ urls: {
+ 'mdn': '/HTML/Content_Editable'
+ },
items: [
{
id: 'execCommand',
name: 'execCommand
method',
- url: 'http://www.w3.org/TR/html5/dnd.html#execCommand'
+ url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html'
}, {
id: 'queryCommandEnabled',
name: 'queryCommandEnabled
method',
- url: 'http://www.w3.org/TR/html5/dnd.html#dom-document-querycommandenabled'
+ url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html'
}, {
id: 'queryCommandIndeterm',
name: 'queryCommandIndeterm
method',
- url: 'http://www.w3.org/TR/html5/dnd.html#dom-document-querycommandindeterm'
+ url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html'
}, {
id: 'queryCommandState',
name: 'queryCommandState
method',
- url: 'http://www.w3.org/TR/html5/dnd.html#dom-document-querycommandstate'
+ url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html'
}, {
id: 'queryCommandSupported',
name: 'queryCommandSupported
method',
- url: 'http://www.w3.org/TR/html5/dnd.html#dom-document-querycommandsupported'
+ url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html'
}, {
id: 'queryCommandValue',
name: 'queryCommandValue
method',
- url: 'http://www.w3.org/TR/html5/dnd.html#dom-document-querycommandvalue'
+ url: 'https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html'
}
]
},
@@ -1083,7 +1195,11 @@ var tests = [
{
id: 'history',
name: 'Session history',
- url: 'http://www.w3.org/TR/html5/history.html#history'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/browsers.html#the-history-interface',
+ 'wp': '/dom/history',
+ 'mdn': '/DOM/Manipulating_the_browser_history'
+ }
}
]
}, {
@@ -1103,15 +1219,25 @@ var tests = [
{
id: 'applicationCache',
name: 'Application Cache',
- url: 'http://www.w3.org/TR/html5/offline.html#offline'
+ 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',
- url: 'http://www.w3.org/TR/html5/timers.html#custom-handlers'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/webappapis.html#custom-handlers',
+ 'mdn': '/docs/Web-based_protocol_handlers'
+ }
}, {
id: 'registerContentHandler',
name: 'Custom content handlers',
- url: 'http://www.w3.org/TR/html5/timers.html#custom-handlers'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/webappapis.html#custom-handlers',
+ 'mdn': '/DOM/window.navigator.registerContentHandler'
+ }
}, {
id: 'addSearchProvider',
name: 'Custom search providers',
@@ -1125,15 +1251,24 @@ var tests = [
{
id: 'sandbox',
name: 'Sandboxed iframe
',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#attr-iframe-sandbox'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-sandbox',
+ 'mdn': '/HTML/Element/iframe'
+ }
}, {
id: 'seamless',
name: 'Seamless iframe
',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#attr-iframe-seamless'
+ 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',
- url: 'http://www.w3.org/TR/html5/the-iframe-element.html#attr-iframe-srcdoc'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/embedded-content-0.html#attr-iframe-srcdoc',
+ 'mdn': '/HTML/Element/iframe'
+ }
}
]
}, {
@@ -1143,19 +1278,28 @@ var tests = [
{
id: 'scoped',
name: 'Scoped style
element',
- url: 'http://www.w3.org/TR/html5/semantics.html#attr-style-scoped'
+ url: 'http://www.w3.org/TR/html5/document-metadata.html#attr-style-scoped'
}, {
id: 'async',
name: 'Asyncronous script execution',
- url: 'http://www.w3.org/TR/html5/scripting-1.html#attr-script-async'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/scripting-1.html#attr-script-async',
+ 'mdn': '/HTML/Element/script'
+ }
}, {
id: 'onerror',
name: 'Runtime script error reporting',
- url: 'http://www.w3.org/TR/html5/webappapis.html#report-the-error'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/html5/webappapis.html#report-the-error',
+ 'mdn': '/DOM/window.onerror'
+ }
}, {
id: 'base64',
name: 'Base64 encoding and decoding',
- url: 'http://www.w3.org/TR/html5/webappapis.html#atob'
+ url: {
+ 'w3c': 'http://www.w3.org/TR/html5/webappapis.html#atob',
+ 'mdn': '/DOM/window.atob'
+ }
}
]
},
@@ -1169,11 +1313,18 @@ var tests = [
{
id: 'geolocation',
name: 'Geolocation',
- url: 'http://www.w3.org/TR/geolocation-API/'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/geolocation-API/',
+ 'wp': '/apis/geolocation',
+ 'mdn': '/Using_geolocation'
+ }
}, {
id: 'orientation',
name: 'Device Orientation',
- url: 'http://dev.w3.org/geo/api/spec-source-orientation.html'
+ urls: {
+ 'w3c': 'http://dev.w3.org/geo/api/spec-source-orientation.html',
+ 'mdn': '/Mozilla_event_reference/devicemotion'
+ }
}
]
}, {
@@ -1183,7 +1334,12 @@ var tests = [
{
id: 'context',
name: '3D context',
- url: 'http://www.khronos.org/registry/webgl/specs/latest/'
+ urls: {
+ 'khronos': 'http://www.khronos.org/registry/webgl/specs/latest/',
+ 'wp': '/webgl',
+ 'mdn': '/docs/WebGL'
+ }
+
}, {
id: 'datatypes',
name: 'Native binary data',
@@ -1239,14 +1395,25 @@ var tests = [
{
id: 'postMessage',
name: 'Cross-document messaging',
- url: 'http://dev.w3.org/html5/postmsg/'
+ urls: {
+ 'w3c': 'http://dev.w3.org/html5/postmsg/',
+ 'wp': '/apis/web-messaging',
+ 'mdn': '/DOM/window.postMessage'
+ }
}, {
id: 'eventSource',
name: 'Server-Sent Events',
- url: 'http://www.w3.org/TR/eventsource/'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/eventsource/',
+ 'mdn': '/Server-sent_events/Using_server-sent_events'
+ }
+
}, {
id: 'xmlhttprequest2',
name: 'XMLHttpRequest Level 2',
+ urls: {
+ 'mdn': '/DOM/XMLHttpRequest'
+ },
items: [
{
id: 'upload',
@@ -1273,7 +1440,10 @@ var tests = [
}, {
id: 'webSocket',
name: 'WebSocket',
- url: 'http://www.w3.org/TR/websockets/'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/websockets/',
+ 'mdn': '/docs/WebSockets'
+ }
}
]
}, {
@@ -1282,11 +1452,19 @@ var tests = [
items: [
{
id: 'fileReader',
- name: 'FileReader API',
- url: 'http://dev.w3.org/2006/webapi/FileAPI/#filereader-interface'
- }, {
+ name: 'File API',
+ 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: 'FileSystem API',
+ name: 'File API: Directories and System',
url: 'http://www.w3.org/TR/file-system-api/'
}
]
@@ -1297,15 +1475,27 @@ var tests = [
{
id: 'sessionStorage',
name: 'Session Storage',
- url: 'http://www.w3.org/TR/webstorage/#the-sessionstorage-attribute'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/webstorage/#the-sessionstorage-attribute',
+ 'wp': '/apis/web-storage',
+ 'mdn': '/DOM/Storage'
+ }
}, {
id: 'localStorage',
name: 'Local Storage',
- url: 'http://www.w3.org/TR/webstorage/#the-localstorage-attribute'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/webstorage/#the-localstorage-attribute',
+ 'wp': '/apis/web-storage',
+ 'mdn': '/DOM/Storage'
+ }
}, {
id: 'indexedDB',
name: 'IndexedDB',
- url: 'http://www.w3.org/TR/IndexedDB/'
+ 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.',
@@ -1323,11 +1513,17 @@ var tests = [
{
id: 'worker',
name: 'Web Workers',
- url: 'http://www.w3.org/TR/workers/#dedicated-workers-and-the-worker-interface'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/workers/#dedicated-workers-and-the-worker-interface',
+ 'mdn': '/DOM/Using_web_workers'
+ }
}, {
id: 'sharedWorker',
name: 'Shared Workers',
- url: 'http://www.w3.org/TR/workers/#shared-workers-and-the-sharedworker-interface'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/workers/#shared-workers-and-the-sharedworker-interface',
+ 'mdn': '/DOM/Using_web_workers'
+ }
}
]
}, {
@@ -1335,9 +1531,12 @@ var tests = [
name: 'Local multimedia',
items: [
{
- id: 'getUserMedia',
- name: 'Access the webcam',
- url: 'http://dev.w3.org/2011/webrtc/editor/getusermedia.html'
+ id: 'getUserMedia',
+ name: 'Access the webcam',
+ urls: {
+ 'w3c': 'http://dev.w3.org/2011/webrtc/editor/getusermedia.html',
+ 'mdn': '/WebRTC'
+ }
}
]
}, {
@@ -1357,7 +1556,10 @@ var tests = [
{
id: 'pagevisiblity',
name: 'Page Visibility',
- url: 'http://www.w3.org/TR/page-visibility/'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/page-visibility/',
+ 'mdn': '/DOM/Using_the_Page_Visibility_API'
+ }
}, {
id: 'getSelection',
name: 'Text selection',
@@ -1365,6 +1567,13 @@ var tests = [
}, {
id: 'scrollIntoView',
name: 'Scroll into view'
+ }, {
+ id: 'mutationObserver',
+ name: 'Mutation Observer',
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/dom/#mutation-observers',
+ 'mdn': '/DOM/MutationObserver'
+ }
}
]
},
@@ -1388,11 +1597,27 @@ var tests = [
{
id: 'requestFullScreen',
name: 'Full screen support',
- url: 'http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api'
+ urls: {
+ 'w3c': 'http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api',
+ 'wp': '/dom/methods/requestFullscreen',
+ 'mdn': '/DOM/Using_fullscreen_mode'
+ }
+ }, {
+ id: 'pointerLock',
+ name: 'Pointer Lock support',
+ urls: {
+ 'w3c': 'http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html',
+ 'wp': '/dom/methods/requestPointerLock',
+ 'mdn': '/API/Pointer_Lock_API'
+ }
}, {
id: 'requestAnimationFrame',
name: 'window.requestAnimationFrame
',
- url: 'http://www.w3.org/TR/animation-timing/#requestAnimationFrame'
+ urls: {
+ 'w3c': 'http://www.w3.org/TR/animation-timing/#requestAnimationFrame',
+ 'wp': '/apis/timing/methods/requestAnimationFrame',
+ 'mdn': '/DOM/window.requestAnimationFrame'
+ }
}
]
}
diff --git a/scripts/engine.js b/scripts/engine.js
index 042199f6..1e0d893a 100644
--- a/scripts/engine.js
+++ b/scripts/engine.js
@@ -11,14 +11,23 @@ Test = (function() {
[ testWebAudio, testAnimation ]
],
- initialize: function(c) {
+ initialize: function(c) {
blacklists = {
- dateFields: Browsers.isBrowser('Maxthon') || Browsers.isBrowser('UC Browser'),
- colorField: Browsers.isBrowser('Maxthon') || Browsers.isBrowser('UC Browser'),
+ fileField: Browsers.isOs('iOS', '<', '6'),
+ dateFields: Browsers.isBrowser('Sogou Explorer') || Browsers.isBrowser('Maxthon', '<', '4.0.5') || Browsers.isBrowser('UC Browser', '<', '8.6'),
+ colorField: Browsers.isBrowser('Sogou Explorer') || Browsers.isBrowser('UC Browser'),
rangeField: Browsers.isBrowser('UC Browser'),
- subtitle: Browsers.isBrowser('Maxthon'),
- getUserMedia: Browsers.isBrowser('Maxthon') || Browsers.isBrowser('UC Browser') || Browsers.isBrowser('Dolphin'),
- webgl: Browsers.isBrowser('Maxthon'),
+ numberField: false,
+ progressField: Browsers.isBrowser('Baidu Browser'),
+ meterField: false,
+ fileSystem: Browsers.isOs('BlackBerry Tablet OS'),
+ subtitle: Browsers.isBrowser('Baidu Browser') || Browsers.isBrowser('Sogou Explorer'),
+ notifications: Browsers.isBrowser('Baidu Browser') || Browsers.isBrowser('Sogou Explorer'),
+ fullScreen: Browsers.isBrowser('Sogou Explorer') || Browsers.isOs('BlackBerry Tablet OS') || Browsers.isOs('BlackBerry OS'),
+ getUserMedia: Browsers.isBrowser('Baidu Browser') || Browsers.isBrowser('Sogou Explorer') || Browsers.isBrowser('UC Browser') || Browsers.isBrowser('Dolphin'),
+ webgl: Browsers.isBrowser('Baidu Browser'),
+ geolocation: Browsers.isBrowser('Baidu Browser'),
+ orientation: Browsers.isBrowser('Baidu Browser')
};
whitelists = {
@@ -32,9 +41,9 @@ Test = (function() {
Browsers.isOs('BlackBerry Tablet OS') ||
Browsers.isOs('Meego') ||
Browsers.isOs('Tizen') ||
+ Browsers.isEngine('Gecko') ||
+ Browsers.isEngine('Presto') ||
Browsers.isBrowser('Chrome') ||
- Browsers.isBrowser('Firefox') ||
- Browsers.isBrowser('Opera') ||
Browsers.isBrowser('Polaris', '>=', '8')
) ||
Browsers.isType('television') && (
@@ -49,17 +58,20 @@ Test = (function() {
)
};
- this.backgroundTasks = {};
+ this.backgroundTasks = [];
+ this.backgroundIds = {};
+ this.backgroundId = 0;
+
this.callback = c;
this.results = new results(this);
- for (g in this.suites) {
- for (s in this.suites[g]) {
+ for (var g = 0; g < this.suites.length; g++) {
+ for (var s = 0; s < this.suites[g].length; s++) {
new (this.suites[g][s])(this.results);
}
}
-
+
this.waitForBackground();
},
@@ -73,7 +85,7 @@ Test = (function() {
checkForBackground: function() {
var running = 0;
- for (var task in this.backgroundTasks) { running += this.backgroundTasks[task] }
+ for (var task = 0; task < this.backgroundTasks.length; task++) { running += this.backgroundTasks[task] }
if (running) {
this.waitForBackground();
@@ -83,11 +95,13 @@ Test = (function() {
},
startBackground: function(id) {
- this.backgroundTasks[id] = 1;
+ var i = this.backgroundId++;
+ this.backgroundIds[id] = i;
+ this.backgroundTasks[i] = 1;
},
stopBackground: function(id) {
- this.backgroundTasks[id] = 0;
+ this.backgroundTasks[this.backgroundIds[id]] = 0;
},
finished: function() {
@@ -96,7 +110,7 @@ Test = (function() {
collectResults(0, '', this.results);
function collectResults(level, prefix, data) {
if (data.items) {
- for (i in data.items) {
+ for (var i = 0; i < data.items.length; i++) {
if (level == 0) points.push(data.items[i].data.id + '=' + data.items[i].points + '/' + data.items[i].max + '+' + data.items[i].bonus);
if (typeof data.items[i].data.passed != 'undefined') results.push(prefix + data.items[i].data.id + '=' + (!! data.items[i].data.passed ? 1 : 0));
if (data.items[i].items) {
@@ -502,69 +516,73 @@ Test = (function() {
this.section.setItem({
id: 'doctype',
passed: document.compatMode == 'CSS1Compat',
- value: 1
+ value: 0
});
var result = true;
var e = document.createElement('div');
- e.innerHTML = "