Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTDocument.pm @ 301:aeeb57a12046
*IMPL::Web::View: templates inheritance support
author | cin |
---|---|
date | Mon, 25 Mar 2013 02:04:18 +0400 |
parents | bf3af33b9003 |
children | a5eb64c6e6f7 |
comparison
equal
deleted
inserted
replaced
300:bf3af33b9003 | 301:aeeb57a12046 |
---|---|
29 sub CTOR { | 29 sub CTOR { |
30 my ($this,$template,$ctx,$loader,$vars) = @_; | 30 my ($this,$template,$ctx,$loader,$vars) = @_; |
31 | 31 |
32 $this->loader($loader) if $loader; | 32 $this->loader($loader) if $loader; |
33 $this->layout( $template->layout ) unless $this->layout; | 33 $this->layout( $template->layout ) unless $this->layout; |
34 $this->title( $template->title ) unless $this->title; | |
34 | 35 |
35 $this->context->stash->update($vars) | 36 $this->context->stash->update($vars) |
36 if ref $vars eq 'HASH'; | 37 if ref $vars eq 'HASH'; |
37 } | 38 } |
38 | 39 |
49 | 50 |
50 $require = sub { | 51 $require = sub { |
51 my $control = shift; | 52 my $control = shift; |
52 | 53 |
53 unless($self) { | 54 unless($self) { |
54 carp("Cant load control $control outside the rendering procedure"); | 55 carp("Cant load control $control outside the document rendering process"); |
55 return; | 56 return; |
56 } | 57 } |
57 | 58 |
58 if (my $factory = $controls{$control}) { | 59 if (my $factory = $controls{$control}) { |
59 return $factory; | 60 return $factory; |
60 } else { | 61 } else { |
61 my $path = $control; | 62 my $path = $control; |
62 | 63 |
63 if ( my $template = $self->loader->template($path) ) { | 64 if ( my $template = $self->loader->template($path) ) { |
65 | |
66 $documentContext->localise(); | |
67 my $ctx = _clone_context($documentContext); | |
68 $documentContext->delocalise(); | |
64 | 69 |
65 $factory = new IMPL::Web::View::TTFactory( | 70 $factory = new IMPL::Web::View::TTFactory( |
66 $template, | 71 $template, |
67 $documentContext, | 72 $ctx, |
68 join( '/', splice( @{[split(/\//,$path)]}, 0, -1 ) ), | 73 join( '/', splice( @{[split(/\//,$path)]}, 0, -1 ) ), |
69 $require | 74 $require |
70 ); | 75 ); |
71 | 76 |
72 $controls{$control} = $factory; | 77 $controls{$control} = $factory; |
112 ); | 117 ); |
113 } else { | 118 } else { |
114 return $this->next::method($args); | 119 return $this->next::method($args); |
115 } | 120 } |
116 }; | 121 }; |
122 | |
123 my $e = $@; | |
117 | 124 |
118 undef $require; | 125 undef $require; |
119 undef $documentContext; | 126 undef $documentContext; |
120 undef %controls; | 127 undef %controls; |
121 undef $self; | 128 undef $self; |
122 $this->context->delocalise(); | 129 $this->context->delocalise(); |
123 | 130 |
124 | |
125 my $e = $@; | |
126 if ($e) { | 131 if ($e) { |
127 die $e; | 132 die $e; |
128 } else { | 133 } else { |
129 return $text; | 134 return $text; |
130 } | 135 } |
131 | |
132 | |
133 } | 136 } |
134 | 137 |
135 sub _clone_context { | 138 sub _clone_context { |
136 my $args = { %{shift || {}} }; | 139 my $args = { %{shift || {}} }; |
137 delete $args->{CONFIG}; | 140 delete $args->{CONFIG}; |