Fixed TT helper :)
[catagits/Catalyst-View-TT.git] / lib / Catalyst / Helper / View / TTSite.pm
CommitLineData
8cd017a8 1package Catalyst::Helper::View::TTSite;
2
3use strict;
4use File::Spec;
5
6sub mk_compclass {
7 my ( $self, $helper, @args ) = @_;
8 my $file = $helper->{file};
9 $helper->render_file( 'compclass', $file );
10 $self->mk_templates( $helper, @args );
11}
12
13sub mk_templates {
14 my ( $self, $helper ) = @_;
15 my $base = $helper->{base};
f4841eb0 16 my $tdir = File::Spec->catfile( $base, 'root', 'templates' );
8cd017a8 17 my $ldir = File::Spec->catfile( $tdir, 'lib' );
18 my $sdir = File::Spec->catfile( $tdir, 'src' );
19
20 $helper->mk_dir($ldir);
21 $helper->mk_dir($sdir);
22
23 my $dir = File::Spec->catfile( $ldir, 'config' );
24 $helper->mk_dir($dir);
25
26 foreach my $file (qw( main col url )) {
27 $helper->render_file( "config_$file",
28 File::Spec->catfile( $dir, $file ) );
29 }
30
31 $dir = File::Spec->catfile( $ldir, 'site' );
32 $helper->mk_dir($dir);
33
34 foreach my $file (qw( wrapper layout html header footer )) {
35 $helper->render_file( "site_$file",
36 File::Spec->catfile( $dir, $file ) );
37 }
38
39 foreach my $file (qw( welcome.tt2 message.tt2 error.tt2 ttsite.css )) {
40 $helper->render_file( $file, File::Spec->catfile( $sdir, $file ) );
41 }
42
43}
44
45=head1 NAME
46
47Catalyst::Helper::View::TTSite - Helper for TT view which builds a skeleton web site
48
49=head1 SYNOPSIS
50
51# use the helper to create the view module and templates
52
53 $ script/myapp_create.pl view TT TTSite
54
55# add something like the following to your main application module
56
57 sub message : Global {
94b3529a 58 my ( $self, $c ) = @_;
59 $c->stash->{template} = 'message.tt2';
60 $c->stash->{message} = $c->req->param('message') || 'Hello World';
8cd017a8 61 }
62
63 sub default : Private {
94b3529a 64 my ( $self, $c ) = @_;
65 $c->stash->{template} = 'welcome.tt2';
8cd017a8 66 }
67
68 sub end : Private {
94b3529a 69 my ( $self, $c ) = @_;
8cd017a8 70 $c->forward('MyApp::V::TT');
71 }
72
73=head1 DESCRIPTION
74
75This helper module creates a TT View module. It goes further than
76Catalyst::Helper::View::TT in that it additionally creates a simple
77set of templates to get you started with your web site presentation.
78
79It creates the templates in a F<templates> directory underneath your
80main project directory. In here two further subdirectories are
81created: F<src> which contains the main page templates, and F<lib>
82containing a library of other templates components (header, footer,
83etc.) that the page templates use.
84
85The view module that the helper creates is automatically configured
86to locate these templates.
87
88=head2 METHODS
89
90=head3 mk_compclass
91
92Generates the component class.
93
94=head3 mk_templates
95
96Generates the templates.
97
98=cut
99
100=head1 SEE ALSO
101
102L<Catalyst>, L<Catalyst::View::TT>, L<Catalyst::Helper>,
103L<Catalyst::Helper::View::TT>
104
105=head1 AUTHOR
106
107Andy Wardley <abw@cpan.org>
108
109=head1 LICENSE
110
111This library is free software . You can redistribute it and/or modify
112it under the same terms as perl itself.
113
114=cut
115
1161;
117
118__DATA__
119
120__compclass__
121package [% class %];
122
123use strict;
124use base 'Catalyst::View::TT';
8cd017a8 125
94b3529a 126my $root = [% app %]->config->{root};
8cd017a8 127
f4841eb0 128__PACKAGE__->config({
129 CATALYST_VAR => 'Catalyst',
130 INCLUDE_PATH => [ "$root/templates/src", "$root/templates/lib" ],
131 PRE_PROCESS => 'config/main',
132 WRAPPER => 'site/wrapper',
94b3529a 133 ERROR => 'error.tt2',
134 TIMER => 0
f4841eb0 135});
8cd017a8 136
137=head1 NAME
138
139[% class %] - TT View Component
140
141=head1 SYNOPSIS
142
143See L<[% app %]>
144
145=head1 DESCRIPTION
146
147TT View Component.
148
149=head1 AUTHOR
150
151[% author %]
152
153=head1 LICENSE
154
155This library is free software . You can redistribute it and/or modify
156it under the same terms as perl itself.
157
158=cut
159
1601;
161
162__config_main__
163[% USE Date;
164 year = Date.format(Date.now, '%Y');
165-%]
166[% TAGS star -%]
167[% # config/main
168 #
169 # This is the main configuration template which is processed before
170 # any other page, by virtue of it being defined as a PRE_PROCESS
171 # template. This is the place to define any extra template variables,
172 # macros, load plugins, and perform any other template setup.
173
174 IF Catalyst.debug;
175 # define a debug() macro directed to Catalyst's log
176 MACRO debug(message) CALL Catalyst.log.debug(message);
177 END;
178
179 # define a data structure to hold sitewide data
180 site = {
181 title => 'Catalyst::View::TTSite Example Page',
182 copyright => '[* year *] Your Name Here',
183 };
184
185 # load up any other configuration items
186 PROCESS config/col
187 + config/url;
188
189 # set defaults for variables, etc.
190 DEFAULT
191 message = 'There is no message';
192
193-%]
194__config_col__
195[% TAGS star -%]
196[% site.rgb = {
197 black = '#000000'
198 white = '#ffffff'
199 grey1 = '#46494c'
200 grey2 = '#c6c9cc'
201 grey3 = '#e3e6ea'
202 red = '#CC4444'
203 green = '#66AA66'
204 blue = '#89b8df'
205 orange = '#f08900'
206 };
207
208 site.col = {
209 page = site.rgb.white
210 text = site.rgb.grey1
211 head = site.rgb.grey3
212 line = site.rgb.orange
213 message = site.rgb.green
214 error = site.rgb.red
215 };
216%]
217__config_url__
218[% TAGS star -%]
219[% base = Catalyst.req.base;
220
221 site.url = {
222 base = base
223 home = "${base}welcome"
224 message = "${base}message"
225 }
226-%]
227__site_wrapper__
228[% TAGS star -%]
229[% IF template.name.match('\.(css|js|txt)');
94b3529a 230 debug("Passing page through as text: $template.name");
8cd017a8 231 content;
232 ELSE;
94b3529a 233 debug("Applying HTML page layout wrappers to $template.name\n");
8cd017a8 234 content WRAPPER site/html + site/layout;
235 END;
236-%]
237__site_html__
238[% TAGS star -%]
239<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
240<html>
241 <head>
242 <title>[% template.title or site.title %]</title>
243 <style type="text/css">
244[% PROCESS ttsite.css %]
245 </style>
246 </head>
247 <body>
248[% content %]
249 </body>
250</html>
251__site_layout__
252[% TAGS star -%]
253<div id="header">[% PROCESS site/header %]</div>
254
255<div id="content">
256[% content %]
257</div>
258
259<div id="footer">[% PROCESS site/footer %]</div>
260__site_header__
261[% TAGS star -%]
262<!-- BEGIN site/header -->
263<h1 class="title">[% template.title or site.title %]</h1>
264<!-- END site/header -->
265__site_footer__
266[% TAGS star -%]
267<!-- BEGIN site/footer -->
268<div id="copyright">&copy; [% site.copyright %]</div>
269<!-- END site/footer -->
270__welcome.tt2__
271[% TAGS star -%]
272[% META title = 'Catalyst/TT View!' %]
273<p>
274 Yay! You're looking at a page generated by the Catalyst::View::TT
275 plugin module.
276</p>
277<p>
278 This is the welcome page. Why not try the equally-exciting
279 <a href="[% site.url.message %]">Message Page</a>?
280</p>
281__message.tt2__
282[% TAGS star -%]
283[% META title = 'Catalyst/TT View!' %]
284<p>
285 Yay! You're looking at a page generated by the Catalyst::View::TT
286 plugin module.
287</p>
288<p>
289 We have a message for you: <span class="message">[% message %]</span>.
290</p>
291<p>
292 Why not try updating the message? Go on, it's really exciting, honest!
293</p>
294<form action="[% site.url.message %]"
295 method="POST" enctype="application/x-www-form-urlencoded">
296 <input type="text" name="message" value="[% message %]" />
297 <input type="submit" name="submit" value=" Update Message "/>
298</form>
299__error.tt2__
300[% TAGS star -%]
301[% META title = 'Catalyst/TT Error' %]
302<p>
303 An error has occurred. We're terribly sorry about that, but it's
304 one of those things that happens from time to time. Let's just
305 hope the developers test everything properly before release...
306</p>
307<p>
308 Here's the error message, on the off-chance that it means something
309 to you: <span class="error">[% error %]</span>
310</p>
311__ttsite.css__
312[% TAGS star %]
313html {
314 height: 100%;
315}
316
317body {
318 background-color: [% site.col.page %];
319 color: [% site.col.text %];
320 margin: 0px;
321 padding: 0px;
322 height: 100%;
323}
324
325#header {
326 background-color: [% site.col.head %];
327 border-bottom: 1px solid [% site.col.line %];
328}
329
330#footer {
331 background-color: [% site.col.head %];
332 text-align: center;
333 border-top: 1px solid [% site.col.line %];
334 position: absolute;
335 bottom: 0;
336 left: 0px;
337 width: 100%;
338 padding: 4px;
339}
340
341#content {
342 padding: 10px;
343}
344
345h1.title {
346 padding: 4px;
347 margin: 0px;
348}
349
350.message {
351 color: [% site.col.message %];
352}
353
354.error {
355 color: [% site.col.error %];
356}