[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