--- loncom/homework/edit.pm 2001/06/27 18:51:12 1.15
+++ loncom/homework/edit.pm 2002/01/11 16:32:29 1.27
@@ -1,6 +1,32 @@
# The LearningOnline Network with CAPA
# edit mode helpers
+#
+# $Id: edit.pm,v 1.27 2002/01/11 16:32:29 matthew 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
package Apache::edit;
use strict;
@@ -21,15 +47,19 @@ sub tag_start {
my $result='';
if ($target eq "edit") {
my $tag=$token->[1];
- if (!$description) { $description="<$tag>"; }
+ if (!$description) {
+ $description=&Apache::lonxml::description($token);
+ if (!$description) { $description="<$tag>"; }
+ }
$result.= &start_table($token)."
$description
Delete".
&deletelist($target,$token)
."
".
- &insertlist($target,$token).
- "
-\n";
+ &insertlist($target,$token).&end_row().&start_spanning_row();
+# ".
+# &movebuttons($target,$token).
+# " \n";
}
return $result;
}
@@ -54,7 +84,7 @@ sub start_table {
my $tag = $token->[1];
my $tagnum;
foreach my $namespace (reverse @Apache::lonxml::namespace) {
- my $testtag=$Apache::lonxml::namespace['-1'].'::'.$tag;
+ my $testtag=$namespace.'::'.$tag;
$tagnum=$Apache::lonxml::insertlist{"$testtag.num"};
if (defined($tagnum)) { last; }
}
@@ -74,6 +104,19 @@ sub end_table {
return $result;
}
+sub start_spanning_row { return ' ';}
+sub start_row { return ' '; }
+sub end_row { return ' '; }
+
+sub movebuttons {
+ my ($target,$token) = @_;
+ my $result=' ';
+ $result.=' ';
+ return $result;
+}
+
sub deletelist {
my ($target,$token) = @_;
my $result = "
@@ -146,12 +189,10 @@ $optionlist
}
sub handle_insert {
- &Apache::lonxml::debug("Er handle insert called");
if ($ENV{"form.insert_$Apache::lonxml::curdepth"} eq '') { return ''; }
my $result;
my $tagnum = $ENV{"form.insert_$Apache::lonxml::curdepth"};
my $func=$Apache::lonxml::insertlist{"$tagnum.function"};
- &Apache::lonxml::debug("Looking for :$func:");
if ($func eq 'default') {
my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"};
my $namespace;
@@ -171,6 +212,20 @@ sub handle_insert {
return $result;
}
+sub insert_responseparam {
+ return '
+ ';
+}
+
+sub insert_formularesponse {
+ return '
+
+
+
+
+ ';
+}
+
sub insert_numericalresponse {
return '
@@ -180,6 +235,15 @@ sub insert_numericalresponse {
';
}
+sub insert_stringresponse {
+ return '
+
+
+
+
+ ';
+}
+
sub insert_optionresponse {
return '
@@ -190,22 +254,61 @@ sub insert_optionresponse {
';
}
-sub editfield {
- my ($tag,$data,$description,$minwidth,$minheight)=@_;
-
+sub insert_radiobuttonresponse {
+ return '
+
+
+
+
+
+ ';
+}
+
+sub insert_displayduedate { return ' '; }
+sub insert_displaytitle { return ' '; }
+sub insert_hintpart {
+ return '
+
+
+
+ ';
+}
+
+sub insert_numericalhint {
+ return '
+
+ ';
+}
+
+sub insert_startouttext {
+ return " \n ";
+}
+
+sub insert_script {
+ return "\n";
+}
+
+sub textarea_sizes {
+ my ($data)=@_;
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";
+ foreach (split ("\n", $$data)) { $count++;
+ if (length($_) > $maxlength) { $maxlength = length($_); }
+ }
+ my $rows = $count;
+ my $cols = $maxlength;
+ return ($rows,$cols);
+}
+
+sub editfield {
+ my ($tag,$data,$description,$minwidth,$minheight)=@_;
+
+ 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 {
@@ -227,21 +330,14 @@ sub modifiedfield {
return $result;
}
-sub insert_startouttext {
- return " \n ";
-}
-
-sub insert_script {
- return "\n";
-}
-
# Returns a 1 if the token has been modified and you should rebuild the tag
# side-effects, will modify the $token if new values are found
sub get_new_args {
my ($token,$parstack,$safeeval,@args)=@_;
my $rebuild=0;
foreach my $arg (@args) {
- my $value=&Apache::lonxml::get_param($arg,$parstack,$safeeval);
+ #just want the string that it was set to
+ my $value=$token->[2]->{$arg};
my $newvalue=$ENV{"form.$Apache::lonxml::curdepth.$arg"};
&Apache::lonxml::debug(" for:$arg: cur is :$value: new is :$newvalue:");
if ($value ne $newvalue) {
@@ -259,6 +355,8 @@ sub rebuild_tag {
if ($token->[0] eq 'S') {
$result = '<'.$token->[1];
while (my ($key,$val)= each(%{$token->[2]})) {
+ $val=~s:^\s+|\s+$::g;
+ $val=~s:"::g; #"
&Apache::lonxml::debug("setting :$key: to :$val:");
$result.=' '.$key.'="'.$val.'"';
}
@@ -297,9 +395,135 @@ sub select_arg {
}
$result.=$description.'
'.$optionlist.'
- ';
+ ';
return $result;
}
+sub select_or_text_arg {
+ my ($description,$name,$list,$token,$size) = @_;
+ my $result;
+ my $optionlist="";
+ my $found=0;
+ my $selected=$token->[2]{$name};
+ foreach my $option (@$list) {
+ if ( $selected eq $option ) {
+ $optionlist.="$option \n";
+ $found=1;
+ } else {
+ $optionlist.="$option \n";
+ }
+ }
+ $optionlist.="Type in value \n";
+ if ($found) {
+ $result.=$description.'
+ '.$optionlist.'
+ ';
+ } else {
+ $result.=&text_arg($description,$name,$token,$size);
+ }
+ 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
+
+=back
+
+incomplete...
+
+=cut