--- loncom/homework/structuretags.pm 2015/03/11 14:50:10 1.512.2.9
+++ loncom/homework/structuretags.pm 2020/10/01 18:54:21 1.512.2.13.4.4
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.512.2.9 2015/03/11 14:50:10 raeburn Exp $
+# $Id: structuretags.pm,v 1.512.2.13.4.4 2020/10/01 18:54:21 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -63,6 +63,7 @@ use Apache::londefdef;
use Apache::lonenc();
use Apache::loncommon();
use Time::HiRes qw( gettimeofday tv_interval );
+use HTML::Entities();
use lib '/home/httpd/lib/perl/';
use LONCAPA;
@@ -270,6 +271,7 @@ sub homework_js {
$jstimeout = 1000 * $timeout;
}
return &Apache::loncommon::resize_textarea_js().
+ &Apache::loncommon::colorfuleditor_js().
&setmode_javascript().
<<"JS";
@@ -416,9 +420,13 @@ sub page_start {
$extra_head .= &homework_js().
&Apache::lonhtmlcommon::dragmath_js("EditMathPopup");
if (&Apache::lonhtmlcommon::htmlareabrowser()) {
- my %textarea_args = (
+ my %textarea_args;
+ if (($env{'request.state'} ne 'construct') ||
+ ($env{'environment.nocodemirror'})) {
+ %textarea_args = (
dragmath => 'math',
);
+ }
$extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);
}
my $is_task = ($env{'request.uri'} =~ /\.task$/);
@@ -643,10 +651,11 @@ sub setup_rndseed {
unless (defined($questiontype)) {
$questiontype = $Apache::lonhomework::type;
}
- if ($env{'request.state'} eq "construct"
- || $symb eq ''
- || $Apache::lonhomework::type eq 'practice'
- || $Apache::lonhomework::history{'resource.CODE'}) {
+ if (($env{'request.state'} eq "construct")
+ || ($symb eq '')
+ || ($Apache::lonhomework::type eq 'practice')
+ || ($Apache::lonhomework::history{'resource.CODE'})
+ || (($env{'form.code_for_randomlist'}) && ($target eq 'analyze'))) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['rndseed']);
$rndseed=$env{'form.rndseed'};
@@ -655,7 +664,9 @@ sub setup_rndseed {
if (!$rndseed) {
$rndseed=time;
}
- $env{'form.rndseed'}=$rndseed;
+ unless ($env{'form.code_for_randomlist'}) {
+ $env{'form.rndseed'}=$rndseed;
+ }
}
if (($env{'request.state'} eq "construct") &&
($Apache::lonhomework::type eq 'randomizetry')) {
@@ -683,7 +694,11 @@ sub setup_rndseed {
$rndseed=join(':',&Apache::lonnet::digest($rndseed));
}
}
- if ($Apache::lonhomework::history{'resource.CODE'}) {
+ if (($env{'form.code_for_randomlist'}) && ($target eq 'analyze')) {
+ $env{'form.CODE'} = $env{'form.code_for_randomlist'};
+ $rndseed=&Apache::lonnet::rndseed();
+ undef($env{'form.CODE'});
+ } elsif ($Apache::lonhomework::history{'resource.CODE'}) {
$rndseed=&Apache::lonnet::rndseed();
}
$set_safespace = 1;
@@ -751,53 +766,82 @@ sub problem_edit_action_button {
sub problem_edit_buttons {
my ($mode)=@_;
+# Buttons that save
+ my $result = '
';
+ if ($mode eq 'editxml') {
+ $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
+ $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');
+ } else {
+ $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
+ $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');
+ }
+ $result.="\n
\n";
# Buttons that do not save
- my $result=''.
+ $result .= '
'.
&problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1);
if ($mode eq 'editxml') {
$result.=&problem_edit_action_button('subedit','edit','e','Edit',1);
$result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1);
- $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);
+ if ($env{'environment.nocodemirror'}) {
+ $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);
+ }
} else {
$result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);
$result.=&problem_edit_action_button('subundo','undo','u','Undo',1);
}
$result.="\n
";
-# Buttons that save
- $result.='
';
- if ($mode eq 'editxml') {
- $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
- $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');
- } else {
- $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
- $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');
- }
- $result.="\n
\n";
return $result;
}
sub problem_edit_header {
- return '
'.
+ my ($mode)=@_;
+ my $return = '
'.
&remember_problem_state('edit').'
-
-'.
- '
';
+ ' . &Apache::lonxml::message_location();
+ $return .= '
+ ';
+
+ $return .= '
+
+ ';
+ return $return;
}
+
sub problem_edit_footer {
+ my $resource = $env{'request.ambiguous'};
return ' |
'.
"\n\n".&Apache::loncommon::end_page();
@@ -1323,9 +1367,11 @@ sub firstaccess_msg {
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
my $buttontext = &mt('Show Resource');
my $timertext = &mt('Start Timer?');
+ my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb),'\'"<>&');
$result .= (<
+
ENDCHECKOUT
@@ -1361,6 +1407,7 @@ sub init_problem_globals {
@Apache::inputtags::importlist = ();
@Apache::inputtags::previous=();
@Apache::inputtags::previous_version=();
+ $Apache::inputtags::leniency='';
$Apache::structuretags::printanswer='No';
@Apache::structuretags::whileconds=();
@Apache::structuretags::whilebody=();
@@ -1376,6 +1423,7 @@ sub reset_problem_globals {
undef(%Apache::lonhomework::history);
undef(%Apache::lonhomework::results);
undef($Apache::inputtags::part);
+ undef($Apache::inputtags::leniency);
if ($type eq 'Task') {
undef($Apache::inputtags::slot_name);
} elsif ($type eq 'problem') {
@@ -1487,7 +1535,8 @@ sub start_problem {
$target eq 'tex') {
if ($env{'form.markaccess'}) {
my @interval=&Apache::lonnet::EXT("resource.0.interval");
- &Apache::lonnet::set_first_access($interval[1],$interval[0]);
+ my ($timelimit) = ($interval[0] =~ /^(\d+)/);
+ &Apache::lonnet::set_first_access($interval[1],$timelimit);
}
($status,$accessmsg,$slot_name,$slot) =
@@ -1971,6 +2020,8 @@ sub end_library {
&& ($#$tagstack eq 0 && $$tagstack[0] eq 'library')
&& $env{'request.state'} eq "construct") {
$result.=''.&Apache::loncommon::end_page({'discussion' => 1});
+ } elsif ($target eq 'meta') {
+ $result.=&Apache::response::meta_response_order();
}
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') {
&reset_problem_globals('library');
@@ -2453,7 +2504,12 @@ sub start_randomlist {
}
if (@randomlist) {
my @idx_arr = (0 .. $#randomlist);
- &Apache::structuretags::shuffle(\@idx_arr);
+ if ($env{'form.code_for_randomlist'}) {
+ &Apache::structuretags::shuffle(\@idx_arr,$target);
+ undef($env{'form.code_for_randomlist'});
+ } else {
+ &Apache::structuretags::shuffle(\@idx_arr);
+ }
my $bodytext = '';
my $show=$#randomlist;
my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval);
@@ -2492,10 +2548,10 @@ sub start_randomlist {
}
sub shuffle {
- my $a=shift;
+ my ($a,$target) = @_;
my $i;
if (ref($a) eq 'ARRAY' && @$a) {
- &Apache::response::pushrandomnumber();
+ &Apache::response::pushrandomnumber(undef,$target);
for($i=@$a;--$i;) {
my $j=int(&Math::Random::random_uniform() * ($i+1));
next if $i == $j;
@@ -2579,6 +2635,7 @@ sub start_part {
my $id= &Apache::lonxml::get_id($parstack,$safeeval);
$Apache::inputtags::part=$id;
push(@Apache::inputtags::partlist,$id);
+ $Apache::inputtags::leniency='';
@Apache::inputtags::response=();
@Apache::inputtags::previous=();
@Apache::inputtags::previous_version=();
@@ -2744,6 +2801,7 @@ sub end_part {
}
pop @Apache::inputtags::status;
$Apache::inputtags::part='';
+ $Apache::inputtags::leniency='';
$Apache::lonhomework::type = $Apache::lonhomework::default_type;
return $result;
}
@@ -2894,13 +2952,18 @@ sub end_startouttext {
if ($target eq 'edit') {
my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth;
$text=&Apache::lonxml::get_all_text("endouttext",$parser,$style);
- $result.=&Apache::edit::start_table($token)."".&mt('Text Block')." | "
+ $result.=&Apache::edit::start_table($token)." ".&Apache::loncommon::insert_folding_button()
+ ." ".&mt('Text Block')." | "
.''.&mt('Delete?').' '
.&Apache::edit::deletelist($target,$token)
.' | '
- .''
- .&Apache::lonhtmlcommon::dragmath_button($areaid,1)
- .' | '
+ .'';
+ if ($env{'environment.nocodemirror'}) {
+ $result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1);
+ } else {
+ $result.=' ';
+ }
+ $result.=' | '
.''
.&Apache::edit::insertlist($target,$token)
.' | '
|