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;