inject(name => "IkiWiki::targetpage", call => \&mytargetpage);
$origsubs{'urlto'}=\&IkiWiki::urlto;
inject(name => "IkiWiki::urlto", call => \&myurlto);
+ $origsubs{'nicepagetitle'}=\&IkiWiki::nicepagetitle;
+ inject(name => "IkiWiki::nicepagetitle", call => \&mynicepagetitle);
} #}}}
foreach my $rename (@torename) {
next unless istranslatable($rename->{src});
- setrenamed($rename->{src}, $rename->{dest});
my %otherpages=%{otherlanguages($rename->{src})};
- debug "bla".$rename->{src};
while (my ($lang, $otherpage) = each %otherpages) {
push @{$torename}, {
src => $otherpage,
destfile => $rename->{dest}.".".$lang.".po",
required => 0,
};
- debug "po(renamepages): pushed src=$otherpage, dest=".otherlanguage($rename->{dest}, $lang);
}
}
} #}}}
map {
deletetranslations($_);
- } grep { istranslatablefile($_) && ! renamed(pagename($_))} @deleted;
+ } grep { istranslatablefile($_) } @deleted;
} #}}}
sub change(@) { #{{{
my @rendered=@_;
- my $eachrenamed=eachrenamed();
- while (my ($oldpage, $newpage) = $eachrenamed->()) {
- renametranslations($oldpage, $newpage);
- }
- resetrenamed();
-
my $updated_po_files=0;
# Refresh/create POT and PO files as needed.
}
if ($updated_po_files) {
- # Check staged changes in.
- if ($config{rcs}) {
- IkiWiki::disable_commit_hook();
- IkiWiki::rcs_commit_staged(gettext("updated PO files"),
- "IkiWiki::Plugin::po::change", "127.0.0.1");
- IkiWiki::enable_commit_hook();
- IkiWiki::rcs_update();
- }
- # Reinitialize module's private variables.
- resetalreadyfiltered();
- resettranslationscache();
- flushmemoizecache();
- # Trigger a wiki refresh.
- require IkiWiki::Render;
- # without preliminary saveindex/loadindex, refresh()
- # complains about a lot of uninitialized variables
- IkiWiki::saveindex();
- IkiWiki::loadindex();
- IkiWiki::refresh();
- IkiWiki::saveindex();
+ commit_and_refresh(
+ gettext("updated PO files"),
+ "IkiWiki::Plugin::po::change");
}
} #}}}
&& istranslatable('index')) {
return IkiWiki::beautify_urlpath(IkiWiki::baseurl($from) . "index." . lang($from) . ".$config{htmlext}");
}
- return $origsubs{'urlto'}->($to,$from,$absolute);
+ # avoid using our injected beautify_urlpath if run by cgi_editpage,
+ # so that one is redirected to the just-edited page rather than to the
+ # negociated translation; to prevent unnecessary fiddling with caller/inject,
+ # we only do so when our beautify_urlpath would actually do what we want to
+ # avoid, i.e. when po_link_to = negotiated
+ if ($config{po_link_to} eq "negotiated") {
+ my @caller = caller(1);
+ my $run_by_editpage = ($caller[3] eq "IkiWiki::cgi_editpage");
+ inject(name => "IkiWiki::beautify_urlpath", call => $origsubs{'beautify_urlpath'})
+ if $run_by_editpage;
+ my $res = $origsubs{'urlto'}->($to,$from,$absolute);
+ inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath)
+ if $run_by_editpage;
+ return $res;
+ }
+ else {
+ return $origsubs{'urlto'}->($to,$from,$absolute)
+ }
} #}}}
+sub mynicepagetitle ($;$) { #{{{
+ my ($page, $unescaped) = (shift, shift);
+
+ my $res = $origsubs{'nicepagetitle'}->($page, $unescaped);
+ return $res unless istranslation($page);
+ return $res." (".percenttranslated($page).")";
+} #}}}
# ,----
# | Blackboxes for private data
} #}}}
}
-{
- my %renamed;
-
- sub renamed ($) { #{{{
- my $page=shift;
-
- if (exists $renamed{$page} &&
- defined $renamed{$page}) {
- return $renamed{$page};
- }
- return;
- } #}}}
-
- sub setrenamed ($$) { #{{{
- my $oldpage=shift;
- my $newpage=shift;
-
- $renamed{$oldpage}=$newpage;
- } #}}}
-
- sub resetrenamed () { #{{{
- undef %renamed;
- } #}}}
-
- sub eachrenamed () { #{{{
- return sub { each %renamed };
- } #}}}
-}
-
# ,----
# | Helper functions
# `----
sub deletetranslations ($) { #{{{
my $deletedmasterfile=shift;
- debug "po(deletetranslations): TODO: delete translations of $deletedmasterfile";
-} #}}}
+ my $deletedmasterpage=pagename($deletedmasterfile);
+ my @todelete;
+ map {
+ my $file = newpagefile($deletedmasterpage.'.'.$_, 'po');
+ my $absfile = "$config{srcdir}/$file";
+ if (-e $absfile && ! -l $absfile && ! -d $absfile) {
+ push @todelete, $file;
+ }
+ } keys %{$config{po_slave_languages}};
-sub renametranslations (@) { #{{{
- my ($oldpage, $newpage)=(shift, shift);
+ map {
+ if ($config{rcs}) {
+ IkiWiki::rcs_remove($_);
+ }
+ else {
+ IkiWiki::prune("$config{srcdir}/$_");
+ }
+ } @todelete;
- # FIXME - not needed anymore : debug "po(renametranslations): TODO: rename translations of $oldpage to $newpage";
-
+ if (scalar @todelete) {
+ commit_and_refresh(
+ gettext("removed obsolete PO files"),
+ "IkiWiki::Plugin::po::deletetranslations");
+ }
} #}}}
+sub commit_and_refresh ($$) { #{{{
+ my ($msg, $author) = (shift, shift);
+
+ if ($config{rcs}) {
+ IkiWiki::disable_commit_hook();
+ IkiWiki::rcs_commit_staged($msg, $author, "127.0.0.1");
+ IkiWiki::enable_commit_hook();
+ IkiWiki::rcs_update();
+ }
+ # Reinitialize module's private variables.
+ resetalreadyfiltered();
+ resettranslationscache();
+ flushmemoizecache();
+ # Trigger a wiki refresh.
+ require IkiWiki::Render;
+ # without preliminary saveindex/loadindex, refresh()
+ # complains about a lot of uninitialized variables
+ IkiWiki::saveindex();
+ IkiWiki::loadindex();
+ IkiWiki::refresh();
+ IkiWiki::saveindex();
+} #}}}
# ,----
# | PageSpec's