I have (lots of stuff like) the following in MyApp::View::TT:

    sub uri_for_action {
        my $self = shift;
        my $c = shift;
        return $c->uri_for_action( @_ );
    }

    __PACKAGE__->config( expose_methods => [ qw(
        uri_for_action
        ...
    ) ] );

This lets me write just

    <a href="[% uri_for_action('object', [ file ]) %]">
        <img src="[% uri_for_action('thumbnail', [ file ]) %]" alt="[% video | 
html %]" />
    </a>

Note the absence of `c`. That absence was the rationale for this – it
makes it much easier to rig up a test environment for the templates if
they do not refer to the context directly.

But in your case, it would also give you a central place where you could
stick the pre-escaping of %.

Something along the lines of

    sub uri_for_action {
        my $self = shift;
        my $c = shift;
        my $action = shift;
        for ( @_ ) {
            my $r = ref $_;
            s/%/%25/g for
                'ARRAY' eq $r ? @$_ :
                'HASH'  eq $r ? values %$_ :
                ( not $r )    ? $_ :
                ();
        }
        return $c->uri_for_action( $action, @_ );
    }

(Note the code is entirely untested and may be buggy not just
in implementation but also conceptually – it is meant only for
illustration.)

See `expose_methods` in the Catalyst::View::TT docs.

Regards,
-- 
Aristotle Pagaltzis // <http://plasmasturm.org/>

_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to