--- loncom/interface/lonhtmlcommon.pm 2002/08/13 00:37:18 1.7
+++ loncom/interface/lonhtmlcommon.pm 2003/07/25 19:56:37 1.28
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common html routines
#
-# $Id: lonhtmlcommon.pm,v 1.7 2002/08/13 00:37:18 stredwic Exp $
+# $Id: lonhtmlcommon.pm,v 1.28 2003/07/25 19:56:37 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,109 +25,382 @@
#
# http://www.lon-capa.org/
#
+######################################################################
+######################################################################
+
+=pod
+
+=head1 NAME
+
+Apache::lonhtmlcommon - routines to do common html things
+
+=head1 SYNOPSIS
+
+Referenced by other mod_perl Apache modules.
+
+=head1 INTRODUCTION
+
+lonhtmlcommon is a collection of subroutines used to present information
+in a consistent html format, or provide other functionality related to
+html.
+
+=head2 General Subroutines
+
+=over 4
+
+=cut
+
+######################################################################
+######################################################################
package Apache::lonhtmlcommon;
+use Time::Local;
use strict;
-sub AscendOrderOptions {
- my ($order, $page, $formName)=@_;
- my $OpSel1 = '';
- my $OpSel2 = '';
+##############################################
+##############################################
- if($order eq 'Ascending') {
- $OpSel1 = ' selected';
- } else {
- $OpSel2 = ' selected';
- }
+=pod
- my $Str = '';
- $Str .= ''."\n";
+=item textbox
+
+=cut
+##############################################
+##############################################
+sub textbox {
+ my ($name,$value,$size,$special) = @_;
+ $size = 40 if (! defined($size));
+ my $Str = '';
return $Str;
}
-sub MapOptions {
- my ($data, $page, $formName)=@_;
- my $Str = '';
- $Str .= ''."\n";
}
+
+########################################################
+########################################################
+
+=pod
+
+=item &MultipleSectionSelect()
+
+Inputs:
+
+=over 4
+
+=item $sections A references to an array containing the names of all the
+sections used in a class.
+
+=item $selectedSections A reference to an array containing the names of the
+currently selected sections.
+
+=back
+
+Returns: a string containing HTML for a multiple select box for
+selecting sections of a course.
+
+The form element name is 'Section'. @$sections is sorted prior to output.
+
+=cut
+
+########################################################
+########################################################
sub MultipleSectionSelect {
my ($sections,$selectedSections)=@_;
my $Str = '';
$Str .= ''."\n";
- foreach (@$sections) {
+ foreach (sort @$sections) {
$Str .= ''."\n";
-
+
return $Str;
}
+########################################################
+########################################################
+
+=pod
+
+=item &Title()
+
+Inputs: $pageName a string containing the name of the page to be sent
+to &Apache::loncommon::bodytag.
+
+Returns: string containing being and complete
'."\n";
return $Str;
}
+########################################################
+########################################################
+
=pod
-=item &CreateTableHeadings()
+=item &CreateHeadings()
This function generates the column headings for the chart.
@@ -215,6 +540,8 @@ $Str: A formatted string of the table co
=cut
+########################################################
+########################################################
sub CreateHeadings {
my ($data,$keyID,$headings,$displayString,$format)=@_;
my $Str='';
@@ -241,11 +568,14 @@ sub CreateHeadings {
return $Str;
}
+########################################################
+########################################################
+
=pod
=item &FormatStudentInformation()
-This function produces a formatted string of the student's information:
+This function produces a formatted string of the student\'s information:
username, domain, section, full name, and PID.
=over 4
@@ -270,6 +600,8 @@ $Str: Formatted string.
=cut
+########################################################
+########################################################
sub FormatStudentInformation {
my ($data,$name,$keyID,$displayString,$format)=@_;
my $Str='';
@@ -294,37 +626,198 @@ sub FormatStudentInformation {
return $Str;
}
+########################################################
+########################################################
+
+=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
sub Create_PrgWin {
- my ($r, $title, $heading)=@_;
+ my ($r, $title, $heading, $number_to_do)=@_;
$r->print('");
+ my %prog_state;
+ $prog_state{'done'}=0;
+ $prog_state{'firststart'}=&Time::HiRes::time();
+ $prog_state{'laststart'}=&Time::HiRes::time();
+ $prog_state{'max'}=$number_to_do;
+
$r->rflush();
+ return %prog_state;
}
# update progress
sub Update_PrgWin {
- my ($displayString,$r)=@_;
+ my ($r,$prog_state,$displayString)=@_;
$r->print('');
+ $$prog_state{'laststart'}=&Time::HiRes::time();
+ $r->rflush();
+}
+
+# increment progress state
+sub Increment_PrgWin {
+ my ($r,$prog_state,$extraInfo)=@_;
+ $$prog_state{'done'}++;
+ my $time_est= (&Time::HiRes::time() - $$prog_state{'firststart'})/
+ $$prog_state{'done'} *
+ ($$prog_state{'max'}-$$prog_state{'done'});
+ $time_est = int($time_est);
+ if (int ($time_est/60) > 0) {
+ my $min = int($time_est/60);
+ my $sec = $time_est % 60;
+ $time_est = $min.' minutes';
+ if ($min < 10) {
+ if ($sec > 1) {
+ $time_est.= ', '.$sec.' seconds';
+ } elsif ($sec > 0) {
+ $time_est.= ', '.$sec.' second';
+ }
+ }
+ } else {
+ $time_est .= ' seconds';
+ }
+ 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) {
+ $lasttime = '('.$lasttime.' second for '.$extraInfo.')';
+ } else {
+ $lasttime = '('.$lasttime.' seconds for '.$extraInfo.')';
+ }
+ #
+ my $user_browser = $ENV{'browser.type'} if (exists($ENV{'browser.type'}));
+ my $user_os = $ENV{'browser.os'} if (exists($ENV{'browser.os'}));
+ if (! defined($user_browser) || ! defined($user_os)) {
+ (undef,$user_browser,undef,undef,undef,$user_os) =
+ &Apache::loncommon::decode_user_agent();
+ }
+ if ($user_browser eq 'explorer' && $user_os =~ 'mac') {
+ $lasttime = '';
+ }
+ $r->print('');
+ $$prog_state{'laststart'}=&Time::HiRes::time();
$r->rflush();
}
# close Progress Line
sub Close_PrgWin {
- my ($r)=@_;
+ my ($r,$prog_state)=@_;
$r->print(''."\n");
+ undef(%$prog_state);
$r->rflush();
}
1;
+
__END__