File Coverage

blib/lib/Kwiki/TableOfContents/Print.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package Kwiki::TableOfContents::Print;
2              
3 1     1   25019 use warnings;
  1         2  
  1         34  
4 1     1   6 use strict;
  1         2  
  1         37  
5 1     1   472 use Kwiki::Plugin '-Base';
  0            
  0            
6             use mixin 'Kwiki::Installer';
7             use IO::All;
8             use JSON;
9             use Data::Dumper;
10             our $VERSION = '0.02';
11              
12             const class_title => 'Table of Contents Print';
13             const class_id => 'toc_print';
14              
15             sub register {
16             my $registry = shift;
17             $registry->add(prerequisite => 'toc');
18             $registry->add(preload => 'toc_print');
19             $registry->add(action => 'print_toc');
20             }
21              
22             sub print_toc {
23             my $print_page = CGI::param('page_name');
24             my $content = join('', map({
25             my $page_key = $_->[0];
26             my $page_name = $_->[1];
27             my $level = $_->[2];
28             my $html = $self->hub->pages->new_page($page_key)->to_html;
29             $html =~ s|attachments/$print_page/|attachments/$page_key/|gi
30             unless $page_key eq $print_page;
31             ('',
32             $page_name,
33             '',
34             $html)
35             } $self->print_pages));
36             $self->hub->css->add_file('jstree_print.css');
37             $self->render_screen(
38             page_html => $content,
39             );
40             }
41              
42             sub print_pages {
43             my $page_name = CGI::param('page_name');
44             my $structure = jsonToObj(io->catfile($self->plugin_base_directory,
45             'toc', 'structure')->slurp);
46              
47             return $page_name eq $self->config->main_page
48             ? (['HomePage', 'Home Page', 1], $self->tree_to_list($structure, 0))
49             : $self->tree_to_list($self->find_node($page_name, $structure), 1);
50             }
51              
52             sub tree_to_list {
53             my ( $structure, $level, @list ) = @_;
54             if( ref($structure) eq 'HASH' ) {
55             my $page_name = $self->link_to_pagename(
56             $structure->{data}->{href});
57             push( @list, [
58             $page_name,
59             $structure->{data}->{text},
60             $level,
61             ]) if defined $page_name;
62             $structure = $structure->{subtree};
63             }
64             $level++;
65             foreach ( @$structure ) {
66             @list = $self->tree_to_list($_, $level, @list);
67             }
68             return @list;
69             }
70              
71             sub find_node {
72             my ( $page_name, $structure ) = @_;
73             foreach ( @$structure ) {
74             my $cur = $self->link_to_pagename($_->{data}->{href});
75             return $_ if $page_name eq $cur;
76             my $next = $self->find_node($page_name, $_->{subtree});
77             return $next if defined $next;
78             }
79             return undef;
80             }
81              
82             sub link_to_pagename {
83             my ( $link ) = @_;
84             return $link =~ /\?(.+)$/ ? $1 : undef;
85             }
86              
87             1; # End of Kwiki::TableOfContents::Print
88             __DATA__