browser: transfer usage of unknown version to next row
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 8 Dec 2010 19:46:00 +0000 (20:46 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 15 Dec 2010 21:40:44 +0000 (22:40 +0100)
Do not compile usage data to shown browser versions, as the latter list
changes over time.  Instead find next number present for unknown versions
during runtime.

Fixes counting of old versions dropped in last release, and prepares for
upcoming changes.

browser.plp
tools/convert-stats-wikimedia.pl

index 27dcb1b4d7213bdb45f181ce4253cf0b5eed8a87..eee60960506b1c6f549c5203d81356a7ba7dd0d4 100644 (file)
@@ -1,7 +1,7 @@
 <(common.inc.plp)><:
 use 5.010;
 use utf8;
-use List::Util qw(sum max);
+use List::Util qw(sum max first);
 
 Html({
        title => 'browser compatibility cheat sheet',
@@ -91,6 +91,20 @@ given ($get{usage} // 'wm') {
        $ref .= " $_" for $canihas->{-date} || ();
        print "\nwith $ref browser usage statistics";
 }
+if ($usage) {
+       # first() does not work inside given >:(
+       while (my ($browser, $row) = each %$canihas) {
+               my $verlist = $versions{$browser} or next;
+               my %supported = map { $_ => 1 } @$verlist;
+               $row->{$_} //= undef for @$verlist;  # ensure stable keys during iteration
+               while (my ($version, $usage) = each %$row) {
+                       next if defined $supported{$version};
+                       $_ = paddedver($_) for $version;
+                       my $next = first { paddedver($_) ge $version } @$verlist; # or next
+                       $row->{$next} += $usage;
+               }
+       }
+}
 :>.
 </p>
 
index 5ee59ca8671df131e2ab03f8063179673b97a9ce..b5b833d0390aa83c81bdc97e7597ba7815e7849c 100644 (file)
@@ -38,10 +38,7 @@ given ($browser) {
                                ($_) = $1 =~ m{^/(\d+)};
                                continue;
                        }
-                       s/\d\d\.\d\K.*// or do {
-                               # major part only, except for ≥v9.6
-                               $_ ge '9.6' ? ($_ = '9.6') : (s/\..*//);
-                       };
+                       s/^\d*\.\d\K.*//;  # one significant digit
                }
                continue;
        }
@@ -57,7 +54,7 @@ given ($browser) {
                                [ '525'     => '2'   ],
                                [ '528'     => '3'   ],
                                [ '531'     => '3.2' ],
-                               [ '531.022' => '4.1' ],
+                               [ '531.022' => '4'   ],
                                [ '533'     => '4.2' ],
                                [ '534'     => '4x' ],
                        ) : (