HTML-FormFu-ExtJS
view release on metacpan or search on metacpan
lib/HTML/FormFu/ExtJS.pm view on Meta::CPAN
|| $element->type eq "Button"
|| $element->type eq "Reset"
|| $element->type eq "ContentButton" );
# omit rendering field with 'omit_rendering' flag
next
if( defined $element->attributes()->{omit_rendering} && $element->attributes()->{omit_rendering} );
push( @{$output}, $self->_render_item( $element ) );
}
# remove undef elements
$output = [ grep { defined $_ } @{$output} ];
return $output;
}
sub render_items {
return js_dumper( shift->_render_items );
}
sub render_buttons {
my $self = shift;
return js_dumper( $self->_render_buttons );
}
sub _render_buttons {
my $self = shift;
my $from = shift || $self;
my $output = [];
foreach my $element ( @{ $from->get_all_elements() } ) {
next
unless ( $element->type eq "Submit"
|| $element->type eq "Button"
|| $element->type eq "ContentButton"
|| $element->type eq "Reset" );
my $class = ext_class_of( $element );
push( @{$output}, $class->render($element) );
}
return $output;
}
# Altlasten
sub ext_items {
my $self = shift;
my @items;
my %map_types = (
Text => "textfield",
Checkbox => "checkbox",
Textarea => "textarea",
Date => "datefield",
Hidden => "hidden",
Radio => "radio",
Select => "combo",
Fieldset => "fieldset",
);
for ( @{ $self->get_elements() } ) {
next if ( $_->type eq "Submit" || $_->type eq "Button" );
tie my %obj, 'Tie::Hash::Indexed';
if ( $_->type eq "Fieldset" ) {
%obj =
( items => \ext_items($_), title => $_->legend, autoHeight => 1 );
} elsif ( $_->type eq "SimpleTable" ) {
my @tr = grep { $_->tag eq "tr" } @{ $_->get_elements() };
my @items;
push( @items, ext_items($_) ) for (@tr);
#die Dumper(@items);
%obj = ( layout => "column", items => \( join( ",", @items ) ) );
} elsif ( $_->type eq "Block" ) {
if ( $_->tag eq "tr" ) {
return ext_items($_);
} elsif ( $_->tag eq "td" ) {
%obj = (
columnWidth => 0.5,
layout => 'form',
items => \ext_items($_)
);
}
} elsif ( $_->type eq "Repeatable" ) {
return ext_items($_);
} elsif ( $_->type eq "Checkbox" ) {
%obj = (
hideLabel => 1,
boxLabel => $_->label,
$_->default ? ( inputValue => $_->default ) : ()
);
} elsif ( $_->type eq "Blank" ) {
%obj = ( html => $_->name );
} elsif ( $_->type eq "Select" ) {
my $data;
foreach my $option ( @{ $_->_options } ) {
push( @{$data}, [ $option->{value}, $option->{label} ] );
}
my $string =
js_dumper( { fields => [ "value", "text" ], data => $data } );
%obj = (
emptyText => $_->label,
mode => "local",
editable => \0,
displayField => "text",
valueField => "value",
hiddenName => $_->name,
autoWidth => \0,
forceSelection => \1,
triggerAction => "all",
store => \( "new Ext.data.SimpleStore(" . $string . ")" )
);
}
my $parent = $self->can("_get_attributes") ? $self : $self->form;
%obj = (
%obj,
$_->can("label") ? ( fieldLabel => $_->label ) : (),
$_->name ? ( name => $_->name ) : (),
( $_->can("default") && $_->default )
? ( value => $_->default )
: (),
$parent->_get_attributes($_)
);
$obj{xtype} = $map_types{ $_->type } if ( $map_types{ $_->type } );
my $string = js_dumper( \%obj );
utf8::decode($string);
( run in 0.840 second using v1.01-cache-2.11-cpan-5b529ec07f3 )