X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/f1ad2d8f64690870d6bb4977b04202083797d6a2..1c575b2b48f7b4769d1ce38d81dc200a4b999ef6:/browser.plp diff --git a/browser.plp b/browser.plp index b22637c..b6b501e 100644 --- a/browser.plp +++ b/browser.plp @@ -4,7 +4,7 @@ no if $] >= 5.018, warnings => 'experimental::smartmatch'; Html({ title => 'browser compatibility cheat sheet', - version => '1.4', + version => '1.5', description => [ "Compatibility table of new web features (HTML5, CSS3, SVG, Javascript)", "comparing support and usage share for all popular browser versions.", @@ -36,11 +36,14 @@ my %CSTATS = ( 'p d' => 'l2', 'a d' => 'l2', 'y' => 'l5', + 'y #' => 'l4', 'y x' => 'l5 ex', + 'y x #' => 'l4 ex', 'a' => 'l3', 'a x' => 'l3 ex', 'p' => 'l2', 'u' => 'l0', + 'u d' => 'l2', ); my %DSTATS = ( u => 'unknown', @@ -83,8 +86,11 @@ while (my ($browser, $row) = each %{ $caniuse->{agents} }) { ]; } -print <<''; -

Alternate rendition of Fyrd's when can I use... page +my $ref = showlink('Can I use', 'https://caniuse.com/'); +$ref =~ s/(?=>)/ title="updated $_"/ + for map { s/[\sT].*//r } $caniuse->{-date} || (); +$ref = "Fyrd's $ref page"; +say '

Alternate rendition of '.$ref; my ($canihas, $usage); my $minusage = $get{threshold} // 1; @@ -106,7 +112,7 @@ given ($get{usage} // 'wm') { my $ref = $canihas->{-title} || 'unknown'; $ref = showlink($ref, $_) for $canihas->{-site} || $canihas->{-source} || (); - $ref .= " $_" for $canihas->{-date} || (); + $ref =~ s/(?=>)/ title="updated $_"/ for $canihas->{-date} || (); print "\nwith $ref browser usage statistics"; } @@ -195,7 +201,10 @@ $canihas ||= { # score multiplier for percentage of all browser versions my $usagepct = 99.99 / sum( - map { $_->{-total} // values %{$_} } values %{$canihas} + map { $_->{-total} // values %{$_} } + map { $canihas->{$_} } + grep { !/^-/ } + keys %{$canihas} ); $_->{usage} = featurescore($_->{stats}) * $usagepct @@ -270,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; @@ -383,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}); @@ -413,6 +425,7 @@ sub saybrowsercols { )); $title .= "\n$_" for notestotitle(@notes); + $prev .= ' #' if @notes and $prev =~ /^y/; printf('%s', join(' ', X => $CSTATS{$prev}, @@ -423,12 +436,16 @@ sub saybrowsercols { ), scalar @span, $title, - showversions($span[0]->[0], @span > 1 ? $span[-1]->[-1] : ()), + showversions($span[0]->[0], @span > 1 && defined $ver ? $span[-1]->[-1] : ()), ); 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; } } @@ -474,6 +491,7 @@ sub showversions {

supported + annotated partial optional missing @@ -511,5 +529,7 @@ sub showversions { - +