NAME
HTML::Zoom - selector based streaming template engine
SYNOPSIS
use HTML::Zoom;
my $template = <
Hello people
Placeholder
HTML
my $output = HTML::Zoom
->from_html($template)
->select('title, #greeting')->replace_content('Hello world & dog!')
->select('#list')->repeat_content(
[
sub {
$_->select('.name')->replace_content('Matt')
->select('.age')->replace_content('26')
},
sub {
$_->select('.name')->replace_content('Mark')
->select('.age')->replace_content('0x29')
},
sub {
$_->select('.name')->replace_content('Epitaph')
->select('.age')->replace_content('')
},
],
{ repeat_between => '.between' }
)
->to_html;
will produce:
Hello world & dog!
Hello world & dog!
Name: Matt
Age: 26
Name: Mark
Age: 0x29
Name: Epitaph
Age: <redacted>
DANGER WILL ROBINSON
This is a 0.9 release. That means that I'm fairly happy the API isn't
going to change in surprising and upsetting ways before 1.0 and a real
compatibility freeze. But it also means that if it turns out there's a
mistake the size of a politician's ego in the API design that I haven't
spotted yet there may be a bit of breakage between here and 1.0.
Hopefully not though. Appendages crossed and all that.
Worse still, the rest of the distribution isn't documented yet. I'm
sorry. I suck. But lots of people have been asking me to ship this, docs
or no, so having got this class itself at least somewhat documented I
figured now was a good time to cut a first real release.
DESCRIPTION
HTML::Zoom is a lazy, stream oriented, streaming capable, mostly
functional, CSS selector based semantic templating engine for HTML and
HTML-like document formats.
Which is, on the whole, a bit of a mouthful. So let me step back a
moment and explain why you care enough to understand what I mean:
JQUERY ENVY
HTML::Zoom is the cure for JQuery envy. When your javascript guy pushes
a piece of data into a document by doing:
$('.username').replaceAll(username);
In HTML::Zoom one can write
$zoom->select('.username')->replace_content($username);
which is, I hope, almost as clear, hampered only by the fact that Zoom
can't assume a global document and therefore has nothing quite so simple
as the $() function to get the initial selection.
HTML::Zoom::SelectorParser implements a subset of the JQuery selector
specification, and will continue to track that rather than the W3C
standards for the forseeable future on grounds of pragmatism. Also on
grounds of their spec is written in EN_US rather than EN_W3C, and I read
the former much better.
I am happy to admit that it's very, very much a subset at the moment -
see the HTML::Zoom::SelectorParser POD for what's currently there, and
expect more and more to be supported over time as we need it and patch
it in.
CLEAN TEMPLATES
HTML::Zoom is the cure for messy templates. How many times have you
looked at templates like this:
and despaired of the fact that neither the HTML structure nor the logic
are remotely easy to read? Fortunately, with HTML::Zoom we can separate
the two cleanly: