diff options
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/brokenlinks.pm | 31 | ||||
-rw-r--r-- | IkiWiki/Plugin/editpage.pm | 5 | ||||
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 7 | ||||
-rw-r--r-- | IkiWiki/Plugin/opendiscussion.pm | 3 | ||||
-rw-r--r-- | IkiWiki/Plugin/orphans.pm | 11 | ||||
-rw-r--r-- | IkiWiki/Plugin/po.pm | 9 | ||||
-rw-r--r-- | IkiWiki/Render.pm | 32 |
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); |