browser: hide browser agents below threshold
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 4 Feb 2015 08:14:08 +0000 (09:14 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Thu, 5 Feb 2015 21:46:21 +0000 (22:46 +0100)
Browser agents were threated differently from versions to force a complete
overview of all known browsers, regardless of usage (so one could see
cutting edge features in rare browsers for example, but also because not all
user agents were distinguished in usage data).

With the increasing amount of Webkit forks though, there isn't enough space
so apply the same threshold as versions.

browser.plp

index 2ba6e01194ed5b89a5685b8978267b769f02dd90..bd6d8abde4ec1a195bbf32a599397da1502e3bb1 100644 (file)
@@ -76,12 +76,12 @@ if (my ($somerow) = values %{ $caniuse->{data} }) {
                $versions{$browser} = [ sort { paddedver($a) cmp paddedver($b) } keys %$row ];
        }
 }
-my @browsers = keys %versions;
 
 print <<'';
 <p id="intro">Alternate rendition of Fyrd's <a href="http://caniuse.com/">when can I use...</a> page
 
-my ($canihas, $usage, $minusage);
+my ($canihas, $usage);
+my $minusage = $get{threshold} // .5;
 given ($get{usage} // 'wm') {
        when (!$_) {
                # none
@@ -101,12 +101,18 @@ given ($get{usage} // 'wm') {
        $ref .= " $_" for $canihas->{-date} || ();
        print "\nwith $ref browser usage statistics";
 }
+
+my @browsers;
 if ($usage) { # first() does not work inside given >:(
        # adapt version usage to actual support data
        my %engineuse;  # prefix => usage sum
        for my $browser (keys %versions) {
                my $row = $canihas->{$browser} // {};
                my $verlist = $versions{$browser} or next;
+               if ($minusage and sum(values %$row) < $minusage) {
+                       delete $versions{$browser};
+                       next;
+               }
                my %supported = map { $_ => 1 } @$verlist;
 
                # cascade unknown versions
@@ -120,7 +126,7 @@ if ($usage) { # first() does not work inside given >:(
                }
 
                # build row list for each version
-               if ($minusage = $get{threshold} // .5) {
+               if ($minusage) {
                        my @vershown;  # $verlist replacement
                        my ($rowusage, @verrow) = (0);  # replacement row tracking
                        for (@$verlist) {
@@ -148,7 +154,7 @@ if ($usage) { # first() does not work inside given >:(
                $engineuse{ $caniuse->{agents}->{$a}->{prefix} }
                        ||
                $canihas->{$b}->{-total} <=> $canihas->{$a}->{-total}
-       } @browsers;
+       } keys %versions;
 }
 else {
        # order browser columns by name grouped by engine
@@ -157,7 +163,7 @@ else {
                $caniuse->{agents}->{$a}->{prefix}
                        ||
                $a cmp $b
-       } @browsers;
+       } keys %versions;
 }
 :>.
 </p>