/[Frey]/trunk/lib/Frey/Introspect.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/Frey/Introspect.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 116 by dpavlin, Sun Jul 13 18:01:40 2008 UTC revision 128 by dpavlin, Mon Jul 14 23:39:56 2008 UTC
# Line 114  sub methods { Line 114  sub methods {
114          my @methods = grep { ! defined($attr->{$_}) } $class->get_method_list;          my @methods = grep { ! defined($attr->{$_}) } $class->get_method_list;
115          warn "# methods = ",dump( @methods ) if $self->debug;          warn "# methods = ",dump( @methods ) if $self->debug;
116    
117          return @methods;          return sort @methods;
118  }  }
119    
120  use Frey::ClassLoader;  use Frey::ClassLoader;
# Line 138  sub html { Line 138  sub html {
138    
139          while (1) {          while (1) {
140    
141                  my $js = $self->head_javascript;                  my ( $class, $meta, $is_role ) = $self->load_package;
                 $js .= << '__END_OF_JS__';  
 <script type="text/javascript">  
 joose.loadComponents("../lib")  
   
 function $(id) {  
         return document.getElementById(id)  
 }  
142    
143  </script>                  my $package = $self->package;
 __END_OF_JS__  
144    
145                  my ( $class, $meta, $is_role ) = $self->load_package;                  my @methods;
146                    @methods = map { qq|<td><a href="/~/$package/$_">$_</a></td>| } $self->methods if $class->can('meta');
147    
148                  my $methods;                  my @attributes;
149                  if ( $class->can('meta') ) {                  if ( $class->get_attribute_list ) {
150                          $methods = dom2html(                  @attributes = map {
151                                  ul => [                                  my $attr = $class->get_attribute($_);
152                                          map { (  #                               warn "## $_ ", $attr->is_required ? 'required' : 'optional';
153                                                  li => [ a => { href => '/~/' . $self->package . '/' . $_ } => [ $_ ] ]                                  qq|<td><a href="/~/$package/$_?">$_</a></td><td>| .
154                                          ) } $self->methods                                  ( $attr->is_required ? ' <b>required</b>' : '' ) .
155                                  ]                                  qq|</td>|;
156                          );                          } sort $class->get_attribute_list
                         $methods = "<h2>Methods</h2>$methods" if $methods;  
                 } else {  
                         $methods = '<b>not introspectable</b>';  
157                  }                  }
158    
159                  my $attributes;                  my $table = qq|<table><tr><th>Methods</th><th>Attributes</th></tr>|;
160                  if ( $class->get_attribute_list ) {                  while ( @methods || @attributes ) {
161                          $attributes = dom2html(                          my ($m,$a) = ( shift @methods, shift @attributes );
162                                  table => [                          $m ||= '<td></td>';
163                                          map {                          $a ||= '<td></td>';
164                                                  my $attr = $class->get_attribute($_);                          $table .= qq|<tr>$m$a</tr>|;
                                                 warn "## $_ ", $attr->is_required ? 'required' : 'optional';  
                                                 ( tr => [  
                                                         td => [ a => { href => '/~/' . $self->package . '/' . $_ } => [ $_ ] ],  
                                                         td => [ $attr->is_required ? ' <b>required</b>' : '' ],  
                                                 ] )  
                                         } $class->get_attribute_list  
                                 ],  
                         );  
                         $attributes = "<h2>Attributes</h2>$attributes" if $attributes;  
                 } else {  
                         $attributes = '<b>no attributes</b>';  
165                  }                  }
166                    $table .= qq|</table>|;
167    
168                    my $classes =
169                            qq|<div class="classes">| .
170                            Frey::ClassBrowser->new->markup .
171                            qq|</div>|;
172    
173                    $self->add_css( 'static/introspect.css' );
174    
175                    warn "## css = ",dump( $self->css );
176    
177                    my $superclasses = 'Role';
178                    $superclasses = 'Superclasses: ' . join(', ',
179                            map {
180                                    my $s = $_->meta->name;
181                                    qq|<a href="/~/$s">$s</a>|
182                            }
183                            #grep { $_ ne 'Moose::Object' }
184                            $meta->superclasses
185                    ) if ! $is_role && $meta->superclasses;
186    
187                    my $pod = Frey::Pod->new( class => $package )->markup;
188    
189                    my $html = $self->page(
190                            title => "Introspect $package",
191                            body => qq|<h1>$package</h1>|
192                                    . ( $pod ? qq|<a href="#___top" title="Skip to POD" style="font-size: 80%; color: #aaa;">&darr;pod&darr</a>  | : '' )
193                                    . qq|$superclasses\n$table\n$pod\n$classes|,
194    
                 my $html = dom2html(  
                         html => [  
                                 head => [  
                                         link => { rel=>"stylesheet", href=>"/static/app.css", type=>"text/css", media=>"screen" },  
                                         $js,  
                                         title => [ 'Introspect ', $self->package ],  
                                 ],  
                                 body => [  
                                         h1 => [ $self->package ],  
                                         $methods,  
                                         $attributes,  
                                 ],  
                         ]  
195                  );                  );
196    
197                  $request->print($html);                  $request->print($html);

Legend:
Removed from v.116  
changed lines
  Added in v.128

  ViewVC Help
Powered by ViewVC 1.1.26