[Jifty-commit] r2237 -
jifty/branches/template-declare/lib/Jifty/View/Declare
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Thu Nov 30 22:56:43 EST 2006
Author: audreyt
Date: Thu Nov 30 22:56:43 2006
New Revision: 2237
Modified:
jifty/branches/template-declare/lib/Jifty/View/Declare/Base.pm
jifty/branches/template-declare/lib/Jifty/View/Declare/Handler.pm
Log:
* More base elements for t-d; also squash utf8 warning.
Modified: jifty/branches/template-declare/lib/Jifty/View/Declare/Base.pm
==============================================================================
--- jifty/branches/template-declare/lib/Jifty/View/Declare/Base.pm (original)
+++ jifty/branches/template-declare/lib/Jifty/View/Declare/Base.pm Thu Nov 30 22:56:43 2006
@@ -10,8 +10,7 @@
our @EXPORT = (
@Jifty::View::Declare::Templates::EXPORT,
- @Template::Declare::Tags::EXPORT,
- 'page',
+ @Template::Declare::Tags::EXPORT, 'page',
);
our $r = defer { Jifty->handler->apache };
our $m = defer { Jifty->web->mason };
@@ -1371,313 +1370,6 @@
$n => '' $method => '' $Target =>
'&method=content' < /%ARGS>
}
-
-sub __jifty::validator.xml {
-$r->content_type('text/xml;
- charset = UTF- 8 ');
-
-my $output = "";
-use XML::Writer;
-my $writer = XML::Writer->new( OUTPUT => \$output );
-$writer->xmlDecl( "UTF-8", "yes" );
-$writer->startTag("validation");
-for my $ra ( Jifty->web->request->actions ) {
- my $action = Jifty->web->new_action_from_request($ra);
- $writer->startTag( "validationaction", id => $action->register_name );
- for my $arg ( $action->argument_names ) {
- if ( not $action->arguments->{$arg}->{ajax_validates} ) {
- $writer->emptyTag( "ignored", id => $action->error_div_id($arg) );
- $writer->emptyTag( "ignored", id => $action->warning_div_id($arg) );
- } elsif ( not $action->arguments->{$arg}->{mandatory}
- and (not defined $action->argument_value($arg)
- or length $action->argument_value($arg) == 0 ) ) {
- $writer->emptyTag( "blank", id => $action->error_div_id($arg) );
- $writer->emptyTag( "blank", id => $action->warning_div_id($arg) );
- } elsif ( $action->result->field_error($arg) ) {
- $writer->dataElement(
- "error",
- $action->result->field_error($arg),
- id => $action->error_div_id($arg)
- );
- $writer->emptyTag( "ok", id => $action->warning_div_id($arg) );
- } elsif ( $action->result->field_warning($arg) ) {
- $writer->dataElement(
- "warning",
- $action->result->field_warning($arg),
- id => $action->warning_div_id($arg)
- );
- $writer->emptyTag( "ok", id => $action->error_div_id($arg) );
- } else {
- $writer->emptyTag( "ok", id => $action->error_div_id($arg) );
- $writer->emptyTag( "ok", id => $action->warning_div_id($arg) );
- }
- }
- $writer->endTag();
- $writer->startTag( "canonicalizeaction", id => $action->register_name );
- for my $arg ( $action->argument_names ) {
- if ($ra->arguments->{$arg} eq $action->argument_value($arg) ) {
- # if the value doesn' t change, it can be ignored .
-
-# canonicalizers can change other parts of the action, so we want to send all changes
- $writer->emptyTag( "ignored",
- name =>
- $action->form_field_name($arg) );
- }
- elsif (
- not
- defined $action->argument_value($arg)
- or length $action->argument_value($arg)
- == 0 )
- {
- $writer->emptyTag( "blank",
- name =>
- $action->form_field_name($arg) );
- }
- else {
- if (
- $action->result
- ->field_canonicalization_note(
- $arg)
- )
- {
- $writer->dataElement(
- "canonicalization_note",
- $action->result
- ->field_canonicalization_note(
- $arg),
- id => $action
- ->canonicalization_note_div_id
- (
- $arg)
- );
- }
- $writer->dataElement(
- "update",
- $action->argument_value($arg),
- name =>
- $action->form_field_name($arg)
- );
- }
- }
- $writer->endTag();
- }
- $writer->endTag();
- $m->out($output);
- $m->abort();
- }
-
- sub __jifty::webservices::xml {
- 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
- );
- my %args =
- %{ Jifty->web->current_region->arguments };
- $writer->dataElement( "argument", $args{$_},
- name => $_ )
- for sort keys %args;
- $writer->cdataElement( "content",
- 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();
- }
-
- # XXX TODO: Hack because we don't have a good way to serialize
- # Jifty::DBI::Record's yet, which are technically circular data
- # structures at some level (current_user of a
- # current_user->user_object is itself)
- use Scalar::Util qw(blessed);
- my $content = $results{$_}->content;
-
- sub stripkids {
- my $top = shift;
- if ( not ref $top ) { return $top }
- elsif (
- blessed($top)
- and ( $top->isa("Jifty::DBI::Record")
- or
- $top->isa("Jifty::DBI::Collection")
- )
- )
- {
- return undef;
- }
- elsif ( ref $top eq 'HASH' ) {
- foreach my $item ( keys %$top ) {
- $top->{$item} =
- stripkids( $top->{$item} );
- }
- }
- elsif ( ref $top eq 'ARRAY' ) {
- for ( 0 .. $#{$top} ) {
- $top->[$_] =
- stripkids( $top->[$_] );
- }
- }
- return $top;
- }
-
- $content = stripkids($content);
- use XML::Simple;
- $writer->raw(
- XML::Simple::XMLout(
- $content,
- NoAttr => 1,
- RootName => "content",
- NoIndent => 1
- )
- ) if keys %{$content};
-
- $writer->endTag();
- }
-
- $writer->endTag();
- $r->content_type('text/xml; charset=utf-8');
- outs($output);
- }
-
- sub __jifty::webservices::yaml {
- $r->content_type("text/x-yaml");
- outs(
- Jifty::YAML::Dump(
- { Jifty->web->response->results }
- )
- );
- }
-
-
- sub _elements::keybindings {
- with( id => "keybindings" ), div {};
- }
-
- sub _elements::menu {
- my ($menu) = get(qw(menu));
-
- # Default to the app menu
- $menu ||= Jifty->web->navigation;
- my @children = $menu->children;
- if (@children) {
- with( class => "menu" ), ul {
- show( ".menu", item => $_ );
- }
- }
-
- }
-
- sub _elements::_menu {
- my ($item) = get(qw(item));
- my @kids = $item->children;
- my @params;
- if ( $item->active ) {
- push @params, class => "active";
- }
-
- with(@params), li {
-
- $item->as_link;
-
- if (@kids) {
- with( class => "submenu" ), ul {
- show( ".menu", item => $_ ) for @kids;
- }
- }
- }
-
- }
-
- sub _elements::page_nav {
- if ( @{ Jifty->web->page_navigation->children } ) {
- with( class => "page_nav" ), div {
- show( _elements::menu,
- menu => Jifty->web->page_navigation );
- }
- }
- }
-
-
}
sub autohandler { # XXX TODO MOVE INTO DISPATCHER
@@ -1728,6 +1420,237 @@
=cut
+template '__jifty/validator.xml' => sub {
+ $r->content_type('text/xml; charset=UTF-8');
+ my $output = "";
+ use XML::Writer;
+ my $writer = XML::Writer->new( OUTPUT => \$output );
+ $writer->xmlDecl( "UTF-8", "yes" );
+ $writer->startTag("validation");
+ for my $ra ( Jifty->web->request->actions ) {
+ my $action = Jifty->web->new_action_from_request($ra);
+ $writer->startTag( "validationaction", id => $action->register_name );
+ for my $arg ( $action->argument_names ) {
+ if ( not $action->arguments->{$arg}->{ajax_validates} ) {
+ $writer->emptyTag( "ignored",
+ id => $action->error_div_id($arg) );
+ $writer->emptyTag( "ignored",
+ id => $action->warning_div_id($arg) );
+ }
+ elsif (
+ not $action->arguments->{$arg}->{mandatory}
+ and ( not defined $action->argument_value($arg)
+ or length $action->argument_value($arg) == 0 )
+ )
+ {
+ $writer->emptyTag( "blank", id => $action->error_div_id($arg) );
+ $writer->emptyTag( "blank",
+ id => $action->warning_div_id($arg) );
+ }
+ elsif ( $action->result->field_error($arg) ) {
+ $writer->dataElement(
+ "error",
+ $action->result->field_error($arg),
+ id => $action->error_div_id($arg)
+ );
+ $writer->emptyTag( "ok", id => $action->warning_div_id($arg) );
+ }
+ elsif ( $action->result->field_warning($arg) ) {
+ $writer->dataElement(
+ "warning",
+ $action->result->field_warning($arg),
+ id => $action->warning_div_id($arg)
+ );
+ $writer->emptyTag( "ok", id => $action->error_div_id($arg) );
+ }
+ else {
+ $writer->emptyTag( "ok", id => $action->error_div_id($arg) );
+ $writer->emptyTag( "ok", id => $action->warning_div_id($arg) );
+ }
+ }
+ $writer->endTag();
+ $writer->startTag( "canonicalizeaction", id => $action->register_name );
+ for my $arg ( $action->argument_names ) {
+ if ( $ra->arguments->{$arg} eq $action->argument_value($arg) ) {
+
+ # if the value doesn' t change, it can be ignored .
+
+# canonicalizers can change other parts of the action, so we want to send all changes
+ $writer->emptyTag( "ignored",
+ name => $action->form_field_name($arg) );
+ }
+ elsif ( not defined $action->argument_value($arg)
+ or length $action->argument_value($arg) == 0 )
+ {
+ $writer->emptyTag( "blank",
+ name => $action->form_field_name($arg) );
+ }
+ else {
+ if ( $action->result->field_canonicalization_note($arg) ) {
+ $writer->dataElement(
+ "canonicalization_note",
+ $action->result->field_canonicalization_note($arg),
+ id => $action->canonicalization_note_div_id($arg)
+ );
+ }
+ $writer->dataElement(
+ "update",
+ $action->argument_value($arg),
+ name => $action->form_field_name($arg)
+ );
+ }
+ }
+ $writer->endTag();
+ }
+ $writer->endTag();
+ $m->out($output);
+ $m->abort();
+};
+
+template '__jifty/webservices/xml' => sub {
+ 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 );
+ my %args = %{ Jifty->web->current_region->arguments };
+ $writer->dataElement( "argument", $args{$_}, name => $_ )
+ for sort keys %args;
+ $writer->cdataElement( "content",
+ 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();
+ }
+
+ # XXX TODO: Hack because we don't have a good way to serialize
+ # Jifty::DBI::Record's yet, which are technically circular data
+ # structures at some level (current_user of a
+ # current_user->user_object is itself)
+ use Scalar::Util qw(blessed);
+ my $content = $results{$_}->content;
+
+ sub stripkids {
+ my $top = shift;
+ if ( not ref $top ) { return $top }
+ elsif (
+ blessed($top)
+ and ( $top->isa("Jifty::DBI::Record")
+ or $top->isa("Jifty::DBI::Collection") )
+ )
+ {
+ return undef;
+ }
+ elsif ( ref $top eq 'HASH' ) {
+ foreach my $item ( keys %$top ) {
+ $top->{$item} = stripkids( $top->{$item} );
+ }
+ }
+ elsif ( ref $top eq 'ARRAY' ) {
+ for ( 0 .. $#{$top} ) {
+ $top->[$_] = stripkids( $top->[$_] );
+ }
+ }
+ return $top;
+ }
+
+ $content = stripkids($content);
+ use XML::Simple;
+ $writer->raw(
+ XML::Simple::XMLout(
+ $content,
+ NoAttr => 1,
+ RootName => "content",
+ NoIndent => 1
+ )
+ ) if keys %{$content};
+
+ $writer->endTag();
+ }
+
+ $writer->endTag();
+ $r->content_type('text/xml; charset=utf-8');
+ outs($output);
+};
+
+template '__jifty/webservices/yaml' => sub {
+ $r->content_type("text/x-yaml");
+ outs( Jifty::YAML::Dump( { Jifty->web->response->results } ) );
+};
+
+template '_elements/keybindings' => sub {
+ with( id => "keybindings" ), div {};
+};
+
template 'index.html' => page {
with(
src => "/static/images/pony.jpg",
Modified: jifty/branches/template-declare/lib/Jifty/View/Declare/Handler.pm
==============================================================================
--- jifty/branches/template-declare/lib/Jifty/View/Declare/Handler.pm (original)
+++ jifty/branches/template-declare/lib/Jifty/View/Declare/Handler.pm Thu Nov 30 22:56:43 2006
@@ -16,7 +16,7 @@
my $package = shift;
my $code_template = shift;
- no warnings qw/redefine/;
+ no warnings qw/redefine utf8/;
local *Jifty::Web::out = sub {
shift; # Remove the $self in Jifty::Web->out
goto &Template::Declare::Tags::outs;
More information about the Jifty-commit
mailing list