File Coverage

blib/lib/XUL/App/XULFile.pm
Criterion Covered Total %
statement 33 133 24.8
branch 0 44 0.0
condition 0 15 0.0
subroutine 11 19 57.8
pod 1 8 12.5
total 45 219 20.5


line stmt bran cond sub pod time code
1             package XUL::App::XULFile;
2              
3 1     1   2156 use lib 'lib';
  1         629  
  1         5  
4 1     1   104 use strict;
  1         3  
  1         26  
5 1     1   5 use warnings;
  1         2  
  1         29  
6 1     1   4 use File::Slurp;
  1         1  
  1         61  
7 1     1   1045 use Encode;
  1         12306  
  1         127  
8             #use Smart::Comments;
9 1     1   7 use XUL::App;
  1         2  
  1         35  
10 1     1   716 use File::ShareDir ();
  1         6076  
  1         30  
11 1     1   1147 use File::Copy ();
  1         2153  
  1         21  
12 1     1   6 use File::Basename 'dirname';
  1         1  
  1         85  
13             #use File::Path ();
14 1     1   852 use File::Copy::Recursive ();
  1         4047  
  1         26  
15              
16 1     1   9 use base 'Class::Accessor::Fast';
  1         2  
  1         1570  
17             __PACKAGE__->mk_accessors(qw{
18             name generated_from prereqs overlays
19             });
20              
21             sub new {
22 0     0 1   my $proto = shift;
23 0           my $self = $proto->SUPER::new(@_);
24 0           my $src = $self->generated_from;
25 0           my ($module, $opts);
26 0 0         if (ref $src eq 'HASH') {
    0          
27 0           ($module, $opts) = %$src;
28             } elsif (ref $src) {
29 0           ($module, $opts) = @$src;
30             } else {
31 0           $module = $src;
32 0           $opts = {};
33             }
34 0           $self->{module} = $module;
35 0   0       $self->{template} = delete $opts->{template} || 'main';
36 0   0       my $args = delete $opts->{arguments} || [];
37 0 0         if (ref $args ne 'ARRAY') { $args = [$args]; }
  0            
38 0           $self->{args} = $args;
39 0 0         if (%$opts) {
40 0           die "Unknown option for view class $self->{template}: ", join(" ", keys %$opts);
41             }
42 0           return $self;
43             }
44              
45             sub go {
46 0     0 0   my ($self, $file) = @_;
47 0           my $module = $self->{module};
48 0           my $args = $self->{args};
49 0           my $template = $self->{template};
50 0           eval "use $module;";
51 0 0         if ($@) {
52 0           warn $@;
53 0           die "Can't load $module due to compilation errors.\n";
54             }
55 0           Template::Declare->init(roots => [$module]);
56             # XXX $opts->{template}, $opts->{arguments}
57 0 0         mkdir 'tmp' if !-d 'tmp';
58 0 0         mkdir 'tmp/content' if !-d 'tmp/content';
59 0           my @all_prereqs = find_all_prereqs($file);
60             ### @all_prereqs
61 0           my $xml = Template::Declare->show($template, @$args);
62 0           my (@jsfiles, @cssfiles);
63 0           for my $file (@all_prereqs) {
64 0 0         if ($file =~ /\.js$/i) {
65 0           push @jsfiles, $file;
66             } else {
67 0           push @cssfiles, $file;
68             }
69             }
70 0           my $last_tag_pat = qr{ ]+ > \s* $}xs;
71 0           for my $file (@jsfiles) {
72 0 0         if ($file !~ /^\w+:\/\//) {
73 0           check_js_file($file);
74 0           $file = "chrome://$XUL::App::APP_NAME/content/$file";
75             }
76 0           $xml =~ s{$last_tag_pat}{