X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FWindow.pm;h=5eda757c2b2b50e06de76b10ede8c2e9e41b67df;hb=e653a48785a1942da650254c8fba30706ca18333;hp=50e99afb515642f3a41e80acfcd9e927517e4637;hpb=8139388160b0a38002b22ff95c3fee3d8380f156;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/Window.pm b/lib/Reaction/UI/Window.pm index 50e99af..5eda757 100644 --- a/lib/Reaction/UI/Window.pm +++ b/lib/Reaction/UI/Window.pm @@ -6,9 +6,9 @@ use Reaction::UI::FocusStack; use namespace::clean -except => [ qw(meta) ]; -has ctx => (isa => 'Catalyst', is => 'ro', required => 1); +has ctx => (isa => 'Catalyst', is => 'ro', required => 1, weak_ref => 1); has view_name => (isa => 'Str', is => 'ro', lazy_fail => 1); -has content_type => (isa => 'Str', is => 'ro', lazy_fail => 1); +has content_type => (isa => 'Str', is => 'rw', lazy_fail => 1); has title => (isa => 'Str', is => 'rw', default => sub { 'Untitled window' }); has view => ( # XXX compile failure because the Catalyst::View constraint would be @@ -27,6 +27,11 @@ sub _build_view { }; sub flush { my ($self) = @_; + my $res = $self->ctx->res; + if ( $res->status =~ /^3/ || length($res->body) ) { + $res->content_type('text/plain') unless $res->content_type; + return; + } $self->flush_events; $self->flush_view; }; @@ -46,17 +51,13 @@ sub flush_events { foreach my $type (qw/query body/) { my $meth = "${type}_parameters"; my $param_hash = $ctx->req->$meth; - $self->focus_stack->apply_events($ctx, $param_hash) + $self->focus_stack->apply_events($param_hash) if keys %$param_hash; } }; sub flush_view { my ($self) = @_; my $res = $self->ctx->res; - if ( $res->status =~ /^3/ || length($res->body) ) { - $res->content_type('text/plain') unless $res->content_type; - return; - } $res->body($self->view->render_window($self)); $res->content_type($self->content_type); }; @@ -116,35 +117,15 @@ L, it is used to contain all the elements (ViewPorts) that make up the UI. The Window is rendered in the end action of the Root Controller to make up the page. -To add L to the stack, read the -L and L documentation. - -Several Window attributes are set by -L when a new Window is created, -these are as follows: - -=over +To add L to the stack, use the +L method. For more detailed +information, read the L and +L documentation. -=item ctx +=head1 ATTRIBUTES -The current L context object is set. - -=item view_name - -The view_name is set from the L attributes. - -=item content_type - -The content_type is set from the L attributes. - -=item title - -The title is set from the L -window_title attribute. - -=back - -=head1 METHODS +These are set for you by L from +your Root controller configuration. =head2 ctx @@ -154,13 +135,13 @@ window_title attribute. =back -Retrieve/set the current L context object. +The current L context object. =head2 view_name =over -=item Arguments: %viewname? +=item Arguments: $viewname? =back @@ -218,40 +199,7 @@ for this Window. Use L on this to create more elements. An empty FocusStack is created by the Controller::Root when the Window is created. -=head2 render_viewport - -=over - -=item Arguments: $viewport - -=back - - $window->render_viewport($viewport); - - [% window.render_viewport(self.inner) %] - -Calls render on the L object used by this Window. The following -arguments are given: - -=over - -=item ctx - -The L context object. - -=item self - -The ViewPort object to be rendered. - -=item window - -The Window object. - -=item type - -The string that describes the layout from L. - -=back +=head1 METHODS =head2 flush @@ -288,9 +236,8 @@ is called by L. Renders the page into the L body, unless the response status is already set to 3xx, or the body has already been -filled. This calls L with the root -L from the L. This method is -called by L. +filled. This is done via L. This +method is called by L. =head1 AUTHORS