--- loncom/homework/edit.pm 2008/11/10 14:11:16 1.117 +++ loncom/homework/edit.pm 2013/07/04 16:35:07 1.147 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # edit mode helpers # -# $Id: edit.pm,v 1.117 2008/11/10 14:11:16 jms Exp $ +# $Id: edit.pm,v 1.147 2013/07/04 16:35:07 bisitz 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 @@ -44,102 +46,87 @@ mode interfaces. This is part of the LearningOnline Network with CAPA project described at http://www.lon-capa.org. -=head1 HANDLER SUBROUTINE - -There is no handler subroutine. - -=head1 OTHER SUBROUTINES +=head1 SUBROUTINES =over 4 -=item * +=item initialize_edit() -initialize_edit() : initialize edit (set colordepth to zero) +initialize edit (set colordepth to zero) -=item * +=item tag_start($target,$token,$description) -tag_start($target,$token,$description) : provide deletion and insertion lists +provide deletion and insertion lists for the manipulation of a start tag; return a scalar string -=item * +=item tag_end($target,$token,$description) -tag_end($target,$token,$description) : ending syntax corresponding to +ending syntax corresponding to &tag_start. return a scalar string. -=item * +=item start_table($token) -start_table($token) : start table; update colordepth; return scalar string. +start table; update colordepth; return scalar string. -=item * +=item end_table() -end_table() : reduce color depth; end table; return scalar string +reduce color depth; end table; return scalar string -=item * +=item start_spanning_row() -start_spanning_row() : start a new table row spanning the 'edit' environment. +start a new table row spanning the 'edit' environment. -=item * +=item start_row() -start_row() : start a new table row and element. +start a new table row and element. -=item * +=item end_row() -end_row() : end current table element and row. +end current table element and row. -=item * +=item movebuttons($target,$token) -movebuttons($target,$token) : move-up and move-down buttons; return scalar -string +move-up and move-down buttons; return scalar string -=item * +=item deletelist($target,$token) -deletelist($target,$token) : provide a yes option in an HTML select element; -return scalar string +provide a yes option in an HTML select element; return scalar string -=item * +=item handle_delete($space,$target,$token,$tagstack,$parstack,$parser,$safeeval, +$style) -handle_delete($space,$target,$token,$tagstack,$parstack,$parser,$safeeval, -$style) : respond to a user delete request by passing relevant stack +respond to a user delete request by passing relevant stack and array information to various rendering functions; return a scalar string -=item * +=item get_insert_list($token) -get_insert_list($token) : provide an insertion list based on possibilities -from lonxml; return a scalar string +provide an insertion list based on possibilities from lonxml; return a scalar string -=item * +=item insertlist($target,$token) -insertlist($target,$token) : api that uses get_insert_list; -return a scalar string +api that uses get_insert_list; return a scalar string -=item * +=item handleinsert($token) -handleinsert($token) : provide an insertion list based on possibilities -from lonxml; return a scalar string +provide an insertion list based on possibilities from lonxml; return a scalar string -=item * +=item get_insert_list($token) -get_insert_list($token) : provide an insertion list based on possibilities -from lonxml; return a scalar string +provide an insertion list based on possibilities from lonxml; return a scalar string -=item * -browse($elementname) : provide a link which will open up the filesystem -browser (lonindexer) and, once a file is selected, place the result in -the form element $elementname. +=item browse($elementname) -=item * -search($elementname) : provide a link which will open up the filesystem -searcher (lonsearchcat) and, once a file is selected, place the result in -the form element $elementname. +provide a link which will open up the filesystem browser (lonindexer) and, once a file is selected, place the result in the form element $elementname. -=item * -editline(tag,data,description,size): Provide a for -single-line text entry. This is to be used for text enclosed by tags, not -arguements/parameters associated with a tag. +=item search($elementname) -=back +provide a link which will open up the filesystem searcher (lonsearchcat) and, once a file is selected, place the result in the form element $elementname. + +=item editline(tag,data,description,size) + +Provide a for single-line text entry. This is to be used for text enclosed by tags, not arguements/parameters associated with a tag. -incomplete... +=back =cut @@ -217,7 +204,7 @@ sub start_table { $Apache::edit::colordepth++; push(@Apache::edit::inserttag,$token->[1]); my $result='
'; - $result.=''; + $result.='
'; return $result; } @@ -245,7 +232,7 @@ sub end_table { return $result; } -sub start_spanning_row { return ''; } @@ -370,7 +357,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)) { { @@ -410,6 +397,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 ' @@ -422,6 +488,13 @@ sub insert_numericalresponse { '; } +sub insert_externalresponse { + return ' + + +'; +} + sub insert_customresponse { return ' @@ -594,6 +667,9 @@ sub insert_matchresponse { + + + @@ -605,6 +681,9 @@ sub insert_matchresponse { '; } +sub insert_startpartmarker { return ''; } +sub insert_endpartmarker { return ''; } + sub insert_displayduedate { return ''; } sub insert_displaytitle { return ''; } sub insert_hintpart { @@ -627,6 +706,18 @@ sub insert_numericalhint { '; } +sub insert_reactionhint { + return ' + +'; +} + +sub insert_organichint { + return ' + +'; +} + sub insert_stringhint { return ' @@ -663,6 +754,7 @@ sub js_change_detection { my $unsaved=&mt("There are unsaved changes"); return (< +// SCRIPT } @@ -698,6 +791,12 @@ sub submit_ask_anyway { return ' onclick="still_ask=true;'.$extra_action.'" '; } +sub submit_dont_ask { + my ($extra_action) = @_; + return ' onclick="is_submit=true;'.$extra_action.'" '; +} + + sub textarea_sizes { my ($data)=@_; my $count=0; @@ -729,30 +828,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 { @@ -857,28 +956,31 @@ sub checked_arg { $text=$option; $value='value="'.$option.'"'; } - $result.="\n"; + $result.=&element_change_detection().' />'.$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 { @@ -886,26 +988,28 @@ 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.=''.&mt($description).'  '.$optionlist.' - '; + '; return $result; } @@ -915,22 +1019,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.="
';} +sub start_spanning_row { return '
';} sub start_row { return '
'; } sub end_row { return '