- unless (!defined $prev
- or ref $data eq 'HASH' && $data->{$prev} ~~ $data->{$ver}) {
- my $usage = sum(map { $canihas->{$browser}->{$_} } @span);
- printf '<td class="%s" colspan="%d" title="%s">%s',
+ 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
+ || 'u' # unsure
+ );
+ unless (!defined $prev or $prev ~~ $compare) {
+ my $usage = sum(@{ $canihas->{$browser} }{ map { @{$_} } @span });
+
+ # strip #\d note references from support class
+ my @notes;
+ push @notes, $feature->{notes_by_num}->{$1}
+ while $prev =~ s/\h \# (\d+) \b//x;
+
+ # prepare version hover details
+ my $title = sprintf('%.1f%% %s', $usage * $usagepct, join(', ',
+ map { ref $_ eq 'CODE' ? $_->($browser, $span[0]->[0]) : $_ }
+ map { $DSTATS{$_} // () }
+ map { split / /, $_ }
+ $prev
+ ));
+ $title .= "\n".EscapeHTML($_) for @notes;
+
+ printf('<td class="%s" colspan="%d" title="%s">%s',