/[webpac]/trunk2/lib/WebPAC/Tree.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk2/lib/WebPAC/Tree.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 572 by dpavlin, Mon Nov 1 14:55:16 2004 UTC revision 575 by dpavlin, Mon Nov 1 18:00:26 2004 UTC
# Line 128  Create new tree object Line 128  Create new tree object
128   my $tree = new WebPAC::Tree(   my $tree = new WebPAC::Tree(
129          tree => \@tree,          tree => \@tree,
130          log => 'log4perl.conf',          log => 'log4perl.conf',
131            detail_url => sub {
132                    my $mfn = shift;
133                    my $path = "thes/${mfn}.html";
134                    return $path if (-e "./out/$path");
135            },
136            nodes_dir => 'nodes',
137   );   );
138    
139  C<tree> is tree array with levels of tree described above.  C<tree> is tree array with levels of tree described above.
# Line 135  C<tree> is tree array with levels of tre Line 141  C<tree> is tree array with levels of tre
141  C<log> is optional parametar which specify filename of L<Log::Log4Perl>  C<log> is optional parametar which specify filename of L<Log::Log4Perl>
142  config file. Default is C<log.conf>.  config file. Default is C<log.conf>.
143    
144    C<detail_url> code ref to check if detail html exists (and return URL if
145    it does).
146    
147    C<nodes_dir> is relative path from output directory where tree nodes for
148    iframes will be created.
149    
150  =cut  =cut
151    
152  sub new {  sub new {
# Line 152  sub new { Line 164  sub new {
164          $self->{'show_ids'} = [];          $self->{'show_ids'} = [];
165          $self->{'hide_ids'} = [];          $self->{'hide_ids'} = [];
166    
167            # figure out relative URL to other content from nodes_dir
168            my $iframe_base = $self->{'nodes_dir'};
169            if ($iframe_base) {
170                    $iframe_base = s#[^/]*##g;
171                    $iframe_base = '../' x ( length($iframe_base) );
172                    $self->{'iframe_base'} = $iframe_base;
173                    $log->debug("nodes dir is '",$self->{'nodes_dir'},"' so iframe_base is '",$self->{'iframe_base'},"'");
174            }
175    
176          $self->{'tree_html'} = $self->unroll(0,());          $self->{'tree_html'} = $self->unroll(0,());
177    
178          if (! $self->{'tree_html'}) {          if (! $self->{'tree_html'}) {
# Line 231  sub output { Line 252  sub output {
252                  file => $js_file,                  file => $js_file,
253          );          );
254    
255          if (! $args->{'nodes'}) {          if (! $self->{'nodes_dir'}) {
256                  $log->warn("skipping node creation");                  $log->warn("skipping node creation");
257                  return $self;                  return $self;
258          }          }
259    
260          foreach my $mfn (keys %{$self->{'node_html'}}) {          foreach my $mfn (keys %{$self->{'node_html'}}) {
261    
262                  my $html_file = $args->{'dir'}."/".$args->{'nodes'}."/${mfn}.html";                  my $html_file = $args->{'dir'}."/".$self->{'nodes_dir'}."/${mfn}.html";
263    
264                  $log->debug("creating tree node $html_file");                  $log->debug("creating tree node $html_file");
265    
# Line 263  Generate tree recursively. Line 284  Generate tree recursively.
284  sub unroll {  sub unroll {
285          my $self = shift;          my $self = shift;
286    
287          my ($level,$data_arr) = @_;          my ($level,$data_arr, $base_path) = @_;
288    
289            $base_path ||= '';
290    
291          my $log = $self->_get_logger();          my $log = $self->_get_logger();
292    
# Line 284  sub unroll { Line 307  sub unroll {
307          # all levels passed?          # all levels passed?
308          return if (! defined($tree->[$level]));          return if (! defined($tree->[$level]));
309    
310          $log->debug("unroll level $level");          $log->debug("unroll level $level base path ",($base_path || "none"));
311    
312          my $html;          my $html;
313    
# Line 316  sub unroll { Line 339  sub unroll {
339    
340                          }                          }
341    
342                          ($link_start,$link_end) = (qq{<a href="#mfn$mfn" onClick="return toggle_display('id$mfn');">},qq{</a>}) if ($have_children);                          my $iframe = $tree->[$level]->{'iframe'};
343    
344                            if ($have_children) {
345                                    ($link_start,$link_end) = (qq{<a href="#mfn$mfn" onClick="return toggle_display('id$mfn');">},qq{</a>});
346                                    if ($iframe) {
347                                            my $url = $self->{'nodes_dir'} || $log->logdie("no nodes_dir?");
348                                            $url .= "/${mfn}.html";
349                                            $link_start = qq{<a href="#mfn$mfn" onClick="iframe_load('i$mfn','$url'); return toggle_display('id$mfn');">};
350                                    }
351                            }
352    
353                            my $mfn_link;
354                            $mfn_link = $self->{'detail_url'}->($mfn) if ($self->{'detail_url'});
355    
356                          my $mfn_link = "thes/$mfn.html";                          if ($mfn_link) {
357                          if (-e "out/$mfn_link") {                                  $term =~ s/ *#C# */ <img src="${base_path}img\/crovoc.png" border="0">/;
                                 $term =~ s# *\* *# <img src="img/crovoc.png" border="0">#;  
358                                  $html .= " " x $level .                                  $html .= " " x $level .
359                                          qq{<li>${link_start}<span id="o$mfn">${term}</span>${link_end}}.                                          qq{<li>${link_start}<span id="o$mfn">${term}</span>${link_end}}.
360                                          qq{&nbsp;<a href="$mfn_link" onClick="javascript:return popup(this);"><img src="img/listic.png" border="0"></a></li>\n};                                          qq{&nbsp;<a href="${base_path}${mfn_link}" onClick="javascript:return popup(this);"><img src="${base_path}img/listic.png" border="0"></a></li>\n};
361                                    $log->debug("linked details to $mfn_link");
362                          } else {                          } else {
363                                  $log->warn("file 'out/$mfn_link' doesn't exist, skipping");                                  $log->warn("file 'out/$mfn_link' doesn't exist, skipping");
364                          }                          }
365    
366                            # save mfn for iframe
367                            push @{$self->{'mfn_arr'}}, $mfn;
368    
369                          unless ($have_children) {                          unless ($have_children) {
370                                  next;                                  next;
371                          }                          }
# Line 349  sub unroll { Line 387  sub unroll {
387                                  push @{$self->{'show_ids'}}, "id$mfn";                                  push @{$self->{'show_ids'}}, "id$mfn";
388                          }                          }
389    
390                          if ($tree->[$level]->{'iframe'}) {  
391                            if ($iframe) {
392    
393                                    # reset list of current mfns
394                                    $self->{'mfn_arr'} = ();
395    
396                                  # unroll to separate file                                  # unroll to separate file
397                                  $self->{'node_html'}->{$mfn} = $self->unroll($next_level, $have_children);                                  $self->{'node_html'}->{$mfn} = $self->unroll($next_level, $have_children, $self->{'iframe_base'});
398                                    $html .= " " x $level .
399                                    qq{<iframe id="i$mfn" name="i$mfn" width="100%" height="0" frameborder="0" border="0" onLoad="iframe_resize(this.name);"></iframe>};
400                                    @{$self->{'iframe_mfn'}->{$mfn}} = @{$self->{'mfn_arr'}};
401    
402                          } else {                          } else {
403                                  # unroll at base HTML                                  # unroll at base HTML
404                                  $html .= $self->unroll($next_level, $have_children);                                  $html .= $self->unroll($next_level, $have_children, $base_path);
405                          }                          }
406    
407                          $html .= " " x $level . qq{</ul>\n};                          $html .= " " x $level . qq{</ul>\n};
# Line 391  sub generate_js { Line 437  sub generate_js {
437          open(JS, ">", $js_file) || $log->logdie("can't open '$js_file': $!");          open(JS, ">", $js_file) || $log->logdie("can't open '$js_file': $!");
438          print JS "var show = ['",join("','",@{$self->{'show_ids'}}),"'];\n";          print JS "var show = ['",join("','",@{$self->{'show_ids'}}),"'];\n";
439          print JS "var hide = ['",join("','",@{$self->{'hide_ids'}}),"'];\n";          print JS "var hide = ['",join("','",@{$self->{'hide_ids'}}),"'];\n";
440    
441            print JS "var mfn_iframe = [\n";
442            foreach my $if (keys %{$self->{'iframe_mfn'}}) {
443    #               print JS " ",join(",",map { "[$_:$if]" } @{$self->{'iframe_mfn'}->{$if}}),",\n";
444            }
445            print JS " null\n]\n";
446    
447          close(JS);          close(JS);
448    
449          $log->debug("stored ",scalar @{$self->{'show_ids'}}," shown and ",scalar @{$self->{'hide_ids'}}," hidden elements");          $log->debug("stored ",scalar @{$self->{'show_ids'}}," shown and ",scalar @{$self->{'hide_ids'}}," hidden elements");

Legend:
Removed from v.572  
changed lines
  Added in v.575

  ViewVC Help
Powered by ViewVC 1.1.26