/usr/local/CPAN/HTML-Tag/HTML/Tag/MONTH.pm
package HTML::Tag::MONTH;
use strict;
use warnings;
use base qw(Class::AutoAccess HTML::Tag::SELECT);
use Tie::IxHash;
use Class::AutoAccess;
use HTML::Tag::Lang qw(@month);
our $VERSION = '1.00';
BEGIN {
our $class_def = {
element => 'MONTH',
tag => 'SELECT',
selected => '',
value => '',
maybenull => 0,
permitted => undef ,
}
}
sub inner {
my $self = shift;
my $ret = '';
$ret .= qq|<option value=""></option>\n| if ($self->maybenull);
my @permitted;
if ($self->permitted) {
# to be sure that permitted are real numbers
push @permitted,$_+0 for (@{$self->permitted});
} else {
@permitted = (1..12);
}
my @cmonth = localtime();
my $cmonth = $cmonth[4]+1;
my @mlist = ($cmonth..12);
# intersect @permitted with mlist
my @msect; tie my %munion,'Tie::IxHash'; tie my %msect,'Tie::IxHash';
foreach my $e (@mlist, @permitted) { $munion{$e}++ && $msect{$e}++ }
@msect = keys %msect;
foreach (@msect) {
$_ = sprintf('%02d',$_);
$ret .= qq|<option value="$_"| . ($self->selected eq $_ ? ' selected' : '') .
qq|>$_ - $month[$_-1]</option>\n|;
}
unless ($cmonth == 1) {
@mlist = (1..$cmonth-1);
# intersect @permitted with mlist
%munion = () ;%msect = ();
foreach my $e (@mlist, @permitted) { $munion{$e}++ && $msect{$e}++ }
@msect = keys %msect;
foreach (@msect) {
$_ = sprintf('%02d',$_);
$ret .= qq|<option value="$_"| . ($self->selected eq $_ ? ' selected' : '') .
qq|>$_ - $month[$_-1]</option>\n|;
}
}
return $ret;
}
1;
# vim: set ts=2: