--- loncom/homework/edit.pm 2001/11/07 21:24:15 1.23 +++ loncom/homework/edit.pm 2002/04/26 13:30:08 1.34 @@ -1,10 +1,38 @@ # The LearningOnline Network with CAPA # edit mode helpers +# +# $Id: edit.pm,v 1.34 2002/04/26 13:30:08 harris41 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) ." ". - &insertlist($target,$token). - " -\n"; -#". + &insertlist($target,$token).&end_row().&start_spanning_row(); +#". # &movebuttons($target,$token). # "\n"; } @@ -80,6 +106,10 @@ 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=''.$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