--- loncom/homework/structuretags.pm 2000/12/29 21:54:06 1.25 +++ loncom/homework/structuretags.pm 2010/06/05 19:36:57 1.469 @@ -1,300 +1,2134 @@ -# The LearningOnline Network with CAPA # +JS +} + +sub setmode_javascript { + return <<"ENDSCRIPT"; + +ENDSCRIPT +} + +sub page_start { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, + $extra_head)=@_; + my %found; + foreach my $taginside (@$tagstack) { + foreach my $taglookedfor ('html','body','form') { + if ($taginside =~ /^$taglookedfor$/i) {$found{$taglookedfor} = 1;} + } + } + + if ($target eq 'tex') { + return + &Apache::londefdef::start_html($target,$token,$tagstack, + $parstack,$parser,$safeeval); + } + + $extra_head .= &homework_js(); + + if ($env{'environment.wysiwygeditor'} eq 'on') { + $extra_head .= &Apache::lonhtmlcommon::dragmath_js("FCKEditMathPopup"); + } else { + $extra_head .= &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); + } + + 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"; + } + } + + my $pageheader = ''; + 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') { + # Breadcrumbs for Construction Space + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb({ + 'text' => 'Construction Space', + 'href' => &Apache::loncommon::authorspace(), + }); + # breadcrumbs (and tools) will be created + # in start_page->bodytag->innerregister + +# FIXME Where are we? +# &Apache::lonhtmlcommon::add_breadcrumb({ +# 'text' => 'Problem Editing', # 'Problem Testing' +# 'href' => '', +# }); + $pageheader =&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader()); + } + } 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); + 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{'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); + $page_start .= $pageheader; + 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) { + $page_start .= '

' + .&mt('Browsing resource, all submissions are temporary.') + .'

'; + } + } + + if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') { + $page_start .= &Apache::lonxml::message_location(); + } + + my $form_tag_start; + if (!defined($found{'form'})) { + $form_tag_start='
'."\n"; + } + } + return ($page_start,$form_tag_start); +} + +#use Time::HiRes(); +sub get_resource_name { + my ($parstack,$safeeval)=@_; + my $name; + if (defined($Apache::lonhomework::name)) { + $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; + } + return $name; +} + +sub setup_rndseed { + my ($safeeval)=@_; + my $rndseed; + 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'}; + if (!$rndseed) { + $rndseed=$Apache::lonhomework::history{'rndseed'}; + if (!$rndseed) { + $rndseed=time; + } + $env{'form.rndseed'}=$rndseed; + } + 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)); + $env{'form.rndseed'}=$rndseed; + delete($env{'form.resetdata'}); + delete($env{'form.newrandomization'}); + } + if (defined($rndseed) && $rndseed ne int($rndseed)) { + $rndseed=join(':',&Apache::lonnet::digest($rndseed)); + } + if ($Apache::lonhomework::history{'resource.CODE'}) { + $rndseed=&Apache::lonnet::rndseed(); + } + if ($safeeval) { + &Apache::lonxml::debug("Setting rndseed to $rndseed"); + &Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); + } + } + return $rndseed; +} + +sub remember_problem_state { + return ' + + + '; +} + +sub problem_edit_buttons { + return ' +
+ + + +
+
+ + +
'; +} + +sub problem_edit_header { + return ''. + &Apache::structuretags::remember_problem_state().' +
+
+'.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' +
'. +&problem_edit_buttons().' +
+'.&Apache::lonxml::message_location().' +
+'. + '
'; +} + +sub problem_edit_footer { + return '

+ +'. + + &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()). + "\n
\n".&Apache::loncommon::end_page(); +} + +sub option { + my ($value,$name) = @_; + my $result ="