use HTML::Zoom::TransformBuilder;
use Scalar::Util ();
-our $VERSION = '0.009005';
+our $VERSION = '0.009007_1';
$VERSION = eval $VERSION;
Convenience method - slurps the contents of $file and calls from_html with it.
+=head2 from_events
+
+ my $zoom = HTML::Zoom->from_events($evt);
+
+Create a new Zoom object from collected events
+
=head2 to_stream
my $stream = $zoom->to_stream;
my $z2 = $sub->($z1);
+=head2 apply_if
+
+ my $z2 = $z1->apply_if($cond, sub {
+ $_->select('div')->replace_content('I AM A DIV!') })
+ });
+
+->apply but will only run the tranform if $cond is true
+
=head2 to_html
my $html = $zoom->to_html;
Robert Buels
+David Dorward
+
=head1 COPYRIGHT
Copyright (c) 2010-2011 the HTML::Zoom L</AUTHOR> and L</CONTRIBUTORS>
+BEGIN { -e 'Distar' or system("git clone git://git.shadowcat.co.uk/p5sagit/Distar.git") }
+use lib 'Distar/lib';
use Distar;
author 'mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>';
--- /dev/null
+use strictures 1;
+use Test::More skip_all => 'TODO test';
+
+use HTML::Zoom;
+
+my $tmpl = <<END;
+<body>
+ <input class="main"/>
+</body>
+END
+
+my $tmpl2 = <<END;
+<body>
+ <div>cluck</div><input class="main"/>
+</body>
+END
+
+my $z = HTML::Zoom->from_html($tmpl);
+
+my $count = 0;
+$z->select('input')->collect({
+ filter => sub { $count++; $_ },
+ passthrough => 1,
+})->run;
+
+is($count, 1,"collect on void");
+
+is(
+ $z->select('input')
+ ->add_before(\"<div>cluck</div>")
+ ->to_html, $tmpl2,
+"added before void");
+
+done_testing;
--- /dev/null
+use strictures 1;
+use HTML::Zoom;
+use Test::More skip_all => "Totally doesn't work yet";
+
+# Test that contant of elements defined as containing intrinsic CDATA are not
+# selected as elements
+
+# NB: This tests HTML parsing rules. XHTML is different.
+
+my $template = <<HTML;
+<!DOCTYPE html>
+<html lang=en-gb>
+ <meta charset=utf-8>
+ <title>Test</title>
+ <style>
+ /* <textarea>Unmodified</textarea> */
+ </style>
+ </head>
+ <body>
+ <p>Unmodified</p>
+ <textarea>Unmodified</textarea>
+ <script>
+ if (1) {
+ document.write('<p>');
+ } else {
+ document.write('<div>');
+ }
+ document.write('hello, world');
+ if (1) {
+ document.write('</p>');
+ } else {
+ document.write('</div>');
+ }
+ </script>
+HTML
+
+my $expected_p = <<HTML;
+<!DOCTYPE html>
+<html lang=en-gb>
+ <meta charset=utf-8>
+ <title>Test</title>
+ <style>
+ /* <textarea>Unmodified</textarea> */
+ </style>
+ </head>
+ <body>
+ <p>Unmodified</p>
+ <textarea>Unmodified</textarea>
+ <script>
+ if (1) {
+ document.write('<p>');
+ } else {
+ document.write('<div>');
+ }
+ document.write('hello, world');
+ if (1) {
+ document.write('</p>');
+ } else {
+ document.write('</div>');
+ }
+ </script>
+HTML
+
+my $expected_t = <<HTML;
+<!DOCTYPE html>
+<html lang=en-gb>
+ <meta charset=utf-8>
+ <title>Test</title>
+ <style>
+ /* <textarea>Unmodified</textarea> */
+ </style>
+ </head>
+ <body>
+ <p>Unmodified</p>
+ <textarea>Replaced</textarea>
+ <script>
+ if (1) {
+ document.write('<p>');
+ } else {
+ document.write('<div>');
+ }
+ document.write('hello, world');
+ if (1) {
+ document.write('</p>');
+ } else {
+ document.write('</div>');
+ }
+ </script>
+HTML
+
+my $replaced_p = HTML::Zoom->from_html($template)->select('p')->replace_content('Replaced')->to_html;
+is($replaced_p, $expected_p, "Script element parsed as CDATA");
+
+my $replaced_t = HTML::Zoom->from_html($template)->select('textarea')->replace_content('Replaced')->to_html;
+is($replaced_t, $expected_t, "Style element parsed as CDATA");
+
+done_testing;
'<div frew="yo">grg</div>'.$stub,
'E[attr=val] works' );
+{
+ local $TODO = 'mixed-case attribute names are broken';
+ # el[Attr=foo]
+ is( HTML::Zoom->from_html('<div FreW="yo"></div>'.$stub)
+ ->select('div[FreW=yo]')
+ ->replace_content('grg')
+ ->to_html,
+ '<div FreW="yo">grg</div>'.$stub,
+ 'E[attr=val] works with mixed-case attribute names' );
+}
+
# el[attr=foo\.bar]
is( HTML::Zoom->from_html('<div frew="yo.yo"></div>'.$stub)
->select('div[frew=yo\.yo]')