Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTDocument.pm @ 241:f48a1a9f4fa2
+Added ViewResult to allow implementation of the view environment.
*TTDocuments now storing creation parameters
*TTControls automatically propagating layout and title meta to their attributes
+Added UnauthorizaedException web exception
*minor fixes
author | sergey |
---|---|
date | Thu, 18 Oct 2012 04:49:55 +0400 |
parents | b8c724f6de36 |
children | 7c517134c42f |
comparison
equal
deleted
inserted
replaced
240:abc7c26bf615 | 241:f48a1a9f4fa2 |
---|---|
1 package IMPL::Web::View::TTDocument; | 1 package IMPL::Web::View::TTDocument; |
2 use strict; | 2 use strict; |
3 | 3 |
4 use Scalar::Util qw(weaken); | 4 use Scalar::Util qw(weaken); |
5 use IMPL::Const qw(:prop); | 5 use IMPL::Const qw(:prop); |
6 use IMPL::lang qw(:hash); | |
6 | 7 |
7 use IMPL::declare { | 8 use IMPL::declare { |
8 require => { | 9 require => { |
9 TTFactory => 'IMPL::Web::View::TTFactory', | 10 TTFactory => 'IMPL::Web::View::TTFactory', |
10 TTControl => 'IMPL::Web::View::TTControl', | 11 TTControl => 'IMPL::Web::View::TTControl', |
21 props => [ | 22 props => [ |
22 layout => PROP_RW, | 23 layout => PROP_RW, |
23 opts => PROP_RO, | 24 opts => PROP_RO, |
24 loader => PROP_RW, | 25 loader => PROP_RW, |
25 controls => PROP_RO, | 26 controls => PROP_RO, |
27 creationArgs => PROP_RO, | |
26 | 28 |
27 # store the stash separately to make require() method to work correctly | 29 # store the stash separately to make require() method to work correctly |
28 # even when a stash of the context is modified during the processing | 30 # even when a stash of the context is modified during the processing |
29 stash => PROP_RO | 31 stash => PROP_RO |
30 ] | 32 ] |
42 | 44 |
43 $this->layout( $template->layout ) unless $this->layout; | 45 $this->layout( $template->layout ) unless $this->layout; |
44 | 46 |
45 $this->opts($refOpts); | 47 $this->opts($refOpts); |
46 $this->stash($this->context->stash); | 48 $this->stash($this->context->stash); |
49 $this->creationArgs($vars); | |
47 | 50 |
48 my $self = $this; | 51 my $self = $this; |
49 weaken($self); | 52 weaken($self); |
50 | 53 |
51 $this->templateVars('require', sub { | 54 $this->templateVars(require => sub { |
52 my $doc = $self; | 55 my $doc = $self; |
53 die new IMPL::Exception("A document is destroyed or invalid") unless $doc; | 56 die new IMPL::Exception("A document is destroyed or invalid") unless $doc; |
54 $doc->RequireControl(@_); | 57 $doc->RequireControl(@_); |
55 }); | 58 }); |
56 | 59 |
57 $this->templateVars('document', sub { $self } ); | 60 $this->templateVars(context => $vars); |
61 | |
62 $this->templateVars(document => sub { $self } ); | |
58 $this->InitInstance($vars); | 63 $this->InitInstance($vars); |
59 } | 64 } |
60 | 65 |
61 sub templateVars { | 66 sub templateVars { |
62 my $this = shift; | 67 my $this = shift; |
112 } | 117 } |
113 | 118 |
114 sub Render { | 119 sub Render { |
115 my ($this,$args) = @_; | 120 my ($this,$args) = @_; |
116 | 121 |
117 my $output; | 122 $args ||= {}; |
123 | |
124 my $newArgs = hashMerge($this->creationArgs, $args); | |
118 | 125 |
119 if ($this->layout) { | 126 if ($this->layout) { |
120 $output = $this->context->include( | 127 return $this->context->include( |
121 $this->loader->layout($this->layout), | 128 $this->loader->layout($this->layout), |
122 { | 129 { |
123 %{$args || {}}, | 130 %{$newArgs}, |
124 content => sub { $this->RenderContent($args); }, | 131 content => sub { $this->RenderContent($newArgs); }, |
125 this => $this, | 132 this => $this, |
126 template => $this->template | 133 template => $this->template |
127 } | 134 } |
128 ); | 135 ); |
129 } else { | 136 } else { |
130 return $this->RenderContent($args); | 137 return $this->RenderContent($newArgs); |
131 } | 138 } |
132 | |
133 return $output; | |
134 } | 139 } |
135 | 140 |
136 sub RenderContent { | 141 sub RenderContent { |
137 my $this = shift; | 142 my $this = shift; |
138 return $this->SUPER::Render(@_); | 143 return $this->SUPER::Render(@_); |