version 1.22, 2003/05/21 16:16:32
|
version 1.27, 2003/07/11 16:07:20
|
Line 58 package Apache::lonhtmlcommon;
|
Line 58 package Apache::lonhtmlcommon;
|
use Time::Local; |
use Time::Local; |
use strict; |
use strict; |
|
|
|
|
|
############################################## |
|
############################################## |
|
|
|
=pod |
|
|
|
=item textbox |
|
|
|
=cut |
|
|
|
############################################## |
|
############################################## |
|
sub textbox { |
|
my ($name,$value,$size,$special) = @_; |
|
$size = 40 if (! defined($size)); |
|
my $Str = '<input type="text" name="'.$name.'" size="'.$size.'" '. |
|
'value="'.$value.'" '.$special.' />'; |
|
return $Str; |
|
} |
|
|
|
############################################## |
|
############################################## |
|
|
|
=pod |
|
|
|
=item checkbox |
|
|
|
=cut |
|
|
|
############################################## |
|
############################################## |
|
sub checkbox { |
|
my ($name) = @_; |
|
my $Str = '<input type="checkbox" name="'.$name.'" />'; |
|
return $Str; |
|
} |
|
|
|
|
|
|
############################################## |
############################################## |
############################################## |
############################################## |
|
|
Line 85 The current setting for this time parame
|
Line 124 The current setting for this time parame
|
An undefined value is taken to indicate the value is the current time. |
An undefined value is taken to indicate the value is the current time. |
Also, to be explicit, a value of 'now' also indicates the current time. |
Also, to be explicit, a value of 'now' also indicates the current time. |
|
|
|
=item $special |
|
|
|
Additional html/javascript to be associated with each element in |
|
the date_setter. See lonparmset for example usage. |
|
|
=back |
=back |
|
|
Bugs |
Bugs |
Line 96 The method used to restrict user input w
|
Line 140 The method used to restrict user input w
|
############################################## |
############################################## |
############################################## |
############################################## |
sub date_setter { |
sub date_setter { |
my ($formname,$dname,$currentvalue) = @_; |
my ($formname,$dname,$currentvalue,$special) = @_; |
if (! defined($currentvalue) || $currentvalue eq 'now') { |
if (! defined($currentvalue) || $currentvalue eq 'now') { |
$currentvalue = time; |
$currentvalue = time; |
} |
} |
Line 139 sub date_setter {
|
Line 183 sub date_setter {
|
} |
} |
</script> |
</script> |
ENDJS |
ENDJS |
$result .= " <select name=\"$dname\_month\" ". |
$result .= " <nobr><select name=\"$dname\_month\" ".$special.' '. |
"onChange=\"javascript:$dname\_checkday()\" >\n"; |
"onChange=\"javascript:$dname\_checkday()\" >\n"; |
my @Months = qw/January February March April May June |
my @Months = qw/January February March April May June |
July August September October November December/; |
July August September October November December/; |
Line 152 ENDJS
|
Line 196 ENDJS
|
} |
} |
$result .= " </select>\n"; |
$result .= " </select>\n"; |
$result .= " <input type=\"text\" name=\"$dname\_day\" ". |
$result .= " <input type=\"text\" name=\"$dname\_day\" ". |
"value=\"$mday\" size=\"3\" ". |
"value=\"$mday\" size=\"3\" ".$special.' '. |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
$result .= " <input type=\"year\" name=\"$dname\_year\" ". |
$result .= " <input type=\"year\" name=\"$dname\_year\" ". |
"value=\"$year\" size=\"5\" ". |
"value=\"$year\" size=\"5\" ".$special.' '. |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
$result .= " "; |
$result .= " "; |
$result .= " <select name=\"$dname\_hour\" >\n"; |
$result .= " <select name=\"$dname\_hour\" ".$special." >\n"; |
for (my $h = 0;$h<24;$h++) { |
for (my $h = 0;$h<24;$h++) { |
$result .= " <option value=\"$h\" "; |
$result .= " <option value=\"$h\" "; |
$result .= "selected " if ($hour == $h); |
$result .= "selected " if ($hour == $h); |
Line 175 ENDJS
|
Line 219 ENDJS
|
$result .= " </option>\n"; |
$result .= " </option>\n"; |
} |
} |
$result .= " </select>\n"; |
$result .= " </select>\n"; |
$result .= " <input type=\"text\" name=\"$dname\_minute\" ". |
$result .= " <input type=\"text\" name=\"$dname\_minute\" ".$special.' '. |
"value=\"$min\" size=\"3\" /> m\n"; |
"value=\"$min\" size=\"3\" /> m\n"; |
$result .= " <input type=\"text\" name=\"$dname\_second\" ". |
$result .= " <input type=\"text\" name=\"$dname\_second\" ".$special.' '. |
"value=\"$sec\" size=\"3\" /> s\n"; |
"value=\"$sec\" size=\"3\" /> s\n"; |
$result .= "<!-- end $dname date setting form -->\n"; |
$result .= "</nobr>\n<!-- end $dname date setting form -->\n"; |
return $result; |
return $result; |
} |
} |
|
|
Line 252 sub get_date_from_form {
|
Line 296 sub get_date_from_form {
|
$year = $tmpyear - 1900; |
$year = $tmpyear - 1900; |
} |
} |
} |
} |
|
if (($year<70) || ($year>137)) { return undef; } |
if (eval(&timelocal($sec,$min,$hour,$day,$month,$year))) { |
if (eval(&timelocal($sec,$min,$hour,$day,$month,$year))) { |
return &timelocal($sec,$min,$hour,$day,$month,$year); |
return &timelocal($sec,$min,$hour,$day,$month,$year); |
} else { |
} else { |
Line 340 the selection box is set to document.$fo
|
Line 385 the selection box is set to document.$fo
|
|
|
$size: the size (number of lines) of the selection box. |
$size: the size (number of lines) of the selection box. |
|
|
|
$onchange: javascript to use when the value is changed. Enclosed in |
|
double quotes, ""s, not single quotes. |
|
|
Returns: a perl string as described. |
Returns: a perl string as described. |
|
|
=cut |
=cut |
Line 347 Returns: a perl string as described.
|
Line 395 Returns: a perl string as described.
|
############################################## |
############################################## |
############################################## |
############################################## |
sub StatusOptions { |
sub StatusOptions { |
my ($status, $formName,$size)=@_; |
my ($status, $formName,$size,$onchange)=@_; |
$size = 1 if (!defined($size)); |
$size = 1 if (!defined($size)); |
if (! defined($status)) { |
if (! defined($status)) { |
$status = 'Active'; |
$status = 'Active'; |
Line 364 sub StatusOptions {
|
Line 412 sub StatusOptions {
|
|
|
my $Str = ''; |
my $Str = ''; |
$Str .= '<select name="Status"'; |
$Str .= '<select name="Status"'; |
if(defined($formName) && $formName ne '') { |
if(defined($formName) && $formName ne '' && ! defined($onchange)) { |
$Str .= ' onchange="document.'.$formName.'.submit()"'; |
$Str .= ' onchange="document.'.$formName.'.submit()"'; |
} |
} |
|
if (defined($onchange)) { |
|
$Str .= ' onchange="'.$onchange.'"'; |
|
} |
$Str .= ' size="'.$size.'" '; |
$Str .= ' size="'.$size.'" '; |
$Str .= '>'."\n"; |
$Str .= '>'."\n"; |
$Str .= '<option value="Active" '.$OpSel1.'>'. |
$Str .= '<option value="Active" '.$OpSel1.'>'. |
Line 578 sub FormatStudentInformation {
|
Line 629 sub FormatStudentInformation {
|
######################################################## |
######################################################## |
######################################################## |
######################################################## |
|
|
|
=pod |
|
|
|
=item Progess Window Handling Routines |
|
|
|
These routines handle the creation, update, increment, and closure of |
|
progress windows. The progress window reports to the user the number |
|
of items completed and an estimate of the time required to complete the rest. |
|
|
|
=over 4 |
|
|
|
|
|
=item &Create_PrgWin |
|
|
|
Writes javascript to the client to open a progress window and returns a |
|
data structure used for bookkeeping. |
|
|
|
Inputs |
|
|
|
=over 4 |
|
|
|
=item $r Apache request |
|
|
|
=item $title The title of the progress window |
|
|
|
=item $heading A description (usually 1 line) of the process being initiated. |
|
|
|
=item $number_to_do The total number of items being processed. |
|
|
|
=back |
|
|
|
Returns a hash containing the progress state data structure. |
|
|
|
|
|
=item &Update_PrgWin |
|
|
|
Updates the text in the progress indicator. Does not increment the count. |
|
See &Increment_PrgWin. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $r Apache request |
|
|
|
=item $prog_state Pointer to the data structure returned by &Create_PrgWin |
|
|
|
=item $displaystring The string to write to the status indicator |
|
|
|
=back |
|
|
|
Returns: none |
|
|
|
|
|
=item Increment_PrgWin |
|
|
|
Increment the count of items completed for the progress window by 1. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $r Apache request |
|
|
|
=item $prog_state Pointer to the data structure returned by Create_PrgWin |
|
|
|
=item $extraInfo A description of the items being iterated over. Typically |
|
'student'. |
|
|
|
=back |
|
|
|
Returns: none |
|
|
|
|
|
=item Close_PrgWin |
|
|
|
Closes the progress window. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $r Apache request |
|
|
|
=item $prog_state Pointer to the data structure returned by Create_PrgWin |
|
|
|
=back |
|
|
|
Returns: none |
|
|
|
=back |
|
|
|
=cut |
|
|
|
######################################################## |
|
######################################################## |
|
|
# Create progress |
# Create progress |
sub Create_PrgWin { |
sub Create_PrgWin { |
my ($r, $title, $heading, $number_to_do)=@_; |
my ($r, $title, $heading, $number_to_do)=@_; |
Line 594 sub Create_PrgWin {
|
Line 741 sub Create_PrgWin {
|
|
|
my %prog_state; |
my %prog_state; |
$prog_state{'done'}=0; |
$prog_state{'done'}=0; |
$prog_state{'firststart'}=time; |
$prog_state{'firststart'}=&Time::HiRes::time(); |
$prog_state{'laststart'}=time; |
$prog_state{'laststart'}=&Time::HiRes::time(); |
$prog_state{'max'}=$number_to_do; |
$prog_state{'max'}=$number_to_do; |
|
|
$r->rflush(); |
$r->rflush(); |
Line 607 sub Update_PrgWin {
|
Line 754 sub Update_PrgWin {
|
my ($r,$prog_state,$displayString)=@_; |
my ($r,$prog_state,$displayString)=@_; |
$r->print('<script>popwin.document.popremain.remaining.value="'. |
$r->print('<script>popwin.document.popremain.remaining.value="'. |
$displayString.'";</script>'); |
$displayString.'";</script>'); |
$$prog_state{'laststart'}=time; |
$$prog_state{'laststart'}=&Time::HiRes::time(); |
$r->rflush(); |
$r->rflush(); |
} |
} |
|
|
Line 615 sub Update_PrgWin {
|
Line 762 sub Update_PrgWin {
|
sub Increment_PrgWin { |
sub Increment_PrgWin { |
my ($r,$prog_state,$extraInfo)=@_; |
my ($r,$prog_state,$extraInfo)=@_; |
$$prog_state{'done'}++; |
$$prog_state{'done'}++; |
my $time_est= (time - $$prog_state{'firststart'})/$$prog_state{'done'} * |
my $time_est= (&Time::HiRes::time() - $$prog_state{'firststart'})/ |
|
$$prog_state{'done'} * |
($$prog_state{'max'}-$$prog_state{'done'}); |
($$prog_state{'max'}-$$prog_state{'done'}); |
$time_est = int($time_est); |
$time_est = int($time_est); |
if (int ($time_est/60) > 0) { |
if (int ($time_est/60) > 0) { |
my $min = int($time_est/60); |
my $min = int($time_est/60); |
my $sec = $time_est % 60; |
my $sec = $time_est % 60; |
$time_est = $min.' minutes'; |
$time_est = $min.' minutes'; |
if ($sec > 1) { |
if ($min < 10) { |
$time_est.= ', '.$sec.' seconds'; |
if ($sec > 1) { |
} elsif ($sec > 0) { |
$time_est.= ', '.$sec.' seconds'; |
$time_est.= ', '.$sec.' second'; |
} elsif ($sec > 0) { |
} |
$time_est.= ', '.$sec.' second'; |
|
} |
|
} |
} else { |
} else { |
$time_est .= ' seconds'; |
$time_est .= ' seconds'; |
} |
} |
my $lasttime = time-$$prog_state{'laststart'}; |
my $lasttime = &Time::HiRes::time()-$$prog_state{'laststart'}; |
|
if ($lasttime > 9) { |
|
$lasttime = int($lasttime); |
|
} elsif ($lasttime < 0.01) { |
|
$lasttime = 0; |
|
} else { |
|
$lasttime = sprintf("%3.2f",$lasttime); |
|
} |
if ($lasttime == 1) { |
if ($lasttime == 1) { |
$lasttime = '('.$lasttime.' second for '.$extraInfo.')'; |
$lasttime = '('.$lasttime.' second for '.$extraInfo.')'; |
} else { |
} else { |
Line 639 sub Increment_PrgWin {
|
Line 796 sub Increment_PrgWin {
|
$r->print('<script>popwin.document.popremain.remaining.value="'. |
$r->print('<script>popwin.document.popremain.remaining.value="'. |
$$prog_state{'done'}.'/'.$$prog_state{'max'}. |
$$prog_state{'done'}.'/'.$$prog_state{'max'}. |
': '.$time_est.' remaining '.$lasttime.'";'.'</script>'); |
': '.$time_est.' remaining '.$lasttime.'";'.'</script>'); |
$$prog_state{'laststart'}=time; |
$$prog_state{'laststart'}=&Time::HiRes::time(); |
$r->rflush(); |
$r->rflush(); |
} |
} |
|
|
Line 652 sub Close_PrgWin {
|
Line 809 sub Close_PrgWin {
|
} |
} |
|
|
1; |
1; |
|
|
__END__ |
__END__ |