--- loncom/homework/edit.pm 2001/06/26 21:39:55 1.14 +++ loncom/homework/edit.pm 2001/11/08 20:42:32 1.24 @@ -21,7 +21,10 @@ 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)."<tr><td>$description</td> <td>Delete". &deletelist($target,$token) @@ -30,6 +33,9 @@ sub tag_start { &insertlist($target,$token). "</td> </tr><tr><td colspan=\"3\">\n"; +#<td>". +# &movebuttons($target,$token). +# "</tr><tr><td colspan=\"3\">\n"; } return $result; } @@ -54,7 +60,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 +80,15 @@ sub end_table { return $result; } +sub movebuttons { + my ($target,$token) = @_; + my $result='<input type="submit" name="moveup.'. + $Apache::lonxml::curdepth.'" value="Move Up" />'; + $result.='<input type="submit" name="movedown.'. + $Apache::lonxml::curdepth.'" value="Move Down" />'; + return $result; +} + sub deletelist { my ($target,$token) = @_; my $result = "<select name=\"delete_$Apache::lonxml::curdepth\"> @@ -146,7 +161,7 @@ $optionlist } sub handle_insert { - if (!$ENV{"form.insert_$Apache::lonxml::curdepth"}) { return ''; } + 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"}; @@ -156,14 +171,51 @@ sub handle_insert { if ($newtag =~ /::/) { ($namespace,$newtag) = split(/::/,$newtag); } $result.="\n<$newtag>\n</$newtag>"; } else { - { - no strict 'refs'; - $result.=&$func(); + if (defined(&$func)) { + { + no strict 'refs'; + $result.=&$func(); + } + } else { + my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"}; + &Apache::lonxml::error("Unable to insert tag $newtag, $func was not defined."); } } return $result; } +sub insert_responseparam { + return ' + <responseparam />'; +} + +sub insert_formularesponse { + return ' +<formularesponse answer="" samples=""> + <textline /> + <hintgroup> + </hintgroup> +</formularesponse>'; +} + +sub insert_numericalresponse { + return ' +<numericalresponse answer=""> + <textline /> + <hintgroup> + </hintgroup> +</numericalresponse>'; +} + +sub insert_stringresponse { + return ' +<stringresponse answer="" type=""> + <textline /> + <hintgroup> + </hintgroup> +</stringresponse>'; +} + sub insert_optionresponse { return ' <optionresponse max="10"> @@ -174,9 +226,43 @@ sub insert_optionresponse { </optionresponse>'; } +sub insert_radiobuttonresponse { + return ' +<radiobuttonresponse max="10"> + <foilgroup> + </foilgroup> + <hintgroup> + </hintgroup> +</radiobuttonresponse>'; +} + +sub insert_displayduedate { return '<displayduedate />'; } +sub insert_displaytitle { return '<displaytitle />'; } +sub insert_hintpart { + return ' +<hintpart on="default"> + <startouttext/> + <endouttext /> +</hintpart>'; +} + +sub insert_numericalhint { + return ' +<numericalhint> +</numericalhint>'; +} + +sub insert_startouttext { + return "<startouttext />\n<endouttext />"; +} + +sub insert_script { + return "\n<script type=\"loncapa/perl\">\n</script>"; +} + sub editfield { my ($tag,$data,$description,$minwidth,$minheight)=@_; - + my $count=0; my $maxlength=-1; map { $count++; @@ -211,21 +297,14 @@ sub modifiedfield { return $result; } -sub insert_startouttext { - return "<startouttext />\n<endouttext />"; -} - -sub insert_script { - return "\n<script type=\"loncapa/perl\">\n</script>"; -} - -# Returns a 1 if the toekn has been modified and you should rebuild the tag +# 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) { @@ -236,16 +315,23 @@ sub get_new_args { return $rebuild; } +# looks for /> on start tags sub rebuild_tag { my ($token) = @_; my $result; 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.'"'; } - $result.=">"; + if ($token->[4] =~ m:/>$:) { + $result.=' />'; + } else { + $result.='>'; + } } elsif ( $token->[0] eq 'E' ) { $result = '</'.$token->[1].'>'; } @@ -280,5 +366,29 @@ sub select_arg { 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 selected=\"on\">$option</option>\n"; + $found=1; + } else { + $optionlist.="<option>$option</option>\n"; + } + } + $optionlist.="<option value=\"TYPEDINVALUE\">Type in value</option>\n"; + if ($found) { + $result.=$description.'<select name="'."$Apache::lonxml::curdepth.$name".'"> + '.$optionlist.' + </select></td></tr><tr><td colspan="3">'; + } else { + $result.=&text_arg($description,$name,$token,$size); + } + return $result; +} 1; __END__