Mercurial > pub > Impl
comparison Lib/IMPL/Web/QueryHandler/PageFormat.pm @ 154:eb478083f72b
Url support
author | wizard |
---|---|
date | Thu, 30 Sep 2010 02:13:05 +0400 |
parents | 60fd224f3e3c |
children | 8638dd1374bf |
comparison
equal
deleted
inserted
replaced
153:3765adf1803f | 154:eb478083f72b |
---|---|
9 use IMPL::Web::TT::Document; | 9 use IMPL::Web::TT::Document; |
10 use Template::Plugin::URL; | 10 use Template::Plugin::URL; |
11 use IMPL::Security::Context; | 11 use IMPL::Security::Context; |
12 use File::Spec; | 12 use File::Spec; |
13 use HTML::TreeBuilder; | 13 use HTML::TreeBuilder; |
14 use URI; | |
14 use Error qw(:try); | 15 use Error qw(:try); |
15 | 16 |
16 $Template::Plugin::URL::JOINT = '&'; | 17 $Template::Plugin::URL::JOINT = '&'; |
17 | 18 |
18 BEGIN { | 19 BEGIN { |
70 my @path = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("PATH_INFO is empty and no defaultTarget specified" ); | 71 my @path = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("PATH_INFO is empty and no defaultTarget specified" ); |
71 | 72 |
72 my @pathContainer = @path; | 73 my @pathContainer = @path; |
73 pop @pathContainer; | 74 pop @pathContainer; |
74 | 75 |
75 $doc->LoadFile ( File::Spec->catfile($this->templatesBase,@path), $this->templatesCharset, $this->templatesBase ); | 76 $doc->LoadFile ( |
77 File::Spec->catfile($this->templatesBase,@path), | |
78 $this->templatesCharset, | |
79 $this->templatesBase, | |
80 { | |
81 result => scalar($nextHandler->()), | |
82 action => $action, | |
83 app => $action->application, | |
76 | 84 |
77 $doc->AddVar( result => $nextHandler->() ); | 85 absoluteUrl => sub { new URI(join ('/', @root, $_[0]) ) }, |
78 $doc->AddVar( action => $action ); | 86 baseUrl => sub { new URI (join ('/', @root, @base, $_[0]) ) }, |
79 $doc->AddVar( app => $action->application ); | 87 relativeUrl => sub { new URI(join ('/', @root, @base, @pathContainer,$_[0]) ) }, |
80 | 88 |
81 $doc->AddVar( absoluteUrl => sub { join '/', @root, $_[0] } ); | 89 user => IMPL::Security::Context->current->principal, |
82 $doc->AddVar( baseUrl => sub { join '/', @root, @base, $_[0] } ); | 90 session => IMPL::Security::Context->current, |
83 $doc->AddVar( relativeUrl => sub { join '/', @root, @base, @pathContainer,$_[0] } ); | |
84 | 91 |
85 $doc->AddVar( user => IMPL::Security::Context->current->principal ); | 92 to_json => \&to_json, |
86 $doc->AddVar( session => IMPL::Security::Context->current ); | 93 escape_string => sub { $_[0] =~ s/"/"/g; $_[0] }, |
87 | 94 } |
88 $doc->AddVar( to_json => \&to_json ); | 95 ); |
89 $doc->AddVar( escape_string => sub { $_[0] =~ s/"/"/g; $_[0] } ); | |
90 | |
91 | 96 |
92 $action->response->contentType('text/html'); | 97 $action->response->contentType('text/html'); |
93 my $hOut = $action->response->streamBody; | 98 my $hOut = $action->response->streamBody; |
94 if ($this->formatOutput == 1) { | 99 if ($this->formatOutput == 1) { |
95 my $tree = new HTML::TreeBuilder(); | 100 my $tree = new HTML::TreeBuilder(); |
106 print $hOut $doc->Render(); | 111 print $hOut $doc->Render(); |
107 } | 112 } |
108 } finally { | 113 } finally { |
109 $doc->Dispose; | 114 $doc->Dispose; |
110 }; | 115 }; |
116 } | |
117 | |
118 sub URI::_query::new_params { | |
119 my ($this,$params) = @_; | |
120 | |
121 my $clone = $this->clone; | |
122 if (ref $params eq 'HASH' ) { | |
123 my %newParams = ($clone->query_form , %$params); | |
124 $clone->query_form(map { $_, $newParams{$_} } sort keys %newParams ); | |
125 } | |
126 return $clone; | |
111 } | 127 } |
112 | 128 |
113 1; | 129 1; |
114 | 130 |
115 __END__ | 131 __END__ |