
richter at apache
Apr 7, 2008, 10:23 PM
Post #1 of 1
(1892 views)
Permalink
|
|
svn commit: r645765 - in /perl/embperl/trunk/Embperl/Form/Control: datetime.pm duration.pm hidden.pm
|
|
Author: richter Date: Mon Apr 7 22:23:01 2008 New Revision: 645765 URL: http://svn.apache.org/viewvc?rev=645765&view=rev Log: Date/Time controls Added: perl/embperl/trunk/Embperl/Form/Control/datetime.pm perl/embperl/trunk/Embperl/Form/Control/duration.pm Modified: perl/embperl/trunk/Embperl/Form/Control/hidden.pm Added: perl/embperl/trunk/Embperl/Form/Control/datetime.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/datetime.pm?rev=645765&view=auto ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/datetime.pm (added) +++ perl/embperl/trunk/Embperl/Form/Control/datetime.pm Mon Apr 7 22:23:01 2008 @@ -0,0 +1,240 @@ + +################################################################################### +# +# Embperl - Copyright (c) 1997-2005 Gerald Richter / ecos gmbh www.ecos.de +# +# You may distribute under the terms of either the GNU General Public +# License or the Artistic License, as specified in the Perl README file. +# +# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# $Id$ +# +################################################################################### + +package Embperl::Form::Control::datetime ; + +use strict ; +use base 'Embperl::Form::Control::number' ; + +use Embperl::Inline ; +use POSIX qw(strftime); +use Time::Local qw(timelocal_nocheck timegm_nocheck); +use Date::Calc qw{Delta_DHMS Add_Delta_Days} ; + +use vars qw{%fdat} ; + +our $tz_local = (timegm_nocheck(localtime())-time())/60; + + +# --------------------------------------------------------------------------- +# +# init - init the new control +# + +sub init + + { + my ($self) = @_ ; + + $self->{unit} ||= '' ; + + + return $self ; + } + +# ------------------------------------------------------------------------------------------ +# +# init_data - daten aufteilen +# + +sub init_data + { + my ($self, $req, $parentctrl) = @_ ; + + my $name = $self->{name} ; + my $time = $fdat{$name} ; + return if ($time eq '') ; + + my ($y, $m, $d, $h, $min, $s, $z) = ($time =~ /^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(.)/) ; + + # Getting the local timezone + + my $date = eval + { + my @time = gmtime(timegm_nocheck($s,$min,$h,$d,$m-1,$y-1900)+($tz_local*60)); + + my $format = $s == 0 && $h == 0 && $min == 0?'%d.%m.%Y':'%d.%m.%Y, %H:%M' ; + strftime ($format, @time[0..5]) ; + } ; + + $fdat{$name} = $date ; + } + +# ------------------------------------------------------------------------------------------ +# +# prepare_fdat - daten zusammenfuehren +# + +sub prepare_fdat + { + my ($self, $req) = @_ ; + + my $name = $self->{name} ; + my $date = $fdat{$name} ; + return if ($date eq '') ; + + my ($year, $mon, $day, $hour, $min, $sec) ; + if ($date eq '*' || $date eq '.') + { + my $offset ||= 0 ; + ($sec, $min, $hour, $day, $mon, $year) = gmtime (time + $offset) ; + $year += 1900 ; + $mon++ ; + } + else + { + my ($d, $t) = split (/\s+/, $date) ; + if ($d =~ /:/) + { + $t = $d ; + $d = '' ; + } + ($day, $mon, $year) = map { $_ + 0 } split (/\./, $d) ; + ($hour, $min, $sec) = map { $_ + 0 } split (/\:/, $t) ; + + if ($year == 0 || $mon == 0 || $day == 0) + { + my ($s, $min, $h, $md, $m, $y) = localtime ; + + $day ||= $md ; + $mon ||= $m + 1; + $year ||= $y + 1900 ; + } + + if ($year < 70) + { + $year += 2000 ; + } + elsif ($year >= 70 && $year < 100) + { + $year += 1900 ; + } + if ($year < 1907) + { + $year = $year % 100 + 2000 ; + } + + ($year,$mon,$day, $hour,$min,$sec) = + Date::Calc::Add_Delta_DHMS($year,$mon,$day, $hour,$min,$sec, + 0, 0, -$tz_local, 0) if ($hour || $min || $sec) ; + } + + $fdat{$name} = $year?sprintf ('%04d%02d%02d%02d%02d%02dZ', $year, $mon, $day, $hour, $min, $sec):'' ; + +print STDERR "datetime: $date -> $year, $mon, $day $hour:$min:$sec\n" ; + } + +1 ; + +__EMBPERL__ + + +[# --------------------------------------------------------------------------- +# +# show_control - output the control +#] + +[.$ sub show_control ($self) + +$self -> {size} ||= 80 / ($self -> {width} || 2) ; +my $class = $self -> {class} ||= 'cControlWidthInput' ; +my $nsprefix = $self -> form -> {jsnamespace} ; +$] + +<input type="text" class="cBase cControl [+ $class +]" name="[+ $self->{name} +]" id="[+ $self->{id} +]" +[$if $self -> {size} $]size="[+ $self->{size} +]"[$endif$] +[$if $self -> {maxlength} $]maxlength="[+ $self->{maxlength} +]"[$endif$] +> +<script type="text/javascript"> + [+ $nsprefix +]Calendar.setup( + { + inputField : document.getElementById('[+ $self -> {id} +]'), // ID of the input field + ifFormat : "%d.%m.%Y", // the date format + //button : "trigger" // ID of the button + } + ); +</script> + + + +[$endsub$] + + +__END__ + +=pod + +=head1 NAME + +Embperl::Form::Control::price - A price input control with optional unit inside an Embperl Form + + +=head1 SYNOPSIS + + { + type => 'price', + text => 'blabla', + name => 'foo', + unit => 'sec', + } + +=head1 DESCRIPTION + +Used to create a price input control inside an Embperl Form. +Will format number as a money ammout. +Optionaly it can display an unit after the input field. +See Embperl::Form on how to specify parameters. + +=head2 PARAMETER + +=head3 type + +Needs to be 'price' + +=head3 name + +Specifies the name of the control + +=head3 text + +Will be used as label for the numeric input control + +=head3 size + +Gives the size in characters. (Default: 10) + +=head3 maxlength + +Gives the maximun length in characters + +=head3 unit + +Gives a string that should be displayed right of the input field. +(Default: ) + +=head3 use_comma + +If set the decimal character is comma instead of point (Default: on) + +=head1 Author + +G. Richter (richter [at] dev) + +=head1 See Also + +perl(1), Embperl, Embperl::Form + + Added: perl/embperl/trunk/Embperl/Form/Control/duration.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/duration.pm?rev=645765&view=auto ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/duration.pm (added) +++ perl/embperl/trunk/Embperl/Form/Control/duration.pm Mon Apr 7 22:23:01 2008 @@ -0,0 +1,162 @@ + +################################################################################### +# +# Embperl - Copyright (c) 1997-2005 Gerald Richter / ecos gmbh www.ecos.de +# +# You may distribute under the terms of either the GNU General Public +# License or the Artistic License, as specified in the Perl README file. +# +# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# $Id$ +# +################################################################################### + +package Embperl::Form::Control::duration ; + +use strict ; +use base 'Embperl::Form::Control::number' ; + +use Embperl::Inline ; + +use vars qw{%fdat} ; + +# --------------------------------------------------------------------------- +# +# init - init the new control +# + +sub init + + { + my ($self) = @_ ; +print STDERR "durx1\n" ; + $self->{unit} ||= '' ; + + return $self ; + } + +# ------------------------------------------------------------------------------------------ +# +# init_data - daten aufteilen +# + +sub init_data + { + my ($self, $req, $parentctrl) = @_ ; + +print STDERR "durx2\n" ; + my $name = $self->{name} ; + my $val = $fdat{$name} ; + return if ($val eq '') ; + + my $sec = $val % 60 ; + my $min = (int ($val / 60) % 60) ; + my $hour = int($val / 3600) ; + + my $duration = $hour?sprintf('%d:%02d', $hour, $min):$min ; + if ($sec != 0) + { + $duration .= sprintf (':%02d', $sec) ; + } + $fdat{$name} = $duration ; + +print STDERR "duration init: $fdat{$name}\n" ; + } + +# ------------------------------------------------------------------------------------------ +# +# prepare_fdat - daten zusammenfuehren +# + +sub prepare_fdat + { + my ($self, $req) = @_ ; + +print STDERR "durx3\n" ; + my $name = $self->{name} ; + my $val = $fdat{$name} ; + return if ($val eq '') ; + + my @vals = split (/:/, $val, 3) ; + + + + $fdat{$name} = @vals == 1?$vals[0] * 60:$vals[0] * 3600 + $vals[1] * 60 + $vals[2] ; + +print STDERR "duration: (@vals) val = $fdat{$name}\n" ; + + } + +1 ; + +__EMBPERL__ + + +__END__ + +=pod + +=head1 NAME + +Embperl::Form::Control::price - A price input control with optional unit inside an Embperl Form + + +=head1 SYNOPSIS + + { + type => 'price', + text => 'blabla', + name => 'foo', + unit => 'sec', + } + +=head1 DESCRIPTION + +Used to create a price input control inside an Embperl Form. +Will format number as a money ammout. +Optionaly it can display an unit after the input field. +See Embperl::Form on how to specify parameters. + +=head2 PARAMETER + +=head3 type + +Needs to be 'price' + +=head3 name + +Specifies the name of the control + +=head3 text + +Will be used as label for the numeric input control + +=head3 size + +Gives the size in characters. (Default: 10) + +=head3 maxlength + +Gives the maximun length in characters + +=head3 unit + +Gives a string that should be displayed right of the input field. +(Default: ) + +=head3 use_comma + +If set the decimal character is comma instead of point (Default: on) + +=head1 Author + +G. Richter (richter [at] dev) + +=head1 See Also + +perl(1), Embperl, Embperl::Form + + Modified: perl/embperl/trunk/Embperl/Form/Control/hidden.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/hidden.pm?rev=645765&r1=645764&r2=645765&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/hidden.pm (original) +++ perl/embperl/trunk/Embperl/Form/Control/hidden.pm Mon Apr 7 22:23:01 2008 @@ -81,6 +81,10 @@ Will be used as name for the hidden input field. +=head3 value + +Value for the hidden field. + =head1 Author G. Richter (richter [at] dev), A. Beckert (beckert [at] ecos) --------------------------------------------------------------------- To unsubscribe, e-mail: embperl-cvs-unsubscribe [at] perl For additional commands, e-mail: embperl-cvs-help [at] perl
|