File Coverage

lib/Templer/Plugin/Breadcrumbs.pm
Criterion Covered Total %
statement 16 32 50.0
branch 1 10 10.0
condition 1 3 33.3
subroutine 4 4 100.0
pod 2 2 100.0
total 24 51 47.0


line stmt bran cond sub pod time code
1              
2             =head1 NAME
3              
4             Templer::Plugin::Breadcrumbs - A plugin to create breadcrumbs
5              
6             =cut
7              
8             =head1 SYNOPSIS
9              
10             The following is a good example use of this plugin
11              
12             title: About my site
13             crumbs: Home,Software
14             ----
15            

This is my page content...

16              
17              
18             Here the variable 'crumbs' will be converted into a loop variable called
19             'breadcrumbs'. THe links and titls will be set automatically, but if you
20             need to override them you can do so via:
21              
22             title: About my site
23             crumbs: Home,Software[Soft],Testing[Test]
24             ----
25            

This is my page content...

26              
27              
28             That will result in links to /, /Soft, and /Soft/Test, respectively. With
29             display names of "Home", "Software" and "Testing".
30              
31             =cut
32              
33             =head1 DESCRIPTION
34              
35             This plugin expands the values of "crumbs", as written in a template, to
36             a loop-variable with the name "breadcrumbs".
37              
38             This can be used in a template like so:
39              
40             =for example begin
41              
42            
43            
44            
45            
  • 46            
    47            
    48            
    49              
    50             =for example end
    51              
    52             This template is an example.
    53              
    54             =cut
    55              
    56             =head1 LICENSE
    57              
    58             This module is free software; you can redistribute it and/or modify it
    59             under the terms of either:
    60              
    61             a) the GNU General Public License as published by the Free Software
    62             Foundation; either version 2, or (at your option) any later version,
    63             or
    64              
    65             b) the Perl "Artistic License".
    66              
    67             =cut
    68              
    69             =head1 AUTHOR
    70              
    71             Steve Kemp
    72              
    73             =cut
    74              
    75             =head1 COPYRIGHT AND LICENSE
    76              
    77             Copyright (C) 2015 Steve Kemp .
    78              
    79             This library is free software. You can modify and or distribute it under
    80             the same terms as Perl itself.
    81              
    82             =cut
    83              
    84             =head1 METHODS
    85              
    86             =cut
    87              
    88              
    89 11     11   5251 use strict;
      11         21  
      11         268  
    90 11     11   53 use warnings;
      11         19  
      11         3640  
    91              
    92              
    93             package Templer::Plugin::Breadcrumbs;
    94              
    95              
    96             =head2 new
    97              
    98             Constructor. No arguments are required/supported.
    99              
    100             =cut
    101              
    102             sub new
    103             {
    104 11     11 1 25 my ( $proto, %supplied ) = (@_);
    105 11   33     56 my $class = ref($proto) || $proto;
    106              
    107 11         19 my $self = {};
    108 11         20 bless( $self, $class );
    109 11         89 return $self;
    110             }
    111              
    112              
    113              
    114             =head2 expand_variables
    115              
    116             This is the method which is called by the L
    117             to expand the variables contained in a L object.
    118              
    119             This method will expand any variable that is called 'crumbs' into a HTML::Template
    120             loop, suitable for the display of breadcrumbs.
    121              
    122             =cut
    123              
    124             sub expand_variables
    125             {
    126 9     9 1 41 my ( $self, $site, $page, $data ) = (@_);
    127              
    128             #
    129             # Get the page-variables in the template.
    130             #
    131 9         49 my %hash = %$data;
    132              
    133             #
    134             # Look for a value of "read_file" in each key.
    135             #
    136 9         46 foreach my $key ( keys %hash )
    137             {
    138 66 50       128 if ( $key =~ /^crumbs$/i )
    139             {
    140 0         0 my $loop;
    141              
    142 0         0 my $val = $hash{ $key };
    143 0         0 my $link = "/";
    144              
    145 0         0 foreach my $path ( split( /,/, $val ) )
    146             {
    147 0         0 $path =~ s/^\s+|\s+$//g;
    148              
    149 0 0       0 if ( $path =~ /Home/i )
    150             {
    151             }
    152             else
    153             {
    154 0 0       0 if ( $path =~ /(.*)\[(.*)\]/ )
    155             {
    156 0         0 $link .= "/" . $1;
    157             }
    158             else
    159             {
    160 0         0 $link .= "/" . $path;
    161             }
    162             }
    163              
    164 0         0 $link =~ s/\/\//\//g;
    165              
    166 0 0       0 if ( $path =~ /\[(.*)\]/ )
    167             {
    168 0         0 $path = $1;
    169             }
    170             else
    171             {
    172 0         0 $path = ucfirst($path);
    173             }
    174 0         0 push( @$loop,
    175             { title => $path,
    176             link => $link
    177             } );
    178             }
    179              
    180              
    181 0 0       0 $hash{ 'breadcrumbs' } = $loop if ($loop);
    182 0         0 delete $hash{ $key };
    183             }
    184             }
    185              
    186 9         29 return ( \%hash );
    187             }
    188              
    189              
    190             #
    191             # Register the plugin.
    192             #
    193             Templer::Plugin::Factory->new()
    194             ->register_plugin("Templer::Plugin::Breadcrumbs");