--- loncom/homework/edit.pm 2001/11/07 21:24:15 1.23
+++ loncom/homework/edit.pm 2002/03/28 22:03:21 1.33
@@ -1,10 +1,38 @@
# The LearningOnline Network with CAPA
# edit mode helpers
+#
+# $Id: edit.pm,v 1.33 2002/03/28 22:03:21 albertel Exp $
+#
+# Copyright Michigan State University Board of Trustees
+#
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
+#
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
# 3/20 Guy
+# 01/10/02 Matthew
+# 03/06/02 Matthew
package Apache::edit;
use strict;
-use Apache::lonnet;
+use Apache::lonnet();
+use HTML::Entities();
# Global Vars
# default list of colors to use in editing
@@ -30,10 +58,8 @@ sub tag_start {
&deletelist($target,$token)
."
'; }
+
sub movebuttons {
my ($target,$token) = @_;
my $result=''.$Apache::lonxml::insertlist{"$tagnum.description"}."\n";
+ my $descrip=$Apache::lonxml::insertlist{"$tagnum.description"};
+ $options{$descrip} ="\n";
}
+ foreach my $option (sort(keys(%options))) { $result.=$options{$option}; }
if ($result) { $result=''.$result; }
}
return $result;
@@ -189,6 +222,15 @@ sub insert_responseparam {
';
}
+sub insert_formularesponse {
+ return '
+
+
+
+
+';
+}
+
sub insert_numericalresponse {
return '
@@ -251,22 +293,41 @@ sub insert_script {
return "\n";
}
+sub textarea_sizes {
+ my ($data)=@_;
+ my $count=0;
+ my $maxlength=-1;
+ foreach (split ("\n", $$data)) { $count++;
+ if (length($_) > $maxlength) { $maxlength = length($_); }
+ }
+ my $rows = $count;
+ my $cols = $maxlength;
+ return ($rows,$cols);
+}
+
+sub editline {
+ my ($tag,$data,$description,$size)=@_;
+ $data=&HTML::Entities::encode($data);
+ if ($description) { $description=" ".$description." "; }
+ my $result = <<"END";
+$description
+
+END
+ return $result;
+}
+
sub editfield {
my ($tag,$data,$description,$minwidth,$minheight)=@_;
- my $count=0;
- my $maxlength=-1;
- map { $count++;
- if (length($_) > $maxlength) { $maxlength = length ($_); }
- } split ("\n", $data);
- if ($maxlength > 80) { $maxlength = 80; }
- if ($maxlength < $minwidth) { $maxlength = $minwidth; }
- if ( $count < $minheight) { $count = $minheight; }
- if ($description) {
- $description=" ".$description." ";
- }
- return "$description\n \n";
-# return " \n<$tag> \n \n</$tag> \n";
+ my ($rows,$cols)=&textarea_sizes(\$data);
+ if ($cols > 80) { $cols = 80; }
+ if ($cols < $minwidth ) { $cols = $minwidth; }
+ if ($rows < $minheight) { $rows = $minheight; }
+ if ($description) { $description=" ".$description." "; }
+ return $description."\n".' '."\n";
}
sub modifiedfield {
@@ -278,13 +339,6 @@ sub modifiedfield {
# &Apache::lonxml::debug("I want homework_edit_$Apache::lonxml::curdepth");
# &Apache::lonxml::debug($ENV{"form.homework_edit_$Apache::lonxml::curdepth"});
$result=$ENV{"form.homework_edit_$Apache::lonxml::curdepth"};
- if (defined $token) {
- if (defined $token->[4]) {
- $result=$token->[4].$result;
- } else {
- $result=$result.$token->[2];
- }
- }
return $result;
}
@@ -353,7 +407,7 @@ sub select_arg {
}
$result.=$description.'
';
+ ';
return $result;
}
@@ -375,11 +429,154 @@ sub select_or_text_arg {
if ($found) {
$result.=$description.'
';
+ ';
} else {
$result.=&text_arg($description,$name,$token,$size);
}
return $result;
}
+
+#----------------------------------------------------- browse
+sub browse {
+ # insert a link to call up the filesystem browser (lonindexer)
+ $_ = shift;
+ my $form = 'lonhomework';
+ my $element = &Apache::lonnet::escape("$Apache::lonxml::curdepth.$_");
+ my $result = <<"ENDBUTTON";
+Browse
+ENDBUTTON
+ return $result;
+}
+
+#----------------------------------------------------- browse
+sub search {
+ # insert a link to call up the filesystem browser (lonindexer)
+ $_ = shift;
+ my $form = 'lonhomework';
+ my $element = &Apache::lonnet::escape("$Apache::lonxml::curdepth.$_");
+ my $result = <<"ENDBUTTON";
+Search
+ENDBUTTON
+ return $result;
+}
+
+
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