File Coverage

blib/lib/Dancer2/Plugin/Minify.pm
Criterion Covered Total %
statement 43 44 97.7
branch 6 8 75.0
condition 15 37 40.5
subroutine 12 12 100.0
pod n/a
total 76 101 75.2


line stmt bran cond sub pod time code
1 3     3   899196 use strictures;
  3         3291  
  3         14  
2              
3             package Dancer2::Plugin::Minify;
4              
5             # ABSTRACT: Minify HTML, JavaScript and CSS
6              
7 3     3   1818 use Dancer2::Plugin;
  3         4771  
  3         17  
8              
9 3     3   4960 use HTML::Packer;
  3         14581  
  3         71  
10 3     3   1379 use JavaScript::Packer;
  3         12259  
  3         79  
11 3     3   1257 use CSS::Packer;
  3         5915  
  3         1084  
12              
13             our $VERSION = '0.002'; # VERSION
14              
15              
16             has html => (
17             is => 'lazy',
18 1     1   312 builder => sub { HTML::Packer->init },
19             );
20              
21             has js => (
22             is => 'lazy',
23 1     1   304 builder => sub { JavaScript::Packer->init },
24             );
25              
26             has css => (
27             is => 'lazy',
28 1     1   293 builder => sub { CSS::Packer->init },
29             );
30              
31              
32              
33             register minify => sub {
34 3     3   697089 my ($dsl, $what, $text, $args) = @_;
35 3 50       13 return unless defined $text;
36 3   50     17 $args //= {};
37 3 100       17 return $dsl->_minify_js ($text, $args) if $what eq 'js';
38 2 100       9 return $dsl->_minify_css ($text, $args) if $what eq 'css';
39 1 50       16 return $dsl->_minify_html($text, $args) if $what eq 'html';
40 0         0 $dsl->error("unknown engine: $what");
41             }, { is_global => 1 };
42              
43              
44              
45             sub _minify_html {
46 1     1   2 my ($dsl, $html, $args) = @_;
47 1         4 my $cfg = plugin_setting;
48 1   33     432 my $remove_comments = $cfg->{remove_comments} // $args->{remove_comments} // 1;
      50        
49 1   33     7 my $remove_newlines = $cfg->{remove_newlines} // $args->{remove_newlines} // 1;
      50        
50 1   33     16 my $js_compress = $cfg->{js_compress} // $args->{js_compress} // 'best';
      50        
51 1   33     4 my $css_compress = $cfg->{css_compress} // $args->{css_compress} // 'minify';
      50        
52 1   33     6 my $html5 = $cfg->{html5} // $args->{html5} // 1;
      50        
53 1         6 $dsl->html->minify(\$html, {
54             remove_comments => $remove_comments,
55             remove_newlines => $remove_newlines,
56             do_javascript => $js_compress,
57             do_stylesheet => $css_compress,
58             html5 => 1,
59             });
60 1         6961 return $html;
61             }
62              
63              
64             sub _minify_js {
65 1     1   2 my ($dsl, $js, $args) = @_;
66 1         12 my $cfg = plugin_setting;
67 1   33     122 my $comress = $cfg->{js_compress} // $args->{compress} // 'best';
      50        
68 1         5 $dsl->js->minify(\$js, {
69             compress => $comress,
70             });
71 1         4854 return $js;
72             }
73              
74              
75             sub _minify_css {
76 1     1   9 my ($dsl, $css, $args) = @_;
77 1         3 my $cfg = plugin_setting;
78 1   33     114 my $comress = $cfg->{css_compress} // $args->{compress} // 'minify';
      50        
79 1         6 $dsl->css->minify(\$css, {
80             compress => $comress,
81             });
82 1         1925 return $css;
83             }
84              
85              
86             register_plugin;
87              
88             1;
89              
90             __END__