--- loncom/interface/lonhtmlcommon.pm 2004/02/16 22:32:19 1.50 +++ loncom/interface/lonhtmlcommon.pm 2004/02/24 23:19:15 1.56 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.50 2004/02/16 22:32:19 albertel Exp $ +# $Id: lonhtmlcommon.pm,v 1.56 2004/02/24 23:19:15 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,7 +60,6 @@ use Time::HiRes; use Apache::lonlocal; use strict; - ############################################## ############################################## @@ -560,6 +559,8 @@ Inputs =item $type Either 'popup' or 'inline' (popup is assumed if nothing is 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 $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 @@ -632,10 +633,18 @@ Returns: none ######################################################## ######################################################## +my $uniq=0; +sub get_uniq_name { + $uniq++; + return 'uniquename'.$uniq; +} + # Create progress 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($width)) { $width=55; } my %prog_state; $prog_state{'type'}=$type; if ($type eq 'popup') { @@ -650,7 +659,7 @@ sub Create_PrgWin { "". "

$heading

". "
". - '
'. "\');". "popwin.document.close();}". @@ -660,14 +669,15 @@ sub Create_PrgWin { } elsif ($type eq 'inline') { $prog_state{'window'}='window'; if (!$formname) { - &r_print($r,'
'); - $prog_state{'formname'}='progresswindow'; + $prog_state{'formname'}=&get_uniq_name(); + &r_print($r,''); } else { $prog_state{'formname'}=$formname; } if (!$inputname) { - &r_print($r,''); - $prog_state{'inputname'}="progressline"; + $prog_state{'inputname'}=&get_uniq_name(); + &r_print($r,$heading.' '); } else { $prog_state{'inputname'}=$inputname; @@ -792,6 +802,159 @@ sub crumbs { return $output.'
'; } +# ------------------------------------------------- Output headers for HTMLArea + +sub htmlareaheaders { + unless (&htmlareabrowser()) { return ''; } + my $lang='en'; + return (< + + + +ENDHEADERS +} + +# ---------------------------------------------------------- Script to activate + +sub htmlareaactive { + unless (&htmlareabrowser()) { return ''; } + return (< + HTMLArea.replaceAll(); + +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". + ''. + ''; + # + if (defined($component)) { + $Str .= ''; + } + $Str .= '
'. + ''; + # 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 { + ''. + $_->{'text'}.'' + } @Crumbs + ); + $links .= '->' if ($links ne ''); + $links .= ''.$last->{'text'}.''; + # + my $icons = ''; + if (exists($last->{'faq'})) { + $icons .= &Apache::loncommon::help_open_faq($last->{'faq'}); + } + if (exists($last->{'bug'})) { + $icons .= &Apache::loncommon::help_open_bug($last->{'bug'}); + } + if ($icons ne '') { + $Str .= $icons.' '; + } + # + $Str .= $links.''. + ''.$component.''; + if (defined($component_help)) { + $Str .= + &Apache::loncommon::help_open_topic($component_help); + } + $Str.= '
'."\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,@_); + } + +} + +############################################################ +############################################################ + 1;