package HTML::FormFu::Element::DateTime; use strict; use base 'HTML::FormFu::Element::Date'; use Scalar::Util qw( blessed ); __PACKAGE__->mk_attrs(qw/ hour minute /); __PACKAGE__->mk_accessors(qw/ printf_hour printf_minute /); sub new { my $self = shift->next::method(@_); $self->strftime("%d-%m-%Y %H:%M"); $self->_known_fields( [qw/ day month year hour minute /] ); $self->field_order( [qw/ day month year hour minute /] ); #$self->time( { # type => '_MultiText', # prefix => [], # } ); $self->hour( { type => '_MultiSelect', prefix => [], } ); $self->minute( { type => '_MultiSelect', prefix => [], } ); $self->printf_hour ('%02d'); $self->printf_minute('%02d'); return $self; } #sub _add_time { # my ($self) = @_; # # my $time = $self->time; # # my $time_name = $self->_build_name( 'time' ); # # $self->element( { # type => $time->{type}, # name => $time_name, # # defined $time->{default} ? ( default => $time->{default} ) : (), # } ); # # return; #} sub _add_hour { my ($self) = @_; my $hour = $self->hour; my $hour_name = $self->_build_name('hour'); my @hour_prefix = ref $hour->{prefix} ? @{ $hour->{prefix} } : $hour->{prefix}; @hour_prefix = map { [ '', $_ ] } @hour_prefix; $self->element( { type => $hour->{type}, name => $hour_name, options => [ @hour_prefix, map { [ $_, $_ ] } map { sprintf '%02d', $_ } 0 .. 23 ], defined $hour->{default} ? ( default => sprintf '%02d', $hour->{default} ) : (), } ); return; } sub _add_minute { my ($self) = @_; my $minute = $self->minute; my $minute_name = $self->_build_name('minute'); my @minute_prefix = ref $minute->{prefix} ? @{ $minute->{prefix} } : $minute->{prefix}; @minute_prefix = map { [ '', $_ ] } @minute_prefix; $self->element( { type => $minute->{type}, name => $minute_name, options => [ @minute_prefix, map { [ $_, $_ ] } map { sprintf '%02d', $_ } 0 .. 59 ], defined $minute->{default} ? ( default => sprintf '%02d', $minute->{default} ) : (), } ); return; } 1; __END__ =head1 NAME HTML::FormFu::Element::DateTime - Date / Time combo field =head1 SYNOPSIS --- elements: - type: DateTime name: start_datetime label: 'Start:' auto_inflate: 1 =head1 DESCRIPTION Sub-class of L, providing extra C and C Select menus. =head1 METHODS =head2 hour Arguments: \%setting Set values effecting the C select menu. Known keys are: =head3 name Override the auto-generated name of the select menu. =head3 default Set the default value of the select menu =head3 prefix Arguments: $value Arguments: \@values A string or arrayref of strings to be inserted into the start of the select menu. Each value is only used as the label for a select item - the value for each of these items is always the empty string C<''>. =head2 minute Arguments: \%setting Set values effecting the C select menu. Known keys are: =head3 name Override the auto-generated name of the select menu. =head3 default Set the default value of the select menu =head3 prefix Arguments: $value Arguments: \@values A string or arrayref of strings to be inserted into the start of the select menu. Each value is only used as the label for a select item - the value for each of these items is always the empty string C<''>. =head2 field_order Arguments: \@fields Default Value: ['day', 'month', 'year', 'hour', 'minute'] Specify the order of the date fields in the rendered HTML. Not all fields are required. No single field can be used more than once. =head1 CAVEATS See L =head1 SEE ALSO Is a sub-class of, and inherits methods from L L, L, L, L L =head1 AUTHOR Carl Franks, C =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.