--- loncom/homework/structuretags.pm 2005/11/08 21:09:08 1.318 +++ loncom/homework/structuretags.pm 2007/10/30 00:17:09 1.407 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.318 2005/11/08 21:09:08 albertel Exp $ +# $Id: structuretags.pm,v 1.407 2007/10/30 00:17:09 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,16 +36,30 @@ use Apache::File(); use Apache::lonmenu; use Apache::lonlocal; use Apache::lonxml; +use Apache::lonenc(); use Time::HiRes qw( gettimeofday tv_interval ); +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + BEGIN { - &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); + &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); } sub start_web { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; - my $bodytext=&Apache::lonxml::get_all_text("/web",$parser); - if ($target eq 'web') { - return $bodytext; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target ne 'edit' && $target ne 'modified') { + my $bodytext=&Apache::lonxml::get_all_text("/web",$parser,$style); + if ($target eq 'web' || $target eq 'webgrade') { + return $bodytext; + } + } elsif ($target eq "edit" ) { + my $bodytext = + &Apache::lonxml::get_all_text_unbalanced("/web",$parser); + my $result = &Apache::edit::tag_start($target,$token); + $result .= &Apache::edit::editfield($token->[1],$bodytext,'',80,1); + return $result; + } elsif ( $target eq "modified" ) { + return $token->[4].&Apache::edit::modifiedfield("/web",$parser); } return ''; } @@ -55,11 +69,21 @@ sub end_web { } sub start_tex { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser); - if ($target eq 'tex') { - return $bodytext.' '; + if ($target ne 'edit' && $target ne 'modified') { + my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style); + if ($target eq 'tex') { + return $bodytext.' '; + } + } elsif ($target eq "edit" ) { + my $bodytext = + &Apache::lonxml::get_all_text_unbalanced("/tex",$parser); + my $result = &Apache::edit::tag_start($target,$token); + $result .= &Apache::edit::editfield($token->[1],$bodytext,'',80,1); + return $result; + } elsif ( $target eq "modified" ) { + return $token->[4].&Apache::edit::modifiedfield("/tex",$parser); } return $result;; } @@ -68,35 +92,34 @@ sub end_tex { return ''; } -sub body_tag_start { - my ($target,$background,$bgcolor)=@_; - my $body_tag_start=' +function setSubmittedPart (part) { + this.document.lonhomework.submitted.value="part_"+part; +} + +function image_response_click (which, e) { + init_geometry(); + if (!e) { e = window.event; } //IE + var input_element = document.lonhomework.elements[which]; + var token_element = document.lonhomework.elements[which+'_token']; + var token = token_element.value; + var img_element = document.getElementById(which+'_imageresponse'); + var x= e.clientX-getX(img_element)+Geometry.getHorizontalScroll(); + var y= e.clientY-getY(img_element)+Geometry.getVerticalScroll(); + var click = x+':'+y; + input_element.value = click; + img_element.src = '/adm/randomlabel.png?token='+token+'&clickdata='+click; +} + +JS } sub page_start { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, + $extra_head)=@_; my %found; foreach my $taginside (@$tagstack) { foreach my $taglookedfor ('html','body','form') { @@ -104,83 +127,138 @@ sub page_start { } } - my $result; - my $head_tag_start; - if (!defined($found{'html'})) { - $result=&Apache::londefdef::start_html($target,$token,$tagstack, - $parstack,$parser,$safeeval); - $head_tag_start=''.&Apache::lonmenu::registerurl(undef,$target). - &Apache::lonhtmlcommon::htmlareaheaders(). - &Apache::lonhtmlcommon::spellheader(). - &Apache::lonxml::fontsettings(); - } - my $body_tag_start; - if (!defined($found{'body'}) && $env{'request.state'} eq 'construct') { - if ($env{'environment.remote'} eq 'off') { - if ($target eq 'web' || $target eq 'edit') { - $body_tag_start=&Apache::loncommon::bodytag(); - $body_tag_start.=&Apache::lonxml::message_location(); - } - } else { - if ($target eq 'web' || $target eq 'edit') { - $body_tag_start=&Apache::loncommon::bodytag(undef,undef,undef,1); - $body_tag_start.=&Apache::lonxml::message_location(); + if ($target eq 'tex') { + return + &Apache::londefdef::start_html($target,$token,$tagstack, + $parstack,$parser,$safeeval); + } + + $extra_head .= &homework_js(); + + my %body_args; + if (defined($found{'html'})) { + $body_args{'skip_phases'}{'head'}=1; + } else { + + $extra_head .= &Apache::lonhtmlcommon::spellheader(); + + $extra_head .= &Apache::londefdef::generate_css_links(); + + if ($env{'request.state'} eq 'construct') { + $extra_head.=&Apache::edit::js_change_detection(). + "\n"; + } + } + + if (defined($found{'body'})) { + $body_args{'skip_phases'}{'body'}=1; + } elsif (!defined($found{'body'}) + && $env{'request.state'} eq 'construct') { + if ($target eq 'web' || $target eq 'edit') { + if ($env{'environment.remote'} ne 'off') { + $body_args{'only_body'} = 1; } } } elsif (!defined($found{'body'})) { + my %add_entries; my $background=&Apache::lonxml::get_param('background',$parstack, $safeeval); + if ($background ne '' ) { + $add_entries{'background'} = $background; + } + my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack, $safeeval); - $body_tag_start=&body_tag_start($target,$background,$bgcolor); - if ( ($target eq 'web' || $target eq 'webgrade') - && $env{'request.state'} ne 'construct') { - my ($symb,undef,undef,undef,$publicuser)= - &Apache::lonxml::whichuser(); - if ($symb eq '' && !$publicuser) { - my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference"); - $help=&mt("Browsing resource, all submissions are temporary.")."
"; - $body_tag_start.=$help; - } + if ($bgcolor eq '' ) { $bgcolor = '#FFFFFF'; } + + $body_args{'bgcolor'} = $bgcolor; + $body_args{'no_title'} = 1; + $body_args{'force_register'} = 1; + $body_args{'add_entries'} = \%add_entries; + if ($env{'environment.remote'} eq 'off' + && $env{'request.state'} eq 'construct') { + $body_args{'only_body'} = 1; + } + } + $body_args{'no_auto_mt_title'} = 1; + my $page_start = &Apache::loncommon::start_page($name,$extra_head, + \%body_args); + + if (!defined($found{'body'}) + && $env{'request.state'} ne 'construct' + && ($target eq 'web' || $target eq 'webgrade')) { + + my ($symb,undef,undef,undef,$publicuser)= &Apache::lonnet::whichuser(); + if ($symb eq '' && !$publicuser) { + my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference"); + $help=&mt("Browsing resource, all submissions are temporary.")."
"; + $page_start .= $help; } - $body_tag_start.=&Apache::lonxml::message_location(); } + + if (!defined($found{'body'})) { + $page_start .= &Apache::lonxml::message_location(); + } + my $form_tag_start; if (!defined($found{'form'})) { - $form_tag_start='
'; + $form_tag_start=''."\n"; + } } - return ($result,$head_tag_start,$body_tag_start,$form_tag_start); + return ($page_start,$form_tag_start); } #use Time::HiRes(); sub get_resource_name { my ($parstack,$safeeval)=@_; + my $name; if (defined($Apache::lonhomework::name)) { - return $Apache::lonhomework::name; - } - my ($symb)=&Apache::lonxml::whichuser(); - my $name=&Apache::lonnet::gettitle($symb); - if ($name eq '') { - $name=&Apache::lonnet::EXT('resource.title'); - if ($name eq 'con_lost') { $name = ''; } - } - if ($name!~/\S+/) { - $name=$env{'request.uri'}; - $name=~s-.*/([^/]+)$-$1-; + $name = $Apache::lonhomework::name; + } else { + my ($symb)=&Apache::lonnet::whichuser(); + $name=&Apache::lonnet::gettitle($symb); + if ($name eq '') { + $name=&Apache::lonnet::EXT('resource.title'); + if ($name eq 'con_lost') { $name = ''; } + } + if ($name!~/\S+/) { + $name=$env{'request.uri'}; + $name=~s-.*/([^/]+)$-$1-; + } + # The name has had html tags escaped: + + $name=~s/<//gs; + + $Apache::lonhomework::name=$name; } - $Apache::lonhomework::name=$name; return $name; } sub setup_rndseed { my ($safeeval)=@_; my $rndseed; - my ($symb)=&Apache::lonxml::whichuser(); - if ($env{'request.state'} eq "construct" || $symb eq '' || - $Apache::lonhomework::history{'resource.CODE'}) { + my ($symb)=&Apache::lonnet::whichuser(); + if ($env{'request.state'} eq "construct" + || $symb eq '' + || $Apache::lonhomework::type eq 'practice' + || $Apache::lonhomework::history{'resource.CODE'}) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['rndseed']); $rndseed=$env{'form.rndseed'}; @@ -191,7 +269,8 @@ sub setup_rndseed { } $env{'form.rndseed'}=$rndseed; } - if ($env{'form.resetdata'} eq &mt('New Problem Variation') || + if ( ($env{'form.resetdata'} eq &mt('New Problem Variation') + && $env{'form.submitted'} eq 'yes') || $env{'form.newrandomization'} eq &mt('New Randomization')) { srand(time); $rndseed=int(rand(2100000000)); @@ -225,20 +304,22 @@ sub problem_edit_header { &Apache::structuretags::remember_problem_state().' - -
+ + +
-
'. - &Apache::loncommon::help_open_menu('','Problem Editing Help','Problem_Editor_XML_Index','',5,'Authoring',undef,undef,undef,'Problem Editing Help') - .'
'. + +
'. + &Apache::loncommon::help_open_menu('Problem Editing Help','Problem_Editor_XML_Index',5,'Authoring',undef,undef,undef,'Problem Editing Help') + .'
'. '
'; } sub problem_edit_footer { return '

'. - &Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields). - "\n
\n".&Apache::loncommon::endbodytag()."\n"; + &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()). + "\n\n".&Apache::loncommon::end_page(); } sub option { @@ -253,31 +334,44 @@ sub option { sub problem_web_to_edit_header { my ($rndseed)=@_; - my $result.=''; + my $result .= '
'; + + $result.='
'; + $result.=''; + $result .= ''; + $result .= ''; + $result.='
'; + if (!$Apache::lonhomework::parsing_a_task) { - $result .= ''; + $result .= + '
'. + &mt('Problem Testing'). + &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area'). + '
'; + } else { + $result .= + '
'. + &mt('Task Testing'). + '
'; } - $result .= ' - - - - -