Catalyst-Model-MultiAdaptor
view release on metacpan or search on metacpan
inc/Catalyst.pm view on Meta::CPAN
if (defined $path) { # cheesy hack to handle path '../foo'
$namespace =~ s{(?:^|/)[^/]+$}{} while $args[0] =~ s{^\.\./}{};
}
unshift(@args, $namespace || '');
}
# join args with '/', or a blank string
my $args = join('/', grep { defined($_) } @args);
$args =~ s/\?/%3F/g; # STUPID STUPID SPECIAL CASE
$args =~ s!^/+!!;
my $base = $c->req->base;
my $class = ref($base);
$base =~ s{(?<!/)$}{/};
my $query = '';
if (my @keys = keys %$params) {
# somewhat lifted from URI::_query's query_form
$query = '?'.join('&', map {
my $val = $params->{$_};
s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/go;
s/ /+/g;
my $key = $_;
$val = '' unless defined $val;
(map {
my $param = "$_";
utf8::encode( $param ) if utf8::is_utf8($param);
# using the URI::Escape pattern here so utf8 chars survive
$param =~ s/([^A-Za-z0-9\-_.!~*'() ])/$URI::Escape::escapes{$1}/go;
$param =~ s/ /+/g;
"${key}=$param"; } ( ref $val eq 'ARRAY' ? @$val : $val ));
} @keys);
}
my $res = bless(\"${base}${args}${query}", $class);
$res;
}
#line 1363
sub uri_for_action {
my ( $c, $path, @args ) = @_;
my $action = blessed($path)
? $path
: $c->dispatcher->get_action_by_path($path);
unless (defined $action) {
croak "Can't find action for path '$path'";
}
return $c->uri_for( $action, @args );
}
#line 1380
sub welcome_message {
my $c = shift;
my $name = $c->config->{name};
my $logo = $c->uri_for('/static/images/catalyst_logo.png');
my $prefix = Catalyst::Utils::appprefix( ref $c );
$c->response->content_type('text/html; charset=utf-8');
return <<"EOF";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Language" content="en" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>$name on Catalyst $VERSION</title>
<style type="text/css">
body {
color: #000;
background-color: #eee;
}
div#content {
width: 640px;
margin-left: auto;
margin-right: auto;
margin-top: 10px;
margin-bottom: 10px;
text-align: left;
background-color: #ccc;
border: 1px solid #aaa;
}
p, h1, h2 {
margin-left: 20px;
margin-right: 20px;
font-family: verdana, tahoma, sans-serif;
}
a {
font-family: verdana, tahoma, sans-serif;
}
:link, :visited {
text-decoration: none;
color: #b00;
border-bottom: 1px dotted #bbb;
}
:link:hover, :visited:hover {
color: #555;
}
div#topbar {
margin: 0px;
}
pre {
margin: 10px;
padding: 8px;
}
div#answers {
padding: 8px;
margin: 10px;
background-color: #fff;
border: 1px solid #aaa;
}
h1 {
font-size: 0.9em;
font-weight: normal;
text-align: center;
}
h2 {
font-size: 1.0em;
}
p {
font-size: 0.9em;
( run in 1.796 second using v1.01-cache-2.11-cpan-bbb979687b5 )