numeric facet sorting
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 3 Apr 2010 20:19:57 +0000 (22:19 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 3 Apr 2010 20:19:57 +0000 (22:19 +0200)
lib/MojoFacets/Data.pm
templates/data/facet.html.ep

index 120878c..251cd64 100644 (file)
@@ -229,15 +229,25 @@ sub facet {
 
        my $sort = $self->param('sort') || 'c';
 
+       # sort facet numerically if more >50% elements are numeric
+       my $numeric = defined $stats->{$name}->{numeric} &&
+               $stats->{$name}->{numeric} > $stats->{$name}->{count} / 2;
+
        my @facet_names = sort {
-               $sort =~ m/a/i ? lc $a cmp lc $b :
-               $sort =~ m/d/i ? lc $b cmp lc $a :
-                       $facet->{$b} <=> $facet->{$a}
-               ;
+               if ( $sort =~ m/a/i ) {
+                       $numeric ? $a <=> $b : lc $a cmp lc $b;
+               } elsif ( $sort =~ m/d/i ) {
+                       $numeric ? $b <=> $a : lc $b cmp lc $a;
+               } elsif ( $sort =~ m/c/i ) {
+                       $facet->{$b} <=> $facet->{$a};
+               } else {
+                       warn "unknown sort: $sort";
+                       $a cmp $b;
+               }
        } keys %$facet;
 
        $self->render( name => $name, facet => $facet, checked => $checked,
-               facet_names => \@facet_names, sort => $sort,
+               facet_names => \@facet_names, sort => $sort, numeric => $numeric,
        );
 }
 
index 8a9f89a..edf70cc 100644 (file)
@@ -30,6 +30,8 @@ sort:
 <a href="<%= url_for->query( name => $name, sort => 'c' ) %>">count</a>
 % }
 
+value:
+
 % if ( $sort eq 'a' ) {
 <b>ascending</b>
 % } else {
@@ -41,3 +43,5 @@ sort:
 % } else {
 <a href="<%= url_for->query( name => $name, sort => 'd' ) %>">desceding</a>
 % }
+
+<%= $numeric ? 'numeric' : '' %>