Catalyst-View-ByCode
view release on metacpan or search on metacpan
lib/Catalyst/View/ByCode/Renderer.pm view on Meta::CPAN
$operation = $1 eq '-' ? -1 : +1;
}
if ($operation < 0) {
delete $class{$name};
} elsif ($operation > 0) {
$class{$name} = 1;
} else {
%class = ($name => 1);
$operation = +1;
}
}
$top[-1]->[1]->{class} = join(' ', sort keys(%class));
return;
}
#
# set an ID
#
sub id { $top[-1]->[1]->{id} = $_[0]; return; }
#
# define a javascript-handler
#
sub on { $top[-1]->[1]->{"on$_[0]"} = join('', @_[1..$#_]); return; }
#
# simple getters
#
sub stash { $stash }
sub c { $c }
#
# generate a proper doctype line
#
sub doctype {
my $kind = join(' ', @_);
# see http://hsivonen.iki.fi/doctype/ for details on these...
my @doctype_finder = (
[qr(html(?:\W*5)) => 'html5'],
[qr(html) => 'html5'],
[qr(html(?:\W*4[0-9.]*)?\W*s) => 'html4_strict'],
[qr(html(?:\W*4[0-9.]*)?\W*[tl]) => 'html4_loose'],
[qr(xhtml\W*1\W*1) => 'xhtml1_1'],
[qr(xhtml(?:\W*1[0-9.]*)?\W*s) => 'xhtml1_strict'],
[qr(xhtml(?:\W*1[0-9.]*)?\W*[tl]) => 'xhtml1_trans'],
[qr(xhtml) => 'xhtml1'],
);
my %doctype_for = (
default => q{<!DOCTYPE html>},
html5 => q{<!DOCTYPE html>},
html4 => q{<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">},
html4_strict => q{<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" } .
q{"http://www.w3.org/TR/html4/strict.dtd">},
html4_loose => q{<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" } .
q{"http://www.w3.org/TR/html4/loose.dtd">},
xhtml1_1 => q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" } .
q{"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">},
xhtml1 => q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" } .
q{"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">},
xhtml1_strict=> q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" } .
q{"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">},
xhtml1_trans => q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" } .
q{"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">},
);
my $doctype = 'default';
foreach my $d (@doctype_finder) {
if ($kind =~ m{\A $d->[0]}xmsi) {
$doctype = $d->[1];
last;
}
}
push @{$top[-1]}, $doctype_for{$doctype};
}
sub boilerplate(;&) {
my $code = shift;
push @{$top[-1]}, <<HTML;
<!--[if lt IE 7 ]> <html class="no-js ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]> <html class="no-js ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]> <html class="no-js ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
HTML
if ($code) {
$code->();
}
push @{$top[-1]}, '</html>';
}
######################################## Locale stuff
#
# get a localized version of something
#
{
no warnings 'redefine';
sub _ { return $c->localize(@_) }
}
sub nbsp { "\x{00a0}" } # bad hack in the moment...
#
# define a function for every tag into a given namespace
#
sub _construct_functions {
my $namespace = shift;
no warnings 'redefine'; # in case of a re-compile.
my %declare;
# tags with content are treated the same as tags without content
foreach my $tag_name (@IS_KNOWN) {
my $sub_name = $change_tags{$tag_name}
|| $tag_name;
# install a tag-named sub in caller's namespace
no strict 'refs';
*{"$namespace\::$sub_name"} = sub (;&@) {
( run in 0.702 second using v1.01-cache-2.11-cpan-70e19b8f4f1 )