diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3a72a52d..00000000 --- a/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -backend/config.php -composer.lock -vendor/ -.DS_Store diff --git a/.htaccess b/.htaccess deleted file mode 100644 index 6ced5309..00000000 --- a/.htaccess +++ /dev/null @@ -1,66 +0,0 @@ -AddOutputFilterByType DEFLATE text/html -AddOutputFilterByType DEFLATE text/css -AddOutputFilterByType DEFLATE text/javascript - -RewriteEngine on -RewriteCond %{HTTP_HOST} ^www\.html5test\.com$ -RewriteRule ^ http://html5test.com%{REQUEST_URI} [L,R=301] - -RewriteRule ^compare.html$ /compare/browser/index.html [R] -RewriteRule ^results.html$ /results/desktop.html [R] -RewriteRule ^results-mobile.html$ /results/mobile.html [R] -RewriteRule ^results-tablets.html$ /results/tablet.html [R] -RewriteRule ^results-tv.html$ /results/television.html [R] - -RewriteRule ^api/(.+)$ /backend/index.php?method=$1&%{QUERY_STRING} -RewriteRule ^s/(.+).html$ /backend/controllers/saved.php?id=$1 -RewriteRule ^compare/browser/index.html$ /backend/controllers/browser.php?%{QUERY_STRING} -RewriteRule ^compare/browser/(.+).html$ /backend/controllers/browser.php?show=$1&%{QUERY_STRING} -RewriteRule ^compare/feature/index.html$ /backend/controllers/feature.php?%{QUERY_STRING} -RewriteRule ^compare/feature/(.+).html$ /backend/controllers/feature.php?show=$1&%{QUERY_STRING} -RewriteRule ^results/desktop.html$ /backend/controllers/results.php?type=desktop -RewriteRule ^results/mobile.html$ /backend/controllers/results.php?type=mobile -RewriteRule ^results/tablet.html$ /backend/controllers/results.php?type=tablet -RewriteRule ^results/gaming.html$ /backend/controllers/results.php?type=gaming -RewriteRule ^results/television.html$ /backend/controllers/results.php?type=television -RewriteRule ^results/other.html$ /backend/controllers/results.php?type=other -RewriteRule ^results/latest.html$ /backend/controllers/latest.php -RewriteRule ^results/search.html$ /backend/controllers/search.php -RewriteRule ^results/related/(.+).html$ /backend/controllers/fingerprint.php?id=$1 -RewriteRule ^results/(.+)/timeline/(.+).html$ /backend/controllers/timeline.php?id=$2&type=$1 -RewriteRule ^results/timeline/(.+).html$ /backend/controllers/timeline.php?id=$1&type=mobile - -RewriteRule ^favicon(.*)$ /images/icons/favicon$1 -RewriteRule ^apple-touch-icon(.*)$ /images/icons/apple-touch-icon$1 -RewriteRule ^mstile-(.*)$ /images/icons/mstile-$1 -RewriteRule ^browserconfig.xml /images/icons/browserconfig.xml - -RewriteRule ^scripts/useragents http://api.whichbrowser.net/warning.js - - - - - Header set Access-Control-Allow-Origin "*" - - - - - - Header set Access-Control-Allow-Origin "*" - - - - - - Header set Access-Control-Allow-Origin "*" - - - - -SetEnvIf User-Agent .*Bada.* BROKEN_CSP - - - - Header set Content-Security-Policy "default-src 'unsafe-inline' data: *; frame-src *; options inline-script;" env=!BROKEN_CSP - - diff --git a/404.html b/404.html new file mode 100644 index 00000000..2859088c --- /dev/null +++ b/404.html @@ -0,0 +1,41 @@ + + + + + HTML5test - How well does your browser support HTML5? + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..9a0166b6 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +html5test.co \ No newline at end of file diff --git a/LICENSE b/LICENSE index 054bd6aa..a8c02be7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010-2015 Niels Leenheer +Copyright © 2010-2024 Niels Leenheer, Jerzy Głowacki Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 1989b7cd..d96de305 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ - + + +### Updated domain: [html5test.co](https://html5test.co) This is a website for testing web standards in the browser. The HTML5 test score is an indication of how well your browser supports the HTML5 standard and related specifications. Find out which parts of HTML5 are supported by your browser today and compare the results with other browsers. -[![Twitter Follow](https://img.shields.io/twitter/follow/html5test.svg?style=social)](https://twitter.com/html5test) - The HTML5 test does not try to test all of the new features offered by HTML5, nor does it try to test the functionality of each feature it does detect. Despite these shortcomings we hope that by quantifying the level of support users and web developers will get an idea of how hard the browser @@ -17,9 +17,3 @@ Please be aware that although the HTML5 specification is now an official recomme specifications that are being tested are still in development and could change before receiving an official status. In the future new tests will be added for new specifications and existing tests will be updated when the specifications change. - - -**Thanks to:** - -      - diff --git a/about.html b/about.html index 5922298e..58a0182d 100644 --- a/about.html +++ b/about.html @@ -1,235 +1,211 @@ - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- + + + HTML5test - How well does your browser support HTML5? + + + + + + + + + + + + + + + + + + + + + + + + +
+

HTML5test how well does your browser support HTML5?

+ +
+ +
+
+
+ + +
+

Specifications

+ +

Why do you include specifications that are not part of HTML5?

+
+

+ HTML5 means different things to different people. You could argue that HTML5 only includes features that are + defined in the W3C HTML5 specification. Or you could argue that it includes every specification, draft or + experimental feature that is added to browsers in the last couple of years. We decided to take the middle + ground and split the test into three parts: the official HTML5 specification, specifications that are related + to HTML5 and some experimental new features that are extensions of HTML5. +

+

+ Many of the related specifications were at one time part of HTML5. During the development of the specification + they were moved to separate specifications. +

+
+ +

But WebGL isn't even a W3C specification!

+
+ The W3C isn't the only organization that creates open specifications for the web. The WebGL specification is + published by Kronos, the same group that is also responsible for OpenGL. WebGL is related to HTML5 though and + listed as one of the HTML5 technologies on the W3C HTML5 logo page. The W3C HTML5 specification allows the + canvas element to be extended by new drawing methods and WebGL is one of them. +
+ +

Why do you test for Web SQL?

+
+ The Web SQL specification has been deprecated and replaced by the IndexedDB specification. It is however + still commonly used on mobile phones and at least three vendors have shipped desktop browsers supporting Web SQL. We've decided to include + this specification, but make it a special case. Web SQL is worth 5 points, but only if IndexedDB is not supported. + IndexedDB is worth 10 points. If a browser supports both, only 10 points are awarded. This way browsers + that only included IndexedDB are not penalized, but browsers that only support Web SQL do get some points. +
+ +
-
-
-
- - -
-

Specifications

- -

Why do you include specifications that are not part of HTML5?

-
-

- HTML5 means different things to different people. You could argue that HTML5 only includes features that are - defined in the W3C HTML5 specification. Or you could argue that it includes every specification, draft or - experimental feature that is added to browsers in the last couple of years. We decided to take the middle - ground and split the test into three parts: the official HTML5 specification, specifications that are related - to HTML5 and some experimental new features that are extensions of HTML5. -

-

- Many of the related specifications were at one time part of HTML5. During the development of the specification - they were moved to separate specifications. -

-
- -

But WebGL isn't even a W3C specification!

-
- The W3C isn't the only organization that creates open specifications for the web. The WebGL specification is - published by Kronos, the same group that is also responsible for OpenGL. WebGL is related to HTML5 though and - listed as one of the HTML5 technologies on the W3C HTML5 logo page. The W3C HTML5 specification allows the - canvas element to be extended by new drawing methods and WebGL is one of them. -
- -

Why do you test for Web SQL?

-
- The Web SQL specification has been deprecated and replaced by the IndexedDB specification. It is however - still commonly used on mobile phones and at least three vendors have shipped desktop browsers supporting Web SQL. We've decided to include - this specification, but make it a special case. Web SQL is worth 5 points, but only if IndexedDB is not supported. - IndexedDB is worth 10 points. If a browser supports both, only 10 points are awarded. This way browsers - that only included IndexedDB are not penalized, but browsers that only support Web SQL do get some points. -
- -
- - -

Scoring

- -

What is the maximum number of points you can score?

-
- If a browser passes all tests it would receive the maximum score of 555. Previous - versions of the HTML5test had less tests and therefore also a lower maximum score, such as 160, 300, 450, 475 and 500 points. - Previous versions of this test also awarded bonus points for some features, but as of version 5, we - no longer do. -
- -

The scoring seems arbitrary, who decides how many points are awarded?

-
- We decided to award points for each feature depending on how important that feature is for web developers - and how difficult it is to implement that feature. A small and simple feature would be worth less points than a - large and complicated feature. We think this is the most honest way to grade browsers, because otherwise a browser - that only supports the small and simple features would score as high or higher than a browser that went the - extra mile and decided to tackle the big features. But in the end it is based on personal preference, - but I doubt there is a truly objective alternative. -
- -
- - -

Reporting

- -

Can my browser be included on the 'other browser' and 'compare' pages?

-
-

- We would love to add new browsers, but not all browsers are eligible. First of all we only accept browsers that - are publicly available, either in beta form or a final release. We do not accept scores for internal development builds. - Secondly we only accept browsers that are available in English. We want to check browsers before including them and - unfortunately we do not speak Chinese, Japanese, Korean or Russian. And finally we only accept browsers which have a - unique score. There are many browsers that are forks or modified versions of Chromium or Firefox. Similarly there - are many browser that embed Internet Explorer or Webkit as provided by the operating system. These browser - do not qualify. For comparisons, simply choose the original browser on which the browser was based instead. -

-

- We retain the right to make exceptions to any of the rules above and to remove or refuse any browser we deem - necessary. -

-
- -

What happens when a browser cheats?

-
-

- We cannot distinguish between a browser that supports a particular feature and a browser that lies about supporting - that feature. The only way to deal with these situations it to manually confirm the test results. And if a browser - 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. -

-

- Claiming to support a feature which isn't working is not just causing problems for the reliability of the - test results, but there are other real-world problems. For example if you claim to support WebGL, a website may decide - to serve WebGL content. If your browser does not support WebGL, the website may fail in an uncontrollable way. If you - correctly denied support for WebGL, the website may have served alternative content that would work in your browser. - If you claim to support features that you don't, you are breaking the web. -

-

- If we find that a browser is structurally lying about which features they support - deliberately or not - we will - usually give a warning to the developers of the browser and if the problem hasn't been fixed in the next version - we will remove the browser from the 'other browser' and 'compare' pages and/or give other penalties. In extreme - cases we may block the browser from showing test results and show a warning instead. -

-
- - -
- - -

Methods

- -

Why are you using browser sniffing?

-
-

- Unfortunately, in two very specific cases we are forced to use browser sniffing. The first case is contentEditable - which was not supported on many older mobile devices. Yet almost all mobile browsers claim to support contentEditable. - Fortunately modern mobile devices are starting to support contentEditable, but this left us with a problem. We - cannot reliably detect if a browser has proper support. The only way around this is to use a whitelist of - mobile browsers that do support this feature, otherwise you risk awarding points to mobile browsers that they - do not deserve. The second case is drag and drop, which is also not supported on mobile phones and tablets.

-

- Please open a new issue on Github when you believe a - browser should be included on the whitelist. -

-
- - -
- - -

Privacy

- -

What kind of data is collected from visitors?

-
-

- Each time you visit this website your score and test results are logged on our servers. - We also store the user agent of your browser which contains information about the browser, - operating system and device you are using. The collected information is solely used to - generated anonymized reports about HTML5 support in browsers and improve the quality of - our software. -

-

- We do not store cookies in your browser, but we do use several external components that do, - including: Google Analytics, BuySellAds, Facebook, Twitter and Google+. -

-
+ +

Scoring

+ +

What is the maximum number of points you can score?

+
+ If a browser passes all tests it would receive the maximum score of 555. Previous + versions of the HTML5test had less tests and therefore also a lower maximum score, such as 160, 300, 450, 475 and 500 points. + Previous versions of this test also awarded bonus points for some features, but as of version 5, we + no longer do. +
+ +

The scoring seems arbitrary, who decides how many points are awarded?

+
+ We decided to award points for each feature depending on how important that feature is for web developers + and how difficult it is to implement that feature. A small and simple feature would be worth less points than a + large and complicated feature. We think this is the most honest way to grade browsers, because otherwise a browser + that only supports the small and simple features would score as high or higher than a browser that went the + extra mile and decided to tackle the big features. But in the end it is based on personal preference, + but I doubt there is a truly objective alternative. +
+ +
+ + +

Reporting

+ +

Can my browser be included on the 'other browser' and 'compare' pages?

+
+

+ We would love to add new browsers, but not all browsers are eligible. First of all we only accept browsers that + are publicly available, either in beta form or a final release. We do not accept scores for internal development builds. + Secondly we only accept browsers that are available in English. We want to check browsers before including them and + unfortunately we do not speak Chinese, Japanese, Korean or Russian. And finally we only accept browsers which have a + unique score. There are many browsers that are forks or modified versions of Chromium or Firefox. Similarly there + are many browser that embed Internet Explorer or Webkit as provided by the operating system. These browser + do not qualify. For comparisons, simply choose the original browser on which the browser was based instead. +

+

+ We retain the right to make exceptions to any of the rules above and to remove or refuse any browser we deem + necessary. +

+
+ +

What happens when a browser cheats?

+
+

+ We cannot distinguish between a browser that supports a particular feature and a browser that lies about supporting + that feature. The only way to deal with these situations it to manually confirm the test results. And if a browser + 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. +

+

+ Claiming to support a feature which isn't working is not just causing problems for the reliability of the + test results, but there are other real-world problems. For example if you claim to support WebGL, a website may decide + to serve WebGL content. If your browser does not support WebGL, the website may fail in an uncontrollable way. If you + correctly denied support for WebGL, the website may have served alternative content that would work in your browser. + If you claim to support features that you don't, you are breaking the web. +

+

+ If we find that a browser is structurally lying about which features they support - deliberately or not - we will + usually give a warning to the developers of the browser and if the problem hasn't been fixed in the next version + we will remove the browser from the 'other browser' and 'compare' pages and/or give other penalties. In extreme + cases we may block the browser from showing test results and show a warning instead. +

+
+ +
+ +

Methods

+ +

Why are you using browser sniffing?

+
+

+ Unfortunately, in two very specific cases we are forced to use browser sniffing. The first case is contentEditable + which was not supported on many older mobile devices. Yet almost all mobile browsers claim to support contentEditable. + Fortunately modern mobile devices are starting to support contentEditable, but this left us with a problem. We + cannot reliably detect if a browser has proper support. The only way around this is to use a whitelist of + mobile browsers that do support this feature, otherwise you risk awarding points to mobile browsers that they + do not deserve. The second case is drag and drop, which is also not supported on mobile phones and tablets.

+

+ Please open a new issue on Github when you believe a + browser should be included on the whitelist. +

+
+ +
+ +

Privacy

+ +

What kind of data is collected from visitors?

+
+

+ Each time you visit this website your score and test results are logged on our servers. + We also store the user agent of your browser which contains information about the browser, + operating system and device you are using. The collected information is solely used to + generated anonymized reports about HTML5 support in browsers and improve the quality of + our software. +

+

+ We do not store cookies in your browser. +

+
- + - - - \ No newline at end of file diff --git a/assets/csp.html b/assets/csp.html index 6d1c9f73..da28f24b 100644 --- a/assets/csp.html +++ b/assets/csp.html @@ -1,6 +1,8 @@ - + + + - \ No newline at end of file + diff --git a/assets/upgrade b/assets/upgrade deleted file mode 100644 index a0aba931..00000000 --- a/assets/upgrade +++ /dev/null @@ -1 +0,0 @@ -OK \ No newline at end of file diff --git a/backend/config.php.dist b/backend/config.php.dist deleted file mode 100644 index bc0a2a2d..00000000 --- a/backend/config.php.dist +++ /dev/null @@ -1,14 +0,0 @@ - false, - - 'release' => 9, - - 'database' => [ - 'server' => 'localhost', - 'username' => '******'; - 'password' => '******'; - 'database' => 'html5test' - ] - ]; \ No newline at end of file diff --git a/backend/controllers/browser.php b/backend/controllers/browser.php deleted file mode 100644 index 55c7987f..00000000 --- a/backend/controllers/browser.php +++ /dev/null @@ -1,114 +0,0 @@ -set('results', Browsers::getAll($GLOBALS['configuration']['release'])); - - if (isset($_REQUEST['show'])) { - $show = explode('/', $_REQUEST['show']); - - if (isset($show[0])) { - if ($show[0] == 'mybrowser') { - $tpl->set('one', ''); - } - - else if (preg_match("/^[a-f0-9]{16,16}$/", $show[0])) { - if ($row = Results::getByUniqueId($show[0])) { - $tpl->set('one', json_encode($row)); - } - } - - else { - if ($row = Results::getByBrowser($show[0], $GLOBALS['configuration']['release'])) { - $tpl->set('one', json_encode($row)); - } - } - } - - if (isset($show[1])) { - if ($show[1] == 'mybrowser') { - $tpl->set('two', ''); - } - - else if (preg_match("/^[a-f0-9]{16,16}$/", $show[1])) { - if ($row = Results::getByUniqueId($show[1])) { - $tpl->set('two', json_encode($row)); - } - } - - else { - if ($row = Results::getByBrowser($show[1], $GLOBALS['configuration']['release'])) { - $tpl->set('two', json_encode($row)); - } - } - } - - if (isset($show[2])) { - if ($show[2] == 'mybrowser') { - $tpl->set('three', ''); - } - - else if (preg_match("/^[a-f0-9]{16,16}$/", $show[2])) { - if ($row = Results::getByUniqueId($show[2])) { - $tpl->set('three', json_encode($row)); - } - } - - else { - if ($row = Results::getByBrowser($show[2], $GLOBALS['configuration']['release'])) { - $tpl->set('three', json_encode($row)); - } - } - } - - if (isset($show[3])) { - if ($show[3] == 'mybrowser') { - $tpl->set('four', ''); - } - - else if (preg_match("/^[a-f0-9]{16,16}$/", $show[3])) { - if ($row = Results::getByUniqueId($show[3])) { - $tpl->set('four', json_encode($row)); - } - } - - else { - if ($row = Results::getByBrowser($show[3], $GLOBALS['configuration']['release'])) { - $tpl->set('four', json_encode($row)); - } - } - } - - if (isset($show[4])) { - if ($show[4] == 'mybrowser') { - $tpl->set('five', ''); - } - - else if (preg_match("/^[a-f0-9]{16,16}$/", $show[4])) { - if ($row = Results::getByUniqueId($show[4])) { - $tpl->set('five', json_encode($row)); - } - } - - else { - if ($row = Results::getByBrowser($show[4], $GLOBALS['configuration']['release'])) { - $tpl->set('five', json_encode($row)); - } - } - } - } - - - echo $tpl->fetch(); - - - - - diff --git a/backend/controllers/feature.php b/backend/controllers/feature.php deleted file mode 100644 index 02805cc0..00000000 --- a/backend/controllers/feature.php +++ /dev/null @@ -1,55 +0,0 @@ -set('results', Browsers::getAll($GLOBALS['configuration']['release'])); - - if (isset($_REQUEST['show'])) { - $show = explode('/', $_REQUEST['show']); - - if (isset($show[0])) { - $tpl->set('one', json_encode(array( - 'key' => $show[0], - 'supported' => implode(',', Results::getByFeature($show[0], $GLOBALS['configuration']['release'])) - ))); - } - - if (isset($show[1])) { - $tpl->set('two', json_encode(array( - 'key' => $show[1], - 'supported' => implode(',', Results::getByFeature($show[1], $GLOBALS['configuration']['release'])) - ))); - } - - if (isset($show[2])) { - $tpl->set('three', json_encode(array( - 'key' => $show[2], - 'supported' => implode(',', Results::getByFeature($show[2], $GLOBALS['configuration']['release'])) - ))); - } - - if (isset($show[3])) { - $tpl->set('four', json_encode(array( - 'key' => $show[3], - 'supported' => implode(',', Results::getByFeature($show[3], $GLOBALS['configuration']['release'])) - ))); - } - - if (isset($show[4])) { - $tpl->set('five', json_encode(array( - 'key' => $show[4], - 'supported' => implode(',', Results::getByFeature($show[4], $GLOBALS['configuration']['release'])) - ))); - } - } - - echo $tpl->fetch(); \ No newline at end of file diff --git a/backend/controllers/fingerprint.php b/backend/controllers/fingerprint.php deleted file mode 100644 index aaeea61f..00000000 --- a/backend/controllers/fingerprint.php +++ /dev/null @@ -1,23 +0,0 @@ -set('fingerprint', $row); - } - - if ($row = Results::getByFingerprint($_REQUEST['id'])) { - $tpl->set('results', $row); - } - } - - echo $tpl->fetch(); diff --git a/backend/controllers/latest.php b/backend/controllers/latest.php deleted file mode 100644 index 8e9beb55..00000000 --- a/backend/controllers/latest.php +++ /dev/null @@ -1,14 +0,0 @@ -set('results', Raw::getAll()); - - - echo $tpl->fetch(); \ No newline at end of file diff --git a/backend/controllers/results.php b/backend/controllers/results.php deleted file mode 100644 index 4b65cd0f..00000000 --- a/backend/controllers/results.php +++ /dev/null @@ -1,261 +0,0 @@ -set('type', $type); - - - $consoles = array(); - - $result = $db->query(" - SELECT - v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('gaming-console',v.type) - ORDER BY - score DESC - "); - - while ($row = $result->fetch_object()) { - $consoles[] = $row; - } - - $tpl->set('consoles', $consoles); - - $portables = array(); - - $result = $db->query(" - SELECT - v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('gaming-portable',v.type) - ORDER BY - score DESC - "); - - while ($row = $result->fetch_object()) { - $portables[] = $row; - } - - $tpl->set('portables', $portables); - - $smarttvs = array(); - - $result = $db->query(" - SELECT - v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('television-smart',v.type) - ORDER BY - score DESC - "); - - while ($row = $result->fetch_object()) { - $smarttvs[$row->status][] = $row; - } - - $tpl->set('smarttvs', $smarttvs); - - $settopboxes = array(); - - $result = $db->query(" - SELECT - v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('television-box',v.type) - ORDER BY - score DESC - "); - - while ($row = $result->fetch_object()) { - $settopboxes[] = $row; - } - - $tpl->set('settopboxes', $settopboxes); - - $ereaders = array(); - - $result = $db->query(" - SELECT - v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('ereader',v.type) - ORDER BY - score DESC - "); - - while ($row = $result->fetch_object()) { - $ereaders[] = $row; - } - - $tpl->set('ereaders', $ereaders); - - - echo $tpl->fetch(); - } - - else { - $tpl = new Template('../templates/results.html'); - $tpl->set('type', $type); - - - $main = array(); - $names = array(); - - $result = $db->query(" - SELECT - v.status, IFNULL(pp.nickname,pp.name) as name, IFNULL(p.nickname,p.name) as alternative, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, f.score - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN data_platforms AS pp ON (pp.platform = IFNULL(p.related,p.platform)) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - pp.order > 0 AND - v.visible = 1 AND - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('" . $type . "',v.type) - ORDER BY - pp.order DESC, IFNULL(p.related,p.platform), v.status = 'upcoming' DESC, v.status = 'current' DESC, v.status = 'legacy' DESC, !ISNULL(v.releasedate), v.releasedate DESC - "); - - $count = 0; - - $previousPlatform = ''; - $previousId = ''; - - while ($row = $result->fetch_object()) { - $names[$row->name] = array($row->name, $row->id); - - if (!isset($main[$row->name])) { - $main[$row->name] = array(null, null); - } - - if ($row->status == 'upcoming') { - $main[$row->name][0] = $row; - } - - if ($row->status == 'current') { - $main[$row->name][1] = $row; - } - - if ($row->status == 'legacy' && count($main[$row->name]) < 8) { - if ($row->id == $previousId && $row->platform != $previousPlatform) { - $main[$row->name][] = $row->alternative; - } - - $main[$row->name][] = $row; - } - - $previousPlatform = $row->platform; - $previousId = $row->id; - - $count = max($count, count($main[$row->name])); - } - - $tpl->set('main', $main); - $tpl->set('mainRows', $count); - $tpl->set('mainColumns', $names); - - - - $results = array(); - - $result = $db->query(" - SELECT - v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('" . $type . "',v.type) - ORDER BY - score DESC, platform ASC, version DESC - "); - - while ($row = $result->fetch_object()) { - $results[$row->status][] = $row; - } - - - $tpl->set('results', $results); - - - - $sets = array(); - - $result = $db->query(" - SELECT - p.order, pp.name AS grouped, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, IF(ISNULL(v.releasedate),DATE(NOW()),v.releasedate) AS `releasedate`, v.status, f.score - FROM - data_versions AS v - LEFT JOIN data_platforms AS p ON (v.platform = p.platform) - LEFT JOIN data_platforms AS pp ON (pp.platform = IFNULL(p.related,p.platform)) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - (!ISNULL(v.releasedate) OR v.status = 'upcoming') AND - s.release = '" . $GLOBALS['configuration']['release'] . "' AND - FIND_IN_SET('" . $type . "',p.type) AND - !ISNULL(f.score) - ORDER BY - pp.name, `releasedate` - "); - - while ($row = $result->fetch_object()) { - $sets[$row->grouped]['name'] = $row->grouped; - $sets[$row->grouped]['data'][] = $row; - } - - $tpl->set('sets', $sets); - - echo $tpl->fetch(); - } \ No newline at end of file diff --git a/backend/controllers/saved.php b/backend/controllers/saved.php deleted file mode 100644 index 18c09d35..00000000 --- a/backend/controllers/saved.php +++ /dev/null @@ -1,20 +0,0 @@ -set('release', intval($GLOBALS['configuration']['release'])); - - if (isset($_REQUEST['id'])) { - - if ($row = Results::getByUniqueId($_REQUEST['id'])) { - $tpl->set('one', json_encode($row)); - $tpl->set('legacy', intval($row->release) != intval($GLOBALS['configuration']['release'])); - $tpl->set('release', intval($row->release)); - } - } - - echo $tpl->fetch(); diff --git a/backend/controllers/search.php b/backend/controllers/search.php deleted file mode 100644 index 0aacd545..00000000 --- a/backend/controllers/search.php +++ /dev/null @@ -1,12 +0,0 @@ -fetch(); \ No newline at end of file diff --git a/backend/controllers/timeline.php b/backend/controllers/timeline.php deleted file mode 100644 index 166d3dc4..00000000 --- a/backend/controllers/timeline.php +++ /dev/null @@ -1,50 +0,0 @@ -query(" - SELECT - * - FROM - data_platforms - WHERE - (platform = '" . $db->escape_string($_REQUEST['id']) . "' OR related = '" . $db->escape_string($_REQUEST['id']) . "') AND - FIND_IN_SET('" . $db->escape_string($_REQUEST['type']) . "',type) - ORDER BY - related IS NULL DESC, `order` - "); - - $names = []; - $name = ''; - - while ($row = $result->fetch_object()) { - $names[] = $row->name; - } - - $last = array_pop($names); - - if (count($names)) { - $name = implode(', ', $names) . ' and ' . $last; - } else { - $name = $last; - } - - $tpl->set('name', $name); - - if ($timeline = Results::getTimeline($_REQUEST['id'], $_REQUEST['type'], $GLOBALS['configuration']['release'])) { - $tpl->set('timeline', $timeline); - } - } - - echo $tpl->fetch(); diff --git a/backend/index.php b/backend/index.php deleted file mode 100644 index d4992d5f..00000000 --- a/backend/index.php +++ /dev/null @@ -1,303 +0,0 @@ -query('SELECT DISTINCT identifier FROM results WHERE `release` = "' . $GLOBALS['configuration']['release'] . '" AND source = "' . $db->escape_string($_REQUEST['source']) . '"'); - while ($row = $result->fetch_object()) { - $data[] = $row->identifier; - } - - echo json_encode($data); - break; - - case 'getTask': - $task = Uuid::uuid4(); - $source = $_REQUEST['source']; - $identifier = $_REQUEST['identifier']; - - $url = (!empty($_SERVER['HTTPS']) ? 'https://' : 'http://') . - $_SERVER['HTTP_HOST'] . - '/index.html' . - '?task=' . $task . - '&source=' . rawurlencode($source) . - '&identifier=' . rawurlencode($identifier); - - echo json_encode(array('task' => $task, 'url' => $url)); - break; - - case 'hasTask': - $db = Factory::Database(); - $result = $db->query('SELECT * FROM results WHERE task = "' . $db->escape_string($_REQUEST['task']) . '"'); - - if ($result->num_rows) { - if ($row = $result->fetch_object()) { - $url = (!empty($_SERVER['HTTPS']) ? 'https://' : 'http://') . - $_SERVER['HTTP_HOST'] . - '/s/' . - $row->uniqueid . - '.html'; - - echo json_encode(array( - 'source' => $row->source, - 'identifier' => $row->identifier, - 'score' => intval($row->score), - 'fingerprint' => $row->fingerprint, - 'url' => $url, - )); - } - } else { - echo 'false'; - } - break; - - case 'exportResults': - echo json_encode(Results::export($GLOBALS['configuration']['release'])); - break; - - case 'myResults': - echo json_encode(Raw::getMine()); - break; - - case 'allResults': - echo json_encode(Raw::getAll()); - break; - - case 'searchResults': - echo json_encode(Raw::search($_REQUEST['query'])); - break; - - case 'loadFeature': - echo json_encode(array( - 'key' => $_REQUEST['key'], - 'supported' => implode(',', Results::getByFeature($_REQUEST['key'], $GLOBALS['configuration']['release'])) - )); - - break; - - case 'loadBrowser': - if (substr($_REQUEST['id'], 0, 7) == 'custom:') { - if ($data = Results::getByUniqueId(substr($_REQUEST['id'], 7))) { - echo json_encode($data); - } - - } else { - if ($data = Results::getByBrowser($_REQUEST['id'], $GLOBALS['configuration']['release'])) { - echo json_encode($data); - } - } - - break; - - case 'submit': - $payload = json_decode($_REQUEST['payload']); - $headers = getallheaders(); - - $filteredHeaders = ''; - - foreach($headers as $key => $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 (!$GLOBALS['configuration']['readonly'] && intval($payload->release) >= 5) { - $useragentHeader = $_SERVER['HTTP_USER_AGENT']; - $useragentId = preg_replace("/(; ?)[a-z][a-z](?:-[a-zA-Z][a-zA-Z])?([;)])/", '$1xx$2', $useragentHeader); - - $db = Factory::Database(); - - $db->query(' - INSERT INTO - results - SET - `release` = "' . $db->escape_string($payload->release) . '", - `timestamp` = NOW(), - `ip` = "' . $db->escape_string(get_ip_address()) . '", - `protocol` = "' . $db->escape_string($payload->protocol) . '", - `source` = ' . (is_null($payload->source) ? 'NULL' : '"' . $db->escape_string($payload->source) . '"') . ', - `identifier` = ' . (is_null($payload->identifier) ? 'NULL' : '"' . $db->escape_string($payload->identifier) . '"') . ', - `task` = ' . (is_null($payload->task) ? 'NULL' : '"' . $db->escape_string($payload->task) . '"') . ', - `uniqueid` = "' . $db->escape_string($payload->uniqueid) . '", - `score` = "' . $db->escape_string($payload->score) . '", - `maximum` = "' . $db->escape_string($payload->maximum) . '", - `fingerprint` = "' . $db->escape_string(md5($payload->results.$payload->points)) . '", - `camouflage` = "' . $db->escape_string($payload->camouflage) . '", - `features` = "' . $db->escape_string($payload->features) . '", - `browserName` = "' . $db->escape_string($payload->browserName) . '", - `browserChannel` = "' . $db->escape_string($payload->browserChannel) . '", - `browserVersion` = "' . $db->escape_string($payload->browserVersion) . '", - `browserVersionType` = "' . $db->escape_string($payload->browserVersionType) . '", - `browserVersionMajor` = "' . intval($payload->browserVersionMajor) . '", - `browserVersionMinor` = "' . intval($payload->browserVersionMinor) . '", - `browserVersionOriginal` = "' . $db->escape_string($payload->browserVersionOriginal) . '", - `browserMode` = "' . $db->escape_string($payload->browserMode) . '", - `engineName` = "' . $db->escape_string($payload->engineName) . '", - `engineVersion` = "' . $db->escape_string($payload->engineVersion) . '", - `osName` = "' . $db->escape_string($payload->osName) . '", - `osFamily` = "' . $db->escape_string($payload->osFamily) . '", - `osVersion` = "' . $db->escape_string($payload->osVersion) . '", - `deviceManufacturer` = "' . $db->escape_string($payload->deviceManufacturer) . '", - `deviceModel` = "' . $db->escape_string($payload->deviceModel) . '", - `deviceSeries` = "' . $db->escape_string($payload->deviceSeries) . '", - `deviceWidth` = "' . $db->escape_string($payload->deviceWidth) . '", - `deviceHeight` = "' . $db->escape_string($payload->deviceHeight) . '", - `deviceType` = "' . $db->escape_string($payload->deviceType) . '", - `useragent` = "' . $db->escape_string($payload->useragent) . '", - `useragentHeader` = "' . $db->escape_string($useragentHeader) . '", - `useragentId` = "' . $db->escape_string(md5($useragentId)) . '", - `humanReadable` = "' . $db->escape_string($payload->humanReadable) . '", - `headers` = "' . $db->escape_string($filteredHeaders) . '", - `status` = 0 - '); - - echo $db->error; - - $db->query(' - REPLACE INTO - indices - SET - `release` = "' . $db->escape_string($payload->release) . '", - `fingerprint` = "' . $db->escape_string(md5($payload->results.$payload->points)) . '", - `score` = "' . $db->escape_string($payload->score) . '", - `humanReadable` = "' . $db->escape_string($payload->humanReadable) . '", - `browserName` = "' . $db->escape_string($payload->browserName) . '", - `browserVersion` = "' . $db->escape_string($payload->browserVersion) . '", - `engineName` = "' . $db->escape_string($payload->engineName) . '", - `engineVersion` = "' . $db->escape_string($payload->engineVersion) . '", - `osName` = "' . $db->escape_string($payload->osName) . '", - `osFamily` = "' . $db->escape_string($payload->osFamily) . '", - `osVersion` = "' . $db->escape_string($payload->osVersion) . '", - `deviceManufacturer` = "' . $db->escape_string($payload->deviceManufacturer) . '", - `deviceModel` = "' . $db->escape_string($payload->deviceModel) . '", - `deviceSeries` = "' . $db->escape_string($payload->deviceSeries) . '", - `deviceType` = "' . $db->escape_string($payload->deviceType) . '", - `timestamp` = NOW(), - `uniqueid` = "' . $db->escape_string($payload->uniqueid) . '" - '); - - $db->query(' - INSERT INTO - fingerprints - SET - `release` = "' . $db->escape_string($payload->release) . '", - `fingerprint` = "' . $db->escape_string(md5($payload->results.$payload->points)) . '", - `score` = "' . $db->escape_string($payload->score) . '", - `maximum` = "' . $db->escape_string($payload->maximum) . '", - `results` = "' . $db->escape_string($payload->results) . '", - `points` = "' . $db->escape_string($payload->points) . '" - '); - } - - break; - - case 'feedback': - $payload = json_decode($_REQUEST['payload']); - - if (!$GLOBALS['configuration']['readonly']) { - $db = Factory::Database(); - - $db->query(' - UPDATE - results - SET - status = -1, - comments = "' . $db->escape_string($payload->value) . '" - WHERE - uniqueid = "' . $db->escape_string($payload->uniqueid) . '" - '); - } - - break; - - case 'save': - $payload = json_decode($_REQUEST['payload']); - - if (!$GLOBALS['configuration']['readonly']) { - $db = Factory::Database(); - - $db->query(' - UPDATE - results - SET - used = used + 1, - lastUsed = NOW() - WHERE - uniqueid = "' . $db->escape_string($payload->uniqueid) . '" - '); - } - - break; - - case 'confirm': - $payload = json_decode($_REQUEST['payload']); - - if (!$GLOBALS['configuration']['readonly']) { - $db = Factory::Database(); - - $db->query(' - UPDATE - results - SET - status = 1 - WHERE - uniqueid = "' . $db->escape_string($payload->uniqueid) . '" - '); - } - - break; - - case 'report': - $payload = json_decode($_REQUEST['payload']); - - if (!$GLOBALS['configuration']['readonly']) { - $db = Factory::Database(); - - $db->query(' - UPDATE - results - SET - status = -1 - WHERE - uniqueid = "' . $db->escape_string($payload->uniqueid) . '" - '); - } - - break; - } diff --git a/backend/libraries/database.php b/backend/libraries/database.php deleted file mode 100644 index 13effe02..00000000 --- a/backend/libraries/database.php +++ /dev/null @@ -1,11 +0,0 @@ -set_charset ('utf8'); - return $db; - } - } \ No newline at end of file diff --git a/backend/libraries/template.php b/backend/libraries/template.php deleted file mode 100644 index 11d899fb..00000000 --- a/backend/libraries/template.php +++ /dev/null @@ -1,93 +0,0 @@ -file = $file; - } - - /** - * Set a template variable. - */ - function set($name, $value) { - $this->value[$name] = is_object($value) && @function_exists(array($value, 'Template')) ? $value->fetch() : $value; - } - - function append($name, $value) { - if (isset($this->append[$name])) - $this->append[$name] .= is_object($value) && @function_exists(array($value, 'Template')) ? $value->fetch() : $value; - else - $this->append[$name] = is_object($value) && @function_exists(array($value, 'Template')) ? $value->fetch() : $value; - } - - function prepend($name, $value) { - if (isset($this->prepend[$name])) - $this->prepend[$name] .= is_object($value) && @function_exists(array($value, 'Template')) ? $value->fetch() : $value; - else - $this->prepend[$name] = is_object($value) && @function_exists(array($value, 'Template')) ? $value->fetch() : $value; - } - - function filter($function) { - $this->filters[] = $function; - } - - function get($name) { - return $this->value[$name]; - } - - /** - * Open, parse, and return the template file. - * - * @param $file string the template file name - */ - function fetch($file = null) { - if(!$file) $file = $this->file; - - if (is_array($this->prepend)) { - while(list($k,) = each($this->prepend)) { - if (isset($this->value[$k])) - $this->value[$k] = $this->prepend[$k] . $this->value[$k]; - else - $this->value[$k] = $this->prepend[$k]; - } - } - - if (is_array($this->append)) { - while(list($k,) = each($this->append)) { - if (isset($this->value[$k])) - $this->value[$k] = $this->value[$k] . $this->append[$k]; - else - $this->value[$k] = $this->append[$k]; - } - } - - if (is_array($this->value)) { - extract($this->value); - } - // Extract the vars to local namespace - - ob_start(); // Start output buffering - include($file); // Include the file - $contents = ob_get_contents(); // Get the contents of the buffer - ob_end_clean(); // End buffering and discard - - // Execute any registered filters... - if (is_array($this->filters)) { - while(list(,$f) = each($this->filters)) { - $contents = call_user_func($f, $contents, $this); - } - } - - return $contents; // Return the contents - } -} \ No newline at end of file diff --git a/backend/libraries/tools.php b/backend/libraries/tools.php deleted file mode 100644 index a564e5f0..00000000 --- a/backend/libraries/tools.php +++ /dev/null @@ -1,81 +0,0 @@ -= 0) && (($no = $dif / $lngh[$v]) <= 1); $v--); - if ($v < 0) - $v = 0; - $_tm = $cur_tm - ($dif % $lngh[$v]); - - $no = ($rcs ? floor($no) : round($no)); // if last denomination, round - - if ($no != 1) - $pds[$v] .= 's'; - $x = $no . ' ' . $pds[$v]; - - if (($rcs > 0) && ($v >= 1)) - $x .= ' ' . $this->time_ago($_tm, $rcs - 1); - - return $x; - } - - - function get_ip_address() { - $ip = $_SERVER['REMOTE_ADDR']; - - $headers = apache_request_headers(); - if (isset($headers['X-Forwarded-For'])) $ip = $headers['X-Forwarded-For']; - if (isset($headers['Proxy-Client-IP'])) $ip = $headers['Proxy-Client-IP']; - if (isset($headers['X-Client-IP'])) $ip = $headers['X-Client-IP']; - if (isset($headers['Client-IP'])) $ip = $headers['Client-IP']; - - return $ip; - } - - function opt_explode($echar, $str) { - $newstrarr = []; - - if (strlen($echar) != 1 || strlen($str) == 0) { - return 0; - } - - $str = trim($str); - - $idx=0; - $arr=0; - - while($idx < strlen($str)) { - if($str[$idx] == '"') { - // quoted field - $idx++; - while ($idx < strlen($str)) { - // look for ending quote - if($str[$idx] == '"') { - $idx++; - $arr++; - break; - } - $newstrarr[$arr] = $newstrarr[$arr] . $str[$idx]; - $idx++; - } - } elseif ($str[$idx] == $echar) { - // normal delimiter, advance element - $arr++; - } else { - // must be normal char, tack onto current element - if (isset($newstrarr[$arr])) { - $newstrarr[$arr] = $newstrarr[$arr] . $str[$idx]; - } else { - $newstrarr[$arr] = $str[$idx]; - } - } - $idx++; - } - - return $newstrarr; - } \ No newline at end of file diff --git a/backend/models/browsers.php b/backend/models/browsers.php deleted file mode 100644 index 7f15c4a9..00000000 --- a/backend/models/browsers.php +++ /dev/null @@ -1,42 +0,0 @@ -query(" - SELECT - v.platform, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, IFNULL(p.related,p.platform) AS id, f.score - FROM - data_platforms AS p - LEFT JOIN data_versions AS v ON (p.platform = v.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - FIND_IN_SET('" . $type . "',v.type) AND - s.release = '" . $release . "' AND - f.points != '' - ORDER BY - v.platform, v.status='experimental', v.status='upcoming', ISNULL(v.releasedate), v.releasedate, v.version - "); - - while ($row = $result->fetch_object()) { - $row->uid = $type . '-' . $row->platform . '-' . $row->version; - $row->type = $type; - $row->visible = $row->visible == '1'; - - $results[] = $row; - } - } - - return $results; - } - - - } \ No newline at end of file diff --git a/backend/models/fingerprint.php b/backend/models/fingerprint.php deleted file mode 100644 index f7657851..00000000 --- a/backend/models/fingerprint.php +++ /dev/null @@ -1,159 +0,0 @@ - 20) { - $data['status'] = 'none'; - unset($data['items']); - } - - if ($data['status'] == 'fixed' || $data['status'] == 'list') { - $items = array(); - - reset ($data['items']); - while (list($k,$v) = each($data['items'])) { - $items[] = array('name' => $k, 'value' => $v['value'], 'percentage' => $v['percentage']); - } - - $data['items'] = $items; - - usort($data['items'], function ($a, $b) { - if ($a['value'] == $b['value']) { - return 0; - } - return ($a['value'] > $b['value']) ? -1 : 1; - }); - } - - return $data; - } - - - static function getById($id) { - $results = array( - 'results' => array(), - 'browserName' => array('items' => array(), 'status' => 'list'), - 'browserVersion' => array('items' => array(), 'status' => 'list'), - 'osName' => array('items' => array(), 'status' => 'list'), - 'osVersion' => array('items' => array(), 'status' => 'list'), - 'deviceManufacturer' => array('items' => array(), 'status' => 'list'), - 'deviceModel' => array('items' => array(), 'status' => 'list') - ); - - $db = Factory::Database(); - - $result = $db->query(" - SELECT - * - FROM - results - WHERE - fingerprint = '" . $db->escape_string($id) . "' - ORDER BY - humanReadable - "); - - while ($row = $result->fetch_object()) { - $results['results'][] = (object) array( - 'id' => $row->uniqueid, - 'name' => $row->humanReadable, - 'ago' => time_ago(strtotime($row->timestamp)) - ); - - if (!isset($results['browserName']['items'][trim($row->browserName)])) { - $results['browserName']['items'][trim($row->browserName)] = array('value' => 0); - } - - $results['browserName']['items'][trim($row->browserName)]['value']++; - - - if (!isset($results['browserVersion']['items'][trim($row->browserName . ' ' . $row->browserVersion)])) { - $results['browserVersion']['items'][trim($row->browserName . ' ' . $row->browserVersion)] = array('value' => 0); - } - - $results['browserVersion']['items'][trim($row->browserName . ' ' . $row->browserVersion)]['value']++; - - - if (!isset($results['osName']['items'][trim($row->osName)])) { - $results['osName']['items'][trim($row->osName)] = array('value' => 0); - } - - $results['osName']['items'][trim($row->osName)]['value']++; - - - if (!isset($results['osVersion']['items'][trim($row->osName . ' ' . $row->osVersion)])) { - $results['osVersion']['items'][trim($row->osName . ' ' . $row->osVersion)] = array('value' => 0); - } - - $results['osVersion']['items'][trim($row->osName . ' ' . $row->osVersion)]['value']++; - - - if (!isset($results['deviceManufacturer']['items'][trim($row->deviceManufacturer)])) { - $results['deviceManufacturer']['items'][trim($row->deviceManufacturer)] = array('value' => 0); - } - - $results['deviceManufacturer']['items'][trim($row->deviceManufacturer)]['value']++; - - - if (!isset($results['deviceModel']['items'][trim($row->deviceManufacturer . ' ' . $row->deviceModel)])) { - $results['deviceModel']['items'][trim($row->deviceManufacturer . ' ' . $row->deviceModel)] = array('value' => 0); - } - - $results['deviceModel']['items'][trim($row->deviceManufacturer . ' ' . $row->deviceModel)]['value']++; - } - - - $results['browserName'] = Fingerprint::process($results['browserName']); - $results['browserVersion'] = Fingerprint::process($results['browserVersion']); - $results['osName'] = Fingerprint::process($results['osName']); - $results['osVersion'] = Fingerprint::process($results['osVersion']); - $results['deviceManufacturer'] = Fingerprint::process($results['deviceManufacturer']); - $results['deviceModel'] = Fingerprint::process($results['deviceModel']); - - if ($results['deviceManufacturer']['status'] == 'fixed' && $results['deviceManufacturer']['value'] == '') { - $results['deviceManufacturer']['status'] = 'none'; - unset($results['deviceManufacturer']['value']); - } - - if ($results['deviceModel']['status'] == 'fixed' && $results['deviceModel']['value'] == '') { - $results['deviceModel']['status'] = 'none'; - unset($results['deviceModel']['value']); - } - - return $results; - } - } \ No newline at end of file diff --git a/backend/models/raw.php b/backend/models/raw.php deleted file mode 100644 index 117c8dfc..00000000 --- a/backend/models/raw.php +++ /dev/null @@ -1,165 +0,0 @@ - 1) { - if ($components[0] == 'score') { - $comparison = $negative ? '!=' : '='; - - if (substr($components[1], -1) == '+') { - $comparison = $negative ? '<=' : '>'; - $components[1] = substr($components[1], 0, -1); - } - - if (substr($components[1], -1) == '-') { - $comparison = $negative ? '>=' : '<'; - $components[1] = substr($components[1], 0, -1); - } - - $where[] = 'score ' . $comparison . ' ' . intval($components[1]); - } - - if (in_array($components[0], array('browserVersion', 'engineVersion', 'osVersion', 'browserName', 'engineName', 'osName', 'deviceManufacturer', 'deviceType', 'deviceModel'))) { - if ($components[1] == "") { - $where[] = $components[0] . ($negative ? ' !=' : ' =') . ' ""'; - } else { - $where[] = $components[0] . ($negative ? ' NOT' : '') . ' LIKE "' . $db->escape_string($components[1]) . '%"'; - } - } - - if (in_array($components[0], array('useragent'))) { - if ($components[1] == "") { - $where[] = $components[0] . ($negative ? ' !=' : ' =') . ' ""'; - } else { - $where[] = $components[0] . ($negative ? ' NOT' : '') . ' LIKE "%' . $db->escape_string($components[1]) . '%"'; - } - } - } - - else { - $where[] = ($negative ? '!' : '') . 'MATCH(humanReadable) AGAINST ("\"' . $db->escape_string($components[0]) . '\"")'; - } - } - - - - $result = $db->query(' - INSERT INTO - queries - SET - query = "' . $db->escape_string($query) . '", - compiledQuery = "' . $db->escape_string(implode(' AND ', $where)) . '" - '); - - $id = $db->insert_id; - $start = time(); - - - $results = array(); - - $result = $db->query(' - SELECT - timestamp, uniqueid, score, humanReadable - FROM - indices - WHERE - ' . implode(' AND ', $where) . ' - ORDER BY - timestamp DESC - LIMIT 100 - '); - - while ($row = $result->fetch_object()) { - $results[] = (object) array( - 'uniqueid' => $row->uniqueid, - 'score' => intval($row->score), - 'humanReadable' => $row->humanReadable, - 'ago' => time_ago(strtotime($row->timestamp)) - ); - } - - - $db->query(' - UPDATE - queries - SET - elapsedTime = ' . (time() - $start) . ' - WHERE - id = ' . $db->escape_string($id) . ' - '); - - - return $results; - } - - static function getAll() { - $db = Factory::Database(); - - $results = array(); - - $result = $db->query(' - SELECT - timestamp, uniqueid, score, humanReadable - FROM - results - ORDER BY - timestamp DESC - LIMIT 100 - '); - - while ($row = $result->fetch_object()) { - $results[] = (object) array( - 'uniqueid' => $row->uniqueid, - 'score' => intval($row->score), - 'humanReadable' => $row->humanReadable, - 'ago' => time_ago(strtotime($row->timestamp)) - ); - } - - return $results; - } - - static function getMine() { - $db = Factory::Database(); - - $results = array(); - - $result = $db->query(' - SELECT - timestamp, uniqueid, score, humanReadable - FROM - results - WHERE - ip = "' . $db->escape_string(get_ip_address()) . '" - ORDER BY - timestamp DESC - LIMIT 100 - '); - - while ($row = $result->fetch_object()) { - $results[] = (object) array( - 'uniqueid' => $row->uniqueid, - 'score' => intval($row->score), - 'humanReadable' => $row->humanReadable, - 'ago' => time_ago(strtotime($row->timestamp)) - ); - } - - return $results; - } - } \ No newline at end of file diff --git a/backend/models/results.php b/backend/models/results.php deleted file mode 100644 index f7c35574..00000000 --- a/backend/models/results.php +++ /dev/null @@ -1,338 +0,0 @@ -query(" - SELECT - v.platform, IFNULL(v.version,'') AS version, v.nickname, v.releasedate, v.status, f.score, f.results - FROM - data_platforms AS p - LEFT JOIN data_versions AS v ON (p.platform = v.platform) - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (s.fingerprint = f.fingerprint) - WHERE - (p.platform = '" . $db->escape_string($id) . "' OR p.related = '" . $db->escape_string($id) . "') AND - FIND_IN_SET('" . $db->escape_string($type) . "',p.type) AND - FIND_IN_SET('" . $db->escape_string($type) . "',v.type) AND - v.status != 'experimental' AND - s.release = '" . $release . "' - ORDER BY - IF(v.status='upcoming',1,0) DESC, v.releasedate DESC, p.related, v.version DESC - "); - - while ($row = $result->fetch_object()) { - $results[] = $row; - } - - for ($i = 0; $i < count($results) - 1; $i++) { - $results[$i]->changes = Results::getDiff($results[$i]->results, $results[$i + 1]->results); - } - - for ($i = 0; $i < count($results); $i++) { - unset($results[$i]->results); - } - - return $results; - } - - static function getArray($string) { - $result = array(); - - $array = explode(',', $string); - - for ($i = 0; $i < count($array); $i++) { - $item = explode('=', $array[$i]); - $result[$item[0]] = $item[1]; - } - - return $result; - } - - static function getDiff($current, $previous) { - $current = Results::getArray($current); - $previous = Results::getArray($previous); - - $changes = array(); - - foreach ($previous AS $p => $value) { - if (preg_match("/\.codecs\./", $p)) continue; - - if ($previous[$p] == 33) $previous[$p] = 1; - if ($current[$p] == 33) $current[$p] = 1; - - if ($previous[$p] != $current[$p]) { - $changes[] = (object) array( - 'id' => $p, - 'from' => $previous[$p], - 'to' => $current[$p] - ); - } - } - - return $changes; - } - - - static function getByFeature($id, $release) { - $db = Factory::Database(); - - $results = array(); - - $result = $db->query(" - SELECT - IFNULL(SUBSTRING_INDEX(SUBSTRING_INDEX(f.results,'" . $db->escape_string($id) . "=',-1),',',1),0) as supported, - v.platform, IFNULL(v.version,'') AS version - FROM - data_versions AS v - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $release . "' - "); - - while ($row = $result->fetch_object()) { - $results[] = $row->platform . '-' . $row->version . '=' . $row->supported; - } - - return $results; - } - - static function getByBrowser($browser, $release) { - $db = Factory::Database(); - - $browser = explode('-', $browser); - - if (count($browser) > 1) { - list($browserPlatform, $browserVersion) = $browser; - - $result = $db->query(" - SELECT - v.platform, IFNULL(v.version,'') AS version, v.nickname, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $release . "' AND - v.platform = '" . $db->escape_string($browserPlatform) . "' AND - v.version = '" . $db->escape_string($browserVersion) . "' - "); - - if ($row = $result->fetch_object()) { - return $row; - } - - return; - } - else { - $browserPlatform = $browser[0]; - } - - $result = $db->query(" - SELECT - v.platform, IFNULL(v.version,'') AS version, v.nickname, f.score, f.points, f.results - FROM - data_versions AS v - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $release . "' AND - v.platform = '" . $db->escape_string($browserPlatform) . "' AND - v.version IS NULL - ORDER BY - v.releasedate DESC - "); - - if ($row = $result->fetch_object()) { - return $row; - } - } - - - - static function getByUniqueId($id) { - $db = Factory::Database(); - - $result = $db->query(" - SELECT - r.release, r.uniqueid AS id, 'Unique id' AS nickname, f.score, f.maximum, f.points, f.results, humanReadable, useragentHeader AS useragent, deviceWidth, deviceHeight, f.fingerprint - FROM - results AS r - LEFT JOIN fingerprints AS f ON (r.fingerprint = f.fingerprint) - WHERE - r.uniqueid ='" . $db->escape_string($id) . "' - "); - - if ($row = $result->fetch_object()) { - - // Update use counter - $db->query(' - UPDATE - results - SET - used = used + 1, - lastUsed = NOW() - WHERE - uniqueid = "' . $db->escape_string($id) . '" - '); - - return $row; - } - - - /* Quick hack to make older ids work again */ - - $result = $db->query(" - SELECT - r.version as `release`, r.uniqueid AS id, 'Unique id' AS nickname, f.score, f.maximum, f.points, f.results, humanReadable, useragentHeader AS useragent, deviceWidth, deviceHeight, f.fingerprint - FROM - html5test5.results AS r - LEFT JOIN html5test5.fingerprints AS f ON (r.fingerprint = f.fingerprint) - WHERE - r.uniqueid ='" . $db->escape_string($id) . "' - "); - - if ($row = $result->fetch_object()) { - - // Update use counter - $db->query(' - UPDATE - html5test5.results - SET - used = used + 1, - lastUsed = NOW() - WHERE - uniqueid = "' . $db->escape_string($id) . '" - '); - - return $row; - } - } - - - static function getByFingerprint($id) { - $db = Factory::Database(); - - $res = $db->query(" - SELECT - score, maximum, points, results - FROM - fingerprints - WHERE - fingerprint ='" . $db->escape_string($id) . "' - "); - - if ($row = $res->fetch_object()) { - return $row; - } - } - - - static function export($release) { - $db = Factory::Database(); - - $browsers = array(); - - $res = $db->query(" - SELECT - * - FROM - data_platforms - ORDER BY - name - "); - - echo mysql_error(); - - while ($row = $res->fetch_object()) { - $browser = (object) array( - 'name' => $row->name, - 'kind' => $row->kind, - 'versions' => array() - ); - - $vres = $db->query(" - SELECT - * - FROM - data_versions - WHERE - platform = '" . addslashes($row->id) . "' - ORDER BY - version - "); - - while ($vrow = $vres->fetch_object()) { - $version = (object) array( - 'id' => is_null($vrow->version) ? $vrow->platform : $vrow->platform . '-' . $vrow->version, - 'version' => $vrow->version, - 'nickname' => $vrow->nickname, - 'release' => $vrow->release - ); - - $browser->versions[] = $version; - } - - $browsers[] = $browser; - } - - - $results = array(); - - $res = $db->query(" - SELECT - v.platform, IFNULL(v.version,'') AS version, f.results - FROM - data_versions AS v - LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL))) - LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint) - WHERE - s.release = '" . $release . "' - ORDER BY - v.platform, v.version - "); - - while ($row = $res->fetch_object()) { - $r = explode(',', $row->results); - - for ($i = 0; $i < count($r); $i++) { - list($key, $value) = explode('=', $r[$i]); - - if (!isset($results[$key])) { - $results[$key] = array(); - } - - $platform = $row->version == '' ? $row->platform : $row->platform . '-' . $row->version; - $value = intval($value); - - if ($value & 1) { - switch(true) { - case !! ($value & 2): $results[$key][$platform] = 'yes:old'; - case !! ($value & 4): $results[$key][$platform] = 'yes:buggy'; - case !! ($value & 8): $results[$key][$platform] = 'yes:prefix'; - default: $results[$key][$platform] = 'yes'; - } - } - else { - switch(true) { - case !! ($value & 16): $results[$key][$platform] = 'no:blocked'; - default: $results[$key][$platform] = 'no'; - } - } - } - } - - - return array( - 'browsers' => $browsers, - 'results' => $results - ); - } - } \ No newline at end of file diff --git a/backend/other/database.sql b/backend/other/database.sql deleted file mode 100644 index c5bcf030..00000000 --- a/backend/other/database.sql +++ /dev/null @@ -1,146 +0,0 @@ -CREATE TABLE `browserCompanies` ( - `id` varchar(24) DEFAULT NULL, - `name` varchar(128) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -CREATE TABLE `browserDevices` ( - `id` char(24) DEFAULT NULL, - `name` varchar(128) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -CREATE TABLE `browserFamilies` ( - `id` char(24) DEFAULT NULL, - `name` varchar(128) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -CREATE TABLE `browserPlatforms` ( - `id` char(24) DEFAULT NULL, - `name` varchar(128) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -CREATE TABLE `browserVariants` ( - `id` char(24) NOT NULL DEFAULT '', - `name` varchar(128) DEFAULT NULL, - `nickname` varchar(128) DEFAULT NULL, - `company` varchar(128) DEFAULT NULL, - `importance` int(2) DEFAULT '0', - `kind` varchar(128) DEFAULT NULL, - `type` varchar(128) DEFAULT NULL, - `family` char(24) DEFAULT NULL, - `platforms` varchar(128) DEFAULT NULL, - `devices` varchar(128) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -CREATE TABLE `browserVersions` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `variant` varchar(32) DEFAULT NULL, - `version` varchar(32) DEFAULT NULL, - `grouped` varchar(128) DEFAULT NULL, - `nickname` varchar(128) DEFAULT NULL, - `details` varchar(128) DEFAULT NULL, - `description` varchar(256) DEFAULT NULL, - `release` date DEFAULT NULL, - `type` varchar(32) DEFAULT NULL, - `status` varchar(16) DEFAULT NULL, - `listed` int(11) NOT NULL DEFAULT '1', - PRIMARY KEY (`id`), - UNIQUE KEY `variant_version_type` (`variant`,`version`,`type`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=260 DEFAULT CHARSET=utf8; - -CREATE TABLE `fingerprints` ( - `fingerprint` char(32) NOT NULL DEFAULT '', - `version` tinyint(3) NOT NULL DEFAULT '0', - `score` smallint(3) NOT NULL DEFAULT '0', - `maximum` smallint(3) NOT NULL DEFAULT '0', - `points` varchar(512) NOT NULL DEFAULT '', - `results` varchar(10240) NOT NULL DEFAULT '', - PRIMARY KEY (`fingerprint`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `indices` ( - `fingerprint` char(32) NOT NULL DEFAULT '', - `score` int(11) NOT NULL, - `humanReadable` char(128) NOT NULL DEFAULT '', - `browserName` char(64) NOT NULL, - `browserVersion` char(20) NOT NULL, - `engineName` char(60) NOT NULL, - `engineVersion` char(20) NOT NULL, - `osName` char(64) NOT NULL, - `osVersion` char(20) NOT NULL, - `deviceManufacturer` char(60) NOT NULL, - `deviceModel` char(64) NOT NULL, - `deviceType` char(16) NOT NULL, - `timestamp` datetime NOT NULL, - `uniqueid` char(20) NOT NULL, - PRIMARY KEY (`fingerprint`,`humanReadable`), - KEY `timestamp` (`timestamp`) USING BTREE, - KEY `browser` (`browserName`,`browserVersion`) USING BTREE, - KEY `os` (`osName`,`osVersion`) USING BTREE, - KEY `engine` (`engineName`,`engineVersion`) USING BTREE, - KEY `device` (`deviceManufacturer`,`deviceModel`) USING BTREE, - KEY `deviceModel` (`deviceModel`) USING BTREE, - FULLTEXT KEY `humanReadable` (`humanReadable`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `results` ( - `version` varchar(8) CHARACTER SET latin1 NOT NULL, - `revision` int(11) NOT NULL DEFAULT '0', - `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `ip` varchar(16) CHARACTER SET latin1 NOT NULL, - `protocol` varchar(8) CHARACTER SET latin1 NOT NULL, - `uniqueid` varchar(20) CHARACTER SET latin1 NOT NULL, - `score` int(11) NOT NULL, - `maximum` int(11) NOT NULL DEFAULT '0', - `browserName` varchar(64) CHARACTER SET latin1 NOT NULL, - `browserChannel` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '', - `browserVersion` varchar(20) CHARACTER SET latin1 NOT NULL, - `browserVersionType` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '', - `browserVersionMajor` varchar(8) CHARACTER SET latin1 NOT NULL DEFAULT '' COMMENT ' ', - `browserVersionMinor` varchar(8) CHARACTER SET latin1 NOT NULL DEFAULT '', - `browserVersionOriginal` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '', - `browserMode` varchar(8) CHARACTER SET latin1 NOT NULL, - `engineName` varchar(60) CHARACTER SET latin1 NOT NULL, - `engineVersion` varchar(20) CHARACTER SET latin1 NOT NULL, - `osName` varchar(64) CHARACTER SET latin1 NOT NULL, - `osVersion` varchar(20) CHARACTER SET latin1 NOT NULL, - `deviceManufacturer` varchar(60) CHARACTER SET latin1 NOT NULL, - `deviceModel` varchar(64) CHARACTER SET latin1 NOT NULL, - `deviceWidth` int(11) NOT NULL DEFAULT '0', - `deviceHeight` int(11) NOT NULL DEFAULT '0', - `deviceType` varchar(16) CHARACTER SET latin1 NOT NULL DEFAULT '', - `deviceIdentified` int(11) NOT NULL DEFAULT '0', - `useragent` text CHARACTER SET latin1 NOT NULL, - `useragentHeader` text NOT NULL, - `useragentId` char(32) NOT NULL DEFAULT '', - `humanReadable` varchar(128) CHARACTER SET latin1 DEFAULT NULL, - `status` int(11) NOT NULL DEFAULT '0', - `camouflage` int(11) DEFAULT NULL, - `features` varchar(64) NOT NULL DEFAULT '', - `headers` text NOT NULL, - `fingerprint` varchar(32) NOT NULL DEFAULT '', - `points` text, - `results` text, - PRIMARY KEY (`uniqueid`), - UNIQUE KEY `uniqueid` (`uniqueid`), - KEY `timestamp` (`timestamp`) USING BTREE, - KEY `useragent` (`useragent`(20)) USING BTREE, - KEY `version` (`version`,`revision`) USING BTREE, - KEY `fingerprint` (`fingerprint`) USING BTREE, - KEY `useragentHeader` (`useragentHeader`(20)) USING BTREE, - KEY `useragentId` (`useragentId`) USING BTREE, - KEY `osName` (`osName`) USING BTREE, - KEY `osVersion` (`osVersion`) USING BTREE, - KEY `browserName` (`browserName`) USING BTREE, - KEY `deviceManufacturerModel` (`deviceManufacturer`,`deviceModel`) USING BTREE, - KEY `deviceModel` (`deviceModel`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `scores` ( - `variant` varchar(32) DEFAULT NULL, - `version` varchar(32) DEFAULT NULL, - `release` decimal(5,2) DEFAULT '0.00', - `fingerprint` char(32) DEFAULT NULL, - UNIQUE KEY `variant_version_release` (`variant`,`version`,`release`) USING BTREE, - KEY `fingerprint` (`fingerprint`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/backend/templates/fingerprint.html b/backend/templates/fingerprint.html deleted file mode 100644 index 5490b8ee..00000000 --- a/backend/templates/fingerprint.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
-
-

This browser scored score; ?> out of maximum; ?> points

-
-
-
- -
-
-
- -

Related

- -
-
-

Test results

- - - - - - - - - - - - - -
Browser
name; ?>
-
-
- -
-
- - -

Browsers

- -
- - - - - - - - - - - - - - - - - - -
VersionCountPercentage
%
-
- - - - -

Operating Systems

- -
- - - - - - - - - - - - - - - - - - -
VersionCountPercentage
%
-
- - - - -

Devices

- -
- - - - - - - - - - - - - - - - - - -
ModelCountPercentage
%
-
- -
-
- -
- -

- Please note that all data shown above are unconfirmed test results. They could be fake or - belong to a different browser than the one listed. -

-
-
-
- - -
-
- - - - - diff --git a/backend/templates/latest.html b/backend/templates/latest.html deleted file mode 100644 index 1738f87b..00000000 --- a/backend/templates/latest.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
- - -
-
- -

Latest results

- -
- - - - - - - - - - - - - - - - - - -
ScoreBrowserWhen
score; ?>humanReadable; ?>ago; ?> ago
-

- Please note that all data shown above are unconfirmed test results. They could be fake or - belong to a different browser than the one listed. -

- -
- - -
-
- - -
-
- - - - - diff --git a/backend/templates/results-other.html b/backend/templates/results-other.html deleted file mode 100644 index a1dc8318..00000000 --- a/backend/templates/results-other.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
- - -
- -
-

Gaming

- -
- -
-

Consoles

- - - - - - - - - - - - - - - - - -
ScoreDevice
score; ?> - nickname; ?> - details; ?>
-
- -
- -
- -
-

Portable

- - - - - - - - - - - - - - - - - -
ScoreDevice
score; ?> - nickname; ?> - details; ?>
-
- -
-
- -
- -
-

Television

- -
- -

Smart TVs

-
- - - - - - - - - - - - - - - - - -
ScoreDevice
score; ?> - nickname; ?> - details; ?>
-
- -
- -
- -
-

Set-top boxes

- - - - - - - - - - - - - - - - - -
ScoreDevice
score; ?> - nickname; ?> - details; ?>
-
- -
-
- -
- -
-

E-readers

- -
- -
-

E-paper readers

- - - - - - - - - - - - - - - - - -
ScoreDevice
score; ?> - nickname; ?> - details; ?>
-
- -
- -
-
-
- -
- -

About these scores

-
- The data above is compiled from automatically submitted test results. It is possible your results - may differ slightly due to external factors such as settings and which operating system is used. - If you believe the data above is incorrect, or if you think we are missing an important browser - or device, please open a bug report at Github. -
-
-
- - -
-
- - - - - diff --git a/backend/templates/results.html b/backend/templates/results.html deleted file mode 100644 index 38f79e97..00000000 --- a/backend/templates/results.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
- - -
- - -
-

Overview

-
- - - - - - - - - - - - - - - - - - - - -
 
'> - - '>' . $d[$r]->version . ' ' . $d[$r]->score . ''; - } - - if (is_string($d[$r])) { - echo "" . $d[$r] . ""; - } - } - ?>
-
-
- -
- - - -
-

Scores

- -
- -
- -
-

Current

- - - - - - - - - - - '> - - - - - - -
ScoreBrowser
score; ?> - nickname; ?> - details; ?>
-
- - - -
-

Upcoming

- - - - - - - - - - - '> - - - - - - -
ScoreBrowser
score; ?> - nickname; ?> - details; ?>
-
- - - -
-

Experimental

- - - - - - - - - - - '> - - - - - - -
ScoreBrowser
score; ?> - nickname; ?> - details; ?>
-
-
- -
- -
-

Older

- - - - - - - - - - - '> - - - - - - -
ScoreBrowser
score; ?> - nickname; ?> - details; ?>
-
- -
-
- - - - - -
- -
-
-

Timeline

- -
- -
- - -
-
- - -
- -

About these scores

-
- The data above is compiled from automatically submitted test results. It is possible your results - may differ slightly due to external factors such as settings and which operating system is used. - If you believe the data above is incorrect, or if you think we are missing an important browser - or device, please open a bug report at Github. -
-
-
- - -
-
- - - - - diff --git a/backend/templates/search.html b/backend/templates/search.html deleted file mode 100644 index 3783b221..00000000 --- a/backend/templates/search.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
- - -
-
-
- -
-
-
- - - -
- - - -
- -

Examples

-
-
-
deviceType:mobile osName:Windows
-
All mobile devices running Windows
- -
deviceManufacturer:Samsung -osName:Android
-
All non-Android devices created by Samsung
- -
osName:Android osVersion:4.4
-
All devices running Android 4.4
- -
browserName:Chrome osName:"Mac OS X"
-
Chrome running on OS X
- -
deviceModel:iPhone
-
All iPhones
- -
engineName:Gecko -browserName:Firefox
-
All Gecko based browser except for Firefox
- -
score:500+
-
All results with a score higher than or equal to 500
- -
-
-
- - -
-
- - - - - diff --git a/backend/templates/timeline.html b/backend/templates/timeline.html deleted file mode 100644 index cebaf23a..00000000 --- a/backend/templates/timeline.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
-
- - -

Timeline for

-
- - -
-
score; ?>
-

version : ''); ?>.html'>nickname; ?> »

- status != 'upcoming'): ?> - releasedate)): ?> -

Release date: releasedate)); ?>

- -

Release date: unknown

- - -

Not yet released

- -
- - changes) && count($item->changes)): ?> -
- - - -
- - -
- These results are collected from many thousands of visitors using all kinds of devices. - Excluded from this timeline are changes in video and audio codecs, because they are often - dependant on operating system and device hardware. -
-
-
- - -
-
- - - - - diff --git a/backend/templates/browser.html b/compare/browser/index.html similarity index 56% rename from backend/templates/browser.html rename to compare/browser/index.html index 69704552..f968834e 100644 --- a/backend/templates/browser.html +++ b/compare/browser/index.html @@ -2,46 +2,40 @@ HTML5test - How well does your browser support HTML5? - - - - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -49,9 +43,9 @@

HTML5test how well does your browser support HTML5?

- - - diff --git a/backend/templates/feature.html b/compare/feature/index.html similarity index 67% rename from backend/templates/feature.html rename to compare/feature/index.html index 59b4ef07..a3889592 100644 --- a/backend/templates/feature.html +++ b/compare/feature/index.html @@ -2,36 +2,31 @@ HTML5test - How well does your browser support HTML5? - - - - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -39,9 +34,9 @@

HTML5test how well does your browser support HTML5?

- - - diff --git a/composer.json b/composer.json deleted file mode 100644 index 0427180a..00000000 --- a/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "ramsey/uuid": "^3.4" - } -} diff --git a/css/main.css b/css/main.css index debb08e9..38e5d869 100644 --- a/css/main.css +++ b/css/main.css @@ -437,49 +437,11 @@ body.indexVisible > div#index button#indexbutton { margin-bottom: 0.8em; } -#cloudvps a { - position: absolute; - top: 0; - right: 0; - border-left: 1px solid #ccc; - - display: block; - background: url(/images/sponsors/cloudvps.png) no-repeat 10px top; - background-size: 59px 43px; - padding-top: 0px; - padding-left: 80px; - - text-decoration: none; - color: #04446d; - font-size: 90%; - min-height: 43px; -} -#cloudvps a b { - font-size: 110%; -} -@media only screen and (-webkit-min-device-pixel-ratio: 2) { - #cloudvps a { - background-image: url(/images/sponsors/cloudvps@2x.png); - background-size: 59px 43px; - } -} - @media (max-width: 680px) { .footer > div { padding-right: 0; padding-bottom: 60px; } - - #cloudvps a { - top: auto; - left: 0; - - border-left: none; - border-top: 1px solid #ccc; - padding-top: 12px; - padding-left: 70px; - background-position: left 12px; - } } @@ -1071,8 +1033,6 @@ body.indexVisible > div#index button#indexbutton { .button.website > span::before { content: ''; } .button.followme { background: #0092bf; color: #fff; } .button.followme > span::before { content: ''; } -.button.donate { background: #ffd500; color: #000; } -.button.donate > span::before { content: ''; } .button.developed { background: #ccc; color: #000; } .button.developed > span::before { content: ''; } .button.compare { background: #33af33; color: #fff; } @@ -1081,8 +1041,6 @@ body.indexVisible > div#index button#indexbutton { .button.save > span::before { content: '☁'; } .button.latest { background: #0092bf; color: #fff; } .button.latest > span::before { content: ''; } -.button.share { background: #ec6534; color: #fff; } -.button.share > span::before { content: ''; } .button.contact { background: #ec6534; color: #fff; } .button.contact > span::before { content: '☎'; } .button.schedule { background: #ec6534; color: #fff; } @@ -1414,40 +1372,6 @@ body.indexVisible > div#index button#indexbutton { } - -/******************************************** - * - * Your Browser: Share - */ - -.popupPanel.share { - width: 210px !important; - margin-top: 21px; -} -#share { - display: block; - height: 94px; - position: relative; - overflow: hidden; -} -#share #twitter { - position: absolute; - top: 15px; - left: 15px; -} -#share #facebook { - position: absolute; - top: 15px; - left: 82px; -} -#share #google { - position: absolute; - top: 15px; - left: 141px; -} - - - /******************************************** * * Your Browser: Action buttons @@ -1473,10 +1397,6 @@ body.indexVisible > div#index button#indexbutton { .wrapper .buttons > * { width: 100%; } - - .wrapper .buttons .donate { - display: none; - } } @@ -1734,6 +1654,38 @@ body.indexVisible > div#index button#indexbutton { padding-bottom: 8px; } +.resultsTable table tbody th .status::after { + font: 10px 'html5test'; +} +.resultsTable table tbody th .status.recommendation::after { + content: ' '; + color: #33af33; +} +.resultsTable table tbody th .status.stable::after { + content: ' '; + color: #33af33; +} +.resultsTable table tbody th .status.proposal::after { + content: ' '; + color: #88b038; +} +.resultsTable table tbody th .status.experimental::after { + content: ' '; + color: #ec6534; +} +.resultsTable table tbody th .status.controversial::after { + content: ' '; + color: #ec6534; +} +.resultsTable table tbody th .status.optional::after { + content: ' '; + color: #aaa; +} +.resultsTable table tbody th .status.rejected::after { + content: ' '; + color: #853333; +} + .resultsTable table tbody th code { font-size: 12px; } @@ -2104,63 +2056,6 @@ body.indexVisible > div#index button#indexbutton { } } - -/******************************************** - * - * Your Browser: Ads - */ - -#headerad { - position: absolute; - top: 0; - right: 0; - - width: 125px; - height: 125px; - background: #eee; - overflow: hidden; - padding: 10px; - border-bottom: 8px solid #d9d9d9; - border-left: 8px solid #d9d9d9; -} -#headerad div { - width: 125px; - height: 125px; - display: inline-block; -} - -#footerad { - margin-top: 30px; - overflow: hidden; - background: #eee; - padding: 10px; - text-align: center; -} -#footerad > div a, -#footerad > div iframe { - width: 125px; - height: 125px; - overflow: hidden; - margin: 0 5px; - display: inline-block; - float: none; - vertical-align: middle; -} - -@media (max-width: 680px) { - #headerad { - position: static; - border: none; - width: 100%; - padding: 10px 0; - text-align: center; - margin-bottom: 30px; - } -} - - - - .upgradeWarning { background: #ec6534; color: #fff; diff --git a/donate.html b/donate.html deleted file mode 100644 index 590d36ee..00000000 --- a/donate.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

HTML5test how well does your browser support HTML5?

- -
- -
-
-
- - -
-

Donate

- -

Help us create an even better HTML5 test

-
-

- We have big plans for HTML5 test. Our latest additions are a new server backend - that automatically collects the test results and creates some extensive reports based on the - collected data. But we have some more ideas for the future. -

-

- These additions do take a lot of time, so if you think HTML5 test is a great resource, consider - donating. -

-

- -

-
- - -

Advertising

-
-

- In order to pay for hosting and further development of the HTML5 test we allow a small number of ads - on two positions of the main page. We prefer ads that are related to HTML5 or web development. - Ads on the HTML5 test are exclusively sold by BuySellAds. -

-
- - -

Devices

-
-

- A lot of our data is crowd sourced, but in certain cases we need access to the actual browser running on - the actual device. For this purpose we have build a testing lab with not only new devices, but also - older devices for testing historic versions. -

-

- If you have a new or used device you want to donate to our lab, please contact me on - Github or Twitter. -

-
-
-
- - -
-
- - - - - \ No newline at end of file diff --git a/fonts/html5test.dev.svg b/fonts/html5test.dev.svg index 78a3197a..72265914 100644 --- a/fonts/html5test.dev.svg +++ b/fonts/html5test.dev.svg @@ -1,102 +1 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +This is a custom SVG font generated by IcoMoon. \ No newline at end of file diff --git a/fonts/html5test.svg b/fonts/html5test.svg index cffc2c3b..a90f1720 100644 --- a/fonts/html5test.svg +++ b/fonts/html5test.svg @@ -1,57 +1 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +Generated by IcoMoon \ No newline at end of file diff --git a/fonts/leaguegothic-condensed-italic-webfont.svg b/fonts/leaguegothic-condensed-italic-webfont.svg index e5c4293f..373adb33 100644 --- a/fonts/leaguegothic-condensed-italic-webfont.svg +++ b/fonts/leaguegothic-condensed-italic-webfont.svg @@ -1,224 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/leaguegothic-condensed-regular-webfont.svg b/fonts/leaguegothic-condensed-regular-webfont.svg index d17fcebe..b99c6d35 100644 --- a/fonts/leaguegothic-condensed-regular-webfont.svg +++ b/fonts/leaguegothic-condensed-regular-webfont.svg @@ -1,224 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/leaguegothic-italic-webfont.svg b/fonts/leaguegothic-italic-webfont.svg index c4c69b90..ef2c83aa 100644 --- a/fonts/leaguegothic-italic-webfont.svg +++ b/fonts/leaguegothic-italic-webfont.svg @@ -1,224 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/leaguegothic-regular-webfont.svg b/fonts/leaguegothic-regular-webfont.svg index 404a6943..dd686cc4 100644 --- a/fonts/leaguegothic-regular-webfont.svg +++ b/fonts/leaguegothic-regular-webfont.svg @@ -1,223 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/images/external/mdn.svg b/images/external/mdn.svg index 27e5ffcf..0142c435 100644 --- a/images/external/mdn.svg +++ b/images/external/mdn.svg @@ -1,124 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/images/external/ricg.svg b/images/external/ricg.svg index 83e0b103..93bfab82 100644 --- a/images/external/ricg.svg +++ b/images/external/ricg.svg @@ -1,120 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/images/external/whatwg.svg b/images/external/whatwg.svg index 38828189..8ac0c77f 100644 --- a/images/external/whatwg.svg +++ b/images/external/whatwg.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/images/html5test.svg b/images/html5test.svg new file mode 100644 index 00000000..f1bedd01 --- /dev/null +++ b/images/html5test.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/apple-touch-icon-114x114.png b/images/icons/apple-touch-icon-114x114.png index 8804b5fa..a6a160c1 100644 Binary files a/images/icons/apple-touch-icon-114x114.png and b/images/icons/apple-touch-icon-114x114.png differ diff --git a/images/icons/apple-touch-icon-120x120.png b/images/icons/apple-touch-icon-120x120.png index 77668078..1acd5ab3 100644 Binary files a/images/icons/apple-touch-icon-120x120.png and b/images/icons/apple-touch-icon-120x120.png differ diff --git a/images/icons/apple-touch-icon-144x144.png b/images/icons/apple-touch-icon-144x144.png index 29db14cb..43fd9dcc 100644 Binary files a/images/icons/apple-touch-icon-144x144.png and b/images/icons/apple-touch-icon-144x144.png differ diff --git a/images/icons/apple-touch-icon-152x152.png b/images/icons/apple-touch-icon-152x152.png index 6358d5f6..29304fa1 100644 Binary files a/images/icons/apple-touch-icon-152x152.png and b/images/icons/apple-touch-icon-152x152.png differ diff --git a/images/icons/apple-touch-icon-57x57.png b/images/icons/apple-touch-icon-57x57.png index 95fa1a00..cbfbccd2 100644 Binary files a/images/icons/apple-touch-icon-57x57.png and b/images/icons/apple-touch-icon-57x57.png differ diff --git a/images/icons/apple-touch-icon-60x60.png b/images/icons/apple-touch-icon-60x60.png index 2c22cfdf..d9b8f721 100644 Binary files a/images/icons/apple-touch-icon-60x60.png and b/images/icons/apple-touch-icon-60x60.png differ diff --git a/images/icons/apple-touch-icon-72x72.png b/images/icons/apple-touch-icon-72x72.png index 8d23976a..c0f06098 100644 Binary files a/images/icons/apple-touch-icon-72x72.png and b/images/icons/apple-touch-icon-72x72.png differ diff --git a/images/icons/apple-touch-icon-76x76.png b/images/icons/apple-touch-icon-76x76.png index 0e5fea3f..047c9f47 100644 Binary files a/images/icons/apple-touch-icon-76x76.png and b/images/icons/apple-touch-icon-76x76.png differ diff --git a/images/icons/apple-touch-icon-precomposed.png b/images/icons/apple-touch-icon-precomposed.png index 32a3150e..2d710539 100644 Binary files a/images/icons/apple-touch-icon-precomposed.png and b/images/icons/apple-touch-icon-precomposed.png differ diff --git a/images/icons/apple-touch-icon.png b/images/icons/apple-touch-icon.png index 6358d5f6..29304fa1 100644 Binary files a/images/icons/apple-touch-icon.png and b/images/icons/apple-touch-icon.png differ diff --git a/images/icons/favicon-160x160.png b/images/icons/favicon-160x160.png index 28a17674..fddbe861 100644 Binary files a/images/icons/favicon-160x160.png and b/images/icons/favicon-160x160.png differ diff --git a/images/icons/favicon-16x16.png b/images/icons/favicon-16x16.png index 25ebafaa..b977dbd8 100644 Binary files a/images/icons/favicon-16x16.png and b/images/icons/favicon-16x16.png differ diff --git a/images/icons/favicon-196x196.png b/images/icons/favicon-196x196.png index 54df8c46..9d2305e6 100644 Binary files a/images/icons/favicon-196x196.png and b/images/icons/favicon-196x196.png differ diff --git a/images/icons/favicon-96x96.png b/images/icons/favicon-96x96.png index 361f59a5..f92ce4ed 100644 Binary files a/images/icons/favicon-96x96.png and b/images/icons/favicon-96x96.png differ diff --git a/images/icons/mstile-144x144.png b/images/icons/mstile-144x144.png index e5de1d92..8f021ffa 100644 Binary files a/images/icons/mstile-144x144.png and b/images/icons/mstile-144x144.png differ diff --git a/images/icons/mstile-150x150.png b/images/icons/mstile-150x150.png index 124c6df1..e2d2e1f6 100644 Binary files a/images/icons/mstile-150x150.png and b/images/icons/mstile-150x150.png differ diff --git a/images/icons/mstile-310x150.png b/images/icons/mstile-310x150.png index ad63183a..2fbbd454 100644 Binary files a/images/icons/mstile-310x150.png and b/images/icons/mstile-310x150.png differ diff --git a/images/icons/mstile-310x310.png b/images/icons/mstile-310x310.png index aeeffe1b..8fcdf14a 100644 Binary files a/images/icons/mstile-310x310.png and b/images/icons/mstile-310x310.png differ diff --git a/images/icons/mstile-70x70.png b/images/icons/mstile-70x70.png index ea264cf4..e30d8935 100644 Binary files a/images/icons/mstile-70x70.png and b/images/icons/mstile-70x70.png differ diff --git a/images/sponsors/blackberry.svg b/images/sponsors/blackberry.svg index e7eb110c..9b574251 100644 --- a/images/sponsors/blackberry.svg +++ b/images/sponsors/blackberry.svg @@ -1,25 +1 @@ - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +image/svg+xml \ No newline at end of file diff --git a/images/sponsors/google.svg b/images/sponsors/google.svg index 1e82a979..2c34e9fa 100644 --- a/images/sponsors/google.svg +++ b/images/sponsors/google.svg @@ -1,12 +1 @@ - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/images/sponsors/nokia.svg b/images/sponsors/nokia.svg index eeeec3ee..6d0bfc5e 100644 --- a/images/sponsors/nokia.svg +++ b/images/sponsors/nokia.svg @@ -1,10 +1 @@ - - - Nokia - - - - - - - \ No newline at end of file +Nokia \ No newline at end of file diff --git a/images/thumbnail.jpg b/images/thumbnail.jpg index 6d3fbd2c..90736b1a 100644 Binary files a/images/thumbnail.jpg and b/images/thumbnail.jpg differ diff --git a/index.html b/index.html index 049f5b25..6929d67f 100644 --- a/index.html +++ b/index.html @@ -2,51 +2,40 @@ HTML5test - How well does your browser support HTML5? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - -

HTML5test how well does your browser support HTML5?