Release commit for 1.62
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / HTML.pm
index 8d91bff..0cdc711 100644 (file)
@@ -1,34 +1,13 @@
 package SQL::Translator::Producer::HTML;
 
-# -------------------------------------------------------------------
-# $Id: HTML.pm,v 1.10 2003-10-17 19:51:57 dlc Exp $
-# -------------------------------------------------------------------
-# Copyright (C) 2003 Ken Y. Clark <kclark@cpan.org>,
-#                    darren chamberlain <darren@cpan.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# 02111-1307  USA
-# -------------------------------------------------------------------
-
 use strict;
+use warnings;
 use Data::Dumper;
-use vars qw($VERSION $NOWRAP $NOLINKTABLE $NAME);
 
-$VERSION = sprintf "%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/;
-$NAME = join ', ', __PACKAGE__, $VERSION;
-$NOWRAP = 0 unless defined $NOWRAP;
-$NOLINKTABLE = 0 unless defined $NOLINKTABLE;
+our $VERSION = '1.62';
+our $NAME = __PACKAGE__;
+our $NOWRAP = 0 unless defined $NOWRAP;
+our $NOLINKTABLE = 0 unless defined $NOLINKTABLE;
 
 # Emit XHTML by default
 $CGI::XHTML = $CGI::XHTML = 42;
@@ -59,7 +38,7 @@ sub produce {
                             import CGI::Pretty;
                                    CGI::Pretty->new }
                     : do { require CGI;
-                            import CGI; 
+                            import CGI;
                                    CGI->new };
     my ($table, @table_names);
 
@@ -69,13 +48,12 @@ sub produce {
                 -title => $title,
                 %stylesheet,
                 -meta => { generator => $NAME },
-            });
+            }),
             $q->h1({ -class => 'SchemaDescription' }, $title),
-            $q->a({ -name => 'top' }),
             $q->hr;
     }
 
-    @table_names = grep { length $_->name } $schema->get_tables; 
+    @table_names = grep { length $_->name } $schema->get_tables;
 
     if ($linktable) {
         # Generate top menu, with links to full table information
@@ -83,9 +61,10 @@ sub produce {
         $count = sprintf "%d table%s", $count, $count == 1 ? '' : 's';
 
         # Leading table of links
-        push @html, 
+        push @html,
             $q->comment("Table listing ($count)"),
-            $q->start_table({ -width => '100%', -class => 'LinkTable' }),
+            $q->a({ -name => 'top' }),
+            $q->start_table({ -width => '100%', -class => 'LinkTable'}),
 
             # XXX This needs to be colspan="$#{$table->fields}" class="LinkTableHeader"
             $q->Tr(
@@ -96,9 +75,9 @@ sub produce {
                 ),
             );
 
-        for my $table (sort @table_names) {
+        for my $table (@table_names) {
             my $table_name = $table->name;
-            push @html, 
+            push @html,
                 $q->comment("Start link to table '$table_name'"),
                 $q->Tr({ -class => 'LinkTableRow' },
                     $q->td({ -class => 'LinkTableCell' },
@@ -114,7 +93,8 @@ sub produce {
         my $table_name = $table->name       or next;
         my @fields     = $table->get_fields or next;
         push @html,
-            $q->comment("Starting table '$table_name'");
+            $q->comment("Starting table '$table_name'"),
+            $q->a({ -name => $table_name }),
             $q->table({ -class => 'TableHeader', -width => '100%' },
                 $q->Tr({ -class => 'TableHeaderRow' },
                     $q->td({ -class => 'TableHeaderCell' }, $q->h3($table_name)),
@@ -136,26 +116,27 @@ sub produce {
         # Fields
         #
         push @html,
-            $q->start_table,
+            $q->start_table({ -border => 1 }),
                 $q->Tr(
                     $q->th({ -class => 'FieldHeader' },
-                           [ 
-                            'Field Name', 
-                            'Data Type', 
-                            'Size', 
-                            'Default Value', 
-                            'Other', 
-                            'Foreign Key' 
+                           [
+                            'Field Name',
+                            'Data Type',
+                            'Size',
+                            'Default Value',
+                            'Other',
+                            'Foreign Key'
                            ]
-                    ) 
+                    )
                 );
 
+        my $i = 0;
         for my $field ( @fields ) {
             my $name      = $field->name      || '';
                $name      = qq[<a name="$table_name-$name">$name</a>];
             my $data_type = $field->data_type || '';
             my $size      = defined $field->size ? $field->size : '';
-            my $default   = defined $field->default_value 
+            my $default   = defined $field->default_value
                             ? $field->default_value : '';
             my $comment   = $field->comments  || '';
             my $fk        = '';
@@ -164,7 +145,7 @@ sub produce {
                 my $c         = $field->foreign_key_reference;
                 my $ref_table = $c->reference_table       || '';
                 my $ref_field = ($c->reference_fields)[0] || '';
-                $fk           = 
+                $fk           =
                 qq[<a href="#$ref_table-$ref_field">$ref_table.$ref_field</a>];
             }
 
@@ -173,8 +154,10 @@ sub produce {
             push @other, 'UNIQUE'      if $field->is_unique;
             push @other, 'NOT NULL'    unless $field->is_nullable;
             push @other, $comment      if $comment;
+            my $class = $i++ % 2 ? 'even' : 'odd';
             push @html,
                 $q->Tr(
+                    { -class => "tr-$class" },
                     $q->td({ -class => "FieldCellName" }, $name),
                     $q->td({ -class => "FieldCellType" }, $data_type),
                     $q->td({ -class => "FieldCellSize" }, $size),
@@ -189,11 +172,11 @@ sub produce {
         # Indices
         #
         if ( my @indices = $table->get_indices ) {
-            push @html, 
+            push @html,
                 $q->h3('Indices'),
                 $q->start_table({ -border => 1 }),
                     $q->Tr({ -class => 'IndexRow' },
-                        $q->th([ 'Name', 'Fields' ]) 
+                        $q->th([ 'Name', 'Fields' ])
                     );
 
             for my $index ( @indices ) {
@@ -209,13 +192,40 @@ sub produce {
             push @html, $q->end_table;
         }
 
+        #
+        # Constraints
+        #
+        my @constraints =
+            grep { $_->type ne PRIMARY_KEY } $table->get_constraints;
+        if ( @constraints ) {
+            push @html,
+                $q->h3('Constraints'),
+                $q->start_table({ -border => 1 }),
+                    $q->Tr({ -class => 'IndexRow' },
+                        $q->th([ 'Type', 'Fields' ])
+                    );
+
+            for my $c ( @constraints ) {
+                my $type   = $c->type || '';
+                my $fields = join( ', ', $c->fields ) || '';
+
+                push @html,
+                    $q->Tr({ -class => 'IndexCell' },
+                        $q->td( [ $type, $fields ] )
+                    );
+            }
+
+            push @html, $q->end_table;
+        }
+
         push @html, $q->hr;
     }
 
+    my $sqlt_version = $t->version;
     if ($wrap) {
         push @html,
             qq[Created by <a href="http://sqlfairy.sourceforge.net">],
-            qq[SQL::Translator</a>],
+            qq[SQL::Translator $sqlt_version</a>],
             $q->end_html;
     }
 
@@ -301,9 +311,9 @@ nicely spaced and human-readable.  Otherwise, it will have very little
 insignificant whitespace and be generally smaller.
 
 
-=head1 AUTHOR
+=head1 AUTHORS
 
-Ken Y. Clark E<lt>kclark@cpan.orgE<gt>,
-Darren Chamberlain E<lt>darren@cpan.orgE<gt>
+Ken Youens-Clark E<lt>kclark@cpan.orgE<gt>,
+Darren Chamberlain E<lt>darren@cpan.orgE<gt>.
 
 =cut