version 1.50, 2004/02/16 22:32:19
|
version 1.59, 2004/03/03 22:55:35
|
Line 60 use Time::HiRes;
|
Line 60 use Time::HiRes;
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use strict; |
use strict; |
|
|
|
|
############################################## |
############################################## |
############################################## |
############################################## |
|
|
Line 202 Also, to be explicit, a value of 'now' a
|
Line 201 Also, to be explicit, a value of 'now' a
|
Additional html/javascript to be associated with each element in |
Additional html/javascript to be associated with each element in |
the date_setter. See lonparmset for example usage. |
the date_setter. See lonparmset for example usage. |
|
|
|
=item $includeempty |
|
|
|
=item $state |
|
|
|
Specifies the initial state of the form elements. Either 'disabled' or empty. |
|
Defaults to empty, which indiciates the form elements are not disabled. |
|
|
=back |
=back |
|
|
Bugs |
Bugs |
Line 213 The method used to restrict user input w
|
Line 219 The method used to restrict user input w
|
############################################## |
############################################## |
############################################## |
############################################## |
sub date_setter { |
sub date_setter { |
my ($formname,$dname,$currentvalue,$special,$includeempty) = @_; |
my ($formname,$dname,$currentvalue,$special,$includeempty,$state) = @_; |
|
if (! defined($state) || $state ne 'disabled') { |
|
$state = ''; |
|
} |
if (! defined($currentvalue) || $currentvalue eq 'now') { |
if (! defined($currentvalue) || $currentvalue eq 'now') { |
unless ($includeempty) { |
unless ($includeempty) { |
$currentvalue = time; |
$currentvalue = time; |
Line 262 sub date_setter {
|
Line 271 sub date_setter {
|
} |
} |
} |
} |
|
|
|
function $dname\_disable() { |
|
document.$formname.$dname\_month.disabled=true; |
|
document.$formname.$dname\_day.disabled=true; |
|
document.$formname.$dname\_year.disabled=true; |
|
document.$formname.$dname\_hour.disabled=true; |
|
document.$formname.$dname\_minute.disabled=true; |
|
document.$formname.$dname\_second.disabled=true; |
|
} |
|
|
|
function $dname\_enable() { |
|
document.$formname.$dname\_month.disabled=false; |
|
document.$formname.$dname\_day.disabled=false; |
|
document.$formname.$dname\_year.disabled=false; |
|
document.$formname.$dname\_hour.disabled=false; |
|
document.$formname.$dname\_minute.disabled=false; |
|
document.$formname.$dname\_second.disabled=false; |
|
} |
|
|
function $dname\_opencalendar() { |
function $dname\_opencalendar() { |
var calwin=window.open( |
if (! document.$formname.$dname\_month.disabled) { |
|
var calwin=window.open( |
"/adm/announcements?pickdate=yes&formname=$formname&element=$dname&month="+ |
"/adm/announcements?pickdate=yes&formname=$formname&element=$dname&month="+ |
document.$formname.$dname\_month.value+"&year="+ |
document.$formname.$dname\_month.value+"&year="+ |
document.$formname.$dname\_year.value, |
document.$formname.$dname\_year.value, |
"LONCAPAcal", |
"LONCAPAcal", |
"height=350,width=350,scrollbars=yes,resizable=yes,menubar=no"); |
"height=350,width=350,scrollbars=yes,resizable=yes,menubar=no"); |
|
} |
|
|
} |
} |
</script> |
</script> |
ENDJS |
ENDJS |
$result .= " <nobr><select name=\"$dname\_month\" ".$special.' '. |
$result .= " <nobr><select name=\"$dname\_month\" ".$special.' '. |
|
$state.' '. |
"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 286 ENDJS
|
Line 316 ENDJS
|
$result .= "> ".&mt($Months[$m])." </option>\n"; |
$result .= "> ".&mt($Months[$m])." </option>\n"; |
} |
} |
$result .= " </select>\n"; |
$result .= " </select>\n"; |
$result .= " <input type=\"text\" name=\"$dname\_day\" ". |
$result .= " <input type=\"text\" name=\"$dname\_day\" ".$state.' '. |
"value=\"$mday\" size=\"3\" ".$special.' '. |
"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\" ".$state.' '. |
"value=\"$year\" size=\"5\" ".$special.' '. |
"value=\"$year\" size=\"5\" ".$special.' '. |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
$result .= " "; |
$result .= " "; |
$result .= " <select name=\"$dname\_hour\" ".$special." >\n"; |
$result .= " <select name=\"$dname\_hour\" ".$special." ".$state.' '.">\n"; |
if ($includeempty) { $result.="<option value=''></option>"; } |
if ($includeempty) { $result.="<option value=''></option>"; } |
for (my $h = 0;$h<24;$h++) { |
for (my $h = 0;$h<24;$h++) { |
$result .= " <option value=\"$h\" "; |
$result .= " <option value=\"$h\" "; |
Line 314 ENDJS
|
Line 344 ENDJS
|
} |
} |
$result .= " </select>\n"; |
$result .= " </select>\n"; |
$result .= " <input type=\"text\" name=\"$dname\_minute\" ".$special.' '. |
$result .= " <input type=\"text\" name=\"$dname\_minute\" ".$special.' '. |
|
$state.' '. |
"value=\"$min\" size=\"3\" /> m\n"; |
"value=\"$min\" size=\"3\" /> m\n"; |
$result .= " <input type=\"text\" name=\"$dname\_second\" ".$special.' '. |
$result .= " <input type=\"text\" name=\"$dname\_second\" ".$special.' '. |
|
$state.' '. |
"value=\"$sec\" size=\"3\" /> s\n"; |
"value=\"$sec\" size=\"3\" /> s\n"; |
$result .= "<a href=\"javascript:$dname\_opencalendar()\">". |
$result .= "<a href=\"javascript:$dname\_opencalendar()\">". |
&mt('Select Date')."</a></nobr>\n<!-- end $dname date setting form -->\n"; |
&mt('Select Date')."</a></nobr>\n<!-- end $dname date setting form -->\n"; |
Line 560 Inputs
|
Line 592 Inputs
|
=item $type Either 'popup' or 'inline' (popup is assumed if nothing is |
=item $type Either 'popup' or 'inline' (popup is assumed if nothing is |
specified) |
specified) |
|
|
|
=item $width Specify the width in charaters of the input field. |
|
|
=item $formname Only useful in the inline case, if a form already exists, this needs to be used and specfiy the name of the form, otherwise the Progress line will be created in a new form of it's own |
=item $formname Only useful in the inline case, if a form already exists, this needs to be used and specfiy the name of the form, otherwise the Progress line will be created in a new form of it's own |
|
|
=item $inputname Only useful in the inline case, if a form and an input of type text exists, use this to specify the name of the input field |
=item $inputname Only useful in the inline case, if a form and an input of type text exists, use this to specify the name of the input field |
Line 632 Returns: none
|
Line 666 Returns: none
|
######################################################## |
######################################################## |
######################################################## |
######################################################## |
|
|
|
my $uniq=0; |
|
sub get_uniq_name { |
|
$uniq++; |
|
return 'uniquename'.$uniq; |
|
} |
|
|
# Create progress |
# Create progress |
sub Create_PrgWin { |
sub Create_PrgWin { |
my ($r, $title, $heading, $number_to_do,$type,$formname,$inputname)=@_; |
my ($r, $title, $heading, $number_to_do,$type,$width,$formname, |
|
$inputname)=@_; |
if (!defined($type)) { $type='popup'; } |
if (!defined($type)) { $type='popup'; } |
|
if (!defined($width)) { $width=55; } |
my %prog_state; |
my %prog_state; |
$prog_state{'type'}=$type; |
$prog_state{'type'}=$type; |
if ($type eq 'popup') { |
if ($type eq 'popup') { |
Line 650 sub Create_PrgWin {
|
Line 692 sub Create_PrgWin {
|
"<body bgcolor=\"#88DDFF\">". |
"<body bgcolor=\"#88DDFF\">". |
"<h4>$heading</h4>". |
"<h4>$heading</h4>". |
"<form name=popremain>". |
"<form name=popremain>". |
'<input type="text" size="55" name="remaining" value="'. |
'<input type="text" size="'.$width.'" name="remaining" value="'. |
&mt('Starting').'"></form>'. |
&mt('Starting').'"></form>'. |
"</body></html>\');". |
"</body></html>\');". |
"popwin.document.close();}". |
"popwin.document.close();}". |
Line 660 sub Create_PrgWin {
|
Line 702 sub Create_PrgWin {
|
} elsif ($type eq 'inline') { |
} elsif ($type eq 'inline') { |
$prog_state{'window'}='window'; |
$prog_state{'window'}='window'; |
if (!$formname) { |
if (!$formname) { |
&r_print($r,'<form name="progresswindow">'); |
$prog_state{'formname'}=&get_uniq_name(); |
$prog_state{'formname'}='progresswindow'; |
&r_print($r,'<form name="'.$prog_state{'formname'}.'">'); |
} else { |
} else { |
$prog_state{'formname'}=$formname; |
$prog_state{'formname'}=$formname; |
} |
} |
if (!$inputname) { |
if (!$inputname) { |
&r_print($r,'<input type="text" name="progressline" />'); |
$prog_state{'inputname'}=&get_uniq_name(); |
$prog_state{'inputname'}="progressline"; |
&r_print($r,$heading.' <input type="text" name="'.$prog_state{'inputname'}. |
|
'" size="'.$width.'" />'); |
} else { |
} else { |
$prog_state{'inputname'}=$inputname; |
$prog_state{'inputname'}=$inputname; |
|
|
Line 792 sub crumbs {
|
Line 835 sub crumbs {
|
return $output.'</font></b></tt><br />'; |
return $output.'</font></b></tt><br />'; |
} |
} |
|
|
|
# ------------------------------------------------- Output headers for HTMLArea |
|
|
|
sub htmlareaheaders { |
|
unless (&htmlareabrowser()) { return ''; } |
|
my $lang='en'; |
|
return (<<ENDHEADERS); |
|
<script type="text/javascript" src="/htmlarea/htmlarea.js"></script> |
|
<script type="text/javascript" src="/htmlarea/lang/$lang.js"></script> |
|
<script type="text/javascript" src="/htmlarea/dialog.js"></script> |
|
<style type="text/css"> |
|
\@import url(/htmlarea/htmlarea.css); |
|
</style> |
|
ENDHEADERS |
|
} |
|
|
|
# ---------------------------------------------------------- Script to activate |
|
|
|
sub htmlareaactive { |
|
unless (&htmlareabrowser()) { return ''; } |
|
return (<<ENDSCRIPT); |
|
<script type="text/javascript" defer="1"> |
|
HTMLArea.replaceAll(); |
|
</script> |
|
ENDSCRIPT |
|
} |
|
|
|
# ---------------------------------------- Browser capable of running HTMLArea? |
|
|
|
sub htmlareabrowser { |
|
return 1; |
|
} |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
=pod |
|
|
|
=item breadcrumbs |
|
|
|
Compiles the previously registered breadcrumbs into an series of links. |
|
FAQ and BUG links will be placed on the left side of the table if they |
|
are defined for the last registered breadcrumb. |
|
Additionally supports a 'component', which will be displayed on the |
|
right side of the table (without a link). |
|
A link to help for the component will be included if one is specified. |
|
|
|
All inputs can be undef without problems. |
|
|
|
Inputs: $color (the background color of the table returned), |
|
$component (the large text on the right side of the table), |
|
$component_help |
|
|
|
Returns a string containing breadcrumbs for the current page. |
|
|
|
=item clear_breadcrumbs |
|
|
|
Clears the previously stored breadcrumbs. |
|
|
|
=item add_breadcrumb |
|
|
|
Pushes a breadcrumb on the stack of crumbs. |
|
|
|
input: $breadcrumb, a hash reference. The keys 'href','title', and 'text' |
|
are required. If present the keys 'faq' and 'bug' will be used to provide |
|
links to the FAQ and bug sites. |
|
|
|
returns: nothing |
|
|
|
=cut |
|
|
|
############################################################ |
|
############################################################ |
|
{ |
|
my @Crumbs; |
|
|
|
sub breadcrumbs { |
|
my ($color,$component,$component_help,$function,$domain) = @_; |
|
if (! defined($color)) { |
|
if (! defined($function)) { |
|
$function = &Apache::loncommon::get_users_function(); |
|
} |
|
$color = &Apache::loncommon::designparm($function.'.tabbg', |
|
$domain); |
|
} |
|
# |
|
my $Str = "\n". |
|
'<table width="100%" border="0" cellpadding="0" cellspacing="0">'. |
|
'<tr><td bgcolor="'.$color.'">'. |
|
'<font size="-1">'; |
|
# |
|
# Make the faq and bug data cascade |
|
my $faq = ''; |
|
my $bug = ''; |
|
# The last breadcrumb does not have a link, so handle it seperately. |
|
my $last = pop(@Crumbs); |
|
# |
|
# The first one should be the course, I guess. |
|
if (exists($ENV{'request.course.id'})) { |
|
my $cid = $ENV{'request.course.id'}; |
|
unshift(@Crumbs,{ |
|
href=>'/adm/menu', |
|
title=>'Go to main menu', |
|
text=>$ENV{'course.'.$cid.'.description'}, |
|
}); |
|
} |
|
my $links .= |
|
join('->', |
|
map { |
|
$faq = $_->{'faq'} if (exists($_->{'faq'})); |
|
$bug = $_->{'bug'} if (exists($_->{'bug'})); |
|
'<a href="'.$_->{'href'}.'" title="'.&mt($_->{'title'}).'">'. |
|
&mt($_->{'text'}).'</a>' |
|
} @Crumbs |
|
); |
|
$links .= '->' if ($links ne ''); |
|
$links .= '<b>'.$last->{'text'}.'</b>'; |
|
# |
|
my $icons = ''; |
|
$faq = $last->{'faq'} if (exists($last->{'faq'})); |
|
$bug = $last->{'bug'} if (exists($last->{'bug'})); |
|
if ($faq ne '') { |
|
$icons .= &Apache::loncommon::help_open_faq($faq); |
|
} |
|
if ($bug ne '') { |
|
$icons .= &Apache::loncommon::help_open_bug($bug); |
|
} |
|
if ($icons ne '') { |
|
$Str .= $icons.' '; |
|
} |
|
# |
|
$Str .= $links.'</font></td>'; |
|
# |
|
if (defined($component)) { |
|
$Str .= '<td align="right" bgcolor="'.$color.'">'. |
|
'<font size="+1">'.&mt($component).'</font>'; |
|
if (defined($component_help)) { |
|
$Str .= |
|
&Apache::loncommon::help_open_topic($component_help); |
|
} |
|
$Str.= '</td>'; |
|
} |
|
$Str .= '</tr></table>'."\n"; |
|
# |
|
# Return the @Crumbs stack to what we started with |
|
push(@Crumbs,$last); |
|
shift(@Crumbs); |
|
# |
|
return $Str; |
|
} |
|
|
|
sub clear_breadcrumbs { |
|
undef(@Crumbs); |
|
} |
|
|
|
sub add_breadcrumb { |
|
push (@Crumbs,@_); |
|
} |
|
|
|
} # End of scope for @Crumbs |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
|
1; |
1; |
|
|