summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/brokenlinks.pm31
-rw-r--r--IkiWiki/Plugin/editpage.pm5
-rw-r--r--IkiWiki/Plugin/inline.pm7
-rw-r--r--IkiWiki/Plugin/opendiscussion.pm3
-rw-r--r--IkiWiki/Plugin/orphans.pm11
-rw-r--r--IkiWiki/Plugin/po.pm9
-rw-r--r--IkiWiki/Render.pm32
7 files changed, 44 insertions, 54 deletions
diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm
index cf8f25281..eb698b0be 100644
--- a/IkiWiki/Plugin/brokenlinks.pm
+++ b/IkiWiki/Plugin/brokenlinks.pm
@@ -27,32 +27,27 @@ sub preprocess (@) {
# register a dependency.
add_depends($params{page}, $params{pages});
- my %broken;
- foreach my $page (pagespec_match_list([keys %links],
- $params{pages}, location => $params{page})) {
- my $discussion=gettext("Discussion");
- my %seen;
- foreach my $link (@{$links{$page}}) {
- next if $seen{$link};
- $seen{$link}=1;
- next if $link =~ /.*\/\Q$discussion\E/i && $config{discussion};
- my $bestlink=bestlink($page, $link);
- next if length $bestlink;
- push @{$broken{$link}}, $page;
+ my @broken;
+ foreach my $link (keys %IkiWiki::brokenlinks) {
+ next if $link =~ /.*\/\Q$config{discussionpage}\E/i && $config{discussion};
+
+ my @pages;
+ foreach my $page (@{$IkiWiki::brokenlinks{$link}}) {
+ push @pages, $page
+ if pagespec_match($page, $params{pages}, location => $params{page});
}
- }
+ next unless @pages;
- my @broken;
- foreach my $link (keys %broken) {
- my $page=$broken{$link}->[0];
+ my $page=$IkiWiki::brokenlinks{$link}->[0];
push @broken, sprintf(gettext("%s from %s"),
htmllink($page, $params{destpage}, $link, noimageinline => 1),
join(", ", map {
htmllink($params{page}, $params{destpage}, $_, noimageinline => 1)
- } @{$broken{$link}}));
+ } @pages)
+ );
}
- return gettext("There are no broken links!") unless %broken;
+ return gettext("There are no broken links!") unless @broken;
return "<ul>\n"
.join("\n",
map {
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index 467cd9ed5..fca970c60 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -229,8 +229,9 @@ sub cgi_editpage ($$) {
my $dir=$from."/";
$dir=~s![^/]+/+$!!;
- if ((defined $form->field('subpage') && length $form->field('subpage')) ||
- $page eq lc(gettext('Discussion'))) {
+ if ((defined $form->field('subpage') &&
+ length $form->field('subpage')) ||
+ $page eq lc($config{discussionpage})) {
$best_loc="$from/$page";
}
else {
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 04ad6ed23..704fa711d 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -371,15 +371,14 @@ sub preprocess_inline (@) {
my $file = $pagesources{$page};
my $type = pagetype($file);
if ($config{discussion}) {
- my $discussionlink=lc(gettext("Discussion"));
- if ($page !~ /.*\/\Q$discussionlink\E$/ &&
+ if ($page !~ /.*\/\Q$config{discussionpage}\E$/ &&
(length $config{cgiurl} ||
- exists $links{$page."/".$discussionlink})) {
+ exists $links{$page."/".$config{discussionpage}})) {
$template->param(have_actions => 1);
$template->param(discussionlink =>
htmllink($page,
$params{destpage},
- gettext("Discussion"),
+ $config{discussionpage},
noimageinline => 1,
forcesubpage => 1));
}
diff --git a/IkiWiki/Plugin/opendiscussion.pm b/IkiWiki/Plugin/opendiscussion.pm
index 60b193eca..1bec4b013 100644
--- a/IkiWiki/Plugin/opendiscussion.pm
+++ b/IkiWiki/Plugin/opendiscussion.pm
@@ -23,8 +23,7 @@ sub canedit ($$) {
my $cgi=shift;
my $session=shift;
- my $discussion=lc(gettext("Discussion"));
- return "" if $page=~/(\/|^)\Q$discussion\E$/;
+ return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/;
return undef;
}
diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm
index 7c938ef74..711226772 100644
--- a/IkiWiki/Plugin/orphans.pm
+++ b/IkiWiki/Plugin/orphans.pm
@@ -27,23 +27,16 @@ sub preprocess (@) {
# register a dependency.
add_depends($params{page}, $params{pages});
- my %linkedto;
- foreach my $p (keys %links) {
- map { $linkedto{bestlink($p, $_)}=1 if length $_ }
- @{$links{$p}};
- }
-
my @orphans;
- my $discussion=lc(gettext("Discussion"));
foreach my $page (pagespec_match_list(
- [ grep { ! $linkedto{$_} && $_ ne 'index' }
+ [ grep { ! IkiWiki::backlink_pages($_) && $_ ne 'index' }
keys %pagesources ],
$params{pages}, location => $params{page})) {
# If the page has a link to some other page, it's
# indirectly linked to a page via that page's backlinks.
next if grep {
length $_ &&
- ($_ !~ /\/\Q$discussion\E$/i || ! $config{discussion}) &&
+ ($_ !~ /\/\Q$config{discussionpage}\E$/i || ! $config{discussion}) &&
bestlink($page, $_) !~ /^(\Q$page\E|)$/
} @{$links{$page}};
push @orphans, $page;
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 52677076e..b8967058e 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -284,17 +284,16 @@ sub pagetemplate (@) {
map add_depends($page, $_), (values %{otherlanguages($page)});
}
if ($config{discussion} && istranslation($page)) {
- my $discussionlink=gettext("discussion");
- if ($page !~ /.*\/\Q$discussionlink\E$/i &&
+ if ($page !~ /.*\/\Q$config{discussionpage}\E$/i &&
(length $config{cgiurl} ||
- exists $links{$masterpage."/".$discussionlink})) {
+ exists $links{$masterpage."/".lc($config{discussionpage})})) {
$template->param('discussionlink' => htmllink(
$page,
$destpage,
- $masterpage . '/' . gettext("Discussion"),
+ $masterpage . '/' . $config{discussionpage},
noimageinline => 1,
forcesubpage => 0,
- linktext => gettext("Discussion"),
+ linktext => $config{discussionpage},
));
}
}
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index fc8f287ce..578142d2e 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -8,26 +8,31 @@ use IkiWiki;
use Encode;
my %backlinks;
-my $backlinks_calculated=0;
+our %brokenlinks;
+my $links_calculated=0;
-sub calculate_backlinks () {
- return if $backlinks_calculated;
- %backlinks=();
+sub calculate_links () {
+ return if $links_calculated;
+ %backlinks=%brokenlinks=();
foreach my $page (keys %links) {
foreach my $link (@{$links{$page}}) {
my $bestlink=bestlink($page, $link);
- if (length $bestlink && $bestlink ne $page) {
- $backlinks{$bestlink}{$page}=1;
+ if (length $bestlink) {
+ $backlinks{$bestlink}{$page}=1
+ if $bestlink ne $page;
+ }
+ else {
+ push @{$brokenlinks{$link}}, $page;
}
}
}
- $backlinks_calculated=1;
+ $links_calculated=1;
}
sub backlink_pages ($) {
my $page=shift;
- calculate_backlinks();
+ calculate_links();
return keys %{$backlinks{$page}};
}
@@ -83,11 +88,10 @@ sub genpage ($$) {
$actions++;
}
if ($config{discussion}) {
- my $discussionlink=lc(gettext("Discussion"));
- if ($page !~ /.*\/\Q$discussionlink\E$/ &&
+ if ($page !~ /.*\/\Q$config{discussionpage}\E$/ &&
(length $config{cgiurl} ||
- exists $links{$page."/".$discussionlink})) {
- $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), noimageinline => 1, forcesubpage => 1));
+ exists $links{$page."/".$config{discussionpage}})) {
+ $template->param(discussionlink => htmllink($page, $page, $config{discussionpage}, noimageinline => 1, forcesubpage => 1));
$actions++;
}
}
@@ -153,7 +157,7 @@ sub scan ($) {
if ($config{discussion}) {
# Discussion links are a special case since they're
# not in the text of the page, but on its template.
- $links{$page}=[ $page."/".lc(gettext("Discussion")) ];
+ $links{$page}=[ $page."/".lc($config{discussionpage}) ];
}
else {
$links{$page}=[];
@@ -417,7 +421,7 @@ sub refresh () {
debug(sprintf(gettext("scanning %s"), $file));
scan($file);
}
- calculate_backlinks();
+ calculate_links();
foreach my $file (@needsbuild) {
debug(sprintf(gettext("building %s"), $file));
render($file);