--- trunk/lib/Frey/ClassBrowser.pm 2008/07/14 21:22:43 121
+++ trunk/lib/Frey/ClassBrowser.pm 2008/11/26 05:14:27 531
@@ -1,39 +1,86 @@
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 $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|$icon | $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 = 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| | |
+ . ( @inputs ? '← ' . join(' ', @inputs) : '' )
+ . 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;