File Coverage

blib/lib/Text/Livedoor/Wiki/Plugin/Block/Toggle.pm
Criterion Covered Total %
statement 81 81 100.0
branch 24 24 100.0
condition 21 25 84.0
subroutine 6 6 100.0
pod 3 3 100.0
total 135 139 97.1


line stmt bran cond sub pod time code
1             package Text::Livedoor::Wiki::Plugin::Block::Toggle;
2              
3 5     5   31 use warnings;
  5         12  
  5         151  
4 5     5   28 use strict;
  5         9  
  5         173  
5 5     5   27 use base qw(Text::Livedoor::Wiki::Plugin::Block);
  5         11  
  5         2434  
6              
7             __PACKAGE__->trigger({ start=> '^\[(\+|-)\]' , end => '^\[END\]$' });
8              
9             sub check {
10 245     245 1 383 my $class = shift;
11 245         338 my $line = shift;
12 245         323 my $args = shift;
13 245         395 my $on_next = $args->{on_next};
14 245         446 my $id = $args->{id};
15 245         332 my $inline = $args->{inline};
16 245         329 my $scratchpad = $Text::Livedoor::Wiki::scratchpad;
17 245         301 my $row;
18             my $option_str;
19 245         495 my $processing = $scratchpad->{block}{$id}{processing};
20            
21            
22             # rule
23             # 1. [+]~ or [-]~
24             # 2. not starting.
25             # 3. this line
26             # 4. no child found
27 245 100 100     2459 if ((my ( $mark ) = $line =~ /^\[(\+|-)\]/) && !$processing && !$on_next && !$class->get_child($id) ){
    100 66        
    100 66        
    100 100        
      100        
      66        
      100        
28             #XXX
29 22         67 $Text::Livedoor::Wiki::scratchpad->{skip_ajust_block_break} = '1';
30            
31 22         70 $scratchpad->{block}{$id}{processing} = 1 ;
32 22 100       72 my $toggle = $mark eq '+' ? 'close' : 'open';
33            
34 22         111 my ( $dummy , $title ) = $line =~ /^\[(\+|-)\](.+)/;
35 22 100       67 $title = '' unless defined $title;
36 22         163 return { id => $id , title => $title , toggle => $toggle };
37             }
38             # end box
39             elsif( !$on_next && $class->trigger_check($id,$line) && $line =~ /^\[END\]$/ && $processing ) {
40 13         38 $scratchpad->{block}{$id}{processing} = 0;
41 13         84 return { line => "\n" };
42             }
43             # finnalize
44             elsif( $on_next && !$processing ) {
45 2         16 return;
46             }
47             # processing
48             elsif( $processing ) {
49 123         728 return { line => $line };
50             }
51 85         504 return;
52              
53             }
54              
55             sub get {
56 15     15 1 28 my $class = shift;
57 15         29 my $block = shift;
58 15         17 my $inline = shift;
59 15         24 my $items = shift;
60 15         37 my $meta = shift @{$items};
  15         5338  
61 15         47 my $box = $meta->{box};
62 15         42 my $class_name = $meta->{class_name};
63 15         29 my $id = $meta->{id};
64 15         30 my $title = $meta->{title};
65 15         83 $title = $inline->parse($title);
66              
67             # END LINE
68 15 100       54 if ( scalar @$items ) { # in case there is no line in $items
69 12 100       49 pop @$items if $items->[-1]{line} eq "\n";
70             }
71              
72 15         35 my $html = '';
73 15         85 $html .= $_->{line} . "\n" for @$items;
74 15         79 $html =~ s/\n$//;
75 15   100     78 my $save_skip_catalog = $Text::Livedoor::Wiki::opts->{skip_catalog} || 0 ;
76 15         42 $Text::Livedoor::Wiki::opts->{skip_catalog} = 1;
77 15         86 $html = $block->parse( $html , 1) ;
78 15         40 $Text::Livedoor::Wiki::opts->{skip_catalog} = $save_skip_catalog ;
79              
80 15         95 my $spacer_image = $class->opts->{storage} . '/images/common/spacer.gif';
81              
82              
83             #return qq|\n$html\n|;
84 15         40 my $id_inside = "$id-inside";
85 15         31 my $id_label = "$id-label";
86 15 100       92 my $label_class = $meta->{toggle} eq 'open' ? 'toggle-link-close': 'toggle-link-open';
87 15         74 my $js = qq|if( document.getElementById('$id_inside').style.display =='none' ) { document.getElementById('$id_inside').style.display ='block' ; document.getElementById('$id_label').className = 'toggle-link-close'; } else { document.getElementById('$id_inside').style.display ='none';document.getElementById('$id_label').className = 'toggle-link-open'; } ;|;
88 15         193 my $button = qq|

$title

\n|;
89              
90 15 100       39 if( $meta->{toggle} eq 'open' ){
91 4         19 $html= qq|$button
\n$html
\n|;
92             }
93             else {
94 11         73 $html= qq|$button\n|;
95             }
96              
97 15         144 return qq|
\n$html
\n|;
98             }
99              
100             sub mobile {
101 7     7 1 13 my $class = shift;
102 7         11 my $block = shift;
103 7         10 my $inline = shift;
104 7         10 my $items = shift;
105 7         12 my $meta = shift @{$items};
  7         11  
106 7         17 my $box = $meta->{box};
107 7         12 my $class_name = $meta->{class_name};
108 7         12 my $id = $meta->{id};
109 7         13 my $title = $meta->{title};
110 7         33 $title = $inline->parse($title);
111              
112             # END LINE
113 7 100       22 if ( scalar @$items ) {
114 5 100       22 pop @$items if $items->[-1]{line} eq "\n";
115             }
116              
117 7         11 my $html = '';
118 7         29 $html .= $_->{line} . "\n" for @$items;
119 7         22 $html =~ s/\n$//;
120 7   50     37 my $save_skip_catalog = $Text::Livedoor::Wiki::opts->{skip_catalog} || 0 ;
121 7         14 $Text::Livedoor::Wiki::opts->{skip_catalog} = 1;
122 7         33 $html = $block->parse( $html , 1) ;
123 7         15 $Text::Livedoor::Wiki::opts->{skip_catalog} = $save_skip_catalog ;
124              
125 7         47 return qq|
\n$title
\n$html
\n|;
126             }
127              
128             1;
129              
130             =head1 NAME
131              
132             Text::Livedoor::Wiki::Plugin::Block::Toggle - Toggle Block Plugin
133              
134             =head1 DESCRIPTION
135              
136             you can open and close block with this.
137              
138             =head1 SYNOPSIS
139              
140             [+]''you can open me!''
141             - item
142             - item
143             [END]
144             [-]''you can close me!''
145             * title
146             hoge hoge
147             hoge hoge
148             [END]
149              
150             =head1 FUNCTION
151              
152             =head2 check
153              
154             =head2 get
155              
156             =head2 mobile
157              
158             =head1 AUTHOR
159              
160             polocky
161              
162             =cut