comparison Lib/IMPL/Web/TT/Document.pm @ 146:60fd224f3e3c

fixed cgi parameters processing Added parameters inflating feature Added preprocessed templates, reformatting output
author wizard
date Mon, 26 Jul 2010 03:19:06 +0400
parents bd10093bb122
children 4369d5458bb6
comparison
equal deleted inserted replaced
145:bd10093bb122 146:60fd224f3e3c
16 private property _provider => prop_all; 16 private property _provider => prop_all;
17 private property _context => prop_all; 17 private property _context => prop_all;
18 public property cache => prop_all; 18 public property cache => prop_all;
19 public property template => prop_get | owner_set; 19 public property template => prop_get | owner_set;
20 public property presenter => prop_all, { validate => \&_validatePresenter }; 20 public property presenter => prop_all, { validate => \&_validatePresenter };
21 public property preprocess => prop_all | prop_list,
21 private property _controlClassMap => prop_all; 22 private property _controlClassMap => prop_all;
22 } 23 }
23 24
24 our %CTOR = ( 25 our %CTOR = (
25 'IMPL::DOM::Document' => sub { nodeName => 'document' } 26 'IMPL::DOM::Document' => sub { nodeName => 'document' }
31 $this->_controlClassMap({}); 32 $this->_controlClassMap({});
32 $this->registerControlClass( Control => 'IMPL::Web::TT::Control' ); 33 $this->registerControlClass( Control => 'IMPL::Web::TT::Control' );
33 $this->appendChild( $this->Create(body => 'IMPL::Web::TT::Collection') ); 34 $this->appendChild( $this->Create(body => 'IMPL::Web::TT::Collection') );
34 $this->appendChild( $this->Create(head => 'IMPL::Web::TT::Collection') ); 35 $this->appendChild( $this->Create(head => 'IMPL::Web::TT::Collection') );
35 $this->cache($args{cache}) if $args{cache}; 36 $this->cache($args{cache}) if $args{cache};
37 $this->preprocess($args{preprocess}) if $args{preprocess};
36 } 38 }
37 39
38 sub CreateControl { 40 sub CreateControl {
39 my ($this,$name,$class,$args) = @_; 41 my ($this,$name,$class,$args) = @_;
40 42
75 this => $this, 77 this => $this,
76 render => sub { 78 render => sub {
77 $this->_process(@_); 79 $this->_process(@_);
78 } 80 }
79 }, 81 },
80 POST_CHOMP => 2,
81 PRE_CHOMP => 2,
82 RECURSION => 1, 82 RECURSION => 1,
83 LOAD_TEMPLATES => [$this->provider] 83 LOAD_TEMPLATES => [$this->provider]
84 ) 84 )
85 ) 85 )
86 } 86 }
101 101
102 eval "require $type; 1;" or die new IMPL::Exception("Failed to load a module",$type,"$@") unless eval { $type->can('new') }; 102 eval "require $type; 1;" or die new IMPL::Exception("Failed to load a module",$type,"$@") unless eval { $type->can('new') };
103 103
104 die new IMPL::InvalidArgumentException("A type must be subclass of IMPL::DOM::Node",$type) unless $type->isa('IMPL::DOM::Node'); 104 die new IMPL::InvalidArgumentException("A type must be subclass of IMPL::DOM::Node",$type) unless $type->isa('IMPL::DOM::Node');
105 105
106 # resolve template name to a real template
107 $args->{template} = $this->context->template($args->{template}) if $args->{template};
108
106 $this->_controlClassMap->{$controlClass} = { 109 $this->_controlClassMap->{$controlClass} = {
107 controlClass => $controlClass, 110 controlClass => $controlClass,
108 type => $type, 111 type => $type,
109 args => ref $args eq 'HASH' ? $args : {} 112 args => ref $args eq 'HASH' ? $args : {}
110 }; 113 };
125 die new IMPL::InvalidOperationException("A specified template isn't a control",$template) unless $controlClass; 128 die new IMPL::InvalidOperationException("A specified template isn't a control",$template) unless $controlClass;
126 129
127 if (not $this->isControlClass($controlClass)) { 130 if (not $this->isControlClass($controlClass)) {
128 if ($doc->template) { 131 if ($doc->template) {
129 $controlTemplate = $doc->blocks()->{$doc->template} || $this->context->template($doc->template); 132 $controlTemplate = $doc->blocks()->{$doc->template} || $this->context->template($doc->template);
130 $out = $this->context->process($doc); 133 $out = $this->context->include($doc);
131 } else { 134 } else {
132 $controlTemplate = $doc; 135 $controlTemplate = $doc;
133 } 136 }
134 $this->registerControlClass($controlClass,$type,{ template => $controlTemplate } ); 137 $this->registerControlClass($controlClass,$type,{ template => $controlTemplate } );
135 } 138 }
172 $this->provider( 175 $this->provider(
173 ENCODING => $encoding, 176 ENCODING => $encoding,
174 INTERPOLATE => 1, 177 INTERPOLATE => 1,
175 PRE_CHOMP => 1, 178 PRE_CHOMP => 1,
176 POST_CHOMP => 1, 179 POST_CHOMP => 1,
180 TRIM => 0,
177 COMPILE_EXT => $this->cache ? '.ttc' : undef, 181 COMPILE_EXT => $this->cache ? '.ttc' : undef,
178 COMPILE_DIR => $this->cache, 182 COMPILE_DIR => $this->cache,
179 INCLUDE_PATH => [$inc,@includes] 183 INCLUDE_PATH => [$inc,@includes]
180 ); 184 );
185
186 $this->context->process($_) foreach $this->preprocess;
181 187
182 $this->template($this->context->template($fileName)); 188 $this->template($this->context->template($fileName));
183 } 189 }
184 190
185 sub AddVar { 191 sub AddVar {