]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/po.pm
po: pages in underlay dirs are not translatable
[ikiwiki.git] / IkiWiki / Plugin / po.pm
index a307e5d6b4171308702b8030cc43b7865bcdd120..babf483a75237710454cb0297fa6a6ca1bbaad69 100644 (file)
@@ -56,6 +56,8 @@ sub import {
        inject(name => "IkiWiki::urlto", call => \&myurlto);
        $origsubs{'nicepagetitle'}=\&IkiWiki::nicepagetitle;
        inject(name => "IkiWiki::nicepagetitle", call => \&mynicepagetitle);
+       $origsubs{'cgiurl'}=\&IkiWiki::cgiurl;
+       inject(name => "IkiWiki::cgiurl", call => \&mycgiurl);
 }
 
 
@@ -593,9 +595,22 @@ sub mynicepagetitle ($;$) {
        my $res = $origsubs{'nicepagetitle'}->($page, $unescaped);
        return $res unless istranslation($page);
        return $res unless $config{po_translation_status_in_links};
+       my @caller = caller(1);
+       return $res if (exists $caller[3] && defined $caller[3]
+                       && $caller[3] eq "IkiWiki::Plugin::parentlinks::parentlinks");
        return $res.' ('.percenttranslated($page).' %)';
 }
 
+sub mycgiurl (@) {
+       my %params=@_;
+
+       # slave pages have no subpages
+       if (istranslation($params{'from'})) {
+               $params{'from'} = masterpage($params{'from'});
+       }
+       return $origsubs{'cgiurl'}->(%params);
+}
+
 # ,----
 # | Blackboxes for private data
 # `----
@@ -650,6 +665,7 @@ sub istranslatablefile ($) {
        return 0 unless defined $file;
        return 0 if (defined pagetype($file) && pagetype($file) eq 'po');
        return 0 if $file =~ /\.pot$/;
+       return 0 unless -e "$config{srcdir}/$file"; # underlay dirs may be read-only
        return 1 if pagespec_match(pagename($file), $config{po_translatable_pages});
        return;
 }
@@ -665,6 +681,7 @@ sub istranslatable ($) {
 sub _istranslation ($) {
        my $page=shift;
 
+       $page='' unless (defined $page && length $page);
        my $hasleadingslash = ($page=~s#^/##);
        my $file=$pagesources{$page};
        return 0 unless (defined $file