[Jifty-commit] r1132 - in jifty/trunk: . lib/Jifty lib/Jifty/Web/Form share/web/static/js share/web/templates/__jifty/error share/web/templates/__jifty/webservices

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Wed May 31 17:31:21 EDT 2006


Author: alexmv
Date: Wed May 31 17:31:20 2006
New Revision: 1132

Modified:
   jifty/trunk/   (props changed)
   jifty/trunk/lib/Jifty/Action.pm
   jifty/trunk/lib/Jifty/Result.pm
   jifty/trunk/lib/Jifty/Web.pm
   jifty/trunk/lib/Jifty/Web/Form/Element.pm
   jifty/trunk/plugins/EditInPlace/share/web/templates/__jifty/edit_file
   jifty/trunk/share/web/static/js/jifty.js
   jifty/trunk/share/web/templates/__jifty/error/mason_internal_error
   jifty/trunk/share/web/templates/__jifty/webservices/xml

Log:
 r13380 at zoq-fot-pik:  chmrr | 2006-05-31 17:31:13 -0400
  * Rework XML webservices response to include fragments
  * Fragment request is now just a webservice call
  * Helper 'hidden' method on actions


Modified: jifty/trunk/lib/Jifty/Action.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Action.pm	(original)
+++ jifty/trunk/lib/Jifty/Action.pm	Wed May 31 17:31:20 2006
@@ -337,6 +337,19 @@
     return $self->{_private_form_fields_hash}{$arg_name};
 }
 
+=head2 hidden ARGUMENT VALUE
+
+A shortcut for specifying a form field C<ARGUMENT> which should render
+as a hidden form field, with the default value C<VALUE>.
+
+=cut
+
+sub hidden {
+    my $self = shift;
+    my ($arg, $value, @other) = @_;
+    $self->form_field( $arg, render_as => 'hidden', default_value => $value, @other);
+}
+
 =head2 order [INTEGER]
 
 Gets or sets the order that the action will be run in.  This should be

Modified: jifty/trunk/lib/Jifty/Result.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Result.pm	(original)
+++ jifty/trunk/lib/Jifty/Result.pm	Wed May 31 17:31:20 2006
@@ -19,7 +19,7 @@
 
 use base qw/Jifty::Object Class::Accessor::Fast/;
 
-__PACKAGE__->mk_accessors(qw(failure action_class message error _content));
+__PACKAGE__->mk_accessors(qw(failure action_class message _content));
 
 
 =head2 new

Modified: jifty/trunk/lib/Jifty/Web.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Web.pm	(original)
+++ jifty/trunk/lib/Jifty/Web.pm	Wed May 31 17:31:20 2006
@@ -287,9 +287,6 @@
 
     $self->redirect if $self->redirect_required;
     $self->request->do_mapping;
-
-    # This may be a request for fragments, not for a whole page
-    $self->serve_fragments if $self->request->fragments;
 }
 
 =head3 request [VALUE]
@@ -965,97 +962,4 @@
     return join( "-", map { $_->name } @{ $self->{'region_stack'} || [] }, @_ );
 }
 
-=head3 serve_fragments
-
-If the request is for individuals fragments, and not a full page, then
-this method fetches the requested fragments and serves them up,
-returning an XML document.
-
-=cut
-
-sub serve_fragments {
-    my $self = shift;
-
-    my $output = "";
-    my $writer = XML::Writer->new( OUTPUT => \$output );
-    $writer->xmlDecl( "UTF-8", "yes" );
-    $writer->startTag("response");
-    for my $f ( $self->request->fragments ) {
-        # Set up the region stack
-        local Jifty->web->{'region_stack'} = [];
-        my @regions;
-        do {
-            push @regions, $f;
-        } while ($f = $f->parent);
-        
-        for $f (reverse @regions) {
-            my $new = $self->get_region( join '-', grep {$_} $self->qualified_region, $f->name );
-
-            # Arguments can be complex mapped hash values.  Get their
-            # real values by mapping.
-            my %defaults = %{$f->arguments || {}};
-            for (keys %defaults) {
-                my ($key, $value) = Jifty::Request::Mapper->map(destination => $_, source => $defaults{$_});
-                delete $defaults{$_};
-                $defaults{$key} = $value;
-            }
-
-            $new ||= Jifty::Web::PageRegion->new(
-                name           => $f->name,
-                path           => $f->path,
-                region_wrapper => $f->wrapper,
-                parent         => Jifty->web->current_region,
-                defaults       => \%defaults,
-            );
-            $new->enter;
-        }
-
-        # Stuff the rendered region into the XML
-        $writer->startTag( "fragment", id => Jifty->web->current_region->qualified_name );
-        $writer->cdata( Jifty->web->current_region->as_string );
-        $writer->endTag();
-
-        Jifty->web->current_region->exit while Jifty->web->current_region;
-    }
-
-    my %results = Jifty->web->response->results;
-    for (keys %results) {
-        $writer->startTag("result", moniker => $_, class => $results{$_}->action_class);
-        $writer->dataElement("success", $results{$_}->success);
-
-        $writer->dataElement("message", $results{$_}->message) if $results{$_}->message;
-        $writer->dataElement("error", $results{$_}->error) if $results{$_}->error;
-
-        my %warnings = $results{$_}->field_warnings;
-        my %errors   = $results{$_}->field_errors;
-        my %fields; $fields{$_}++ for keys(%warnings), keys(%errors);
-        for (sort keys %fields) {
-            next unless $warnings{$_} or $errors{$_};
-            $writer->startTag("field", name => $_);
-            $writer->dataElement("warning", $warnings{$_}) if $warnings{$_};
-            $writer->dataElement("error", $errors{$_}) if $errors{$_};
-            $writer->endTag();
-        }
-
-        $writer->endTag();
-    }
-
-    $writer->endTag();
-
-    # Spit out a correct content-type; we set this *here* instead of
-    # above because each of the subrequests attempts to set it to
-    # text/html -- so we have to override them after the fact.
-    $self->response->add_header("Content-Type" => 'text/xml; charset=utf-8');
-
-    # Print a header and the content, and then bail
-    my $apache = Jifty->handler->apache;
-    $apache->send_http_header();
-
-    # Wide characters at this point should be harmlessly treated as UTF-8 octets.
-    no warnings 'utf8';
-    print $output;
-
-    Jifty::Dispatcher::last_rule;
-}
-
 1;

Modified: jifty/trunk/lib/Jifty/Web/Form/Element.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Web/Form/Element.pm	(original)
+++ jifty/trunk/lib/Jifty/Web/Form/Element.pm	Wed May 31 17:31:20 2006
@@ -218,7 +218,7 @@
         }
 
         my $string = join ";", (grep {not ref $_} (ref $value eq "ARRAY" ? @{$value} : ($value)));
-        if (@fragments) {
+        if (@fragments or @actions) {
             my $update = "update( ". Jifty::JSON::objToJson( {actions => \@actions, fragments => \@fragments }, {singlequote => 1}) ." );";
             $string .= $self->javascript_preempt ? "return $update" : "$update; return true;";
         }

Modified: jifty/trunk/plugins/EditInPlace/share/web/templates/__jifty/edit_file
==============================================================================
--- jifty/trunk/plugins/EditInPlace/share/web/templates/__jifty/edit_file	(original)
+++ jifty/trunk/plugins/EditInPlace/share/web/templates/__jifty/edit_file	Wed May 31 17:31:20 2006
@@ -1,6 +1,7 @@
 <%args>
-$path=> undef
+$path => undef
 $editor => undef
+$line => undef
 </%args>
 <%init>
 my $title = _("Editing file %1",$editor->argument_value('source_path'));

Modified: jifty/trunk/share/web/static/js/jifty.js
==============================================================================
--- jifty/trunk/share/web/static/js/jifty.js	(original)
+++ jifty/trunk/share/web/static/js/jifty.js	Wed May 31 17:31:20 2006
@@ -393,7 +393,7 @@
     var request = $H();
 
     // Set request base path
-    request['path'] = '/__jifty/empty';
+    request['path'] = '/__jifty/webservices/xml';
 
     // Build actions structure
     request['actions'] = {};
@@ -536,9 +536,9 @@
                          key != null;
                          key = key.nextSibling) {
                         if (key.nodeName == 'message') {
-                            // alert(key.textContent);
+                            alert(key.textContent);
                         } else if (key.nodeName == 'error') {
-                            // alert('ERROR: '+key.textContent);
+                            alert('ERROR: '+key.textContent);
                         }
                     }
                 }

Modified: jifty/trunk/share/web/templates/__jifty/error/mason_internal_error
==============================================================================
--- jifty/trunk/share/web/templates/__jifty/error/mason_internal_error	(original)
+++ jifty/trunk/share/web/templates/__jifty/error/mason_internal_error	Wed May 31 17:31:20 2006
@@ -1,6 +1,6 @@
 <&| $wrapper, title => "Mason error" &>
 
-Error in <% $file %>, lines <% "@lines" %>:
+Error in <& .line, file => $file, line => "@lines" &>
 <pre><% $msg %></pre>
 
 <% Jifty->web->return( label => "Try again" ) %>
@@ -9,27 +9,36 @@
 <ul>
 % for my $frame (@stack) {
 %   next if $frame->filename =~ m{/HTML/Mason/};
-%   if (-w $frame->filename) {
-%     my $path = $frame->filename;
+    <li><& .line, file => $frame->filename, line => $frame->line &></li>
+% }
+</ul>
+ 
+</&>
+
+<%def .line>
+<%args>
+$file
+$line
+</%args>
+%   if (-w $file) {
+%     my $path = $file;
 %     for (map {$_->[1]} @{Jifty->handler->mason->interp->comp_root}) {
 %       last if $path =~ s/^\Q$_\E//;
 %     }
-%     if ($path ne $frame->filename) {
-<li>Template <% Jifty->web->tangent( url =>"/__jifty/edit/mason_component$path",
-                            label => "$path line ".$frame->line,
-                            parameters => { line => $frame->line } ) %></li>
+%     if ($path ne $file) {
+template <% Jifty->web->tangent( url =>"/__jifty/edit/mason_component$path",
+                                 label => "$path line ".$line,
+                                 parameters => { line => $line } ) %>
 %     } else {
-<li><% Jifty->web->tangent( url =>"/__jifty/edit/library$path",
-                            label => "$path line ".$frame->line,
-                            parameters => { line => $frame->line } ) %></li>
+<% Jifty->web->tangent( url =>"/__jifty/edit/library$path",
+                        label => "$path line ".$line,
+                        parameters => { line => $line } ) %>
 %     }
 %   } else {
-<li><% $frame->filename %> line <% $frame->line %></li>
+<% $file %> line <% $line %>
 %   }
-% }
-</ul>
+</%def>
 
-</&>
 <%init>
 my $wrapper = "/_elements/wrapper";
 

Modified: jifty/trunk/share/web/templates/__jifty/webservices/xml
==============================================================================
--- jifty/trunk/share/web/templates/__jifty/webservices/xml	(original)
+++ jifty/trunk/share/web/templates/__jifty/webservices/xml	Wed May 31 17:31:20 2006
@@ -1,3 +1,73 @@
-% $r->content_type("text/xml");
-% use XML::Simple;
-<% XML::Simple::XMLout({Jifty->web->response->results}, NoAttr => 1 ) |n%>
+<%init>
+my $output = "";
+my $writer = XML::Writer->new( OUTPUT => \$output, UNSAFE => 1 );
+$writer->xmlDecl( "UTF-8", "yes" );
+$writer->startTag("response");
+for my $f ( Jifty->web->request->fragments ) {
+    # Set up the region stack
+    local Jifty->web->{'region_stack'} = [];
+    my @regions;
+    do {
+        push @regions, $f;
+    } while ($f = $f->parent);
+
+    for $f (reverse @regions) {
+        my $new = Jifty->web->get_region( join '-', grep {$_} Jifty->web->qualified_region, $f->name );
+
+        # Arguments can be complex mapped hash values.  Get their
+        # real values by mapping.
+        my %defaults = %{$f->arguments || {}};
+        for (keys %defaults) {
+            my ($key, $value) = Jifty::Request::Mapper->map(destination => $_, source => $defaults{$_});
+            delete $defaults{$_};
+            $defaults{$key} = $value;
+        }
+
+        $new ||= Jifty::Web::PageRegion->new(
+            name           => $f->name,
+            path           => $f->path,
+            region_wrapper => $f->wrapper,
+            parent         => Jifty->web->current_region,
+            defaults       => \%defaults,
+        );
+        $new->enter;
+    }
+
+    # Stuff the rendered region into the XML
+    $writer->startTag( "fragment", id => Jifty->web->current_region->qualified_name );
+    $writer->cdata( Jifty->web->current_region->as_string );
+    $writer->endTag();
+
+    Jifty->web->current_region->exit while Jifty->web->current_region;
+}
+
+my %results = Jifty->web->response->results;
+for (keys %results) {
+    $writer->startTag("result", moniker => $_, class => $results{$_}->action_class);
+    $writer->dataElement("success", $results{$_}->success);
+
+    $writer->dataElement("message", $results{$_}->message) if $results{$_}->message;
+    $writer->dataElement("error", $results{$_}->error) if $results{$_}->error;
+
+    my %warnings = $results{$_}->field_warnings;
+    my %errors   = $results{$_}->field_errors;
+    my %fields; $fields{$_}++ for keys(%warnings), keys(%errors);
+    for (sort keys %fields) {
+        next unless $warnings{$_} or $errors{$_};
+        $writer->startTag("field", name => $_);
+        $writer->dataElement("warning", $warnings{$_}) if $warnings{$_};
+        $writer->dataElement("error", $errors{$_}) if $errors{$_};
+        $writer->endTag();
+    }
+
+    use XML::Simple;
+    $writer->raw(XML::Simple::XMLout($results{$_}->content, NoAttr => 1, RootName => "content", NoIndent => 1))
+      if keys %{$results{$_}->content};
+
+    $writer->endTag();
+}
+
+$writer->endTag();
+$r->content_type('text/xml; charset=utf-8');
+Jifty->web->out($output);
+</%init>


More information about the Jifty-commit mailing list