[Jifty-commit] r2388 - in Template-Declare: lib/Template
lib/Template/Declare t
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Sat Dec 16 17:22:06 EST 2006
Author: jesse
Date: Sat Dec 16 17:22:05 2006
New Revision: 2388
Added:
Template-Declare/t/subtemplates.t
Modified:
Template-Declare/ (props changed)
Template-Declare/lib/Template/Declare.pm
Template-Declare/lib/Template/Declare/Tags.pm
Log:
r46211 at 66: jesse | 2006-12-16 11:41:31 -0800
* Unbroke support for subtemplates
Modified: Template-Declare/lib/Template/Declare.pm
==============================================================================
--- Template-Declare/lib/Template/Declare.pm (original)
+++ Template-Declare/lib/Template/Declare.pm Sat Dec 16 17:22:05 2006
@@ -34,50 +34,58 @@
my $show_private = 0 || shift;
$template_name =~ s{/}{::}g;
+ $pkg = ref($pkg)||$pkg;
+
+
if ($template_name =~ /(.*)::(.*)/) {
# Qualified name - Need to search for ISA chain
my $class ="$pkg\::$1";
-
- my $rv = ($class->_resolve_template($2, $show_private));
- return ($rv) if $rv;
-
+ my $rv = (Template::Declare::_resolve_template($class,$2, $show_private));
+ if( $rv) {
+ return ($class, $rv)
+ }
no strict 'refs';
foreach my $parent (@{"$pkg\::ISA"}) {
$parent->can('has_template') or next;
- ($rv) = $parent->has_template($template_name, $show_private);
- return ( $rv) if $rv;
+ my $template_pkg;
+ ($template_pkg, $rv) = $parent->has_template($template_name, $show_private);
+ return ( $template_pkg,$rv) if $rv;
}
}
else {
# Unqualified name
- return ($pkg->_resolve_template($template_name, $show_private));
+ return ($pkg,Template::Declare::_resolve_template($pkg,$template_name, $show_private));
}
return undef;
}
-sub _resolve_template {
- my $self = shift;
+sub _resolve_template {
+ my $self = shift;
my $template_name = shift;
- my $show_private = shift;
+ my $show_private = shift;
-
- my $method = $self->_template_name_to_sub( $template_name) ;
- my $private_method;
-
- if ($self->can($method)) {
+ my $method = _template_name_to_sub($template_name);
+ my $private_method;
+
+ if ( $self->can($method) ) {
return $method;
}
-
- elsif ($show_private && ($private_method = $self->_template_name_to_private_sub($template_name)) && $self->can($private_method))
- { return $private_method;
- }
-
+
+ elsif (
+ $show_private
+ && ( $private_method
+ = _template_name_to_private_sub($template_name) )
+ && $self->can($private_method)
+ )
+ {
+ return $private_method;
+ }
+
}
sub _template_name_to_sub {
- my $self = shift;
my $template_name =shift;
$template_name =~ s/-/_/g;
return "_jifty_template_".$template_name;
@@ -85,7 +93,6 @@
}
sub _template_name_to_private_sub {
- my $self = shift;
my $template_name =shift;
$template_name =~ s/-/_/g;
return "_jifty_private_template_".$template_name;
Modified: Template-Declare/lib/Template/Declare/Tags.pm
==============================================================================
--- Template-Declare/lib/Template/Declare/Tags.pm (original)
+++ Template-Declare/lib/Template/Declare/Tags.pm Sat Dec 16 17:22:05 2006
@@ -49,9 +49,11 @@
my $base_name;
my $template_class;
if ($template_name =~ m{(.*/)?(.*)}) {
- $template_class = caller() . $1;
- $template_class =~ s{/}{::}g;
+ my $subpkg = $1;
$base_name = $2;
+ $template_class = join('/',(caller(0))[0], $subpkg);
+ $template_class =~ s{/+}{::}g;
+ $template_class =~ s{::$}{}g;
}
@@ -63,7 +65,7 @@
return ($template_class, $base_name, $codesub);
}
else {
- *{ $template_class .'::' . $template_class->_template_name_to_sub($base_name); } = $codesub;
+ *{ $template_class .'::' . Template::Declare::_template_name_to_sub($base_name); } = $codesub;
}
}
@@ -74,7 +76,7 @@
my $code = shift;
{
no strict 'refs';
- *{ $class .'::' . $class->_template_name_to_private_sub($subname); } = $code;
+ *{ $class .'::' . Template::Declare::_template_name_to_private_sub($subname); } = $code;
}
}
@@ -259,7 +261,8 @@
my $buf = '';
-
+ # $pkg is the package the template is actually in.
+ my $pkg = $self;
my $INSIDE_TEMPLATE = 0;
my $caller = caller();
if ($caller->isa('Template::Declare')) { $INSIDE_TEMPLATE = 1; }
@@ -272,7 +275,7 @@
}
else {
# if we're inside a template, we should show private templates
- ( $callable) = $self->has_template($template, $INSIDE_TEMPLATE);
+ ($pkg, $callable) = $self->has_template($template, $INSIDE_TEMPLATE);
}
# may want to just use the return value of has_template eventually
@@ -282,11 +285,11 @@
and
# XXX TODO: die if there's no such template?
- $self->can($callable)) {
+ $pkg->can($callable)) {
no strict 'refs';
- $self->$callable( @_ );
- }
+ $pkg->$callable( @_ );
+ }
$buf = $BUFFER;
}
Added: Template-Declare/t/subtemplates.t
==============================================================================
--- (empty file)
+++ Template-Declare/t/subtemplates.t Sat Dec 16 17:22:05 2006
@@ -0,0 +1,64 @@
+use warnings;
+use strict;
+
+
+package Wifty::UI;
+use base qw/Template::Declare/;
+use Template::Declare::Tags;
+use Test::More;
+
+template simple => sub {
+
+html {
+ head { };
+ body {
+ show 'my/content'
+ }
+}
+
+};
+
+template 'my/content' => sub {
+ div { attr { id => 'body' }
+ outs('This is my content')
+ }
+
+};
+
+package Template::Declare::Tags;
+
+use Test::More qw/no_plan/;
+use HTML::Lint;
+
+our $self;
+local $self = {};
+bless $self, 'Wifty::UI';
+{
+local $Template::Declare::Tags::BUFFER;
+my $simple =(show('my/content'));
+ok($simple =~ 'This is my content');
+#diag ($simple);
+ok_lint($simple);
+}
+{
+local $Template::Declare::Tags::BUFFER;
+my $simple =(show('simple'));
+ok($simple =~ 'This is my content');
+#diag ($simple);
+ok_lint($simple);
+}
+sub ok_lint {
+ my $html = shift;
+
+ my $lint = HTML::Lint->new;
+
+ $lint->parse($html);
+ is( $lint->errors, 0, "Lint checked clean" );
+ foreach my $error ( $lint->errors ) {
+ diag( $error->as_string );
+ }
+
+}
+
+
+1;
More information about the Jifty-commit
mailing list