[interchange-cvs] interchange - heins modified dist/lib/UI/Primitive.pm
interchange-core@interchange.redhat.com
interchange-core@interchange.redhat.com
Tue Nov 6 18:31:01 2001
User: heins
Date: 2001-11-06 23:30:50 GMT
Modified: dist/lib/UI Primitive.pm
Log:
* Add datetime widget to go with date.
[display type=datetime] Standard, default current time, 24hr
[display type=datetime_ampm] Standard, default current time, 12hr
[display type=datetime_ampm+1] Standard, default current time +1 hour, 12hr
Revision Changes Path
2.9 +73 -9 interchange/dist/lib/UI/Primitive.pm
rev 2.9, prev_rev 2.8
Index: Primitive.pm
===================================================================
RCS file: /anon_cvs/repository/interchange/dist/lib/UI/Primitive.pm,v
retrieving revision 2.8
retrieving revision 2.9
diff -u -r2.8 -r2.9
--- Primitive.pm 2001/11/06 22:42:21 2.8
+++ Primitive.pm 2001/11/06 23:30:50 2.9
@@ -1,6 +1,6 @@
# UI::Primitive - Interchange configuration manager primitives
-# $Id: Primitive.pm,v 2.8 2001/11/06 22:42:21 edl Exp $
+# $Id: Primitive.pm,v 2.9 2001/11/06 23:30:50 mheins Exp $
# Copyright (C) 1998-2001 Red Hat, Inc. <interchange@redhat.com>
@@ -25,7 +25,8 @@
package UI::Primitive;
-$VERSION = substr(q$Revision: 2.8 $, 10);
+$VERSION = substr(q$Revision: 2.9 $, 10);
+
$DEBUG = 0;
use vars qw!
@@ -638,17 +639,29 @@
}
sub date_widget {
- my($name, $val) = @_;
+ my($name, $val, $time) = @_;
if($val =~ /\D/) {
$val = Vend::Interpolate::filter_value('date_change', $val);
+ }
+ my $now;
+ if($time and $time =~ /([-+])(\d+)/) {
+ my $sign = $1;
+ my $adjust = $2;
+ $adjust *= 3600;
+ $now = time;
+ $now += $sign eq '+' ? $adjust : -$adjust;
+ }
+
+ @t = localtime($now || time);
+ if (not $val) {
+ $t[2]++ if $t[2] < 23;
+ $val = POSIX::strftime("%Y%m%d%H00", @t);
}
- @t = localtime();
- $val = POSIX::strftime("%Y%m%d", @t) if not $val;
my $sel = 0;
my $out = qq{<SELECT NAME="$name">};
my $o;
for(@months) {
- $o = qq{<OPTION VALUE="$_->[0]">} . errmsg($_->[1]);
+ $o = qq{<OPTION VALUE="$_->[0]">} . errmsg($_->[1]) . '</OPTION>';
($out .= $o, next) unless ! $sel and $val;
$o =~ s/>/ SELECTED>/ && $sel++
if substr($val, 4, 2) eq $_->[0];
@@ -659,7 +672,7 @@
$out .= qq{<INPUT TYPE=hidden NAME="$name" VALUE="/">};
$out .= qq{<SELECT NAME="$name">};
for(@days) {
- $o = qq{<OPTION VALUE="$_->[0]">$_->[1]};
+ $o = qq{<OPTION VALUE="$_->[0]">$_->[1]} . '</OPTION>';
($out .= $o, next) unless ! $sel and $val;
$o =~ s/>/ SELECTED>/ && $sel++
if substr($val, 6, 2) eq $_->[0];
@@ -682,15 +695,60 @@
@years = ($by .. $ey);
}
for(@years) {
- $o = qq{<OPTION>$_};
+ $o = qq{<OPTION>$_} . '</OPTION>';
($out .= $o, next) unless ! $sel and $val;
$o =~ s/>/ SELECTED>/ && $sel++
if substr($val, 0, 4) eq $_;
$out .= $o;
}
$out .= qq{</SELECT>};
-}
+ return $out unless $time;
+ $val =~ s/^\d{8}//;
+ $val =~ s/\D+//g;
+ $out .= qq{<INPUT TYPE=hidden NAME="$name" VALUE=":">};
+ $out .= qq{<SELECT NAME="$name">};
+
+ my $ampm = $time =~ /pm/ ? 1 : 0;
+ my $mod = '';
+ undef $sel;
+ my %special = qw/ 0 midnight 12 noon /;
+
+ $ampm =1;
+ for my $hr ( 0 .. 23) {
+ for my $min ( 0,15,30,45 ) {
+ my $disp_hour = $hr;
+ if($ampm) {
+ if( $hr < 12) {
+ $mod = 'am';
+ }
+ else {
+ $mod = 'pm';
+ $disp_hour = $hr - 12 unless $hr == 12;
+ }
+ $mod = errmsg($mod);
+ $mod = " $mod";
+ }
+ if($special{$hr} and $min == 0) {
+ $disp_hour = errmsg($special{$hr});
+ }
+ elsif($ampm) {
+ $disp_hour = sprintf("%2d:%02d%s", $disp_hour, $min, $mod);
+ }
+ else {
+ $disp_hour = sprintf("%02d:%02d", $hr, $min);
+ }
+ my $time = sprintf "%02d%02d", $hr, $min;
+ $o = sprintf qq{<OPTION VALUE="%s">%s</OPTION>\n}, $time, $disp_hour;
+ ($out .= $o, next) unless ! $sel and $val;
+ $o =~ s/>/ SELECTED>/ && $sel++
+ if substr($val, 0, 4) eq $time;
+ $out .= $o;
+ }
+ }
+ $out .= "</SELECT>";
+ return $out;
+}
sub option_widget_box {
my ($name, $val, $lab, $default, $width) = @_;
@@ -1050,6 +1108,12 @@
}
elsif ($record->{type} eq 'date') {
my $w = date_widget($record->{name}, $value);
+ $w .= qq{<INPUT TYPE=hidden NAME="ui_filter:$record->{name}" VALUE="date_change">};
+ return $w unless $o->{template};
+ return ($w, $record->{label}, $record->{help}, $record->{help_url});
+ }
+ elsif ($record->{type} =~ /^date_?time/) {
+ my $w = date_widget($record->{name}, $value, $record->{type});
$w .= qq{<INPUT TYPE=hidden NAME="ui_filter:$record->{name}" VALUE="date_change">};
return $w unless $o->{template};
return ($w, $record->{label}, $record->{help}, $record->{help_url});