File Coverage

blib/lib/HTML/RewriteAttributes/Links.pm
Criterion Covered Total %
statement 31 31 100.0
branch 6 6 100.0
condition 4 5 80.0
subroutine 9 9 100.0
pod n/a
total 50 51 98.0


line stmt bran cond sub pod time code
1             package HTML::RewriteAttributes::Links;
2 4     4   139805 use strict;
  4         7  
  4         192  
3 4     4   23 use warnings;
  4         9  
  4         275  
4 4     4   27 use base 'HTML::RewriteAttributes';
  4         10  
  4         2074  
5 4     4   2257 use HTML::Tagset ();
  4         6183  
  4         195  
6 4     4   1861 use URI;
  4         32984  
  4         1519  
7              
8             our $VERSION = '0.03';
9              
10             my %rewritable_attrs;
11              
12             for my $tag (keys %HTML::Tagset::linkElements) {
13             for my $attr (@{ $HTML::Tagset::linkElements{$tag} }) {
14             $rewritable_attrs{$tag}{$attr} = 1;
15             }
16             }
17              
18             sub _should_rewrite {
19 36     36   110 my ($self, $tag, $attr) = @_;
20              
21 36   100     200 return ( $rewritable_attrs{$tag} || {} )->{$attr};
22             }
23              
24             sub _rewrite {
25 7     7   33 my ($self, $html, $arg) = @_;
26              
27 7 100       33 if (!ref($arg)) {
28 5         24 $self->{rewrite_link_base} = $arg;
29              
30             $arg = sub {
31 18     18   54 my ($tag, $attr, $value) = @_;
32 18         125 my $uri = URI->new($value);
33              
34             $uri = $uri->abs($self->{rewrite_link_base})
35 18 100       27225 unless defined $uri->scheme;
36              
37 18         21615 return $uri->as_string;
38 5         50 };
39             }
40              
41 7         44 $self->SUPER::_rewrite($html, $arg);
42             }
43              
44             # if we see a base tag, steal its href for future link resolution
45             sub _start_tag {
46 39     39   79 my $self = shift;
47 39         99 my ($tag, $attr, $attrseq, $text) = @_;
48              
49 39 100 66     128 if ($tag eq 'base' && defined $attr->{href}) {
50 2         6 $self->{rewrite_link_base} = $attr->{href};
51             }
52              
53 39         116 $self->SUPER::_start_tag(@_);
54             }
55              
56             1;
57              
58             __END__