[Jifty-commit] r3338 - jifty/trunk/lib/Jifty/View/Declare
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Sun Jun 3 18:52:24 EDT 2007
Author: clkao
Date: Sun Jun 3 18:52:24 2007
New Revision: 3338
Added:
jifty/trunk/lib/Jifty/View/Declare/Page.pm
Modified:
jifty/trunk/lib/Jifty/View/Declare/Helpers.pm
Log:
refactor the TD wrapper into a class.
Modified: jifty/trunk/lib/Jifty/View/Declare/Helpers.pm
==============================================================================
--- jifty/trunk/lib/Jifty/View/Declare/Helpers.pm (original)
+++ jifty/trunk/lib/Jifty/View/Declare/Helpers.pm Sun Jun 3 18:52:24 2007
@@ -296,71 +296,10 @@
=cut
sub wrapper ($) {
- my $content_code = shift;
- my ($title) = get_current_attr(qw(title));
+ my $page_class = 'Jifty::View::Declare::Page';
+ Jifty::Util->require($page_class);
- my $done_header;
- my $render_header = sub {
- no warnings qw( uninitialized redefine once );
- $title ||= Jifty->config->framework('ApplicationName');
-
- return if $done_header;
- Template::Declare->new_buffer_frame;
- outs_raw(
- '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
- . '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">' );
- render_header($title);
- $done_header = Template::Declare->buffer->data;
- Template::Declare->end_buffer_frame;
- return '';
- };
- my $render_footer = sub {
- outs_raw('</html>');
- Template::Declare->buffer->data( $done_header . Template::Declare->buffer->data );
- };
-
-
- my $show_page = sub {
-
- div {
- div {
- show 'salutation';
- show 'menu';
- };
- div { attr { id is 'content'};
- div {
- {
- no warnings qw( uninitialized redefine once );
-
- local *is::title = sub {
- shift;
- for (@_) {
- if ( ref($_) eq 'CODE' ) {
- Template::Declare->new_buffer_frame;
- $_->();
- $title .= Template::Declare->buffer->data;
- Template::Declare->end_buffer_frame;
- } else {
- $title .= Jifty->web->escape($_);
- }
- }
- &$render_header;
- my $oldt = get('title'); set(title => $title);
- show 'heading_in_wrapper';
- set(title => $oldt);
- };
-
- &_render_pre_content_hook();
- Jifty->web->render_messages;
- &$content_code;
- &$render_header unless ($done_header);
- &_render_jifty_page_detritus();
- }
-
- };
- };
- };
- };
+ my $page = $page_class->new({ content_code => shift });
my ($spa) = Jifty->find_plugin('Jifty::Plugin::SinglePage');
@@ -368,55 +307,25 @@
# If it's a single page app, we want to either render a
# wrapper and then get the region or render just the content
if ( !Jifty->web->current_region ) {
- &$render_header unless ($done_header);
- body {
+ $page->render_header;
+ $page->render_body->(sub {
render_region( $spa->region_name,
path => Jifty->web->request->path );
- };
- &$render_footer;
+ });
+ $page->render_footer;
} else {
- ++$done_header;
- $show_page->();
+ $page->done_header(1);
+ $page->render_page;
}
}
else {
- &$render_header unless ($done_header);
- body { $show_page->(); };
- &$render_footer;
+ $page->render_header;
+ $page->render_body( sub { $page->render_page->() });
+ $page->render_footer;
}
-
}
-
-sub _render_pre_content_hook {
- if ( Jifty->config->framework('AdminMode') ) {
- with( class => "warning admin_mode" ), div {
- outs( _('Alert') . ': ' );
- outs_raw(
- Jifty->web->tangent(
- label => _('Administration mode is enabled.'),
- url => '/__jifty/admin/'
- )
- );
- }
- }
-}
-
-sub _render_jifty_page_detritus {
-
- show('keybindings');
- with( id => "jifty-wait-message", style => "display: none" ),
- div { _('Loading...') };
-
- # This is required for jifty server push. If you maintain your own
- # wrapper, make sure you have this as well.
- if ( Jifty->config->framework('PubSub')->{'Enable'} && Jifty::Subs->list )
- {
- script { outs('new Jifty.Subs({}).start();') };
- }
-}
-
=head2 render_header $title
Renders an HTML "doctype", <head> and the first part of a page body. This bit isn't terribly well thought out and we're not happy with it.
Added: jifty/trunk/lib/Jifty/View/Declare/Page.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/lib/Jifty/View/Declare/Page.pm Sun Jun 3 18:52:24 2007
@@ -0,0 +1,140 @@
+package Jifty::View::Declare::Page;
+use strict;
+use warnings;
+use base qw/Template::Declare/;
+use Template::Declare::Tags;
+
+use base 'Class::Accessor::Fast';
+
+=head1 NAME
+
+Jifty::View::Declare::Page
+
+=head1 DESCRIPTION
+
+This library provides page wrappers
+
+=head1 METHODS
+
+=cut
+
+use Jifty::View::Declare::Helpers;
+
+__PACKAGE__->mk_accessors(qw(content_code done_header _title));
+
+sub new {
+ my $class = shift;
+ my $self = $class->SUPER::new(@_);
+
+ my ($title) = get_current_attr(qw(title));
+ $self->_title($title);
+
+ return $self;
+}
+
+sub render_header {
+ my $self = shift;
+ return if $self->done_header;
+
+ Template::Declare->new_buffer_frame;
+ outs_raw(
+ '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
+ . '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">' );
+ Jifty::View::Declare::Helpers::render_header($self->_title || Jifty->config->framework('ApplicationName'));
+
+ $self->done_header(Template::Declare->buffer->data);
+ Template::Declare->end_buffer_frame;
+ return '';
+};
+
+sub render_body {
+ my ($self, $body_code) = @_;
+
+ body { $body_code->() };
+}
+
+sub render_page {
+ my $self = shift;
+
+ div {
+ div {
+ show 'salutation';
+ show 'menu';
+ };
+ div {
+ attr { id is 'content' };
+ div {
+ {
+ no warnings qw( uninitialized redefine once );
+
+ local *is::title = $self->mk_title_handler();
+ $self->render_pre_content_hook();
+ Jifty->web->render_messages;
+
+ $self->content_code->();
+ $self->render_header();
+
+ $self->render_jifty_page_detritus();
+ }
+
+ };
+ };
+ };
+}
+
+sub mk_title_handler {
+ my $self = shift; shift;
+ for (@_) {
+ if ( ref($_) eq 'CODE' ) {
+ Template::Declare->new_buffer_frame;
+ $_->();
+ $self->_title( $self->_title . Template::Declare->buffer->data );
+ Template::Declare->end_buffer_frame;
+ } else {
+ $self->_title( $self->_title . Jifty->web->escape($_) );
+ }
+ }
+ $self->render_header;
+ my $oldt = get('title');
+ set( title => $self->_title );
+ show 'heading_in_wrapper';
+ set( title => $oldt );
+}
+
+sub render_footer {
+ my $self = shift;
+ outs_raw('</html>');
+ Template::Declare->buffer->data( $self->done_header . Template::Declare->buffer->data );
+}
+
+
+sub render_pre_content_hook {
+ if ( Jifty->config->framework('AdminMode') ) {
+ with( class => "warning admin_mode" ), div {
+ outs( _('Alert') . ': ' );
+ outs_raw(
+ Jifty->web->tangent(
+ label => _('Administration mode is enabled.'),
+ url => '/__jifty/admin/'
+ )
+ );
+ }
+ }
+}
+
+sub render_jifty_page_detritus {
+
+ show('keybindings');
+ with( id => "jifty-wait-message", style => "display: none" ),
+ div { _('Loading...') };
+
+ # This is required for jifty server push. If you maintain your own
+ # wrapper, make sure you have this as well.
+ if ( Jifty->config->framework('PubSub')->{'Enable'} && Jifty::Subs->list )
+ {
+ script { outs('new Jifty.Subs({}).start();') };
+ }
+}
+
+
+1;
More information about the Jifty-commit
mailing list