Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTDocument.pm @ 186:6c0fee769b0c
IMPL::Web::View::TTControl tests, fixes
author | cin |
---|---|
date | Fri, 30 Mar 2012 16:40:34 +0400 |
parents | ae8072f2f2a3 |
children | 927653d01f4f |
comparison
equal
deleted
inserted
replaced
185:ae8072f2f2a3 | 186:6c0fee769b0c |
---|---|
42 ); | 42 ); |
43 | 43 |
44 sub require { | 44 sub require { |
45 my ($this, $control) = @_; | 45 my ($this, $control) = @_; |
46 | 46 |
47 if (! $this->controls->{$control}) { | 47 if (my $factory = $this->controls->{$control}) { |
48 return $factory; | |
49 } else { | |
48 | 50 |
49 (my $path = $control) =~ tr/\./\//; | 51 my $path = $control; |
50 if ( my $template = $this->loader->template($path) ) { | 52 if ( my $template = $this->loader->template($path) ) { |
51 my $opts = ${$this->opts}; | 53 my $opts = { %{$this->opts} }; |
52 $opts->{STASH} = $this->context->stash->clone(); | 54 $opts->{STASH} = $this->context->stash->clone(); |
53 | 55 |
54 my $ctx = new Template::Context($opts); | 56 my $ctx = new Template::Context($opts); |
55 | 57 |
56 my $factory = new IMPL::Web::View::TTFactory( | 58 $factory = new IMPL::Web::View::TTFactory( |
57 typeof IMPL::Web::View::TTControl, | 59 typeof IMPL::Web::View::TTControl, |
58 $template, | 60 $template, |
59 $ctx, | 61 $ctx, |
60 $opts | 62 $opts |
61 ); | 63 ); |
62 | 64 |
63 my @parts = split(/\.+/,$control); | 65 my @parts = split(/\/+/,$control); |
64 | 66 |
67 $this->controls->{$control} = $factory; | |
65 $this->context->stash->set([map { $_, 0 } @parts], $factory); | 68 $this->context->stash->set([map { $_, 0 } @parts], $factory); |
66 | 69 |
70 return $factory; | |
67 } else { | 71 } else { |
68 die new IMPL::KeyNotFoundException($control); | 72 die new IMPL::KeyNotFoundException($control); |
69 } | 73 } |
70 | 74 |
71 } | 75 } |