File Coverage

blib/lib/Rest/HtmlVis/Content.pm
Criterion Covered Total %
statement 18 76 23.6
branch 0 20 0.0
condition 0 28 0.0
subroutine 6 14 42.8
pod 6 6 100.0
total 30 144 20.8


line stmt bran cond sub pod time code
1             package Rest::HtmlVis::Content;
2              
3 1     1   651 use 5.006;
  1         8  
  1         32  
4 1     1   4 use strict;
  1         1  
  1         25  
5 1     1   3 use warnings FATAL => 'all';
  1         2  
  1         32  
6              
7 1     1   4 use parent qw( Rest::HtmlVis::Key );
  1         1  
  1         4  
8              
9 1     1   524 use Plack::Request;
  1         53330  
  1         29  
10 1     1   583 use YAML::Syck;
  1         2115  
  1         807  
11              
12             =head1 NAME
13              
14             Rest::HtmlVis::Content - Return base block for keys links and form.
15              
16             =head1 VERSION
17              
18             Version 0.01
19              
20             =cut
21              
22             our $VERSION = '0.01';
23              
24              
25             =head1 SYNOPSIS
26              
27             Quick summary of what the module does.
28              
29             Perhaps a little code snippet.
30              
31             use Rest::HtmlVis::Content;
32              
33             my $foo = Rest::HtmlVis::Content->new();
34             ...
35              
36             =head1 KEYS
37              
38             =head2 links
39              
40             Convert default strcuture of links. Each link should consists of:
41              
42             =over 4
43              
44             =item * href
45              
46             URL of target.Can be absolute or relative.
47              
48             =item * name
49              
50             Name of the link.
51              
52             =item * id
53              
54             Identifier of the link
55              
56             =back
57              
58             Example:
59              
60             links => [
61             {
62             href => '/api/test',
63             name => 'Test resource',
64             id => 'api.test'
65             }
66             ]
67              
68             =head2 form
69              
70             Define elements of formular for html.
71              
72             =cut
73              
74             sub setStruct {
75 0     0 1   my ($self, $key, $struct, $env) = @_;
76 0           $self->{struct} = $struct;
77 0           $self->{env} = $env;
78              
79 0           return 1;
80             }
81              
82             sub getOrder {
83 0     0 1   return 99999999999;
84             }
85              
86             sub newRow {
87 0     0 1   return 1;
88             }
89              
90             sub head {
91 0     0 1   '
92            
98             '
99             }
100              
101             sub onload {
102 0     0 1   'prettyPrint();'
103             }
104              
105             sub html {
106 0     0 1   my ($self) = @_;
107 0           my $struct = $self->getStruct;
108              
109             ### Links
110 0           my $links = '';
111 0 0 0       if (exists $struct->{links} && ref $struct->{links} eq 'ARRAY'){
112 0           foreach my $link (@{$struct->{links}}) {
  0            
113 0           $links .= '
  • '.$link->{href}.' - '.$link->{name}.'
  • ';
    114             }
    115 0           delete $struct->{links};
    116             }
    117              
    118             ### Content
    119 0           my $content = '';
    120             {
    121 0           local $Data::Dumper::Indent=1;
      0            
    122 0           local $Data::Dumper::Quotekeys=0;
    123 0           local $Data::Dumper::Terse=1;
    124 0           local $Data::Dumper::Sortkeys=1;
    125              
    126 0           $content = Dump($struct);
    127             }
    128              
    129             ### Form
    130 0           my $form = {};
    131             # if (exists $struct->{form} && ref $struct->{form} eq 'HASH'){
    132 0 0 0       if (exists $struct->{form} && ref $struct->{form} eq 'HASH'){
        0 0        
    133 0           $form = _formToHtml($struct->{form});
    134 0           delete $struct->{form};
    135             }elsif( exists $self->getEnv()->{'restapi.class'} && $self->getEnv()->{'restapi.class'}->can('GET_FORM')){
    136 0           my $req = Plack::Request->new($self->getEnv());
    137 0           my $par = $req->parameters;
    138 0           $par->add('content', $content);
    139 0           $form = _formToHtml($self->getEnv()->{'restapi.class'}->GET_FORM($par));
    140             }
    141              
    142             "
    143            
    144            
    145             $links
    146            
    147            
    148            
    149            
     
    150             $content
    151            
    152            
    153            
    154              
    155            
    156            
    157            
  • GET
  • 158            
  • POST
  • 159            
  • PUT
  • 160            
  • DELETE
  • 161            
    162              
    163            
    164            
    165            
    166            
    167 0   0       ".($form->{GET}||'
    Not allowed
    ')."
          0        
          0        
          0        
    168            
    169            
    170            
    171            
    172             ".($form->{POST}||'
    Not allowed
    ')."
    173            
    174            
    175            
    176            
    177             ".($form->{PUT}||'
    Not allowed
    ')."
    178            
    179            
    180            
    181            
    182             ".($form->{DELETE}||'
    Not allowed
    ')."
    183            
    184            
    185            
    186              
    187            
    188             "
    189             }
    190              
    191             sub _getAjaxCall {
    192 0     0     my ($self, $methodType) = @_;
    193 0           "\$.ajax({
    194             type: '$methodType',
    195             url: '".$self->getEnv()->{REQUEST_URI}."',
    196             success: function(data) {
    197             alert('Success');
    198             var newDoc = document.open('text/html', 'replace');
    199             newDoc.write(data);
    200             newDoc.close();
    201             },
    202             error: function(data) {
    203             alert(data.responseText);
    204             },
    205             data: \$(this).serialize()
    206             }); return false;"
    207             }
    208              
    209              
    210             my $defaultForm = {
    211             GET => "",
    212            
    213             POST => "
    214            
    215            
    216            
    217            
    218            
    219             ",
    220              
    221             PUT => "
    222            
    223            
    224            
    225            
    226            
    227             ",
    228            
    229             DELETE => "",
    230             };
    231              
    232             sub _formToHtml {
    233 0     0     my ($struct) = @_;
    234              
    235 0           my $form = {};
    236 0           foreach my $method (keys %{$struct}) {
      0            
    237 0 0 0       if (exists $struct->{$method}{params} && ref $struct->{$method}{params} eq 'ARRAY'){
        0          
    238 0           my $html = '';
    239 0           foreach my $param (@{$struct->{$method}{params}}) {
      0            
    240 0           my $type = $param->{type};
    241 0           my $name = $param->{name};
    242              
    243 0 0         next unless $name;
    244              
    245 0 0         if ($type eq 'text'){
        0          
        0          
        0          
    246 0   0       my $default = ($param->{default}||'');
    247 0           $html .= '';
    248             }elsif ($type eq 'textarea'){
    249 0   0       my $rows = ($param->{rows}||20);
    250 0   0       my $cols = ($param->{cols}||3);
    251 0   0       my $default = ($param->{default}||'');
    252 0           $html .= '';
    253             }elsif ($type eq 'checkbox'){
    254             }elsif ($type eq 'radio'){
    255             }
    256             }
    257 0           $form->{$method} .= $html;
    258             }elsif(exists $struct->{$method}{default}){
    259 0           my $html = '';
    260 0           $html .= '';
    261 0           $form->{$method} .= $html;
    262             }
    263 0           $form->{$method} .= $defaultForm->{$method};
    264             }
    265              
    266 0           return $form;
    267             }
    268              
    269             =head1 AUTHOR
    270              
    271             Vaclav Dovrtel, C<< >>
    272              
    273             =head1 BUGS
    274              
    275             Please report any bugs or feature requests to github repository.
    276              
    277             =head1 ACKNOWLEDGEMENTS
    278              
    279             Inspired by L
    280              
    281             =head1 REPOSITORY
    282              
    283             L
    284              
    285             =head1 LICENSE AND COPYRIGHT
    286              
    287             Copyright 2015 Vaclav Dovrtel.
    288              
    289             This program is free software; you can redistribute it and/or modify it
    290             under the terms of either: the GNU General Public License as published
    291             by the Free Software Foundation; or the Artistic License.
    292              
    293             See L for more information.
    294              
    295             =cut
    296              
    297             1; # End of Rest::HtmlVis::Content