From: t0m Date: Fri, 12 Dec 2008 18:54:35 +0000 (+0000) Subject: Checking in changes prior to tagging of version 1.001. Changelog diff is: X-Git-Tag: 1.001^0 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=06cf3efb1da299bac366b12870949662170b977d;p=catagits%2FCatalyst-View-ContentNegotiation-XHTML.git Checking in changes prior to tagging of version 1.001. Changelog diff is: === Changes ================================================================== --- Changes (revision 9983) +++ Changes (local) @@ -1,6 +1,7 @@ +1.001 2008-12-12 - Add tests for other Accept header cases where the current code will get it wrong (David Dorward) -1.000 + - Fix all of these tests (t0m) +1.000 2008-12-12 - First working version of the module extracted from the quick hack I have in every Catalyst application I've ever written. - --- diff --git a/Changes b/Changes index ccb2c99..1c33147 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,7 @@ +1.001 2008-12-12 - Add tests for other Accept header cases where the current code will get it wrong (David Dorward) -1.000 + - Fix all of these tests (t0m) +1.000 2008-12-12 - First working version of the module extracted from the quick hack I have in every Catalyst application I've ever written. - diff --git a/Makefile.PL b/Makefile.PL index 05a03c4..48407cd 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -5,6 +5,7 @@ all_from 'lib/Catalyst/View/TT/XHTML.pm'; requires 'Catalyst::Runtime'; requires 'Catalyst::View::TT'; +requires 'HTTP::Negotiate'; build_requires 'Catalyst::Action::RenderView'; build_requires 'Test::WWW::Mechanize::Catalyst'; diff --git a/README b/README index 6616949..0bca51d 100644 --- a/README +++ b/README @@ -1,91 +1,51 @@ - - - -Catalyst::View::TT::XHTML - A sub-class of the standard TT view which -serves application/xhtml+xml content if the browser accepts it. - - +NAME + Catalyst::View::TT::XHTML - A sub-class of the standard TT view which + serves application/xhtml+xml content if the browser accepts it. + +SYNOPSIS + package MyApp::View::XHTML; + use strict; + use warnings; + use base qw/Catalyst::View::TT::XHTML MyApp::View::TT/; + + 1; + +DESCRIPTION + This is a very simple sub-class of Catalyst::View::TT, which sets the + response "Content-Type" to be "application/xhtml+xml" if the user's + browser sends an "Accept" header indicating that it is willing to + process that MIME type. - + Changing the "Content-Type" causes browsers to interpret the page as + strict XHTML, meaning that the markup must be well formed. -

- + This is useful when you're developing your application, as you know that + all pages you view are rendered strictly, so any markup errors will show + up at once. - - + No helper to generate the view file needed (just copy the code in the + SYNOPSIS). -
-

-

-

NAME

-

Catalyst::View::TT::XHTML - A sub-class of the standard TT view which -serves application/xhtml+xml content if the browser accepts it.

-

-

-
-

SYNOPSIS

-
-    package MyApp::View::XHTML;
-    use strict;
-    use warnings;
-    use base qw/Catalyst::View::TT::XHTML MyApp::View::TT/;
-    
-    1;
-    
-=head1 DESCRIPTION
-

This is a very simple sub-class of the Catalyst::View::TT manpage, which sets -the response Content-Type to be application/xhtml+xml if the -user's browser sends an Accept header indicating that it is willing -to process that MIME type.

-

Changing the Content-Type causes browsers to interpret the page as -strict XHTML, meaning that the markup must be well formed.

-

This is useful when you're developing your application, as you know that -all pages you view are rendered strictly, so any markup errors will show -up at once.

-

-

-
-

METHODS

-

-

-

process

-

Overrides the standard process method, delegating to the Catalyst::View::TT manpage -to render the template, and then changing the response Content-Type if -appropriate (from the requests Accept header).

-

-

-
-

BUGS

-

There should be a more elegant way to inherit the config of your normal -TT view.

-

Configuration (as loaded by the Catalyst::Plugin::ConfigLoader manpage) for the TT -view is not used.

-

No helper to generate the view file needed (just copy the code in the -SYNOPSIS).

-

-

-
-

AUTHOR

-

Tomas Doran <bobtfish@bobtfish.net>

-

-

-
-

COPYRIGHT

-

This module itself is copyright (c) 2008 Tomas Doran and is licensed under the same terms as Perl itself.

+AUTHOR + Tomas Doran "" + +CONTRIBUTORS + David Dorward - test patches - +COPYRIGHT + This module itself is copyright (c) 2008 Tomas Doran and is licensed + under the same terms as Perl itself. - diff --git a/lib/Catalyst/View/TT/XHTML.pm b/lib/Catalyst/View/TT/XHTML.pm index 17bf1bf..e256a0f 100644 --- a/lib/Catalyst/View/TT/XHTML.pm +++ b/lib/Catalyst/View/TT/XHTML.pm @@ -1,19 +1,28 @@ package Catalyst::View::TT::XHTML; use strict; use warnings; +use HTTP::Negotiate qw(choose); use base qw/Catalyst::View::TT/; -our $VERSION = '1.000'; +our $VERSION = '1.001'; + +our $variants = [ + [qw| xhtml 1.000 application/xhtml+xml |], + [qw| html 0.001 text/html |], +]; sub process { my $self = shift; my ($c) = @_; - $self->next::method(@_); - my $accept = $c->request->header('Accept'); - if ( $accept && $accept =~ m|application/xhtml\+xml|) { - $c->response->headers->{'content-type'} =~ s|text/html|application/xhtml+xml|; + my $return = $self->next::method(@_); + + if ($c->request->header('Accept') && $c->response->headers->{'content-type'} =~ m|text/html|) { + my $var = choose($variants, $c->request->headers); + if ($var eq 'xhtml') { + $c->response->headers->{'content-type'} =~ s|text/html|application/xhtml+xml|; + } } - return 1; + return $return; } 1; diff --git a/t/live-test.t b/t/live-test.t index 58a8739..531180d 100644 --- a/t/live-test.t +++ b/t/live-test.t @@ -59,7 +59,7 @@ is $mech->response->headers->{'content-type'}, 'text/html; charset=utf-8', 'Accept header of application/xhtml+xml with q value of 0 and text/html = text/html'; # 20-22 -$mech->add_header( Accept => 'text/html;q=0'); +$mech->add_header( Accept => 'text/html;q=0, application/xhtml+xml'); $mech->get_ok('http://localhost/', 'get main page'); $mech->content_like(qr/it works/i, 'see if it has our text'); is $mech->response->headers->{'content-type'}, 'application/xhtml+xml; charset=utf-8', diff --git a/t/podspelling.t b/t/podspelling.t index 59e1fca..e58e38b 100644 --- a/t/podspelling.t +++ b/t/podspelling.t @@ -17,3 +17,4 @@ __DATA__ XHTML TT Doran +Dorward