From d76c73eb8634f3181bd246d747ae42443d4b6d31 Mon Sep 17 00:00:00 2001 From: joey Date: Sat, 29 Jul 2006 17:44:41 +0000 Subject: * New pagestats plugin from Enrico, which can generate a table counting the backlinks for each page, or a del.icio.us style cloud. --- IkiWiki/Plugin/pagestats.pm | 64 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 IkiWiki/Plugin/pagestats.pm (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/pagestats.pm b/IkiWiki/Plugin/pagestats.pm new file mode 100644 index 000000000..34fd11715 --- /dev/null +++ b/IkiWiki/Plugin/pagestats.pm @@ -0,0 +1,64 @@ +#!/usr/bin/perl +# +# Produce page statistics in various forms. +# +# Currently supported: +# cloud: produces statistics in the form of a del.icio.us-style tag cloud +# (default) +# table: produces a table with the number of backlinks for each page +# +# By Enrico Zini. +package IkiWiki::Plugin::pagestats; + +use warnings; +use strict; +use IkiWiki; + +# Names of the HTML classes to use for the tag cloud +our @classes = ('smallestPC', 'smallPC', 'normalPC', 'bigPC', 'biggestPC' ); + +sub import { #{{{ + IkiWiki::hook(type => "preprocess", id => "pagestats", + call => \&preprocess); +} # }}} + +sub preprocess (@) { #{{{ + my %params=@_; + $params{pages}="*" unless defined $params{pages}; + my $style = ($params{style} or 'cloud'); + + # Needs to update whenever a page is added or removed, so + # register a dependency. + IkiWiki::add_depends($params{page}, $params{pages}); + + my %counts; + my $max = 0; + foreach my $page (%IkiWiki::links) { + if (IkiWiki::globlist_match($page, $params{pages})) { + my @bl = IkiWiki::backlinks($page); + $counts{$page} = scalar(@bl); + $max = $counts{$page} if $counts{$page} > $max; + } + } + + if ($style eq 'table') { + return "\n".join("\n", map { "" } + sort { $counts{$b} <=> $counts{$a} } keys %counts)."\n
$_".$counts{$_}."
\n" ; + } else { + # In case of misspelling, default to a page cloud + + my $res = "
\n"; + foreach my $page (sort keys %counts) { + my $class = $classes[$counts{$page} * scalar(@classes) / ($max + 1)]; + my $link = IkiWiki::abs2rel(IkiWiki::htmlpage($page), IkiWiki::dirname($params{page})); + $res .= sprintf("%s\n", + $class, $link, $page); + + } + $res .= "
\n"; + + return $res; + } +} # }}} + +1 -- cgit v1.2.3