use Rose::Object::MakeMethods::Generic
(
- scalar => [ qw(action_name) ],
+ scalar => [ qw(action_name) ],
+ 'scalar --get_set_init' => [ qw(js) ],
);
#
my %params = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
my $controller = delete($params{controller}) || $self->controller_name;
my $action = $params{action} || 'dispatch';
+ my $fragment = delete $params{fragment};
my $script;
if ($controller =~ m/\.pl$/) {
my $query = join '&', map { uri_encode($_->[0]) . '=' . uri_encode($_->[1]) } @{ flatten(\%params) };
- return "${script}?${query}";
+ return "${script}?${query}" . (defined $fragment ? "#$fragment" : '');
}
sub redirect_to {
$options->{layout} = 0 if $options->{type} ne 'html';
}
+ # Let the presenter do the rest of the work.
+ my $output;
+ {
+ local $::form->{title} = $locals{title} if $locals{title};
+ $output = $self->presenter->render(
+ $template,
+ { type => $options->{type}, process => $options->{process} },
+ %locals,
+ SELF => $self,
+ );
+ }
+
if ($options->{header}) {
# Output the HTTP response and the layout in case of HTML output.
}
}
- # Let the presenter do the rest of the work.
- my $output = $self->presenter->render(
- $template,
- { type => $options->{type}, process => $options->{process} },
- %locals,
- SELF => $self,
- );
-
# Print the output if wanted.
print $output if $options->{output};
} else {
$::locale->with_raw_io(\*STDOUT, sub { print $$file_name_or_content });
}
+
+ return 1;
}
sub presenter {
return $class;
}
+sub init_js {
+ SL::ClientJS->new(controller => $_[0])
+}
+
#
# Before/after run hooks
#
The action to call is given by C<$params{action}>. It defaults to
C<dispatch>.
+If C<$params{fragment}> is present, it's used as the fragment of the resulting
+URL.
+
All other key/value pairs in C<%params> are appended as GET parameters
to the URL.
Returns the global presenter object by calling
L<SL::Presenter/get>.
+=item C<js>
+
+Returns an L<SL::ClientJS> instance for this controller.
+
=back
=head2 PRIVATE FUNCTIONS