# pjs -- Added new methods to @EXPORT
our @EXPORT =
qw(
- to_cgi to_field make_element_foreign search_inputs unselect_element
+ to_cgi to_field foreign_input_delimiter search_inputs unselect_element
_field_from_how _field_from_relationship _field_from_column
_to_textarea _to_textfield _to_select _select_guts
_to_foreign_inputs _to_enum_select _to_bool_select
my ($class, @columns) = @_; # pjs -- added columns arg
my $args = {};
if (not @columns) {
- @columns = $class->columns;
+ @columns = $class->columns;
+ # Eventually after stabalization, we could add display_columns
+ #keys map { $_ => 1 } ($class->display_columns, $class->columns);
}
else {
if ( ref $columns[-1] eq 'HASH' ) { $args = pop @columns; }
=head2 to_field($field [, $how][, $args])
This maps an individual column to a form element. The C<how> argument
-can be used to force the field type into any you want. It tells AsForm how
-to make the input ie-- forces it to use the method "_to_$how".
+can be used to force the field type into any you want. All that you need
+is a method named "_to_$how" in your class. Your class inherits many from
+AsForm already. Override them at will.
+
If C<how> is specified but the class cannot call the method it maps to,
then AsForm will issue a warning and the default input will be made.
You can write your own "_to_$how" methods and AsForm comes with many.
_rename_foreign_input($html_el_or_hash_of_them); # changes made by reference
Recursively renames the foreign inputs made by _to_foreign_inputs so they
-can be processed generically. The format is "accessor__AsForeign_colname".
+can be processed generically. It uses foreign_input_delimiter.
-So if an Employee is a Person who has_own Address and you call
+So if an Employee is a Person who has_many Addresses and you call and the
+method 'foreign_input_delimiter' returns '__AF__' then
- Employee->to_field("person")
+ Employee->to_field("person");
-then you will get inputs for the Person as well as their Address (by default,
+will get inputs for the Person as well as their Address (by default,
override _field_from_relationship to change logic) named like this:
- person__AsForeign__address__AsForeign__street
- person__AsForeign__address__AsForeign__city
- person__AsForeign__address__AsForeign__state
- person__AsForeign__address__AsForeign__zip
+ person__AF__address__AF__street
+ person__AF__address__AF__city
+ person__AF__address__AF__state
+ person__AF__address__AF__zip
And the processor would know to create this address, put the address id in
-person->address data slot, create the person and put the person id in the employee->person data slot and then create the employee with that data.
-
-Overriede make_element_foreign to change how you want a foreign param labeled.
-
-=head2 make_element_foreign
-
- $class->make_element_foreign($accessor, $element);
-
-Makes an HTML::Element type object foreign elemen representing the
-class's accessor. (IE this in an input element for $class->accessor :) )
+person->{address} data slot, insert the person and put the person id in the employee->{person} data slot and then insert the employee with that data.
=cut
-sub make_element_foreign {
- my ($self, $accssr, $element) = @_;
- $element->attr( name => $accssr . "__AsForeign__" . $element->attr('name'));
-}
-
-
-
sub _rename_foreign_input {
my ($self, $accssr, $element) = @_;
+ my $del = $self->foreign_input_delimiter;
+
if ( ref $element ne 'HASH' ) {
- # my $new_name = $accssr . "__AsForeign__" . $input->attr('name');
- $self->make_element_foreign($accssr, $element);
+ # my $new_name = $accssr . "__AF__" . $input->attr('name');
+ $element->attr( name => $accssr . $del . $element->attr('name'));
}
else {
$self->_rename_foreign_input($accssr, $element->{$_})
foreach (keys %$element);
}
}
+
+=head2 foreign_input_delimiter
+
+This tells AsForm what to use to delmit forieign_input names with. The name has the form -- $foreign_accessor. $DELIMITER . $foreign_column
+
+=cut
+
+sub foreign_input_delimiter { '__AF__' };
+
=head2 _box($value)
This functions computes the dimensions of a textarea based on the value
=cut
-our ($min_rows, $max_rows, $min_cols, $max_cols) = (2 => 50, 20 => 100);
sub _box
{
+
+ my ($min_rows, $max_rows, $min_cols, $max_cols) = (2 => 50, 20 => 100);
my $text = shift;
if ($text) {
my @rows = split /^/, $text;