From: Simon McVittie <smcv@ http://smcv.pseudorandom.co.uk/>
Date: Thu, 18 Jun 2009 17:33:49 +0000 (+0100)
Subject: pagestats: add `among` parameter, which only counts links from specified pages
X-Git-Tag: 3.15~73^2
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/acb79b5c00b48c4b52a29703e9d7b52330fd23b2

pagestats: add `among` parameter, which only counts links from specified pages
---

diff --git a/IkiWiki/Plugin/pagestats.pm b/IkiWiki/Plugin/pagestats.pm
index 5dd2f337b..874ead7e6 100644
--- a/IkiWiki/Plugin/pagestats.pm
+++ b/IkiWiki/Plugin/pagestats.pm
@@ -38,13 +38,22 @@ sub preprocess (@) {
 	# Needs to update whenever a page is added or removed, so
 	# register a dependency.
 	add_depends($params{page}, $params{pages});
+	add_depends($params{page}, $params{among}) if exists $params{among};
 	
 	my %counts;
 	my $max = 0;
 	foreach my $page (pagespec_match_list([keys %links],
 			$params{pages}, location => $params{page})) {
 		use IkiWiki::Render;
-		$counts{$page} = scalar(IkiWiki::backlinks($page));
+
+		my @backlinks = IkiWiki::backlink_pages($page);
+
+		if (exists $params{among}) {
+			@backlinks = pagespec_match_list(\@backlinks,
+				$params{among}, location => $params{page});
+		}
+
+		$counts{$page} = scalar(@backlinks);
 		$max = $counts{$page} if $counts{$page} > $max;
 	}
 
diff --git a/doc/ikiwiki/directive/pagestats.mdwn b/doc/ikiwiki/directive/pagestats.mdwn
index cfb5737a5..426f3e4af 100644
--- a/doc/ikiwiki/directive/pagestats.mdwn
+++ b/doc/ikiwiki/directive/pagestats.mdwn
@@ -12,4 +12,14 @@ And here's how to create a table of all the pages on the wiki:
 
 	\[[!pagestats style="table"]]
 
+The optional `among` parameter limits counting to pages that match a
+[[ikiwiki/PageSpec]]. For instance, to display a cloud of tags used on blog
+entries, you could use:
+
+	\[[!pagestats pages="tags/*" among="blog/posts/*"]]
+
+or to display a cloud of tags related to Linux, you could use:
+
+	\[[!pagestats pages="tags/* and not tags/linux" among="tagged(linux)"]]
+
 [[!meta robots="noindex, follow"]]