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 {
} 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