aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmitai Schlair <schmonz-web-ikiwiki@schmonz.com>2013-05-12 19:16:50 -0400
committerAmitai Schlair <schmonz-web-ikiwiki@schmonz.com>2013-05-12 19:16:50 -0400
commitd33b31f70638025f19fdfa03a8c2e609faca792a (patch)
tree6e690b5d07442d38d7ed32581d5884af682272dd
parent4a108fa36b4c6a7d8436c37be55ed35675211997 (diff)
parent69525cf0fcd02874683c9e08e5c4eae82023b681 (diff)
downloadikiwiki-d33b31f70638025f19fdfa03a8c2e609faca792a.tar
ikiwiki-d33b31f70638025f19fdfa03a8c2e609faca792a.tar.gz
Merge branch 'master' into fancypodcast
-rw-r--r--IkiWiki/Plugin/meta.pm4
-rwxr-xr-xMakefile.PL2
-rw-r--r--debian/changelog15
-rw-r--r--doc/bugs/capitalized_attachment_names.mdwn14
-rw-r--r--doc/forum/How_do_I_enable_OpenID__63__.mdwn1
-rw-r--r--doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn7
-rw-r--r--doc/forum/Refresh_or_recreate_style.css__63__.mdwn40
-rw-r--r--doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment8
-rw-r--r--doc/forum/google_openid_broken__63__.mdwn3
-rw-r--r--doc/git.mdwn1
-rw-r--r--doc/ikiwiki/directive/tag/discussion.mdwn13
-rw-r--r--doc/ikiwikiusers.mdwn3
-rw-r--r--doc/news/openid.mdwn2
-rw-r--r--doc/news/version_3.20120725.mdwn13
-rw-r--r--doc/news/version_3.20130504.mdwn11
-rw-r--r--doc/plugins/contrib/livefyre.mdwn14
-rw-r--r--doc/plugins/contrib/mediawiki/discussion.mdwn4
-rw-r--r--doc/plugins/contrib/proxies.mdwn2
-rw-r--r--doc/plugins/type/auth.mdwn2
-rw-r--r--doc/plugins/type/bundle.mdwn2
-rw-r--r--doc/plugins/type/chrome.mdwn2
-rw-r--r--doc/plugins/type/comments.mdwn2
-rw-r--r--doc/plugins/type/core.mdwn2
-rw-r--r--doc/plugins/type/date.mdwn2
-rw-r--r--doc/plugins/type/format.mdwn2
-rw-r--r--doc/plugins/type/fun.mdwn2
-rw-r--r--doc/plugins/type/html.mdwn2
-rw-r--r--doc/plugins/type/link.mdwn2
-rw-r--r--doc/plugins/type/meta.mdwn2
-rw-r--r--doc/plugins/type/slow.mdwn2
-rw-r--r--doc/plugins/type/special-purpose.mdwn2
-rw-r--r--doc/plugins/type/tags.mdwn2
-rw-r--r--doc/plugins/type/web.mdwn2
-rw-r--r--doc/plugins/type/widget.mdwn2
-rw-r--r--doc/sandbox.mdwn5
-rw-r--r--doc/test.mdwn1
-rw-r--r--doc/tips/DreamHost.mdwn1
-rw-r--r--doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn243
-rw-r--r--doc/tips/mailman_subscription_form.mdwn10
-rw-r--r--doc/todo/BTS_integration.mdwn2
-rw-r--r--doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn44
-rw-r--r--doc/todo/Separate_OpenIDs_and_usernames.mdwn2
-rw-r--r--doc/todo/assumes_system_perl.mdwn4
-rw-r--r--doc/todo/calendar_with___34__create__34___links.mdwn10
-rw-r--r--doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl36
-rw-r--r--doc/todo/toc-with-human-readable-anchors.mdwn7
-rw-r--r--doc/todo/translation_links.mdwn46
-rw-r--r--doc/translation/discussion.mdwn2
-rw-r--r--doc/wishlist/watched_pages.mdwn1
-rw-r--r--ikiwiki.spec2
-rw-r--r--po/ikiwiki.pot2
-rwxr-xr-xt/map.t9
52 files changed, 586 insertions, 30 deletions
diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
index f5b9bb521..794f6d861 100644
--- a/IkiWiki/Plugin/meta.pm
+++ b/IkiWiki/Plugin/meta.pm
@@ -107,12 +107,12 @@ sub preprocess (@) {
# fallthrough
}
elsif ($key eq 'license') {
- push @{$metaheaders{$page}}, '<link rel="license" href="#page_license" />';
+ push @{$metaheaders{$page}}, '<link rel="license" href="#pagelicense" />';
$pagestate{$page}{meta}{license}=$value;
return "";
}
elsif ($key eq 'copyright') {
- push @{$metaheaders{$page}}, '<link rel="copyright" href="#page_copyright" />';
+ push @{$metaheaders{$page}}, '<link rel="copyright" href="#pagecopyright" />';
$pagestate{$page}{meta}{copyright}=$value;
return "";
}
diff --git a/Makefile.PL b/Makefile.PL
index ef29a950c..f1df8bcd3 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -96,7 +96,7 @@ underlay_install:
install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme; \
for file in $$theme/*; do \
if echo "$$file" | grep -q style.css; then \
- (cat doc/style.css; cat $$theme/base.css 2>/dev/null; cat $$file) >> $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
+ (cat doc/style.css; cat $$theme/base.css 2>/dev/null; cat $$file) > $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
elif echo "$$file" | grep -q base.css; then \
:; \
elif [ -f "$$file" ]; then \
diff --git a/debian/changelog b/debian/changelog
index 1657ffcb6..e6d39fa27 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,12 +1,23 @@
-ikiwiki (3.20130213) UNRELEASED; urgency=low
+ikiwiki (3.20130505) UNRELEASED; urgency=low
+
+ * Fix test suite to not fail when XML::Twig is not installed.
+ Closes: #707436
+
+ -- Joey Hess <joeyh@debian.org> Thu, 09 May 2013 10:47:18 -0400
+
+ikiwiki (3.20130504) unstable; urgency=low
* Allow dots in directive parameter names. (tango)
* Add missing plugin section, and deal with missing sections with a warning.
* Detect plugins with a broken getsetup and warn.
* map: Correct reversion introduced in version 3.20110225 that could
generate invalid html. (smcv)
+ * Makefile.PL: overwrite theme style.css instead of appending
+ (Thanks, Mikko Rapeli)
+ * meta: Fix anchors used to link to the page's license and copyright.
+ Closes: #706437
- -- Joey Hess <joeyh@debian.org> Fri, 15 Feb 2013 17:23:12 -0400
+ -- Joey Hess <joeyh@debian.org> Sat, 04 May 2013 23:47:21 -0400
ikiwiki (3.20130212) unstable; urgency=low
diff --git a/doc/bugs/capitalized_attachment_names.mdwn b/doc/bugs/capitalized_attachment_names.mdwn
new file mode 100644
index 000000000..b10781bf7
--- /dev/null
+++ b/doc/bugs/capitalized_attachment_names.mdwn
@@ -0,0 +1,14 @@
+Given an uploaded image via: \[\[!img NAME.svg alt="image"\]\]
+
+Viewing the generated page shows the following error:
+
+"\[\[!img Error: failed to read name.svg: Exception 420: no decode delegate for this image format `/home/user/path/name.svg' @ error/svg.c/ReadSVGImage/2815\]\]"
+
+The caps in the image title were somehow converted to small letters and then the image is saved as a directory. Very puzzling.
+I get the same error when image names are small letters.
+
+The error also occurs with png images.
+
+How do I fix this?
+
+Later investigation ... I got around the problem by creating the mark-up in a new directory. However, if I try to create a new directory with the same name as the directory containing the problem code, the problem re-emerges -- the old directory is apparently not overwritten. Perhaps this is an issue with the git storage.
diff --git a/doc/forum/How_do_I_enable_OpenID__63__.mdwn b/doc/forum/How_do_I_enable_OpenID__63__.mdwn
new file mode 100644
index 000000000..a4e1a4531
--- /dev/null
+++ b/doc/forum/How_do_I_enable_OpenID__63__.mdwn
@@ -0,0 +1 @@
+I'm trying to set up a new ikiwiki based blog and I want commentors to be able to log in with OpenID. To enable OpenID I installed Net::OpenID::Consumer, and enabled the openid plugin in my blog.setup file and ran the ikiwiki --setup command. Despite doing that I still only see the username and password in the login screen. What am I missing?
diff --git a/doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn b/doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn
new file mode 100644
index 000000000..dc1b31cd8
--- /dev/null
+++ b/doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn
@@ -0,0 +1,7 @@
+Has anyone else created ikiwiki themes for mobile devices like phones and tablets?
+
+I've been using Blueview theme for a few years and finally tried to adapt the theme for my phone.
+My local.css is [here](http://mcfrisk.kapsi.fi/local.css), and my hobby web page full of images and videos [here](http://mcfrisk.kapsi.fi/skiing/).
+
+Previously I also had problems like wasted screen space, big minimum width and images not scaled down to the CSS element. Those got fixed as well.
+Would be nice if others could test that and maybe share their setups.
diff --git a/doc/forum/Refresh_or_recreate_style.css__63__.mdwn b/doc/forum/Refresh_or_recreate_style.css__63__.mdwn
new file mode 100644
index 000000000..262b0e3c6
--- /dev/null
+++ b/doc/forum/Refresh_or_recreate_style.css__63__.mdwn
@@ -0,0 +1,40 @@
+I was trying to use plain blueview theme but that's not what I see in the installed style.css:
+
+ ~/src/ikiwiki/themes/blueview$ grep bzed style.css
+ /* bzed theme for ikiwiki
+ ~/src/ikiwiki/themes/blueview$ wc -l style.css
+ 281 style.css
+ $ grep bzed ~/www/style.css
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ $ wc -l ~/www/style.css
+ 7913
+
+I have installed ikiwiki to my home directory on the shared server and it seems the big css file is there too:
+
+ $ grep bzed ~/bin/share/ikiwiki/themes/blueview/style.css
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ /* bzed theme for ikiwiki
+ $ wc -l ~/bin/share/ikiwiki/themes/blueview/style.css
+ 7913
+
+Is the style.css really supposed to be that big?
+If not, how to create it from scratch?
+
+Reason why I'm debugging the css is that I'd like to make it better on small handset screens, like drop all margins, inline or hide sidebar etc. Chromium shows that the processed css is quite a mess.
diff --git a/doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment b/doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment
new file mode 100644
index 000000000..608dca0ce
--- /dev/null
+++ b/doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://mcfrisk.myopenid.com/"
+ nickname="mikko.rapeli"
+ subject="bug/feature in Makefile.PL"
+ date="2013-03-30T11:53:41Z"
+ content="""
+Theme style.css files were appended when installing in Makefile.PL. IMO overwriting the destination files is more correct. Sent a patch to Joey.
+"""]]
diff --git a/doc/forum/google_openid_broken__63__.mdwn b/doc/forum/google_openid_broken__63__.mdwn
index 96ba2d791..d25d8fe4c 100644
--- a/doc/forum/google_openid_broken__63__.mdwn
+++ b/doc/forum/google_openid_broken__63__.mdwn
@@ -4,6 +4,9 @@ directly to sign into ikiwiki. Just use, for example,
> This seems to work fine if you use the profile directly as an OpenID. It doesn't seem to work with delegation. From that I can see, this is a deliberate decision by Google for security reasons. See the response [here](http://groups.google.com/group/google-federated-login-api/browse_thread/thread/825067789537568c/23451a68c8b8b057?show_docid=23451a68c8b8b057). -- [[Will]]
+### adding the GMail OpenID as an admin is unhandy
+Adding the non-human-friendly OpenID from Gmail as an admin for ikiwiki (if you haven't set up a profile with a readabe URL) is unhandy; first, you need to discover the URL, for example, by making a web edit with it (like me [here](http://source.ikiwiki.branchable.com/?p=source.git;a=search;s=https://www.google.com/accounts/o8/id%3Fid%3DAItOawl3JW_Ow4xMqj98Ig1vwGx_AnjUSsgwE8E;st=author)), and then copy the URL to ikiwiki.setup. --Ivan Z.
+
## historical discussion
when I login via to this wiki (or ours) via Google's OpenID, I get this error:
diff --git a/doc/git.mdwn b/doc/git.mdwn
index 25a360efd..b743f6175 100644
--- a/doc/git.mdwn
+++ b/doc/git.mdwn
@@ -76,6 +76,7 @@ think about merging them. This is recommended. :-)
* [[ttw]] `git://github.com/ttw/ikiwiki.git`
* [[anarcat]] `git://src.anarcat.ath.cx/ikiwiki`
* anderbubble `git://civilfritz.net/ikiwiki.git`
+* frioux `git://github.com/frioux/ikiwiki`
## branches
diff --git a/doc/ikiwiki/directive/tag/discussion.mdwn b/doc/ikiwiki/directive/tag/discussion.mdwn
new file mode 100644
index 000000000..23352ebe7
--- /dev/null
+++ b/doc/ikiwiki/directive/tag/discussion.mdwn
@@ -0,0 +1,13 @@
+# Tags in HTML pages
+
+http://rhombus-tech.net is an ikiwiki site where the hardware development is expanding: there are now four hardware projects each of which has its own news page. For convenience (putting in images for example), the pages have to use HTML not markdown or any other non-HTML format.
+
+However as there are quite a lot of them it would make sense to have an overview page saying "news reports", and that page to be auto-generated because every individual news page is tagged.
+
+... except the news pages are written in HTML, not any markup language into which a tag can be placed.
+
+question: what is the directive which allows an HTML page to have embedded within it a markup "tag"?
+
+> You can use the tag directive in `.html` pages, just like in `.mdwn` pages. This is if you're using
+> the default html plugin. If you instead use the rawhtml plugin, ikiwiki just copies your html files
+> and directives in them won't work. --[[Joey]]
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 309814558..6b657c8ff 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -87,6 +87,7 @@ Projects & Organizations
* [The Open TV White Space Project](http://opentvws.org)
* [The RS-232 Club](http://rs232club.org)
* [FusionInventory project](http://www.fusioninventory.org)
+* FabLab Deventer i.o.
Personal sites and blogs
========================
@@ -189,4 +190,4 @@ Personal sites and blogs
* [[Martín Ferrari's homepage|http://tincho.org/]] and [[blog|http://blog.tincho.org/]]
* [WikiAtoBR](http://wiki.hi.ato.br) Open, free and annoymous wiki. No need for account registering and login. It is Brazilian so it is in Portuguese.
* [Manifesto](http://manifesto.hi.ato.br) Open, free and annoymous blog. No need for account registering and login. It is Brazilian so it is in Portuguese.
-
+ * [Z is for Zombies](http://blog.zouish.org/) — personal blog/site of Francesca Ciceri
diff --git a/doc/news/openid.mdwn b/doc/news/openid.mdwn
index b13e82146..8f04c5e90 100644
--- a/doc/news/openid.mdwn
+++ b/doc/news/openid.mdwn
@@ -10,4 +10,4 @@ log back in, try out the OpenID signup process if you don't already have an
OpenID, and see how OpenID works for you. And let me know your feelings about
making such a switch. --[[Joey]]
-[[!poll 69 "Accept only OpenID for logins" 21 "Accept only password logins" 44 "Accept both"]]
+[[!poll 70 "Accept only OpenID for logins" 21 "Accept only password logins" 46 "Accept both"]]
diff --git a/doc/news/version_3.20120725.mdwn b/doc/news/version_3.20120725.mdwn
deleted file mode 100644
index 08e2c771f..000000000
--- a/doc/news/version_3.20120725.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-ikiwiki 3.20120725 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * recentchangesdiff: When diffurl is not set, provide inline diffs
- in the recentchanges page, with visibility toggleable via javascript.
- Thanks, Antoine Beaupré
- * Split CFLAGS into words when building wrapper. Closes: #[682237](http://bugs.debian.org/682237)
- * osm: Avoid calling urlto before generated files are registered.
- Thanks, Philippe Gauthier and Antoine Beaupré
- * osm: Add osm\_openlayers\_url configuration setting.
- Thanks, Genevieve
- * osm: osm\_layers can be used to configured the layers displayed on the map.
- Thanks, Antoine Beaupré
- * comments: Remove ipv6 address specific code."""]] \ No newline at end of file
diff --git a/doc/news/version_3.20130504.mdwn b/doc/news/version_3.20130504.mdwn
new file mode 100644
index 000000000..18baf01c4
--- /dev/null
+++ b/doc/news/version_3.20130504.mdwn
@@ -0,0 +1,11 @@
+ikiwiki 3.20130504 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Allow dots in directive parameter names. (tango)
+ * Add missing plugin section, and deal with missing sections with a warning.
+ * Detect plugins with a broken getsetup and warn.
+ * map: Correct reversion introduced in version 3.20110225 that could
+ generate invalid html. (smcv)
+ * Makefile.PL: overwrite theme style.css instead of appending
+ (Thanks, Mikko Rapeli)
+ * meta: Fix anchors used to link to the page's license and copyright.
+ Closes: #[706437](http://bugs.debian.org/706437)"""]] \ No newline at end of file
diff --git a/doc/plugins/contrib/livefyre.mdwn b/doc/plugins/contrib/livefyre.mdwn
new file mode 100644
index 000000000..d4a62c0cc
--- /dev/null
+++ b/doc/plugins/contrib/livefyre.mdwn
@@ -0,0 +1,14 @@
+[[!template id=plugin name=livefyre core=0 author="[[cmauch]]"]]
+[[!tag type/special-purpose]]
+
+[LiveFyre](http://www.livefyre.com) is a third party comment and discussion system similar in some ways to Disqus or IntenseDebate. All three services use javascript to attach comments to your site without the need to use a native commenting system.
+
+This plugin is designed to replace the commenting system in IkiWiki entirely. It embeds LiveFyre comments on your ikiwiki blog or posts. It is was originally based on the [Disqus Plugin](https://code.google.com/p/ikiwiki-plugin-disqus/). After a few days of noticing odd page title names on the livefyre moderation interface, I updated the script to make use of JSON. I made extensive use of the [integration guide](https://github.com/Livefyre/livefyre-docs/wiki/StreamHub-Integration-Guide) to get it all running.
+
+It's loud and messy and slow, but kind of neat too.
+
+Requires the [[!cpan JSON]], [[!cpan JSON::WebToken]], and [[!cpan Digest::MD5]] perl modules to be available.
+
+You can grab the source [here](https://bitbucket.org/cmauch/ikiwiki/src/master/IkiWiki/Plugin/livefyre.pm)
+
+See the POD documention in the module for installation and configuration instructions.
diff --git a/doc/plugins/contrib/mediawiki/discussion.mdwn b/doc/plugins/contrib/mediawiki/discussion.mdwn
index 5066d9de5..c288d9bd1 100644
--- a/doc/plugins/contrib/mediawiki/discussion.mdwn
+++ b/doc/plugins/contrib/mediawiki/discussion.mdwn
@@ -3,3 +3,7 @@ Anyone know a safe place where this plugin can be found? -- mjr at phonecoop.coo
> I ended up doing a backassward way of doing it, as described at the [convert discussion page](http://ikiwiki.info/tips/convert_mediawiki_to_ikiwiki/discussion/). -[[simonraven]]
>> I've mirrored it at <http://alcopop.org/~jon/mediawiki.pm>. -- [[Jon]]
+
+---
+
+Something that gives me better results is to edit the source of the [[wikitext]] plugin, and change all occurences of Text::WikiFormat to Text::MediawikiFormat. (This of course depends on ''libtext-mediawikiformat-perl'' instead of ''libtext-wikiformat-perl'' -- [[gi1242]]
diff --git a/doc/plugins/contrib/proxies.mdwn b/doc/plugins/contrib/proxies.mdwn
index dc53adf29..7f8f5faaf 100644
--- a/doc/plugins/contrib/proxies.mdwn
+++ b/doc/plugins/contrib/proxies.mdwn
@@ -1,6 +1,6 @@
[[!template id=plugin name=proxies author="[[schmonz]]"]]
[[!template id=gitbranch branch=schmonz/proxies author="[[schmonz]]"]]
-[[!tag type/format]]
+[[!tag type/web]]
This plugin enables ikiwiki to open outbound connections (such as
found in [[plugins/aggregate]], [[plugins/openid]], and [[plugins/pinger]])
diff --git a/doc/plugins/type/auth.mdwn b/doc/plugins/type/auth.mdwn
index 400a5bcca..6a1f2d12c 100644
--- a/doc/plugins/type/auth.mdwn
+++ b/doc/plugins/type/auth.mdwn
@@ -1,2 +1,4 @@
These plugins add different authentication methods for logging in to the
wiki and control what pages users can edit.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/bundle.mdwn b/doc/plugins/type/bundle.mdwn
index 0bf049ece..980dbbe57 100644
--- a/doc/plugins/type/bundle.mdwn
+++ b/doc/plugins/type/bundle.mdwn
@@ -1 +1,3 @@
These plugins enable whole bundles of other plugins.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/chrome.mdwn b/doc/plugins/type/chrome.mdwn
index a1c6d0728..73a6e5898 100644
--- a/doc/plugins/type/chrome.mdwn
+++ b/doc/plugins/type/chrome.mdwn
@@ -1 +1,3 @@
These plugins affect the look and feel of the overall wiki.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/comments.mdwn b/doc/plugins/type/comments.mdwn
index 6eaa2c25a..1e4dd7278 100644
--- a/doc/plugins/type/comments.mdwn
+++ b/doc/plugins/type/comments.mdwn
@@ -1 +1,3 @@
These plugins relate to [[plugins/comments]].
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/core.mdwn b/doc/plugins/type/core.mdwn
index 71d93c4a6..2646996ba 100644
--- a/doc/plugins/type/core.mdwn
+++ b/doc/plugins/type/core.mdwn
@@ -1 +1,3 @@
These plugins provide core functionality and are enabled by default.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/date.mdwn b/doc/plugins/type/date.mdwn
index eae1226da..b95a7ecd3 100644
--- a/doc/plugins/type/date.mdwn
+++ b/doc/plugins/type/date.mdwn
@@ -1 +1,3 @@
These plugins control how ikiwiki displays dates.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/format.mdwn b/doc/plugins/type/format.mdwn
index a60d725d8..8a100f963 100644
--- a/doc/plugins/type/format.mdwn
+++ b/doc/plugins/type/format.mdwn
@@ -1 +1,3 @@
These plugins provide ways to format text on wiki pages.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/fun.mdwn b/doc/plugins/type/fun.mdwn
index 4d97c8e66..ad9e9c2e6 100644
--- a/doc/plugins/type/fun.mdwn
+++ b/doc/plugins/type/fun.mdwn
@@ -1 +1,3 @@
These plugins are just for fun.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/html.mdwn b/doc/plugins/type/html.mdwn
index 290208f92..94e13b621 100644
--- a/doc/plugins/type/html.mdwn
+++ b/doc/plugins/type/html.mdwn
@@ -1 +1,3 @@
These plugins generate or process html.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/link.mdwn b/doc/plugins/type/link.mdwn
index c10863fac..fce27ae9c 100644
--- a/doc/plugins/type/link.mdwn
+++ b/doc/plugins/type/link.mdwn
@@ -1 +1,3 @@
These plugins deal with [[WikiLinks|ikiwiki/WikiLink]].
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/meta.mdwn b/doc/plugins/type/meta.mdwn
index cae30cad1..7a339747e 100644
--- a/doc/plugins/type/meta.mdwn
+++ b/doc/plugins/type/meta.mdwn
@@ -1 +1,3 @@
These plugins deal in meta-information about the wiki.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/slow.mdwn b/doc/plugins/type/slow.mdwn
index c0e721585..5907d26f9 100644
--- a/doc/plugins/type/slow.mdwn
+++ b/doc/plugins/type/slow.mdwn
@@ -1,3 +1,5 @@
These plugins can cause wiki rendering to be significantly slowed down,
due to things like needing to run an external program for every page
rendered.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/special-purpose.mdwn b/doc/plugins/type/special-purpose.mdwn
index b6ed04531..7aeb8be9c 100644
--- a/doc/plugins/type/special-purpose.mdwn
+++ b/doc/plugins/type/special-purpose.mdwn
@@ -1 +1,3 @@
Special-purpose plugins.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/tags.mdwn b/doc/plugins/type/tags.mdwn
index bb74066f8..78daebd53 100644
--- a/doc/plugins/type/tags.mdwn
+++ b/doc/plugins/type/tags.mdwn
@@ -1 +1,3 @@
These plugins support tagging.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/web.mdwn b/doc/plugins/type/web.mdwn
index b60e26a29..6ebd6cd37 100644
--- a/doc/plugins/type/web.mdwn
+++ b/doc/plugins/type/web.mdwn
@@ -1 +1,3 @@
These plugins enhance the web interface.
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/plugins/type/widget.mdwn b/doc/plugins/type/widget.mdwn
index 875829d0b..496b7da24 100644
--- a/doc/plugins/type/widget.mdwn
+++ b/doc/plugins/type/widget.mdwn
@@ -1,2 +1,4 @@
These plugins allow inserting various things into pages via a
[[ikiwiki/directive]].
+
+[[!map pages="plugins/* and tagged(.)"]]
diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index c7c91e4fb..3ecd58843 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -13,6 +13,10 @@ hello world
>>> to three levels
>
> Back to the first level.
+>
+> added a line in level 1
+> and another
+
Numbered list
@@ -69,6 +73,7 @@ test _this_ out.
_italic_
+test ms
opopopo
----
diff --git a/doc/test.mdwn b/doc/test.mdwn
deleted file mode 100644
index 8ae056963..000000000
--- a/doc/test.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-# Test
diff --git a/doc/tips/DreamHost.mdwn b/doc/tips/DreamHost.mdwn
index 070638e3e..338bca782 100644
--- a/doc/tips/DreamHost.mdwn
+++ b/doc/tips/DreamHost.mdwn
@@ -176,6 +176,7 @@ Then you'll have to add a few variables to your path [referenced by your compile
export C_INCLUDE_PATH=YOUR_INSTALL_PATH_HERE/include/
export LIBRARY_PATH=YOUR_INSTALL_PATH_HERE/lib/
+ export LD_LIBRARY_PATH=YOUR_INSTALL_PATH_HERE/lib/
Then you should be able to install the module, and it'll be faster.
diff --git a/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn b/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn
index 0c0527f2c..a59d4b5ad 100644
--- a/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn
+++ b/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn
@@ -1,9 +1,244 @@
[[!meta title="ikiwiki-wordpress-import"]]
+I converted the script to Perl. The new version gets your name and email automatically from your git config, converts the body of your posts to markdown, and also imports comments. More importantly it works with the latest wordpress, which the python version does not. Note that it's still not 100% perfect and I intend to make a few modifications still, but they will require access to the mysql database and that may render the script useless to some users.
+
+-----
+[[!format perl '''
+#!/usr/bin/env perl
+
+use 5.16.1;
+use warnings;
+
+use XML::Simple;
+use DateTime::Format::Strptime;
+use HTML::WikiConverter;
+use LWP::UserAgent;
+use Try::Tiny;
+use Digest::MD5 'md5_hex';
+
+die "usage: $0 import_file subdir [branch] | git-fast-import"
+ unless @ARGV == 2 or @ARGV == 3;
+
+chomp(my $name = qx(git config --get user.name));
+chomp(my $email = qx(git config --get user.email));
+
+my ($file, $subdir, $branch) = @ARGV;
+
+my %events;
+
+POST:
+for my $x (grep $_->{'wp:status'} eq 'publish', @{XMLin($file)->{channel}{item}}) {
+ state $date_parser = DateTime::Format::Strptime->new(
+ pattern => '%F %T',
+ time_zone => 'UTC',
+ );
+
+ my $stub = $x =~ m<([^/]+)\/$>
+ ? $1
+ : lc($x->{title} =~ s/\W/-/gr =~ s/-$//r)
+ ;
+
+ my $guid = $x->{guid}{content} || $x->{link};
+ utf8::encode($x->{title});
+ my $msg = qq($x->{title}\n\nfrom WordPress [$guid]);
+ my $timestamp = $date_parser
+ ->parse_datetime($x->{'wp:post_date_gmt'})
+ ->epoch;
+
+ my $c = $x->{category};
+ $c = [$c] if ref $c && ref $c ne 'ARRAY';
+
+ my $content =
+ sprintf(qq([[!meta title="%s"]]\n), $x->{title} =~ s/"/\\"/gr) .
+ convert_content($x->{'content:encoded'}) . "\n\n" .
+ join("\n",
+ map '[[!tag ' . s/ /-/r . ']]',
+ keys %{
+ +{
+ map { $_ => 1 }
+ grep $_ ne 'uncategorized',
+ map $_->{nicename},
+ @$c
+ }
+ }
+ );
+
+ $events{$timestamp} = join "\n",
+ "commit refs/heads/$branch",
+ "committer $name <$email> $timestamp +0000",
+ 'data <<8675309',
+ $msg,
+ '8675309',
+ "M 644 inline $subdir/$stub.mdwn",
+ 'data <<8675309',
+ $content,
+ '8675309'
+ ;
+
+ get_comments($x->{link}, "$subdir/$stub")
+ if $x->{'wp:post_type'} eq 'post'
+}
+
+sub get_comments {
+ my ($url, $dir) = @_;
+
+ state $ua = LWP::UserAgent->new;
+
+ my $content = $ua->get("$url/feed")->decoded_content;
+ my $first;
+ my $bail;
+ my $decoded =
+ try { XMLin($content, ForceArray => ['item']) }
+ catch { $bail = 1 };
+
+ return if $bail;
+
+ COMMENT:
+ for my $x (@{$decoded->{channel}{item}}) {
+ my $date = $x->{pubDate};
+ $date =~ s/^\S+\s//;
+ $date =~ s/\s\S+$//;
+
+ #ghetto
+ $date =~ s/Jan/01/;
+ $date =~ s/Feb/02/;
+ $date =~ s/Mar/03/;
+ $date =~ s/Apr/04/;
+ $date =~ s/May/05/;
+ $date =~ s/Jun/06/;
+ $date =~ s/Jul/07/;
+ $date =~ s/Aug/08/;
+ $date =~ s/Sep/09/;
+ $date =~ s/Oct/10/;
+ $date =~ s/Nov/11/;
+ $date =~ s/Dec/12/;
+
+ state $date_parser = DateTime::Format::Strptime->new(
+ pattern => '%d %m %Y %T',
+ time_zone => 'UTC',
+ );
+
+ my $datetime = $date_parser
+ ->parse_datetime($date);
+
+ my $timestamp = $datetime->epoch;
+ my $formatted_date = "$timestamp";
+
+ my $msg = 'Added a comment';
+ my $content = convert_content($x->{'content:encoded'});
+ utf8::encode($x->{'dc:creator'});
+
+ $events{$timestamp} = join "\n",
+ "commit refs/heads/$branch",
+ # still need to get email address
+ "committer $x->{'dc:creator'} <$x->{'dc:creator'}> $timestamp +0000",
+ 'data <<8675309',
+ $msg,
+ '8675309',
+ "M 644 inline " . unique_comment_location($dir, $content),
+ 'data <<8675309',
+
+ <<"COMMENT",
+[[!comment format=mdwn
+ username="$x->{'dc:creator'}"
+ date="$formatted_date"
+ content="""
+$content
+"""]]
+COMMENT
+ '8675309'
+ ;
+ }
+}
+
+say $events{$_} for sort keys %events;
+
+sub convert_content {
+ my $body = shift;
+
+ utf8::encode($body);
+
+ state $converter = HTML::WikiConverter->new(
+ dialect => 'Markdown',
+ link_style => 'inline',
+ unordered_list_style => 'dash',
+ image_style => 'inline',
+ image_tag_fallback => 0,
+ );
+
+ # I know I know you can't parse XML with regular expressions. Go find a real
+ # parser and send me a patch
+ my $in_code = 0;
+
+ my $start_code = qr(<pre[^>]*>);
+ # (?:) is a no op but keeps ikiwiki from breaking my script
+ my $end_code = qr(</p(?:)re>);
+
+ $body =~ s(&#(?:8217|039);)(')g;
+ $body =~ s(&(?:quot|#822[01]);)(")g;
+ $body =~ s(&lt;)(<)g;
+ $body =~ s(&gt;)(>)g;
+ $body =~ s(&amp;)(&)g;
+ $body =~ s(&#8230;)(...)g;
+ $body =~ s(&#821[12];)(-)g;
+ $body =~ s(&#8216;)(')g;
+ $body =~ s(&#8242;)(')g;
+ $body =~ s(&infin;)(∞)g;
+ $body =~ s(&nbsp;)()g;
+ $body =~ s(<code[^>]*>)(<p(?:)re>)g;
+ $body =~ s(</c(?:)ode>)(</p(?:)re>)g;
+
+ my @tokens =
+ map {; split qr[(?=<p(?:)re>)] }
+ map {; split qr[</p(?:)re>\K] }
+ split /\n\n/,
+ $body;
+
+ my @new_tokens;
+ for my $t (@tokens) {
+ if (
+ ($in_code && $t !~ $end_code) ||
+ ($t =~ $start_code && $t =~ $end_code)
+ ) {
+ # do nothing
+ } elsif ($t =~ $start_code) {
+ $in_code = 1;
+ } elsif ($t =~ $end_code) {
+ $in_code = 0;
+ } else {
+ die "$t !!! '$1'" if $t =~ m/&([^;\s]+);/ && $1 !~ /[lg]t/;
+
+ $t = "<p>$t</p>"
+ }
+ push @new_tokens, $t
+ }
+
+ $converter->html2wiki(join "\n\n", @new_tokens)
+}
+
+sub unique_comment_location {
+ my ($dir, $content) = @_;
+
+ utf8::encode($content);
+ my $md5 = md5_hex($content);
+
+ my $location;
+ my $i = 0;
+ do {
+ $i++;
+ $location = "$dir/comment_${i}_$md5._comment";
+ } while -e $location;
+
+ return $location
+}
+
+''']]
+-----
+
I modified the script a bit so categories and tags would actually show up in the output file.
-----
-<pre>
+[[!format '''
#!/usr/bin/env python
"""
@@ -110,7 +345,7 @@ if __name__ == "__main__":
else:
main(*sys.argv[1:])
-</pre>
+''']]
-----
I have another version of the script, which uses the `timestamp` from the script, and inserts that as a \[[!meta date="foodate"]]. I'm posting it here just in case I happen to be doing something to the httpd.
@@ -118,7 +353,7 @@ I have another version of the script, which uses the `timestamp` from the script
(Hopefully I've escaped everything properly; if I missed something, check the source.)
-----
-<pre>
+[[!format '''
#!/usr/bin/env python
"""
@@ -223,7 +458,7 @@ if __name__ == "__main__":
else:
main(*sys.argv[1:])
-</pre>
+''']]
-----
diff --git a/doc/tips/mailman_subscription_form.mdwn b/doc/tips/mailman_subscription_form.mdwn
new file mode 100644
index 000000000..3e9ed0786
--- /dev/null
+++ b/doc/tips/mailman_subscription_form.mdwn
@@ -0,0 +1,10 @@
+One can think about implementing "[[Mailman integration]]" or something, but I find that rather overdoing it. Mailman is simple enough that you can add a clean subscription form to your ikiwiki site in seconds, just add:
+
+~~~~
+<form action="https://listes.example.com/cgi-bin/mailman/subscribe/listname" method="POST">
+Email: <input name="email" />
+<input type="submit" value="Subscribe" />
+</form>
+~~~~
+
+To your site and voilà, you are done! No more scary mailman subscription form! (Thanks to [[bgm]] for that trick!) --[[anarcat]]
diff --git a/doc/todo/BTS_integration.mdwn b/doc/todo/BTS_integration.mdwn
index b504698c4..635586709 100644
--- a/doc/todo/BTS_integration.mdwn
+++ b/doc/todo/BTS_integration.mdwn
@@ -4,7 +4,7 @@ This seems somewhat difficult, as ikiwiki would need to maintain a cache of the
--[[JoshTriplett]]
-[scmbug](http://www.mkgnu.net/?q=scmbug) might help here. --[[JoshTriplett]]
+[scmbug](http://www.mkgnu.net/scmbug) might help here. --[[JoshTriplett]]
[[!tag soc]]
diff --git a/doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn b/doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn
new file mode 100644
index 000000000..24552b29f
--- /dev/null
+++ b/doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn
@@ -0,0 +1,44 @@
+GitHub's flavor of markdown adds fenced code blocks, delimited by triple-backquotes, like this:
+
+ ```
+ code
+ more code
+ ```
+
+That syntax proves quite a bit more convenient in many cases, because it doesn't require modifying every line of the code block to add indentation. Please consider adding optional support for this in ikiwiki. Please also consider turning it on by default for new wikis, though not for existing wikis since it could *potentially* break backward compatibility with existing content.
+
+> I don't think that's an official markdown feature, although it might be available
+> as an extension in some markdown library or other -- possibly one of the ones
+> supported by ikiwiki.
+>
+> However, aside from compatability, ikiwiki already provides a way to do it that does not
+> require indenting the code: The [[ikiwiki/directive/format]] directive. Which has the benefit of
+> also telling it what kind of code it is, so it can syntax highlight it. Example:
+
+[[!format haskell """
+main :: IO ()
+main = forever $
+ putStrLn "hello, world!"
+"""]]
+
+> --[[Joey]]
+
+> > It is not a standard feature (as much as Markdown is [[standardized|Track_Markdown_Standardisation_Efforts]]...) But it does allow for [syntax hilightning](https://help.github.com/articles/github-flavored-markdown) too, just tag the language name after the backticks. It *seems* that Discount supports github-style backtick format (as well as Pandoc `~~~~` format) but doesn't allow the keyword argument.
+> >
+> > I strongly support this feature. --[[anarcat]]
+> >
+> > In fact, it turns out that it already works here!
+> >
+> > ~~~~
+> > this is a pandoc-style fenced in code block
+> > this is another line
+> > ~~~~
+> >
+> > github-style backticks, however, do not add a wrapping `<pre>` block for some reason:
+> >
+> > ```
+> > this is a github-style fenced in code block
+> > this is another line
+> > ```
+> >
+> > ... maybe a bug in Discount... --[[anarcat]]
diff --git a/doc/todo/Separate_OpenIDs_and_usernames.mdwn b/doc/todo/Separate_OpenIDs_and_usernames.mdwn
index a4940220a..b7ff82282 100644
--- a/doc/todo/Separate_OpenIDs_and_usernames.mdwn
+++ b/doc/todo/Separate_OpenIDs_and_usernames.mdwn
@@ -13,6 +13,8 @@ A slightly more complex next step would be to request sreg from the provider and
> implemented as a badly-done wart on the side of their regular login
> system.
>
+> > If there are user profiles on the site with non-empty information associated with them (including permissions, reputation), then it would make more sense to be able to access your user profile with alternative OpenIDs (in case one of the provider goes down), as on <http://stackoverflow.com>. In ikiwiki, there might be no such special information associated with users (or you can think of something like this?), except for the admin rights. But fortunately, several OpenIDs can be set up for admins in ikwiki. (Only if it comes to [the OpenIDs provided by Gmail][forum/google openid broken?], then it turns out to be unhandy to write the ID into the configuration file as a second admin ID.)--Ivan Z.
+>
> The openid plugin now attempts to get an email and a username, and stores
> them in the session database for later use (ie, when the user edits a
> page).
diff --git a/doc/todo/assumes_system_perl.mdwn b/doc/todo/assumes_system_perl.mdwn
index a0405472b..63ffccf0d 100644
--- a/doc/todo/assumes_system_perl.mdwn
+++ b/doc/todo/assumes_system_perl.mdwn
@@ -13,4 +13,8 @@ The installed bin/ikiwiki file also refers to /usr/bin/perl rather than the perl
> yours, but do not plan to work on it myself, since I do not use systems
> where /usr/bin/perl is not a sane default. --[[Joey]]
+> > I've implemented a change that should fix this. For what it's worth this is a
+> > life saver on shared hosting where building your own perl is super effective.
+> > --frioux ([code here](https://github.com/frioux/ikiwiki/tree/use-env-perl))
+
[[wishlist]]
diff --git a/doc/todo/calendar_with___34__create__34___links.mdwn b/doc/todo/calendar_with___34__create__34___links.mdwn
new file mode 100644
index 000000000..9fe6c434a
--- /dev/null
+++ b/doc/todo/calendar_with___34__create__34___links.mdwn
@@ -0,0 +1,10 @@
+the [[ikiwiki/directive/calendar]] directive is well usable without ikiwiki-calendar (eg for articles about meetings), but in such situations, it might be useful to have page creating links at the days.
+
+a [[!taglink patch]] to address this [[!taglink wishlist]] item is [[attached|incomplete_patch.pl]].
+
+from the new documentation (also in the patch):
+
+> * `newpageformat` - In month mode, if no articles match the query, the value of
+> `newpageformat` will be used to strformat the date in question. A good value
+> is `newpageformat="meetings/%Y-%m-%d"`. It might be a good idea to have
+> `\[[!meta date="<TMPL_VAR name>"]]` in the edittemplate of `meetings/*`
diff --git a/doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl b/doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl
new file mode 100644
index 000000000..dc6798831
--- /dev/null
+++ b/doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl
@@ -0,0 +1,36 @@
+diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
+index d443198..0436eda 100644
+--- a/IkiWiki/Plugin/calendar.pm
++++ b/IkiWiki/Plugin/calendar.pm
+@@ -238,7 +238,16 @@ EOF
+ else {
+ $tag='month-calendar-day-nolink';
+ }
+- $calendar.=qq{\t\t<td class="$tag $downame{$wday}">$day</td>\n};
++ if ($params{newpageformat}) {
++ $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
++ $calendar.=htmllink($params{page}, $params{destpage},
++ strftime_utf8($params{newpageformat}, 0, 0, 0, $day, $params{month} - 1, $params{year} - 1900),
++ noimageinline => 1,
++ linktext => $day);
++ $calendar.=qq{</td>\n};
++ } else {
++ $calendar.=qq{\t\t<td class="$tag $downame{$wday}">$day</td>\n};
++ }
+ }
+ }
+
+diff --git a/doc/ikiwiki/directive/calendar.mdwn b/doc/ikiwiki/directive/calendar.mdwn
+index cb40f88..7b7fa85 100644
+--- a/doc/ikiwiki/directive/calendar.mdwn
++++ b/doc/ikiwiki/directive/calendar.mdwn
+@@ -56,5 +56,9 @@ An example crontab:
+ and so on. Defaults to 0, which is Sunday.
+ * `months_per_row` - In the year calendar, number of months to place in
+ each row. Defaults to 3.
++* `newpageformat` - In month mode, if no articles match the query, the value of
++ `newpageformat` will be used to strformat the date in question. A good value
++ is `newpageformat="meetings/%Y-%m-%d"`. It might be a good idea to have
++ `\[[!meta date="<TMPL_VAR name>"]]` in the edittemplate of `meetings/*`.
+
+ [[!meta robots="noindex, follow"]]
diff --git a/doc/todo/toc-with-human-readable-anchors.mdwn b/doc/todo/toc-with-human-readable-anchors.mdwn
new file mode 100644
index 000000000..0f358f4e6
--- /dev/null
+++ b/doc/todo/toc-with-human-readable-anchors.mdwn
@@ -0,0 +1,7 @@
+The [[/plugins/toc]] plugin is very useful but it creates anchors with names such as #index1h3
+
+In #ikiwiki today, another user and I were in agreement that an option for human readable anchors would be preferable.
+
+> +1 - i would love to see that happen too. Here's a patch I wrote a while back for similar functionality in moinmoin: https://svn.koumbit.net/koumbit/trunk/patches/moinmoin/nice_headings.patch -- [[anarcat]]
+
+[[!tag wishlist]]
diff --git a/doc/todo/translation_links.mdwn b/doc/todo/translation_links.mdwn
new file mode 100644
index 000000000..63e8d1010
--- /dev/null
+++ b/doc/todo/translation_links.mdwn
@@ -0,0 +1,46 @@
+This is an offshoot of [[this rant|translation/discussion/#index3h1]].
+
+Basically, while I can appreciate the [[plugins/po]] plugin for more or less "static" site, or more organised wikis, for certain wikis, it's way too overhead.
+
+## Stories
+
+The following stories should be answered by that plugin:
+
+ 1. a user browses the wiki, finds that the page is translated in another language and clicks on the language to see that page translated
+ 2. a user browses the wiki and gets automatically the right language
+ 3. an editor creates a wiki page, and it gets assigned a language
+ 4. a translator sees that page and translates it to another language, and that page is linked with the first one, both ways (in that stories 1 and 2 can work)
+ 5. (optional) a translator can see the list of pages needing translation and translate pages
+ 6. (optional) an editor changes a wiki page, the translated page is marked as "dirty" (ie. needing translation)
+
+## Fundamental constraints
+
+This issue is about creating a "wikipedia-like" translation structure where:
+
+ 1. there's no "master language"
+ 2. there's a loose connexion between pages
+ 3. not all pages are necessarily translated, nor is it a goal
+
+Those are fundamental constraints that should be required by that plugin. It doesn't mean that the plugin cannot be used otherwise, but that's all it needs to respect to fulfill the requirements here.
+
+## Optional constraints
+
+There can be more constraints that we may want to impose or not, which will make things more or less complicated:
+
+ 4. the page URLs need to be translatable - it would make [[!wikipedia Content_negotiation]] fail, so it would require the CGI for story 2. it would also make it harder to create the connexion between pages, as metadata would be needed in each page
+ 5. the language must not be visible in the URL - same as #4
+ 6. translation system must also be usable from the commandline/git repository - #5 and #6 would be basically impossible to implement there
+
+## Basic spec
+
+ 1. a hook that looks for foo.la.mdwn pages, where la is a language code (defined where..?), and that lists available translations -
+ this is where most of the work needs to happen. we can probably reuse the builtin template stuff that got injected with the [[plugins/po]] plugin was imported, to start with
+ 2. instructions on how to setup [[!wikipedia Content_negotiation]] so that the above works out of the box - just documentation
+ 3. a button to create such translations - that would be through the [[pageactions hook|plugins/write/#index15h3]]
+ 4. a default language setting? - that's obviously the getsetup hook
+ 5. a set of language code settings? - same
+ 6. content-negotiation - the po module has good code for that
+
+## Authors
+
+ * [[anarcat]]
diff --git a/doc/translation/discussion.mdwn b/doc/translation/discussion.mdwn
index 61606e3d0..b274317cd 100644
--- a/doc/translation/discussion.mdwn
+++ b/doc/translation/discussion.mdwn
@@ -117,3 +117,5 @@ Obviously, this is a lot more work, diverging in a different direction than the
Also, the thing with the above is that if functionalities 1 and 2 (mapping and page flipping) is stripped out of the po plugin and made reusable, functionalities 3 and 4 can be made optional and a wiki is still translatable, giving the user the responsability of tracking the translations...
So basically, what I think should happen is to have ikiwiki be able to use the .po plugin without .po files - just allow for pages to be linked together. Detect foo.fr.mdwn when parsing foo.mdwn and create links to it would already be a huge start... -- [[anarcat]]
+
+> I have a hopefully clearer spec for a plugin called [[todo/translation_links]]. -- [[anarcat]]
diff --git a/doc/wishlist/watched_pages.mdwn b/doc/wishlist/watched_pages.mdwn
new file mode 100644
index 000000000..d943571d7
--- /dev/null
+++ b/doc/wishlist/watched_pages.mdwn
@@ -0,0 +1 @@
+Is there a way to mark pages I edit as "watched"? A way of doing this through git would be acceptable too. Right now I link to my homepage on every page I comment on, but this doesn't tell me if the pages were updated... --[[anarcat]]
diff --git a/ikiwiki.spec b/ikiwiki.spec
index 7caaca717..7e9dbf0f6 100644
--- a/ikiwiki.spec
+++ b/ikiwiki.spec
@@ -1,5 +1,5 @@
Name: ikiwiki
-Version: 3.20130212
+Version: 3.20130504
Release: 1%{?dist}
Summary: A wiki compiler
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index 8d739f95b..d7f2926a3 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-12 21:50-0400\n"
+"POT-Creation-Date: 2013-05-04 23:52-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/t/map.t b/t/map.t
index 7f3df61f7..5d4713d6f 100755
--- a/t/map.t
+++ b/t/map.t
@@ -3,9 +3,16 @@ package IkiWiki;
use warnings;
use strict;
-use XML::Twig;
use Test::More;
+BEGIN {
+ unless (eval { require XML::Twig }) {
+ eval q{
+ use Test::More skip_all => "XML::Twig is not available"
+ }
+ }
+}
+
BEGIN { use_ok("IkiWiki"); }
BEGIN { use_ok("IkiWiki::Render"); }
BEGIN { use_ok("IkiWiki::Plugin::map"); }