--- loncom/interface/lonhtmlcommon.pm 2004/02/16 22:32:19 1.50 +++ loncom/interface/lonhtmlcommon.pm 2004/03/03 22:55:35 1.59 @@ -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.59 2004/03/03 22:55:35 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,7 +60,6 @@ use Time::HiRes; use Apache::lonlocal; use strict; - ############################################## ############################################## @@ -202,6 +201,13 @@ Also, to be explicit, a value of 'now' a Additional html/javascript to be associated with each element in 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 Bugs @@ -213,7 +219,10 @@ The method used to restrict user input w ############################################## ############################################## 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') { unless ($includeempty) { $currentvalue = time; @@ -262,18 +271,39 @@ 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() { - var calwin=window.open( + if (! document.$formname.$dname\_month.disabled) { + var calwin=window.open( "/adm/announcements?pickdate=yes&formname=$formname&element=$dname&month="+ document.$formname.$dname\_month.value+"&year="+ document.$formname.$dname\_year.value, "LONCAPAcal", "height=350,width=350,scrollbars=yes,resizable=yes,menubar=no"); + } } ENDJS $result .= " \n"; - $result .= " \n"; - $result .= " \n"; $result .= "  "; - $result .= " \n"; if ($includeempty) { $result.=""; } for (my $h = 0;$h<24;$h++) { $result .= " \n\n"; @@ -560,6 +592,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 +666,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 +692,7 @@ sub Create_PrgWin { "". "

$heading

". "
". - '
'. "\');". "popwin.document.close();}". @@ -660,14 +702,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 +835,169 @@ 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 .= '
'. + ''; + # + # 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'})); + ''. + &mt($_->{'text'}).'' + } @Crumbs + ); + $links .= '->' if ($links ne ''); + $links .= ''.$last->{'text'}.''; + # + 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.''. + ''.&mt($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,@_); + } + +} # End of scope for @Crumbs + +############################################################ +############################################################ + 1;