File Coverage

blib/lib/Text/Livedoor/Wiki/Plugin/Function/Image.pm
Criterion Covered Total %
statement 44 44 100.0
branch 27 28 96.4
condition 2 2 100.0
subroutine 7 7 100.0
pod 3 3 100.0
total 83 84 98.8


line stmt bran cond sub pod time code
1             package Text::Livedoor::Wiki::Plugin::Function::Image;
2 11     11   937 use warnings;
  11         23  
  11         515  
3 11     11   61 use strict;
  11         24  
  11         544  
4 11     11   172 use base qw/Text::Livedoor::Wiki::Plugin::Function/;
  11         115  
  11         370  
5 11     11   779 use Text::Livedoor::Wiki::Utils;
  11         19  
  11         75  
6             __PACKAGE__->function_name('ref');
7              
8             sub prepare_args {
9 16     16 1 24 my $class= shift;
10 16         16 my $args = shift;
11 16         22 my $my_args = {};
12              
13             # no args
14 16 100       54 die 'no args' unless scalar @$args;
15              
16             # image url
17 15         23 my $image_url = $args->[0];
18 15 100       42 die 'not image url' unless Text::Livedoor::Wiki::Utils::is_image_url( $image_url );
19 14         33 $my_args->{url} = $image_url;
20              
21             # width , heigth , align
22 14         18 my $flg = 0;
23 14         24 for(@$args) {
24 38 100       223 if ( $_ =~ /^\d+$/ ) {
    100          
    100          
    100          
25 15 100       38 if($flg ==0 ){
    100          
26 8         15 $my_args->{width} = $_;
27 8         13 $flg =1;
28             }
29             elsif( $flg == 1 ) {
30 6         10 $my_args->{height} = $_;
31 6         10 $flg++;
32             }
33             }
34             elsif( $_ eq '' ) {
35 1 50       4 $flg = 1 if $flg == 0;
36             }
37             elsif( $_ =~ /^left|right$/i ) {
38 7         25 $my_args->{align} = lc $_;
39             }
40             elsif( $_ eq 'no_link' ) {
41 1         3 $my_args->{no_link} = 1;
42             }
43             }
44 14         43 return $my_args;
45             }
46             sub prepare_value {
47 14     14 1 21 my $class= shift;
48 14   100     50 my $value = shift || '';
49 14         37 return Text::Livedoor::Wiki::Utils::escape( $value );
50             }
51              
52             sub process {
53 14     14 1 18 my ( $class, $inline, $data ) = @_;
54 14         18 my $args = $data->{args};
55 14         17 my $value = $data->{value};
56              
57             # build attr
58 14 100       32 my $width = exists $args->{width} ? ' width="' . $args->{width} . '"' : '';
59 14 100       32 my $height = exists $args->{height} ? ' height="' . $args->{height} . '"' : '';
60 14 100       28 my $alt = length($value) ? ' alt="' . $value . '"' : '';
61 14 100       42 my $align = exists $args->{align} ? ' align="' . $args->{align} . '"' : '';
62            
63             # done
64 14 100       30 if( $args->{no_link} ) {
65 1         10 return sprintf( '' , $data->{args}{url} , $width,$height,$alt,$align );
66             }
67             else {
68 13         127 return sprintf( '' , $data->{args}{url} ,$data->{args}{url} , $width,$height,$alt,$align );
69             }
70              
71             }
72              
73             1;
74              
75             =head1 NAME
76              
77             Text::Livedoor::Wiki::Plugin::Function::Image - Image Function Plugin
78              
79             =head1 DESCRIPTION
80              
81             put your picture everywhere!
82              
83             =head1 SYNOPSIS
84              
85             &ref(http://image.profile.livedoor.jp/icon/polocky_60.gif)
86             &ref(http://image.profile.livedoor.jp/icon/polocky_60.gif){hoge hoge"'><}
87             &ref(http://image.profile.livedoor.jp/icon/polocky_60.gif,10,10,left)
88             &ref(http://image.profile.livedoor.jp/icon/polocky_60.gif,left,10,10)
89             &ref(http://image.profile.livedoor.jp/icon/polocky_60.gif,left,10)
90             &ref(http://image.profile.livedoor.jp/icon/polocky_60.gif,10)
91              
92             =head1 FUNCTION
93              
94             =head2 prepare_args
95              
96             =head2 prepare_value
97              
98             =head2 process
99              
100             =head1 AUTHOR
101              
102             polocky
103              
104             =cut