]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/po.pm
move contrib/po to po/discussion
[git.ikiwiki.info.git] / IkiWiki / Plugin / po.pm
index f25beba7236c69c742686d0f7ade6daa0f24a25d..cdb9271e4529ff31bef653d5154ff34808629cf4 100644 (file)
@@ -32,7 +32,7 @@ sub import {
        hook(type => "getsetup", id => "po", call => \&getsetup);
        hook(type => "checkconfig", id => "po", call => \&checkconfig);
        hook(type => "needsbuild", id => "po", call => \&needsbuild);
-       hook(type => "scan", id => "po", call => \&scan, last =>1);
+       hook(type => "scan", id => "po", call => \&scan, last => 1);
        hook(type => "filter", id => "po", call => \&filter);
        hook(type => "htmlize", id => "po", call => \&htmlize);
        hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
@@ -141,9 +141,7 @@ sub checkconfig () {
            ! defined $config{po_link_to}) {
                $config{po_link_to}='default';
        }
-       elsif (! grep {
-                       $config{po_link_to} eq $_
-               } ('default', 'current', 'negotiated')) {
+       elsif ($config{po_link_to} !~ /^(default|current|negotiated)$/) {
                warn(sprintf(gettext('%s is not a valid value for po_link_to, falling back to po_link_to=default'),
                             $config{po_link_to}));
                $config{po_link_to}='default';
@@ -180,8 +178,6 @@ sub scan (@) {
        my $page=$params{page};
        my $content=$params{content};
 
-       return unless UNIVERSAL::can("IkiWiki::Plugin::link", "import");
-
        if (istranslation($page)) {
                foreach my $destpage (@{$links{$page}}) {
                        if (istranslatable($destpage)) {
@@ -264,22 +260,20 @@ sub pagetemplate (@) {
                $template->param(otherlanguages => [otherlanguagesloop($page)]);
                map add_depends($page, $_), (values %{otherlanguages($page)});
        }
-       # Rely on IkiWiki::Render's genpage() to decide wether
-       # a discussion link should appear on $page; this is not
-       # totally accurate, though: some broken links may be generated
-       # when cgiurl is disabled.
-       # This compromise avoids some code duplication, and will probably
-       # prevent future breakage when ikiwiki internals change.
-       # Known limitations are preferred to future random bugs.
-       if ($template->param('discussionlink') && istranslation($page)) {
-               $template->param('discussionlink' => htmllink(
-                       $page,
-                       $destpage,
-                       $masterpage . '/' . gettext("Discussion"),
-                       noimageinline => 1,
-                       forcesubpage => 0,
-                       linktext => gettext("Discussion"),
+       if ($config{discussion} && istranslation($page)) {
+               my $discussionlink=gettext("discussion");
+               if ($page !~ /.*\/\Q$discussionlink\E$/i &&
+                  (length $config{cgiurl} ||
+                   exists $links{$masterpage."/".$discussionlink})) {
+                       $template->param('discussionlink' => htmllink(
+                               $page,
+                               $destpage,
+                               $masterpage . '/' . gettext("Discussion"),
+                               noimageinline => 1,
+                               forcesubpage => 0,
+                               linktext => gettext("Discussion"),
                ));
+               }
        }
        # Remove broken parentlink to ./index.html on home page's translations.
        # It works because this hook has the "last" parameter set, to ensure it
@@ -292,7 +286,7 @@ sub pagetemplate (@) {
 } # }}}
 
 # Add the renamed page translations to the list of to-be-renamed pages.
-sub renamepages(@) {
+sub renamepages (@) {
        my %params = @_;
 
        my %torename = %{$params{torename}};
@@ -328,13 +322,13 @@ sub renamepages(@) {
        return @ret;
 }
 
-sub mydelete(@) {
+sub mydelete (@) {
        my @deleted=@_;
 
        map { deletetranslations($_) } grep istranslatablefile($_), @deleted;
 }
 
-sub change(@) {
+sub change (@) {
        my @rendered=@_;
 
        # All meta titles are first extracted at scan time, i.e. before we turn
@@ -342,14 +336,14 @@ sub change(@) {
        # PO files breaks the meta plugin's parsing enough to save ugly titles
        # to %pagestate at this time.
        #
-       # Then, at render time, every page's passes on row through the Great
+       # Then, at render time, every page passes in turn through the Great
        # Rendering Chain (filter->preprocess->linkify->htmlize), and the meta
        # plugin's preprocess hook is this time in a position to correctly
        # extract the titles from slave pages.
        #
-       # This is, unfortunately, too late: if the page A, linking to the page B,
-       # is rendered before B, it will display the wrongly-extracted meta title
-       # as the link text to B.
+       # This is, unfortunately, too late: if the page A, linking to the page
+       # B, is rendered before B, it will display the wrongly-extracted meta
+       # title as the link text to B.
        #
        # On the one hand, such a corner case only happens on rebuild: on
        # refresh, every rendered page is fixed to contain correct meta titles.
@@ -788,9 +782,10 @@ sub refreshpot ($) {
        $doc->{TT}{file_in_charset} = 'utf-8';
        $doc->{TT}{file_out_charset} = 'utf-8';
        $doc->read($masterfile);
-       # let's cheat a bit to force porefs option to be passed to Locale::Po4a::Po;
-       # this is undocument use of internal Locale::Po4a::TransTractor's data,
-       # compulsory since this module prevents us from using the porefs option.
+       # let's cheat a bit to force porefs option to be passed to
+       # Locale::Po4a::Po; this is undocument use of internal
+       # Locale::Po4a::TransTractor's data, compulsory since this module
+       # prevents us from using the porefs option.
        $doc->{TT}{po_out}=Locale::Po4a::Po->new({ 'porefs' => 'none' });
        $doc->{TT}{po_out}->set_charset('utf-8');
        # do the actual work