]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/po.pm
Merge branch 'master' into dependency-types
[git.ikiwiki.info.git] / IkiWiki / Plugin / po.pm
index 103347c3776f20980ce75b9203614b102f694e2d..5d0d9e79dd26074344a642f524d098101e4a21c8 100644 (file)
@@ -51,6 +51,8 @@ sub import {
        hook(type => "formbuilder_setup", id => "po", call => \&formbuilder_setup, last => 1);
        hook(type => "formbuilder", id => "po", call => \&formbuilder);
 
+       $origsubs{'bestlink'}=\&IkiWiki::bestlink;
+       inject(name => "IkiWiki::bestlink", call => \&mybestlink);
        $origsubs{'beautify_urlpath'}=\&IkiWiki::beautify_urlpath;
        inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath);
        $origsubs{'targetpage'}=\&IkiWiki::targetpage;
@@ -59,6 +61,8 @@ sub import {
        inject(name => "IkiWiki::urlto", call => \&myurlto);
        $origsubs{'cgiurl'}=\&IkiWiki::cgiurl;
        inject(name => "IkiWiki::cgiurl", call => \&mycgiurl);
+       $origsubs{'rootpage'}=\&IkiWiki::rootpage;
+       inject(name => "IkiWiki::rootpage", call => \&myrootpage);
 }
 
 
@@ -151,10 +155,6 @@ sub checkconfig () {
                warn(gettext('po_link_to=negotiated requires usedirs to be enabled, falling back to po_link_to=default'));
                $config{po_link_to}='default';
        }
-       unless ($config{po_link_to} eq 'default') {
-               $origsubs{'bestlink'}=\&IkiWiki::bestlink;
-               inject(name => "IkiWiki::bestlink", call => \&mybestlink);
-       }
 
        push @{$config{wiki_file_prune_regexps}}, qr/\.pot$/;
 
@@ -558,19 +558,20 @@ sub formbuilder (@) {
 # `----
 
 # Implement po_link_to 'current' and 'negotiated' settings.
-# Not injected otherwise.
 sub mybestlink ($$) {
        my $page=shift;
        my $link=shift;
 
+       return $origsubs{'bestlink'}->($page, $link)
+               if $config{po_link_to} eq "default";
+
        my $res=$origsubs{'bestlink'}->(masterpage($page), $link);
        my @caller = caller(1);
        if (length $res
            && istranslatable($res)
            && istranslation($page)
-           # keep masterpage as the rootpage for inline's post form
-           && !(exists $caller[3] && defined $caller[3]
-                && ($caller[3] eq "IkiWiki::rootpage"))) {
+           &&  !(exists $caller[3] && defined $caller[3]
+                 && ($caller[3] eq "IkiWiki::PageSpec::match_link"))) {
                return $res . "." . lang($page);
        }
        return $res;
@@ -653,6 +654,22 @@ sub mycgiurl (@) {
        return $origsubs{'cgiurl'}->(%params);
 }
 
+sub myrootpage (@) {
+       my %params=@_;
+
+       my $rootpage;
+       if (exists $params{rootpage}) {
+               $rootpage=$origsubs{'bestlink'}->($params{page}, $params{rootpage});
+               if (!length $rootpage) {
+                       $rootpage=$params{rootpage};
+               }
+       }
+       else {
+               $rootpage=masterpage($params{page});
+       }
+       return $rootpage;
+}
+
 # ,----
 # | Blackboxes for private data
 # `----