--- loncom/homework/edit.pm 2007/10/03 00:24:48 1.112
+++ loncom/homework/edit.pm 2012/02/28 22:42:31 1.141
@@ -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.141 2012/02/28 22:42:31 www 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 '';}
+sub start_spanning_row { return ' ';}
sub start_row { return ' '; }
sub end_row { return ' '; }
@@ -145,7 +249,7 @@ sub deletelist {
my ($target,$token) = @_;
my $result = "
-Yes
+".&mt('yes')."
";
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:')."
$optionlist
"
@@ -253,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$newtag>";
+ $result.="\n$inset<$newtag>$newtag>";
} else {
if (defined(&$func)) {
{
@@ -293,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 '
@@ -488,6 +671,9 @@ sub insert_matchresponse {
';
}
+sub insert_startpartmarker { return ' '; }
+sub insert_endpartmarker { return ' '; }
+
sub insert_displayduedate { return ' '; }
sub insert_displaytitle { return ' '; }
sub insert_hintpart {
@@ -510,6 +696,18 @@ sub insert_numericalhint {
';
}
+sub insert_reactionhint {
+ return '
+
+ ';
+}
+
+sub insert_organichint {
+ return '
+
+ ';
+}
+
sub insert_stringhint {
return '
@@ -577,9 +775,16 @@ sub element_change_detection {
}
sub submit_ask_anyway {
- return ' onclick="still_ask=true;" ';
+ my ($extra_action) = @_;
+ 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;
@@ -611,27 +816,27 @@ 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);
- }
+
# 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";
@@ -739,28 +944,31 @@ sub checked_arg {
$text=$option;
$value='value="'.$option.'"';
}
- $result.=" $text \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 {
@@ -768,26 +976,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.="$text \n";
- } else {
- $optionlist.="$text \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.="".&mt($text)." \n";
+ } else {
+ $optionlist.="".&mt($text)." \n";
+ }
+ }
}
- $result.=''.$description.' '.&mt($description).'
'.$optionlist.'
- ';
+ ';
return $result;
}
@@ -797,22 +1007,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.="$text \n";
- $found=1;
- } else {
- $optionlist.="$text \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.="$text \n";
+ $found=1;
+ } else {
+ $optionlist.="$text \n";
+ }
+ }
}
$optionlist.="
+
$description
@@ -844,7 +1056,7 @@ $optionlist
onChange="$hiddenvalue=$typedinvalue;"
onFocus="$selectedindex=$selecttypeinindex-1;" />
-
+
ENDSELECTORTYPE
}
@@ -879,7 +1091,7 @@ sub entercoords {
$data{"imagechoice.$id.formwidth"}=$width.'_'.
$Apache::edit::bgimgsrccurdepth;
}
- &Apache::lonnet::appenv(%data);
+ &Apache::lonnet::appenv(\%data);
my $text="Click Coordinates";
my $result=''.$text.' ';
return $result;
@@ -912,7 +1124,7 @@ sub entercoord {
$data{"imagechoice.$id.formwidth"}=$width.'_'.
$Apache::edit::bgimgsrccurdepth;
}
- &Apache::lonnet::appenv(%data);
+ &Apache::lonnet::appenv(\%data);
my $text="Enter Coordinates";
if ($type eq 'polygon') { $text='Create Polygon Data'; }
my $result=''.$text.' ';
@@ -920,7 +1132,7 @@ sub entercoord {
}
sub deletecoorddata {
- &Apache::lonnet::delenv("imagechoice\\.");
+ &Apache::lonnet::delenv('imagechoice.');
}
#----------------------------------------------------- browse
@@ -973,119 +1185,4 @@ ENDBUTTON
1;
__END__
-=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 HANDLER SUBROUTINE
-
-There is no handler subroutine.
-
-=head1 OTHER 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
-
-incomplete...
-
-=cut