Mercurial > pub > Impl
comparison Lib/IMPL/Web/TDocument.pm @ 7:94d47b388442
Улучшены тесты
Исправлены ошибки
Улучшена документация
Работа над схемой DOM
author | Sergey |
---|---|
date | Mon, 24 Aug 2009 01:05:34 +0400 |
parents | e2cd73ccc5bd |
children | 16ada169ca75 |
comparison
equal
deleted
inserted
replaced
6:e2cd73ccc5bd | 7:94d47b388442 |
---|---|
1 package IMPL::Web::TDocument; | 1 package IMPL::Web::TDocument; |
2 use strict; | 2 use strict; |
3 use warnings; | 3 use warnings; |
4 | 4 |
5 use base qw(IMPL::DOM::Node); | 5 use base qw(IMPL::DOM::Node IMPL::Object::Disposable); |
6 use Template::Context; | 6 use Template::Context; |
7 use Template::Provider; | 7 use Template::Provider; |
8 use IMPL::Class::Property; | 8 use IMPL::Class::Property; |
9 use File::Spec; | 9 use File::Spec; |
10 | 10 |
11 BEGIN { | 11 BEGIN { |
12 public property Templates => prop_get | owner_set; | 12 private property _Provider => prop_all; |
13 public property Context => prop_get | owner_set; | 13 private property _Context => prop_all; |
14 public property Template => prop_get | owner_set; | |
14 } | 15 } |
15 | 16 |
16 our %CTOR = ( | 17 our %CTOR = ( |
17 'IMPL::DOM::Node' => sub { nodeName => 'document' } | 18 'IMPL::DOM::Node' => sub { nodeName => 'document' } |
18 ); | 19 ); |
19 | 20 |
20 sub load { | 21 sub Provider { |
21 my ($this,$file) = @_; | 22 my ($this,%args) = @_; |
22 | 23 |
23 $file = File::Spec->rel2abs($file); | 24 if (my $provider = $this->_Provider) { |
25 return $provider; | |
26 } else { | |
27 return $this->_Provider(new Template::Provider( | |
28 \%args | |
29 )); | |
30 } | |
31 } | |
32 | |
33 sub Context { | |
34 my ($this) = @_; | |
24 | 35 |
36 if (my $ctx = $this->_Context) { | |
37 return $ctx; | |
38 } else { | |
39 return $this->_Context ( | |
40 new Template::Context( | |
41 VARIABLES => { | |
42 document => $this | |
43 }, | |
44 TRIM => 1, | |
45 RECURSION => 1, | |
46 LOAD_TEMPLATES => [$this->Provider] | |
47 ) | |
48 ) | |
49 } | |
50 } | |
51 | |
52 sub loadFile { | |
53 my ($this,$filePath,$encoding) = @_; | |
54 | |
55 die new IMPL::InvalidArgumentException("A filePath parameter is required") unless $filePath; | |
56 | |
57 $encoding ||= 'utf8'; | |
58 | |
59 $this->_Context(undef); | |
60 $this->_Provider(undef); | |
61 | |
62 my ($vol,$dir,$fileName) = File::Spec->splitpath($filePath); | |
63 | |
64 my $inc = File::Spec->catpath($vol,$dir,''); | |
65 | |
66 $this->Provider( | |
67 ENCODING => $encoding, | |
68 INTERPOLATE => 1, | |
69 PRE_CHOMP => 1, | |
70 POST_CHOMP => 1, | |
71 INCLUDE_PATH => $inc | |
72 ); | |
73 | |
74 $this->Template($this->Context->template($fileName)); | |
75 } | |
76 | |
77 sub Title { | |
78 $_[0]->Template->Title; | |
79 } | |
80 | |
81 sub Render { | |
82 my ($this) = @_; | |
83 | |
84 return $this->Template->process($this->Context); | |
85 } | |
86 | |
87 sub Dispose { | |
88 my ($this) = @_; | |
89 | |
90 $this->Template(undef); | |
91 $this->_Context(undef); | |
92 $this->_Provider(undef); | |
93 | |
94 $this->SUPER::Dispose(); | |
25 } | 95 } |
26 | 96 |
27 1; | 97 1; |
98 __END__ | |
99 =pod | |
100 | |
101 =head1 SYNOPSIS | |
102 | |
103 // create new document | |
104 my $doc = new IMPL::Web::TDocument; | |
105 | |
106 // load template | |
107 $doc->loadFile('Templates/index.tt'); | |
108 | |
109 // render file | |
110 print $doc->Render(); | |
111 | |
112 =head1 DESCRIPTION | |
113 | |
114 , Template::Toolkit. , | |
115 . C<IMPL::DOM::Node>, | |
116 .. DOM . | |
117 | |
118 C<document> . | |
119 , | |
120 C<Dispose> . | |
121 | |
122 =head1 METHODS | |
123 | |
124 =level 4 | |
125 | |
126 =item C<new()> | |
127 | |
128 | |
129 | |
130 =item C<$doc->loadFile($fileName,$encoding)> | |
131 | |
132 C<$fileName>, C<$encoding>. | |
133 , utf-8. | |
134 | |
135 =item C<$doc->Render()> | |
136 | |
137 . | |
138 | |
139 =item C<$doc->Dispose()> | |
140 | |
141 . | |
142 | |
143 =back | |
144 | |
145 =cut |