--- trunk/lib/Frey/ClassBrowser.pm 2008/11/19 01:21:31 434 +++ trunk/lib/Frey/ClassBrowser.pm 2008/11/27 17:39:00 555 @@ -4,6 +4,7 @@ extends 'Frey::ClassLoader'; with 'Frey::Web'; with 'Frey::Session'; +with 'Frey::Web::CombineImages'; use Frey::Run; use Data::Dump qw/dump/; @@ -15,15 +16,28 @@ documentation => 'Show usage on top of list', ); -sub markup { +sub as_markup { my $self = shift; my $row; + my @icons; my $usage = $self->session_dump( $self->usage ); #warn "# usage ",dump( $usage ); foreach my $class ( $self->classes ) { + + my $icon = ''; + if ( ! $self->can('icon_path') ) { + warn "FIXME: re-apply Frey::Web on $self"; + Frey::Web->meta->apply( $self ); + } + $icon = $self->icon_path( $class ); + if ($icon) { + push @icons, $icon; + $icon = qq||; + } + my $html - = qq|$class| ; @@ -31,27 +45,24 @@ 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|| @@ -59,18 +70,25 @@ $row->{$class} = $html; } + my $icons_html = $self->combine_images( @icons ); + sub icon { + my $path = shift; + warn "# icon $path"; + $icons_html->{ $path } || die "can't find $path in ",dump($icons_html); + }; + return qq|| . join("\n", - map { $row->{$_} } + map { + my $html = $row->{$_}; + $html =~ s{}{icon($1)}gse; + $html; + } sort { if ( $usage->{$a} || $usage->{$b} ) { - if ( $self->usage_on_top ) { - $usage->{$b} <=> $usage->{$a}; - } else { - $usage->{$a} <=> $usage->{$b}; - } + $self->usage_on_top ? $usage->{$b} <=> $usage->{$a} : $usage->{$a} <=> $usage->{$b}; } else { - $a cmp $b; + $self->usage_on_top ? $a cmp $b : $b cmp $a; } } keys %$row