annotate Lib/IMPL/Web/TT/Document.pm @ 145:bd10093bb122

Minor changes
author wizard
date Wed, 21 Jul 2010 06:27:12 +0400
parents f6af119ac741
children 60fd224f3e3c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
1 package IMPL::Web::TT::Document;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
2 use strict;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
3 use warnings;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
4
75
wizard
parents: 49
diff changeset
5 use base qw(IMPL::DOM::Document IMPL::Object::Disposable);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
6 use Template::Context;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
7 use Template::Provider;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
8 use IMPL::Class::Property;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
9 use File::Spec;
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
10 use Scalar::Util qw(blessed);
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
11 use IMPL::Web::TT::Collection;
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
12 use IMPL::Web::TT::Control;
109
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
13 use Carp;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
14
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
15 BEGIN {
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
16 private property _provider => prop_all;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
17 private property _context => prop_all;
134
44977efed303 Significant performance optimizations
wizard
parents: 127
diff changeset
18 public property cache => prop_all;
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
19 public property template => prop_get | owner_set;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
20 public property presenter => prop_all, { validate => \&_validatePresenter };
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
21 private property _controlClassMap => prop_all;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
22 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
23
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
24 our %CTOR = (
75
wizard
parents: 49
diff changeset
25 'IMPL::DOM::Document' => sub { nodeName => 'document' }
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
26 );
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
27
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
28 sub CTOR {
134
44977efed303 Significant performance optimizations
wizard
parents: 127
diff changeset
29 my ($this,%args) = @_;
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
30
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
31 $this->_controlClassMap({});
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
32 $this->registerControlClass( Control => 'IMPL::Web::TT::Control' );
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
33 $this->appendChild( $this->Create(body => 'IMPL::Web::TT::Collection') );
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
34 $this->appendChild( $this->Create(head => 'IMPL::Web::TT::Collection') );
134
44977efed303 Significant performance optimizations
wizard
parents: 127
diff changeset
35 $this->cache($args{cache}) if $args{cache};
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
36 }
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
37
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
38 sub CreateControl {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
39 my ($this,$name,$class,$args) = @_;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
40
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
41 $args = {} unless ref $args eq 'HASH';
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
42
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
43 if (my $info = $this->_controlClassMap->{$class}) {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
44 my %nodeArgs = (%{$info->{args}},%$args);
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
45 $nodeArgs{controlClass} = $class;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
46
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
47 return $this->Create($name,$info->{type},\%nodeArgs);
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
48 } else {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
49 die new IMPL::Exception('A control is\'t registered', $class, $name);
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
50 }
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
51 }
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
52
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
53 sub provider {
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
54 my ($this,%args) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
55
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
56 if (my $provider = $this->_provider) {
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
57 return $provider;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
58 } else {
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
59 return $this->_provider(new Template::Provider(
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
60 \%args
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
61 ));
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
62 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
63 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
64
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
65 sub context {
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
66 my ($this) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
67
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
68 if (my $ctx = $this->_context) {
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
69 return $ctx;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
70 } else {
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
71 return $this->_context (
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
72 new Template::Context(
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
73 VARIABLES => {
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
74 document => $this,
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
75 this => $this,
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
76 render => sub {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
77 $this->_process(@_);
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
78 }
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
79 },
145
bd10093bb122 Minor changes
wizard
parents: 136
diff changeset
80 POST_CHOMP => 2,
bd10093bb122 Minor changes
wizard
parents: 136
diff changeset
81 PRE_CHOMP => 2,
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
82 RECURSION => 1,
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
83 LOAD_TEMPLATES => [$this->provider]
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
84 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
85 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
86 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
87 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
88
127
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
89 sub resolveVar {
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
90 my ($this,$var) = @_;
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
91
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
92 return $this->context->stash->get($var);
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
93 }
0dce0470a3d8 In the IMPL::Web::ControllerUnit added the ability to notify a form about a wrong data from a transaction
wizard
parents: 121
diff changeset
94
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
95 sub registerControlClass {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
96 my ($this, $controlClass, $type, $args) = @_;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
97
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
98 $type ||= 'IMPL::Web::TT::Control';
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
99
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
100 die new IMPL::InvalidArgumentException("A controlClass must be a single word",$controlClass) unless $controlClass =~ /^\w+$/;
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
101
117
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
102 eval "require $type; 1;" or die new IMPL::Exception("Failed to load a module",$type,"$@") unless eval { $type->can('new') };
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
103
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
104 die new IMPL::InvalidArgumentException("A type must be subclass of IMPL::DOM::Node",$type) unless $type->isa('IMPL::DOM::Node');
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
105
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
106 $this->_controlClassMap->{$controlClass} = {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
107 controlClass => $controlClass,
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
108 type => $type,
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
109 args => ref $args eq 'HASH' ? $args : {}
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
110 };
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
111 }
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
112
117
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
113 sub require {
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
114 my ($this,$template) = @_;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
115
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
116 my $doc = $this->context->template($template);
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
117
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
118 die new IMPL::InvalidOperationException("A specified template isn't a document",$template) unless eval{ $doc -> isa('Template::Document') };
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
119
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
120 my $controlClass = $doc->class;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
121 my $type = $doc->nativeType;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
122 my $controlTemplate;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
123 my $out = "";
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
124
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
125 die new IMPL::InvalidOperationException("A specified template isn't a control",$template) unless $controlClass;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
126
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
127 if (not $this->isControlClass($controlClass)) {
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
128 if ($doc->template) {
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
129 $controlTemplate = $doc->blocks()->{$doc->template} || $this->context->template($doc->template);
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
130 $out = $this->context->process($doc);
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
131 } else {
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
132 $controlTemplate = $doc;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
133 }
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
134 $this->registerControlClass($controlClass,$type,{ template => $controlTemplate } );
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
135 }
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
136
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
137 return $out;
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
138 }
0475eb382085 Controls support (RC1)
wizard
parents: 109
diff changeset
139
109
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
140 sub isControlClass {
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
141 my ($this,$name) = @_;
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
142 return $this->_controlClassMap->{$name} ? 1 : 0;
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
143 }
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
144
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
145 sub _getControls {
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
146 my ($this) = @_;
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
147
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
148 my ($node) = $this->selectNodes('controls');
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
149 return $node;
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
150 }
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
151
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
152 sub _validatePresenter {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
153 my ($this,$value) = @_;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
154
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
155 die new IMPL::InvalidArgumentException("A view object is required") unless blessed($value) and $value->isa('Template::View');
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
156 }
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
157
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
158 sub LoadFile {
121
92c850d0bdb9 Minor changes
wizard
parents: 117
diff changeset
159 my ($this,$filePath,$encoding,@includes) = @_;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
160
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
161 die new IMPL::InvalidArgumentException("A filePath parameter is required") unless $filePath;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
162
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
163 $encoding ||= 'utf8';
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
164
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
165 $this->_context(undef);
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
166 $this->_provider(undef);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
167
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
168 my ($vol,$dir,$fileName) = File::Spec->splitpath($filePath);
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
169
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
170 my $inc = File::Spec->catpath($vol,$dir,'');
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
171
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
172 $this->provider(
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
173 ENCODING => $encoding,
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
174 INTERPOLATE => 1,
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
175 PRE_CHOMP => 1,
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
176 POST_CHOMP => 1,
134
44977efed303 Significant performance optimizations
wizard
parents: 127
diff changeset
177 COMPILE_EXT => $this->cache ? '.ttc' : undef,
44977efed303 Significant performance optimizations
wizard
parents: 127
diff changeset
178 COMPILE_DIR => $this->cache,
121
92c850d0bdb9 Minor changes
wizard
parents: 117
diff changeset
179 INCLUDE_PATH => [$inc,@includes]
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
180 );
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
181
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
182 $this->template($this->context->template($fileName));
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
183 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
184
97
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
185 sub AddVar {
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
186 my ($this,$name,$value) = @_;
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
187
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
188 $this->context->stash->set($name,$value);
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
189 }
964587c5183c Added SecureCall to Web QueryHandlers stack
wizard
parents: 77
diff changeset
190
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
191 sub title {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
192 $_[0]->template->title;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
193 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
194
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
195 sub Render {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
196 my ($this) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
197
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
198 return $this->template->process($this->context);
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
199 }
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
200
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
201 # Формирует представление для произвольных объектов
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
202 sub _process {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
203 my ($this,@items) = @_;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
204
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
205 my @result;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
206
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
207 foreach my $item (@items) {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
208 if (blessed($item) and $item->isa('IMPL::Web::TT::Control')) {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
209 push @result, $item->Render();
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
210 } elsif(blessed($item)) {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
211 if ($this->presenter) {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
212 push @result, $this->presenter->print($item);
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
213 } else {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
214 push @result, $this->toString;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
215 }
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
216 } else {
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
217 push @result, $item;
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
218 }
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
219 }
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
220
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
221 return join '',@result;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
222 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
223
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
224 our $AUTOLOAD;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
225 sub AUTOLOAD {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
226 my $this = shift;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
227 my ($method) = ($AUTOLOAD =~ /(\w+)$/);
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
228
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
229 if($method =~ /^create(\w+)/) {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
230 my ($name,$args) = @_;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
231 return $this->CreateControl($name,$1,$args);
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
232 }
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
233
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
234 my @result = $this->selectNodes($method);
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
235
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
236 return $result[0] if @result;
109
ddf0f037d460 IMPL::DOM::Node updated to support TT, (added childNodesRef and selectNodesRef for using from TT)
wizard
parents: 108
diff changeset
237 carp "Looks like you have a mistake, document doesn't have a such property or child: $method";
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
238 return;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
239 }
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
240
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
241 sub as_list {
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
242 $_[0]->childNodes;
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
243 }
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
244
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
245 sub Dispose {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
246 my ($this) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
247
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
248 $this->template(undef);
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
249 $this->_context(undef);
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
250 $this->_provider(undef);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
251
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
252 $this->supercall::Dispose();
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
253 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
254
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
255 1;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
256 __END__
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
257 =pod
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
258
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
259 =head1 NAME
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
260
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
261 C<IMPL::Web::TT::Document> - Документ, позволяющий строить представление по шаблону
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
262
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
263 =head1 SYNOPSIS
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
264
75
wizard
parents: 49
diff changeset
265 =begin code
wizard
parents: 49
diff changeset
266
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
267 // create new document
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
268 my $doc = new IMPL::Web::TT::Document;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
269
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
270 // load template
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
271 $doc->loadFile('Templates/index.tt');
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
272
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
273 // render file
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
274 print $doc->Render();
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
275
75
wizard
parents: 49
diff changeset
276 =end code
wizard
parents: 49
diff changeset
277
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
278 =head1 DESCRIPTION
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
279
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
280 C<use base qw(IMPL::DOM::Document)>
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
281
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
282 Документ, основанный на шаблоне Template::Toolkit. Позволяет загрузить шаблон,
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
283 и сформировать окончательный документ. Является наследником C<IMPL::DOM::Node>,
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
284 т.о. может быть использован для реализации DOM модели.
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
285
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
286 Внутри шаблона переменная C<document> ссылается на объект документа. По этой
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
287 причине образуется циклическая ссылка между объектами шаблона и документом, что
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
288 требует вызова метода C<Dispose> для освобождения документа.
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
289
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
290 =head1 METHODS
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
291
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
292 =over
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
293
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
294 =item C<CTOR()>
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
295
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
296 Создает новый экземпляр документа, свойство C<nodeName> устанавливается в 'C<document>'
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
297
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
298 =item C<$doc->LoadFile($fileName,$encoding)>
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
299
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
300 Загружает шаблон из файла C<$fileName>, используя кодировку C<$encoding>. Если
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
301 кодировка не указана, использует utf-8.
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
302
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
303 =item C<$doc->Render()>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
304
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
305 Возвращает данные построенные на основе загруженного шаблона.
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
306
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
307 =item C<$doc->Dispose()>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
308
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
309 Освобождает ресурсы и помечает объект как освобожденный.
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
310
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
311 =back
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
312
76
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
313 =head1 DOM
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
314
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
315 Документ представляет собой DOM документ, состоящий из узлов, которые представляют собой данные
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
316 для отображения. Для форматированого вывода используется C<template>.
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
317
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
318 В качестве элементов документа могут присутсвовать специальные объекты C<IMPL::Web::TT::Control>,
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
319 которые внутри содержат шаблон для форматирования собственного содержимого.
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
320
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
321
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
322
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
323 Документ предоставляет ряд фнукций для работы с элементами управления.
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
324
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
325 =head1 TEMPLATE
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
326
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
327 =begin code html
76
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
328
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
329 [% CALL document.registerClass( 'Table', 'My::TableClass', template => 'tables/pretty.tt' ) %]
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
330 [% CALL document.registerClass( 'Form' )%]
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
331
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
332 [% table = document.сreateTable('env') %]
76
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
333
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
334 [% FOEACH item in document.result %]
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
335 [% table.rows.Add( item.get('name','value') ) %]
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
336 [% END %]
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
337
108
c6fb6964de4c Removed absolute modules
wizard
parents: 107
diff changeset
338 [% form = document.createForm('login') %]
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
339 [% form.template = 'LOGIN_FORM'%]
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
340
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
341 [% FOREACH item IN document.childNodes %]
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
342 [%render(item)%]
76
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
343 [% END %]
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
344
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
345 [% BLOCK LOGIN_FORM %]
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
346 <form method="POST" action='/login.pl'>
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
347 user: [% render(this.item('name')) %] password: [% render(this.item('password')) %] <input type="submit"/>
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
348 </form>
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
349 [% END %]
76
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
350
77
9d24db321029 Refactoring Web::TT
wizard
parents: 76
diff changeset
351 =end code html
76
b1652a158b2b Web::DOM
wizard
parents: 75
diff changeset
352
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 7
diff changeset
353 =cut