bump VERSION to 0.45
[catagits/Catalyst-View-TT.git] / lib / Catalyst / Helper / View / TTSite.pm
index d63ad41..ec00594 100644 (file)
@@ -3,6 +3,9 @@ package Catalyst::Helper::View::TTSite;
 use strict;
 use File::Spec;
 
+our $VERSION = '0.45';
+$VERSION = eval $VERSION;
+
 sub mk_compclass {
     my ( $self, $helper, @args ) = @_;
     my $file = $helper->{file};
@@ -12,10 +15,9 @@ sub mk_compclass {
 
 sub mk_templates {
     my ( $self, $helper ) = @_;
-    my $base = $helper->{base};
-    my $tdir = File::Spec->catfile( $base, 'templates' );
-    my $ldir = File::Spec->catfile( $tdir, 'lib' );
-    my $sdir = File::Spec->catfile( $tdir, 'src' );
+    my $base = $helper->{base},;
+    my $ldir = File::Spec->catfile( $base, 'root', 'lib' );
+    my $sdir = File::Spec->catfile( $base, 'root', 'src' );
 
     $helper->mk_dir($ldir);
     $helper->mk_dir($sdir);
@@ -50,24 +52,24 @@ Catalyst::Helper::View::TTSite - Helper for TT view which builds a skeleton web
 
 # use the helper to create the view module and templates
 
-    $ script/myapp_create.pl view TT TTSite
+    $ script/myapp_create.pl view HTML TTSite
 
 # add something like the following to your main application module
 
     sub message : Global {
-        my ($self, $c) = @_;
-        $c->stash->{ template } = 'message.tt2';
-        $c->stash->{ message  } = $c->req->param('message') || 'Hello World';
+        my ( $self, $c ) = @_;
+        $c->stash->{template} = 'message.tt2';
+        $c->stash->{message}  ||= $c->req->param('message') || 'No message';
     }
-    
+
     sub default : Private {
-        my ($self, $c) = @_;
-        $c->stash->{ template } = 'welcome.tt2';
+        my ( $self, $c ) = @_;
+        $c->stash->{template} = 'welcome.tt2';
     }
-    
-    sub end : Private {
-        my ($self, $c) = @_;
-        $c->forward('MyApp::V::TT');
+
+    sub end : Private { # Or use Catalyst::Action::RenderView
+        my ( $self, $c ) = @_;
+        $c->forward( $c->view('HTML') );
     }
 
 =head1 DESCRIPTION
@@ -76,22 +78,58 @@ This helper module creates a TT View module.  It goes further than
 Catalyst::Helper::View::TT in that it additionally creates a simple
 set of templates to get you started with your web site presentation.
 
-It creates the templates in a F<templates> directory underneath your
+It creates the templates in F<root/> directory underneath your
 main project directory.  In here two further subdirectories are
-created: F<src> which contains the main page templates, and F<lib>
-containing a library of other templates components (header, footer,
+created: F<root/src> which contains the main page templates, and F<root/lib>
+containing a library of other template components (header, footer,
 etc.) that the page templates use.
 
 The view module that the helper creates is automatically configured
 to locate these templates.
 
-=head2 METHODS
+=head2 Default Rendering
+
+To render a template the following process is applied:
+
+The configuration template F<root/lib/config/main> is rendered. This is
+controlled by the C<PRE_PROCESS> configuration variable set in the controller
+generated by Catalyst::Helper::View::TTsite. Additionally, templates referenced by
+the C<PROCESS> directive will then be rendered. By default the following additional
+templates are set: F<root/lib/config/col>,
+which defines color names and RGB their RGB values and F</root/lib/config/url>,
+which defines site wide variables available to templates.
+
+Next, the template defined by the C<WRAPPER> config variable is called. The default
+wrapper template is located in F<root/lib/site/wrapper>. The wrapper template
+passes files with C<.css/.js/.txt> extensions through as text OR processes
+the templates defined after the C<WRAPPER> directive: C<site/html> and C<site/layout>.
+
+Based on the default value of the C<WRAPPER> directive in F<root/lib/site/wrapper>,
+the following templates are processed in order:
+
+=over 4
+
+=item * F<root/src/your_template.tt2>
+
+=item * F<root/lib/site/footer>
+
+=item * F<root/lib/site/header>
 
-=head3 mk_compclass
+=item * F<root/lib/site/layout>
+
+=item * F<root/lib/site/html>
+
+=back
+
+Finally, the rendered content is returned to the browser.
+
+=head1 METHODS
+
+=head2 mk_compclass
 
 Generates the component class.
 
-=head3 mk_templates
+=head2 mk_templates
 
 Generates the templates.
 
@@ -108,7 +146,7 @@ Andy Wardley <abw@cpan.org>
 
 =head1 LICENSE
 
-This library is free software . You can redistribute it and/or modify
+This library is free software. You can redistribute it and/or modify
 it under the same terms as perl itself.
 
 =cut
@@ -122,26 +160,22 @@ package [% class %];
 
 use strict;
 use base 'Catalyst::View::TT';
-use NEXT;
 
-sub new {
-    my $self = shift;
-    my $c    = shift;
-    my $root     = $c->config->{ root };
-    my $template = $c->config->{ template } || { };
-
-    $template->{ CATALYST_VAR } ||= 'Catalyst',
-    $template->{ INCLUDE_PATH } ||= [ "$root/templates/src", "$root/templates/lib" ];
-    $template->{ PRE_PROCESS  } ||= 'config/main';
-    $template->{ WRAPPER      } ||= 'site/wrapper';
-    $template->{ ERROR        } ||= 'error.tt2';
-
-    return $self->NEXT::new($c, @_);
-}
+__PACKAGE__->config({
+    INCLUDE_PATH => [
+        [% app %]->path_to( 'root', 'src' ),
+        [% app %]->path_to( 'root', 'lib' )
+    ],
+    PRE_PROCESS  => 'config/main',
+    WRAPPER      => 'site/wrapper',
+    ERROR        => 'error.tt2',
+    TIMER        => 0,
+    render_die   => 1,
+});
 
 =head1 NAME
 
-[% class %] - TT View Component
+[% class %] - Catalyst TTSite View
 
 =head1 SYNOPSIS
 
@@ -149,7 +183,7 @@ See L<[% app %]>
 
 =head1 DESCRIPTION
 
-TT View Component.
+Catalyst TTSite View.
 
 =head1 AUTHOR
 
@@ -157,8 +191,8 @@ TT View Component.
 
 =head1 LICENSE
 
-This library is free software . You can redistribute it and/or modify
-it under the same terms as perl itself.
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
 
 =cut
 
@@ -172,7 +206,7 @@ __config_main__
 [% # config/main
    #
    # This is the main configuration template which is processed before
-   # any other page, by virtue of it being defined as a PRE_PROCESS 
+   # any other page, by virtue of it being defined as a PRE_PROCESS
    # template.  This is the place to define any extra template variables,
    # macros, load plugins, and perform any other template setup.
 
@@ -187,12 +221,12 @@ __config_main__
      copyright => '[* year *] Your Name Here',
    };
 
-   # load up any other configuration items 
+   # load up any other configuration items
    PROCESS config/col
          + config/url;
 
    # set defaults for variables, etc.
-   DEFAULT 
+   DEFAULT
      message = 'There is no message';
 
 -%]
@@ -218,7 +252,7 @@ __config_col__
       message = site.rgb.green
       error   = site.rgb.red
    };
-%]
+-%]
 __config_url__
 [% TAGS star -%]
 [% base = Catalyst.req.base;
@@ -232,10 +266,10 @@ __config_url__
 __site_wrapper__
 [% TAGS star -%]
 [% IF template.name.match('\.(css|js|txt)');
-     debug("passing page through as text: $template.name");
+     debug("Passing page through as text: $template.name");
      content;
    ELSE;
-     debug("applying HTML page layout wrappers to $template.name\n");
+     debug("Applying HTML page layout wrappers to $template.name\n");
      content WRAPPER site/html + site/layout;
    END;
 -%]
@@ -280,7 +314,7 @@ __welcome.tt2__
   plugin module.
 </p>
 <p>
-  This is the welcome page.  Why not try the equally-exciting 
+  This is the welcome page.  Why not try the equally-exciting
   <a href="[% site.url.message %]">Message Page</a>?
 </p>
 __message.tt2__
@@ -305,8 +339,8 @@ __error.tt2__
 [% TAGS star -%]
 [% META title = 'Catalyst/TT Error' %]
 <p>
-  An error has occurred.  We're terribly sorry about that, but it's 
-  one of those things that happens from time to time.  Let's just 
+  An error has occurred.  We're terribly sorry about that, but it's
+  one of those things that happens from time to time.  Let's just
   hope the developers test everything properly before release...
 </p>
 <p>
@@ -319,7 +353,7 @@ html {
     height: 100%;
 }
 
-body { 
+body {
     background-color: [% site.col.page %];
     color: [% site.col.text %];
     margin: 0px;