package Reaction::UI::Controller;
-use base qw/Catalyst::Controller::BindLex Reaction::Object/;
+use base qw(
+ Catalyst::Controller
+ Catalyst::Component::ACCEPT_CONTEXT
+ Reaction::Object
+);
+
use Reaction::Class;
sub push_viewport {
my $self = shift;
- my $focus_stack :Stashed;
+ my $c = $self->context;
+ my $focus_stack = $c->stash->{focus_stack};
my ($class, @proto_args) = @_;
my %args;
- my $c = Catalyst::Controller::BindLex::_get_c_obj(4);
if (my $vp_attr = $c->stack->[-1]->attributes->{ViewPort}) {
if (ref($vp_attr) eq 'ARRAY') {
$vp_attr = $vp_attr->[0];
if (my $conf_class = delete $vp_attr->{class}) {
$class = $conf_class;
}
- %args = (%$vp_attr, @proto_args);
+ %args = %{ $self->merge_config_hashes($vp_attr, {@proto_args}) };
} else {
$class = $vp_attr;
%args = @proto_args;
}
sub pop_viewport {
- my $focus_stack :Stashed;
- return $focus_stack->pop_viewport;
+ return shift->context->stash->{focus_stack}->pop_viewport;
}
sub pop_viewports_to {
my ($self, $vp) = @_;
- my $focus_stack :Stashed;
- return $focus_stack->pop_viewports_to($vp);
+ return $self->context->stash->{focus_stack}->pop_viewports_to($vp);
}
sub redirect_to {
}
1;
+
+__END__;
+
+=head1 NAME
+
+Reaction::UI::Widget::Controller
+
+=head1 DESCRIPTION
+
+Base Reaction Controller class. Inherits from:
+
+=over 4
+
+=item L<Catalyst::Controller>
+=item L<Catalyst::Component::ACCEPT_CONTEXT>
+=item L<Reaction::Object>
+
+=back
+
+=head1 METHODS
+
+=head2 push_viewport $vp_class, %args
+
+Will create a new instance of $vp_class with the arguments of %args merged in with
+any arguments in the ViewPort attribute of the current Catalyst action
+(also accessible through the controller config), add it to the main FocusStack
+(C<$c-E<gt>stash-E<gt>{focus_stack}>) and return the instantiated viewport.
+
+TODO: explain how next_action as a scalar gets converted to the redirect arrayref thing
+
+=head2 pop_viewport
+
+=head2 pop_viewport_to $vp
+
+Shortcut to subs of the same name in the main FocusStack (C<$c-E<gt>stash-E<gt>{focus_stack}>)
+
+=head2 redirect_to $c, $to, $captures, $args, $attrs
+
+If C<$to> is a string then redirects to the action of the same name in the current
+ controller (C<$c-E<gt>controller> not C<$self>).
+
+If C<$to> isa L<Catalyst::Action>
+it will pass the argument directly to C<$c-E<gt>uri_for>.
+
+If C<$to> is an ArrayRef with two items it will treat the first as a Controller name
+and the second as the action name whithin that controller.
+
+C<$captures>, C<$args>, and C<$attrs> are equivalent to the same arguments in
+C<uri_for>. If left blank the current request captures and args will be used
+and C<$attrs> will be passed as an empty HashRef.
+
+=head1 AUTHORS
+
+See L<Reaction::Class> for authors.
+
+=head1 LICENSE
+
+See L<Reaction::Class> for the license.
+
+=cut