Mercurial > pub > Impl
annotate Lib/IMPL/Web/View/TTView.pm @ 404:9ef75f2029be default
sync
author | cin |
---|---|
date | Fri, 28 Aug 2015 19:54:53 +0300 |
parents | 16ff604298c7 |
children |
rev | line source |
---|---|
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
1 package IMPL::Web::View::TTView; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
2 use strict; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
3 |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
4 use JSON; |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
5 use IMPL::lang qw(hashMerge is); |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
6 use IMPL::Const qw(:prop); |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
7 use IMPL::declare { |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
8 require => { |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
9 Context => 'IMPL::Web::View::TTContext', |
371 | 10 Loader => 'IMPL::Code::Loader', |
11 Factory => 'IMPL::Web::View::ObjectFactory' | |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
12 }, |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
13 base => [ |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
14 'IMPL::Object' => undef, |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
15 'IMPL::Object::Autofill' => '@_', |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
16 'IMPL::Object::Serializable' => undef |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
17 ], |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
18 props => [ |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
19 options => PROP_RW, |
353 | 20 viewBase => PROP_RW, |
21 layoutBase => PROP_RW, | |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
22 layout => PROP_RW, |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
23 tt_ext => PROP_RW, |
353 | 24 includes => PROP_RW | PROP_LIST, |
25 globals => PROP_RW | |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
26 ] |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
27 }; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
28 |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
29 sub CTOR { |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
30 my ($this) = @_; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
31 |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
32 $this->tt_ext('tt') unless defined $this->tt_ext; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
33 } |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
34 |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
35 sub display { |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
36 my ($this,$model,$template,$args) = @_; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
37 |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
38 my $context = Context->new($this->options); |
399 | 39 eval { |
401 | 40 $context->process('globals' . '.' . $this->tt_ext, $args); |
399 | 41 }; |
353 | 42 my $layout = delete $args->{layout} || $this->layout; |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
43 |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
44 return $context->invoke_environment( |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
45 sub { |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
46 my $ctx = shift; |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
47 if ($layout) { |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
48 return $ctx->invoke_environment( |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
49 sub { |
354 | 50 return shift->render( |
51 $layout, | |
52 hashMerge( | |
53 { | |
54 content => sub { | |
55 $ctx->invoke_environment( | |
56 sub { | |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
57 return shift->display_model($model,$template); |
354 | 58 }, |
59 { | |
60 base => $this->viewBase | |
61 } | |
62 ) | |
396 | 63 }, |
64 model => $model | |
354 | 65 } |
66 ) | |
67 ); # render | |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
68 }, |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
69 { |
353 | 70 base => $this->layoutBase, |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
71 } |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
72 ); |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
73 } else { |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
74 return $ctx->invoke_environment( |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
75 sub { |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
76 return shift->display_model($model,$template); |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
77 }, |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
78 { |
353 | 79 base => $this->viewBase |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
80 } |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
81 ); |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
82 } |
353 | 83 },hashMerge( |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
84 $this->globals, |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
85 hashMerge( |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
86 $args, |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
87 { |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
88 includes => scalar($this->includes), |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
89 tt_ext => $this->tt_ext, |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
90 debug => sub { |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
91 warn @_; |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
92 }, |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
93 is => sub { |
371 | 94 my ($obj,$class) = @_; |
95 if (is($class,Factory)) { | |
96 return is($obj,$class->factory); | |
97 } else { | |
98 return is($obj,$class); | |
99 } | |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
100 }, |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
101 import => sub { |
371 | 102 return Factory->new(Loader->safe->Require(shift)); |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
103 }, |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
104 toJSON => sub { |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
105 return JSON->new()->utf8->pretty->encode(shift); |
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
106 } |
353 | 107 } |
359
833e663796c4
TTView: added view variable to pass rendering context between controls
sergey
parents:
354
diff
changeset
|
108 ) |
353 | 109 ) |
351
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
110 ); |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
111 } |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
112 |
cfd7570c2af2
working on TTView: created TTView class for rendering models
cin
parents:
diff
changeset
|
113 1; |