--- trunk/lib/Frey/ClassBrowser.pm 2008/11/18 23:42:40 427 +++ trunk/lib/Frey/ClassBrowser.pm 2008/11/19 15:28:23 455 @@ -3,12 +3,24 @@ extends 'Frey::ClassLoader'; with 'Frey::Web'; +with 'Frey::Session'; use Frey::Run; +use Data::Dump qw/dump/; -sub markup { +has 'usage_on_top' => ( + is => 'rw', + isa => 'Bool', + default => 1, + documentation => 'Show usage on top of list', +); + +sub as_markup { my $self = shift; - my @rows; + my $row; + + my $usage = $self->session_dump( $self->usage ); + #warn "# usage ",dump( $usage ); foreach my $class ( $self->classes ) { my $html = qq|collection| if $class->can('collection_table'); - my $class_method = $self->class_methods( $class ); - foreach my $try ( Frey::Run->runnable ) { - next unless $class->can($try); - if ( $class_method->{ $try } ) { - push @run, qq|$try|; - } else { - push @input, $try; - } - } + my @class_methods = $self->class_methods( $class ); + + push @run, qq|$_| + foreach ( grep { m{^as_} } @class_methods ); + push @input, $_ + foreach ( grep { m{^(markup/as_data/as_sponge)$} } @class_methods ); + + $usage->{$class} ||= 0; $html .= qq|| . join(' ', @run) . qq|| . ( @input ? '← ' . join(' ', @input) : '' ) + . qq|| + . ( $usage->{$class} || '' ) . qq|| ; - push @rows, $html if $html; + $row->{$class} = $html; } - return qq|| . join("\n", @rows) . qq|
| if @rows; + + return + qq|| . join("\n", + map { $row->{$_} } + sort { + if ( $usage->{$a} || $usage->{$b} ) { + if ( $self->usage_on_top ) { + $usage->{$b} <=> $usage->{$a}; + } else { + $usage->{$a} <=> $usage->{$b}; + } + } else { + $a cmp $b; + } + } + keys %$row + ) . qq|
|; } 1;