--- loncom/interface/lonhtmlcommon.pm 2004/11/30 18:42:09 1.101 +++ loncom/interface/lonhtmlcommon.pm 2005/06/06 15:54:28 1.107 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.101 2004/11/30 18:42:09 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.107 2005/06/06 15:54:28 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -55,10 +55,11 @@ html. package Apache::lonhtmlcommon; +use strict; use Time::Local; use Time::HiRes; use Apache::lonlocal; -use strict; +use Apache::lonnet; ############################################## ############################################## @@ -80,7 +81,7 @@ sub authorbombs { foreach (keys %bombs) { if ($_=~/^$udom\/$uname\//) { return '<a href="/adm/bombs/'.$url. - '"><img src="/adm/lonMisc/bomb.gif" border="0" /></a>'. + '"><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/bomb.gif').'" border="0" /></a>'. &Apache::loncommon::help_open_topic('About_Bombs'); } } @@ -132,9 +133,6 @@ sub select_recent { foreach (sort keys %recent) { unless ($_=~/^error\:/) { my $escaped = &Apache::loncommon::escape_url($_); - if ($_ =~ /\/$/ && $escaped !~ /\/$/) { - $escaped .= '/'; - } $return.="\n<option value='$escaped'>". &Apache::lonnet::unescape((split(/\&/,$recent{$_}))[1]). '</option>'; @@ -261,6 +259,7 @@ The method used to restrict user input w sub date_setter { my ($formname,$dname,$currentvalue,$special,$includeempty,$state, $no_hh_mm_ss) = @_; + my $wasdefined=1; if (! defined($state) || $state ne 'disabled') { $state = ''; } @@ -270,6 +269,7 @@ sub date_setter { if (! defined($currentvalue) || $currentvalue eq 'now') { unless ($includeempty) { $currentvalue = time; + $wasdefined=0; } else { $currentvalue = 0; } @@ -281,6 +281,10 @@ sub date_setter { localtime($currentvalue); $year += 1900; } + unless ($wasdefined) { + $sec=0; + $min=0; + } my $result = "\n<!-- $dname date setting form -->\n"; $result .= <<ENDJS; <script language="Javascript"> @@ -438,8 +442,8 @@ sub get_date_from_form { my ($dname) = @_; my ($sec,$min,$hour,$day,$month,$year); # - if (defined($ENV{'form.'.$dname.'_second'})) { - my $tmpsec = $ENV{'form.'.$dname.'_second'}; + if (defined($env{'form.'.$dname.'_second'})) { + my $tmpsec = $env{'form.'.$dname.'_second'}; if (($tmpsec =~ /^\d+$/) && ($tmpsec >= 0) && ($tmpsec < 60)) { $sec = $tmpsec; } @@ -447,8 +451,8 @@ sub get_date_from_form { } else { $sec = 0; } - if (defined($ENV{'form.'.$dname.'_minute'})) { - my $tmpmin = $ENV{'form.'.$dname.'_minute'}; + if (defined($env{'form.'.$dname.'_minute'})) { + my $tmpmin = $env{'form.'.$dname.'_minute'}; if (($tmpmin =~ /^\d+$/) && ($tmpmin >= 0) && ($tmpmin < 60)) { $min = $tmpmin; } @@ -456,28 +460,28 @@ sub get_date_from_form { } else { $min = 0; } - if (defined($ENV{'form.'.$dname.'_hour'})) { - my $tmphour = $ENV{'form.'.$dname.'_hour'}; + if (defined($env{'form.'.$dname.'_hour'})) { + my $tmphour = $env{'form.'.$dname.'_hour'}; if (($tmphour =~ /^\d+$/) && ($tmphour >= 0) && ($tmphour < 24)) { $hour = $tmphour; } } else { $hour = 0; } - if (defined($ENV{'form.'.$dname.'_day'})) { - my $tmpday = $ENV{'form.'.$dname.'_day'}; + if (defined($env{'form.'.$dname.'_day'})) { + my $tmpday = $env{'form.'.$dname.'_day'}; if (($tmpday =~ /^\d+$/) && ($tmpday > 0) && ($tmpday < 32)) { $day = $tmpday; } } - if (defined($ENV{'form.'.$dname.'_month'})) { - my $tmpmonth = $ENV{'form.'.$dname.'_month'}; + if (defined($env{'form.'.$dname.'_month'})) { + my $tmpmonth = $env{'form.'.$dname.'_month'}; if (($tmpmonth =~ /^\d+$/) && ($tmpmonth > 0) && ($tmpmonth < 13)) { $month = $tmpmonth - 1; } } - if (defined($ENV{'form.'.$dname.'_year'})) { - my $tmpyear = $ENV{'form.'.$dname.'_year'}; + if (defined($env{'form.'.$dname.'_year'})) { + my $tmpyear = $env{'form.'.$dname.'_year'}; if (($tmpyear =~ /^\d+$/) && ($tmpyear > 1900)) { $year = $tmpyear - 1900; } @@ -539,8 +543,8 @@ sub javascript_nothing { my $nothing = "''"; my $user_browser; my $user_os; - $user_browser = $ENV{'browser.type'} if (exists($ENV{'browser.type'})); - $user_os = $ENV{'browser.os'} if (exists($ENV{'browser.os'})); + $user_browser = $env{'browser.type'} if (exists($env{'browser.type'})); + $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(); @@ -558,8 +562,8 @@ sub javascript_docopen { my $nothing = "''"; my $user_browser; my $user_os; - $user_browser = $ENV{'browser.type'} if (exists($ENV{'browser.type'})); - $user_os = $ENV{'browser.os'} if (exists($ENV{'browser.os'})); + $user_browser = $env{'browser.type'} if (exists($env{'browser.type'})); + $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(); @@ -586,7 +590,7 @@ enrollment status of students. The sele Inputs: $status: the currently selected status. If undefined the value of -$ENV{'form.Status'} is taken. If that is undefined, a value of 'Active' +$env{'form.Status'} is taken. If that is undefined, a value of 'Active' is used. $formname: The name of the form. If defined the onchange attribute of @@ -608,7 +612,7 @@ sub StatusOptions { $size = 1 if (!defined($size)); if (! defined($status)) { $status = 'Active'; - $status = $ENV{'form.Status'} if (exists($ENV{'form.Status'})); + $status = $env{'form.Status'} if (exists($env{'form.Status'})); } my $OpSel1 = ''; @@ -762,13 +766,14 @@ sub Create_PrgWin { $prog_state{'type'}=$type; if ($type eq 'popup') { $prog_state{'window'}='popwin'; + my $html=&Apache::lonxml::xmlbegin(); #the whole function called through timeout is due to issues #in mozilla Read BUG #2665 if you want to know the whole story &r_print($r,'<script>'. "var popwin; function openpopwin () { popwin=open(\'\',\'popwin\',\'width=400,height=100\');". - "popwin.document.writeln(\'<html><head><title>$title</title></head>". + "popwin.document.writeln(\'".$html."<head><title>$title</title></head>". "<body bgcolor=\"#88DDFF\">". "<h4>$heading</h4>". "<form name=popremain>". @@ -857,8 +862,8 @@ sub Increment_PrgWin { $lasttime = '('.$lasttime.' '.&mt('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'})); + 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(); @@ -909,7 +914,7 @@ sub crumbs { my $output=''; unless ($noformat) { $output.='<br /><tt><b>'; } $output.='<font size="'.$size.'">'.$prefix.'/'; - if ($ENV{'user.adv'}) { + if ($env{'user.adv'}) { my $path=$prefix.'/'; foreach my $dir (split('/',$uri)) { if (! $dir) { next; } @@ -932,7 +937,8 @@ sub crumbs { # --------------------- A function that generates a window for the spellchecker sub spellheader { - my $nothing = &javascript_nothing(); + my $html=&Apache::lonxml::xmlbegin(); + my $nothing=&javascript_nothing(); return (<<ENDCHECK); <script type="text/javascript"> //<!-- BEGIN LON-CAPA Internal @@ -940,7 +946,7 @@ var checkwin; function spellcheckerwindow() { checkwin=window.open($nothing,'spellcheckwin','height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); - checkwin.document.writeln('<html><body bgcolor="#DDDDDD"><form name="spellcheckform" action="/adm/spellcheck" method="post"><input type="hidden" name="text" value="" /></form></body></html>'); + checkwin.document.writeln('$html<head></head><body bgcolor="#DDDDDD"><form name="spellcheckform" action="/adm/spellcheck" method="post"><input type="hidden" name="text" value="" /></form></body></html>'); checkwin.document.close(); } // END LON-CAPA Internal --> @@ -954,7 +960,7 @@ sub spelllink { my ($form,$field)=@_; my $linktext=&mt('Check Spelling'); return (<<ENDLINK); -<a href="javascript:if (typeof(document.$form.onsubmit)!='undefined') { document.$form.onsubmit();};spellcheckerwindow();checkwin.document.forms.spellcheckform.text.value=this.document.forms.$form.$field.value;checkwin.document.forms.spellcheckform.submit();">$linktext</a> +<a href="javascript:if (typeof(document.$form.onsubmit)!='undefined') { if (document.$form.onsubmit!=null) { document.$form.onsubmit();}};spellcheckerwindow();checkwin.document.forms.spellcheckform.text.value=this.document.forms.$form.$field.value;checkwin.document.forms.spellcheckform.submit();">$linktext</a> ENDLINK } @@ -1037,7 +1043,7 @@ sub htmlareaselectactive { # --------------------------------------------------------------------- Blocked sub htmlareablocked { - unless ($ENV{'environment.wysiwygeditor'} eq 'on') { return 1; } + unless ($env{'environment.wysiwygeditor'} eq 'on') { return 1; } return 0; } @@ -1112,6 +1118,7 @@ returns: nothing # Make the faq and bug data cascade my $faq = ''; my $bug = ''; + my $help=''; # The last breadcrumb does not have a link, so handle it separately. my $last = pop(@Crumbs); # @@ -1119,10 +1126,10 @@ returns: nothing if (!defined($menulink)) { $menulink=1; } if ($menulink) { my $description = 'Menu'; - if (exists($ENV{'request.course.id'}) && - $ENV{'request.course.id'} ne '') { + if (exists($env{'request.course.id'}) && + $env{'request.course.id'} ne '') { $description = - $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; + $env{'course.'.$env{'request.course.id'}.'.description'}; } unshift(@Crumbs,{ href =>'/adm/menu', @@ -1136,6 +1143,7 @@ returns: nothing map { $faq = $_->{'faq'} if (exists($_->{'faq'})); $bug = $_->{'bug'} if (exists($_->{'bug'})); + $help = $_->{'help'} if (exists($_->{'help'})); my $result = '<a href="'.$_->{'href'}.'" '; if (defined($_->{'target'}) && $_->{'target'} ne '') { $result .= 'target="'.$_->{'target'}.'" '; @@ -1151,6 +1159,8 @@ returns: nothing my $icons = ''; $faq = $last->{'faq'} if (exists($last->{'faq'})); $bug = $last->{'bug'} if (exists($last->{'bug'})); + $help = $last->{'help'} if (exists($last->{'help'})); + $component_help=($component_help?$component_help:$help); # if ($faq ne '') { # $icons .= &Apache::loncommon::help_open_faq($faq); # }