[Jifty-commit] r4847 - in jifty/trunk: lib/Jifty lib/Jifty/Web/Form
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Mon Jan 14 13:39:01 EST 2008
Author: alexmv
Date: Mon Jan 14 13:39:00 2008
New Revision: 4847
Modified:
jifty/trunk/ (props changed)
jifty/trunk/lib/Jifty/Action.pm
jifty/trunk/lib/Jifty/Web/Form/Clickable.pm
Log:
r26743 at zoq-fot-pik: chmrr | 2008-01-14 13:37:37 -0500
* Perltidy
* Revert r4829 -- it registers all actions in the *form*, which is
wrong.
* The correct logic (butting the registration on the button) was
already in the $action->button method; move it into Clickable.
Modified: jifty/trunk/lib/Jifty/Action.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Action.pm (original)
+++ jifty/trunk/lib/Jifty/Action.pm Mon Jan 14 13:39:00 2008
@@ -647,17 +647,6 @@
Jifty->web->form->print_action_registration($self->moniker);
}
- # Not registered yet, so we need to place registration in the button itself
- elsif ( not Jifty->web->form->printed_actions->{ $self->moniker } ) {
-
- # Otherwise, if we're not registered yet, do it in the button
- my $arguments = $self->arguments;
- $args{parameters}{ $self->register_name } = ref $self;
- $args{parameters}{ $self->fallback_form_field_name($_) }
- = $self->argument_value($_) || $arguments->{$_}->{'default_value'}
- for grep { $arguments->{$_}{constructor} } keys %{ $arguments };
- }
-
# Add whatever additional arguments they've requested to the button
$args{parameters}{$self->form_field_name($_)} = $args{arguments}{$_}
for keys %{$args{arguments}};
Modified: jifty/trunk/lib/Jifty/Web/Form/Clickable.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Web/Form/Clickable.pm (original)
+++ jifty/trunk/lib/Jifty/Web/Form/Clickable.pm Mon Jan 14 13:39:00 2008
@@ -156,28 +156,30 @@
my ($root) = $ENV{'REQUEST_URI'} =~ /([^\?]*)/;
my %args = (
- parameters => {},
- as_button => 0,
- as_link => 0,
+ parameters => {},
+ as_button => 0,
+ as_link => 0,
@_,
);
- $class->call_trigger('before_new', \%args);
+ $class->call_trigger( 'before_new', \%args );
$args{render_as_button} = delete $args{as_button};
$args{render_as_link} = delete $args{as_link};
- my $self = $class->SUPER::new({
- class => '',
- label => 'Click me!',
- url => $root,
- escape_label => 1,
- tooltip => '',
- continuation => Jifty->web->request->continuation,
- submit => [],
- preserve_state => 0,
- parameters => {},
- }, \%args);
+ my $self = $class->SUPER::new(
+ { class => '',
+ label => 'Click me!',
+ url => $root,
+ escape_label => 1,
+ tooltip => '',
+ continuation => Jifty->web->request->continuation,
+ submit => [],
+ preserve_state => 0,
+ parameters => {},
+ },
+ \%args
+ );
for (qw/continuation call/) {
$self->{$_} = $self->{$_}->id if $self->{$_} and ref $self->{$_};
@@ -194,10 +196,10 @@
if ( !ref($submit) ) { push @submit_temp, $submit }
# We've been handed a Jifty::Action to submit
- elsif ( blessed($submit) ) {
- push @submit_temp, $submit->moniker ;
- Jifty->web->form->register_action($submit);
- }
+ elsif ( blessed($submit) ) {
+ push @submit_temp, $submit->moniker;
+ $self->register_action($submit);
+ }
# We've been handed a hashref which contains an action and arguments
else {
@@ -209,20 +211,18 @@
# Add the action's moniker to the submit
push @submit_temp, $submit->{'action'}->moniker;
- Jifty->web->form->register_action($submit->{'action'});
-
+ $self->register_action($submit);
}
}
@{ $self->{submit} } = @submit_temp;
}
-
# Anything doing fragment replacement needs to preserve the
# current state as well
if ( grep { $self->$_ } $self->handlers or $self->preserve_state ) {
my %state_vars = Jifty->web->state_variables;
- while ( my ($key, $val) = each %state_vars ) {
+ while ( my ( $key, $val ) = each %state_vars ) {
if ( $key =~ /^region-(.*?)\.(.*)$/ ) {
$self->region_argument( $1, $2 => $val );
} elsif ( $key =~ /^region-(.*)$/ ) {
@@ -307,8 +307,8 @@
sub state_variable {
my $self = shift;
- defined $self->call_trigger('before_state_variable', @_)
- or return; # if aborted by trigger
+ defined $self->call_trigger( 'before_state_variable', @_ )
+ or return; # if aborted by trigger
my ( $key, $value, $fallback ) = @_;
if ( defined $value and length $value ) {
@@ -350,9 +350,9 @@
my $self = shift;
my ( $region, $argument, $value ) = @_;
- my $name = ref $region ? $region->qualified_name : $region;
+ my $name = ref $region ? $region->qualified_name : $region;
my $defaults = Jifty->web->get_region($name);
- my $default = $defaults ? $defaults->default_argument($argument) : undef;
+ my $default = $defaults ? $defaults->default_argument($argument) : undef;
if ( ( not defined $default and not defined $value )
or ( defined $default and defined $value and $default eq $value ) )
@@ -369,8 +369,9 @@
my %old_args = @_;
my %new_args;
- while (my ($key, $val) = each %old_args) {
- my ($new_key, $new_val) = Jifty::Request::Mapper->query_parameters($key => $val);
+ while ( my ( $key, $val ) = each %old_args ) {
+ my ( $new_key, $new_val )
+ = Jifty::Request::Mapper->query_parameters( $key => $val );
$new_args{$new_key} = $new_val;
}
@@ -391,17 +392,19 @@
my %parameters;
if ( $self->returns ) {
- %parameters = Jifty::Request::Mapper->query_parameters( %{ $self->returns } );
+ %parameters
+ = Jifty::Request::Mapper->query_parameters( %{ $self->returns } );
$parameters{"J:CREATE"} = 1;
- $parameters{"J:PATH"} = Jifty::Web::Form::Clickable->new( url => $self->url,
- parameters => $self->{parameters},
- continuation => undef,
- )->complete_url;
+ $parameters{"J:PATH"} = Jifty::Web::Form::Clickable->new(
+ url => $self->url,
+ parameters => $self->{parameters},
+ continuation => undef,
+ )->complete_url;
} else {
- %parameters = %{ $self->{parameters} };
+ %parameters = %{ $self->{parameters} };
}
- %parameters = _map( %{$self->{state_variable} || {}}, %parameters );
+ %parameters = _map( %{ $self->{state_variable} || {} }, %parameters );
$parameters{"J:CALL"} = $self->call
if $self->call;
@@ -422,13 +425,15 @@
sub post_parameters {
my $self = shift;
- my %parameters = ( _map( %{ $self->{fallback} || {} } ), $self->parameters );
+ my %parameters
+ = ( _map( %{ $self->{fallback} || {} } ), $self->parameters );
my ($root) = $ENV{'REQUEST_URI'} =~ /([^\?]*)/;
# Submit actions should only show up once
my %uniq;
- $self->submit([grep {not $uniq{$_}++} @{$self->submit}]) if $self->submit;
+ $self->submit( [ grep { not $uniq{$_}++ } @{ $self->submit } ] )
+ if $self->submit;
# Add a redirect, if this isn't to the right page
if ( $self->url ne $root and not $self->returns ) {
@@ -437,11 +442,12 @@
arguments => { url => $self->url } );
$parameters{ $redirect->register_name } = ref $redirect;
$parameters{ $redirect->form_field_name('url') } = $self->url;
- $parameters{"J:ACTIONS"} = join( '!', @{ $self->submit }, $redirect->moniker )
- if $self->submit;
+ $parameters{"J:ACTIONS"}
+ = join( '!', @{ $self->submit }, $redirect->moniker )
+ if $self->submit;
} else {
$parameters{"J:ACTIONS"} = join( '!', @{ $self->submit } )
- if $self->submit;
+ if $self->submit;
}
return %parameters;
@@ -484,8 +490,8 @@
sub _defined_accessor_values {
my $self = shift;
- return { map { my $val = $self->$_; defined $val ? ($_ => $val) : () }
- $self->SUPER::accessors };
+ return { map { my $val = $self->$_; defined $val ? ( $_ => $val ) : () }
+ $self->SUPER::accessors };
}
=head2 as_link
@@ -501,24 +507,26 @@
my $args = $self->_defined_accessor_values;
my $link = Jifty::Web::Form::Link->new(
- { %$args,
- escape_label => $self->escape_label,
- url => $self->complete_url,
- target => $self->target,
- continuation => $self->_continuation,
- @_ }
+ { %$args,
+ escape_label => $self->escape_label,
+ url => $self->complete_url,
+ target => $self->target,
+ continuation => $self->_continuation,
+ @_
+ }
);
return $link;
}
sub _continuation {
+
# continuation info used by the update() call on client side
my $self = shift;
- if ($self->call) {
- return { 'type' => 'call', id => $self->call };
+ if ( $self->call ) {
+ return { 'type' => 'call', id => $self->call };
}
- if ($self->returns) {
- return { 'create' => $self->url };
+ if ( $self->returns ) {
+ return { 'create' => $self->url };
}
return {};
@@ -536,12 +544,13 @@
sub as_button {
my $self = shift;
- my $args = $self->_defined_accessor_values;
+ my $args = $self->_defined_accessor_values;
my $field = Jifty::Web::Form::Field->new(
- { %$args,
- type => 'InlineButton',
- continuation => $self->_continuation,
- @_ }
+ { %$args,
+ type => 'InlineButton',
+ continuation => $self->_continuation,
+ @_
+ }
);
my %parameters = $self->post_parameters;
@@ -551,7 +560,7 @@
grep { defined $parameters{$_} } keys %parameters
);
$field->name( join '|', keys %{ $args->{parameters} } );
- $field->button_as_link($self->render_as_link);
+ $field->button_as_link( $self->render_as_link );
return $field;
}
@@ -576,39 +585,76 @@
my @hooks = @{$value};
for my $hook (@hooks) {
next unless ref $hook eq "HASH";
- $hook->{region} ||= $hook->{refresh} || Jifty->web->qualified_region;
+ $hook->{region} ||= $hook->{refresh}
+ || Jifty->web->qualified_region;
- my $region = ref $hook->{region} ? $hook->{region} : Jifty->web->get_region( $hook->{region} );
+ my $region
+ = ref $hook->{region}
+ ? $hook->{region}
+ : Jifty->web->get_region( $hook->{region} );
- if ($hook->{replace_with}) {
+ if ( $hook->{replace_with} ) {
my $currently_shown = '';
if ($region) {
- my $state_var = Jifty->web->request->state_variable("region-".$region->qualified_name);
- $currently_shown = $state_var->value if ($state_var);
- }
- # Toggle region if the toggle flag is set, and clicking wouldn't change path
- if ($hook->{toggle} and $hook->{replace_with} eq $currently_shown) {
- $self->region_fragment( $hook->{region}, "/__jifty/empty" );
+ my $state_var = Jifty->web->request->state_variable(
+ "region-" . $region->qualified_name );
+ $currently_shown = $state_var->value if ($state_var);
+ }
+
+ # Toggle region if the toggle flag is set, and clicking wouldn't change path
+ if ( $hook->{toggle}
+ and $hook->{replace_with} eq $currently_shown )
+ {
+ $self->region_fragment( $hook->{region},
+ "/__jifty/empty" );
+
# Jifty->web->request->remove_state_variable('region-'.$region->qualified_name);
} else {
- $self->region_fragment( $hook->{region}, $hook->{replace_with} )
+ $self->region_fragment( $hook->{region},
+ $hook->{replace_with} );
}
-
+
}
$self->region_argument( $hook->{region}, $_ => $hook->{args}{$_} )
for keys %{ $hook->{args} };
if ( $hook->{submit} ) {
$self->{submit} ||= [];
- $hook->{submit} = [ $hook->{submit} ] unless ref $hook->{submit} eq "ARRAY";
+ $hook->{submit} = [ $hook->{submit} ]
+ unless ref $hook->{submit} eq "ARRAY";
push @{ $self->{submit} }, @{ $hook->{submit} };
}
}
}
- return ( ( not( $self->submit ) || @{ $self->submit } || $self->render_as_button )
+ return (
+ ( not( $self->submit )
+ || @{ $self->submit }
+ || $self->render_as_button
+ )
? $self->as_button(@_)
- : $self->as_link(@_) );
+ : $self->as_link(@_)
+ );
+}
+
+=head2 register_action ACTION
+
+Reisters the action if it isn't registered already, but only on the
+link. That is, the registration will not be seen by any other buttons
+in the form.
+
+=cut
+
+sub register_action {
+ my $self = shift;
+ my ($action) = @_;
+ return if Jifty->web->form->printed_actions->{ $action->moniker };
+
+ my $arguments = $action->arguments;
+ $self->parameter( $action->register_name, ref $action );
+ $self->parameter( $action->fallback_form_field_name($_),
+ $action->argument_value($_) || $arguments->{$_}->{'default_value'} )
+ for grep { $arguments->{$_}{constructor} } keys %{$arguments};
}
1;
More information about the Jifty-commit
mailing list