--- trunk/lib/Frey/ClassBrowser.pm 2008/07/14 21:22:43 121 +++ trunk/lib/Frey/ClassBrowser.pm 2008/11/19 16:53:13 457 @@ -1,39 +1,78 @@ package Frey::ClassBrowser; use Moose; -extends 'Frey'; +extends 'Frey::ClassLoader'; with 'Frey::Web'; +with 'Frey::Session'; -use Frey::ClassLoader; +use Frey::Run; +use Data::Dump qw/dump/; -our $markup; - -sub markup { - my $f = Frey::ClassLoader->new; - my $classes = dom2html( - table => [ - map { - my $package = $_; - ( tr => [ - td => [ a => { href => '/~/' . $package, title => $f->package_path( $package ) } => [ $package ] ], - td => [ - $package->can('meta') ? - $package->meta->isa('Moose::Meta::Role') ? 'role' : - ( a => { href => '/od/' . $package } => [ 'design' ] ) : - '' - ], - td => [ $package->can('collection_table') ? ( a => { href => '/ob/' . $package } => [ 'collection' ] ) : '' ], - ] ) - } $f->classes - ], - ); - $markup = $classes; -} - -sub html { - my ( $self, $req ) = @_; - my $html = $self->page( body => qq|

Classes

| . $self->markup ); - $req->print( $html ); +has 'usage_on_top' => ( + is => 'rw', + isa => 'Bool', + default => 1, + documentation => 'Show usage on top of list', +); + +sub as_markup { + my $self = shift; + my $row; + + my $usage = $self->session_dump( $self->usage ); + #warn "# usage ",dump( $usage ); + foreach my $class ( $self->classes ) { + my $html + = qq|$class| + ; + if ( $class->can('meta') ) { + 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_methods = $self->class_methods( $class ); + + push @run, qq|$_| + foreach ( map { s{^as_}{} } $self->class_runnable( $class ) ); + push @input, $_ + foreach $self->class_inputs( $class ); + + $usage->{$class} ||= 0; + $html + .= qq|| + . join(' ', @run) + . qq|| + . ( @input ? '← ' . join(' ', @input) : '' ) + . qq|| + . ( $usage->{$class} || '' ) + . qq|| + ; + $row->{$class} = $html; + } + + 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;