<(common.inc.plp)><:
use 5.010;
+use utf8;
use List::Util qw(sum max);
Html({
description =>
"caniuse.",
keywords => [qw'html css browser feature'],
- stylesheet => [qw'light dark circus mono red'],
- data => ['caniuse.js'],
+ stylesheet => [qw'circus dark mono red light'],
+ data => ['browser-support.inc.pl'],
});
:>
browser usage statistics.</p>
<:
-use JSON;
-use File::Slurp 'read_file';
-my $source = read_file('caniuse.js');
-for ($source) { # cleanup
- # convert seperate variables to hash keys
- s/\A/{/;
- s/^caniuse\.(\w+) = /"$1":/gm;
- s/;$/,/gm;
- s/,\s*\Z/\n}/;
- # fractions not supported by barekey
- s/(?<=[,{]) (\d*\.\d) (?=:')/"$1"/gx;
- # escapes not supported in singlequote
- s{'((?:[^\\']+|\\.)*)'}{
- my $_ = $1;
- s/"/\\"/g;
- s/\\'/'/g;
- qq("$_");
- }ge;
-}
-my $caniuse = from_json($source, {
-# allow_singlequote => 1,
- allow_barekey => 1,
-});
+my $caniuse = do 'browser-support.inc.pl' or die $! || $@;
my %CSTATS = (
- n => 'di-b',
- y => 'di-aa',
- a => 'di-d',
- 'a x' => 'di-d',
- j => 'di-prop',
- p => 'di-prop',
- 'p j' => 'di-prop',
- 'y x' => 'di-a',
+ 'n' => 'l0',
+ 'y' => 'l6',
+ 'y x' => 'l5',
+ 'a' => 'l4',
+ 'a x' => 'l4',
+ 'p j' => 'l2',
+ 'j' => 'l2',
+ 'p' => 'l2',
+ 'u' => 'l9',
);
my %CSTATUS = (
- unoff => 'di-rare', # unofficial
- wd => 'di-b', # draft
- pr => 'di-prop', # proposed
- cr => 'di-d', # candidate
- rec => 'di-a', # recommendation
- ietf => 'di-aa', # standard
+ unoff => 'l0', # unofficial
+ wd => 'l4', # draft
+ cr => 'l5', # candidate
+ pr => 'l5', # proposed
+ rec => 'l6', # recommendation
+ ietf => 'l6', # standard
);
my @browsers = qw(trident gecko webkit_saf webkit_chr presto);
my %versions;
printf '<colgroup span="%d">', scalar @{ $versions{$_} } for @browsers;
print "\n";
-print '<thead><tr>';
-print '<th colspan="3">feature';
-printf('<th colspan="%d">%s',
- scalar @{ $versions{$_} },
- do {
- my $name = $caniuse->{agents}->{$_}->{browser};
- length $name < 16 ? $name : $caniuse->{agents}->{$_}->{abbr};
- },
-) for @browsers;
-print '<th>%';
+my $header = join('',
+ '<tr>',
+ '<th colspan="3">feature',
+ (map {
+ sprintf('<th colspan="%d" title="%.1f%%">%s',
+ scalar @{ $versions{$_} },
+ sum(values %{ $canihas->{$_} }),
+ do {
+ my $name = $caniuse->{agents}->{$_}->{browser};
+ length $name < 16 ? $name : $caniuse->{agents}->{$_}->{abbr};
+ },
+ )
+ } @browsers),
+ '<th>%',
+);
+print '<thead>', $header;
# preceding row without any colspan to work around gecko bug
print "\n<tr>";
print '<td>' x 3;
my $usage = sum(map { $canihas->{$browser}->{$_} } @span);
printf '<td class="%s" colspan="%d" title="%.1f%%">%s',
join(' ',
- $CSTATS{ $data->{$browser}->{$prev} },
- sprintf('opacity%.0f', $usage / $scorediv),
+ X => $CSTATS{ $data->{$browser}->{$prev} },
+ !$usage ? ('p0') : ('p',
+ sprintf('p%01d', $usage / 10),
+ sprintf('p%02d', $usage),
+ ),
+ sprintf('pp%02d', $usage / $scorediv),
),
scalar @span,
$usage,
});
print '<td>', int featurescore($caniuse->{data}->{$id}->{stats}) / $maxscore * 100;
}
+print '<tfoot>', $header;
print '</table>';
sub paddedver {
<div class="legend">
<table class="glyphs"><tr>
- <td class="X di-aa">supported
- <td class="X di-a">prefixed
- <td class="X di-d">partial
- <td class="X di-prop">external (js/plugin)
- <td class="X di-b">missing
+ <td class="X l6">supported
+ <td class="X l5">prefixed
+ <td class="X l4">partial
+ <td class="X l2">external (js/plugin)
+ <td class="X l0">missing
</table>
+ <div>
+ Usage percentage:
+ <span class=" p0">0</span> -
+ <span class="p p0 p00">.01</span> -
+ <span class="p p0 p05">1-9</span> -
+ <span class="p p1">10</span> -
+ <span class="p p2">20</span> -
+ <span class="p p5">majority</span>
+ </div>
+
<div class="right">
<ul class="legend legend-set">
<li>default <strong>style</strong> is