description => [
"Compatibility table of new web features (HTML5, CSS3, SVG, Javascript)",
"comparing support and usage share for all popular browser versions.",
description => [
"Compatibility table of new web features (HTML5, CSS3, SVG, Javascript)",
"comparing support and usage share for all popular browser versions.",
- (map "-$_-", $caniuse->{agents}->{$_[0]}->{prefix} // ()),
+ map {"-$_-"}
+ ($caniuse->{agents}->{$_[0]}->{prefix_exceptions} // {})->{$_[1]}
+ // $caniuse->{agents}->{$_[0]}->{prefix} // (),
a => .5, 'a x' => .5, 'a d' => .1,
j => .2, 'p j' => .2, 'n d' => .2, 'n x d' => .2,
p => .2, 'p p' => .2, 'p d' => .1,
a => .5, 'a x' => .5, 'a d' => .1,
j => .2, 'p j' => .2, 'n d' => .2, 'n x d' => .2,
p => .2, 'p p' => .2, 'p d' => .1,
-if (my ($somerow) = values %{ $caniuse->{data} }) {
- while (my ($browser, $row) = each %{ $somerow->{stats} }) {
- $versions{$browser} = [ sort { paddedver($a) cmp paddedver($b) } keys %$row ];
- }
+while (my ($browser, $row) = each %{ $caniuse->{agents} }) {
+ $versions{$browser} = [
+ sort { paddedver($a) cmp paddedver($b) } grep { defined }
+ @{ $row->{versions} }
+ ];
- printf "<p>Invalid browser usage data request: <em>%s</em>",
- 'identifier must be alphanumeric name or <q>0</q>';
+ Alert([
+ 'Invalid browser usage data request',
+ 'Identifier must be alphanumeric name or <q>0</q>.',
+ ]);
for $canihas->{-site} || $canihas->{-source} || ();
$ref .= " $_" for $canihas->{-date} || ();
print "\nwith $ref browser usage statistics";
for $canihas->{-site} || $canihas->{-source} || ();
$ref .= " $_" for $canihas->{-date} || ();
print "\nwith $ref browser usage statistics";
my $usagepct = 1; # score multiplier for 0..100 result
# normalise usage percentage to only include shown browsers
$usagepct = 100.01 / featurescore({ # yes for every possible version
map { $_ => { map {$_ => 'y'} map { @{$_} } @{$versions{$_}} } } keys %versions
});
my $usagepct = 1; # score multiplier for 0..100 result
# normalise usage percentage to only include shown browsers
$usagepct = 100.01 / featurescore({ # yes for every possible version
map { $_ => { map {$_ => 'y'} map { @{$_} } @{$versions{$_}} } } keys %versions
});
if ($canihas) {
while (my ($browser, $versions) = each %$row) {
ref $versions eq 'HASH' or next;
if ($canihas) {
while (my ($browser, $versions) = each %$row) {
ref $versions eq 'HASH' or next;
- while (my ($version, $_) = each %$versions) {
- $rank += ($canihas->{$browser}->{$version} || .001) * $PSTATS{$_};
+ while (my ($version, $status) = each %$versions) {
+ $status =~ s/\h\#\d+//g;
+ $rank += ($canihas->{$browser}->{$version} || .001) * $PSTATS{$status};
say '</p>';
}
printf 'Resources: %s.', join(', ', map {
say '</p>';
}
printf 'Resources: %s.', join(', ', map {
} @$_) for grep { @$_ } $row->{links} // ();
printf '<br>Parent feature: %s.', join(', ', map {
} @$_) for grep { @$_ } $row->{links} // ();
printf '<br>Parent feature: %s.', join(', ', map {
printf '<td title="%s" class="l %s">%s',
$caniuse->{statuses}->{$_}, $CSTATUS{$_} // '', $cell;
}
printf '<td title="%s" class="l %s">%s',
$caniuse->{statuses}->{$_}, $CSTATUS{$_} // '', $cell;
}
# prepare version hover details
my $title = sprintf('%.1f%% %s', $usage * $usagepct, join(', ',
# prepare version hover details
my $title = sprintf('%.1f%% %s', $usage * $usagepct, join(', ',
sprintf('p%01d', $usage * ($usagepct - .0001) / 10),
sprintf('p%02d', $usage * ($usagepct - .0001)),
),
sprintf('p%01d', $usage * ($usagepct - .0001) / 10),
sprintf('p%02d', $usage * ($usagepct - .0001)),
),
} keys %{ $caniuse->{data} }) {
$caniuse->{data}->{$id}->{stats} or next; # skip metadata [summary]
printf '<tr id="%s">', $id;
} keys %{ $caniuse->{data} }) {
$caniuse->{data}->{$id}->{stats} or next; # skip metadata [summary]
printf '<tr id="%s">', $id;