[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