- foreach my $page (keys %IkiWiki::links) {
- if (IkiWiki::pagespec_match($page, $params{pages})) {
- my @bl = IkiWiki::backlinks($page);
- $counts{$page} = scalar(@bl);
- $max = $counts{$page} if $counts{$page} > $max;
+ foreach my $page (pagespec_match_list($params{page}, $params{pages},
+ # update when a displayed page is added/removed
+ deptype => deptype("presence"))) {
+ use IkiWiki::Render;
+
+ my @backlinks = IkiWiki::backlink_pages($page);
+
+ if (exists $params{among}) {
+ # only consider backlinks from the amoung pages
+ @backlinks = pagespec_match_list(
+ $params{page}, $params{among},
+ # update whenever links on those pages change
+ deptype => deptype("links"),
+ list => \@backlinks
+ );
+ }
+ else {
+ # update when any page with links changes,
+ # in case the links point to our displayed pages
+ add_depends($params{page}, "*", deptype("links"));
+ }
+
+ $counts{$page} = scalar(@backlinks);
+ $max = $counts{$page} if $counts{$page} > $max;
+ }
+
+ if (exists $params{show}) {
+ my $i=0;
+ my %show;
+ foreach my $key (sort { $counts{$b} <=> $counts{$a} } keys %counts) {
+ last if ++$i > $params{show};
+ $show{$key}=$counts{$key};