--- loncom/homework/structuretags.pm 2007/09/11 23:53:05 1.397 +++ loncom/homework/structuretags.pm 2007/10/16 23:20:25 1.404 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.397 2007/09/11 23:53:05 albertel Exp $ +# $Id: structuretags.pm,v 1.404 2007/10/16 23:20:25 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -92,6 +92,31 @@ sub end_tex { return ''; } +sub homework_js { + return &Apache::loncommon::resize_textarea_js(). + <<'JS'; + +JS +} + sub page_start { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, $extra_head)=@_; @@ -108,13 +133,7 @@ sub page_start { $parstack,$parser,$safeeval); } - $extra_head.= ' - -'; + $extra_head .= &homework_js(); my %body_args; if (defined($found{'html'})) { @@ -139,7 +158,9 @@ function setSubmittedPart (part) { } elsif (!defined($found{'body'}) && $env{'request.state'} eq 'construct') { if ($target eq 'web' || $target eq 'edit') { - # no extra args to bodytag + if ($env{'environment.remote'} ne 'off') { + $body_args{'only_body'} = 1; + } } } elsif (!defined($found{'body'})) { my %add_entries; @@ -1143,27 +1164,38 @@ sub start_languageblock { $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $include = $token->[2]->{'include'}; my $exclude = $token->[2]->{'exclude'}; - my $preferred_language=(&Apache::loncommon::preferred_languages)[0]; + my @preferred_languages=&Apache::loncommon::preferred_languages(); # This should not even happen, since we should at least have the server language - if (!$preferred_language) { $preferred_language='en'; } + if (!$preferred_languages[0]) { $preferred_languages[0]='en'; } +# Now loop over all languages in order of preference + foreach my $preferred_language (@preferred_languages) { # If the languageblock has no arguments, show the contents - $result='1'; + $result=1; + my $found=0; # Do we have an include argument? - if ($include) { + if ($include) { # If include is specified, by default, don't render the block - $result=''; - foreach my $included_language (split(/\,/,$include)) { + $result=0; + foreach my $included_language (split(/\,/,$include)) { # ... but if my preferred language is included, render it - if ($included_language eq $preferred_language) { $result='1'; } - } - } + if ($included_language eq $preferred_language) { + $result=1; + $found=1; + } + } + } # Do we have an exclude argument? - if ($exclude) { - $result='1'; - foreach my $excluded_language (split(/\,/,$exclude)) { - if ($excluded_language eq $preferred_language) { $result='0'; } - } - } + if ($exclude) { + $result=1; + foreach my $excluded_language (split(/\,/,$exclude)) { + if ($excluded_language eq $preferred_language) { + $result=0; + $found=1; + } + } + } + if ($found) { last; } + } if ( ! $result ) { my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser, $style); @@ -1457,6 +1489,8 @@ sub start_part { @Apache::inputtags::previous=(); @Apache::inputtags::previous_version=(); $Apache::lonhomework::problemstatus=&get_problem_status($id); + &Apache::response::reset_params(); + my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part); my $newtype=&Apache::lonnet::EXT("resource.$id.type"); if ($newtype) { $Apache::lonhomework::type=$newtype; } @@ -1713,6 +1747,13 @@ sub start_startouttext { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my @result=(''.''); if ($target eq 'edit' || $target eq 'modified' ) { @result=('','no'); } + + my $nesting = + &Apache::lonxml::set_state('outtext', + &Apache::lonxml::get_state('outtext')+1); + if ($nesting > 1 && $env{'request.state'} eq 'construct') { + &Apache::lonxml::error("Nesting of <startouttext /> not allowed, on line ".$token->[5]); + } return (@result); } @@ -1752,6 +1793,14 @@ sub start_endouttext { $result=''. &Apache::edit::handle_insertafter('startouttext'); } + + my $nesting = + &Apache::lonxml::set_state('outtext', + &Apache::lonxml::get_state('outtext')-1); + if ($nesting < 0 && $env{'request.state'} eq 'construct') { + &Apache::lonxml::error(" Extraneous <endouttext /> not allowed on line ".$token->[5]); + &Apache::lonxml::set_state('outtext', 0); + } return $result; }