latin: palm graffiti font placeholder
[sheet.git] / browser.plp
index c24df9e70d7952b8d6fae4320a2a9e7cfe616e59..2fe75009ef3cd293b8296ee7e19594b24db41592 100644 (file)
@@ -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 <<'';
-<p id="intro">Alternate rendition of Fyrd's <a href="http://caniuse.com/">when can I use...</a> 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 '<p id="intro">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";
 }
 
@@ -193,11 +199,14 @@ $canihas ||= {
        } @browsers
 }; # fallback hash based on release semantics
 
-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
-});
+# score multiplier for percentage of all browser versions
+my $usagepct = 99.99 / sum(
+       map { $_->{-total} // values %{$_} }
+       map { $canihas->{$_} }
+       grep { !/^-/ }
+       keys %{$canihas}
+);
+
 $_->{usage} = featurescore($_->{stats}) * $usagepct
        for values %{ $caniuse->{data} };
 
@@ -232,18 +241,18 @@ print '<thead>', $header;
 # preceding row without any colspan to work around gecko bug
 print "\n<tr>";
 for my $browser (@browsers) {
-       for (@{ $versions{$browser} }) {
+       for my $span (@{ $versions{$browser} }) {
                my $lastver = first {
                        !defined $caniuse->{agents}->{$browser}->{verrelease}->{$_} # stable
-               } reverse @{$_};
+               } reverse @{$span};
                printf('<td title="%s"%s>%s',
                        join(' ',
-                               sprintf('%.1f%%', sum(@{ $canihas->{$browser} }{@$_}) * $usagepct),
-                               'version ' . showversions(@{$_}, undef),
-                               $_->[-1] eq $lastver ? () : '(development)',
+                               sprintf('%.1f%%', sum(@{ $canihas->{$browser} }{ @{$span} }) * $usagepct),
+                               'version ' . showversions(@{$span}, undef),
+                               $span->[-1] eq $lastver ? () : '(development)',
                        ),
                        !defined $lastver && ' class="ex"',
-                       showversions($lastver),
+                       showversions($lastver // $span->[0]),
                );
        }
 }
@@ -413,6 +422,7 @@ sub saybrowsercols {
                        ));
                        $title .= "\n$_" for notestotitle(@notes);
 
+                       $prev .= ' #' if @notes and $prev =~ /^y/;
                        printf('<td class="%s" colspan="%d" title="%s">%s',
                                join(' ',
                                        X => $CSTATS{$prev},
@@ -423,7 +433,7 @@ 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 = ();
@@ -455,9 +465,9 @@ say '</table>';
 
 sub paddedver {
        # normalised version number comparable as string (cmp)
-       shift =~ /(?:.*-|^)(\d*)(.*)/;
+       $_[0] =~ m/(?:.*-|^)(\d*)(.*)/;
        # matched (major)(.minor) of last value in range (a-B)
-       return sprintf('%02d', $1 || 99) . $2;
+       return sprintf('%02d', length $1 ? $1 : 99) . $2;
 }
 
 sub showversions {
@@ -474,6 +484,7 @@ sub showversions {
 <div class="legend">
        <table class="glyphs"><tr>
        <td class="X l5">supported
+       <td class="X l4">annotated
        <td class="X l3">partial
        <td class="X l2">optional
        <td class="X l1">missing
@@ -511,5 +522,7 @@ sub showversions {
 </div>
 
 <script type="text/javascript" src="/searchlocal.js"></script>
-<script type="text/javascript"> prependsearch(document.getElementById('intro')) </script>
+<script type="text/javascript"><!--
+       prependsearch(document.getElementById('intro'));
+//--></script>