<(common.inc.plp)><:
use List::Util qw(sum max first);
-no if $] >= 5.018, warnings => 'experimental::smartmatch';
Html({
title => 'browser compatibility cheat sheet',
- version => '1.5',
+ version => '1.6',
description => [
"Compatibility table of new web features (HTML5, CSS3, SVG, Javascript)",
"comparing support and usage share for all popular browser versions.",
html html5 css css3 svg javascript js dom mobile
ie internet explorer firefox chrome safari webkit opera
'],
- stylesheet => [qw'circus dark mono red light'],
data => ['data/browser/support.inc.pl'],
});
say "<h1>Browser compatibility</h1>\n";
-my $caniuse = do 'data/browser/support.inc.pl' or die $@ || $!;
+my $caniuse = Data('data/browser/support');
my %CSTATS = (
'n' => 'l1',
join(' ',
'with prefix',
map {"-$_-"}
- ($caniuse->{agents}->{$_[0]}->{prefix_exceptions} // {})->{$_[1]}
+ $caniuse->{agents}->{$_[0]}->{version_list}->{$_[1]}->{prefix}
// $caniuse->{agents}->{$_[0]}->{prefix} // (),
);
},
);
my %versions;
while (my ($browser, $row) = each %{ $caniuse->{agents} }) {
- $versions{$browser} = [
- sort { paddedver($a) cmp paddedver($b) } grep { defined }
- @{ $row->{versions} }
- ];
+ $versions{$browser} = [@{ $row->{versions} }];
}
my $ref = showlink('Can I use', 'https://caniuse.com/');
my ($canihas, $usage);
my $minusage = $get{threshold} // 1;
-given ($get{usage} // 'wm') {
- when (!$_) {
- # none
- }
- when (!m{ \A [a-z]\w+ (?:/\d[\d-]*\d)? \z }x) {
+for ($get{usage} // 'wm') {
+ $_ or next; # none
+ unless (m{ \A [a-z]\w+ (?:/\d[\d-]*\d)? \z }x) {
Alert([
'Invalid browser usage data request',
'Identifier must be alphanumeric name or <q>0</q>.',
]);
+ next;
}
- $canihas = do "data/browser/usage-$_.inc.pl" or do {
- Alert('Browser usage data not found', $@ || $!);
- break;
+
+ $canihas = eval { Data("data/browser/usage-$_") } or do {
+ Alert('Browser usage data not found', ref $@ ? @{$@} : $@);
+ next;
};
$usage = $_;
my $ref = $canihas->{-title} || 'unknown';
sprintf('%.1f%%', sum(@{ $canihas->{$browser} }{ @{$span} }) * $usagepct),
'version ' . showversions(@{$span}, undef),
(map {
- $_ ? () : '(development)'
+ $_ ? sprintf('(released %d)', $_/3600/24/365.25 + 1970) : '(development)'
} $caniuse->{agents}->{$browser}->{version_list}->{$lastver}->{release_date}),
),
!defined $lastver && ' class="ex"',
s/(?<= [^.\n]) $/./gmx; # consistently end each line by a period
Entity($_);
s{ ` ([^`]*) ` }{<code>$1</code>}gx;
+ s{ \(\K (?: \Qhttps://caniuse.com\E )? (?: /? \#feat= | / ) }{#}gx;
s{ \[ ([^]]*) \] \( ([^)]*) \) }{<a href="$2">$1</a>}gx;
}
return @html;
// $prev # inherit from predecessor
|| 'u' # unsure
);
- if (defined $prev and not $prev ~~ $compare) {
+ if (defined $prev and not (defined $compare and $prev eq $compare)) {
# different columns
my @vercover = (map { @{$_} } @span); # accumulated conforming versions
for ($ver ? @{$ver} : ()) {
# normalised version number comparable as string (cmp)
$_[0] =~ m/(?:.*-|^)(\d*)(.*)/;
# matched (major)(.minor) of last value in range (a-B)
- return sprintf('%02d', length $1 ? $1 : 99) . $2;
+ return sprintf('%03d', length $1 ? $1 : 999) . $2;
}
sub showversions {