X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/dddba283566021f3a54add9ce599e3fed9d0cd27..1c575b2b48f7b4769d1ce38d81dc200a4b999ef6:/browser.plp diff --git a/browser.plp b/browser.plp index 2fe7500..b6b501e 100644 --- a/browser.plp +++ b/browser.plp @@ -279,9 +279,12 @@ sub featurescore { if ($canihas) { while (my ($browser, $versions) = each %$row) { ref $versions eq 'HASH' or next; - while (my ($version, $status) = each %$versions) { + my $prev; + for my $version (@{ $caniuse->{agents}->{$browser}->{versions} }) { + my $status = $versions->{$version} // $prev; $status =~ s/\h\#\d+//g; $rank += ($canihas->{$browser}->{$version} || .001) * $PSTATS{$status}; + $prev = $status; } } return $rank; @@ -392,15 +395,15 @@ sub saybrowsercols { my $compare = ( !defined $ver ? undef : # last column if nameless ref $data ne 'HASH' ? '' : # unclassified if no support hash - $data->{ $ver->[-1] } // $prev # known or inherit from predecessor - // (grep { defined } @{$data}{ map { $_->[0] } @{ $versions{$browser} } })[0] - ~~ 'n' && 'n' # first known version is unsupported + (first { defined } @{$data}{ reverse @{$ver} }) # last known version + // $prev # inherit from predecessor || 'u' # unsure ); - unless (!defined $prev or $prev ~~ $compare) { - my @vercover = (map { @{$_} } @span); + if (defined $prev and not $prev ~~ $compare) { + # different columns + my @vercover = (map { @{$_} } @span); # accumulated conforming versions for ($ver ? @{$ver} : ()) { - $data->{$_} eq $data->{$vercover[-1]} or last; + last if defined $data->{$_}; # until different push @vercover, $_; # matches from next span start } my $usage = sum(@{ $canihas->{$browser} }{@vercover}); @@ -438,7 +441,11 @@ sub saybrowsercols { undef $prev; @span = (); } - push @span, $ver && [ grep { $data->{ $_ } eq $data->{ $ver->[-1] } } @{$ver} ]; + if ($ver) { + my $startversion = first { defined $data->{ $ver->[$_] } } + reverse 0 .. $#{$ver}; # compare index + push @span, [ @{$ver}[ $startversion .. $#{$ver} ] ]; + } $prev = $compare; } }