NAME HTML::Zoom - selector based streaming template engine SYNOPSIS use HTML::Zoom; my $template = < Hello people


Name: Bob

Age: 23

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:
[% FOREACH field IN fields %] [% END %]
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: