--- loncom/interface/loncommon.pm 2004/09/24 22:07:34 1.214 +++ loncom/interface/loncommon.pm 2004/10/21 09:53:44 1.221 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.214 2004/09/24 22:07:34 albertel Exp $ +# $Id: loncommon.pm,v 1.221 2004/10/21 09:53:44 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -254,6 +254,7 @@ sub browser_and_searcher_javascript { if (!defined($mode)) { $mode='edit'; } my $resurl=&lastresurl(); return <<END; +// <!-- BEGIN LON-CAPA Internal var editbrowser = null; function openbrowser(formname,elementname,only,omit,titleelement) { var url = '$resurl/?'; @@ -265,16 +266,22 @@ sub browser_and_searcher_javascript { url += 'form=' + formname + '&'; if (only != null) { url += 'only=' + only + '&'; - } + } else { + url += 'only=&'; + } if (omit != null) { url += 'omit=' + omit + '&'; - } + } else { + url += 'omit=&'; + } if (titleelement != null) { url += 'titleelement=' + titleelement + '&'; - } + } else { + url += 'titleelement=&'; + } url += 'element=' + elementname + ''; var title = 'Browser'; - var options = 'scrollbars=1,resizable=1,menubar=0'; + var options = 'scrollbars=1,resizable=1,menubar=1,location=1'; options += ',width=700,height=600'; editbrowser = open(url,title,options,'1'); editbrowser.focus(); @@ -290,7 +297,9 @@ sub browser_and_searcher_javascript { url += 'form=' + formname + '&'; if (titleelement != null) { url += 'titleelement=' + titleelement + '&'; - } + } else { + url += 'titleelement=&'; + } url += 'element=' + elementname + ''; var title = 'Search'; var options = 'scrollbars=1,resizable=1,menubar=0'; @@ -298,6 +307,7 @@ sub browser_and_searcher_javascript { editsearcher = open(url,title,options,'1'); editsearcher.focus(); } +// END LON-CAPA Internal --> END } @@ -483,7 +493,7 @@ sub linked_select_forms { my $first = "document.$formname.$firstselectname"; # output the javascript to do the changing my $result = ''; - $result.="<script>\n"; + $result.="<script type=\"text/javascript\">\n"; $result.="var select2data = new Object();\n"; $" = '","'; my $debug = ''; @@ -611,8 +621,9 @@ sub help_open_topic { # Add the graphic my $title = &mt('Online Help'); + my $helpicon=&lonhttpdurl("/adm/help/gif/smallHelp.gif"); $template .= <<"ENDTEMPLATE"; - <a href="$link" title="$title"><image src="/adm/help/gif/smallHelp.gif" border="0" alt="(Help: $topic)" /></a> + <a href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a> ENDTEMPLATE if ($text ne '') { $template.='</td></tr></table>' }; return $template; @@ -670,8 +681,10 @@ sub help_open_menu { "<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>". "<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>"; } + my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif"); $template .= <<"ENDTEMPLATE"; - <script> + <script type="text/javascript"> +//<!-- BEGIN LON-CAPA Internal function helpMenu(caller) { if (caller == 'open') { newWindow = window.open("","helpmenu","HEIGHT=$height,WIDTH=$width,resize=yes,scrollbars=yes" ) @@ -687,8 +700,9 @@ function helpMenu(caller) { caller.focus() } } +// END LON-CAPA Internal --> </script> - <a href="$link" title="$title"><image src="/adm/lonIcons/helpgateway.gif" border="0" alt="(Help Menu)" /></a> + <a href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help Menu)" /></a> ENDTEMPLATE if ($component_help) { if (!$text) { @@ -743,8 +757,9 @@ sub help_open_bug { # Add the graphic my $title = &mt('Report a Bug'); + my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif"); $template .= <<"ENDTEMPLATE"; - <a href="$link" title="$title"><image src="/adm/lonMisc/smallBug.gif" border="0" alt="(Bug: $topic)" /></a> + <a href="$link" title="$title"><img src="$bugicon" border="0" alt="(Bug: $topic)" /></a> ENDTEMPLATE if ($text ne '') { $template.='</td></tr></table>' }; return $template; @@ -787,8 +802,9 @@ sub help_open_faq { # Add the graphic my $title = &mt('View the FAQ'); + my $faqicon=&lonhttpdurl("/adm/lonMisc/smallFAQ.gif"); $template .= <<"ENDTEMPLATE"; - <a href="$link" title="$title"><image src="/adm/lonMisc/smallFAQ.gif" border="0" alt="(FAQ: $topic)" /></a> + <a href="$link" title="$title"><img src="$faqicon" border="0" alt="(FAQ: $topic)" /></a> ENDTEMPLATE if ($text ne '') { $template.='</td></tr></table>' }; return $template; @@ -2415,10 +2431,8 @@ sub domainlogo { my $domain = &determinedomain(shift); # See if there is a logo if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') { - my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; - if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } - return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort. - '/adm/lonDomLogos/'.$domain.'.gif" alt="'.$domain.'" />'; + my $logo=&lonhttpdurl("/adm/lonDomLogos/$domain.gif"); + return '<img src="'.$logo.'" alt="'.$domain.'" />'; } elsif(exists($Apache::lonnet::domaindescription{$domain})) { return $Apache::lonnet::domaindescription{$domain}; } else { @@ -2745,12 +2759,12 @@ returns cache-controlling header code =cut sub cacheheader { - unless ($ENV{'request.method'} eq 'GET') { return ''; } - my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); - my $output .='<meta HTTP-EQUIV="Expires" CONTENT="'.$date.'" /> + unless ($ENV{'request.method'} eq 'GET') { return ''; } + my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); + my $output .='<meta HTTP-EQUIV="Expires" CONTENT="'.$date.'" /> <meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" /> <meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />'; - return $output; + return $output; } =pod @@ -2762,12 +2776,13 @@ specifies header code to not have cache =cut sub no_cache { - my ($r) = @_; - unless ($ENV{'request.method'} eq 'GET') { return ''; } - #my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); - $r->no_cache(1); - $r->header_out("Pragma" => "no-cache"); - #$r->header_out("Expires" => $date); + my ($r) = @_; + if ($ENV{'REQUEST_METHOD'} ne 'GET' && + $ENV{'request.method'} ne 'GET') { return ''; } + my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime(time)); + $r->no_cache(1); + $r->header_out("Expires" => $date); + $r->header_out("Pragma" => "no-cache"); } sub content_type { @@ -3278,7 +3293,11 @@ sub DrawBarGraph { } # my ($height,$width,$xskip,$bar_width) = (200,120,1,15); - if ($NumBars < 10) { + if ($NumBars < 5) { + $width = 120+$NumBars*25; + $xskip = 1; + $bar_width = 25; + } elsif ($NumBars < 10) { $width = 120+$NumBars*15; $xskip = 1; $bar_width = 15; @@ -3561,8 +3580,8 @@ Inputs: sub chartlink { my ($linktext, $sname, $sdomain) = @_; my $link = '<a href="/adm/statistics?reportSelected=student_assessment'. - '&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). - '&chartoutputmode='.HTML::Entities::encode('html, with all links'). + '&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). + '&chartoutputmode='.HTML::Entities::encode('html, with all links'). '">'.$linktext.'</a>'; } @@ -3699,6 +3718,13 @@ sub icon { return $iconname; } +sub lonhttpdurl { + my ($url)=@_; + my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'}; + if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; } + return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url; +} + sub connection_aborted { my ($r)=@_; $r->print(" ");$r->rflush(); @@ -3706,6 +3732,31 @@ sub connection_aborted { return $c->aborted(); } +# +# Escapes strings that may have embedded 's that will be put into +# javascript strings as 'strings'. +# The assumptions are: +# There has been no effort to escape ' with \' +# Any \'s in the string are intended to be there as part of the URL +# and must also be escaped. +# Parameters: +# input - The string to escape. +# Returns: +# The escaped string (' replaced by \' and \ replaced by \\). +# +sub javascript_escape { + my ($input) = @_; + + # I imagine a regexp wizard could combine the two expressions below. + # If you do you might want to comment the result. + + $input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)> + $input =~ s/\'/\\\'/g; # Esacpe the 's.... + + return $input; +} + + =pod =back