X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/e6123313e3d9fe59ae9334aa4324b42d62f6a0d8..49f032c3a1a5d2feb1215ff2f437ab3b82ca4beb:/browser.plp
diff --git a/browser.plp b/browser.plp
index bd6d8ab..04599d0 100644
--- a/browser.plp
+++ b/browser.plp
@@ -5,23 +5,23 @@ use List::Util qw(sum max first);
Html({
title => 'browser compatibility cheat sheet',
- version => 'v1.0',
+ version => 'v1.1',
description => [
"Compatibility table of new web features (HTML5, CSS3, SVG, Javascript)",
"comparing support and usage share for all popular browser versions.",
],
keywords => [qw'
- web browser support compatibility usage available feature
+ web browser support compatibility usage matrix available feature
html html5 css css3 svg javascript js dom mobile
ie internet explorer firefox chrome safari webkit opera
'],
stylesheet => [qw'circus dark mono red light'],
- data => ['browser-support.inc.pl'],
+ data => ['data/browser/support.inc.pl'],
});
say "
Browser compatibility
\n";
-my $caniuse = do 'browser-support.inc.pl' or die $! || $@;
+my $caniuse = do 'data/browser/support.inc.pl' or die $! || $@;
$_->{verrelease} = {
# mark last three (future) versions as unreleased, ensure current isn't
map {
@@ -63,12 +63,13 @@ my %DSTATS = (
);
my %CSTATUS = (
unoff => 'l1', # unofficial
- wd => 'l3', # draft
- cr => 'l4', # candidate
- pr => 'l4', # proposed
+ wd => 'l2', # draft
+ cr => 'l3', # candidate
+ pr => 'l3', # proposed
rec => 'l5', # recommendation
- other => 'l2', # non-w3
- ietf => 'l5', # standard
+ ls => 'l4', # whatwg
+ ietf => 'l0', # standard
+ other => 'l0', # non-w3
);
my %versions;
if (my ($somerow) = values %{ $caniuse->{data} }) {
@@ -81,16 +82,16 @@ print <<'';
Alternate rendition of Fyrd's when can I use... page
my ($canihas, $usage);
-my $minusage = $get{threshold} // .5;
+my $minusage = $get{threshold} // .7;
given ($get{usage} // 'wm') {
when (!$_) {
# none
}
- when (!/^[a-z][\w-]+$/) {
+ when (!m{ \A [a-z]\w+ (?:/\d[\d-]*\d)? \z }x) {
printf "
Invalid browser usage data request: %s",
'identifier must be alphanumeric name or 0
';
}
- $canihas = do "browser-usage-$_.inc.pl" or do {
+ $canihas = do "data/browser/usage-$_.inc.pl" or do {
printf "
Browser usage data not found: %s", $! || $@;
break;
};
@@ -158,6 +159,7 @@ if ($usage) { # first() does not work inside given >:(
}
else {
# order browser columns by name grouped by engine
+ @{$_} = map { [$_] } @{$_} for values %versions;
@browsers = sort {
$caniuse->{agents}->{$b}->{prefix} cmp
$caniuse->{agents}->{$a}->{prefix}
@@ -198,7 +200,7 @@ say '
';
my $header = join('',
'',
- 'feature',
+ ' | feature',
(map {
my $name = $caniuse->{agents}->{$_}->{browser};
sprintf(' | %s',
@@ -211,17 +213,16 @@ my $header = join('',
$name,
),
do {
- length $name < 3 + @{ $versions{$_} }*2 ? $name
+ length $name <= (3 * @{ $versions{$_} }) ? $name
: $caniuse->{agents}->{$_}->{abbr};
},
)
} @browsers),
- ' | %',
+ ' | %',
);
print '', $header;
# preceding row without any colspan to work around gecko bug
print "\n";
-print '' x 3;
for my $browser (@browsers) {
for (@{ $versions{$browser} }) {
my $lastver = $_->[-1];
@@ -238,9 +239,21 @@ for my $browser (@browsers) {
);
}
}
-print ' | ' x 1;
say ' | ';
-say ' |
', $header, '';
+say '', $header;
+{
+ # prefix indicates browser family; count adjacent families
+ my (@families, %familycount);
+ for my $browser (@browsers) {
+ my $family = $caniuse->{agents}->{$browser}->{prefix};
+ push @families, $family unless $familycount{$family};
+ $familycount{$family} += @{ $versions{$browser} };
+ }
+
+ print "\n", '';
+ printf '%s', $familycount{$_}, $_ for @families;
+}
+say ' |
';
sub featurescore {
# relative amount of support for given feature