comparison Lib/IMPL/Web/View/TTContext.pm @ 356:97131d500f16

TTView: added identifiers support
author cin
date Thu, 17 Oct 2013 17:48:50 +0400
parents 8dfb9df07d02
children 833e663796c4
comparison
equal deleted inserted replaced
355:8dfb9df07d02 356:97131d500f16
32 prefix 32 prefix
33 cache 33 cache
34 includes 34 includes
35 modules 35 modules
36 aliases 36 aliases
37 id
37 )) { 38 )) {
38 my $t = $prop; 39 my $t = $prop;
39 40
40 *{__PACKAGE__ . '::' . $prop} = sub { 41 *{__PACKAGE__ . '::' . $prop} = sub {
41 my $this = shift; 42 my $this = shift;
61 my $clone = $class->new($args); 62 my $clone = $class->new($args);
62 63
63 $clone->stash->update($params) if $params; 64 $clone->stash->update($params) if $params;
64 65
65 return $clone; 66 return $clone;
67 }
68
69 sub get_next_id {
70 my ($this) = @_;
71
72 my $id = $this->stash->get('document.nextId') || 0;
73 $this->stash->set('document.nextId', $id + 1);
74 return "w-$id";
66 } 75 }
67 76
68 sub find_template { 77 sub find_template {
69 my ($this,$name) = @_; 78 my ($this,$name) = @_;
70 79
265 $ctx->leave(); 274 $ctx->leave();
266 } 275 }
267 } 276 }
268 277
269 if (my $class = $info->{class}) { 278 if (my $class = $info->{class}) {
270 $class->new($this,$info->{template})->Render($args); 279 $class->new($ctx,$info->{template},$args)->Render($args);
271 } else { 280 } else {
272 return $ctx->include($info->{template},$args); 281 return $ctx->include($info->{template},$args);
273 } 282 }
274 }, 283 },
275 hashMerge( 284 hashMerge(
276 $info->{labels} || {}, 285 $info->{labels} || {},
277 { 286 {
278 base => $info->{base}, 287 base => $info->{base},
279 parent => $this 288 parent => $this,
289 id => $this->get_next_id
280 } 290 }
281 ) 291 )
282 ) 292 )
283 } 293 }
284 294
286 my ($this,$prefix,$args) = @_; 296 my ($this,$prefix,$args) = @_;
287 297
288 die ArgException->new(prefix => "the prefix must be specified") 298 die ArgException->new(prefix => "the prefix must be specified")
289 unless defined $prefix; 299 unless defined $prefix;
290 300
291 #TODO handle DOM models 301
292 302
293 if (my $res = $this->stash->get(['resolver', [$this,$prefix,$args]] ) ) { 303 if (my $res = $this->stash->get(['resolve', [$this,$prefix,$args]] ) ) {
294 return $res; 304 return $res;
295 } 305 }
296 306
297 my @comp = map { $_, 0 } grep length($_), split(/\.|\[(\d+)\]/, $prefix); 307 my @comp = map { $_, 0 } grep length($_), split(/\.|\[(\d+)\]/, $prefix);
298 308