--- loncom/homework/edit.pm 2008/12/10 21:02:01 1.119 +++ loncom/homework/edit.pm 2023/03/27 18:41:06 1.157 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # edit mode helpers # -# $Id: edit.pm,v 1.119 2008/12/10 21:02:01 raeburn Exp $ +# $Id: edit.pm,v 1.157 2023/03/27 18:41:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,6 +26,8 @@ # http://www.lon-capa.org/ # +=pod + =head1 NAME Apache::edit - edit mode helpers @@ -132,10 +134,11 @@ package Apache::edit; use strict; use Apache::lonnet; +use Apache::loncommon; use HTML::Entities(); use Apache::lonlocal; use lib '/home/httpd/lib/perl/'; -use LONCAPA; +use LONCAPA qw(:DEFAULT :match); # Global Vars @@ -159,21 +162,18 @@ sub tag_start { if ($target eq "edit") { my $tag=$token->[1]; if (!$description) { - $description=&Apache::lonxml::description($token); + $description=&mt(&Apache::lonxml::description($token)); if (!$description) { $description="<$tag>"; } } - $result.= &start_table($token)."$description - ".&mt('Delete?').' '. - &deletelist($target,$token) - ." - ". - &insertlist($target,$token); + $result.= &start_table($token)."".&Apache::loncommon::insert_folding_button(). + " $description".&mt('Delete?')." ".&deletelist($target,$token). + "".&insertlist($target,$token); #". # &movebuttons($target,$token). # "\n"; my @help = Apache::lonxml::helpinfo($token); if ($help[0]) { - $result .= '' . + $result .= ''. Apache::loncommon::help_open_topic(@help); } else { $result .= " "; } $result .= &end_row().&start_spanning_row(); @@ -201,15 +201,15 @@ sub start_table { } $Apache::edit::colordepth++; push(@Apache::edit::inserttag,$token->[1]); - my $result='
'; - $result.=''; + my $result='
'; + $result.='
'; return $result; } sub end_table { $Apache::edit::colordepth--; my $result='
'; - $result.='
'; + $result.='
'; } @@ -294,7 +297,7 @@ sub get_insert_list { my $descrip=$Apache::lonxml::insertlist{"$tag.description"}; my $tagnum =$Apache::lonxml::insertlist{"$tag.num"}; $options{$descrip} ="\n"; + &mt($descrip)."\n"; } foreach my $option (sort(keys(%options))) {$result.=$options{$option};} if ($result) { $result=''.$result; } @@ -355,7 +358,7 @@ sub do_insert { my $depth = scalar(@Apache::lonxml::depthcounter); $depth -- if ($after); my $inset = "\t"x$depth; - $result.="\n$inset<$newtag>\n$inset"; + $result.="\n$inset<$newtag>"; } else { if (defined(&$func)) { { @@ -395,6 +398,85 @@ sub insert_formularesponse { '; } +sub insert_functionplotresponse { + return ' + + + + + +'; +} + +sub insert_spline { + return ' +'; +} + +sub insert_backgroundplot { + return ' +'; +} + +sub insert_plotobject { + return ' +'; +} + +sub insert_plotvector { + return ' +'; +} + +sub insert_drawvectorsum { + return ' +'; +} + + +sub insert_functionplotrule { + return ' +'; +} + +sub insert_functionplotvectorrule { + return ' +'; +} + +sub insert_functionplotvectorsumrule { + return ' +'; +} + +sub insert_functionplotcustomrule { + return ' + + +# &fpr_val("label"), &fpr_f($x), &fpr_dfdx($x), &fpr_d2fdx2($x) +# ($xs,$xe,$ys,$ye)=&fpr_vectorcoords("Name"), ($x,$y)=&fpr_objectcoords("Name") +# &fpr_vectorlength("Name"), &fpr_vectorangle("Name") + +# Return 0 or 1 +return 1; + +'; +} + +sub insert_functionplotruleset { + return ' + + +'; +} + +sub insert_functionplotelements { + return ' + + +'; +} + sub insert_numericalresponse { return ' @@ -407,6 +489,13 @@ sub insert_numericalresponse { '; } +sub insert_externalresponse { + return ' + + +'; +} + sub insert_customresponse { return ' @@ -579,6 +668,9 @@ sub insert_matchresponse { + + + @@ -590,6 +682,9 @@ sub insert_matchresponse { '; } +sub insert_startpartmarker { return ''; } +sub insert_endpartmarker { return ''; } + sub insert_displayduedate { return ''; } sub insert_displaytitle { return ''; } sub insert_hintpart { @@ -612,6 +707,18 @@ sub insert_numericalhint { '; } +sub insert_reactionhint { + return ' + +'; +} + +sub insert_organichint { + return ' + +'; +} + sub insert_stringhint { return ' @@ -648,6 +755,7 @@ sub js_change_detection { my $unsaved=&mt("There are unsaved changes"); return (< +// SCRIPT } @@ -680,7 +789,58 @@ sub element_change_detection { sub submit_ask_anyway { my ($extra_action) = @_; - return ' onclick="still_ask=true;'.$extra_action.'" '; + my $resource = &Apache::loncommon::escape_single($env{'request.ambiguous'}); + return ' onclick="saveScrollPosition(\''.$resource.'\');still_ask=true;'.$extra_action.';" '; +} + +sub submit_dont_ask { + my ($extra_action) = @_; + my $resource = &Apache::loncommon::escape_single($env{'request.ambiguous'}); + return ' onclick="saveScrollPosition(\''.$resource.'\');is_submit=true;'.$extra_action.';" '; +} + +sub js_update_linknum { + return (< +// '+picknum+''; + } else { + if (caller == 'check') { + pickitem.checked=false; + pickitem.value='nochoice'; + } + return; + } + } + } else { + pickitem.value = ''; + picknumtext.innerHTML = ''; + } +} + +// ]]> + +SCRIPT + } sub textarea_sizes { @@ -714,30 +874,30 @@ sub editfield { my ($tag,$data,$description,$minwidth,$minheight,$usehtmlarea)=@_; my ($rows,$cols)=&textarea_sizes(\$data); - if (&Apache::lonhtmlcommon::htmlareabrowser() && - !&Apache::lonhtmlcommon::htmlareablocked()) { + my $textareaclass; + + if (&Apache::lonhtmlcommon::htmlareabrowser() && $usehtmlarea) { $rows+=7; # make room for HTMLarea $minheight+=7; # make room for HTMLarea + $textareaclass = ' class="LC_richDefaultOff"'; } if ($cols > 80) { $cols = 80; } if ($cols < $minwidth ) { $cols = $minwidth; } if ($rows < $minheight) { $rows = $minheight; } - if ($description) { $description=$description."
"; } - if ($usehtmlarea) { - &Apache::lonhtmlcommon::add_htmlareafields('homework_edit_'. - $Apache::lonxml::curdepth); - } + if ($description) { $description='
'.&mt($description).'
'; } + # remove typesetting whitespace from between data and the end tag # to make the edit look prettier $data =~ s/\n?[ \t]*$//; - return $description."\n".''. - ($usehtmlarea?&Apache::lonhtmlcommon::spelllink('lonhomework', - 'homework_edit_'.$Apache::lonxml::curdepth):'')."\n"; + ($usehtmlarea?'
'.&Apache::lonhtmlcommon::spelllink('lonhomework', + 'homework_edit_'.$Apache::lonxml::curdepth):'')."\n"; } sub modifiedfield { @@ -827,7 +987,7 @@ sub hidden_arg { } sub checked_arg { - my ($description,$name,$list,$token) = @_; + my ($description,$name,$list,$token,$onclick,$useid) = @_; my $result; my $optionlist=""; my $allselected=$token->[2]{$name}; @@ -836,13 +996,13 @@ sub checked_arg { my ($value,$text); if ( ref($option) eq 'ARRAY') { $value='value="'.$$option[0].'"'; - $text=$$option[1]; + $text=&mt($$option[1]); $option=$$option[0]; } else { - $text=$option; + $text=&mt($option); $value='value="'.$option.'"'; } - $result.=''."\n"; + if ($useid) { + $result .= ' id="'.&html_element_name($name).'" '; + } + $result.=&element_change_detection().$onclick.' />'.$text.''."\n"; } return $result; } sub text_arg { - my ($description,$name,$token,$size) = @_; + my ($description,$name,$token,$size, $class) = @_; my $result; if (!defined $size) { $size=20; } my $arg=$token->[2]{$name}; $result=&mt($description).' '; - return ''.$result.''; + '" type="text" value="'.$arg.'" size="'.$size.'" '; + if (defined $class) { + $result .= 'class="' . $class . '" '; + } + $result .= &element_change_detection().'/>'; + return ' '.$result.''; } sub select_arg { @@ -871,23 +1037,25 @@ sub select_arg { my $result; my $optionlist=""; my $selected=$token->[2]{$name}; - foreach my $option (@$list) { - my ($text,$value); - if ( ref($option) eq 'ARRAY') { - $value='value="'.&HTML::Entities::encode($$option[0]).'"'; - $text=$$option[1]; - $option=$$option[0]; - } else { - $text=$option; - $value='value="'.&HTML::Entities::encode($option,'\'"&<>').'"'; - } - if ( $selected eq $option ) { - $optionlist.="\n"; - } else { - $optionlist.="\n"; - } + if (ref($list) eq 'ARRAY') { + foreach my $option (@{$list}) { + my ($text,$value); + if (ref($option) eq 'ARRAY') { + $value='value="'.&HTML::Entities::encode($option->[0]).'"'; + $text=$option->[1]; + $option=$option->[0]; + } else { + $text=$option; + $value='value="'.&HTML::Entities::encode($option,'\'"&<>').'"'; + } + if ( $selected eq $option ) { + $optionlist.="\n"; + } else { + $optionlist.="\n"; + } + } } - $result.=' '.$optionlist.' '; @@ -900,22 +1068,24 @@ sub select_or_text_arg { my $optionlist=""; my $found=0; my $selected=$token->[2]{$name}; - foreach my $option (@$list) { - my ($text,$value); - if ( ref($option) eq 'ARRAY') { - $value='value="'.&HTML::Entities::encode($$option[0]).'"'; - $text=$$option[1]; - $option=$$option[0]; - } else { - $text=$option; - $value='value="'.&HTML::Entities::encode($option,'\'"&<>').'"'; - } - if ( $selected eq $option ) { - $optionlist.="\n"; - $found=1; - } else { - $optionlist.="\n"; - } + if (ref($list) eq 'ARRAY') { + foreach my $option (@{$list}) { + my ($text,$value); + if (ref($option) eq 'ARRAY') { + $value='value="'.&HTML::Entities::encode($option->[0]).'"'; + $text=$option->[1]; + $option=$option->[0]; + } else { + $text=$option; + $value='value="'.&HTML::Entities::encode($option,'\'"&<>').'"'; + } + if ( $selected eq $option ) { + $optionlist.="\n"; + $found=1; + } else { + $optionlist.="\n"; + } + } } $optionlist.="
'; my ($tagname,$closingtag); if (defined($Apache::edit::inserttag[-2])) { @@ -230,7 +230,10 @@ sub end_table { return $result; } -sub start_spanning_row { return '
';} +sub start_spanning_row { + return '
'; +} sub start_row { return '
'; } sub end_row { return '