From: Kirrily R. <sk...@us...> - 2001-03-15 17:04:34
|
Update of /cvsroot/formmagick/formmagick/lib/CGI In directory usw-pr-cvs1:/tmp/cvs-serv17086 Modified Files: FormMagick.pm Log Message: Cleaned up some weirdness with the options_labels and options_values stuff, as pointed out by DDUNCAN. Also cleaned up some of the inputfield-related code, which was all horribly messy indent-wise. srl, you're the one who started off with a 2-space indent... can we keep it that way please? Index: FormMagick.pm =================================================================== RCS file: /cvsroot/formmagick/formmagick/lib/CGI/FormMagick.pm,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** FormMagick.pm 2001/03/13 22:26:59 1.35 --- FormMagick.pm 2001/03/15 17:06:38 1.36 *************** *** 548,560 **** # make HTML for the form field. $inputfield = $self->build_inputfield ({TYPE => $type, ! FIELDNAME => $fieldname, ! LABELS => [@option_labels], ! VALUES => [@option_values], ! LABEL => $label, ! VALUE => $value, ! TAGMAKER => $tagmaker, ! CHECKED => $checked, ! MULTIPLE => $multiple, ! SIZE=> $size}); --- 548,560 ---- # make HTML for the form field. $inputfield = $self->build_inputfield ({TYPE => $type, ! FIELDNAME => $fieldname, ! LABELS => \@option_labels, ! VALUES => \@option_values, ! LABEL => $label, ! VALUE => $value, ! TAGMAKER => $tagmaker, ! CHECKED => $checked, ! MULTIPLE => $multiple, ! SIZE=> $size}); *************** *** 1115,1155 **** sub get_option_labels_and_values { ! my ($self, $cgi, $fieldinfo) = @_; ! my @option_labels; # labels for items in a list ! my @option_values; # the values hidden behind those labels ! my $options_attribute = $fieldinfo->{'OPTIONS'} || ""; ! #debug ($self, "options attribute is $options_attribute"); ! my $options_ref = $self->parse_options_attribute($cgi, $options_attribute); ! my $err = join (" ", $options_ref); ! #debug ($self, $err); ! ! #print Dumper $options_ref; ! ! # DWIM with the data that came in from the XML file or the options function, ! # since we may have gotten an array or a hash for those values. ! if (ref($options_ref) eq "HASH") { ! foreach my $k (sort keys %$options_ref) { ! # the keys are labels, the values are values. ! push @option_labels, $k; ! push @option_values, $options_ref->{$k}; ! #debug ($self, $k); ! #debug ($self, $options_ref->{$k}); ! ! } ! } elsif (ref($options_ref) eq "ARRAY") { ! # labels are the same as values here. this is not a mistake. ! @option_labels = @$options_ref; ! @option_values = @$options_ref; ! } else { ! debug($self, "Something weird's going on."); ! return undef; } ! ! my $return_value = {labels => [@option_labels], vals => [@option_values]}; ! ! return $return_value; } --- 1115,1147 ---- sub get_option_labels_and_values { ! my ($self, $cgi, $fieldinfo) = @_; ! my @option_labels; # labels for items in a list ! my @option_values; # the values hidden behind those labels ! my $options_attribute = $fieldinfo->{'OPTIONS'} || ""; ! ! my $options_ref = $self->parse_options_attribute($cgi, $options_attribute); ! my $err = join (" ", $options_ref); ! ! # DWIM with the data that came in from the XML file or the options function, ! # since we may have gotten an array or a hash for those values. ! if (ref($options_ref) eq "HASH") { ! foreach my $k (sort keys %$options_ref) { ! # the keys are the option field values, the values are the option text ! push @option_values, $k; ! push @option_labels, $options_ref->{$k}; } + } elsif (ref($options_ref) eq "ARRAY") { + # labels are the same as values here. this is not a mistake. + @option_labels = @$options_ref; + @option_values = @$options_ref; + } else { + debug($self, "Something weird's going on."); + return undef; + } ! my $return_value = {labels => [@option_labels], vals => [@option_values]}; ! return $return_value; } *************** *** 1162,1242 **** sub build_inputfield { ! my ($self, $forminfo) = @_; ! ! my $type = $forminfo->{TYPE}; ! my $fieldname = $forminfo->{'FIELDNAME'}; ! my @option_labels = $forminfo->{LABELS}; ! my @option_values = $forminfo->{VALUES}; ! my $tagmaker = $forminfo->{'TAGMAKER'}; ! my $checked = $forminfo->{'CHECKED'}; ! my $value = $forminfo->{'VALUE'}; ! my $label = $forminfo->{'LABEL'}; ! my $multiple = $forminfo->{'MULTIPLE'}; ! my $size = $forminfo->{'SIZE'}; ! ! #debug ($self, join(" ", @option_labels) ); ! ! my $inputfield; # HTML for a form input ! ! if ($type eq "SELECT") { ! ! # Make a select box. Yes, the []s in the option_group() call are a ! # bit weird, but that's the syntax that works. -srl ! ! # don't specify a size if a size wasn't given in the XML ! if ($size ne "") { ! $inputfield = $tagmaker->select_start( ! type => $type, ! name => $fieldname, ! multiple => $multiple, ! size => $size ) ! } else { ! $inputfield = $tagmaker->select_start( ! type => $type, ! name => $fieldname, ! multiple => $multiple, ! size => $size ) ! } ! $inputfield = $inputfield . $tagmaker->option_group( ! value => @option_values, ! text => @option_labels, ! ) . $tagmaker->select_end; ! } elsif ($type eq "RADIO") { ! $inputfield = $tagmaker->input_group(type => "$type", ! name => $fieldname, ! value => @option_values, ! text => @option_labels ); ! } elsif ($type eq "CHECKBOX") { ! $inputfield = $tagmaker->input(type => "$type", ! name => $fieldname, ! value => $value, ! checked => $checked, ! text => $label); } else { ! # map HTML::TagMaker's functions to the type of this field. ! my %translation_table = ( ! TEXTAREA => 'textarea', ! CHECKBOX => 'input_field', ! TEXT => 'input_field', ! ); ! my $function_name = $translation_table{$type}; ! # make sure no size gets specified if the size isn't given in the XML ! if ($size ne "") { ! $inputfield = $tagmaker->$function_name(type => "$type", ! name => "$fieldname", ! value => "$value", ! size => "$size", ! ); ! } else { ! $inputfield = $tagmaker->$function_name(type => "$type", ! name => "$fieldname", ! value => "$value", ! ); ! } } ! ! ! return $inputfield; ! } --- 1154,1231 ---- sub build_inputfield { ! my ($self, $forminfo) = @_; ! ! my $type = $forminfo->{TYPE}; ! my $fieldname = $forminfo->{'FIELDNAME'}; ! my $option_labels_ref = $forminfo->{LABELS}; ! my $option_values_ref = $forminfo->{VALUES}; ! my $tagmaker = $forminfo->{'TAGMAKER'}; ! my $checked = $forminfo->{'CHECKED'}; ! my $value = $forminfo->{'VALUE'}; ! my $label = $forminfo->{'LABEL'}; ! my $multiple = $forminfo->{'MULTIPLE'}; ! my $size = $forminfo->{'SIZE'}; ! ! my $inputfield; # HTML for a form input ! ! if ($type eq "SELECT") { ! ! # don't specify a size if a size wasn't given in the XML ! if ($size eq "") { ! $inputfield = $tagmaker->select_start( ! type => $type, ! name => $fieldname, ! multiple => $multiple, ! ) ! } else { ! $inputfield = $tagmaker->select_start( ! type => $type, ! name => $fieldname, ! multiple => $multiple, ! size => $size ! ) ! } ! $inputfield = $inputfield . $tagmaker->option_group( ! value => $option_values_ref, ! text => $option_labels_ref, ! ) . $tagmaker->select_end; ! } elsif ($type eq "RADIO") { ! $inputfield = $tagmaker->input_group(type => "$type", ! name => $fieldname, ! value => $option_values_ref, ! text => $option_labels_ref ); ! } elsif ($type eq "CHECKBOX") { ! $inputfield = $tagmaker->input( ! type => "$type", ! name => $fieldname, ! value => $value, ! checked => $checked, ! text => $label ! ); ! } else { ! # map HTML::TagMaker's functions to the type of this field. ! my %translation_table = ( ! TEXTAREA => 'textarea', ! CHECKBOX => 'input_field', ! TEXT => 'input_field', ! ); ! my $function_name = $translation_table{$type}; ! # make sure no size gets specified if the size isn't given in the XML ! if ($size eq "") { ! $inputfield = $tagmaker->$function_name( ! type => "$type", ! name => "$fieldname", ! value => "$value", ! ); } else { ! $inputfield = $tagmaker->$function_name( ! type => "$type", ! name => "$fieldname", ! value => "$value", ! size => "$size", ! ); } ! } ! return $inputfield; } *************** *** 1262,1273 **** if ($options_field =~ /=>/) { # user supplied a hash ! #debug ($self, "options_ref should be a hashref"); ! $options_ref = { eval $options_field }; # make options_ref a hashref } elsif ($options_field =~ /,/) { # user supplied an array ! #debug ($self, "options ref should be an arrayref"); $options_ref = [ eval $options_field ]; # make options_ref an arrayref } else { # user supplied a sub name $options_field =~ s/\(.*\)$//; # strip parens ! #debug ($self, "options ref should be call_options_routine"); $options_ref = call_options_routine($self, $cgi, $options_field); } --- 1251,1262 ---- if ($options_field =~ /=>/) { # user supplied a hash ! #debug ($self, "options_ref should be a hashref"); ! $options_ref = { eval $options_field }; # make options_ref a hashref } elsif ($options_field =~ /,/) { # user supplied an array ! #debug ($self, "options ref should be an arrayref"); $options_ref = [ eval $options_field ]; # make options_ref an arrayref } else { # user supplied a sub name $options_field =~ s/\(.*\)$//; # strip parens ! #debug ($self, "options ref should be call_options_routine"); $options_ref = call_options_routine($self, $cgi, $options_field); } *************** *** 1292,1295 **** --- 1281,1285 ---- # It ends up looking something like \&main::get_select_options(\$cgi). # --srl + my $cp = $self->{calling_package}; my $voodoo = "\&$cp\:\:$options_field(\$cgi)"; |