X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FHTML-Zoom.git;a=blobdiff_plain;f=lib%2FHTML%2FZoom%2FFilterBuilder.pm;fp=lib%2FHTML%2FZoom%2FFilterBuilder.pm;h=c81e642c8d97b29e1db3413c1e73c3cd831378b8;hp=3e487674f5f2719a229c802d1d8e7ced312ccee1;hb=95dcb071e6789c2b985c36467674db31f9b35c39;hpb=2d0662c077bfd275682acfad25d407e0724ec34f diff --git a/lib/HTML/Zoom/FilterBuilder.pm b/lib/HTML/Zoom/FilterBuilder.pm index 3e48767..c81e642 100644 --- a/lib/HTML/Zoom/FilterBuilder.pm +++ b/lib/HTML/Zoom/FilterBuilder.pm @@ -58,7 +58,7 @@ sub add_attribute { sub add_class { shift->add_to_attribute('class',@_) } -sub remove_class { shift->remove_attribute('class',@_) } +sub remove_class { shift->remove_from_attribute('class',@_) } sub set_class { shift->set_attribute('class',@_) } @@ -82,6 +82,22 @@ sub add_to_attribute { }; } +sub remove_from_attribute { + my $self = shift; + my $attr = $self->_parse_attribute_args(@_); + sub { + my $a = (my $evt = $_[0])->{attrs}; + +{ %$evt, raw => undef, raw_attrs => undef, + attrs => { + %$a, + #TODO needs to support multiple removes + map { my $tar = $_; $_ => join ' ', + map {$attr->{$tar} ne $_} split ' ', $a->{$_} } keys %$attr + }, + } + }; +} + sub remove_attribute { my ($self, $args) = @_; my $name = (ref($args) eq 'HASH') ? $args->{name} : $args; @@ -492,8 +508,26 @@ Removes an attribute and all its values. ->then ->remove_attribute('class'); +=head2 remove_from_attribute + +Removes a value from existing attribute + + $html_zoom + ->select('p') + ->set_attribute(class=>'paragraph lead') + ->then + ->remove_from_attribute('class' => 'lead'); + Removes attributes from the original stream or events already added. +=head2 add_class + +Add to a class attribute + +=head2 remove_class + +Remove from a class attribute + =head2 transform_attribute Transforms (or creates or deletes) an attribute by running the passed