App-Navegante

 view release on metacpan or  search on metacpan

examples/htgraph  view on Meta::CPAN

is defined in the DSL by the C<desc> statement.

=cut

sub htgraphDesc {
    return "Utility to build graphs based on browsed pages.";
}

=head2 C<htspellFunction>

This function is used to process the page content. We are checking for
words in the dictionary, we are pushing words not found to the special
variable I<estado> in order to keep track of not found words over
sequential requests. We are also updating counters, like the number of
processed or not found words.

XXX _loadit

=cut

sub id {
    my $item = shift;
    if ($item =~ m/__MARCA__/) {
        $item = _loadit($item);
    }
    return $item;
}

=head2 C<htspellLive>

This is the function that prints the HTML that feeds the banner section
for reporting information. This is defined in the DSL by the
C<livefeedback> statement. Here we print information about the number 
of not found words for every page viewed.

=cut

sub htgraphLive {
    my $r = 'Browse pages to add them to graph.<br>Tip: use the form on the right to change the node color for this page.<br>Hit the quit button to finish browisng and check your graph.';
    return $r;
}

=head2 C<htspellInit>

This function runs on the beginig of every request and it's used here
to reset word counters and create an Aspell object for word checking. 
This is defined in the DSL by the C<init> statement.

=cut

sub addURL {
    my $count = keys %estado;
    $count eq '' and $count = 0;
    $U =~ s/\/$//g;
    $estado{++$count} = "white;$U";
}

sub drawGraph {
    use GraphViz;

    my $path = GraphViz->new(node => {fontsize => '10'});
    my $file = int(rand(10000));

    $path->add_node('START',style=>'filled',fillcolor=>'orange',shape=>'octagon');
    $last = 'START';
    foreach (sort keys %estado) {
        my ($left,$right) = split /;/, $estado{$_};
        $path->add_node($right,style=>'filled',fillcolor=>$left);
        $path->add_edge($last=>$right);
        $last = $right;
    }

    open FPNG, ">/var/www/html/nrc/navegante/$file.png";
    open FPS, ">/var/www/html/nrc/navegante/$file.ps";
    open FSVG, ">/var/www/html/nrc/navegante/$file.svg";
    print FPNG $path->as_png;
    print FPS $path->as_ps;
    print FSVG $path->as_svg;
    system "/usr/bin/ps2pdf /var/www/html/nrc/navegante/$file.ps /var/www/html/nrc/navegante/$file.pdf";
    unlink "/var/www/html/nrc/navegante/$file.ps";
    close FPNG;
    close FPS;
    close PSVG;

    print "<center><img border='1' src='http://nrc.homelinux.org/navegante/$file.png'>";

    print "<table width='50%'>";
    print "<tr bgcolor='orange'><td>Pos</td><td>URL</td></tr>";
    foreach (sort keys %estado) {
        my ($left,$right) = split /;/, $estado{$_};
        print "<tr><td>$_</td><td><a href='$right'>$right</a></td></tr>";
    }
    print "</table><hr>Your graph exported in other formats: <a href='http://nrc.homelinux.org/navegante/$file.pdf'>PDF</a> || <a href='http://nrc.homelinux.org/navegante/$file.svg'>SVG</a></center>";
}

sub colorNode {
    my $url = $U;
    my $color = param('user_data');

    foreach (sort keys %estado) {
print STDERR "I $_ $estado{$_}\n";
        my ($left, $right) = split /;/, $estado{$_};
        if ($right eq $url) {
            $left = $color;
            $estado{$_} = "$left;$right" and return 1;
        }
    }
}



( run in 0.565 second using v1.01-cache-2.11-cpan-5735350b133 )