package Base::HTML::Elements; use strict; use warnings; use base 'Exporter'; our @EXPORT_OK = qw(table cols col row cell list); use Base::Nifty qw(line); sub list { my ($tab,$list,$opt) = @_; my @attributes; push @attributes, qq(id="$opt->{id}") if $opt->{id}; push @attributes, qq(class="$opt->{class}") if $opt->{class}; push @attributes, qq(style="$opt->{style}") if $opt->{style}; my $format = @attributes > 0 ? ' '.join(' ',@attributes) : ''; my $tag = 'ul'.$format; line($tab,qq(<$tag>)); line($tab + 1,qq(
  • $_
  • )) for @{$list}; line($tab,q()); } sub cell { my ($tab,$type,$contents,$opt) = @_; my @attributes; push @attributes, qq(id="$opt->{id}") if $opt->{id}; push @attributes, qq(class="$opt->{class}") if $opt->{class}; push @attributes, qq(style="$opt->{style}") if $opt->{style}; push @attributes, qq(colspan="$opt->{colspan}") if $opt->{colspan}; push @attributes, qq(rowspan="$opt->{rowspan}") if $opt->{rowspan}; my $format = @attributes > 0 ? ' '.join(' ',@attributes) : ''; my $open = $type.$format; line($tab,qq()); if ($contents =~ /list/i) { if (ref($opt->{list}[1]) eq 'HASH') { list($tab + 1,$opt->{list}->[0],$opt->{list}->[1]); } else { list($tab + 1,$opt->{list}); } } else { line($tab + 1,$contents); } line($tab,qq()); } sub row { my ($tab,$type,$cells) = @_; my %types = ( header => 'h', data => 'd', whead => 'd' ); line($tab,qq()); if ($type eq 'whead') { my $cell = shift @{$cells}; cell($tab + 1,'h',ucfirst $cell, { class => 'row_header' }); } my $cell_type = $types{$type}; for my $cell (@{$cells}) { if (ref($cell) eq 'ARRAY') { cell($tab + 1,$cell_type,$cell->[0],$cell->[1]); } else { cell($tab + 1,$cell_type,$cell); } } line($tab,q()); } sub col { my ($tab,$opt) = @_; my @attributes; push @attributes, qq(class="$opt->{class}") if $opt->{class}; push @attributes, qq(span="$opt->{span}") if $opt->{span}; my $format = @attributes > 0 ? ' '.join(' ',@attributes) : ''; my $tag = 'col'.$format; line($tab,qq(<$tag>)); } sub cols { my ($tab,$cols) = @_; col($tab,$_) for @{$cols}; } sub table { my ($tab,$opt) = @_; my @attributes; push @attributes, qq(id="$opt->{id}") if $opt->{id}; push @attributes, qq(class="$opt->{class}") if $opt->{class}; push @attributes, qq(style="$opt->{style}") if $opt->{style}; my $format = @attributes > 0 ? ' '.join(' ',@attributes) : ''; my $tag = 'table'.$format; line($tab,qq(<$tag>)); line($tab + 1,qq($opt->{caption})) if $opt->{caption}; row($tab + 1,'header',$opt->{headings}) if $opt->{headings}; if ($opt->{data}) { row($tab + 1,'data',$_) for @{$opt->{data}}; } if ($opt->{whead}) { row($tab + 1,'whead',$_) for @{$opt->{whead}}; } line($tab,q()); } 1;