File Coverage

blib/lib/CGI/Application/Plugin/AnyTemplate/Driver/HTMLTemplateExpr.pm
Criterion Covered Total %
statement 18 46 39.1
branch 0 12 0.0
condition 0 6 0.0
subroutine 8 12 66.6
pod 6 6 100.0
total 32 82 39.0


line stmt bran cond sub pod time code
1              
2             package CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplateExpr;
3              
4             =head1 NAME
5              
6             CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplateExpr - HTML::Template::Expr driver to AnyTemplate
7              
8             =head1 DESCRIPTION
9              
10             This is a driver for L, which
11             provides the implementation details specific to rendering templates via
12             the L templating system.
13              
14             All C drivers are designed to be used the same way. For
15             general usage instructions, see the documentation of
16             L.
17              
18             =head1 EMBEDDED COMPONENT SYNTAX (HTML::Template::Expr)
19              
20             =head2 Syntax
21              
22             The L syntax for embedding components is:
23              
24            
25              
26             This can be overridden by the following configuration variables:
27              
28             embed_tag_name # default 'CGIAPP_embed'
29              
30             For instance by setting the following value in your configuration file:
31              
32             embed_tag_name '__ACME_render'
33              
34             Then the embedded component tag will look like:
35              
36            
37              
38             The value of C must consist of numbers, letters and
39             underscores (C<_>), and must not begin with a number.
40              
41             =cut
42              
43 19     19   18266 use strict;
  19         37  
  19         712  
44 19     19   100 use Carp;
  19         34  
  19         1414  
45              
46 19     19   112 use CGI::Application::Plugin::AnyTemplate::ComponentHandler;
  19         41  
  19         397  
47              
48 19     19   99 use CGI::Application::Plugin::AnyTemplate::Base;
  19         34  
  19         501  
49 19     19   96 use vars qw(@ISA);
  19         29  
  19         9787  
50             @ISA = ('CGI::Application::Plugin::AnyTemplate::Base');
51              
52             =head1 CONFIGURATION
53              
54             The L driver
55             accepts the following config parameters:
56              
57             =over 4
58              
59             =item embed_tag_name
60              
61             The name of the tag used for embedding components. Defaults to
62             C.
63              
64             =item template_extension
65              
66             If C is true, then
67             L will append the value of
68             C to C. By default
69             the C is C<.html>.
70              
71             =item associate_query
72              
73             B
74              
75             If this config parameter is true, then
76             L will
77             copy all of the webapp's query params into the template using
78             L's C mechanism:
79              
80             my $driver = HTML::Template::Expr->new(
81             associate => $self->query,
82             );
83              
84             By default C is false.
85              
86             If you provide an C config parameter of your own, that will
87             disable the C functionality.
88              
89             =back
90              
91             All other configuration parameters are passed on unchanged to L.
92              
93             =cut
94              
95             sub driver_config_keys {
96 23     23 1 88 qw/
97             embed_tag_name
98             template_extension
99             associate_query
100             /;
101             }
102              
103             sub default_driver_config {
104             (
105 23     23 1 186 template_extension => '.html',
106             embed_tag_name => 'CGIAPP_embed',
107             associate_query => 0,
108             );
109             }
110              
111             =head2 required_modules
112              
113             The C function returns the modules required for this driver
114             to operate. In this case: C.
115              
116             =cut
117              
118             sub required_modules {
119 18     18 1 7953 return qw(
120             HTML::Template::Expr
121             );
122             }
123              
124              
125             =head1 DRIVER METHODS
126              
127             =over 4
128              
129             =item initialize
130              
131             Initializes the C driver. See the docs for
132             L for details.
133              
134             =cut
135              
136             # create the HTML::Template::Expr object,
137             # using:
138             # $self->{'driver_config'} # config info
139             # $self->{'include_paths'} # the paths to search for the template file
140             # $self->filename # the template file
141             # $self->{'webapp'}->query # for HTML::Template::Expr's 'associate' method,
142             # # so that the query params are included
143             # # in the template output
144             sub initialize {
145 0     0 1   my $self = shift;
146              
147 0           $self->_require_prerequisite_modules;
148              
149 0           my $string_ref = $self->string_ref;
150 0           my $filename = $self->filename;
151              
152 0 0 0       $string_ref or $filename or croak "HTML::Template file or string must be specified";
153              
154 0 0         my $query = $self->{'webapp'}->query or croak "HTML::Template::Expr webapp query not found";
155              
156 0           my $component_handler = $self->{'component_handler_class'}->new(
157             'webapp' => $self->{'webapp'},
158             'containing_template' => $self,
159             );
160              
161 0           my %params = (
162             %{ $self->{'native_config'} },
163             path => $self->{'include_paths'},
164             functions => {
165 0     0     $self->{'driver_config'}{'embed_tag_name'} => sub { $component_handler->embed(@_) },
166             }
167 0           );
168              
169 0 0         if ($filename) {
170 0           $params{'filename'} = $filename;
171             }
172 0 0         if ($string_ref) {
173 0           $params{'scalarref'} = $string_ref;
174             }
175              
176 0 0         if ($self->{'driver_config'}{'associate_query'}) {
177 0   0       $params{'associate'} ||= $query; # allow user to override associate with their own
178             }
179 0           my $driver = HTML::Template::Expr->new(%params);
180              
181 0           $self->{'driver'} = $driver;
182              
183             }
184              
185             # If we have already called output, then any stored params have already
186             # been stored in the driver. So when the user calls clear_params on the
187             # AT object, we have to call clear_params on the driver as well.
188              
189             sub clear_params {
190 0     0 1   my $self = shift;
191              
192 0 0         if ($self->{'driver'}) {
193 0           $self->{'driver'}->clear_params;
194             }
195 0           $self->SUPER::clear_params;
196             }
197              
198             =item render_template
199              
200             Fills the L object with C<< $self->param >>, and
201             returns the output (as a string reference).
202              
203             See the docs for L for details.
204              
205             =back
206              
207             =cut
208              
209             sub render_template {
210 0     0 1   my $self = shift;
211              
212 0           my $driver_config = $self->{'driver_config'};
213              
214             # fill the template
215 0           my $template = $self->{'driver'};
216              
217 0           $template->param(scalar $self->get_param_hash);
218 0           my $output = $template->output;
219 0           return \$output;
220             }
221              
222             =head1 SEE ALSO
223              
224             CGI::Application::Plugin::AnyTemplate
225             CGI::Application::Plugin::AnyTemplate::Base
226             CGI::Application::Plugin::AnyTemplate::ComponentHandler
227             CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplate
228             CGI::Application::Plugin::AnyTemplate::Driver::HTMLTemplatePluggable
229             CGI::Application::Plugin::AnyTemplate::Driver::TemplateToolkit
230             CGI::Application::Plugin::AnyTemplate::Driver::Petal
231              
232             CGI::Application
233              
234             Template::Toolkit
235             HTML::Template
236              
237             HTML::Template::Pluggable
238             HTML::Template::Plugin::Dot
239              
240             Petal
241              
242             Exporter::Renaming
243              
244             CGI::Application::Plugin::TT
245              
246             =head1 AUTHOR
247              
248             Michael Graham, C<< >>
249              
250             =head1 COPYRIGHT & LICENSE
251              
252             Copyright 2005 Michael Graham, All Rights Reserved.
253              
254             This program is free software; you can redistribute it and/or modify it
255             under the same terms as Perl itself.
256              
257             =cut
258              
259             1;
260