--- loncom/homework/edit.pm 2007/10/03 00:24:48 1.112 +++ loncom/homework/edit.pm 2010/01/31 00:44:21 1.125 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # edit mode helpers # -# $Id: edit.pm,v 1.112 2007/10/03 00:24:48 albertel Exp $ +# $Id: edit.pm,v 1.125 2010/01/31 00:44:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,6 +26,110 @@ # http://www.lon-capa.org/ # +=pod + +=head1 NAME + +Apache::edit - edit mode helpers + +=head1 SYNOPSIS + +Invoked by many homework and xml related modules. + + &Apache::edit::SUBROUTINENAME(ARGUMENTS); + +=head1 INTRODUCTION + +This module outputs HTML syntax helpful for the rendering of edit +mode interfaces. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 SUBROUTINES + +=over 4 + +=item initialize_edit() + +initialize edit (set colordepth to zero) + +=item tag_start($target,$token,$description) + +provide deletion and insertion lists +for the manipulation of a start tag; return a scalar string + +=item tag_end($target,$token,$description) + +ending syntax corresponding to +&tag_start. return a scalar string. + +=item start_table($token) + +start table; update colordepth; return scalar string. + +=item end_table() + +reduce color depth; end table; return scalar string + +=item start_spanning_row() + +start a new table row spanning the 'edit' environment. + +=item start_row() + +start a new table row and element. + +=item end_row() + +end current table element and row. + +=item movebuttons($target,$token) + +move-up and move-down buttons; return scalar string + +=item deletelist($target,$token) + +provide a yes option in an HTML select element; return scalar string + +=item handle_delete($space,$target,$token,$tagstack,$parstack,$parser,$safeeval, +$style) + +respond to a user delete request by passing relevant stack +and array information to various rendering functions; return a scalar string + +=item get_insert_list($token) + +provide an insertion list based on possibilities from lonxml; return a scalar string + +=item insertlist($target,$token) + +api that uses get_insert_list; return a scalar string + +=item handleinsert($token) + +provide an insertion list based on possibilities from lonxml; return a scalar string + +=item get_insert_list($token) + +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 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. + +=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. + +=back + +=cut + package Apache::edit; use strict; @@ -61,7 +165,7 @@ sub tag_start { if (!$description) { $description="<$tag>"; } } $result.= &start_table($token)."$description - Delete". + ".&mt('Delete?').' '. &deletelist($target,$token) ." ". @@ -100,7 +204,7 @@ sub start_table { $Apache::edit::colordepth++; push(@Apache::edit::inserttag,$token->[1]); my $result='
'; - $result.=''; + $result.='
'; return $result; } @@ -128,7 +232,7 @@ sub end_table { return $result; } -sub start_spanning_row { return ''; } @@ -145,7 +249,7 @@ sub deletelist { my ($target,$token) = @_; my $result = ""; return $result; } @@ -215,7 +319,7 @@ sub innerinsertlist { if ($target eq 'edit') { my $optionlist= &get_insert_list($tagname); if ($optionlist) { - $result = "Insert: + $result = &mt('Insert:')." " @@ -510,6 +614,18 @@ sub insert_numericalhint { '; } +sub insert_reactionhint { + return ' + +'; +} + +sub insert_organichint { + return ' + +'; +} + sub insert_stringhint { return ' @@ -577,7 +693,8 @@ sub element_change_detection { } sub submit_ask_anyway { - return ' onclick="still_ask=true;" '; + my ($extra_action) = @_; + return ' onclick="still_ask=true;'.$extra_action.'" '; } sub textarea_sizes { @@ -739,15 +856,15 @@ sub checked_arg { $text=$option; $value='value="'.$option.'"'; } - $result.="\n"; + $result.=&element_change_detection().' />'.$text.''."\n"; } return $result; } @@ -760,7 +877,7 @@ sub text_arg { $result=&mt($description).' '; - return ''.$result.''; + return ''.$result.''; } sub select_arg { @@ -768,26 +885,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.=''.$description.'  '.$optionlist.' - '; + '; return $result; } @@ -797,22 +916,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 '