package HTML::Seamstress;
use strict;
use warnings;
use Carp qw(confess);
use Cwd;
use Data::Dumper;
use File::Slurp;
use File::Spec;
use HTML::Element::Library;
use HTML::Element::Replacer;
use base qw/HTML::TreeBuilder HTML::Element/;
our $VERSION = '5.0h' ;
sub bless_tree {
my ($node, $class) = @_;
if (ref $node) {
# warn "root node($class): ", $node->as_HTML;
bless $node, $class ;
foreach my $c ($node->content_list) {
bless_tree($c, $class);
}
}
}
sub new_from_file { # or from a FH
my ($class, $file) = @_;
$class = ref $class ? ref $class : $class ;
my $new = HTML::TreeBuilder->new_from_file($file);
bless_tree($new, $class);
#warn "CLASS: $class TREE:", $new;
# warn "here is new: $new ", $new->as_HTML;
$new;
}
sub new_file { # or from a FH
my ($class, $file, %args) = @_;
-e $file or die 'File $file does not exist';
my $new = HTML::TreeBuilder->new;
for my $k (keys %args) {
next if $k =~ /guts/ ; # scales for more actions later
$new->$k($args{$k});
}
-e $file or die "$file does not exist";
$new->parse_file($file);
bless_tree($new, $class);
if ($args{guts}) {
$new->guts;
} else {
$new;
}
}
sub html {
my ($class, $file, $extension) = @_;
$extension ||= 'html';
my $pm = File::Spec->rel2abs($file);
$pm =~ s!pm$!$extension!;
$pm;
}
sub eval_require {
my $module = shift;
return unless $module;
eval "require $module";
confess $@ if $@;
}
sub HTML::Element::expand_replace {
my $node = shift;
my $seamstress_module = ($node->content_list)[0] ;
eval "require $seamstress_module";
die $@ if $@;
$node->replace_content($seamstress_module->new) ;
}
1;
__END__