--- trunk/lib/Frey/ClassBrowser.pm 2008/11/18 23:42:40 427
+++ trunk/lib/Frey/ClassBrowser.pm 2008/11/26 20:47:13 545
@@ -3,15 +3,36 @@
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 $icon = '';
+ if ( $self->can('icon_path') ) {
+ $icon = $self->icon_path( $class );
+ $icon = qq|| if $icon;
+ } else {
+ #warn "## $self doesn't know how to return icon_path";
+ }
+
my $html
- = qq|
$class | |
;
@@ -19,31 +40,43 @@
if ( $class->meta->isa('Moose::Meta::Role') ) {
$html .= qq|role|;
} else {
- $html .= qq|design| if $class->can('collection');
- }
- }
- my @run;
- my @input;
- push @run, 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;
+ $html .= qq|design| if $class->can('collection');
}
}
+
+ my @run = map {
+ s{^as_}{};
+ qq|$_|;
+ } $self->class_runnable( $class );
+ push @run, qq|collection| if $class->can('collection_table');
+
+ my @inputs = $self->class_inputs( $class );
+
+ $usage->{$class} ||= 0;
$html
.= qq| | |
. join(' ', @run)
. qq| | |
- . ( @input ? '← ' . join(' ', @input) : '' )
+ . ( @inputs ? '← ' . join(' ', @inputs) : '' )
+ . 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} ) {
+ $self->usage_on_top ? $usage->{$b} <=> $usage->{$a} : $usage->{$a} <=> $usage->{$b};
+ } else {
+ $self->usage_on_top ? $a cmp $b : $b cmp $a;
+ }
+ }
+ keys %$row
+ ) . qq|
|;
}
1;