diff options
Diffstat (limited to 'IkiWiki/Plugin/pagecount.pm')
-rw-r--r-- | IkiWiki/Plugin/pagecount.pm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/pagecount.pm b/IkiWiki/Plugin/pagecount.pm new file mode 100644 index 000000000..dd5de3c83 --- /dev/null +++ b/IkiWiki/Plugin/pagecount.pm @@ -0,0 +1,40 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::pagecount; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "pagecount", call => \&getsetup); + hook(type => "preprocess", id => "pagecount", call => \&preprocess); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => undef, + section => "widget", + }, +} + +sub preprocess (@) { + my %params=@_; + my $pages=defined $params{pages} ? $params{pages} : "*"; + + # Just get a list of all the pages, and count the items in it. + # Use a presence dependency to only update when pages are added + # or removed. + + if ($pages eq '*') { + # optimisation to avoid needing to try matching every page + add_depends($params{page}, $pages, deptype("presence")); + return scalar keys %pagesources; + } + + return scalar pagespec_match_list($params{page}, $pages, + deptype => deptype("presence")); +} + +1 |