Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTFactory.pm @ 305:b5d5793f348e
TTView refactoring, still experiencing memory leaks
| author | sergey | 
|---|---|
| date | Wed, 17 Apr 2013 18:00:19 +0400 | 
| parents | aeeb57a12046 | 
| children | 5e4e7c8fbca1 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 304:2ff513227cb4 | 305:b5d5793f348e | 
|---|---|
| 25 template => PROP_RW, | 25 template => PROP_RW, | 
| 26 context => PROP_RW, | 26 context => PROP_RW, | 
| 27 instances => PROP_RW, | 27 instances => PROP_RW, | 
| 28 baseLocation => PROP_RW, | 28 baseLocation => PROP_RW, | 
| 29 base => PROP_RW, | 29 base => PROP_RW, | 
| 30 require => PROP_RO, | 30 registry => PROP_RO, | 
| 31 blocks => PROP_RO, | 31 blocks => PROP_RO, | 
| 32 initialized => PROP_RO | 32 initialized => PROP_RO | 
| 33 ] | 33 ] | 
| 34 }; | 34 }; | 
| 35 | 35 | 
| 36 sub CTOR { | 36 sub CTOR { | 
| 37 my ($this,$template,$context,$baseLocation,$require) = @_; | 37 my ($this,$template,$context,$path,$registry) = @_; | 
| 38 | 38 | 
| 39 die ArgException->new("A template is required") unless $template; | 39 die ArgException->new("A template is required") unless $template; | 
| 40 | 40 | 
| 41 Loader->safe->Require($this->factory) | 41 Loader->safe->Require($this->factory) | 
| 42 if $this->factory and not ref $this->factory; | 42 if $this->factory and not ref $this->factory; | 
| 43 | 43 | 
| 44 $context ||= new Template::Context(); | 44 $context ||= new Template::Context(); | 
| 45 my $baseLocation = join( '/', splice( @{[split(/\//,$path)]}, 0, -1 ) ); | |
| 45 | 46 | 
| 46 $this->template($template); | 47 $this->template($template); | 
| 47 $this->context($context); | 48 $this->context($context); | 
| 48 $this->baseLocation($baseLocation); | 49 $this->baseLocation($baseLocation); | 
| 49 $this->instances(0); | 50 $this->instances(0); | 
| 50 $this->require($require); | 51 $this->registry($registry); | 
| 51 | 52 | 
| 52 if (my $baseTplName = $template->extends) { | 53 if (my $baseTplName = $template->extends) { | 
| 53 $baseTplName =~ s{^\./}{$baseLocation/}; | 54 $baseTplName =~ s{^\./}{$baseLocation/}; | 
| 54 | 55 | 
| 55 my $base = &$require($baseTplName) | 56 my $base = $registry->Require($baseTplName) | 
| 56 or die OpException->new("The specified base template isn't found"); | 57 or die OpException->new("The specified base template isn't found"); | 
| 57 | 58 | 
| 58 $this->base($base); | 59 $this->base($base); | 
| 59 | 60 | 
| 60 $this->blocks(hashMerge($base->blocks, $template->blocks)); | 61 $this->blocks(hashMerge($base->blocks, $template->blocks)); | 
| 97 | 98 | 
| 98 $context->stash->update({ require => sub { | 99 $context->stash->update({ require => sub { | 
| 99 my ($module) = @_; | 100 my ($module) = @_; | 
| 100 | 101 | 
| 101 $module =~ s/^\.\//$baseLocation\//; | 102 $module =~ s/^\.\//$baseLocation\//; | 
| 102 return $require->($module); | 103 return $registry->Require($module); | 
| 103 }}); | 104 }}); | 
| 104 } | 105 } | 
| 105 | 106 | 
| 106 sub MergeParameters { | 107 sub MergeParameters { | 
| 107 my $this = shift; | 108 my $this = shift; | 
