From: intrigeri <intrigeri@boum.org>
Date: Mon, 13 Oct 2008 20:07:21 +0000 (+0200)
Subject: po plugin: created OTHERLANGUAGES template loop
X-Git-Tag: 3.15~442
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/a28559798ad8c60e79fe80f109dd8e63204cd208

po plugin: created OTHERLANGUAGES template loop

It currently only provides basic translations/master pages links.
Updated documentation accordingly.

Signed-off-by: intrigeri <intrigeri@boum.org>
---

diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 0c95f6c14..88985cd12 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -25,6 +25,7 @@ sub import {
 	hook(type => "tweakbestlink", id => "po", call => \&tweakbestlink);
 	hook(type => "filter", id => "po", call => \&filter);
 	hook(type => "htmlize", id => "po", call => \&htmlize);
+	hook(type => "pagetemplate", id => "po", call => \&pagetemplate);
 }
 
 sub getsetup () { #{{{
@@ -198,6 +199,49 @@ sub htmlize (@) { #{{{
 	return IkiWiki::htmlize($page, $page, pagetype($masterfile), $content);
 } #}}}
 
+sub otherlanguages ($) { #{{{
+	my $page=shift;
+	my @ret;
+	if (istranslatable($page)) {
+		foreach my $lang (sort keys %{$translations{$page}}) {
+			push @ret, {
+				url => urlto($translations{$page}{$lang}, $page),
+				code => $lang,
+				language => $config{po_slave_languages}{$lang},
+				master => 0,
+			};
+		}
+	}
+	elsif (istranslation($page)) {
+		my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+		push @ret, {
+			url => urlto($masterpage, $page),
+			code => $config{po_master_language}{code},
+			language => $config{po_master_language}{name},
+			master => 1,
+		};
+		foreach my $lang (sort keys %{$translations{$masterpage}}) {
+			push @ret, {
+				url => urlto($translations{$masterpage}{$lang}, $page),
+				code => $lang,
+				language => $config{po_slave_languages}{$lang},
+				master => 0,
+			} unless ($lang eq $curlang);
+		}
+	}
+	return @ret;
+} #}}}
+
+sub pagetemplate (@) { #{{{
+	my %params=@_;
+        my $page=$params{page};
+        my $template=$params{template};
+
+	if ($template->query(name => "otherlanguages")) {
+		$template->param(otherlanguages => [otherlanguages($page)]);
+	}
+} # }}}
+
 sub istranslatable ($) { #{{{
 	my $page=shift;
 	my $file=$pagesources{$page};
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index 28b69e04b..d8cde9cb8 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -93,6 +93,29 @@ page's language, *i.e.*:
 - `foo/page.LL.html` if `usedirs` is disabled
 
 
+Templates
+---------
+
+The `OTHERLANGUAGES` loop provides ways to display the existing
+translations and/or master page. One typically adds the following code
+to `templates/page.tmpl`:
+
+	<TMPL_IF NAME="OTHERLANGUAGES">
+	<div id="otherlanguages">
+	  <ul>
+	  <TMPL_LOOP NAME="OTHERLANGUAGES">
+	    <li>
+	      <a href="<TMPL_VAR NAME="URL">"
+	         class="is_master_<TMPL_VAR NAME="MASTER">">
+	      <TMPL_VAR NAME="LANGUAGE">
+	    </a>
+	    </li>
+	  </TMPL_LOOP>
+	  </ul>
+	</div>
+	</TMPL_IF>
+
+
 Server support
 ==============
 
@@ -123,12 +146,11 @@ lighttpd unfortunately does not support content negotiation.
 TODO
 ====
 
-Display available translations
-------------------------------
+Link relationships
+------------------
 
-The [[linguas|plugins/contrib/linguas]] plugin has some code that can
-be used as a basis to display the existing translations, and allow to
-navigate between them.
+Should pages using the `OTHERLANGUAGES` template loop be declared as
+linking to the same page in other versions?
 
 View translation status
 -----------------------
@@ -138,10 +160,14 @@ completeness, either for a given page or for the whole wiki.
 
 This should not be too hard using gettext tools. If this is
 implemented as a
-[[HTML::Template|http://search.cpan.org/search?mode=dist&query=HTML%3A%3ATemplate]]
+[HTML::Template](http://search.cpan.org/search?mode=dist&query=HTML%3A%3ATemplate)
 loop, a page using it should depend on any "master" and "slave" pages
 whose status is being displayed.
 
+If it's not too heavy to compute, this status data may be made
+available in the `OTHERLANGUAGES` template loop; else, a dedicated
+loop would be needed.
+
 Automatic PO files update
 -------------------------