--- loncom/interface/lonhtmlcommon.pm 2005/11/15 20:46:40 1.118 +++ loncom/interface/lonhtmlcommon.pm 2006/05/12 16:45:41 1.128 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.118 2005/11/15 20:46:40 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.128 2006/05/12 16:45:41 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -178,6 +178,7 @@ sub get_recent { sub textbox { my ($name,$value,$size,$special) = @_; $size = 40 if (! defined($size)); + $value = &HTML::Entities::encode($value,'<>&"'); my $Str = ''; return $Str; @@ -207,6 +208,28 @@ sub checkbox { return $Str; } + +=pod + +=item radiobutton + +=cut + +############################################## +############################################## +sub radio { + my ($name,$checked,$value) = @_; + my $Str = '137)) { return undef; } if (defined($sec) && defined($min) && defined($hour) && defined($day) && defined($month) && defined($year) && - eval(&timelocal($sec,$min,$hour,$day,$month,$year))) { + eval('&timelocal($sec,$min,$hour,$day,$month,$year)')) { return &timelocal($sec,$min,$hour,$day,$month,$year); } else { return undef; @@ -781,20 +804,25 @@ sub Create_PrgWin { $prog_state{'type'}=$type; if ($type eq 'popup') { $prog_state{'window'}='popwin'; - my $html=&Apache::lonxml::xmlbegin(); + my $start_page = + &Apache::loncommon::start_page($title,undef, + {'only_body' => 1, + 'bgcolor' => '#88DDFF', + 'js_ready' => 1}); + my $end_page = &Apache::loncommon::end_page({'js_ready' => 1}); + #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,'"); $prog_state{'formname'}='popremain'; @@ -952,7 +980,14 @@ sub crumbs { # --------------------- A function that generates a window for the spellchecker sub spellheader { - my $html=&Apache::lonxml::xmlbegin(); + my $start_page= + &Apache::loncommon::start_page('Speller Suggestions',undef, + {'only_body' => 1, + 'js_ready' => 1, + 'bgcolor' => '#DDDDDD',}); + my $end_page= + &Apache::loncommon::end_page({'js_ready' => 1}); + my $nothing=&javascript_nothing(); return (< @@ -961,7 +996,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
'); + checkwin.document.writeln('$start_page
$end_page'); checkwin.document.close(); } // END LON-CAPA Internal --> @@ -981,6 +1016,22 @@ ENDLINK # ------------------------------------------------- Output headers for HTMLArea +{ + my @htmlareafields; + sub init_htmlareafields { + undef(@htmlareafields); + } + + sub add_htmlareafields { + my (@newfields) = @_; + push(@htmlareafields,@newfields); + } + + sub get_htmlareafields { + return @htmlareafields; + } +} + sub htmlareaheaders { if (&htmlareablocked()) { return ''; } unless (&htmlareabrowser()) { return ''; } @@ -1115,20 +1166,9 @@ returns: nothing my @Crumbs; sub breadcrumbs { - my ($color,$component,$component_help,$function,$domain,$menulink, - $helplink) = @_; - if (! defined($color)) { - if (! defined($function)) { - $function = &Apache::loncommon::get_users_function(); - } - $color = &Apache::loncommon::designparm($function.'.tabbg', - $domain); - } + my ($component,$component_help,$menulink,$helplink) = @_; # - my $Str = "\n". - ''. - '
'. - ''; + my $Str = "\n".''; + $Str .= $links.''; # if (defined($component)) { - $Str .= ''; + $Str .= ''; } $Str .= '
'; # # Make the faq and bug data cascade my $faq = ''; @@ -1183,17 +1223,19 @@ returns: nothing # $icons .= &Apache::loncommon::help_open_bug($bug); # } if ($helplink ne 'nohelp') { - $icons .= &Apache::loncommon::help_open_menu($color,$component,$component_help,$function,$faq,$bug); + $icons .= &Apache::loncommon::help_open_menu(undef,$component, + $component_help, + undef,$faq,$bug); } if ($icons ne '') { $Str .= $icons.' '; } # - $Str .= $links.''. - ''.&mt($component).''. + &mt($component).'
'."\n"; # @@ -1337,7 +1379,7 @@ sub role_select_row { if (defined($title)) { $output = &row_title($col_width,$tablecolor,$title); } - $output .= qq|
+ $output .= qq| + $output .= qq| '."\n"; + } + } else { + my $value = &HTML::Entities::encode($env{$key},'<>&"'); + $output .= ''."\n"; + } + } + } + } + } + return $output; +} + +############################################## +############################################## + +# set_form_elements +# +# Generates javascript to set form elements to values based on +# corresponding values for the same form elements when the page was +# previously submitted. +# +# Last submission values are read from hidden form elements in referring +# page which have the same name, i.e., generated by &echo_form_input(). +# +# Intended to be called by onload event. +# +# Inputs: +# (a) Reference to hash of echoed form elements to be set. +# +# In the hash, keys are the form element names, and the values are the +# element type (selectbox, radio, checkbox or text -for textbox, textarea or +# hidden). +# +# (b) Optional reference to hash of stored elements to be set. +# +# If the page being displayed is a page which permits modification of +# previously stored data, e.g., the first page in a multi-page submission, +# then if stored is supplied, form elements will be set to the last stored +# values. If user supplied values are also available for the same elements +# these will replace the stored values. +# +# Output: +# +# javascript function - set_form_elements() which sets form elements, +# expects an argument: formname - the name of the form according to +# the DOM, e.g., document.compose + +sub set_form_elements { + my ($elements,$stored) = @_; + my %values; + my $output .= 'function setFormElements(courseForm) { +'; + if (defined($stored)) { + foreach my $name (keys(%{$stored})) { + if (exists($$elements{$name})) { + if (ref($$stored{$name}) eq 'ARRAY') { + $values{$name} = $$stored{$name}; + } else { + @{$values{$name}} = ($$stored{$name}); + } + } + } + } + + foreach my $key (keys(%env)) { + if ($key =~ /^form\.(.+)$/) { + my $name = $1; + if (exists($$elements{$name})) { + @{$values{$name}} = &Apache::loncommon::get_env_multiple($key); + } + } + } + + foreach my $name (keys(%values)) { + for (my $i=0; $i<@{$values{$name}}; $i++) { + $values{$name}[$i] = &HTML::Entities::decode($values{$name}[$i],'<>&"'); + $values{$name}[$i] =~ s/([\r\n\f]+)/\\n/g; + $values{$name}[$i] =~ s/"/\\"/g; + } + if ($$elements{$name} eq 'text') { + my $numvalues = @{$values{$name}}; + if ($numvalues > 1) { + my $valuestring = join('","',@{$values{$name}}); + $output .= qq| + var textvalues = new Array ("$valuestring"); + var total = courseForm.$name.length; + if (total > $numvalues) { + total = $numvalues; + } + for (var i=0; i