X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FHTML%2FZoom%2FFilterBuilder.pm;h=e2a2693530141d1db18c0b1a8a0e67d37763ed73;hb=5c4c9836ca949e555a592fd2098b7107a6a35724;hp=fdfcb2820ded38e47ddbe7ec836ec35b0dc85188;hpb=ac4c037eb84352eeaa41f793c9ad9568b6342689;p=catagits%2FHTML-Zoom.git diff --git a/lib/HTML/Zoom/FilterBuilder.pm b/lib/HTML/Zoom/FilterBuilder.pm index fdfcb28..e2a2693 100644 --- a/lib/HTML/Zoom/FilterBuilder.pm +++ b/lib/HTML/Zoom/FilterBuilder.pm @@ -56,7 +56,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',@_) } @@ -79,6 +79,23 @@ 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->{$_} } + grep {exists $a->{$_}} keys %$attr + }, + } + }; +} + sub remove_attribute { my ($self, $args) = @_; my $name = (ref($args) eq 'HASH') ? $args->{name} : $args; @@ -489,8 +506,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