X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FHTML%2FZoom%2FFilterBuilder.pm;h=50398b354dc09f4d213da6762f5474d1f812891a;hb=a42917f6295747a1b4b3d081db5e2f1feaca9d00;hp=a5ba5f4a69f612c799fde828c7ee5b239f3d1ef3;hpb=f6644c714de7a713bb9a409d7fd85b1d26295a4f;p=catagits%2FHTML-Zoom.git diff --git a/lib/HTML/Zoom/FilterBuilder.pm b/lib/HTML/Zoom/FilterBuilder.pm index a5ba5f4..50398b3 100644 --- a/lib/HTML/Zoom/FilterBuilder.pm +++ b/lib/HTML/Zoom/FilterBuilder.pm @@ -42,13 +42,17 @@ sub set_attribute { sub _parse_attribute_args { my $self = shift; - # allow ->add_attribute(name => 'value') - # or ->add_attribute({ name => 'name', value => 'value' }) + # allow ->add_to_attribute(name => 'value') + # or ->add_to_attribute({ name => 'name', value => 'value' }) my ($name, $value) = @_ > 1 ? @_ : @{$_[0]}{qw(name value)}; return ($name, $self->_zconfig->parser->html_escape($value)); } sub add_attribute { + die "renamed to add_to_attribute. killing this entirely for 1.0"; +} + +sub add_to_attribute { my $self = shift; my ($name, $value) = $self->_parse_attribute_args(@_); sub { @@ -280,6 +284,94 @@ sub repeat_content { HTML::Zoom::FilterBuilder - Add Filters to a Stream +=head1 SYNOPSIS + +Create an L instance: + + use HTML::Zoom; + my $root = HTML::Zoom + ->from_html(< + + Default Title + + + Default Content + + + MAIN + +Create a new attribute on the C tag: + + $root = $root + ->select('body') + ->set_attribute(class=>'main'); + +Add a extra value to an existing attribute: + + $root = $root + ->select('body') + ->add_to_attribute(class=>'one-column'); + +Set the content of the C tag: + + $root = $root + ->select('title') + ->replace_content('Hello World'); + +Set content from another L<HTML::Zoom> instance: + + my $body = HTML::Zoom + ->from_html(<<BODY); + <div id="stuff"> + <p>Well Now</p> + <p id="p2">Is the Time</p> + </div> + BODY + + $root = $root + ->select('body') + ->replace_content($body); + +Set an attribute on multiple matches: + + $root = $root + ->select('p') + ->set_attribute(class=>'para'); + +Remove an attribute: + + $root = $root + ->select('body') + ->remove_attribute('bad_attr'); + +will produce: + +=begin testinfo + + my $output = $root->to_html; + my $expect = <<HTML; + +=end testinfo + + <html> + <head> + <title>Hello World + +
+

Well Now

+

Is the Time

+
+ + + +=begin testinfo + + HTML + is($output, $expect, 'Synopsis code works ok'); + +=end testinfo + =head1 DESCRIPTION Given a L stream, provide methods to apply filters which @@ -289,17 +381,45 @@ alter the content of that stream. This class defines the following public API -=head2 set_attribute +=head2 set_attribute ( $attr=>value | {name=>$attr,value=>$value} ) - TBD +Sets an attribute of a given name to a given value for all matching selections. -=head2 add_attribute + $html_zoom + ->select('p') + ->set_attribute(class=>'paragraph') + ->select('div') + ->set_attribute(name=>'class', value=>'divider'); - TBD -=head2 remove_attribute +Overrides existing values, if such exist. When multiple L +calls are made against the same or overlapping selection sets, the final +call wins. - TBD +=head2 add_to_attribute ( $attr=>value | {name=>$attr,value=>$value} ) + +Adds a value to an existing attribute, or creates one if the attribute does not +yet exist. + + $html_zoom + ->select('p') + ->set_attribute(class=>'paragraph') + ->then + ->add_to_attribute(name=>'class', value=>'divider'); + +Attributes with more than one value will have a dividing space. + +=head2 remove_attribute ( $attr | {name=>$attr} ) + +Removes an attribute and all its values. + + $html_zoom + ->select('p') + ->set_attribute(class=>'paragraph') + ->then + ->remove_attribute('class'); + +Removes attributes from the original stream or events already added. =head2 collect @@ -331,7 +451,8 @@ This class defines the following public API =head2 replace_content - TBD +Given a L result, replace the content with a string, array +or another L object. =head2 repeat