X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/36e1441fd2e594b24504b85e214b19616d9f1d4f..a58b7fef8448841cc81a3b956819cccb26452743:/browser.plp
diff --git a/browser.plp b/browser.plp
index 49c3ec2..a3a984d 100644
--- a/browser.plp
+++ b/browser.plp
@@ -43,7 +43,7 @@ my $caniuse = from_json($source, {
my %CSTATS = (
n => 'di-b',
- y => 'di-a',
+ y => 'di-aa',
a => 'di-d',
j => 'di-prop',
p => 'di-prop',
@@ -55,7 +55,7 @@ my %CSTATUS = (
pr => 'di-prop', # proposed
cr => 'di-d', # candidate
rec => 'di-a', # recommendation
- ietf => 'di-a', # standard
+ ietf => 'di-aa', # standard
);
my @browsers = qw(trident gecko webkit_saf presto);
my %versions;
@@ -80,7 +80,33 @@ print '
';
print '' x $_ for 2, map { scalar @{ $versions{$_} } } @browsers;
print "\n";
-for my $id (keys %{ $caniuse->{data} }) {
+sub featurerank {
+ # relative amount of support for given feature
+ state $statspts = { y=>10, 'y x'=>9, a=>5, j=>2, p=>1 };
+ my ($id) = @_;
+ my $rank = 0;
+ if (my $row = $caniuse->{data}->{$id}->{stats}) {
+ while (my ($browser, $vercols) = each %versions) {
+ my $div = 0; # multiplier exponent (decreased to lower value)
+ my @vers = map { $row->{$browser}->{$_} } @$vercols;
+ if (my $current = $caniuse->{agents}->{$browser}->{versions}->[-3]) {
+ my @future; # find upcoming releases (after current)
+ for (reverse @$vercols) {
+ last if $_ eq $current;
+ push @future, pop @vers;
+ $_ eq 'u' and $_ = $vers[-1] for $future[-1]; # inherit latest value if unknown
+ }
+ splice @vers, -1, 0, @future; # move ahead to decrease precedence
+ }
+ $rank += $statspts->{$_} * 2**($div--) for reverse @vers;
+ }
+ }
+ return $rank;
+}
+
+for my $id (sort {
+ featurerank($b) <=> featurerank($a)
+} keys %{ $caniuse->{data} }) {
my $row = $caniuse->{data}->{$id};
my $data = $row->{stats} or next; # skip metadata [summary]
printf ' |
', $id;
@@ -102,6 +128,7 @@ for my $id (keys %{ $caniuse->{data} }) {
$prev = $ver;
}
}
+ print '', int featurerank($id);
}
print '';
@@ -116,10 +143,11 @@ sub paddedver {
- yes
- | almost
- | plugin or js
- | no
+ | supported
+ | prefixed
+ | partial
+ | external (js/plugin)
+ | missing
|
|