aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2010-01-01 03:37:59 -0500
committerJoey Hess <joey@gnu.kitenet.net>2010-01-01 03:37:59 -0500
commit2ae1d9d928c12be21a32c9fd4809f12bebc20e77 (patch)
tree658ec9e2c3cc5d13ba9e8597f4452dc08e4b7b05
parentf2dab9318fc783933dbeb37926b18e9e782eab9f (diff)
downloadikiwiki-2ae1d9d928c12be21a32c9fd4809f12bebc20e77.tar
ikiwiki-2ae1d9d928c12be21a32c9fd4809f12bebc20e77.tar.gz
linkmap: Add option to omit disconnected pages from the map.
-rw-r--r--IkiWiki/Plugin/linkmap.pm25
-rw-r--r--debian/changelog1
-rw-r--r--doc/ikiwiki/directive/linkmap.mdwn13
3 files changed, 31 insertions, 8 deletions
diff --git a/IkiWiki/Plugin/linkmap.pm b/IkiWiki/Plugin/linkmap.pm
index 9540bd112..28acbda32 100644
--- a/IkiWiki/Plugin/linkmap.pm
+++ b/IkiWiki/Plugin/linkmap.pm
@@ -49,6 +49,7 @@ sub genmap ($) {
my $mapnum=shift;
return "" unless exists $maps{$mapnum};
my %params=%{$maps{$mapnum}};
+ my $connected=IkiWiki::yesno($params{connected});
# Get all the items to map.
my %mapitems = map { $_ => urlto($_, $params{destpage}) }
@@ -79,24 +80,38 @@ sub genmap ($) {
print OUT "charset=\"utf-8\";\n";
print OUT "ratio=compress;\nsize=\"".($params{width}+0).", ".($params{height}+0)."\";\n"
if defined $params{width} and defined $params{height};
+ my %shown;
+ my $show=sub {
+ my $item=shift;
+ if (! $shown{$item}) {
+ print OUT "\"$item\" [shape=box,href=\"$mapitems{$item}\"];\n";
+ $shown{$item}=1;
+ }
+ };
foreach my $item (keys %mapitems) {
- print OUT "\"$item\" [shape=box,href=\"$mapitems{$item}\"];\n";
+ $show->($item) unless $connected;
foreach my $link (map { bestlink($item, $_) } @{$links{$item}}) {
- print OUT "\"$item\" -> \"$link\";\n"
- if $mapitems{$link};
+ next unless length $link and $mapitems{$link};
+ foreach my $endpoint ($item, $link) {
+ $show->($endpoint);
+ }
+ print OUT "\"$item\" -> \"$link\";\n";
}
}
print OUT "}\n";
- close OUT;
+ close OUT || error gettext("failed to run dot");
local $/=undef;
my $ret="<object data=\"".urlto($dest, $params{destpage}).
"\" type=\"image/png\" usemap=\"#linkmap$mapnum\">\n".
<IN>.
"</object>";
- close IN;
+ close IN || error gettext("failed to run dot");
waitpid $pid, 0;
+ if ($?) {
+ error gettext("failed to run dot");
+ }
$SIG{PIPE}="DEFAULT";
error gettext("failed to run dot") if $sigpipe;
diff --git a/debian/changelog b/debian/changelog
index 984351415..eb9bf496f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,6 +11,7 @@ ikiwiki (3.20091219) UNRELEASED; urgency=low
* comments: Add a checksum to the name of comment pages, to
avoid merge conflicts when comments are posted to two branches of a
site.
+ * linkmap: Add option to omit disconnected pages from the map.
-- Joey Hess <joeyh@debian.org> Fri, 25 Dec 2009 14:31:22 -0500
diff --git a/doc/ikiwiki/directive/linkmap.mdwn b/doc/ikiwiki/directive/linkmap.mdwn
index 38cf0fd11..baa6fff61 100644
--- a/doc/ikiwiki/directive/linkmap.mdwn
+++ b/doc/ikiwiki/directive/linkmap.mdwn
@@ -7,9 +7,7 @@ graph showing the links between a set of pages in the wiki. Example usage:
Only links between mapped pages will be shown; links pointing to or from
unmapped pages will be omitted. If the pages to include are not specified,
-the links between all pages (and other files) in the wiki are mapped. For
-best results, only a small set of pages should be mapped, since otherwise
-the map can become very large, unwieldy, and complicated.
+the links between all pages (and other files) in the wiki are mapped.
Here are descriptions of all the supported parameters to the `linkmap`
directive:
@@ -18,5 +16,14 @@ directive:
* `height`, `width` - Limit the size of the map to a given height and width,
in inches. Both must be specified for the limiting to take effect, otherwise
the map's size is not limited.
+* `connected` - Controls whether to include pages on the map that link to
+ no other pages (connected=no, the default), or to only show pages that
+ link to others (connected=yes).
+
+For best results, only a small set of pages should be mapped, since
+otherwise the map can become very large, unwieldy, and complicated.
+If too many pages are included, the map may get so large that graphviz
+cannot render it. Using the `connected` parameter is a good way to prune
+out pages that clutter the map.
[[!meta robots="noindex, follow"]]