linkmap: Add option to omit disconnected pages from the map.

master
Joey Hess 2010-01-01 03:37:59 -05:00
parent f2dab9318f
commit 2ae1d9d928
3 changed files with 31 additions and 8 deletions

View File

@ -49,6 +49,7 @@ sub genmap ($) {
my $mapnum=shift; my $mapnum=shift;
return "" unless exists $maps{$mapnum}; return "" unless exists $maps{$mapnum};
my %params=%{$maps{$mapnum}}; my %params=%{$maps{$mapnum}};
my $connected=IkiWiki::yesno($params{connected});
# Get all the items to map. # Get all the items to map.
my %mapitems = map { $_ => urlto($_, $params{destpage}) } my %mapitems = map { $_ => urlto($_, $params{destpage}) }
@ -79,24 +80,38 @@ sub genmap ($) {
print OUT "charset=\"utf-8\";\n"; print OUT "charset=\"utf-8\";\n";
print OUT "ratio=compress;\nsize=\"".($params{width}+0).", ".($params{height}+0)."\";\n" print OUT "ratio=compress;\nsize=\"".($params{width}+0).", ".($params{height}+0)."\";\n"
if defined $params{width} and defined $params{height}; 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) { 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}}) { foreach my $link (map { bestlink($item, $_) } @{$links{$item}}) {
print OUT "\"$item\" -> \"$link\";\n" next unless length $link and $mapitems{$link};
if $mapitems{$link}; foreach my $endpoint ($item, $link) {
$show->($endpoint);
}
print OUT "\"$item\" -> \"$link\";\n";
} }
} }
print OUT "}\n"; print OUT "}\n";
close OUT; close OUT || error gettext("failed to run dot");
local $/=undef; local $/=undef;
my $ret="<object data=\"".urlto($dest, $params{destpage}). my $ret="<object data=\"".urlto($dest, $params{destpage}).
"\" type=\"image/png\" usemap=\"#linkmap$mapnum\">\n". "\" type=\"image/png\" usemap=\"#linkmap$mapnum\">\n".
<IN>. <IN>.
"</object>"; "</object>";
close IN; close IN || error gettext("failed to run dot");
waitpid $pid, 0; waitpid $pid, 0;
if ($?) {
error gettext("failed to run dot");
}
$SIG{PIPE}="DEFAULT"; $SIG{PIPE}="DEFAULT";
error gettext("failed to run dot") if $sigpipe; error gettext("failed to run dot") if $sigpipe;

1
debian/changelog vendored
View File

@ -11,6 +11,7 @@ ikiwiki (3.20091219) UNRELEASED; urgency=low
* comments: Add a checksum to the name of comment pages, to * comments: Add a checksum to the name of comment pages, to
avoid merge conflicts when comments are posted to two branches of a avoid merge conflicts when comments are posted to two branches of a
site. site.
* linkmap: Add option to omit disconnected pages from the map.
-- Joey Hess <joeyh@debian.org> Fri, 25 Dec 2009 14:31:22 -0500 -- Joey Hess <joeyh@debian.org> Fri, 25 Dec 2009 14:31:22 -0500

View File

@ -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 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, 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 the links between all pages (and other files) in the wiki are mapped.
best results, only a small set of pages should be mapped, since otherwise
the map can become very large, unwieldy, and complicated.
Here are descriptions of all the supported parameters to the `linkmap` Here are descriptions of all the supported parameters to the `linkmap`
directive: directive:
@ -18,5 +16,14 @@ directive:
* `height`, `width` - Limit the size of the map to a given height and width, * `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 in inches. Both must be specified for the limiting to take effect, otherwise
the map's size is not limited. 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"]] [[!meta robots="noindex, follow"]]