search spec components factored out of T365
[catagits/Reaction.git] / lib / Reaction / UI / Widget / SiteLayout.pm
index 89f91ed..a02df37 100644 (file)
@@ -7,13 +7,6 @@ use MooseX::Types::Moose 'HashRef';
 use namespace::clean -except => [ qw(meta) ];
 extends Container;
 
-
-
-has 'http_header' => (
-  isa => HashRef, is => 'rw',
-  default => sub { {} }
-);
-
 after fragment widget {
   arg static_base => $_{viewport}->static_base_uri;
   arg title => $_{viewport}->title;
@@ -22,15 +15,16 @@ after fragment widget {
 implements fragment meta_info {
   my $self = shift;
   if ( $_{viewport}->meta_info->{'http_header'} ) {
-    $self->http_header( delete $_{viewport}->meta_info->{'http_header'} );
-    render 'meta_http_header' => over [keys %{$self->http_header}];
+    my $http_header = delete $_{viewport}->meta_info->{'http_header'};
+    arg 'http_header' => $http_header;
+    render 'meta_http_header' => over [keys %$http_header];
   }
   render 'meta_member' => over [keys %{$_{viewport}->meta_info}];
 };
 
 implements fragment meta_http_header {
   arg 'meta_name' => $_;
-  arg 'meta_value' => shift->http_header->{$_};
+  arg 'meta_value' => $_{'http_header'}->{$_};
 };
 
 implements fragment meta_member {
@@ -40,5 +34,164 @@ implements fragment meta_member {
 
 __PACKAGE__->meta->make_immutable;
 
-
 1;
+
+__END__
+
+=head1 NAME
+
+Reaction::UI::Widget::SiteLayout - The layout of the site as a whole
+
+=head1 DESCRIPTION
+
+This is a subclass of L<Reaction::UI::Widget::Container>. It is generally
+used as the widget surrounding the site's content.
+
+=head1 FRAGMENTS
+
+=head2 widget
+
+Additionally provides these arguments after the parent widget fragment
+has been rendered:
+
+=over 4
+
+=item static_base
+
+The C<static_base_uri> of the viewport.
+
+=item title
+
+The C<title> attribute value of the viewport.
+
+=back
+
+=head2 meta_info
+
+If the viewports C<meta_info> contains a value for C<http_header>, It will
+be removed and set as C<http_header> argument. Next, the C<meta_http_header>
+fragment will be rendered for each key of the C<http_header> hash reference.
+
+After the C<http_header> processing, the remaining keys of the viewports
+C<meta_info> attribute hash reference will be rendered via the C<meta_member>
+fragment.
+
+=head2 meta_http_header
+
+Additionally provides these arguments:
+
+=over 4
+
+=item meta_name
+
+The current value of the C<_> argument, which will be set to the key of
+the C<http_header> argument hash reference when rendered by the
+C<meta_info> fragment.
+
+=item meta_value
+
+The value of the C<meta_name> key in the C<http_header> argument hash
+reference.
+
+=back
+
+=head2 meta_member
+
+Additionally provides these arguments:
+
+=over 4
+
+=item meta_name
+
+The current value of the C<_> argument, which will be set to the key of
+the viewport's C<meta_info> attribte value when rendered by the
+C<meta_info> fragment.
+
+=item meta_value
+
+The value of the C<meta_name> key in the viewport's C<meta_info> attribute
+hash reference.
+
+=back
+
+=head1 LAYOUT SETS
+
+=head2 base
+
+  share/skin/base/layout/site_layout.tt
+
+The base layout set will provide the following layouts:
+
+=over 4
+
+=item widget
+
+This layout will render the C<doctype> fragment at the top of the page. Then
+the traditional HTML layout with a C<html> element containing C<head> (rendering
+the C<head> fragment and C<body> (rendering the C<body> fragment) elements.
+
+=item head
+
+Will render the C<title> argument in a C<title> element. After that it will render
+the C<head_meta>, C<head_scripts> and C<head_style> fragments.
+
+=item head_meta
+
+Renders the C<meta_info> fragment.
+
+=item meta_http_header
+
+Renders a C<meta> element where the value of the C<http-equiv> attribute is set to
+the C<meta_name> argument and the C<content> attribute is set to the C<meta_value>
+argument.
+
+=item meta_member
+
+Renders a C<meta> element where the C<name> attribute is set to the C<meta_name>
+argument and the C<content> attribute is set to the C<meta_value> argument.
+
+=item head_scripts
+
+Is empty by default.
+
+=item head_style
+
+Is empty by default.
+
+=item doctype
+
+By default this renders an C<XHTML 1.0 Transitional> doctype.
+
+=item body
+
+This will render the C<inner> viewports in the focus stack.
+
+=back
+
+=head2 default
+
+  share/skin/default/layout/site_layout.tt
+
+The C<site_layout> layout set in the C<default> skin extends the one in the
+C<base> skin documented above.
+
+The following layouts are provided:
+
+=over 4
+
+=item widget
+
+This layout is mostly the same as the one in the C<base> skin, except that
+the C<html> element has C<xmlns> and C<xml:lang> attributes set.
+
+=back
+
+=head1 AUTHORS
+
+See L<Reaction::Class> for authors.
+
+=head1 LICENSE
+
+See L<Reaction::Class> for the license.
+
+=cut