Bigtop
view release on metacpan or search on metacpan
lib/Bigtop/Parser.pm view on Meta::CPAN
if ( $doomed_child >= 0 ) {
# This probably leaks memory because children have parent pointers.
# But the parent is me and I'm the app_body, so maybe not.
splice @{ $statements }, $doomed_child, 1;
}
# else, nothing to see here, move along quietly
return [ 1 ];
}
sub get_method_statement {
my $self = shift;
my $keyword = shift;
my $statements = $self->{ __BODY__ }{'method_statement(s?)'};
STATEMENT:
foreach my $statement ( @{ $statements} ) {
next STATEMENT unless $statement->{__KEYWORD__} eq $keyword;
return $statement;
}
return;
}
sub change_type {
my $self = shift;
shift;
my $data = shift;
return unless ( $self->get_ident eq $data->{ident} );
$self->set_type( $data->{new_type} );
return [ 1 ];
}
sub add_date_popups {
my $self = shift;
shift;
my $table = shift;
return unless $self->{ __TYPE__ } =~ /form/;
# First, make sure the form is named for the table (or has a name)
my $form_statement = $self->get_method_statement( 'form_name' );
my $form_name = $table;
if ( defined $form_statement ) {
$form_name = $form_statement->{ __ARGS__ }->get_first_arg();
}
else { # create a form_name statement
$self->add_method_statement(
{
keyword => 'form_name',
new_value => $table,
}
);
}
# Second, make sure that name is in javascript code for calendars.
my $javascript_code = qq{\$self->calendar_month_js( '$table' )},
my $keys_statement = $self->get_method_statement( 'extra_keys' );
my $extra_keys;
if ( defined $keys_statement ) {
push @{ $keys_statement->{ __ARGS__ } },
{ javascript => $javascript_code };
$extra_keys = $keys_statement->{ __ARGS__ };
}
else {
$self->add_method_statement(
{
keyword => 'extra_keys',
new_value => {
'keys' => 'javascript',
'values' => $javascript_code,
},
}
);
$extra_keys = $self->get_method_statement( 'extra_keys' )->{__ARGS__};
}
my $ident = $self->get_ident;
return [
$ident . '::form_name' => $table,
$ident . '::extra_keys' => $extra_keys,
];
}
sub update_field_name {
my $self = shift;
my $child_output = shift;
my $data = shift;
my $count = 0;
# remember that foreach aliases, this loop alters child output
foreach my $key_or_val ( @{ $child_output } ) {
if ( $count % 2 == 0 ) {
$key_or_val = $self->{__IDENT__} . '::' . $key_or_val;
}
$count++;
}
return $child_output;
}
sub remove_field {
my $self = shift;
my $child_output = shift;
my $data = shift;
my $count = 0;
# remember that foreach aliases, this loop alters child output
foreach my $key_or_val ( @{ $child_output } ) {
if ( $count % 2 == 0 ) {
$key_or_val = $self->{__IDENT__} . '::' . $key_or_val;
}
$count++;
}
( run in 1.315 second using v1.01-cache-2.11-cpan-98e64b0badf )