$row->{$_} //= undef for @$verlist; # ensure stable keys during iteration
while (my ($version, $usage) = each %$row) {
next if defined $supported{$version};
- $_ = paddedver($_) for $version;
- my $next = first { paddedver($_) ge $version } @$verlist; # or next
+ my $next = first { paddedver($_) ge paddedver($version) } @$verlist
+ or warn("No fallback found for $browser v$version; $usage% ignored"), next;
$row->{$next} += $usage;
+ $row->{$version} = 0; # balance browser total
}
}
}
print "\n<tr>";
print '<td>' x 3;
for my $browser (@browsers) {
- printf('<td title="%s"%s>%s',
- join(' ',
- sprintf('%.1f%%', $canihas->{$browser}->{$_} * $usagepct),
- "version $_",
- ),
- (map {
- defined $_ && !$_ && ' class="ex"'
- } $caniuse->{agents}->{$browser}->{verrelease}->{$_}),
- showversions($_),
- ) for @{ $versions{$browser} };
+ for my $_ (@{ $versions{$browser} }) {
+ my $release = $caniuse->{agents}->{$browser}->{verrelease}->{$_};
+ my $future = defined $release;
+ printf('<td title="%s"%s>%s',
+ join(' ',
+ sprintf('%.1f%%', $canihas->{$browser}->{$_} * $usagepct),
+ $future ? 'development' : (),
+ "version $_",
+ ),
+ $future && ' class="ex"',
+ showversions($_),
+ );
+ }
}
print '<td>' x 1;
say '</thead>';
} $row->{title};
print '<div class=aside>';
s/\.?$/./, print "<p>$_</p>" for map { ref $_ ? @$_ : $_ || () }
- Entity($row->{description}), formathtml($row->{notes}); # sic
+ Entity($row->{description}),
+ map { s/\s*\n/\n<br>/g; $_ } $row->{notes};
printf 'Resources: %s.', join(', ', map {
sprintf '<a href="%s">%s</a>', EscapeHTML($_->{url}), $_->{title}
} @$_) for grep { @$_ } $row->{links} // ();
say '</tbody>';
say '</table>';
-sub formathtml {
- my $ref = defined wantarray ? [@_] : \@_;
- for (@$ref) {
- s/& (?!\w)/&/gx;
- s/< \s/</gx;
- s/\n\K\n/<br>/g;
- }
- return @$ref;
-}
-
sub paddedver {
# normalised version number comparable as string (cmp)
shift =~ /(?:.*-|^)(\d*)(.*)/;
sub showversions {
my @span = ($_[0], @_>1 ? $_[-1] : ());
+ s/-.*// for $span[0];
for (@span) {
s/^\./0./;
s/x$/.*/;
- s/-.*//;
+ s/.*-//;
}
return join('‒', @span);
}