ikiwiki.out
ikiwiki-transition.out
ikiwiki-calendar.out
+ikiwiki-comment.out
pm_to_blib
/MYMETA.json
/MYMETA.yml
use warnings;
use strict;
use Encode;
+use Fcntl q{:flock};
use URI::Escape q{uri_escape_utf8};
use POSIX ();
use Storable;
%pagestate %wikistate %renderedfiles %oldrenderedfiles
%pagesources %delpagesources %destsources %depends %depends_simple
@mass_depends %hooks %forcerebuild %loaded_plugins %typedlinks
- %oldtypedlinks %autofiles @underlayfiles $lastrev};
+ %oldtypedlinks %autofiles @underlayfiles $lastrev $phase};
use Exporter q{import};
our @EXPORT = qw(hook debug error htmlpage template template_depends
our $DEPEND_PRESENCE=2;
our $DEPEND_LINKS=4;
+# Phases of processing.
+sub PHASE_SCAN () { 0 }
+sub PHASE_RENDER () { 1 }
+$phase = PHASE_SCAN;
+
# Optimisation.
use Memoize;
memoize("abs2rel");
safe => 1,
rebuild => 1,
},
+ reverse_proxy => {
+ type => "boolean",
+ default => 0,
+ description => "do not adjust cgiurl if CGI is accessed via different URL",
+ advanced => 0,
+ safe => 1,
+ rebuild => 0, # only affects CGI requests
+ },
cgi_wrapper => {
type => "string",
default => '',
type => "internal",
default => [qw{mdwn link inline meta htmlscrubber passwordauth
openid signinedit lockedit conditional
- recentchanges parentlinks editpage}],
+ recentchanges parentlinks editpage
+ templatebody}],
description => "plugins to enable by default",
safe => 0,
rebuild => 1,
html5 => {
type => "boolean",
default => 0,
- description => "generate HTML5?",
+ description => "use elements new in HTML5 like <section>?",
advanced => 0,
safe => 1,
rebuild => 1,
safe => 0, # paranoia
rebuild => 0,
},
+ libdirs => {
+ type => "string",
+ default => [],
+ example => ["$ENV{HOME}/.local/share/ikiwiki"],
+ description => "extra library and plugin directories",
+ advanced => 1,
+ safe => 0, # directory
+ rebuild => 0,
+ },
libdir => {
type => "string",
default => "",
example => "$ENV{HOME}/.ikiwiki/",
- description => "extra library and plugin directory",
+ description => "extra library and plugin directory (searched after libdirs)",
advanced => 1,
safe => 0, # directory
rebuild => 0,
},
useragent => {
type => "string",
- default => undef,
+ default => "ikiwiki/$version",
example => "Wget/1.13.4 (linux-gnu)",
description => "set custom user agent string for outbound HTTP requests e.g. when fetching aggregated RSS feeds",
safe => 0,
rebuild => 0,
},
+ responsive_layout => {
+ type => "boolean",
+ default => 1,
+ description => "theme has a responsive layout? (mobile-optimized)",
+ safe => 1,
+ rebuild => 1,
+ },
+ deterministic => {
+ type => "boolean",
+ default => 0,
+ description => "try harder to produce deterministic output",
+ safe => 1,
+ rebuild => 1,
+ advanced => 1,
+ },
+}
+
+sub getlibdirs () {
+ my @libdirs;
+ if ($config{libdirs}) {
+ @libdirs = @{$config{libdirs}};
+ }
+ if (length $config{libdir}) {
+ push @libdirs, $config{libdir};
+ }
+ return @libdirs;
}
sub defaultconfig () {
if (defined $config{timezone} && length $config{timezone}) {
$ENV{TZ}=$config{timezone};
}
- else {
+ elsif (defined $ENV{TZ} && length $ENV{TZ}) {
$config{timezone}=$ENV{TZ};
}
+ else {
+ eval q{use Config qw()};
+ error($@) if $@;
+
+ if ($Config::Config{d_gnulibc} && -e '/etc/localtime') {
+ $config{timezone}=$ENV{TZ}=':/etc/localtime';
+ }
+ else {
+ $config{timezone}=$ENV{TZ}='GMT';
+ }
+ }
if ($config{w3mmode}) {
eval q{use Cwd q{abs_path}};
$local_cgiurl = $cgiurl->path;
- if ($cgiurl->scheme ne $baseurl->scheme or
- $cgiurl->authority ne $baseurl->authority) {
+ if ($cgiurl->scheme eq 'https' &&
+ $baseurl->scheme eq 'http') {
+ # We assume that the same content is available
+ # over both http and https, because if it
+ # wasn't, accessing the static content
+ # from the CGI would be mixed-content,
+ # which would be a security flaw.
+
+ if ($cgiurl->authority ne $baseurl->authority) {
+ # use protocol-relative URL for
+ # static content
+ $local_url = "$config{url}/";
+ $local_url =~ s{^http://}{//};
+ }
+ # else use host-relative URL for static content
+
+ # either way, CGI needs to be absolute
+ $local_cgiurl = $config{cgiurl};
+ }
+ elsif ($cgiurl->scheme ne $baseurl->scheme) {
# too far apart, fall back to absolute URLs
$local_url = "$config{url}/";
$local_cgiurl = $config{cgiurl};
}
+ elsif ($cgiurl->authority ne $baseurl->authority) {
+ # slightly too far apart, fall back to
+ # protocol-relative URLs
+ $local_url = "$config{url}/";
+ $local_url =~ s{^https?://}{//};
+ $local_cgiurl = $config{cgiurl};
+ $local_cgiurl =~ s{^https?://}{//};
+ }
+ # else keep host-relative URLs
}
$local_url =~ s{//$}{/};
sub listplugins () {
my %ret;
- foreach my $dir (@INC, $config{libdir}) {
+ foreach my $dir (@INC, getlibdirs()) {
next unless defined $dir && length $dir;
foreach my $file (glob("$dir/IkiWiki/Plugin/*.pm")) {
my ($plugin)=$file=~/.*\/(.*)\.pm$/;
$ret{$plugin}=1;
}
}
- foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") {
+ foreach my $dir (getlibdirs(), "$installdir/lib/ikiwiki") {
next unless defined $dir && length $dir;
foreach my $file (glob("$dir/plugins/*")) {
$ret{basename($file)}=1 if -x $file;
}
sub loadplugins () {
- if (defined $config{libdir} && length $config{libdir}) {
- unshift @INC, possibly_foolish_untaint($config{libdir});
+ foreach my $dir (getlibdirs()) {
+ unshift @INC, possibly_foolish_untaint($dir);
}
foreach my $plugin (@{$config{default_plugins}}, @{$config{add_plugins}}) {
return if ! $force && grep { $_ eq $plugin} @{$config{disable_plugins}};
- foreach my $dir (defined $config{libdir} ? possibly_foolish_untaint($config{libdir}) : undef,
- "$installdir/lib/ikiwiki") {
+ foreach my $possiblytainteddir (getlibdirs(), "$installdir/lib/ikiwiki") {
+ my $dir = possibly_foolish_untaint($possiblytainteddir);
if (defined $dir && -x "$dir/plugins/$plugin") {
eval { require IkiWiki::Plugin::external };
if ($@) {
}
return $cgiurl."?".
- join("&", map $_."=".uri_escape_utf8($params{$_}), keys %params);
+ join("&", map $_."=".uri_escape_utf8($params{$_}), sort(keys %params));
}
sub cgiurl_abs (@) {
return length $config{userdir} ? "$config{userdir}/$user" : $user;
}
+# Username to display for openid accounts.
sub openiduser ($) {
my $user=shift;
return;
}
+# Username to display for emailauth accounts.
+sub emailuser ($) {
+ my $user=shift;
+ if (defined $user && $user =~ m/(.+)@/) {
+ my $nick=$1;
+ # remove any characters from not allowed in wiki files
+ # support use w/o %config set
+ my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_";
+ $nick=~s/[^$chars]/_/g;
+ return $nick;
+ }
+ return;
+}
+
+# Some user information should not be exposed in commit metadata, etc.
+# This generates a cloaked form of such information.
+sub cloak ($) {
+ my $user=shift;
+ # cloak email address using http://xmlns.com/foaf/spec/#term_mbox_sha1sum
+ if ($user=~m/(.+)@/) {
+ my $nick=$1;
+ eval q{use Digest::SHA};
+ return $user if $@;
+ return $nick.'@'.Digest::SHA::sha1_hex("mailto:$user");
+ }
+ else {
+ return $user;
+ }
+}
+
sub htmlize ($$$$) {
my $page=shift;
my $destpage=shift;
}
open($wikilock, '>', "$config{wikistatedir}/lockfile") ||
error ("cannot write to $config{wikistatedir}/lockfile: $!");
- if (! flock($wikilock, 2)) { # LOCK_EX
- error("failed to get lock");
+ if (! flock($wikilock, LOCK_EX | LOCK_NB)) {
+ debug("failed to get lock; waiting...");
+ if (! flock($wikilock, LOCK_EX)) {
+ error("failed to get lock");
+ }
}
return 1;
}
if (defined $page && defined $tpage) {
add_depends($page, $tpage);
}
-
+
my @opts=(
filter => sub {
my $text_ref = shift;
${$text_ref} = decode_utf8(${$text_ref});
+ run_hooks(readtemplate => sub {
+ ${$text_ref} = shift->(
+ id => $name,
+ page => $tpage,
+ content => ${$text_ref},
+ untrusted => $untrusted,
+ );
+ });
},
loop_context_vars => 1,
die_on_bad_params => 0,
package IkiWiki::SuccessReason;
+# A blessed array-ref:
+#
+# [0]: human-readable reason for success (or, in FailReason subclass, failure)
+# [1]{""}:
+# - if absent or false, the influences of this evaluation are "static",
+# see the influences_static method
+# - if true, they are dynamic (not static)
+# [1]{any other key}:
+# the dependency types of influences, as returned by the influences method
+
use overload (
+ # in string context, it's the human-readable reason
'""' => sub { $_[0][0] },
+ # in boolean context, SuccessReason is 1 and FailReason is 0
'0+' => sub { 1 },
+ # negating a result gives the opposite result with the same influences
'!' => sub { bless $_[0], 'IkiWiki::FailReason'},
+ # A & B = (A ? B : A) with the influences of both
'&' => sub { $_[1]->merge_influences($_[0], 1); $_[1] },
+ # A | B = (A ? A : B) with the influences of both
'|' => sub { $_[0]->merge_influences($_[1]); $_[0] },
fallback => 1,
);
+# SuccessReason->new("human-readable reason", page => deptype, ...)
+
sub new {
my $class = shift;
my $value = shift;
return bless [$value, {@_}], $class;
}
+# influences(): return a reference to a copy of the hash
+# { page => dependency type } describing the pages that indirectly influenced
+# this result, but would not cause a dependency through ikiwiki's core
+# dependency logic.
+#
+# See [[todo/dependency_types]] for extensive discussion of what this means.
+#
+# influences(page => deptype, ...): remove all influences, replace them
+# with the arguments, and return a reference to a copy of the new influences.
+
sub influences {
my $this=shift;
$this->[1]={@_} if @_;
return \%i;
}
+# True if this result has the same influences whichever page it matches,
+# For instance, whether bar matches backlink(foo) is influenced only by
+# the set of links in foo, so its only influence is { foo => DEPEND_LINKS },
+# which does not mention bar anywhere.
+#
+# False if this result would have different influences when matching
+# different pages. For instance, when testing whether link(foo) matches bar,
+# { bar => DEPEND_LINKS } is an influence on that result, because changing
+# bar's links could change the outcome; so its influences are not the same
+# as when testing whether link(foo) matches baz.
+#
+# Static influences are one of the things that make pagespec_match_list
+# more efficient than repeated calls to pagespec_match.
+
sub influences_static {
return ! $_[0][1]->{""};
}
+# Change the influences of $this to be the influences of "$this & $other"
+# or "$this | $other".
+#
+# If both $this and $other are either successful or have influences,
+# or this is an "or" operation, the result has all the influences from
+# either of the arguments. It has dynamic influences if either argument
+# has dynamic influences.
+#
+# If this is an "and" operation, and at least one argument is a
+# FailReason with no influences, the result has no influences, and they
+# are not dynamic. For instance, link(foo) matching bar is influenced
+# by bar, but enabled(ddate) has no influences. Suppose ddate is disabled;
+# then (link(foo) and enabled(ddate)) not matching bar is not influenced by
+# bar, because it would be false however often you edit bar.
+
sub merge_influences {
my $this=shift;
my $other=shift;
my $anded=shift;
+ # This "if" is odd because it needs to avoid negating $this
+ # or $other, which would alter the objects in-place. Be careful.
if (! $anded || (($this || %{$this->[1]}) &&
($other || %{$other->[1]}))) {
foreach my $influence (keys %{$other->[1]}) {
}
}
+# Change $this so it is not considered to be influenced by $torm.
+
sub remove_influence {
my $this=shift;
my $torm=shift;
my $template=template("page.tmpl");
- my $topurl = defined $cgi ? $cgi->url : $config{url};
+ my $topurl = $config{url};
+ if (defined $cgi && ! $config{w3mmode} && ! $config{reverse_proxy}) {
+ $topurl = $cgi->url;
+ }
my $page="";
if (exists $params{page}) {
$page=delete $params{page};
- $params{forcebaseurl}=urlabs(urlto($page), $topurl);
+ $params{forcebaseurl}=urlto($page);
}
run_hooks(pagetemplate => sub {
shift->(
});
templateactions($template, "");
+ my $baseurl = baseurl();
+
$template->param(
dynamic => 1,
title => $title,
wikiname => $config{wikiname},
content => $content,
- baseurl => urlabs(baseurl(), $topurl),
+ baseurl => $baseurl,
html5 => $config{html5},
%params,
);
sub redirect ($$) {
my $q=shift;
eval q{use URI};
- my $url=URI->new(urlabs(shift, $q->url));
+
+ my $topurl;
+ if (defined $q && ! $config{w3mmode} && ! $config{reverse_proxy}) {
+ $topurl = $q->url;
+ }
+
+ my $url=URI->new(urlabs(shift, $topurl));
if (! $config{w3mmode}) {
print $q->redirect($url);
}
if ($] < 5.01) {
my $cgi = shift;
foreach my $f ($cgi->param) {
- $cgi->param($f, map { decode_utf8 $_ } $cgi->param($f));
+ $cgi->param($f, map { decode_utf8 $_ }
+ @{$cgi->param_fetch($f)});
}
}
}
sub safe_decode_utf8 ($) {
my $octets = shift;
- # call decode_utf8 on >= 5.20 only if it's not already decoded,
- # otherwise it balks, on < 5.20, always call it
- if ($] < 5.02 || !Encode::is_utf8($octets)) {
+ if (!Encode::is_utf8($octets)) {
return decode_utf8($octets);
}
else {
my $banned=0;
my $name=$session->param("name");
+ my $cloak=cloak($name) if defined $name;
if (defined $name &&
- grep { $name eq $_ } @{$config{banned_users}}) {
+ grep { $name eq $_ || $cloak eq $_ } @{$config{banned_users}}) {
$banned=1;
}
foreach my $b (@{$config{banned_users}}) {
if (pagespec_match("", $b,
ip => $session->remote_addr(),
- name => defined $name ? $name : "",
- )) {
+ name => defined $name ? $name : "")
+ || pagespec_match("", $b,
+ ip => cloak($session->remote_addr()),
+ name => defined $cloak ? $cloak : "")) {
$banned=1;
last;
}
return if ! defined $form->field("do") || ($form->field("do") ne "edit" && $form->field("do") ne "create") ;
- my $filename=Encode::decode_utf8($q->param('attachment'));
+ my $filename=Encode::decode_utf8(scalar $q->param('attachment'));
+ my $handle=$q->upload('attachment');
+
if (defined $filename && length $filename) {
- attachment_store($filename, $form, $q, $params{session});
+ attachment_store($filename, $handle, $form, $q, $params{session});
}
if ($form->submitted eq "Save Page") {
}
if ($form->submitted eq "Insert Links") {
- my $page=quotemeta(Encode::decode_utf8($q->param("page")));
+ my $page=quotemeta(Encode::decode_utf8(scalar $q->param("page")));
my $add="";
- foreach my $f ($q->param("attachment_select")) {
+ foreach my $f (@{$q->param_fetch("attachment_select")}) {
$f=Encode::decode_utf8($f);
$f=~s/^$page\///;
if (IkiWiki::isinlinableimage($f) &&
# Stores the attachment in a holding area, not yet in the wiki proper.
sub attachment_store {
my $filename=shift;
+ my $handle=shift;
my $form=shift;
my $q=shift;
my $session=shift;
-
- # This is an (apparently undocumented) way to get the name
- # of the temp file that CGI writes the upload to.
- my $tempfile=$q->tmpFileName($filename);
+
+ my $tempfile;
+ if (defined $handle) {
+ # This is what works in CGI.pm 4.09+: $q->tmpFileName($q->upload('attachment'))
+ $tempfile=$q->tmpFileName($handle);
+ }
+ if (! defined $tempfile || ! length $tempfile) {
+ # This is what is *documented* in CGI.pm 4.09: $q->tmpFileName($q->param('attachment'))
+ $tempfile=$q->tmpFileName($filename);
+ }
if (! defined $tempfile || ! length $tempfile) {
# perl 5.8 needs an alternative, awful method
if ($q =~ /HASH/ && exists $q->{'.tmpfiles'}) {
last if defined $tempfile && length $tempfile;
}
}
- if (! defined $tempfile || ! length $tempfile) {
- error("CGI::tmpFileName failed to return the uploaded file name");
- }
+ }
+ if (! defined $tempfile || ! length $tempfile) {
+ error("CGI::tmpFileName failed to return the uploaded file name");
}
$filename=IkiWiki::basename($filename);
my (%pages, %dirs);
foreach my $dir ($config{srcdir}, @{$config{underlaydirs}}, $config{underlaydir}) {
- next if $dir eq $IkiWiki::Plugin::transient::transientdir;
chdir($dir) || next;
find({
if (! -d _) {
$pages{pagename($f)}=1;
}
- elsif ($dir eq $config{srcdir}) {
+ elsif ($dir eq $config{srcdir} || ! $config{autoindex_commit}) {
$dirs{$f}=1;
}
}
use IkiWiki 3.00;
use Encode;
-my $defaulturl='http://test.blogspam.net:8888/';
+my $defaulturl='http://test.blogspam.net:9999/';
+my $client;
sub import {
hook(type => "getsetup", id => "blogspam", call => \&getsetup);
type => "string",
example => "blacklist=1.2.3.4,blacklist=8.7.6.5,max-links=10",
description => "options to send to blogspam server",
- link => "http://blogspam.net/api/testComment.html#options",
+ link => "http://blogspam.net/api/2.0/testComment.html#options",
safe => 1,
rebuild => 0,
},
blogspam_server => {
type => "string",
default => $defaulturl,
- description => "blogspam server XML-RPC url",
+ description => "blogspam server JSON url",
safe => 1,
rebuild => 0,
},
# if the module is missing when a spam is posted would not
# let the admin know about the problem.
eval q{
- use RPC::XML;
- use RPC::XML::Client;
- $RPC::XML::ENCODING = 'utf-8';
+ use JSON;
+ use HTTP::Request;
};
error $@ if $@;
+
+ eval q{use LWPx::ParanoidAgent};
+ if (!$@) {
+ $client=LWPx::ParanoidAgent->new(agent => $config{useragent});
+ }
+ else {
+ eval q{use LWP};
+ if ($@) {
+ error $@;
+ return;
+ }
+ $client=useragent();
+ }
}
sub checkcontent (@) {
my $url=$defaulturl;
$url = $config{blogspam_server} if exists $config{blogspam_server};
- my $client = RPC::XML::Client->new($url);
-
my @options = split(",", $config{blogspam_options})
if exists $config{blogspam_options};
site => encode_utf8($config{url}),
version => "ikiwiki ".$IkiWiki::version,
);
- my $res = $client->send_request('testComment', \%req);
+ eval q{use JSON; use HTTP::Request}; # errors handled in checkconfig()
+ my $res = $client->request(
+ HTTP::Request->new(
+ 'POST',
+ $url,
+ [ 'Content-Type' => 'application/json' ],
+ to_json(\%req),
+ ),
+ );
- if (! ref $res || ! defined $res->value) {
+ if (! ref $res || ! $res->is_success()) {
debug("failed to get response from blogspam server ($url)");
return undef;
}
- elsif ($res->value =~ /^SPAM:(.*)/) {
+ my $details = from_json($res->content);
+ if ($details->{result} eq 'SPAM') {
eval q{use Data::Dumper};
- debug("blogspam server reports ".$res->value.": ".Dumper(\%req));
- return gettext("Sorry, but that looks like spam to <a href=\"http://blogspam.net/\">blogspam</a>: ").$1;
+ debug("blogspam server reports $details->{reason}: ".Dumper(\%req));
+ return gettext("Sorry, but that looks like spam to <a href=\"http://blogspam.net/\">blogspam</a>: ").$details->{reason};
}
- elsif ($res->value ne 'OK') {
- debug("blogspam server failure: ".$res->value);
+ elsif ($details->{result} ne 'OK') {
+ debug("blogspam server failure: ".$res->content);
return undef;
}
else {
htmllink($page, $params{destpage}, $link, noimageinline => 1),
join(", ", map {
htmllink($params{page}, $params{destpage}, $_, noimageinline => 1)
- } @pages)
+ } sort @pages)
);
}
my $ipaddr=$session->remote_addr();
if (defined $user) {
- return IkiWiki::possibly_foolish_untaint($user);
+ return IkiWiki::possibly_foolish_untaint(IkiWiki::cloak($user));
}
elsif (defined $ipaddr) {
- return "Anonymous from ".IkiWiki::possibly_foolish_untaint($ipaddr);
+ return "Anonymous from ".IkiWiki::possibly_foolish_untaint(IkiWiki::cloak($ipaddr));
}
else {
return "Anonymous";
-#! /usr/bin/perl
+#!/usr/bin/perl
# Copyright (c) 2006, 2007 Manoj Srivastava <srivasta@debian.org>
#
# This program is free software; you can redistribute it and/or modify
my $time=time;
my @now=localtime($time);
+my %changed;
sub import {
+ hook(type => "checkconfig", id => "calendar", call => \&checkconfig);
hook(type => "getsetup", id => "calendar", call => \&getsetup);
hook(type => "needsbuild", id => "calendar", call => \&needsbuild);
hook(type => "preprocess", id => "calendar", call => \&preprocess);
+ hook(type => "scan", id => "calendar", call => \&scan);
+ hook(type => "build_affected", id => "calendar", call => \&build_affected);
+
+ IkiWiki::loadplugin("transient");
}
sub getsetup () {
archive_pagespec => {
type => "pagespec",
example => "page(posts/*) and !*/Discussion",
- description => "PageSpec of pages to include in the archives; used by ikiwiki-calendar command",
+ description => "PageSpec of pages to include in the archives, if option `calendar_autocreate` is true.",
link => 'ikiwiki/PageSpec',
safe => 1,
rebuild => 0,
},
+ calendar_autocreate => {
+ type => "boolean",
+ example => 1,
+ description => "autocreate new calendar pages?",
+ safe => 1,
+ rebuild => undef,
+ },
+ calendar_fill_gaps => {
+ type => "boolean",
+ example => 1,
+ default => 1,
+ description => "if set, when building calendar pages, also build pages of year and month when no pages were published (building empty calendars).",
+ safe => 1,
+ rebuild => 0,
+ },
+}
+
+sub checkconfig () {
+ if (! defined $config{calendar_autocreate}) {
+ $config{calendar_autocreate} = defined $config{archivebase};
+ }
+ if (! defined $config{archive_pagespec}) {
+ $config{archive_pagespec} = '*';
+ }
+ if (! defined $config{archivebase}) {
+ $config{archivebase} = 'archives';
+ }
+ if (! defined $config{calendar_fill_gaps}) {
+ $config{calendar_fill_gaps} = 1;
+ }
}
sub is_leap_year (@) {
return $days_in_month;
}
+sub build_affected {
+ my %affected;
+ my ($ayear, $amonth, $valid);
+
+ foreach my $year (keys %changed) {
+ ($ayear, $valid) = nextyear($year, $config{archivebase});
+ $affected{calendarlink($ayear)} = sprintf(gettext("building calendar for %s, its previous or next year has changed"), $ayear) if ($valid);
+ ($ayear, $valid) = previousyear($year, $config{archivebase});
+ $affected{calendarlink($ayear)} = sprintf(gettext("building calendar for %s, its previous or next year has changed"), $ayear) if ($valid);
+ foreach my $month (keys %{$changed{$year}}) {
+ ($ayear, $amonth, $valid) = nextmonth($year, $month, $config{archivebase});
+ $affected{calendarlink($ayear, sprintf("%02d", $amonth))} = sprintf(gettext("building calendar for %s/%s, its previous or next month has changed"), $amonth, $ayear) if ($valid);
+ ($ayear, $amonth, $valid) = previousmonth($year, $month, $config{archivebase});
+ $affected{calendarlink($ayear, sprintf("%02d", $amonth))} = sprintf(gettext("building calendar for %s/%s, its previous or next month has changed"), $amonth, $ayear) if ($valid);
+ }
+ }
+
+ return %affected;
+}
+
+sub autocreate {
+ my ($page, $pagefile, $year, $month) = @_;
+ my $message=sprintf(gettext("creating calendar page %s"), $page);
+ debug($message);
+
+ my $template;
+ if (defined $month) {
+ $template=template("calendarmonth.tmpl");
+ } else {
+ $template=template("calendaryear.tmpl");
+ }
+ $template->param(year => $year);
+ $template->param(month => $month) if defined $month;
+ $template->param(pagespec => $config{archive_pagespec});
+
+ my $dir = $IkiWiki::Plugin::transient::transientdir;
+
+ writefile($pagefile, $dir, $template->output);
+}
+
+sub calendarlink($;$) {
+ my ($year, $month) = @_;
+ if (defined $month) {
+ return $config{archivebase} . "/" . $year . "/" . $month;
+ } else {
+ return $config{archivebase} . "/" . $year;
+ }
+}
+
+sub gencalendarmonth{
+ my $year = shift;
+ my $month = sprintf("%02d", shift);
+
+ my $page = calendarlink($year, $month);
+ my $pagefile = newpagefile($page, $config{default_pageext});
+ add_autofile(
+ $pagefile, "calendar",
+ sub {return autocreate($page, $pagefile, $year, $month);}
+ );
+}
+
+sub gencalendaryear {
+ my $year = shift;
+ my %params = @_;
+
+ # Building year page
+ my $page = calendarlink($year);
+ my $pagefile = newpagefile($page, $config{default_pageext});
+ add_autofile(
+ $pagefile, "calendar",
+ sub {return autocreate($page, $pagefile, $year);}
+ );
+
+ if (not exists $wikistate{calendar}{minyear}) {
+ $wikistate{calendar}{minyear} = $year;
+ }
+ if (not exists $wikistate{calendar}{maxyear}) {
+ $wikistate{calendar}{maxyear} = $year;
+ }
+
+ if ($config{calendar_fill_gaps}) {
+ # Building month pages
+ foreach my $month (1 .. 12) {
+ gencalendarmonth($year, $month);
+ }
+
+ # Filling potential gaps in years (e.g. calendar goes from 2010 to 2014,
+ # and we just added year 2005. We have to add years 2006 to 2009).
+ return if $params{norecurse};
+ if ($wikistate{calendar}{minyear} > $year) {
+ foreach my $other ($year + 1 .. $wikistate{calendar}{minyear} - 1) {
+ gencalendaryear($other, norecurse => 1);
+ }
+ $wikistate{calendar}{minyear} = $year;
+ }
+ if ($wikistate{calendar}{maxyear} < $year) {
+ foreach my $other ($wikistate{calendar}{maxyear} + 1 .. $year - 1) {
+ gencalendaryear($other, norecurse => 1);
+ }
+ $wikistate{calendar}{maxyear} = $year;
+ }
+ }
+ if ($year < $wikistate{calendar}{minyear}) {
+ $wikistate{calendar}{minyear} = $year;
+ }
+ if ($year > $wikistate{calendar}{maxyear}) {
+ $wikistate{calendar}{maxyear} = $year;
+ }
+}
+
+sub previousmonth($$$) {
+ my $year = shift;
+ my $month = shift;
+ my $archivebase = shift;
+
+ if (not exists $wikistate{calendar}{minyear}) {
+ $wikistate{calendar}{minyear} = $year;
+ }
+
+ my $pmonth = $month;
+ my $pyear = $year;
+ while ((not exists $pagesources{"$archivebase/$pyear/" . sprintf("%02d", $pmonth)}) or ($pmonth == $month and $pyear == $year)) {
+ $pmonth -= 1;
+ if ($pmonth == 0) {
+ $pyear -= 1;
+ $pmonth = 12;
+ return ($pyear, $pmonth, 0) unless $pyear >= $wikistate{calendar}{minyear};
+ }
+ }
+ return ($pyear, $pmonth, 1);
+}
+
+sub nextmonth($$$) {
+ my $year = shift;
+ my $month = shift;
+ my $archivebase = shift;
+
+ if (not exists $wikistate{calendar}{maxyear}) {
+ $wikistate{calendar}{maxyear} = $year;
+ }
+
+ my $nmonth = $month;
+ my $nyear = $year;
+ while ((not exists $pagesources{"$archivebase/$nyear/" . sprintf("%02d", $nmonth)}) or ($nmonth == $month and $nyear == $year)) {
+ $nmonth += 1;
+ if ($nmonth == 13) {
+ $nyear += 1;
+ $nmonth = 1;
+ return ($nyear, $nmonth, 0) unless $nyear <= $wikistate{calendar}{maxyear};
+ }
+ }
+ return ($nyear, $nmonth, 1);
+}
+
+sub previousyear($$) {
+ my $year = shift;
+ my $archivebase = shift;
+
+ my $pyear = $year - 1;
+ while (not exists $pagesources{"$archivebase/$pyear"}) {
+ $pyear -= 1;
+ return ($pyear, 0) unless ($pyear >= $wikistate{calendar}{minyear});
+ }
+ return ($pyear, 1);
+}
+
+sub nextyear($$) {
+ my $year = shift;
+ my $archivebase = shift;
+
+ my $nyear = $year + 1;
+ while (not exists $pagesources{"$archivebase/$nyear"}) {
+ $nyear += 1;
+ return ($nyear, 0) unless ($nyear <= $wikistate{calendar}{maxyear});
+ }
+ return ($nyear, 1);
+}
+
sub format_month (@) {
my %params=@_;
push(@{$linkcache{"$year/$mtag/$mday"}}, $p);
}
- my $pmonth = $params{month} - 1;
- my $nmonth = $params{month} + 1;
- my $pyear = $params{year};
- my $nyear = $params{year};
-
- # Adjust for January and December
- if ($params{month} == 1) {
- $pmonth = 12;
- $pyear--;
- }
- if ($params{month} == 12) {
- $nmonth = 1;
- $nyear++;
- }
+ my $archivebase = 'archives';
+ $archivebase = $config{archivebase} if defined $config{archivebase};
+ $archivebase = $params{archivebase} if defined $params{archivebase};
+
+ my ($pyear, $pmonth, $pvalid) = previousmonth($params{year}, $params{month}, $archivebase);
+ my ($nyear, $nmonth, $nvalid) = nextmonth($params{year}, $params{month}, $archivebase);
# Add padding.
$pmonth=sprintf("%02d", $pmonth);
my $pmonthname=strftime_utf8("%B", localtime(timelocal(0,0,0,1,$pmonth-1,$pyear-1900)));
my $nmonthname=strftime_utf8("%B", localtime(timelocal(0,0,0,1,$nmonth-1,$nyear-1900)));
- my $archivebase = 'archives';
- $archivebase = $config{archivebase} if defined $config{archivebase};
- $archivebase = $params{archivebase} if defined $params{archivebase};
-
# Calculate URL's for monthly archives.
my ($url, $purl, $nurl)=("$monthname $params{year}",'','');
if (exists $pagesources{"$archivebase/$params{year}/$params{month}"}) {
sub format_year (@) {
my %params=@_;
-
+
my @post_months;
foreach my $p (pagespec_match_list($params{page},
"creation_year($params{year}) and ($params{pages})",
}
my $calendar="\n";
+
+ my $archivebase = 'archives';
+ $archivebase = $config{archivebase} if defined $config{archivebase};
+ $archivebase = $params{archivebase} if defined $params{archivebase};
- my $pyear = $params{year} - 1;
- my $nyear = $params{year} + 1;
+ my ($pyear, $pvalid) = previousyear($params{year}, $archivebase);
+ my ($nyear, $nvalid) = nextyear($params{year}, $archivebase);
my $thisyear = $now[5]+1900;
my $future_month = 0;
$future_month = $now[4]+1 if $params{year} == $thisyear;
- my $archivebase = 'archives';
- $archivebase = $config{archivebase} if defined $config{archivebase};
- $archivebase = $params{archivebase} if defined $params{archivebase};
-
# calculate URL's for previous and next years
my ($url, $purl, $nurl)=("$params{year}",'','');
if (exists $pagesources{"$archivebase/$params{year}"}) {
}
$params{month} = sprintf("%02d", $params{month});
+ $changed{$params{year}}{$params{month}} = 1;
if ($params{type} eq 'month' && $params{year} == $thisyear
&& $params{month} == $thismonth) {
}
}
}
+
return $needsbuild;
}
+sub scan (@) {
+ my %params=@_;
+ my $page=$params{page};
+
+ return unless $config{calendar_autocreate};
+
+ # Check if year pages have to be generated
+ if (pagespec_match($page, $config{archive_pagespec})) {
+ my @ctime = localtime($IkiWiki::pagectime{$page});
+ gencalendaryear($ctime[5]+1900);
+ gencalendarmonth($ctime[5]+1900, $ctime[4]+1);
+ }
+}
+
1
$commentuser = $params{username};
my $oiduser = eval { IkiWiki::openiduser($commentuser) };
-
if (defined $oiduser) {
# looks like an OpenID
$commentauthorurl = $commentuser;
$commentopenid = $commentuser;
}
else {
- $commentauthorurl = IkiWiki::cgiurl(
- do => 'goto',
- page => IkiWiki::userpage($commentuser)
- );
+ my $emailuser = IkiWiki::emailuser($commentuser);
+ if (defined $emailuser) {
+ $commentuser=$emailuser;
+ }
+
+ if (length $config{cgiurl}) {
+ $commentauthorurl = IkiWiki::cgiurl(
+ do => 'goto',
+ page => IkiWiki::userpage($commentuser)
+ );
+ }
$commentauthor = $commentuser;
}
$commentauthor = gettext("Anonymous");
}
- $commentstate{$page}{commentuser} = $commentuser;
- $commentstate{$page}{commentopenid} = $commentopenid;
- $commentstate{$page}{commentip} = $commentip;
- $commentstate{$page}{commentauthor} = $commentauthor;
- $commentstate{$page}{commentauthorurl} = $commentauthorurl;
- $commentstate{$page}{commentauthoravatar} = $params{avatar};
- if (! defined $pagestate{$page}{meta}{author}) {
- $pagestate{$page}{meta}{author} = $commentauthor;
- }
- if (! defined $pagestate{$page}{meta}{authorurl}) {
- $pagestate{$page}{meta}{authorurl} = $commentauthorurl;
- }
-
if ($config{comments_allowauthor}) {
if (defined $params{claimedauthor}) {
- $pagestate{$page}{meta}{author} = $params{claimedauthor};
+ $commentauthor = $params{claimedauthor};
}
if (defined $params{url}) {
}
if (safeurl($url)) {
- $pagestate{$page}{meta}{authorurl} = $url;
+ $commentauthorurl = $url;
}
}
}
- else {
+
+ $commentstate{$page}{commentuser} = $commentuser;
+ $commentstate{$page}{commentopenid} = $commentopenid;
+ $commentstate{$page}{commentip} = $commentip;
+ $commentstate{$page}{commentauthor} = $commentauthor;
+ $commentstate{$page}{commentauthorurl} = $commentauthorurl;
+ $commentstate{$page}{commentauthoravatar} = $params{avatar};
+ if (! defined $pagestate{$page}{meta}{author}) {
$pagestate{$page}{meta}{author} = $commentauthor;
+ }
+ if (! defined $pagestate{$page}{meta}{authorurl}) {
$pagestate{$page}{meta}{authorurl} = $commentauthorurl;
}
my $content = "[[!comment format=$type\n";
if (defined $session->param('name')) {
- my $username = $session->param('name');
+ my $username = IkiWiki::cloak($session->param('name'));
$username =~ s/"/"/g;
$content .= " username=\"$username\"\n";
}
+
if (defined $session->param('nickname')) {
my $nickname = $session->param('nickname');
$nickname =~ s/"/"/g;
$content .= " nickname=\"$nickname\"\n";
}
- elsif (defined $session->remote_addr()) {
- $content .= " ip=\"".$session->remote_addr()."\"\n";
+
+ if (!(defined $session->param('name') || defined $session->param('nickname')) &&
+ defined $session->remote_addr()) {
+ $content .= " ip=\"".IkiWiki::cloak($session->remote_addr())."\"\n";
}
if ($config{comments_allowauthor}) {
$subject = "comment ".(num_comments($page, $config{srcdir}) + 1);
}
$content .= " subject=\"$subject\"\n";
-
- $content .= " date=\"" . strftime_utf8('%Y-%m-%dT%H:%M:%SZ', gmtime) . "\"\n";
+ $content .= " date=\"" . commentdate() . "\"\n";
my $editcontent = $form->field('editcontent');
$editcontent="" if ! defined $editcontent;
exit;
}
+sub commentdate () {
+ strftime_utf8('%Y-%m-%dT%H:%M:%SZ', gmtime);
+}
+
sub getavatar ($) {
my $user=shift;
return undef unless defined $user;
return int @comments;
}
-sub unique_comment_location ($$$$) {
+sub unique_comment_location ($$$;$) {
my $page=shift;
eval q{use Digest::MD5 'md5_hex'};
error($@) if $@;
if (defined $params{session}) {
if (defined $params{session}->param("name")) {
return "web commit by ".
- $params{session}->param("name").
+ IkiWiki::cloak($params{session}->param("name")).
(length $params{message} ? ": $params{message}" : "");
}
elsif (defined $params{session}->remote_addr()) {
return "web commit from ".
- $params{session}->remote_addr().
+ IkiWiki::cloak($params{session}->remote_addr()).
(length $params{message} ? ": $params{message}" : "");
}
}
my $author="anon\@web";
if (defined $params{session}) {
if (defined $params{session}->param("name")) {
- return $params{session}->param("name").'@web';
+ return IkiWiki::cloak($params{session}->param("name")).'@web';
}
elsif (defined $params{session}->remote_addr()) {
- return $params{session}->remote_addr().'@web';
+ return IkiWiki::cloak($params{session}->remote_addr()).'@web';
}
}
return 'anon@web';
else {
# save page
check_canedit($page, $q, $session);
- checksessionexpiry($q, $session, $q->param('sid'));
+ checksessionexpiry($q, $session);
my $exists=-e "$config{srcdir}/$file";
--- /dev/null
+#!/usr/bin/perl
+# Ikiwiki email address as login
+package IkiWiki::Plugin::emailauth;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+ hook(type => "getsetup", id => "emailauth", "call" => \&getsetup);
+ hook(type => "cgi", id => "emailauth", "call" => \&cgi);
+ hook(type => "formbuilder_setup", id => "emailauth", "call" => \&formbuilder_setup);
+ IkiWiki::loadplugin("loginselector");
+ IkiWiki::Plugin::loginselector::register_login_plugin(
+ "emailauth",
+ \&email_setup,
+ \&email_check_input,
+ \&email_auth,
+ );
+}
+
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => 0,
+ section => "auth",
+ },
+ emailauth_sender => {
+ type => "string",
+ description => "email address to send emailauth mails as (default: adminemail)",
+ safe => 1,
+ rebuild => 0,
+ },
+}
+
+sub email_setup ($$) {
+ my $q=shift;
+ my $template=shift;
+
+ return 1;
+}
+
+sub email_check_input ($) {
+ my $cgi=shift;
+ defined $cgi->param('do')
+ && $cgi->param("do") eq "signin"
+ && defined $cgi->param('Email_entry')
+ && length $cgi->param('Email_entry');
+}
+
+# Send login link to email.
+sub email_auth ($$$$) {
+ my $cgi=shift;
+ my $session=shift;
+ my $errordisplayer=shift;
+ my $infodisplayer=shift;
+
+ my $email=$cgi->param('Email_entry');
+ unless ($email =~ /.\@./) {
+ $errordisplayer->(gettext("Invalid email address."));
+ return;
+ }
+
+ # Implicit account creation.
+ my $userinfo=IkiWiki::userinfo_retrieve();
+ if (! exists $userinfo->{$email} || ! ref $userinfo->{$email}) {
+ IkiWiki::userinfo_setall($email, {
+ 'email' => $email,
+ 'regdate' => time,
+ });
+ }
+
+ my $token=gentoken($email, $session);
+ my $template=template("emailauth.tmpl");
+ $template->param(
+ wikiname => $config{wikiname},
+ # Intentionally using short field names to keep link short.
+ authurl => IkiWiki::cgiurl_abs(
+ 'e' => $email,
+ 'v' => $token,
+ ),
+ );
+
+ eval q{use Mail::Sendmail};
+ error($@) if $@;
+ my $shorturl=$config{url};
+ $shorturl=~s/^https?:\/\///i;
+ my $emailauth_sender=$config{emailauth_sender};
+ $emailauth_sender=$config{adminemail} unless defined $emailauth_sender;
+ sendmail(
+ To => $email,
+ From => "$config{wikiname} admin <".
+ (defined $emailauth_sender ? $emailauth_sender : "")
+ .">",
+ Subject => "$config{wikiname} login | $shorturl",
+ Message => $template->output,
+ ) or error(gettext("Failed to send mail"));
+
+ $infodisplayer->(gettext("You have been sent an email, with a link you can open to complete the login process."));
+}
+
+# Finish login process.
+sub cgi ($$) {
+ my $cgi=shift;
+
+ my $email=$cgi->param('e');
+ my $v=$cgi->param('v');
+ if (defined $email && defined $v && length $email && length $v) {
+ my $token=gettoken($email);
+ if ($token eq $v) {
+ cleartoken($email);
+ my $session=getsession($email);
+ IkiWiki::cgi_postsignin($cgi, $session);
+ }
+ elsif (length $token ne length $cgi->param('v')) {
+ error(gettext("Wrong login token length. Please check that you pasted in the complete login link from the email!"));
+ }
+ else {
+ loginfailure();
+ }
+ }
+}
+
+sub formbuilder_setup (@) {
+ my %params=@_;
+ my $form=$params{form};
+ my $session=$params{session};
+
+ if ($form->title eq "preferences" &&
+ IkiWiki::emailuser($session->param("name"))) {
+ $form->field(name => "email", disabled => 1);
+ }
+}
+
+# Generates the token that will be used in the authurl to log the user in.
+# This needs to be hard to guess, and relatively short. Generating a cgi
+# session id will make it as hard to guess as any cgi session.
+#
+# Store token in userinfo; this allows the user to log in
+# using a different browser session, if it takes a while for the
+# email to get to them.
+#
+# The postsignin value from the session is also stored in the userinfo
+# to allow resuming in a different browser session.
+sub gentoken ($$) {
+ my $email=shift;
+ my $session=shift;
+ eval q{use CGI::Session};
+ error($@) if $@;
+ my $token = CGI::Session->new->id;
+ IkiWiki::userinfo_set($email, "emailauthexpire", time+(60*60*24));
+ IkiWiki::userinfo_set($email, "emailauth", $token);
+ IkiWiki::userinfo_set($email, "emailauthpostsignin", defined $session->param("postsignin") ? $session->param("postsignin") : "");
+ return $token;
+}
+
+# Gets the token, checking for expiry.
+sub gettoken ($) {
+ my $email=shift;
+ my $val=IkiWiki::userinfo_get($email, "emailauth");
+ my $expire=IkiWiki::userinfo_get($email, "emailauthexpire");
+ if (! length $val || time > $expire) {
+ loginfailure();
+ }
+ return $val;
+}
+
+# Generate a session to use after successful login.
+sub getsession ($) {
+ my $email=shift;
+
+ IkiWiki::lockwiki();
+ IkiWiki::loadindex();
+ my $session=IkiWiki::cgi_getsession();
+
+ my $postsignin=IkiWiki::userinfo_get($email, "emailauthpostsignin");
+ IkiWiki::userinfo_set($email, "emailauthpostsignin", "");
+ if (defined $postsignin && length $postsignin) {
+ $session->param(postsignin => $postsignin);
+ }
+
+ $session->param(name => $email);
+ my $nickname=$email;
+ $nickname=~s/@.*//;
+ $session->param(nickname => Encode::decode_utf8($nickname));
+
+ IkiWiki::cgi_savesession($session);
+
+ return $session;
+}
+
+sub cleartoken ($) {
+ my $email=shift;
+ IkiWiki::userinfo_set($email, "emailauthexpire", 0);
+ IkiWiki::userinfo_set($email, "emailauth", "");
+}
+
+sub loginfailure () {
+ error "Bad email authentication token. Please retry login.";
+}
+
+1
chomp $mimetype;
close $file_h;
}
- if (! defined $mimetype || $mimetype !~s /;.*//) {
+ if (! defined $mimetype) {
# Fall back to default value.
$mimetype=File::MimeInfo::Magic::default($file)
if $mimeinfo_ok;
$mimetype="unknown";
}
}
+ # Ignore any parameters, we only want the type itself
+ $mimetype =~ s/;.*//;
my $regexp=IkiWiki::glob2re($wanted);
if ($mimetype!~$regexp) {
sub run_or_cry ($@) { safe_git(sub { warn @_ }, undef, @_) }
sub run_or_non ($@) { safe_git(undef, undef, @_) }
+sub ensure_committer {
+ if (! length $ENV{GIT_AUTHOR_NAME} || ! length $ENV{GIT_COMMITTER_NAME}) {
+ my $name = join('', run_or_non("git", "config", "user.name"));
+ if (! length $name) {
+ run_or_die("git", "config", "user.name", "IkiWiki");
+ }
+ }
+
+ if (! length $ENV{GIT_AUTHOR_EMAIL} || ! length $ENV{GIT_COMMITTER_EMAIL}) {
+ my $email = join('', run_or_non("git", "config", "user.email"));
+ if (! length $email) {
+ run_or_die("git", "config", "user.email", "ikiwiki.info");
+ }
+ }
+}
sub merge_past ($$$) {
# Unlike with Subversion, Git cannot make a 'svn merge -rN:M file'.
my @undo; # undo stack for cleanup in case of an error
my $conflict; # file content with conflict markers
+ ensure_committer();
+
eval {
# Hide local changes from Git by renaming the modified file.
# Relative paths must be converted to absolute for renaming.
sub rcs_update () {
# Update working directory.
+ ensure_committer();
+
if (length $config{gitorigin_branch}) {
run_or_cry('git', 'pull', '--prune', $config{gitorigin_branch});
}
$u=$params{session}->remote_addr();
}
if (defined $u) {
- $u=encode_utf8($u);
+ $u=encode_utf8(IkiWiki::cloak($u));
$ENV{GIT_AUTHOR_NAME}=$u;
}
if (defined $params{session}->param("nickname")) {
}
}
+ ensure_committer();
+
$params{message} = IkiWiki::possibly_foolish_untaint($params{message});
my @opts;
if ($params{message} !~ /\S/) {
my ($file) = @_;
+ ensure_committer();
+
run_or_cry('git', 'add', $file);
}
my ($file) = @_;
+ ensure_committer();
+
run_or_cry('git', 'rm', '-f', $file);
}
sub rcs_rename ($$) {
my ($src, $dest) = @_;
+ ensure_committer();
+
run_or_cry('git', 'mv', '-f', $src, $dest);
}
my $rev = shift;
my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
+ ensure_committer();
+
if (run_or_non('git', 'revert', '--no-commit', $sha1)) {
return undef;
}
my $page = shift;
if (!defined $page) {
- $page = IkiWiki::decode_utf8($q->param("page"));
+ $page = IkiWiki::decode_utf8(scalar $q->param("page"));
if (!defined $page) {
error("missing page parameter");
my $haiku;
eval q{use Coy};
- if ($@ || ! Coy->can("Coy::with_haiku")) {
+ if ($config{deterministic}) {
+ $haiku = "Coy changes often.
+ For deterministic builds
+ try this substitute.
+ ",
+ }
+ elsif ($@ || ! Coy->can("Coy::with_haiku")) {
my @canned=(
"The lack of a Coy:
No darting, subtle haiku.
my $im = Image::Magick->new();
my $imglink;
my $imgdatalink;
- my $r = $im->Read("$srcfile\[$pagenumber]");
+ my $r = $im->Read(":$srcfile\[$pagenumber]");
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
-
+
+ if (! defined $im->Get("width") || ! defined $im->Get("height")) {
+ error sprintf(gettext("failed to get dimensions of %s"), $file);
+ }
+
my ($dwidth, $dheight);
if ($params{size} eq 'full') {
my $session=shift;
if ($q->param('do') eq 'blog') {
- my $page=titlepage(decode_utf8($q->param('title')));
+ my $page=titlepage(decode_utf8(scalar $q->param('title')));
$page=~s/(\/)/"__".ord($1)."__"/eg; # don't create subdirs
# if the page already exists, munge it to be unique
my $from=$q->param('from');
# Running in scan mode: only do the essentials
if (yesno($params{trail}) && IkiWiki::Plugin::trail->can("preprocess_trailitems")) {
- # default to sorting age, the same as inline itself,
- # but let the params override that
- IkiWiki::Plugin::trail::preprocess_trailitems(sort => 'age', %params);
+ # default to sorting by age with fallback to title,
+ # the same as inline itself, but let the params
+ # override that
+ IkiWiki::Plugin::trail::preprocess_trailitems(sort => 'age title', %params);
}
return;
}
if (yesno($params{trail}) && IkiWiki::Plugin::trail->can("preprocess_trailitems")) {
- scalar IkiWiki::Plugin::trail::preprocess_trailitems(sort => 'age', %params);
+ scalar IkiWiki::Plugin::trail::preprocess_trailitems(sort => 'age title', %params);
}
my $raw=yesno($params{raw});
@list = pagespec_match_list($params{page}, $params{pages},
deptype => deptype($quick ? "presence" : "content"),
filter => sub { $_[0] eq $params{page} },
- sort => exists $params{sort} ? $params{sort} : "age",
+ sort => exists $params{sort} ? $params{sort} : "age title",
reverse => yesno($params{reverse}),
($num ? (num => $num) : ()),
);
--- /dev/null
+#!/usr/bin/perl
+package IkiWiki::Plugin::loginselector;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+# Plugins that provide login methods can register themselves here.
+# Note that the template and js file also have be be modifed to add a new
+# login method.
+our %login_plugins;
+
+sub register_login_plugin ($$$$) {
+ # Same as the name of the plugin that is registering itself as a
+ # login plugin. eg, "openid"
+ my $plugin_name=shift;
+ # This sub is passed a cgi object and a template object which it
+ # can manipulate. It should return true if the plugin can be used
+ # (it might load necessary modules for auth checking, for example).
+ my $plugin_setup=shift;
+ # This sub is passed a cgi object, and should return true
+ # if it looks like the user is logging in using the plugin.
+ my $plugin_check_input=shift;
+ # This sub is passed a cgi object, a session object, an error
+ # display callback, and an info display callback, and should
+ # handle the actual authentication. It can either exit w/o
+ # returning, if it is able to handle auth, or it can pass an
+ # error message to the error display callback to make the
+ # openid selector form be re-disiplayed with an error message
+ # on it.
+ my $plugin_auth=shift;
+ $login_plugins{$plugin_name}={
+ setup => $plugin_setup,
+ check_input => $plugin_check_input,
+ auth => $plugin_auth,
+ };
+}
+
+sub login_selector {
+ my $real_cgi_signin=shift;
+ my $otherform_label=shift;
+ my $q=shift;
+ my $session=shift;
+
+ my $template=IkiWiki::template("login-selector.tmpl");
+
+ foreach my $plugin (keys %login_plugins) {
+ if (! $login_plugins{$plugin}->{setup}->($template)) {
+ delete $login_plugins{$plugin};
+ }
+ else {
+ $template->param("login_selector_$plugin", 1);
+ }
+ }
+
+ foreach my $plugin (keys %login_plugins) {
+ if ($login_plugins{$plugin}->{check_input}->($q)) {
+ $login_plugins{$plugin}->{auth}->($q, $session, sub {
+ $template->param(login_error => shift());
+ }, sub {
+ $template->param(login_info => shift());
+ });
+ last;
+ }
+ }
+
+ $template->param(
+ cgiurl => IkiWiki::cgiurl(),
+ ($real_cgi_signin ? (otherform => $real_cgi_signin->($q, $session, 1)) : ()),
+ otherform_label => $otherform_label,
+ );
+
+ IkiWiki::printheader($session);
+ print IkiWiki::cgitemplate($q, "signin", $template->output);
+ exit;
+}
+
+sub import {
+ add_underlay("login-selector");
+ add_underlay("jquery");
+ hook(type => "getsetup", id => "loginselector", call => \&getsetup);
+ hook(type => "checkconfig", id => "loginselector", call => \&checkconfig);
+ hook(type => "auth", id => "loginselector", call => \&authstub);
+}
+
+sub checkconfig () {
+ if ($config{cgi}) {
+ # Intercept normal signin form, so the login selector
+ # can be displayed.
+ #
+ # When other auth hooks are registered, give the selector
+ # a reference to the normal signin form.
+ require IkiWiki::CGI;
+ my $real_cgi_signin;
+ my $otherform_label=gettext("Other");
+ if (keys %{$IkiWiki::hooks{auth}} > 1) {
+ $real_cgi_signin=\&IkiWiki::cgi_signin;
+ # Special case to avoid labeling password auth as
+ # "Other" when it's the only auth plugin not
+ # integrated with the loginselector.
+ my %h=%{$IkiWiki::hooks{auth}};
+ foreach my $p (keys %login_plugins) {
+ delete $h{$p};
+ }
+ delete $h{loginselector};
+ if (keys %h == 1 && exists $h{passwordauth}) {
+ $otherform_label=gettext("Password");
+ }
+ }
+ inject(name => "IkiWiki::cgi_signin", call => sub ($$) {
+ login_selector($real_cgi_signin, $otherform_label, @_);
+ });
+ }
+}
+
+sub getsetup () {
+ return
+ plugin => {
+ # this plugin is safe but only makes sense as a
+ # dependency
+ safe => 0,
+ rebuild => 0,
+ },
+}
+
+sub authstub ($$) {
+ # While this hook is not currently used, it needs to exist
+ # so ikiwiki knows that the wiki supports logins, and will
+ # enable the Preferences page.
+}
+
+1
my $user="Anonymous";
if (defined $params{session}) {
if (defined $params{session}->param("name")) {
- $user = $params{session}->param("name");
+ $user = IkiWiki::cloak($params{session}->param("name"));
}
elsif (defined $params{session}->remote_addr()) {
- $user = $params{session}->remote_addr();
+ $user = IkiWiki::cloak($params{session}->remote_addr());
}
my $nickname=$user;
elsif ($key eq 'name') {
push @{$metaheaders{$page}}, scrub('<meta name="'.
encode_entities($value).
+ '" '.
join(' ', map { "$_=\"$params{$_}\"" } keys %params).
' />', $page, $destpage);
}
sub mirrorlist ($) {
my $page=shift;
- return ($config{html5} ? '<nav id="mirrorlist">' : '<div>').
+ return ($config{html5} ? '<nav' : '<div').' id="mirrorlist">'.
(keys %{$config{mirrorlist}} > 1 ? gettext("Mirrors") : gettext("Mirror")).
": ".
join(", ",
if (defined $params{session}) {
if (defined $params{session}->param("name")) {
- return "Web user: " . $params{session}->param("name");
+ return "Web user: " . IkiWiki::cloak($params{session}->param("name"));
}
elsif (defined $params{session}->remote_addr()) {
- return "Web IP: " . $params{session}->remote_addr();
+ return "Web IP: " . IkiWiki::cloak($params{session}->remote_addr());
}
}
return "Web: Anonymous";
use IkiWiki 3.00;
sub import {
- add_underlay("openid-selector");
- add_underlay("jquery");
- hook(type => "checkconfig", id => "openid", call => \&checkconfig);
hook(type => "getsetup", id => "openid", call => \&getsetup);
hook(type => "auth", id => "openid", call => \&auth);
hook(type => "formbuilder_setup", id => "openid",
call => \&formbuilder_setup, last => 1);
-}
-
-sub checkconfig () {
- if ($config{cgi}) {
- # Intercept normal signin form, so the openid selector
- # can be displayed.
- #
- # When other auth hooks are registered, give the selector
- # a reference to the normal signin form.
- require IkiWiki::CGI;
- my $real_cgi_signin;
- if (keys %{$IkiWiki::hooks{auth}} > 1) {
- $real_cgi_signin=\&IkiWiki::cgi_signin;
- }
- inject(name => "IkiWiki::cgi_signin", call => sub ($$) {
- openid_selector($real_cgi_signin, @_);
- });
- }
+ IkiWiki::loadplugin("emailauth");
+ IkiWiki::loadplugin("loginselector");
+ IkiWiki::Plugin::loginselector::register_login_plugin(
+ "openid",
+ \&openid_setup,
+ \&openid_check_input,
+ \&openid_auth,
+ );
}
sub getsetup () {
},
}
-sub openid_selector {
- my $real_cgi_signin=shift;
- my $q=shift;
- my $session=shift;
-
- my $openid_url=$q->param('openid_identifier');
- my $openid_error;
+sub openid_setup ($$) {
+ my $q=shift;
+ my $template=shift;
- if (! load_openid_module()) {
- if ($real_cgi_signin) {
- $real_cgi_signin->($q, $session);
- exit;
+ if (load_openid_module()) {
+ my $openid_url=$q->param('openid_identifier');
+ if (defined $openid_url) {
+ $template->param(openid_url => $openid_url);
}
- error(sprintf(gettext("failed to load openid module: "), @_));
+ return 1;
}
- elsif (defined $q->param("action") && $q->param("action") eq "verify") {
- validate($q, $session, $openid_url, sub {
- $openid_error=shift;
- });
+ else {
+ return 0;
}
+}
- my $template=IkiWiki::template("openid-selector.tmpl");
- $template->param(
- cgiurl => IkiWiki::cgiurl(),
- (defined $openid_error ? (openid_error => $openid_error) : ()),
- (defined $openid_url ? (openid_url => $openid_url) : ()),
- ($real_cgi_signin ? (nonopenidform => $real_cgi_signin->($q, $session, 1)) : ()),
- );
+sub openid_check_input ($) {
+ my $q=shift;
+ my $openid_url=$q->param('openid_identifier');
+ defined $q->param("action") && $q->param("action") eq "verify" && defined $openid_url && length $openid_url;
+}
- IkiWiki::printheader($session);
- print IkiWiki::cgitemplate($q, "signin", $template->output);
- exit;
+sub openid_auth ($$$$) {
+ my $q=shift;
+ my $session=shift;
+ my $errordisplayer=shift;
+ my $openid_url=$q->param('openid_identifier');
+ validate($q, $session, $openid_url, $errordisplayer);
}
sub formbuilder_setup (@) {
size => 1, force => 1,
fieldset => "login",
comment => $session->param("name"));
- $form->field(name => "email", type => "hidden");
}
}
my $claimed_identity = $csr->claimed_identity($openid_url);
if (! $claimed_identity) {
if ($errhandler) {
- $errhandler->($csr->err);
+ if (ref($errhandler) eq 'CODE') {
+ $errhandler->($csr->err);
+ }
return 0;
}
else {
}
elsif (defined $q->param('openid_identifier')) {
# myopenid.com affiliate support
- validate($q, $session, $q->param('openid_identifier'));
+ validate($q, $session, scalar $q->param('openid_identifier'));
}
}
my $name=shift;
length $name &&
$name=~/$config{wiki_file_regexp}/ &&
+ # don't allow registering
+ # accounts that look like
+ # openids, or email
+ # addresses, even if the
+ # file regexp allows it
+ $name!~/[\/:\@]/ &&
! IkiWiki::userinfo_get($name, "regdate");
},
);
}
elsif ($form->title eq "preferences") {
my $user=$session->param("name");
- if (! IkiWiki::openiduser($user)) {
+ if (! IkiWiki::openiduser($user) && ! IkiWiki::emailuser($user)) {
$form->field(name => "name", disabled => 1,
value => $user, force => 1,
fieldset => "login");
}
if (-e $pofile) {
- system("msgmerge", "--previous", "-q", "-U", "--backup=none", $pofile, $potfile) == 0
- or error("po(refreshpofiles) ".
- sprintf(gettext("failed to update %s"),
- $pofile));
+ if (! (system("msgmerge", "--previous", "-q", "-U", "--backup=none", $pofile, $potfile) == 0)) {
+ print STDERR ("po(refreshpofiles) ". sprintf(gettext("failed to update %s"), $pofile));
+ }
}
else {
File::Copy::syscopy($potfile,$pofile)
my $cgi=shift;
my $session=shift;
if (defined $cgi->param('do') && $cgi->param('do') eq "poll") {
- my $choice=decode_utf8($cgi->param('choice'));
+ my $choice=decode_utf8(scalar $cgi->param('choice'));
if (! defined $choice || not length $choice) {
error("no choice specified");
}
my %params=@_;
my $grammar = ($params{grammar} or 'polygen');
my $symbol = ($params{symbol} or undef);
+ my $options = ($config{deterministic} ? '-seed 42' : '');
# Sanitize parameters
$grammar =~ IkiWiki::basename($grammar);
my $res;
if (defined $symbol) {
- $res = `polygen -S $symbol $grmfile 2>/dev/null`;
+ $res = `polygen -S $symbol $options $grmfile 2>/dev/null`;
}
else {
- $res = `polygen $grmfile 2>/dev/null`;
+ $res = `polygen $options $grmfile 2>/dev/null`;
}
if ($?) {
IkiWiki::decode_form_utf8($form);
if ($form->submitted eq 'Revert' && $form->validate) {
- IkiWiki::checksessionexpiry($q, $session, $q->param('sid'));
+ IkiWiki::checksessionexpiry($q, $session);
my $message=sprintf(gettext("This reverts commit %s"), $rev);
if (defined $form->field('revertmessage') &&
length $form->field('revertmessage')) {
postremove($session);
}
elsif ($form->submitted eq 'Remove' && $form->validate) {
- IkiWiki::checksessionexpiry($q, $session, $q->param('sid'));
+ IkiWiki::checksessionexpiry($q, $session);
my @pages=$form->field("page");
# on it.
$oldcgi->param("editcontent",
renamepage_hook($dest, $src, $dest,
- $oldcgi->param("editcontent")));
+ scalar $oldcgi->param("editcontent")));
# Get a new edit token; old was likely invalidated.
$oldcgi->param("rcsinfo",
if ($q->param("do") eq 'rename') {
my $session=shift;
- my ($form, $buttons)=rename_form($q, $session, Encode::decode_utf8($q->param("page")));
+ my ($form, $buttons)=rename_form($q, $session, Encode::decode_utf8(scalar $q->param("page")));
IkiWiki::decode_form_utf8($form);
my $src=$form->field("page");
postrename($q, $session, $src);
}
elsif ($form->submitted eq 'Rename' && $form->validate) {
- IkiWiki::checksessionexpiry($q, $session, $q->param('sid'));
+ IkiWiki::checksessionexpiry($q, $session);
# These untaints are safe because of the checks
# performed in check_canrename later.
IkiWiki::Plugin::attachment::is_held_attachment($src);
if ($held) {
rename($held, IkiWiki::Plugin::attachment::attachment_holding_location($dest));
- postrename($q, $session, $src, $dest, $q->param("attachment"))
+ postrename($q, $session, $src, $dest, scalar $q->param("attachment"))
unless defined $srcfile;
}
$renamesummary.=$template->output;
}
- postrename($q, $session, $src, $dest, $q->param("attachment"));
+ postrename($q, $session, $src, $dest, scalar $q->param("attachment"));
}
else {
IkiWiki::showform($form, $buttons, $session, $q);
if (defined $params{session}) {
if (defined $params{session}->param("name")) {
return "web commit by ".
- $params{session}->param("name").
+ IkiWiki::cloak($params{session}->param("name")).
(length $params{message} ? ": $params{message}" : "");
}
elsif (defined $params{session}->remote_addr()) {
return "web commit from ".
- $params{session}->remote_addr().
+ IkiWiki::cloak($params{session}->remote_addr()).
(length $params{message} ? ": $params{message}" : "");
}
}
--- /dev/null
+#!/usr/bin/perl
+# Define self-documenting templates as wiki pages without HTML::Template
+# markup leaking into IkiWiki's output.
+# Copyright © 2013-2014 Simon McVittie. GPL-2+, see debian/copyright
+package IkiWiki::Plugin::templatebody;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+use Encode;
+
+sub import {
+ hook(type => "getsetup", id => "templatebody", call => \&getsetup);
+ hook(type => "preprocess", id => "templatebody", call => \&preprocess,
+ scan => 1);
+ hook(type => "readtemplate", id => "templatebody",
+ call => \&readtemplate);
+}
+
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => undef,
+ section => "core",
+ },
+}
+
+# This doesn't persist between runs: we're going to read and scan the
+# template file regardless, so there's no point in saving it to the index.
+# Example contents:
+# ("templates/note" => "<div class=\"notebox\">\n<TMPL_VAR text>\n</div>")
+my %templates;
+
+sub preprocess (@) {
+ my %params=@_;
+
+ # [[!templatebody "<div>hello</div>"]] results in
+ # preprocess("<div>hello</div>" => undef, page => ...)
+ my $content = $_[0];
+ if (length $_[1]) {
+ error(gettext("first parameter must be the content"));
+ }
+
+ $templates{$params{page}} = $content;
+
+ return "";
+}
+
+sub readtemplate {
+ my %params = @_;
+ my $tpage = $params{page};
+ my $content = $params{content};
+ my $filename = $params{filename};
+
+ # pass-through if it's a .tmpl attachment or otherwise unsuitable
+ return $content unless defined $tpage;
+ return $content if $tpage =~ /\.tmpl$/;
+ my $src = $pagesources{$tpage};
+ return $content unless defined $src;
+ return $content unless defined pagetype($src);
+
+ # We might be using the template for [[!template]], which has to run
+ # during the scan stage so that templates can include scannable
+ # directives which are expanded in the resulting page. Calls to
+ # IkiWiki::scan are in arbitrary order, so the template might
+ # not have been scanned yet. Make sure.
+ require IkiWiki::Render;
+ IkiWiki::scan($src);
+
+ # Having scanned it, we know whether it had a [[!templatebody]].
+ if (exists $templates{$tpage}) {
+ return $templates{$tpage};
+ }
+
+ # If not, return the whole thing. (Eventually, after implementing
+ # a transition, this can become an error.)
+ return $content;
+}
+
+1
my $tex = $config{teximg_prefix};
$tex .= '\['.$code.'\]';
$tex .= $config{teximg_postfix};
- $tex =~ s!\\documentclass{article}!\\documentclass[${height}pt]{article}!g;
- $tex =~ s!\\documentclass{scrartcl}!\\documentclass[${height}pt]{scrartcl}!g;
+ $tex =~ s!\\documentclass\{article}!\\documentclass[${height}pt]{article}!g;
+ $tex =~ s!\\documentclass\{scrartcl}!\\documentclass[${height}pt]{scrartcl}!g;
my $tmp = eval { create_tmp_dir($digest) };
if (! $@ &&
if (defined $params{session}) {
if (defined $params{session}->param("name")) {
$message="web commit by ".
- $params{session}->param("name").
+ IkiWiki::cloak($params{session}->param("name")).
(length $message ? ": $message" : "");
}
elsif (defined $params{session}->remote_addr()) {
$message="web commit from ".
- $params{session}->remote_addr().
+ IkiWiki::cloak($params{session}->remote_addr()).
(length $message ? ": $message" : "");
}
}
my @command;
if ($form->submitted eq 'Rebuild Wiki') {
- @command=("ikiwiki", "-setup", $config{setupfile},
- "-rebuild", "-v");
+ @command=("ikiwiki", "--setup", $config{setupfile},
+ "--rebuild", "-v");
}
else {
- @command=("ikiwiki", "-setup", $config{setupfile},
- "-refresh", "-wrappers", "-v");
+ @command=("ikiwiki", "--setup", $config{setupfile},
+ "--refresh", "--wrappers", "-v");
}
close STDERR;
use strict;
use IkiWiki;
-my (%backlinks, %rendered);
+my (%backlinks, %rendered, %scanned);
our %brokenlinks;
my $links_calculated=0;
}
templateactions($template, $page);
- my @backlinks=sort { $a->{page} cmp $b->{page} } backlinks($page);
+ my @backlinks=sort { $a->{page} cmp $b->{page} || $a->{url} cmp $b->{url} } backlinks($page);
my ($backlinks, $more_backlinks);
if (@backlinks <= $config{numbacklinks} || ! $config{numbacklinks}) {
$backlinks=\@backlinks;
ctime => displaytime($pagectime{$page}, undef, 1),
baseurl => baseurl($page),
html5 => $config{html5},
+ responsive_layout => $config{responsive_layout},
);
run_hooks(pagetemplate => sub {
sub scan ($) {
my $file=shift;
+ return if ($config{rebuild} && $phase > PHASE_SCAN) || $scanned{$file};
+ $scanned{$file}=1;
debug(sprintf(gettext("scanning %s"), $file));
}
$pagecase{lc $page}=$page;
if (! exists $pagectime{$page}) {
- $pagectime{$page}=(srcfile_stat($file))[10];
+ my @stat=srcfile_stat($file, 1);
+ # For the creation time of the page, take the
+ # inode change time (not creation time!) or
+ # the modification time, whichever is older.
+ my $ctime=($stat[10] < $stat[9] ? $stat[10] : $stat[9]);
+ $pagectime{$page}=$ctime if defined $ctime;
}
}
}
my @internal_changed;
foreach my $file (@$files) {
my $page=pagename($file);
- my ($srcfile, @stat)=srcfile_stat($file);
- if (! exists $pagemtime{$page} ||
- $stat[9] > $pagemtime{$page} ||
- $forcerebuild{$page}) {
+ my ($srcfile, @stat)=srcfile_stat($file, 1);
+ if (defined $srcfile &&
+ (! exists $pagemtime{$page} ||
+ $stat[9] > $pagemtime{$page} ||
+ $forcerebuild{$page})) {
$pagemtime{$page}=$stat[9];
if (isinternal($page)) {
}
sub refresh () {
+ $phase = PHASE_SCAN;
+
srcdir_check();
run_hooks(refresh => sub { shift->() });
my ($files, $pages, $new, $internal_new, $del, $internal_del, $changed, $internal_changed);
}
calculate_links();
-
+
+ # At this point it becomes OK to start matching pagespecs.
+ $phase = PHASE_RENDER;
+ # Save some memory in full rebuilds: we no longer need to keep
+ # track of which pages we've scanned, because we can assume the
+ # answer is "all of them".
+ %scanned = () if $config{rebuild};
+
remove_del(@$del, @$internal_del);
foreach my $file (@$changed) {
loadindex();
unlockwiki();
+ # This function behaves as though it's in the render phase;
+ # all other files are assumed to have been scanned last time.
+ $phase = PHASE_RENDER;
+
my $srcfile=possibly_foolish_untaint($config{render});
my $file=$srcfile;
$file=~s/\Q$config{srcdir}\E\/?//;
foreach my $admin (@{$config{adminuser}}) {
next if defined IkiWiki::openiduser($admin);
- # Prompt for password w/o echo.
- my ($password, $password2);
- system('stty -echo 2>/dev/null');
- local $|=1;
- print "\n\nCreating wiki admin $admin ...\n";
- for (;;) {
- print "Choose a password: ";
- chomp($password=<STDIN>);
- print "\n";
- print "Confirm password: ";
- chomp($password2=<STDIN>);
-
- last if $password2 eq $password;
-
- print "Password mismatch.\n\n";
- }
- print "\n\n\n";
- system('stty sane 2>/dev/null');
+ if (! defined IkiWiki::emailuser($admin)) {
+ # Prompt for password w/o echo.
+ my ($password, $password2);
+ system('stty -echo 2>/dev/null');
+ local $|=1;
+ print "\n\nCreating wiki admin $admin ...\n";
+ for (;;) {
+ print "Choose a password: ";
+ chomp($password=<STDIN>);
+ print "\n";
+ print "Confirm password: ";
+ chomp($password2=<STDIN>);
+
+ last if $password2 eq $password;
+
+ print "Password mismatch.\n\n";
+ }
+ print "\n\n\n";
+ system('stty sane 2>/dev/null');
- if (IkiWiki::userinfo_setall($admin, { regdate => time }) &&
- IkiWiki::Plugin::passwordauth::setpassword($admin, $password)) {
- IkiWiki::userinfo_set($admin, "email", $config{adminemail}) if defined $config{adminemail};
- }
- else {
- error("problem setting up $admin user");
+ if (IkiWiki::userinfo_setall($admin, { regdate => time }) &&
+ IkiWiki::Plugin::passwordauth::setpassword($admin, $password)) {
+ IkiWiki::userinfo_set($admin, "email", $config{adminemail}) if defined $config{adminemail};
+ }
+ else {
+ error("problem setting up $admin user");
+ }
}
}
prettydir($config{$key})."\n";
}
print "To modify settings, edit ".prettydir($config{dumpsetup})." and then run:\n";
- print " ikiwiki -setup ".prettydir($config{dumpsetup})."\n";
+ print " ikiwiki --setup ".prettydir($config{dumpsetup})."\n";
exit 0;
}
HTTP_COOKIE REMOTE_USER HTTPS REDIRECT_STATUS
HTTP_HOST SERVER_PORT HTTPS HTTP_ACCEPT
REDIRECT_URL} if $config{cgi};
+ my $envsize=$#envsave;
my $envsave="";
foreach my $var (@envsave) {
$envsave.=<<"EOF";
addenv("$var", s);
EOF
}
+ if (ref $config{ENV} eq 'HASH') {
+ foreach my $key (keys %{$config{ENV}}) {
+ my $val=$config{ENV}{$key};
+ utf8::encode($val) if utf8::is_utf8($val);
+ $val =~ s/([^A-Za-z0-9])/sprintf '""\\x%02x""', ord($1)/ge;
+ $envsize += 1;
+ $envsave.=<<"EOF";
+ addenv("$key", "$val");
+EOF
+ }
+ delete $config{ENV};
+ }
my @wrapper_hooks;
run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
#include <sys/file.h>
extern char **environ;
-char *newenviron[$#envsave+7];
+char *newenviron[$envsize+7];
int i=0;
void addenv(char *var, char *val) {
char *s=malloc(strlen(var)+1+strlen(val)+1);
- if (!s)
+ if (!s) {
perror("malloc");
- sprintf(s, "%s=%s", var, val);
- newenviron[i++]=s;
+ exit(1);
+ }
+ else {
+ sprintf(s, "%s=%s", var, val);
+ newenviron[i++]=s;
+ }
}
void set_cgilock_fd (int lockfd) {
- char *fd_s=malloc(8);
+ char fd_s[12];
sprintf(fd_s, "%i", lockfd);
- setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
+ if (setenv("IKIWIKI_CGILOCK_FD", fd_s, 1) != 0) {
+ perror("setenv");
+ exit(1);
+ }
}
int main (int argc, char **argv) {
tflag=$(shell if [ -n "$$NOTAINT" ] && [ "$$NOTAINT" != 1 ]; then printf -- "-T"; fi)
extramodules=$(shell if [ "$$PROFILE" = 1 ]; then printf -- "-d:NYTProf"; fi)
-outprogs=ikiwiki.out ikiwiki-transition.out ikiwiki-calendar.out
+outprogs=ikiwiki.out ikiwiki-transition.out ikiwiki-calendar.out ikiwiki-comment.out
scripts=ikiwiki-update-wikilist ikiwiki-makerepo
sysconfdir_scripts=ikiwiki-mass-rebuild ikiwiki-update-wikilist
+shebang_scripts=$(shell $(FIND) . -type f \( -name '*.in' -o -name '*.cgi' -o -name '*.pm' -o -name '*.pm.example' -o -name '*.t' -o -name '*.setup' -o -name 'ikiwiki-comment' -o -name 'ikiwiki-mass-rebuild' -o -name 'ikiwiki-update-wikilist' -o -name 'gitremotes' -o -name 'mdwn2man' -o -name 'pm_filter' -o -name 'po2wiki' -o -name 'externaldemo' \))
PROBABLE_INST_LIB=$(shell \\
if [ "$(INSTALLDIRS)" = "perl" ]; then \\
chmod +x $@
ikiwiki.setup:
- HOME=/home/me $(PERL) -Iblib/lib $(extramodules) $(tflag) ikiwiki.in -dumpsetup ikiwiki.setup
+ HOME=/home/me $(PERL) -Iblib/lib $(extramodules) $(tflag) ikiwiki.in --dumpsetup ikiwiki.setup
-extra_build: $(outprogs) ikiwiki.setup docwiki sysconfdir
+extra_build: perl_shebangs $(outprogs) ikiwiki.setup docwiki sysconfdir
./mdwn2man ikiwiki 1 doc/usage.mdwn > ikiwiki.man
./mdwn2man ikiwiki-mass-rebuild 8 doc/ikiwiki-mass-rebuild.mdwn > ikiwiki-mass-rebuild.man
./mdwn2man ikiwiki-makerepo 1 doc/ikiwiki-makerepo.mdwn > ikiwiki-makerepo.man
./mdwn2man ikiwiki-transition 1 doc/ikiwiki-transition.mdwn > ikiwiki-transition.man
./mdwn2man ikiwiki-update-wikilist 1 doc/ikiwiki-update-wikilist.mdwn > ikiwiki-update-wikilist.man
./mdwn2man ikiwiki-calendar 1 doc/ikiwiki-calendar.mdwn > ikiwiki-calendar.man
+ ./mdwn2man ikiwiki-comment 1 doc/ikiwiki-comment.mdwn > ikiwiki-comment.man
$(MAKE) -C po
$(PERL) -pi.bkp -e "s/Version:.*/Version: $(VER)/" ikiwiki.spec
rm -f ikiwiki.spec.bkp
docwiki:
- $(PERL) -Iblib/lib $(extramodules) $(tflag) ikiwiki.in -setup docwiki.setup -refresh
+ $(PERL) -Iblib/lib $(extramodules) $(tflag) ikiwiki.in --setup docwiki.setup --refresh
+
+perl_shebangs:
+ifneq "$(PERL)" "/usr/bin/perl"
+ for file in $(shebang_scripts); do \
+ $(PERL) -pe "s|^#!/usr/bin/perl\b|#!$(PERL)| if 1" < $$file > "$$file.new"; \
+ [ -x $$file ] && chmod +x "$$file.new"; \
+ mv -f "$$file.new" $$file; \
+ done
+endif
+
+perl_shebangs_clean:
+ifneq "$(PERL)" "/usr/bin/perl"
+ for file in $(shebang_scripts); do \
+ $(PERL) -pe "s|^#!$(PERL)\b|#!/usr/bin/perl| if 1" < $$file > "$$file.new"; \
+ [ -x $$file ] && chmod +x "$$file.new"; \
+ mv -f "$$file.new" $$file; \
+ done
+endif
sysconfdir:
- $(PERL) -pi -e "s|/etc/ikiwiki|$(SYSCONFDIR)|g" $(sysconfdir_scripts)
+ $(PERL) -pi -e "s|\"/etc/ikiwiki|\"$(SYSCONFDIR)|g" $(sysconfdir_scripts)
-extra_clean:
- $(PERL) -Iblib/lib $(extramodules) $(tflag) ikiwiki.in -setup docwiki.setup -clean
+extra_clean: perl_shebangs_clean
+ $(PERL) -Iblib/lib $(extramodules) $(tflag) ikiwiki.in --setup docwiki.setup --clean
rm -f *.man $(outprogs) ikiwiki.setup plugins/*.pyc
$(MAKE) -C po clean
install -m 644 ikiwiki-transition.man $(DESTDIR)$(MANDIR)/man1/ikiwiki-transition.1
install -m 644 ikiwiki-update-wikilist.man $(DESTDIR)$(MANDIR)/man1/ikiwiki-update-wikilist.1
install -m 644 ikiwiki-calendar.man $(DESTDIR)$(MANDIR)/man1/ikiwiki-calendar.1
+ install -m 644 ikiwiki-comment.man $(DESTDIR)$(MANDIR)/man1/ikiwiki-comment.1
install -d $(DESTDIR)$(MANDIR)/man8
install -m 644 ikiwiki-mass-rebuild.man $(DESTDIR)$(MANDIR)/man8/ikiwiki-mass-rebuild.8
# check it into revision control, generate a setup file for the new
# wiki, and set everything up.
#
-# Just run: ikiwiki -setup /etc/ikiwiki/auto-blog.setup
+# Just run: ikiwiki --setup /etc/ikiwiki/auto-blog.setup
#
# By default, it asks a few questions, and confines itself to the user's home
# directory. You can edit it to change what it asks questions about, or to
# This setup file causes ikiwiki to create a wiki, check it into revision
# control, generate a setup file for the new wiki, and set everything up.
#
-# Just run: ikiwiki -setup /etc/ikiwiki/auto.setup
+# Just run: ikiwiki --setup /etc/ikiwiki/auto.setup
#
# By default, it asks a few questions, and confines itself to the user's home
# directory. You can edit it to change what it asks questions about, or to
our $rcs=IkiWiki::Setup::Automator::ask(
gettext("What revision control system to use?"), "git");
our $admin=IkiWiki::Setup::Automator::ask(
- gettext("Which user (wiki account or openid) will be admin?"), $ENV{USER});
+ gettext("Which user (wiki account, openid, or email) will be admin?"), $ENV{USER});
use Net::Domain q{hostfqdn};
our $domain=hostfqdn() || IkiWiki::Setup::Automator::ask(
gettext("What is the domain name of the web server?"), "");
+ikiwiki (3.20150610) unstable; urgency=low
+
+ The new "emailauth" plugin allows users to authenticate using an email
+ address, without otherwise creating an account.
+
+ The openid plugin now enables emailauth by default. Please include
+ emailauth in the disable_plugins setting if this is not desired.
+ Conversely, if emailauth is required on a wiki that does not enable
+ openid, you can list it in the enable_plugins setting.
+
+ -- Simon McVittie <smcv@debian.org> Wed, 10 Jun 2015 21:56:56 +0100
+
+ikiwiki (3.20150107) experimental; urgency=medium
+
+ By default, this version of IkiWiki tells mobile browsers that its
+ layout is suitable for small screens. The default layout and the
+ actiontabs, blueview, goldtype and monochrome themes have been adjusted.
+
+ If you have custom CSS that does not work in a small window (a typical
+ phone is 320 to 400 CSS pixels wide), please set the new responsive_layout
+ config option to 0.
+
+ -- Simon McVittie <smcv@debian.org> Mon, 05 Jan 2015 23:48:42 +0000
+
ikiwiki (3.20110122) unstable; urgency=low
If you have custom CSS that uses "#feedlinks" or "#blogform", you will
The `ikiwiki-transition deduplinks` command introduced in the
last release was buggy. If you followed the NEWS file instructions
- and ran it, you should run `ikiwiki -setup` to rebuild your wiki
+ and ran it, you should run `ikiwiki --setup` to rebuild your wiki
to fix the problem.
-- Joey Hess <joeyh@debian.org> Fri, 22 May 2009 13:04:02 -0400
Also, wikis that use the search plugin will need to be rebuilt,
since the search form has changed. This will not be done automatically,
but can be done by running `ikiwiki-mass-upgrade` as root, or
- running `ikiwiki -setup` on individual setup files.
+ running `ikiwiki --setup` on individual setup files.
-- Joey Hess <joeyh@debian.org> Wed, 04 Jun 2008 00:29:28 -0400
-ikiwiki (3.20140912) UNRELEASED; urgency=medium
+ikiwiki (3.20150615) UNRELEASED; urgency=medium
+
+ [ Amitai Schlair ]
+ * meta test: Add tests for many behaviors of the directive.
+ * img test: Bail gracefully when ImageMagick is not present.
+ * meta: Fix [[!meta name=foo]] by closing the open quote.
+ * Avoid unescaped "{" in regular expressions
+
+ [ Joey Hess ]
+ * emailauth: Added emailauth_sender config.
+ * Modified page.tmpl to to set html lang= and dir= when
+ values have been specified for them, which the po plugin does.
+
+ [ Simon McVittie ]
+ * Run autopkgtest tests using autodep8 and the pkg-perl team's
+ infrastructure
+ * t/img.t: do not spuriously skip
+ * tests: consistently use done_testing instead of no_plan
+ * Wrap and sort control files (wrap-and-sort -abst)
+ * Add enough build-dependencies to run all tests, except for
+ non-git VCSs
+ * debian/copyright: update for the rename of openid-selector to
+ login-selector
+ * git: if no committer identity is known, set it to
+ "IkiWiki <ikiwiki.info>" in .git/config. This resolves commit errors
+ in versions of git that require a non-trivial committer identity.
+ * inline, trail: rename show, feedshow parameters to limit, feedlimit
+ (with backwards compatibility)
+
+ -- Simon McVittie <smcv@debian.org> Mon, 15 Jun 2015 18:13:23 +0100
+
+ikiwiki (3.20150614) unstable; urgency=medium
+
+ * inline: change default sort order from age to "age title" for
+ determinism, partially fixing deterministic build for git-annex,
+ ikiwiki-hosting etc. (Closes: #785757)
+ * img: avoid ImageMagick misinterpreting filenames containing a colon
+ * img test: set old timestamp on source file that will change, so that
+ the test will pass even if it takes less than 1 second
+
+ -- Simon McVittie <smcv@debian.org> Sun, 14 Jun 2015 18:13:23 +0100
+
+ikiwiki (3.20150610) unstable; urgency=low
+
+ [ Joey Hess ]
+ * New emailauth plugin lets users log in, without any registration,
+ by simply clicking on a link in an email.
+ * Re-remove google from openid selector; their openid provider is
+ gone for good.
+ * Make the openid selector display "Password" instead of "Other"
+ when appropriate, so users are more likely to click on it when
+ they don't have an openid.
+ * Converted openid-selector into a more generic loginselector helper
+ plugin.
+ * passwordauth: Don't allow registering accounts that look like openids.
+ * Make cgiurl output deterministic, not hash order. Closes: #785738
+ Thanks, Daniel Kahn Gillmor
+
+ [ Simon McVittie ]
+ * Do not enable emailauth by default, to avoid surprises on httpauth-only
+ sites. Enable it by default in openid instead, since it is essentially
+ a replacement for OpenIDs.
+ * Make the attachment plugin work with CGI.pm 4.x (Closes: #786586;
+ workaround for #786587 in libcgi-pm-perl)
+ * Add a public-domain email icon from tango-icon-theme
+ * Populate pagectime from either mtime or inode change time,
+ whichever is older, again for more reproducible builds
+ * debian: build the docwiki with LC_ALL=C.UTF-8 and TZ=UTC
+ * debian/copyright: consolidate permissive licenses
+ * debian/copyright: turn comments on provenance into Comment
+ * brokenlinks: sort the pages that link to the missing page, for
+ better reproducibility
+ * Add [[!meta date]] to news items and tips, since the git checkout
+ and build process can leave the checkout date in the tarball
+ release, leading to unstable sorting
+ * Sort backlinks deterministically, by falling back to sorting by href
+ if the link text is identical
+ * Add a $config{deterministic} option and use it for the docwiki
+ * haiku: if deterministic build is requested, return a hard-coded haiku
+ * polygen: if deterministic build is requested, use a well-known random seed
+
+ -- Simon McVittie <smcv@debian.org> Wed, 10 Jun 2015 21:56:36 +0100
+
+ikiwiki (3.20150329) experimental; urgency=high
+
+ [ Joey Hess ]
+ * Fix NULL ptr deref on ENOMEM in wrapper. (Thanks, igli)
+
+ [ Simon McVittie ]
+ * Really don't double-decode CGI submissions, even on Perl versions that
+ bundle an old enough Encode.pm for that not to be a problem: the
+ system might have a newer Encode.pm installed separately, like Fedora 20.
+ (Closes: #776181; thanks, Anders Kaseorg)
+ * If neither timezone nor TZ is set, set both to :/etc/localtime if
+ we're on a GNU system and that file exists, or GMT otherwise
+ * t/inline.t: accept translations of "Add a new post titled:"
+ (Closes: #779365)
+ * Consistently document command-line options as e.g. --refresh, not -refresh
+
+ [ Amitai Schlair ]
+ * In VCS-committed anonymous comments, link to url.
+
+ [ Joey Hess ]
+ * Fix XSS in openid selector. Thanks, Raghav Bisht. (Closes: #781483)
+
+ -- Simon McVittie <smcv@debian.org> Sun, 29 Mar 2015 21:48:24 +0100
+
+ikiwiki (3.20150107) experimental; urgency=medium
+
+ [ Joey Hess ]
+ * Added ikiwiki-comment program.
+ * Add missing build-depends on libcgi-formbuilder-perl, needed for
+ t/relativity.t
+ * openid: Stop suppressing the email field on the Preferences page.
+ * Set Debian package maintainer to Simon McVittie as I'm retiring from
+ Debian.
+
+ [ Simon McVittie ]
+ * calendar: add calendar_autocreate option, with which "ikiwiki --refresh"
+ can mostly supersede the ikiwiki-calendar command.
+ Thanks, Louis Paternault
+ * search: add more classes as a hook for CSS. Thanks, sajolida
+ * core: generate HTML5 by default, but keep avoiding new elements
+ like <section> that require specific browser support unless html5 is
+ set to 1.
+ * Tell mobile browsers to draw our pages in a device-sized viewport,
+ not an 800-1000px viewport designed to emulate a desktop/laptop browser.
+ * Add new responsive_layout option which can be set to 0 if your custom
+ CSS only works in a large viewport.
+ * style.css, actiontabs, blueview, goldtype, monochrome: adjust layout
+ below 600px ("responsive layout") so that horizontal scrolling is not
+ needed on smartphone browsers or other small viewports.
+ * core: new libdirs option alongside libdir. Thanks, Louis Paternault
+
+ [ Amitai Schlair ]
+ * core: log a debug message before waiting for the lock.
+ Thanks, Mark Jason Dominus
+ * build: in po/Makefile, use the same $(MAKE) as the rest of the build.
+ Thanks, ttw
+ * blogspam: use the 2.0 JSON API (the 1.0 XML-RPC API has been EOL'd).
+ Closes: #774441
+
+ [ Joey Hess ]
+ * po: If msgmerge falls over on a problem po file, print a warning
+ message, but don't let this problem crash ikiwiki entirely.
+
+ -- Simon McVittie <smcv@debian.org> Wed, 07 Jan 2015 09:13:58 +0000
+
+ikiwiki (3.20141016) unstable; urgency=medium
+
+ [ Joey Hess ]
+ * Fix crash that can occur when only_committed_changes is set and a
+ file is deleted from the underlay.
+
+ [ Simon McVittie ]
+ * core: avoid dangerous use of CGI->param in list context, which led
+ to a security flaw in Bugzilla; as far as we can tell, ikiwiki
+ is not vulnerable to a similar attack, but it's best to be safe
+ * core: new reverse_proxy option prevents ikiwiki from trying to detect
+ how to make self-referential URLs by using the CGI environment variables,
+ for instance when it's deployed behind a HTTP reverse proxy
+ (Closes: #745759)
+ * core: the default User-Agent is now "ikiwiki/$version" to work around
+ ModSecurity rules assuming that only malware uses libwww-perl
+ * core: use protocol-relative URLs (e.g. //www.example.com/wiki) so that
+ https stays on https and http stays on http, particularly if the
+ html5 option is enabled
+ * core: avoid mixed content when a https cgiurl links to http static pages
+ on the same server (the static pages are assumed to be accessible via
+ https too)
+ * core: force the correct top URL in w3mmode
+ * google plugin: Use search form
+ * docwiki: replace Paypal and Flattr buttons with text links
+ * comments: don't record the IP address in the wiki if the user is
+ logged in via passwordauth or httpauth
+ * templates: add ARIA roles to some page elements, if html5 is enabled.
+ Thanks, Patrick
+ * debian: build-depend on libmagickcore-6.q16-2-extra | libmagickcore-extra
+ so we can thumbnail SVGs in the docwiki
+ * debian: explicitly depend and build-depend on libcgi-pm-perl
+ * debian: drop unused python-support dependency
+ * debian: rename debian/link to debian/links so the intended symlinks appear
+ * debian: fix some wrong paths in the copyright file
+
+ -- Simon McVittie <smcv@debian.org> Thu, 16 Oct 2014 23:28:26 +0100
+
+ikiwiki (3.20140916) unstable; urgency=low
* Don't double-decode CGI submissions with Encode.pm >= 2.53,
fixing "Error: Cannot decode string with wide characters".
* Fix aspect ratio when scaling small images, and add support for
converting SVG and PDF graphics to PNG.
Thanks, chrysn
+ - suggest ghostscript (required for PDF-to-PNG thumbnailing)
+ and libmagickcore-extra (required for SVG-to-PNG thumbnailing)
+ - build-depend on ghostscript so the test for scalable images can be run
+ * In the CGI wrapper, incorporate $config{ENV} into the environment
+ before executing Perl code, so that PERL5LIB can point to a
+ non-system-wide installation of IkiWiki.
+ Thanks, Lafayette Chamber Singers Webmaster
+ * filecheck: accept MIME types not containing ';'
+ * autoindex: index files in underlays if the resulting pages aren't
+ going to be committed. Closes: #611068
+ * Add [[!templatebody]] directive so template pages don't have to be
+ simultaneously a valid template and valid HTML
+ * Add myself to Uploaders and release to Debian
-- Simon McVittie <smcv@debian.org> Fri, 12 Sep 2014 21:23:58 +0100
Source: ikiwiki
Section: web
Priority: optional
-Build-Depends: perl, debhelper (>= 9)
-Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl,
- libtext-markdown-discount-perl,
- libtimedate-perl, libhtml-template-perl,
- libhtml-scrubber-perl, wdg-html-validator,
- libhtml-parser-perl, liburi-perl (>= 1.36), perlmagick, po4a (>= 0.34),
- libfile-chdir-perl, libyaml-libyaml-perl, python-support, librpc-xml-perl,
- libcgi-session-perl
-Maintainer: Joey Hess <joeyh@debian.org>
-Uploaders: Josh Triplett <josh@freedesktop.org>
+Build-Depends:
+ debhelper (>= 9),
+ perl,
+Build-Depends-Indep:
+ dpkg-dev (>= 1.9.0),
+ ghostscript,
+ git (>= 1:1.7),
+ libcgi-formbuilder-perl,
+ libcgi-pm-perl,
+ libcgi-session-perl,
+ libfile-chdir-perl,
+ libfile-mimeinfo-perl,
+ libhtml-parser-perl,
+ libhtml-scrubber-perl,
+ libhtml-template-perl,
+ libmagickcore-6.q16-2-extra | libmagickcore-extra,
+ libnet-openid-consumer-perl,
+ librpc-xml-perl,
+ libtext-markdown-discount-perl,
+ libtimedate-perl,
+ liburi-perl (>= 1.36),
+ libxml-feed-perl,
+ libxml-parser-perl,
+ libxml-simple-perl,
+ libxml-twig-perl,
+ libyaml-libyaml-perl,
+ perlmagick,
+ po4a (>= 0.34),
+Maintainer: Simon McVittie <smcv@debian.org>
+Uploaders:
+ Josh Triplett <josh@freedesktop.org>,
Standards-Version: 3.9.5
Homepage: http://ikiwiki.info/
Vcs-Git: git://git.ikiwiki.info/
+Testsuite: autopkgtest-pkg-perl
Package: ikiwiki
Architecture: all
-Depends: ${misc:Depends}, ${perl:Depends},
- libtext-markdown-discount-perl,
- libhtml-scrubber-perl, libhtml-template-perl,
- libhtml-parser-perl, liburi-perl (>= 1.36), libyaml-libyaml-perl, libjson-perl
-Recommends: gcc | c-compiler,
- libc6-dev | libc-dev,
- git (>= 1:1.7) | git-core (>= 1:1.5.0) | subversion | tla | bzr (>= 0.91) | mercurial | monotone (>= 0.38) | darcs,
- libxml-simple-perl, libnet-openid-consumer-perl, libcrypt-ssleay-perl,
- liblwpx-paranoidagent-perl, libtimedate-perl,
- libcgi-formbuilder-perl (>= 3.05), libcgi-session-perl (>= 4.14-1),
- libmail-sendmail-perl, libauthen-passphrase-perl, libterm-readline-gnu-perl,
- libgravatar-url-perl, librpc-xml-perl,
-Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl,
- xapian-omega (>= 1.0.5), libtext-wikiformat-perl,
- python, python-docutils, polygen, tidy, libhtml-tree-perl,
- libxml-feed-perl, libmailtools-perl, perlmagick,
- libfile-mimeinfo-perl, file,
- liblocale-gettext-perl (>= 1.05-1), libtext-typography-perl,
- libtext-csv-perl, graphviz, libnet-amazon-s3-perl,
- libsparkline-php, texlive, dvipng, libtext-wikicreole-perl,
- libsort-naturally-perl, libtext-textile-perl, libhighlight-perl,
- po4a (>= 0.35-1), gettext, libnet-inet6glue-perl,
- libtext-multimarkdown-perl, libxml-writer-perl
-Conflicts: ikiwiki-plugin-table
-Replaces: ikiwiki-plugin-table
-Provides: ikiwiki-plugin-table
+Depends:
+ libhtml-parser-perl,
+ libhtml-scrubber-perl,
+ libhtml-template-perl,
+ libjson-perl,
+ libtext-markdown-discount-perl,
+ liburi-perl (>= 1.36),
+ libyaml-libyaml-perl,
+ ${misc:Depends},
+ ${perl:Depends},
+Recommends:
+ gcc | c-compiler,
+ git (>= 1:1.7) | git-core (>= 1:1.5.0) | subversion | tla | bzr (>= 0.91) | mercurial | monotone (>= 0.38) | darcs,
+ libauthen-passphrase-perl,
+ libc6-dev | libc-dev,
+ libcgi-formbuilder-perl (>= 3.05),
+ libcgi-pm-perl,
+ libcgi-session-perl (>= 4.14-1),
+ libcrypt-ssleay-perl,
+ libgravatar-url-perl,
+ liblwpx-paranoidagent-perl,
+ libmail-sendmail-perl,
+ libnet-openid-consumer-perl,
+ librpc-xml-perl,
+ libterm-readline-gnu-perl,
+ libtimedate-perl,
+ libxml-simple-perl,
+Suggests:
+ dvipng,
+ file,
+ gettext,
+ ghostscript,
+ graphviz,
+ libfile-mimeinfo-perl,
+ libhighlight-perl,
+ libhtml-tree-perl,
+ liblocale-gettext-perl (>= 1.05-1),
+ libmagickcore-extra,
+ libmailtools-perl,
+ libnet-amazon-s3-perl,
+ libnet-inet6glue-perl,
+ libsearch-xapian-perl,
+ libsort-naturally-perl,
+ libsparkline-php,
+ libtext-csv-perl,
+ libtext-multimarkdown-perl,
+ libtext-textile-perl,
+ libtext-typography-perl,
+ libtext-wikicreole-perl,
+ libtext-wikiformat-perl,
+ libxml-feed-perl,
+ libxml-writer-perl,
+ perlmagick,
+ po4a (>= 0.35-1),
+ polygen,
+ python,
+ python-docutils,
+ texlive,
+ tidy,
+ viewvc | gitweb | viewcvs,
+ xapian-omega (>= 1.0.5),
+Conflicts:
+ ikiwiki-plugin-table,
+Replaces:
+ ikiwiki-plugin-table,
+Provides:
+ ikiwiki-plugin-table,
Description: a wiki compiler
Ikiwiki converts a directory full of wiki pages into HTML pages suitable
for publishing on a website. Unlike many wikis, ikiwiki does not have its
License: GPL-2+
Files: templates/* underlays/basewiki/* doc/ikiwiki/directive/*
- ikiwiki.setup po/underlay/*
+ ikiwiki.setup po/underlays/*
Copyright: © 2006-2010 Joey Hess <joey@ikiwiki.info>
-License: other
- Redistribution and use in source and compiled forms, with or without
- modification, are permitted under any circumstances. No warranty.
+License: permissive
Files: IkiWiki/Plugin/bzr.pm
Copyright: © 2008 Jelmer Vernooij <jelmer@samba.org>
Copyright: © 2006 Christian Mock <cm@tahina.priv.at>
License: GPL-2+
-Files: IkiWiki/Plugin/topography.pm
-Copyright: © 2006 Recai Oktaş <roktas@debian.org>
-License: GPL-2+
-
Files: IkiWiki/Plugin/map.pm
Copyright: © 2006 Alessandro Dotti Contra
License: GPL-2+
License: GPL-2+
Files: IkiWiki/Plugin/cvs.pm
-Copyright: © 2009 Amitai Schlair
+Copyright: © 2009 Amitai Schlair <http://www.schmonz.com/>
License: BSD-2-clause
Files: IkiWiki/Plugin/rsync.pm
-Copyright: © 2009 Amitai Schlair
+Copyright: © 2009 Amitai Schlair <http://www.schmonz.com/>
License: BSD-2-clause
Files: IkiWiki/Plugin/osm.pm
2007 Daniel Nylander <po@danielnylander.se>
2009 Fernando González de Requena <fgrequena@gmail.com>
2010 Sebastian Kuhnert <mail@sebastian-kuhnert.de>
-License: other
- Redistribution and use in source and compiled forms, with or without
- modification, are permitted under any circumstances. No warranty.
+License: permissive
Files: doc/smileys/*
Copyright: (c) 2000 - 2004 by Jürgen Hermann <jh@web.de>
(c) 1999, 2000 Martin Pool <mbp@humbug.org.au>
License: GPL-2+
- Smileys were copied from Moin Moin.
+Comment: Smileys were copied from Moin Moin.
Files: doc/smileys/neutral.png
- doc/smileys/question.pn
+ doc/smileys/question.png
Copyright: (c) 2002 phpBB Group
License: GPL-2
- These smileys were copied from phpBB.
+Comment: These smileys were copied from phpBB.
Files: doc/tips/integrated_issue_tracking_with_ikiwiki.mdwn
Copyright: © 2007 Joey Hess <joeyh@ikiwiki.info>, LinuxWorld.com
-Comment:
+Comment:
First published on LinuxWorld.com, a publication of Network World Inc.,
118 Turnpike Rd., Southboro, MA 01772.
.
Republished with permission.
License: GPL-2+
-Files: underlays/openid-selector/ikiwiki/openid/*
+Files: underlays/login-selector/ikiwiki/login-selector/*
Copyright: © 2008-2010 andyjm, david.j.boden
-Comment:
- From http://code.google.com/p/openid-selector/
+Comment:
+ Based on https://code.google.com/archive/p/openid-selector/
License: BSD-2-clause
-Files: underlays/openid-selector/ikiwiki/openid/goa-*
+Files: underlays/login-selector/ikiwiki/login-selector/goa-*
Copyright:
© 2011 Red Hat, Inc.
License: LGPL-2.1+
Comment:
taken from data/icons/16x16/ in gnome-online-accounts git
-Files: underlays/openid-selector/ikiwiki/openid/wordpress.png
+Files: underlays/login-selector/ikiwiki/login-selector/wordpress.png
Copyright:
© 2003-2013 "the contributors"
License: GPL-2+
icons/aol.svg
icons/livejournal.svg
icons/verisign.svg
- underlays/openid-selector/ikiwiki/openid/aol.png
- underlays/openid-selector/ikiwiki/openid/livejournal.png
- underlays/openid-selector/ikiwiki/openid/verisign.png
+ underlays/login-selector/ikiwiki/login-selector/aol.png
+ underlays/login-selector/ikiwiki/login-selector/verisign.png
Copyright:
© 2014 Simon McVittie
-License: other
- Redistribution and use in source and compiled forms, with or without
- modification, are permitted under any circumstances. No warranty.
+License: permissive
Files: underlays/jquery/*
Copyright: © 2005-2011 by John Resig, Branden Aaron & Jörn Zaefferer
© 2011 The Dojo Foundation
License: GPL-2
-Files: underlays/attachments/ikiwiki/jquery-ui*
+Files: underlays/attachment/ikiwiki/jquery-ui*
Copyright: © 2008 Paul Bakaus
© 2011 the jQuery UI Authors (http://jqueryui.com/about)
License: GPL-2
-Files: underlays/attachments/ikiwiki/jquery.tmpl*
+Files: underlays/attachment/ikiwiki/jquery.tmpl*
Copyright: © Boris Moore
License: GPL-2
-Files: underlays/attachments/ikiwiki/
+Files: underlays/attachment/ikiwiki/*
Copyright: 2010, 2011 Sebastian Tschan
Comment:
blueimp / jQuery-File-Upload widget,
from https://github.com/blueimp/jQuery-File-Upload
License: Expat
-Files: underlays/themes/blueview/style.css
+Files: themes/blueview/style.css
Copyright: © 2009,2010 Bernd Zeimetz
© 2008 Yahoo! Inc.
Comment:
http://developer.yahoo.com/yui/license.html
License: GPL-2+
-Files: underlays/themes/blueview/*
+Files: themes/blueview/*
Copyright: © 2009,2010 Bernd Zeimetz
License: GPL-2+
-Files: underlays/themes/goldtype/*
+Files: themes/goldtype/*
Copyright: © Lars Wirzenius
License: GPL-2+
-Files: underlays/themes/monochrome/*
+Files: themes/monochrome/*
Copyright: © 2012 Jon Dowland
License: GPL-2+
+Files:
+ icons/internet-mail.svg
+ doc/wikiicons/email.png
+Comment:
+ icon by Jakub Steiner and Andreas Nilsson, taken from
+ tango-icon-theme 0.8.90.
+Copyright: none
+License: public-domain
+
+License: permissive
+ Redistribution and use in source and compiled forms, with or without
+ modification, are permitted under any circumstances. No warranty.
+
License: BSD-2-clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
+ SOFTWARE.
License: LGPL-2.1+
This library is free software; you can redistribute it and/or
.
On Debian systems, the complete text of the GNU Lesser General
Public License can be found in `/usr/share/common-licenses/LGPL-2.1'.
+
+License: public-domain
+ Public Domain Dedication
+ .
+ Copyright-Only Dedication (based on United States law) or Public Domain
+ Certification
+ .
+ The person or persons who have associated work with this document (the
+ "Dedicator" or "Certifier") hereby either (a) certifies that, to the best
+ of his knowledge, the work of authorship identified is in the public
+ domain of the country from which the work is published, or (b)
+ hereby dedicates whatever copyright the dedicators holds in the work
+ of authorship identified below (the "Work") to the public domain. A
+ certifier, moreover, dedicates any copyright interest he may have in
+ the associated work, and for these purposes, is described as a
+ "dedicator" below.
+ .
+ A certifier has taken reasonable steps to verify the copyright
+ status of this work. Certifier recognizes that his good faith efforts
+ may not shield him from liability if in fact the work certified is not
+ in the public domain.
+ .
+ Dedicator makes this dedication for the benefit of the public at
+ large and to the detriment of the Dedicator's heirs and successors.
+ Dedicator intends this dedication to be an overt act of relinquishment
+ in perpetuity of all present and future rights under copyright law,
+ whether vested or contingent, in the Work. Dedicator understands that
+ such relinquishment of all rights includes the relinquishment of all
+ rights to enforce (by lawsuit or otherwise) those copyrights in the
+ Work.
+ .
+ Dedicator recognizes that, once placed in the public domain, the Work
+ may be freely reproduced, distributed, transmitted, used, modified,
+ built upon, or otherwise exploited by anyone for any purpose, commercial
+ or non-commercial, and in any way, including by methods that have not
+ yet been invented or conceived.
+++ /dev/null
-usr/share/ikiwiki/examples usr/share/doc/ikiwiki/examples
-usr/share/common-licenses/GPL-2 usr/share/doc/ikiwiki/html/GPL
--- /dev/null
+usr/share/common-licenses/GPL-2 usr/share/doc/ikiwiki/html/GPL
+usr/share/ikiwiki/examples usr/share/doc/ikiwiki/examples
dpkg --compare-versions "$2" lt "$firstcompat"; then
ikiwiki-mass-rebuild
else
- ikiwiki-mass-rebuild -refresh -wrappers
+ ikiwiki-mass-rebuild --refresh --wrappers
fi
#!/usr/bin/make -f
%:
- dh $@
+ LC_ALL=C.UTF-8 TZ=UTC dh $@
override_dh_auto_configure:
# keeps it out of /usr/local
override_dh_auto_clean:
# distclean moans about MANIFEST, this is quieter
if [ -e Makefile ]; then $(MAKE) realclean; fi
-
-# Not intended for use by anyone except the author.
-announcedir:
- @echo ${HOME}/src/ikiwiki/doc/news
--- /dev/null
+INSTALLED_TESTS=1
--- /dev/null
+IkiWiki/Plugin/amazon_s3.pm
+IkiWiki/Plugin/cvs.pm
+IkiWiki/Plugin/monotone.pm
+IkiWiki/Plugin/po.pm
--- /dev/null
+Name: ikiwiki
+Bug-Database: http://ikiwiki.info/bugs/
+Bug-Submit: http://ikiwiki.info/bugs/
+Changelog: http://ikiwiki.info/news/
+Donation: http://ikiwiki.info/tipjar/
If a banned user attempts to use the ikiwiki CGI, they will receive a 403
Forbidden webpage indicating they are banned.
+
+Note that when [[plugins/emailauth]] is used, the user's email address
+is displayed in cloaked form in commits of their edits. This cloaked email
+address can be used as-is in the `banned_users` setting.
* [[templates]]
* [[ikiwiki/formatting]]
* [[ikiwiki/markdown]]
-* [[ikiwiki/openid]]
+* [[ikiwiki/login-selector]]
* [[ikiwiki/pagespec]]
* [[ikiwiki/directive]]
* [[ikiwiki/subpage]]
As I am not sure that remembering `PERL5LIB` is a good idea, I think that a prettier solution will be to add a config variable (let's say `cgi_wrapper_perllib`) which, if fixed, contains the `PERL5LIB` value to include in the wrapper, or another (let's say `cgi_wrapper_remember_libdir`), which, if fixed, remember the current `PERL5LIB`.
-- Bruno
+
+**Update:** I had not seen this bug earlier, but I ran into the same issue and made a more general solution. You can already add stuff to `%config{ENV}` in the setup file, but it was being processed too late for `PERL5LIB` to do any good.
+[This change](http://source.ikiwiki.branchable.com/?p=source.git;a=log;h=29e80b4eedadc2afd3f9f36d215076c82982971b;hp=6057107d71e9944bd6fd7093060e4297e617733e) moves the `%config{ENV}` handling earlier in the wrapper, so anything specified there is placed back in the actual environment before Perl gets control. Problem solved!
+
+-- Chap
+
+> Thanks, this looks like a nicer solution than the above. Some review:
+>
+> + $val =~ s/([\\"])/\\$1/g;
+>
+> This is *probably* OK, because the configuration is unlikely to include
+> non-ASCII, but I'd prefer something that covers all possibilities,
+> like this:
+>
+> my $tmp = $val;
+> utf8::encode($tmp) if utf8::is_utf8($tmp);
+> $tmp =~ s/([^A-Za-z0-9])/sprintf "\\x%02x", $1/ge;
+>
+> and then passing $tmp to addenv.
+>
+> + delete $config{ENV};
+>
+> I don't think this is particularly necessary: there doesn't seem any harm
+> in having it in the storable too?
+>
+> --[[smcv]]
+
+Happy to make the escaping change, thanks for the sharp eye.
+
+> [[Merged|done]] with that change. --[[smcv]]
+
+My thinking on `delete` is once it's handled, it's handled. The C code
+is going to put this straight into the real environment and then do
+a simple `exec` ... is there any way this hasn't been handled?
+
+It just takes up space twice in the generated wrapper otherwise.
+Admittedly it's not much space, but seems to be even less point ... ?
+
+-- Chap
+
+> That makes sense, as long as nothing else is going to read
+> `$config{ENV}` for purposes other than copying it into the actual
+> environment. --[[smcv]]
--- /dev/null
+`IkiWiki::Plugin::img` appends `[$pagenumber]` to the filename to deal with multipage documents such as PDFs.
+However, `Image::Magick` doesn't seem to like page selection for filenames containing a colon. This is also the case for imagemagick binaries:
+
+ $ identify 'screenshot_2015-06-06_18:37:53.png'
+ screenshot_2015-06-06_18:37:53.png PNG 453x122 453x122+0+0 8-bit sRGB 11.2KB 0.000u 0:00.000
+ $ identify 'screenshot_2015-06-06_18:37:53.png[0]'
+ identify: no decode delegate for this image format `37' @ error/constitute.c/ReadImage/501.
+ $ mv 'screenshot_2015-06-06_18:37:53.png' 'screenshot_2015-06-06_18-37-53.png'
+ $ identify 'screenshot_2015-06-06_18-37-53.png[0]'
+ screenshot_2015-06-06_18-37-53.png[0]=>screenshot_2015-06-06_18-37-53.png PNG 453x122 453x122+0+0 8-bit sRGB 11.2KB 0.000u 0:00.000
+
+This might be an imagemagick bug, but it's also possible that colons
+are interpreted somehow.
+
+> Yes they are: ImageMagick has syntax to force the file to be
+> interpreted as a particular format, like gif:foobar.img to
+> read foobar.img as a GIF, or to use unusual I/O patterns, like
+> fd:5. --[[smcv]]
+
+Anyway, to render such images properly in ikiwiki I had to remove
+the colons. An easy fix is to remove ‘:’ from `wiki_file_chars`,
+but this can break existing installations.
+
+> I think we should remove `:` from the default `wiki_file_chars`
+> either as soon as we have a way to handle backwards compatibility,
+> or in ikiwiki 4; but you're right that it's a compat problem,
+> so we can't just do that as a solution. --s
+
+A better solution would be to make `IkiWiki::Plugin::img` croak on
+such image filenames (which anyway are currently not rendered, but
+`Image::Magick`'s error message is quite cryptic).
+
+> Better still would be to fix the bug by escaping the filename
+> so ImageMagick treats it as just a filename. It seems the way
+> to do that is to call `Read(":hello:world.png")` instead of
+> `Read("hello:world.png")`, which I have now [[done]]. --s
--- /dev/null
+I suffer from the occasional markdown glitches using branchable.
+
+I've found that switching my own non-ikiwiki projects to https://github.com/jgm/CommonMark has helped sort them out for the most part.
+
+> ikiwiki does not implement Markdown on its own: it uses one of several
+> third-party libraries, with the current recommendation being
+> Discount. Out-of-process implementations like
+> [[plugins/contrib/pandoc]] are not suitable to be the default for
+> performance reasons.
+>
+> There seems to be a Perl binding for libcmark at
+> <https://github.com/nwellnhof/perl-commonmark>, but unfortunately
+> its README points out that the libcmark API is not stable,
+> which means libcmark and perl-commonmark would have to be upgraded
+> in lockstep: this makes them awkward to deal with in Linux
+> distributions. As a result I'm not going to look into this myself
+> until there is a stable API for Commonmark available in Debian.
+>
+> However, if you want to add optional Commonmark support to the
+> [[plugins/mdwn]] plugin, I'd review a patch. --[[smcv]]
--- /dev/null
+Hi there, I'm trying to remove the render blocking Javascript from the [ikiwiki/branchable](http://webconverger.org/ikiwiki.cgi?do=branchable) site <https://developers.google.com/speed/pagespeed/insights/?url=http%3A%2F%2Fwebconverger.org%2F>
+
+<img src=http://s.natalian.org/2015-05-11/1431321125_1054x1058.png>
+
+I've tried disabling [[plugins/relativedate]], [[plugins/toggle]] & even [[plugins/goodstuff]], but STILL there is being JS embedded in my test site <http://sg.webconverger.com/>:
+
+<img src=http://s.natalian.org/2015-05-11/1431321269_1054x1058.png>
+
+I am a bit at a loss now. Any ideas?
+
+> Can't help with the specific question but you won't get higher rating than
+> 85 due to the local.css link.[img.kalleswork.net pagespeed
+> results](https://developers.google.com/speed/pagespeed/insights/?url=http%3A%2F%2Fimg.kalleswork.net) -[[kjs]]
--- /dev/null
+Hello,
+I stumbled upon this bug when writing a Python plugin. I think this is a ikiwiki bug, since I do not think my plugin does anything wrong.
+
+# Example
+
+I set up an example wiki, containing the setup file and the plugin, [[on github|https://github.com/paternal/ikiwiki-rpcbug]].
+
+1. Clone the repository
+
+ git clone https://github.com/paternal/ikiwiki-rpcbug.git
+
+2. Change to the right directory
+
+ cd ikiwiki-rpcbug
+
+2. Add the right ikiwiki directory to PYTHONPATH
+
+ export PYTHONPATH="$PYTHONPATH:$(dirname $(dpkg -L ikiwiki | grep proxy))"
+
+3. Build the wiki
+
+ ikiwiki --setup wiki.setup --rebuild
+
+4. The problem is in page [[http://localhost/~USERNAME/ikiwiki_bug_rpc/foo/]] (for instance, [[http://localhost/~USERNAME/ikiwiki_bug_rpc]] is fine.
+
+# Problem
+
+Page `foo` contains the directive ``[[!rpcbug]]`` (`rpcbug` being the name of the plugin). Calling [[``proxy.rpc("srcfile", "bar")``|https://github.com/paternal/ikiwiki-rpcbug/blob/master/plugins/rpcbug#L15]] in the preprocess function seems to mess up the RPC communication between ikiwiki and the plugin, and the result is that the generate `foo/index.html` page is a text file containing the return value of the `preprocess` call.
+
+What I do not understand is that disabling the `format` function (by commenting [[line 46 of the plugin|https://github.com/paternal/ikiwiki-rpcbug/blob/master/plugins/rpcbug#L46]]) solves the problem. Half of an explaination is that I think that when the the ``proxy.rpc`` function is called, the RPC communication is messed up in such a way that the `format` function is not called, and the return value of `preprocess` is considered to be the whole html code of the resulting page.
+
+> I understood that: as the first rpc call messes up the communication, more rpc calls are messed up, but if there is only one rpc call, not that much is broken. -- [[Louis|spalax]]
+
+I hope someone will understand the problem better than I do, because I have no idea about how to solve this.
+
+Regards,
+-- [[Louis|spalax]]
+
+> I used the debug feature provided with `proxy.py` and rebuilt the wiki. I ran this with [this version](https://github.com/paternal/ikiwiki-rpcbug/tree/b4ba34a8edd1b97989965af69eddac050bc0a8ba) of my minimal bug example.
+>
+> * The bug happens in function [preprocess](https://github.com/paternal/ikiwiki-rpcbug/blob/b4ba34a8edd1b97989965af69eddac050bc0a8ba/plugins/rpcbug#L12-17) (in call to [srcfile](https://github.com/paternal/ikiwiki-rpcbug/blob/b4ba34a8edd1b97989965af69eddac050bc0a8ba/plugins/rpcbug#L15), to be more precise).
+> * The directive causing the bug is called on page [foo](https://github.com/paternal/ikiwiki-rpcbug/blob/b4ba34a8edd1b97989965af69eddac050bc0a8ba/foo.mdwn).
+> * Communication between Ikiwiki and the plugin is [[here|debug]].
+> * The resulting HTML (for page `foo`) looks like:
+>
+> > \[[!rpcbug Erreur: internal error: foo cannot be found in /home/louis/projets/ikiwiki/rpcbug or underlay]]
+> >
+> >
+> > Calling srcfile(foo): page
+> > Calling srcfile(README.md): /home/louis/projets/ikiwiki/rpcbug/README.md
+>
+> My analysis:
+>
+> * The call to `srcfile(foo)` fails (because Ikiwiki thinks that page `foo` does not exist).
+> * Ikiwiki thinks that processing of the directive is finished, whereas the plugin still waits for the answer of Ikiwiki.
+> * Ikiwiki asks the plugin to render a new directive, but the plugin interprets the request as the return value for its previous request. Thus, the plugin thinks that `srcfile(foo)` is `page` (this `page` being a misinterpretation of the Ikiwiki request).
+>
+> So, I think that this might be an error in the
+> [`rpc_call`](https://github.com/joeyh/ikiwiki/blob/9476e2ac7ad2f53643fa2fca6ba35fcc55ab058e/IkiWiki/Plugin/external.pm#L46-147)
+> function of the `external` plugin: when the called method fails, it should
+> return something (or raise an exception, if this is possible in RPC) to notify
+> the plugin that something went wrong.
+>
+> -- [[Louis|spalax]]
+
+>> Update: This can actually be a [proxy](https://github.com/joeyh/ikiwiki/blob/9c910a76e70111c50ba8cbb518277f809fc1d09d/plugins/proxy.py) error. Indeed:
+>>
+>> - Ikiwiki sends a `methodCall` message to the plugin (which is a call to the
+>> `preprocess` function);
+>> - the plugin sends a `methodCall` message to ikiwiki (which is a call to the
+>> `srcfile` function);
+>> - Ikiwiki answers with a `methodCall` message:
+>> - Ikiwiki answers this because the function call failed, and it is already
+>> processing the next directive;
+>> - the plugin thinks that it is its request answer, and misinterprets it.
+>>
+>> Thus, I think that the bug is in the `proxy.py` python file. On receiving a
+>> `methodCall` (instead of a `methodResponse`) as an answer to a `methodCall`
+>> request, `proxy.py` should notice the type of request, and call the requested function.
+>>
+>> I know Python better than I know Perl, so I can try to fix this.
+>>
+>> -- [[Louis|spalax]]
+
+>>> [[!template id=gitbranch author="[[Louis|spalax]]" branch=spalax/paternal/rpcbug
+>>> browse=https://github.com/paternal/ikiwiki/tree/paternal/rpcbug]]
+>>> [I fixed this bug](https://github.com/paternal/ikiwiki/commit/32da347566a7559ca1ef145880efe961dbcc012f) in a branch on my Ikiwiki clone.
+>>> Please review :)
+>>>
+>>> -- [[Louis|spalax]]
--- /dev/null
+Trace of the `proxy.py` package during ikiwiki build. Look for the `preprocess` call and response for interesting stuff.
+
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>import</methodName><params></params></methodCall>
+ ]
+ rpcbug:_importme:330: importing...
+ rpcbug:_importme:333: hooking rpcbug/getsetup into getsetup chain...
+ rpcbug:send_rpc:161: calling ikiwiki procedure `hook': ["<?xml version='1.0'?>\n<methodCall>\n<methodName>hook</methodName>\n<params>\n<param>\n<value><string>call</string></value>\n</param>\n<param>\n<value><string>getsetup</string></value>\n</param>\n<param>\n<value><string>type</string></value>\n</param>\n<param>\n<value><string>getsetup</string></value>\n</param>\n<param>\n<value><string>id</string></value>\n</param>\n<param>\n<value><string>rpcbug</string></value>\n</param>\n<param>\n<value><string>last</string></value>\n</param>\n<param>\n<value><boolean>0</boolean></value>\n</param>\n</params>\n</methodCall>\n"]
+ rpcbug:send_rpc:169: reading response from ikiwiki...
+ rpcbug:send_rpc:178: read response to procedure hook from ikiwiki: ['<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><value><string>1</string></value></param></params></methodResponse>\n']
+ rpcbug:send_rpc:187: parsed data from response to procedure hook: ['1']
+ rpcbug:_importme:333: hooking rpcbug/preprocess into preprocess chain...
+ rpcbug:send_rpc:161: calling ikiwiki procedure `hook': ["<?xml version='1.0'?>\n<methodCall>\n<methodName>hook</methodName>\n<params>\n<param>\n<value><string>call</string></value>\n</param>\n<param>\n<value><string>preprocess</string></value>\n</param>\n<param>\n<value><string>type</string></value>\n</param>\n<param>\n<value><string>preprocess</string></value>\n</param>\n<param>\n<value><string>id</string></value>\n</param>\n<param>\n<value><string>rpcbug</string></value>\n</param>\n<param>\n<value><string>last</string></value>\n</param>\n<param>\n<value><boolean>0</boolean></value>\n</param>\n</params>\n</methodCall>\n"]
+ rpcbug:send_rpc:169: reading response from ikiwiki...
+ rpcbug:send_rpc:178: read response to procedure hook from ikiwiki: ['<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><value><string>1</string></value></param></params></methodResponse>\n']
+ rpcbug:send_rpc:187: parsed data from response to procedure hook: ['1']
+ rpcbug:_importme:333: hooking rpcbug/format into format chain...
+ rpcbug:send_rpc:161: calling ikiwiki procedure `hook': ["<?xml version='1.0'?>\n<methodCall>\n<methodName>hook</methodName>\n<params>\n<param>\n<value><string>call</string></value>\n</param>\n<param>\n<value><string>format</string></value>\n</param>\n<param>\n<value><string>type</string></value>\n</param>\n<param>\n<value><string>format</string></value>\n</param>\n<param>\n<value><string>id</string></value>\n</param>\n<param>\n<value><string>rpcbug</string></value>\n</param>\n<param>\n<value><string>last</string></value>\n</param>\n<param>\n<value><boolean>0</boolean></value>\n</param>\n</params>\n</methodCall>\n"]
+ rpcbug:send_rpc:169: reading response from ikiwiki...
+ rpcbug:send_rpc:178: read response to procedure hook from ikiwiki: ['<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><value><string>1</string></value></param></params></methodResponse>\n']
+ rpcbug:send_rpc:187: parsed data from response to procedure hook: ['1']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><struct>
+ <member>
+ <name>null</name>
+ <value><string></string></value>
+ </member>
+ </struct></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ Omission du fichier au nom incorrect wiki.setup~
+ Omission du fichier au nom incorrect index.mdwn~
+ Omission du fichier au nom incorrect README.md~
+ Omission du fichier au nom incorrect foo.mdwn~
+ Omission du fichier au nom incorrect plugins/evariste~
+ Omission du fichier au nom incorrect plugins/rpcbug~
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>preprocess</methodName><params><param><value><string>page</string></value></param><param><value><string>foo</string></value></param><param><value><string>destpage</string></value></param><param><value><string>foo</string></value></param><param><value><string>preview</string></value></param><param><value><string>0</string></value></param></params></methodCall>
+ ]
+ rpcbug:send_rpc:161: calling ikiwiki procedure `srcfile': ["<?xml version='1.0'?>\n<methodCall>\n<methodName>srcfile</methodName>\n<params>\n<param>\n<value><string>foo</string></value>\n</param>\n</params>\n</methodCall>\n"]
+ rpcbug:send_rpc:169: reading response from ikiwiki...
+ rpcbug:send_rpc:178: read response to procedure srcfile from ikiwiki: ['<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>preprocess</methodName><params><param><value><string>page</string></value></param><param><value><string>foo</string></value></param><param><value><string>destpage</string></value></param><param><value><string>foo</string></value></param><param><value><string>preview</string></value></param><param><value><string>0</string></value></param></params></methodCall>\n']
+ rpcbug:send_rpc:187: parsed data from response to procedure srcfile: ['page']
+ rpcbug:send_rpc:161: calling ikiwiki procedure `srcfile': ["<?xml version='1.0'?>\n<methodCall>\n<methodName>srcfile</methodName>\n<params>\n<param>\n<value><string>README.md</string></value>\n</param>\n</params>\n</methodCall>\n"]
+ rpcbug:send_rpc:169: reading response from ikiwiki...
+ rpcbug:send_rpc:178: read response to procedure srcfile from ikiwiki: ['<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><value><string>/home/louis/projets/ikiwiki/rpcbug/README.md</string></value></param></params></methodResponse>\n']
+ rpcbug:send_rpc:187: parsed data from response to procedure srcfile: ['/home/louis/projets/ikiwiki/rpcbug/README.md']
+ rpcbug:hook_proxy:262: preprocess hook `preprocess' returned: ['<br/>* Calling `srcfile(foo)`: page<br/>* Calling `srcfile(README.md)`: /home/louis/projets/ikiwiki/rpcbug/README.md']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><br/>* Calling `srcfile(foo)`: page<br/>* Calling `srcfile(README.md)`: /home/louis/projets/ikiwiki/rpcbug/README.md</string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>foo</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>foo</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=foo" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ foo
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=foo" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>\[[!rpcbug <span class="error">Erreur: internal error: foo cannot be found in /home/louis/projets/ikiwiki/rpcbug or underlay</span>]]</p>
+
+ <p><br /><em> Calling <code>srcfile(foo)</code>: page<br /></em> Calling <code>srcfile(README.md)</code>: /home/louis/projets/ikiwiki/rpcbug/README.md</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">index</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2015-06-28T18:16:57Z">28/06/2015</time>
+ <!-- Created <time datetime="2015-06-15T01:35:13Z" pubdate="pubdate">15/06/2015</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>foo</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=foo" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../">RPC Bug</a>/ \n\n</span>\n<span class="title">\nfoo\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=foo" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>\[[!rpcbug <span class="error">Erreur: internal error: foo cannot be found in /home/louis/projets/ikiwiki/rpcbug or underlay</span>]]</p>\n\n<p><br /><em> Calling <code>srcfile(foo)</code>: page<br /></em> Calling <code>srcfile(README.md)</code>: /home/louis/projets/ikiwiki/rpcbug/README.md</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">index</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2015-06-28T18:16:57Z">28/06/2015</time>\n<!-- Created <time datetime="2015-06-15T01:35:13Z" pubdate="pubdate">15/06/2015</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>foo</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=foo" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ foo
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=foo" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>\[[!rpcbug <span class="error">Erreur: internal error: foo cannot be found in /home/louis/projets/ikiwiki/rpcbug or underlay</span>]]</p>
+
+ <p><br /><em> Calling <code>srcfile(foo)</code>: page<br /></em> Calling <code>srcfile(README.md)</code>: /home/louis/projets/ikiwiki/rpcbug/README.md</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">index</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2015-06-28T18:16:57Z">28/06/2015</time>
+ <!-- Created <time datetime="2015-06-15T01:35:13Z" pubdate="pubdate">15/06/2015</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>index</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>RPC Bug</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="style.css" type="text/css" />
+
+ <link rel="stylesheet" href="local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=index" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ </span>
+ <span class="title">
+ RPC Bug
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=index" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="./recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Hello, world!</p>
+
+ <p>Page causing the error : <a href="./foo/">foo</a></p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2015-06-15T01:35:13Z">15/06/2015</time>
+ <!-- Created <time datetime="2015-06-15T01:35:13Z" pubdate="pubdate">15/06/2015</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>RPC Bug</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="style.css" type="text/css" />\n\n<link rel="stylesheet" href="local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=index" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n</span>\n<span class="title">\nRPC Bug\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=index" rel="nofollow">Edit</a></li>\n\n\n<li><a href="./recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Hello, world!</p>\n\n<p>Page causing the error : <a href="./foo/">foo</a></p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2015-06-15T01:35:13Z">15/06/2015</time>\n<!-- Created <time datetime="2015-06-15T01:35:13Z" pubdate="pubdate">15/06/2015</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>RPC Bug</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="style.css" type="text/css" />
+
+ <link rel="stylesheet" href="local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=index" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ </span>
+ <span class="title">
+ RPC Bug
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=index" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="./recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Hello, world!</p>
+
+ <p>Page causing the error : <a href="./foo/">foo</a></p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2015-06-15T01:35:13Z">15/06/2015</time>
+ <!-- Created <time datetime="2015-06-15T01:35:13Z" pubdate="pubdate">15/06/2015</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>sandbox</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>sandbox</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=sandbox" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ sandbox
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=sandbox" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This is the SandBox, a page anyone can edit to learn how to use the wiki.</p>
+
+ <hr />
+
+ <p>Here's a paragraph.</p>
+
+ <p>Here's another one with <em>emphasised</em> text.</p>
+
+ <h1>Header</h1>
+
+ <h2>Subheader</h2>
+
+ <blockquote><p>This is a blockquote.</p>
+
+ <p>This is the first level of quoting.</p>
+
+ <blockquote><p>This is nested blockquote.</p></blockquote>
+
+ <p>Back to the first level.</p></blockquote>
+
+ <p>Numbered list</p>
+
+ <ol>
+ <li>First item.</li>
+ <li>Another.</li>
+ <li>And another..</li>
+ </ol>
+
+
+ <p>Bulleted list</p>
+
+ <ul>
+ <li><em>item</em></li>
+ <li>item</li>
+ </ul>
+
+
+ <p><a href="../ikiwiki/wikilink/">WikiLink</a></p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../ikiwiki/wikilink/">ikiwiki/wikilink</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>sandbox</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=sandbox" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../">RPC Bug</a>/ \n\n</span>\n<span class="title">\nsandbox\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=sandbox" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This is the SandBox, a page anyone can edit to learn how to use the wiki.</p>\n\n<hr />\n\n<p>Here\'s a paragraph.</p>\n\n<p>Here\'s another one with <em>emphasised</em> text.</p>\n\n<h1>Header</h1>\n\n<h2>Subheader</h2>\n\n<blockquote><p>This is a blockquote.</p>\n\n<p>This is the first level of quoting.</p>\n\n<blockquote><p>This is nested blockquote.</p></blockquote>\n\n<p>Back to the first level.</p></blockquote>\n\n<p>Numbered list</p>\n\n<ol>\n<li>First item.</li>\n<li>Another.</li>\n<li>And another..</li>\n</ol>\n\n\n<p>Bulleted list</p>\n\n<ul>\n<li><em>item</em></li>\n<li>item</li>\n</ul>\n\n\n<p><a href="../ikiwiki/wikilink/">WikiLink</a></p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../ikiwiki/wikilink/">ikiwiki/wikilink</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>sandbox</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=sandbox" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ sandbox
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=sandbox" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This is the SandBox, a page anyone can edit to learn how to use the wiki.</p>
+
+ <hr />
+
+ <p>Here's a paragraph.</p>
+
+ <p>Here's another one with <em>emphasised</em> text.</p>
+
+ <h1>Header</h1>
+
+ <h2>Subheader</h2>
+
+ <blockquote><p>This is a blockquote.</p>
+
+ <p>This is the first level of quoting.</p>
+
+ <blockquote><p>This is nested blockquote.</p></blockquote>
+
+ <p>Back to the first level.</p></blockquote>
+
+ <p>Numbered list</p>
+
+ <ol>
+ <li>First item.</li>
+ <li>Another.</li>
+ <li>And another..</li>
+ </ol>
+
+
+ <p>Bulleted list</p>
+
+ <ul>
+ <li><em>item</em></li>
+ <li>item</li>
+ </ul>
+
+
+ <p><a href="../ikiwiki/wikilink/">WikiLink</a></p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../ikiwiki/wikilink/">ikiwiki/wikilink</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>ikiwiki</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ ikiwiki
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki is powered by <a href="http://ikiwiki.info/">ikiwiki</a>.</p>
+
+ <p>Some documentation on using ikiwiki:</p>
+
+ <ul>
+ <li><a href="./formatting/">formatting</a></li>
+ <li><a href="./wikilink/">wikilink</a></li>
+ <li><a href="./subpage/">subpage</a></li>
+ <li><a href="./pagespec/">pagespec</a></li>
+ <li><a href="./directive/">directive</a></li>
+ <li><a href="./markdown/">markdown</a></li>
+ <li><a href="./openid/">openid</a></li>
+ <li><a href="./searching/">searching</a></li>
+ <li><a href="../templates/">templates</a></li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../templates/">templates</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>ikiwiki</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../">RPC Bug</a>/ \n\n</span>\n<span class="title">\nikiwiki\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This wiki is powered by <a href="http://ikiwiki.info/">ikiwiki</a>.</p>\n\n<p>Some documentation on using ikiwiki:</p>\n\n<ul>\n<li><a href="./formatting/">formatting</a></li>\n<li><a href="./wikilink/">wikilink</a></li>\n<li><a href="./subpage/">subpage</a></li>\n<li><a href="./pagespec/">pagespec</a></li>\n<li><a href="./directive/">directive</a></li>\n<li><a href="./markdown/">markdown</a></li>\n<li><a href="./openid/">openid</a></li>\n<li><a href="./searching/">searching</a></li>\n<li><a href="../templates/">templates</a></li>\n</ul>\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../templates/">templates</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>ikiwiki</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ ikiwiki
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki is powered by <a href="http://ikiwiki.info/">ikiwiki</a>.</p>
+
+ <p>Some documentation on using ikiwiki:</p>
+
+ <ul>
+ <li><a href="./formatting/">formatting</a></li>
+ <li><a href="./wikilink/">wikilink</a></li>
+ <li><a href="./subpage/">subpage</a></li>
+ <li><a href="./pagespec/">pagespec</a></li>
+ <li><a href="./directive/">directive</a></li>
+ <li><a href="./markdown/">markdown</a></li>
+ <li><a href="./openid/">openid</a></li>
+ <li><a href="./searching/">searching</a></li>
+ <li><a href="../templates/">templates</a></li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../templates/">templates</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>templates</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>templates</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ templates
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p><a href="../ikiwiki/">Ikiwiki</a> uses many templates for many purposes. By editing its templates,
+ you can fully customise its appearance, and avoid duplicate content.</p>
+
+ <p>Ikiwiki uses the HTML::Template module as its template engine. This
+ supports things like conditionals and loops in templates and is pretty
+ easy to learn. All you really need to know to modify templates is this:</p>
+
+ <ul>
+ <li>To insert the value of a template variable, use <code>&lt;TMPL_VAR variable&gt;</code>.</li>
+ <li>To make a block of text conditional on a variable being set use
+ <code>&lt;TMPL_IF variable&gt;text&lt;/TMPL_IF&gt;</code>.</li>
+ <li>To use one block of text if a variable is set and a second if it's not,
+ use <code>&lt;TMPL_IF variable&gt;text&lt;TMPL_ELSE&gt;other text&lt;/TMPL_IF&gt;</code></li>
+ </ul>
+
+
+ <p>If the template does not contain a <code>templatebody</code> directive, the entire
+ source of the page is used for the template. This is deprecated.</p>
+
+ <h2>template files</h2>
+
+ <p>Template files are unlike template pages in that they have the extension
+ <code>.tmpl</code>. Template files are used extensively by Ikiwiki to generate html.
+ They can contain html that would not normally be allowed on a wiki page.</p>
+
+ <p>Template files are located in <code>/usr/share/ikiwiki/templates</code> by default;
+ the <code>templatedir</code> setting can be used to make another directory be
+ searched first. Customised template files can also be placed inside the
+ "templates/" directory in your wiki's source -- files placed there override
+ ones in the <code>templatedir</code>.</p>
+
+ <p>Here is a full list of the template files used:</p>
+
+ <ul>
+ <li><p><code>page.tmpl</code> - Used for displaying all regular wiki pages. This is the
+ key template to customise to change the look and feel of Ikiwiki.</p></li>
+ <li><p><code>rsspage.tmpl</code> - Used for generating rss feeds for blogs.</p></li>
+ <li><code>rssitem.tmpl</code> - Used for generating individual items on rss feeds.</li>
+ <li><code>atompage.tmpl</code> - Used for generating atom feeds for blogs.</li>
+ <li><code>atomitem.tmpl</code> - Used for generating individual items on atom feeds.</li>
+ <li><code>inlinepage.tmpl</code> - Used for displaying a post in a blog.</li>
+ <li><code>archivepage.tmpl</code> - Used for listing a page in a blog archive page.</li>
+ <li><code>titlepage.tmpl</code> - Used for listing a page by title in a blog archive page.</li>
+ <li><code>microblog.tmpl</code> - Used for showing a microblogging post inline.</li>
+ <li><code>blogpost.tmpl</code> - Used for a form to add a post to a blog (and rss/atom links)</li>
+ <li><code>feedlink.tmpl</code> - Used to add rss/atom links if <code>blogpost.tmpl</code> is not used.</li>
+ <li><code>aggregatepost.tmpl</code> - Used by the aggregate plugin to create
+ a page for a post.</li>
+ <li><code>searchform.tmpl</code>, <code>googleform.tmpl</code> - Used by the search plugin
+ and google plugin to add search forms to wiki pages.</li>
+ <li><code>searchquery.tmpl</code> - This is a Omega template, used by the
+ search plugin.</li>
+ <li><code>comment.tmpl</code> - Used by the comments plugin to display a comment.</li>
+ <li><code>change.tmpl</code> - Used to create a page describing a change made to the wiki.</li>
+ <li><code>recentchanges.tmpl</code> - Used for listing a change on the RecentChanges page.</li>
+ <li><code>autoindex.tmpl</code> - Filled in by the autoindex plugin to make index pages.</li>
+ <li><code>autotag.tmpl</code> - Filled in by the tag plugin to make tag pages.</li>
+ <li><code>calendarmonth.tmpl</code>, <code>calendaryear.tmpl</code> - Used by ikiwiki-calendar to
+ make calendar archive pages.</li>
+ <li><code>trails.tmpl</code> - Used by the trail plugin to generate links on each page
+ that is a member of a trail.</li>
+ <li><code>notifyemail.tmpl</code> - Used by the notifymail plugin to generate mails about
+ changed pages.</li>
+ <li><code>editpage.tmpl</code>, <code>editconflict.tmpl</code>, <code>editcreationconflict.tmpl</code>,
+ <code>editfailedsave.tmpl</code>, <code>editpagegone.tmpl</code>, <code>pocreatepage.tmpl</code>,
+ <code>editcomment.tmpl</code> <code>commentmoderation.tmpl</code>, <code>renamesummary.tmpl</code>,
+ <code>passwordmail.tmpl</code>, <code>emailauth.tmpl,</code>login-selector.tmpl<code>,
+ </code>revert.tmpl` - Parts of ikiwiki's user interface; do not normally need
+ to be customised.</li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../ikiwiki/">ikiwiki</a>
+
+ <a href="../ikiwiki/formatting/">ikiwiki/formatting</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2015-05-14T01:15:08Z">14/05/2015</time>
+ <!-- Created <time datetime="2015-05-14T01:15:08Z" pubdate="pubdate">14/05/2015</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>templates</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=templates" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../">RPC Bug</a>/ \n\n</span>\n<span class="title">\ntemplates\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=templates" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p><a href="../ikiwiki/">Ikiwiki</a> uses many templates for many purposes. By editing its templates,\nyou can fully customise its appearance, and avoid duplicate content.</p>\n\n<p>Ikiwiki uses the HTML::Template module as its template engine. This\nsupports things like conditionals and loops in templates and is pretty\neasy to learn. All you really need to know to modify templates is this:</p>\n\n<ul>\n<li>To insert the value of a template variable, use <code><TMPL_VAR variable></code>.</li>\n<li>To make a block of text conditional on a variable being set use\n<code><TMPL_IF variable>text</TMPL_IF></code>.</li>\n<li>To use one block of text if a variable is set and a second if it\'s not,\nuse <code><TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF></code></li>\n</ul>\n\n\n<p>If the template does not contain a <code>templatebody</code> directive, the entire\nsource of the page is used for the template. This is deprecated.</p>\n\n<h2>template files</h2>\n\n<p>Template files are unlike template pages in that they have the extension\n<code>.tmpl</code>. Template files are used extensively by Ikiwiki to generate html.\nThey can contain html that would not normally be allowed on a wiki page.</p>\n\n<p>Template files are located in <code>/usr/share/ikiwiki/templates</code> by default;\nthe <code>templatedir</code> setting can be used to make another directory be\nsearched first. Customised template files can also be placed inside the\n"templates/" directory in your wiki\'s source -- files placed there override\nones in the <code>templatedir</code>.</p>\n\n<p>Here is a full list of the template files used:</p>\n\n<ul>\n<li><p><code>page.tmpl</code> - Used for displaying all regular wiki pages. This is the\nkey template to customise to change the look and feel of Ikiwiki.</p></li>\n<li><p><code>rsspage.tmpl</code> - Used for generating rss feeds for blogs.</p></li>\n<li><code>rssitem.tmpl</code> - Used for generating individual items on rss feeds.</li>\n<li><code>atompage.tmpl</code> - Used for generating atom feeds for blogs.</li>\n<li><code>atomitem.tmpl</code> - Used for generating individual items on atom feeds.</li>\n<li><code>inlinepage.tmpl</code> - Used for displaying a post in a blog.</li>\n<li><code>archivepage.tmpl</code> - Used for listing a page in a blog archive page.</li>\n<li><code>titlepage.tmpl</code> - Used for listing a page by title in a blog archive page.</li>\n<li><code>microblog.tmpl</code> - Used for showing a microblogging post inline.</li>\n<li><code>blogpost.tmpl</code> - Used for a form to add a post to a blog (and rss/atom links)</li>\n<li><code>feedlink.tmpl</code> - Used to add rss/atom links if <code>blogpost.tmpl</code> is not used.</li>\n<li><code>aggregatepost.tmpl</code> - Used by the aggregate plugin to create\na page for a post.</li>\n<li><code>searchform.tmpl</code>, <code>googleform.tmpl</code> - Used by the search plugin\nand google plugin to add search forms to wiki pages.</li>\n<li><code>searchquery.tmpl</code> - This is a Omega template, used by the\nsearch plugin.</li>\n<li><code>comment.tmpl</code> - Used by the comments plugin to display a comment.</li>\n<li><code>change.tmpl</code> - Used to create a page describing a change made to the wiki.</li>\n<li><code>recentchanges.tmpl</code> - Used for listing a change on the RecentChanges page.</li>\n<li><code>autoindex.tmpl</code> - Filled in by the autoindex plugin to make index pages.</li>\n<li><code>autotag.tmpl</code> - Filled in by the tag plugin to make tag pages.</li>\n<li><code>calendarmonth.tmpl</code>, <code>calendaryear.tmpl</code> - Used by ikiwiki-calendar to\nmake calendar archive pages.</li>\n<li><code>trails.tmpl</code> - Used by the trail plugin to generate links on each page\nthat is a member of a trail.</li>\n<li><code>notifyemail.tmpl</code> - Used by the notifymail plugin to generate mails about\nchanged pages.</li>\n<li><code>editpage.tmpl</code>, <code>editconflict.tmpl</code>, <code>editcreationconflict.tmpl</code>,\n<code>editfailedsave.tmpl</code>, <code>editpagegone.tmpl</code>, <code>pocreatepage.tmpl</code>,\n<code>editcomment.tmpl</code> <code>commentmoderation.tmpl</code>, <code>renamesummary.tmpl</code>,\n<code>passwordmail.tmpl</code>, <code>emailauth.tmpl,</code>login-selector.tmpl<code>,\n</code>revert.tmpl` - Parts of ikiwiki\'s user interface; do not normally need\nto be customised.</li>\n</ul>\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../ikiwiki/">ikiwiki</a>\n\n<a href="../ikiwiki/formatting/">ikiwiki/formatting</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2015-05-14T01:15:08Z">14/05/2015</time>\n<!-- Created <time datetime="2015-05-14T01:15:08Z" pubdate="pubdate">14/05/2015</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>templates</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ templates
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p><a href="../ikiwiki/">Ikiwiki</a> uses many templates for many purposes. By editing its templates,
+ you can fully customise its appearance, and avoid duplicate content.</p>
+
+ <p>Ikiwiki uses the HTML::Template module as its template engine. This
+ supports things like conditionals and loops in templates and is pretty
+ easy to learn. All you really need to know to modify templates is this:</p>
+
+ <ul>
+ <li>To insert the value of a template variable, use <code>&lt;TMPL_VAR variable&gt;</code>.</li>
+ <li>To make a block of text conditional on a variable being set use
+ <code>&lt;TMPL_IF variable&gt;text&lt;/TMPL_IF&gt;</code>.</li>
+ <li>To use one block of text if a variable is set and a second if it's not,
+ use <code>&lt;TMPL_IF variable&gt;text&lt;TMPL_ELSE&gt;other text&lt;/TMPL_IF&gt;</code></li>
+ </ul>
+
+
+ <p>If the template does not contain a <code>templatebody</code> directive, the entire
+ source of the page is used for the template. This is deprecated.</p>
+
+ <h2>template files</h2>
+
+ <p>Template files are unlike template pages in that they have the extension
+ <code>.tmpl</code>. Template files are used extensively by Ikiwiki to generate html.
+ They can contain html that would not normally be allowed on a wiki page.</p>
+
+ <p>Template files are located in <code>/usr/share/ikiwiki/templates</code> by default;
+ the <code>templatedir</code> setting can be used to make another directory be
+ searched first. Customised template files can also be placed inside the
+ "templates/" directory in your wiki's source -- files placed there override
+ ones in the <code>templatedir</code>.</p>
+
+ <p>Here is a full list of the template files used:</p>
+
+ <ul>
+ <li><p><code>page.tmpl</code> - Used for displaying all regular wiki pages. This is the
+ key template to customise to change the look and feel of Ikiwiki.</p></li>
+ <li><p><code>rsspage.tmpl</code> - Used for generating rss feeds for blogs.</p></li>
+ <li><code>rssitem.tmpl</code> - Used for generating individual items on rss feeds.</li>
+ <li><code>atompage.tmpl</code> - Used for generating atom feeds for blogs.</li>
+ <li><code>atomitem.tmpl</code> - Used for generating individual items on atom feeds.</li>
+ <li><code>inlinepage.tmpl</code> - Used for displaying a post in a blog.</li>
+ <li><code>archivepage.tmpl</code> - Used for listing a page in a blog archive page.</li>
+ <li><code>titlepage.tmpl</code> - Used for listing a page by title in a blog archive page.</li>
+ <li><code>microblog.tmpl</code> - Used for showing a microblogging post inline.</li>
+ <li><code>blogpost.tmpl</code> - Used for a form to add a post to a blog (and rss/atom links)</li>
+ <li><code>feedlink.tmpl</code> - Used to add rss/atom links if <code>blogpost.tmpl</code> is not used.</li>
+ <li><code>aggregatepost.tmpl</code> - Used by the aggregate plugin to create
+ a page for a post.</li>
+ <li><code>searchform.tmpl</code>, <code>googleform.tmpl</code> - Used by the search plugin
+ and google plugin to add search forms to wiki pages.</li>
+ <li><code>searchquery.tmpl</code> - This is a Omega template, used by the
+ search plugin.</li>
+ <li><code>comment.tmpl</code> - Used by the comments plugin to display a comment.</li>
+ <li><code>change.tmpl</code> - Used to create a page describing a change made to the wiki.</li>
+ <li><code>recentchanges.tmpl</code> - Used for listing a change on the RecentChanges page.</li>
+ <li><code>autoindex.tmpl</code> - Filled in by the autoindex plugin to make index pages.</li>
+ <li><code>autotag.tmpl</code> - Filled in by the tag plugin to make tag pages.</li>
+ <li><code>calendarmonth.tmpl</code>, <code>calendaryear.tmpl</code> - Used by ikiwiki-calendar to
+ make calendar archive pages.</li>
+ <li><code>trails.tmpl</code> - Used by the trail plugin to generate links on each page
+ that is a member of a trail.</li>
+ <li><code>notifyemail.tmpl</code> - Used by the notifymail plugin to generate mails about
+ changed pages.</li>
+ <li><code>editpage.tmpl</code>, <code>editconflict.tmpl</code>, <code>editcreationconflict.tmpl</code>,
+ <code>editfailedsave.tmpl</code>, <code>editpagegone.tmpl</code>, <code>pocreatepage.tmpl</code>,
+ <code>editcomment.tmpl</code> <code>commentmoderation.tmpl</code>, <code>renamesummary.tmpl</code>,
+ <code>passwordmail.tmpl</code>, <code>emailauth.tmpl,</code>login-selector.tmpl<code>,
+ </code>revert.tmpl` - Parts of ikiwiki's user interface; do not normally need
+ to be customised.</li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../ikiwiki/">ikiwiki</a>
+
+ <a href="../ikiwiki/formatting/">ikiwiki/formatting</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2015-05-14T01:15:08Z">14/05/2015</time>
+ <!-- Created <time datetime="2015-05-14T01:15:08Z" pubdate="pubdate">14/05/2015</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>recentchanges</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>RecentChanges</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=recentchanges" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ RecentChanges
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=recentchanges" rel="nofollow">Edit</a></li>
+
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Recent changes to this wiki:</p>
+
+ <div class="feedlink">
+
+
+ </div>
+
+ <div class="recentchanges">
+
+
+
+
+
+
+
+
+
+ <div id="change-b4ba34a8edd1b97989965af69eddac050bc0a8ba" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=foo" rel="nofollow">foo</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-28T18:08:33Z">20:08:33 28/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=b4ba34a8edd1b97989965af69eddac050bc0a8ba" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ Still debugging<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-203e0121761fc8ec953cd24821291f45afc0b334" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T01:51:08Z">03:51:08 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=203e0121761fc8ec953cd24821291f45afc0b334" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ update<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-8ef7576b628a88b2b3e974e202a16bbeb2251354" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T01:47:52Z">03:47:52 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=8ef7576b628a88b2b3e974e202a16bbeb2251354" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ update<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-9444f53d5b4960dd2560b85d9e8a3d2a77d6db02" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=README.md" rel="nofollow">README.md</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=foo" rel="nofollow">foo</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=index" rel="nofollow">index</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=wiki.setup" rel="nofollow">wiki.setup</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T01:35:13Z">03:35:13 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=9444f53d5b4960dd2560b85d9e8a3d2a77d6db02" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ Initial commit<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-35009e6655542601b4570fd4d328f6db1d81409d" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=.gitignore" rel="nofollow">.gitignore</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T00:56:18Z">02:56:18 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=35009e6655542601b4570fd4d328f6db1d81409d" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ initial commit<br />
+
+
+ </div>
+
+
+
+
+ </div>
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>RecentChanges</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=recentchanges" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../">RPC Bug</a>/ \n\n</span>\n<span class="title">\nRecentChanges\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=recentchanges" rel="nofollow">Edit</a></li>\n\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Recent changes to this wiki:</p>\n\n<div class="feedlink">\n\n\n</div>\n\n<div class="recentchanges">\n\n\n\n\n\n\n\n\n\n<div id="change-b4ba34a8edd1b97989965af69eddac050bc0a8ba" class="metadata">\n<span class="desc"><br />Changed pages:</span>\n<span class="pagelinks">\n\n\n\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=foo" rel="nofollow">foo</a>\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>\n\n</span>\n<span class="desc"><br />Changed by:</span>\n<span class="committer">\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=spalax" rel="nofollow">spalax</a>\n\n</span>\n<span class="desc"><br />Commit type:</span>\n<span class="committype">git</span>\n<span class="desc"><br />Date:</span>\n<span class="changedate"><time datetime="2015-06-28T18:08:33Z">20:08:33 28/06/2015</time></span>\n<span class="desc"><br /></span>\n<span class="revert">\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&rev=b4ba34a8edd1b97989965af69eddac050bc0a8ba" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>\n</span>\n</div>\n<div class="changelog">\n\n\nStill debugging<br />\n\n\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div id="change-203e0121761fc8ec953cd24821291f45afc0b334" class="metadata">\n<span class="desc"><br />Changed pages:</span>\n<span class="pagelinks">\n\n\n\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>\n\n</span>\n<span class="desc"><br />Changed by:</span>\n<span class="committer">\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=spalax" rel="nofollow">spalax</a>\n\n</span>\n<span class="desc"><br />Commit type:</span>\n<span class="committype">git</span>\n<span class="desc"><br />Date:</span>\n<span class="changedate"><time datetime="2015-06-15T01:51:08Z">03:51:08 15/06/2015</time></span>\n<span class="desc"><br /></span>\n<span class="revert">\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&rev=203e0121761fc8ec953cd24821291f45afc0b334" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>\n</span>\n</div>\n<div class="changelog">\n\n\nupdate<br />\n\n\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div id="change-8ef7576b628a88b2b3e974e202a16bbeb2251354" class="metadata">\n<span class="desc"><br />Changed pages:</span>\n<span class="pagelinks">\n\n\n\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>\n\n</span>\n<span class="desc"><br />Changed by:</span>\n<span class="committer">\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=spalax" rel="nofollow">spalax</a>\n\n</span>\n<span class="desc"><br />Commit type:</span>\n<span class="committype">git</span>\n<span class="desc"><br />Date:</span>\n<span class="changedate"><time datetime="2015-06-15T01:47:52Z">03:47:52 15/06/2015</time></span>\n<span class="desc"><br /></span>\n<span class="revert">\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&rev=8ef7576b628a88b2b3e974e202a16bbeb2251354" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>\n</span>\n</div>\n<div class="changelog">\n\n\nupdate<br />\n\n\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div id="change-9444f53d5b4960dd2560b85d9e8a3d2a77d6db02" class="metadata">\n<span class="desc"><br />Changed pages:</span>\n<span class="pagelinks">\n\n\n\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=README.md" rel="nofollow">README.md</a>\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=foo" rel="nofollow">foo</a>\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=index" rel="nofollow">index</a>\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=wiki.setup" rel="nofollow">wiki.setup</a>\n\n</span>\n<span class="desc"><br />Changed by:</span>\n<span class="committer">\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=spalax" rel="nofollow">spalax</a>\n\n</span>\n<span class="desc"><br />Commit type:</span>\n<span class="committype">git</span>\n<span class="desc"><br />Date:</span>\n<span class="changedate"><time datetime="2015-06-15T01:35:13Z">03:35:13 15/06/2015</time></span>\n<span class="desc"><br /></span>\n<span class="revert">\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&rev=9444f53d5b4960dd2560b85d9e8a3d2a77d6db02" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>\n</span>\n</div>\n<div class="changelog">\n\n\nInitial commit<br />\n\n\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div id="change-35009e6655542601b4570fd4d328f6db1d81409d" class="metadata">\n<span class="desc"><br />Changed pages:</span>\n<span class="pagelinks">\n\n\n\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=.gitignore" rel="nofollow">.gitignore</a>\n\n</span>\n<span class="desc"><br />Changed by:</span>\n<span class="committer">\n\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&page=spalax" rel="nofollow">spalax</a>\n\n</span>\n<span class="desc"><br />Commit type:</span>\n<span class="committype">git</span>\n<span class="desc"><br />Date:</span>\n<span class="changedate"><time datetime="2015-06-15T00:56:18Z">02:56:18 15/06/2015</time></span>\n<span class="desc"><br /></span>\n<span class="revert">\n<a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&rev=35009e6655542601b4570fd4d328f6db1d81409d" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>\n</span>\n</div>\n<div class="changelog">\n\n\ninitial commit<br />\n\n\n</div>\n\n\n\n\n</div>\n\n\n\n\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>RecentChanges</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=recentchanges" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ RecentChanges
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=recentchanges" rel="nofollow">Edit</a></li>
+
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Recent changes to this wiki:</p>
+
+ <div class="feedlink">
+
+
+ </div>
+
+ <div class="recentchanges">
+
+
+
+
+
+
+
+
+
+ <div id="change-b4ba34a8edd1b97989965af69eddac050bc0a8ba" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=foo" rel="nofollow">foo</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-28T18:08:33Z">20:08:33 28/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=b4ba34a8edd1b97989965af69eddac050bc0a8ba" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ Still debugging<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-203e0121761fc8ec953cd24821291f45afc0b334" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T01:51:08Z">03:51:08 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=203e0121761fc8ec953cd24821291f45afc0b334" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ update<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-8ef7576b628a88b2b3e974e202a16bbeb2251354" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T01:47:52Z">03:47:52 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=8ef7576b628a88b2b3e974e202a16bbeb2251354" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ update<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-9444f53d5b4960dd2560b85d9e8a3d2a77d6db02" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=README.md" rel="nofollow">README.md</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=foo" rel="nofollow">foo</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=index" rel="nofollow">index</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=plugins%2Frpcbug" rel="nofollow">plugins/rpcbug</a>
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=wiki.setup" rel="nofollow">wiki.setup</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T01:35:13Z">03:35:13 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=9444f53d5b4960dd2560b85d9e8a3d2a77d6db02" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ Initial commit<br />
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="change-35009e6655542601b4570fd4d328f6db1d81409d" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+
+
+
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=.gitignore" rel="nofollow">.gitignore</a>
+
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=goto&amp;page=spalax" rel="nofollow">spalax</a>
+
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype">git</span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><time datetime="2015-06-15T00:56:18Z">02:56:18 15/06/2015</time></span>
+ <span class="desc"><br /></span>
+ <span class="revert">
+ <a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=revert&amp;rev=35009e6655542601b4570fd4d328f6db1d81409d" title="revert" rel="nofollow"><img src="../wikiicons/revert.png" alt="revert" /></a>
+ </span>
+ </div>
+ <div class="changelog">
+
+
+ initial commit<br />
+
+
+ </div>
+
+
+
+
+ </div>
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>shortcuts</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>shortcuts</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=shortcuts" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ shortcuts
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=shortcuts" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has shortcuts <strong>disabled</strong>.</p>
+
+ <p>Some examples of using shortcuts include:</p>
+
+ <pre><code>\[[!google foo]]
+ \[[!wikipedia War_of_1812]]
+ \[[!debbug 12345]]
+ Check the \[[!google ikiwiki desc="google search for %s"]].
+ </code></pre>
+
+ <p>This page controls what shortcut links the wiki supports.</p>
+
+ <ul>
+ <li>\[[!shortcut name=google url="https://encrypted.google.com/search?q=%s"]]</li>
+ <li>\[[!shortcut name=archive url="http://web.archive.org/*/%S"]]</li>
+ <li>\[[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]]</li>
+ <li>\[[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]]</li>
+ <li>\[[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]]</li>
+ <li>\[[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]]</li>
+ <li>\[[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]]</li>
+ <li>\[[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]]</li>
+ <li>\[[!shortcut name=deblist url="https://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]]</li>
+ <li>\[[!shortcut name=debpkg url="http://packages.debian.org/%s"]]</li>
+ <li>\[[!shortcut name=debpkgsid url="http://packages.debian.org/sid/%s"]]</li>
+ <li>\[[!shortcut name=debpts url="http://packages.qa.debian.org/%s"]]</li>
+ <li>\[[!shortcut name=debmsg url="https://lists.debian.org/msgid-search/%s"]]</li>
+ <li>\[[!shortcut name=debrt url="https://rt.debian.org/Ticket/Display.html?id=%s"]]</li>
+ <li>\[[!shortcut name=debss url="http://snapshot.debian.org/package/%s/"]]
+
+ <ul>
+ <li>Usage: <code>\[[!debss package]]</code> or <code>\[[!debss package/version]]</code>. See <a href="http://snapshot.debian.org/">http://snapshot.debian.org/</a> for details.</li>
+ </ul>
+ </li>
+ <li>\[[!shortcut name=debwiki url="https://wiki.debian.org/%S"]]</li>
+ <li>\[[!shortcut name=fdobug url="https://bugs.freedesktop.org/show_bug.cgi?id=%s" desc="freedesktop.org bug #%s"]]</li>
+ <li>\[[!shortcut name=fdolist url="http://lists.freedesktop.org/mailman/listinfo/%s" desc="%s@lists.freedesktop.org"]]</li>
+ <li>\[[!shortcut name=gnomebug url="https://bugzilla.gnome.org/show_bug.cgi?id=%s" desc="GNOME bug #%s"]]</li>
+ <li>\[[!shortcut name=linuxbug url="https://bugzilla.kernel.org/show_bug.cgi?id=%s" desc="Linux bug #%s"]]</li>
+ <li>\[[!shortcut name=mozbug url="https://bugzilla.mozilla.org/show_bug.cgi?id=%s" desc="Mozilla bug #%s"]]</li>
+ <li>\[[!shortcut name=gnulist url="https://lists.gnu.org/mailman/listinfo/%s" desc="%s@gnu.org"]]</li>
+ <li>\[[!shortcut name=marcmsg url="http://marc.info/?i=%s"]]</li>
+ <li>\[[!shortcut name=marclist url="http://marc.info/?l=%s"]]</li>
+ <li>\[[!shortcut name=gmane url="http://dir.gmane.org/gmane.%s" desc="gmane.%s"]]</li>
+ <li>\[[!shortcut name=gmanemsg url="http://mid.gmane.org/%s"]]</li>
+ <li>\[[!shortcut name=cpan url="http://search.cpan.org/search?mode=dist&amp;query=%s"]]</li>
+ <li>\[[!shortcut name=ctan url="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s"]]</li>
+ <li>\[[!shortcut name=hoogle url="http://haskell.org/hoogle/?q=%s"]]</li>
+ <li>\[[!shortcut name=iki url="http://ikiwiki.info/%S/"]]</li>
+ <li>\[[!shortcut name=ljuser url="http://%s.livejournal.com/"]]</li>
+ <li>\[[!shortcut name=rfc url="https://www.ietf.org/rfc/rfc%s.txt" desc="RFC %s"]]</li>
+ <li>\[[!shortcut name=c2 url="http://c2.com/cgi/wiki?%s"]]</li>
+ <li>\[[!shortcut name=meatballwiki url="http://www.usemod.com/cgi-bin/mb.pl?%s"]]</li>
+ <li>\[[!shortcut name=emacswiki url="http://www.emacswiki.org/cgi-bin/wiki/%s"]]</li>
+ <li>\[[!shortcut name=haskellwiki url="http://haskell.org/haskellwiki/%s"]]</li>
+ <li>\[[!shortcut name=dict url="http://www.dict.org/bin/Dict?Form=Dict1&amp;Strategy=<em>&amp;Database=</em>&amp;Query=%s"]]</li>
+ <li>\[[!shortcut name=imdb url="http://imdb.com/find?q=%s"]]</li>
+ <li>\[[!shortcut name=gpg url="http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&amp;exact=on&amp;search=0x%s"]]</li>
+ <li>\[[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]]</li>
+ <li>\[[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&amp;type=domain"]]</li>
+ <li>\[[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]]</li>
+ <li>\[[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]]</li>
+ <li>\[[!shortcut name=man url="http://manpages.debian.org/%s"]]</li>
+ <li>\[[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]]</li>
+ <li>\[[!shortcut name=cpanrt url="https://rt.cpan.org/Ticket/Display.html?id=%s" desc="CPAN RT#%s"]]</li>
+ <li>\[[!shortcut name=novellbug url="https://bugzilla.novell.com/show_bug.cgi?id=%s" desc="bug %s"]]</li>
+ <li>\[[!shortcut name=ubupkg url="http://packages.ubuntu.com/%s"]]</li>
+ <li>\[[!shortcut name=mozillazinekb url="http://kb.mozillazine.org/%s"]]</li>
+ <li>\[[!shortcut name=freebsdwiki url="http://wiki.freebsd.org/%s"]]</li>
+ <li>\[[!shortcut name=hackage url="http://hackage.haskell.org/package/%s"]]</li>
+ <li>\[[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]]</li>
+ <li>\[[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]]</li>
+ <li>\[[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]]</li>
+ </ul>
+
+
+ <p>To add a new shortcut, use the <code>shortcut</code>
+ <a href="../ikiwiki/directive/">directive</a>. In the url, "%s" is replaced with the
+ text passed to the named shortcut, after \[[!wikipedia url_encoding]]
+ it, and '%S' is replaced with the raw, non-encoded text.
+ Additionally, <code>%W</code> is replaced with the text encoded just right for
+ Wikipedia. The optional <code>desc</code> parameter controls the description of
+ the link.</p>
+
+ <p>Remember that the <code>name</code> you give the shortcut will become a new
+ <a href="../ikiwiki/directive/">directive</a>. Avoid using a <code>name</code> that conflicts
+ with an existing directive. These directives also accept a <code>desc</code>
+ parameter that will override the one provided at definition time.</p>
+
+ <p>If you come up with a shortcut that you think others might find useful,
+ consider contributing it to the <a href="http://ikiwiki.info/shortcuts/">shortcuts page on the ikiwiki
+ wiki</a>, so that future versions of
+ ikiwiki will include your shortcut in the standard underlay.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../ikiwiki/formatting/">ikiwiki/formatting</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-26T22:55:09Z">27/09/2014</time>
+ <!-- Created <time datetime="2014-09-26T22:55:09Z" pubdate="pubdate">27/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>shortcuts</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=shortcuts" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../">RPC Bug</a>/ \n\n</span>\n<span class="title">\nshortcuts\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=shortcuts" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This wiki has shortcuts <strong>disabled</strong>.</p>\n\n<p>Some examples of using shortcuts include:</p>\n\n<pre><code>\[[!google foo]]\n\[[!wikipedia War_of_1812]]\n\[[!debbug 12345]]\nCheck the \[[!google ikiwiki desc="google search for %s"]].\n</code></pre>\n\n<p>This page controls what shortcut links the wiki supports.</p>\n\n<ul>\n<li>\[[!shortcut name=google url="https://encrypted.google.com/search?q=%s"]]</li>\n<li>\[[!shortcut name=archive url="http://web.archive.org/*/%S"]]</li>\n<li>\[[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]]</li>\n<li>\[[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]]</li>\n<li>\[[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]]</li>\n<li>\[[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]]</li>\n<li>\[[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]]</li>\n<li>\[[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]]</li>\n<li>\[[!shortcut name=deblist url="https://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]]</li>\n<li>\[[!shortcut name=debpkg url="http://packages.debian.org/%s"]]</li>\n<li>\[[!shortcut name=debpkgsid url="http://packages.debian.org/sid/%s"]]</li>\n<li>\[[!shortcut name=debpts url="http://packages.qa.debian.org/%s"]]</li>\n<li>\[[!shortcut name=debmsg url="https://lists.debian.org/msgid-search/%s"]]</li>\n<li>\[[!shortcut name=debrt url="https://rt.debian.org/Ticket/Display.html?id=%s"]]</li>\n<li>\[[!shortcut name=debss url="http://snapshot.debian.org/package/%s/"]]\n\n<ul>\n<li>Usage: <code>\[[!debss package]]</code> or <code>\[[!debss package/version]]</code>. See <a href="http://snapshot.debian.org/">http://snapshot.debian.org/</a> for details.</li>\n</ul>\n</li>\n<li>\[[!shortcut name=debwiki url="https://wiki.debian.org/%S"]]</li>\n<li>\[[!shortcut name=fdobug url="https://bugs.freedesktop.org/show_bug.cgi?id=%s" desc="freedesktop.org bug #%s"]]</li>\n<li>\[[!shortcut name=fdolist url="http://lists.freedesktop.org/mailman/listinfo/%s" desc="%s@lists.freedesktop.org"]]</li>\n<li>\[[!shortcut name=gnomebug url="https://bugzilla.gnome.org/show_bug.cgi?id=%s" desc="GNOME bug #%s"]]</li>\n<li>\[[!shortcut name=linuxbug url="https://bugzilla.kernel.org/show_bug.cgi?id=%s" desc="Linux bug #%s"]]</li>\n<li>\[[!shortcut name=mozbug url="https://bugzilla.mozilla.org/show_bug.cgi?id=%s" desc="Mozilla bug #%s"]]</li>\n<li>\[[!shortcut name=gnulist url="https://lists.gnu.org/mailman/listinfo/%s" desc="%s@gnu.org"]]</li>\n<li>\[[!shortcut name=marcmsg url="http://marc.info/?i=%s"]]</li>\n<li>\[[!shortcut name=marclist url="http://marc.info/?l=%s"]]</li>\n<li>\[[!shortcut name=gmane url="http://dir.gmane.org/gmane.%s" desc="gmane.%s"]]</li>\n<li>\[[!shortcut name=gmanemsg url="http://mid.gmane.org/%s"]]</li>\n<li>\[[!shortcut name=cpan url="http://search.cpan.org/search?mode=dist&query=%s"]]</li>\n<li>\[[!shortcut name=ctan url="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s"]]</li>\n<li>\[[!shortcut name=hoogle url="http://haskell.org/hoogle/?q=%s"]]</li>\n<li>\[[!shortcut name=iki url="http://ikiwiki.info/%S/"]]</li>\n<li>\[[!shortcut name=ljuser url="http://%s.livejournal.com/"]]</li>\n<li>\[[!shortcut name=rfc url="https://www.ietf.org/rfc/rfc%s.txt" desc="RFC %s"]]</li>\n<li>\[[!shortcut name=c2 url="http://c2.com/cgi/wiki?%s"]]</li>\n<li>\[[!shortcut name=meatballwiki url="http://www.usemod.com/cgi-bin/mb.pl?%s"]]</li>\n<li>\[[!shortcut name=emacswiki url="http://www.emacswiki.org/cgi-bin/wiki/%s"]]</li>\n<li>\[[!shortcut name=haskellwiki url="http://haskell.org/haskellwiki/%s"]]</li>\n<li>\[[!shortcut name=dict url="http://www.dict.org/bin/Dict?Form=Dict1&Strategy=<em>&Database=</em>&Query=%s"]]</li>\n<li>\[[!shortcut name=imdb url="http://imdb.com/find?q=%s"]]</li>\n<li>\[[!shortcut name=gpg url="http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&exact=on&search=0x%s"]]</li>\n<li>\[[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]]</li>\n<li>\[[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain"]]</li>\n<li>\[[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]]</li>\n<li>\[[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]]</li>\n<li>\[[!shortcut name=man url="http://manpages.debian.org/%s"]]</li>\n<li>\[[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]]</li>\n<li>\[[!shortcut name=cpanrt url="https://rt.cpan.org/Ticket/Display.html?id=%s" desc="CPAN RT#%s"]]</li>\n<li>\[[!shortcut name=novellbug url="https://bugzilla.novell.com/show_bug.cgi?id=%s" desc="bug %s"]]</li>\n<li>\[[!shortcut name=ubupkg url="http://packages.ubuntu.com/%s"]]</li>\n<li>\[[!shortcut name=mozillazinekb url="http://kb.mozillazine.org/%s"]]</li>\n<li>\[[!shortcut name=freebsdwiki url="http://wiki.freebsd.org/%s"]]</li>\n<li>\[[!shortcut name=hackage url="http://hackage.haskell.org/package/%s"]]</li>\n<li>\[[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]]</li>\n<li>\[[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]]</li>\n<li>\[[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]]</li>\n</ul>\n\n\n<p>To add a new shortcut, use the <code>shortcut</code>\n<a href="../ikiwiki/directive/">directive</a>. In the url, "%s" is replaced with the\ntext passed to the named shortcut, after \[[!wikipedia url_encoding]]\nit, and \'%S\' is replaced with the raw, non-encoded text.\nAdditionally, <code>%W</code> is replaced with the text encoded just right for\nWikipedia. The optional <code>desc</code> parameter controls the description of\nthe link.</p>\n\n<p>Remember that the <code>name</code> you give the shortcut will become a new\n<a href="../ikiwiki/directive/">directive</a>. Avoid using a <code>name</code> that conflicts\nwith an existing directive. These directives also accept a <code>desc</code>\nparameter that will override the one provided at definition time.</p>\n\n<p>If you come up with a shortcut that you think others might find useful,\nconsider contributing it to the <a href="http://ikiwiki.info/shortcuts/">shortcuts page on the ikiwiki\nwiki</a>, so that future versions of\nikiwiki will include your shortcut in the standard underlay.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../ikiwiki/formatting/">ikiwiki/formatting</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-26T22:55:09Z">27/09/2014</time>\n<!-- Created <time datetime="2014-09-26T22:55:09Z" pubdate="pubdate">27/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>shortcuts</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=shortcuts" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../">RPC Bug</a>/
+
+ </span>
+ <span class="title">
+ shortcuts
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=shortcuts" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has shortcuts <strong>disabled</strong>.</p>
+
+ <p>Some examples of using shortcuts include:</p>
+
+ <pre><code>\[[!google foo]]
+ \[[!wikipedia War_of_1812]]
+ \[[!debbug 12345]]
+ Check the \[[!google ikiwiki desc="google search for %s"]].
+ </code></pre>
+
+ <p>This page controls what shortcut links the wiki supports.</p>
+
+ <ul>
+ <li>\[[!shortcut name=google url="https://encrypted.google.com/search?q=%s"]]</li>
+ <li>\[[!shortcut name=archive url="http://web.archive.org/*/%S"]]</li>
+ <li>\[[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]]</li>
+ <li>\[[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]]</li>
+ <li>\[[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]]</li>
+ <li>\[[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]]</li>
+ <li>\[[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]]</li>
+ <li>\[[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]]</li>
+ <li>\[[!shortcut name=deblist url="https://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]]</li>
+ <li>\[[!shortcut name=debpkg url="http://packages.debian.org/%s"]]</li>
+ <li>\[[!shortcut name=debpkgsid url="http://packages.debian.org/sid/%s"]]</li>
+ <li>\[[!shortcut name=debpts url="http://packages.qa.debian.org/%s"]]</li>
+ <li>\[[!shortcut name=debmsg url="https://lists.debian.org/msgid-search/%s"]]</li>
+ <li>\[[!shortcut name=debrt url="https://rt.debian.org/Ticket/Display.html?id=%s"]]</li>
+ <li>\[[!shortcut name=debss url="http://snapshot.debian.org/package/%s/"]]
+
+ <ul>
+ <li>Usage: <code>\[[!debss package]]</code> or <code>\[[!debss package/version]]</code>. See <a href="http://snapshot.debian.org/">http://snapshot.debian.org/</a> for details.</li>
+ </ul>
+ </li>
+ <li>\[[!shortcut name=debwiki url="https://wiki.debian.org/%S"]]</li>
+ <li>\[[!shortcut name=fdobug url="https://bugs.freedesktop.org/show_bug.cgi?id=%s" desc="freedesktop.org bug #%s"]]</li>
+ <li>\[[!shortcut name=fdolist url="http://lists.freedesktop.org/mailman/listinfo/%s" desc="%s@lists.freedesktop.org"]]</li>
+ <li>\[[!shortcut name=gnomebug url="https://bugzilla.gnome.org/show_bug.cgi?id=%s" desc="GNOME bug #%s"]]</li>
+ <li>\[[!shortcut name=linuxbug url="https://bugzilla.kernel.org/show_bug.cgi?id=%s" desc="Linux bug #%s"]]</li>
+ <li>\[[!shortcut name=mozbug url="https://bugzilla.mozilla.org/show_bug.cgi?id=%s" desc="Mozilla bug #%s"]]</li>
+ <li>\[[!shortcut name=gnulist url="https://lists.gnu.org/mailman/listinfo/%s" desc="%s@gnu.org"]]</li>
+ <li>\[[!shortcut name=marcmsg url="http://marc.info/?i=%s"]]</li>
+ <li>\[[!shortcut name=marclist url="http://marc.info/?l=%s"]]</li>
+ <li>\[[!shortcut name=gmane url="http://dir.gmane.org/gmane.%s" desc="gmane.%s"]]</li>
+ <li>\[[!shortcut name=gmanemsg url="http://mid.gmane.org/%s"]]</li>
+ <li>\[[!shortcut name=cpan url="http://search.cpan.org/search?mode=dist&amp;query=%s"]]</li>
+ <li>\[[!shortcut name=ctan url="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s"]]</li>
+ <li>\[[!shortcut name=hoogle url="http://haskell.org/hoogle/?q=%s"]]</li>
+ <li>\[[!shortcut name=iki url="http://ikiwiki.info/%S/"]]</li>
+ <li>\[[!shortcut name=ljuser url="http://%s.livejournal.com/"]]</li>
+ <li>\[[!shortcut name=rfc url="https://www.ietf.org/rfc/rfc%s.txt" desc="RFC %s"]]</li>
+ <li>\[[!shortcut name=c2 url="http://c2.com/cgi/wiki?%s"]]</li>
+ <li>\[[!shortcut name=meatballwiki url="http://www.usemod.com/cgi-bin/mb.pl?%s"]]</li>
+ <li>\[[!shortcut name=emacswiki url="http://www.emacswiki.org/cgi-bin/wiki/%s"]]</li>
+ <li>\[[!shortcut name=haskellwiki url="http://haskell.org/haskellwiki/%s"]]</li>
+ <li>\[[!shortcut name=dict url="http://www.dict.org/bin/Dict?Form=Dict1&amp;Strategy=<em>&amp;Database=</em>&amp;Query=%s"]]</li>
+ <li>\[[!shortcut name=imdb url="http://imdb.com/find?q=%s"]]</li>
+ <li>\[[!shortcut name=gpg url="http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&amp;exact=on&amp;search=0x%s"]]</li>
+ <li>\[[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]]</li>
+ <li>\[[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&amp;type=domain"]]</li>
+ <li>\[[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]]</li>
+ <li>\[[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]]</li>
+ <li>\[[!shortcut name=man url="http://manpages.debian.org/%s"]]</li>
+ <li>\[[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]]</li>
+ <li>\[[!shortcut name=cpanrt url="https://rt.cpan.org/Ticket/Display.html?id=%s" desc="CPAN RT#%s"]]</li>
+ <li>\[[!shortcut name=novellbug url="https://bugzilla.novell.com/show_bug.cgi?id=%s" desc="bug %s"]]</li>
+ <li>\[[!shortcut name=ubupkg url="http://packages.ubuntu.com/%s"]]</li>
+ <li>\[[!shortcut name=mozillazinekb url="http://kb.mozillazine.org/%s"]]</li>
+ <li>\[[!shortcut name=freebsdwiki url="http://wiki.freebsd.org/%s"]]</li>
+ <li>\[[!shortcut name=hackage url="http://hackage.haskell.org/package/%s"]]</li>
+ <li>\[[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]]</li>
+ <li>\[[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]]</li>
+ <li>\[[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]]</li>
+ </ul>
+
+
+ <p>To add a new shortcut, use the <code>shortcut</code>
+ <a href="../ikiwiki/directive/">directive</a>. In the url, "%s" is replaced with the
+ text passed to the named shortcut, after \[[!wikipedia url_encoding]]
+ it, and '%S' is replaced with the raw, non-encoded text.
+ Additionally, <code>%W</code> is replaced with the text encoded just right for
+ Wikipedia. The optional <code>desc</code> parameter controls the description of
+ the link.</p>
+
+ <p>Remember that the <code>name</code> you give the shortcut will become a new
+ <a href="../ikiwiki/directive/">directive</a>. Avoid using a <code>name</code> that conflicts
+ with an existing directive. These directives also accept a <code>desc</code>
+ parameter that will override the one provided at definition time.</p>
+
+ <p>If you come up with a shortcut that you think others might find useful,
+ consider contributing it to the <a href="http://ikiwiki.info/shortcuts/">shortcuts page on the ikiwiki
+ wiki</a>, so that future versions of
+ ikiwiki will include your shortcut in the standard underlay.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../ikiwiki/formatting/">ikiwiki/formatting</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-26T22:55:09Z">27/09/2014</time>
+ <!-- Created <time datetime="2014-09-26T22:55:09Z" pubdate="pubdate">27/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>templates/note</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>note</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fnote" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">templates</a>/
+
+ </span>
+ <span class="title">
+ note
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fnote" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Use this template to insert a note into a page. The note will be styled to
+ float to the right of other text on the page. This template has one
+ parameter:</p>
+
+ <ul>
+ <li>`text` - the text to display in the note
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2013-09-13T09:30:24Z">13/09/2013</time>
+ <!-- Created <time datetime="2013-09-13T09:30:24Z" pubdate="pubdate">13/09/2013</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>note</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=templates%2Fnote" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">templates</a>/ \n\n</span>\n<span class="title">\nnote\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=templates%2Fnote" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Use this template to insert a note into a page. The note will be styled to\nfloat to the right of other text on the page. This template has one\nparameter:</p>\n\n<ul>\n<li>`text` - the text to display in the note\n</ul>\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2013-09-13T09:30:24Z">13/09/2013</time>\n<!-- Created <time datetime="2013-09-13T09:30:24Z" pubdate="pubdate">13/09/2013</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>note</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fnote" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">templates</a>/
+
+ </span>
+ <span class="title">
+ note
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fnote" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Use this template to insert a note into a page. The note will be styled to
+ float to the right of other text on the page. This template has one
+ parameter:</p>
+
+ <ul>
+ <li>`text` - the text to display in the note
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2013-09-13T09:30:24Z">13/09/2013</time>
+ <!-- Created <time datetime="2013-09-13T09:30:24Z" pubdate="pubdate">13/09/2013</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>templates/popup</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>popup</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fpopup" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">templates</a>/
+
+ </span>
+ <span class="title">
+ popup
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fpopup" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Use this template to create a popup window that is displayed when the mouse
+ is over part of the page. This template has two parameters:</p>
+
+ <ul>
+ <li>`mouseover` - This is the text or other content that triggers the
+ popup.
+ <li>`popup` - This should be the content of the popup window. It can be
+ anything, even images or a whole little wiki page, but should not be too
+ large for good usability.
+ </ul>
+
+
+ <p>Note that browsers that do not support the CSS will display the popup
+ inline in the page, inside square brackets.</p>
+
+ <p>\[[templatebody &lt;
+ <span class="paren">[</span><span class="balloon"></span><span class="paren">]</span>
+ </span>
+ ENDBODY]]</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2013-09-13T09:30:24Z">13/09/2013</time>
+ <!-- Created <time datetime="2013-09-13T09:30:24Z" pubdate="pubdate">13/09/2013</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>popup</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=templates%2Fpopup" />\n\n\n\n\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">templates</a>/ \n\n</span>\n<span class="title">\npopup\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=templates%2Fpopup" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Use this template to create a popup window that is displayed when the mouse\nis over part of the page. This template has two parameters:</p>\n\n<ul>\n<li>`mouseover` - This is the text or other content that triggers the\npopup.\n<li>`popup` - This should be the content of the popup window. It can be\nanything, even images or a whole little wiki page, but should not be too\nlarge for good usability.\n</ul>\n\n\n<p>Note that browsers that do not support the CSS will display the popup\ninline in the page, inside square brackets.</p>\n\n<p>\[[templatebody <\n<span class="paren">[</span><span class="balloon"></span><span class="paren">]</span>\n</span>\nENDBODY]]</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2013-09-13T09:30:24Z">13/09/2013</time>\n<!-- Created <time datetime="2013-09-13T09:30:24Z" pubdate="pubdate">13/09/2013</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>popup</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fpopup" />
+
+
+
+
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">templates</a>/
+
+ </span>
+ <span class="title">
+ popup
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=templates%2Fpopup" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Use this template to create a popup window that is displayed when the mouse
+ is over part of the page. This template has two parameters:</p>
+
+ <ul>
+ <li>`mouseover` - This is the text or other content that triggers the
+ popup.
+ <li>`popup` - This should be the content of the popup window. It can be
+ anything, even images or a whole little wiki page, but should not be too
+ large for good usability.
+ </ul>
+
+
+ <p>Note that browsers that do not support the CSS will display the popup
+ inline in the page, inside square brackets.</p>
+
+ <p>\[[templatebody &lt;
+ <span class="paren">[</span><span class="balloon"></span><span class="paren">]</span>
+ </span>
+ ENDBODY]]</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2013-09-13T09:30:24Z">13/09/2013</time>
+ <!-- Created <time datetime="2013-09-13T09:30:24Z" pubdate="pubdate">13/09/2013</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/directive</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>directive</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fdirective" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ directive
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fdirective" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Directives are similar to a <a href="../wikilink/">WikiLink</a> in form, except they
+ begin with <code>!</code> and may contain parameters. The general form is:</p>
+
+ <pre><code>\[[!directive param="value" param="value"]]
+ </code></pre>
+
+ <p>This gets expanded before the rest of the page is processed, and can be used
+ to transform the page in various ways.</p>
+
+ <p>The quotes around values can be omitted if the value is a simple word.
+ Also, some directives may use parameters without values, for example:</p>
+
+ <pre><code>\[[!tag foo]]
+ </code></pre>
+
+ <p>A directive does not need to all be on one line, it can be
+ wrapped to multiple lines if you like:</p>
+
+ <pre><code>\[[!directive foo="baldersnatch"
+ bar="supercalifragilisticexpialidocious" baz=11]]
+ </code></pre>
+
+ <p>Also, multiple lines of <em>quoted</em> text can be used for a value.
+ To allow quote marks inside the quoted text, delimit the block
+ of text with triple-double-quotes or triple-single-quotes:</p>
+
+ <pre><code>\[[!directive text="""
+ 1. "foo"
+ 2. "bar"
+ 3. "baz"
+ """ othertext='''
+ 1. 'quux'
+ 2. "foo"
+ ''']]
+ </code></pre>
+
+ <p>If you want to put text with triple quotes into a parameter value, you can
+ use perl-style here-doc syntax, even nesting it like this:</p>
+
+ <pre><code>\[[!directive text=&lt;&lt;OUTER
+ \[[!otherdirective &lt;&lt;INNER
+ inner text
+ INNER]]
+ outer text
+ OUTER]]
+ </code></pre>
+
+ <p>ikiwiki also has an older syntax for directives, which requires a space in
+ directives to distinguish them from <a href="../wikilink/">wikilinks</a>. This
+ syntax has several disadvantages: it requires a space after directives with
+ no parameters (such as <code>\[[pagecount ]]</code>), and it prohibits spaces in
+ <a href="../wikilink/">wikilinks</a>. ikiwiki now provides the <code>!</code>-prefixed
+ syntax shown above as default. However, ikiwiki still supports wikis using
+ the older syntax, if the <code>prefix_directives</code> option is disabled.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../formatting/">formatting</a>
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../markdown/">markdown</a>
+
+ <a href="../pagespec/sorting/">pagespec/sorting</a>
+
+ <a href="../../shortcuts/">shortcuts</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>directive</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fdirective" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\ndirective\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fdirective" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Directives are similar to a <a href="../wikilink/">WikiLink</a> in form, except they\nbegin with <code>!</code> and may contain parameters. The general form is:</p>\n\n<pre><code>\[[!directive param="value" param="value"]]\n</code></pre>\n\n<p>This gets expanded before the rest of the page is processed, and can be used\nto transform the page in various ways.</p>\n\n<p>The quotes around values can be omitted if the value is a simple word.\nAlso, some directives may use parameters without values, for example:</p>\n\n<pre><code>\[[!tag foo]]\n</code></pre>\n\n<p>A directive does not need to all be on one line, it can be\nwrapped to multiple lines if you like:</p>\n\n<pre><code>\[[!directive foo="baldersnatch"\nbar="supercalifragilisticexpialidocious" baz=11]]\n</code></pre>\n\n<p>Also, multiple lines of <em>quoted</em> text can be used for a value.\nTo allow quote marks inside the quoted text, delimit the block\nof text with triple-double-quotes or triple-single-quotes:</p>\n\n<pre><code>\[[!directive text="""\n1. "foo"\n2. "bar"\n3. "baz"\n""" othertext=\'\'\'\n1. \'quux\'\n2. "foo"\n\'\'\']]\n</code></pre>\n\n<p>If you want to put text with triple quotes into a parameter value, you can\nuse perl-style here-doc syntax, even nesting it like this:</p>\n\n<pre><code>\[[!directive text=<<OUTER\n\[[!otherdirective <<INNER\ninner text\nINNER]]\nouter text\nOUTER]]\n</code></pre>\n\n<p>ikiwiki also has an older syntax for directives, which requires a space in\ndirectives to distinguish them from <a href="../wikilink/">wikilinks</a>. This\nsyntax has several disadvantages: it requires a space after directives with\nno parameters (such as <code>\[[pagecount ]]</code>), and it prohibits spaces in\n<a href="../wikilink/">wikilinks</a>. ikiwiki now provides the <code>!</code>-prefixed\nsyntax shown above as default. However, ikiwiki still supports wikis using\nthe older syntax, if the <code>prefix_directives</code> option is disabled.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../formatting/">formatting</a>\n\n<a href="../">ikiwiki</a>\n\n<a href="../markdown/">markdown</a>\n\n<a href="../pagespec/sorting/">pagespec/sorting</a>\n\n<a href="../../shortcuts/">shortcuts</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>directive</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fdirective" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ directive
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fdirective" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Directives are similar to a <a href="../wikilink/">WikiLink</a> in form, except they
+ begin with <code>!</code> and may contain parameters. The general form is:</p>
+
+ <pre><code>\[[!directive param="value" param="value"]]
+ </code></pre>
+
+ <p>This gets expanded before the rest of the page is processed, and can be used
+ to transform the page in various ways.</p>
+
+ <p>The quotes around values can be omitted if the value is a simple word.
+ Also, some directives may use parameters without values, for example:</p>
+
+ <pre><code>\[[!tag foo]]
+ </code></pre>
+
+ <p>A directive does not need to all be on one line, it can be
+ wrapped to multiple lines if you like:</p>
+
+ <pre><code>\[[!directive foo="baldersnatch"
+ bar="supercalifragilisticexpialidocious" baz=11]]
+ </code></pre>
+
+ <p>Also, multiple lines of <em>quoted</em> text can be used for a value.
+ To allow quote marks inside the quoted text, delimit the block
+ of text with triple-double-quotes or triple-single-quotes:</p>
+
+ <pre><code>\[[!directive text="""
+ 1. "foo"
+ 2. "bar"
+ 3. "baz"
+ """ othertext='''
+ 1. 'quux'
+ 2. "foo"
+ ''']]
+ </code></pre>
+
+ <p>If you want to put text with triple quotes into a parameter value, you can
+ use perl-style here-doc syntax, even nesting it like this:</p>
+
+ <pre><code>\[[!directive text=&lt;&lt;OUTER
+ \[[!otherdirective &lt;&lt;INNER
+ inner text
+ INNER]]
+ outer text
+ OUTER]]
+ </code></pre>
+
+ <p>ikiwiki also has an older syntax for directives, which requires a space in
+ directives to distinguish them from <a href="../wikilink/">wikilinks</a>. This
+ syntax has several disadvantages: it requires a space after directives with
+ no parameters (such as <code>\[[pagecount ]]</code>), and it prohibits spaces in
+ <a href="../wikilink/">wikilinks</a>. ikiwiki now provides the <code>!</code>-prefixed
+ syntax shown above as default. However, ikiwiki still supports wikis using
+ the older syntax, if the <code>prefix_directives</code> option is disabled.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../formatting/">formatting</a>
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../markdown/">markdown</a>
+
+ <a href="../pagespec/sorting/">pagespec/sorting</a>
+
+ <a href="../../shortcuts/">shortcuts</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/pagespec</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>pagespec</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ pagespec
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>To select a set of pages, such as pages that are locked, pages
+ whose commit emails you want subscribe to, or pages to combine into a
+ blog, the wiki uses a PageSpec. This is an expression that matches
+ a set of pages.</p>
+
+ <p>The simplest PageSpec is a simple list of pages. For example, this matches
+ any of the three listed pages:</p>
+
+ <pre><code>foo or bar or baz
+ </code></pre>
+
+ <p>More often you will want to match any pages that have a particular thing in
+ their name. You can do this using a glob pattern. "<code>*</code>" stands for any part
+ of a page name, and "<code>?</code>" for any single letter of a page name. So this
+ matches all pages about music, and any <a href="../subpage/">SubPage</a>s of the SandBox, but does
+ not match the SandBox itself:</p>
+
+ <pre><code>*music* or SandBox/*
+ </code></pre>
+
+ <p>You can also prefix an item with "<code>!</code>" to skip pages that match it. So to
+ match all pages except for Discussion pages and the SandBox:</p>
+
+ <pre><code>* and !SandBox and !*/Discussion
+ </code></pre>
+
+ <p>Some more elaborate limits can be added to what matches using these functions:</p>
+
+ <ul>
+ <li>"<code>glob(someglob)</code>" - matches pages and other files that match the given glob.
+ Just writing the glob by itself is actually a shorthand for this function.</li>
+ <li>"<code>page(glob)</code>" - like <code>glob()</code>, but only matches pages, not other files</li>
+ <li>"<code>link(page)</code>" - matches only pages that link to a given page (or glob)</li>
+ <li>"<code>tagged(tag)</code>" - matches pages that are tagged or link to the given tag (or
+ tags matched by a glob)</li>
+ <li>"<code>backlink(page)</code>" - matches only pages that a given page links to</li>
+ <li>"<code>creation_month(month)</code>" - matches only files created on the given month
+ number</li>
+ <li>"<code>creation_day(mday)</code>" - or day of the month</li>
+ <li>"<code>creation_year(year)</code>" - or year</li>
+ <li>"<code>created_after(page)</code>" - matches only files created after the given page
+ was created</li>
+ <li>"<code>created_before(page)</code>" - matches only files created before the given page
+ was created</li>
+ <li>"<code>internal(glob)</code>" - like <code>glob()</code>, but matches even internal-use
+ pages that globs do not usually match.</li>
+ <li>"<code>title(glob)</code>", "<code>author(glob)</code>", "<code>authorurl(glob)</code>",
+ "<code>license(glob)</code>", "<code>copyright(glob)</code>", "<code>guid(glob)</code>"
+
+ <ul>
+ <li>match pages that have the given metadata, matching the specified glob.</li>
+ </ul>
+ </li>
+ <li>"<code>user(username)</code>" - tests whether a modification is being made by a
+ user with the specified username. If openid is enabled, an openid can also
+ be put here. Glob patterns can be used in the username. For example,
+ to match all openid users, use <code>user(*://*)</code></li>
+ <li>"<code>admin()</code>" - tests whether a modification is being made by one of the
+ wiki admins.</li>
+ <li>"<code>ip(address)</code>" - tests whether a modification is being made from the
+ specified IP address. Glob patterns can be used in the address. For
+ example, <code>ip(127.0.0.*)</code></li>
+ <li>"<code>comment(glob)</code>" - matches comments to a page matching the glob.</li>
+ <li>"<code>comment_pending(glob)</code>" - matches unmoderated, pending comments.</li>
+ <li>"<code>postcomment(glob)</code>" - matches only when comments are being
+ posted to a page matching the specified glob</li>
+ </ul>
+
+
+ <p>For example, to match all pages in a blog that link to the page about music
+ and were written in 2005:</p>
+
+ <pre><code>blog/* and link(music) and creation_year(2005)
+ </code></pre>
+
+ <p>Note the use of "and" in the above example, that means that only pages that
+ match each of the three expressions match the whole. Use "and" when you
+ want to combine expression like that; "or" when it's enough for a page to
+ match one expression. Note that it doesn't make sense to say "index and
+ SandBox", since no page can match both expressions.</p>
+
+ <p>More complex expressions can also be created, by using parentheses for
+ grouping. For example, to match pages in a blog that are tagged with either
+ of two tags, use:</p>
+
+ <pre><code>blog/* and (tagged(foo) or tagged(bar))
+ </code></pre>
+
+ <p>Note that page names in PageSpecs are matched against the absolute
+ filenames of the pages in the wiki, so a pagespec "foo" used on page
+ "a/b" will not match a page named "a/foo" or "a/b/foo". To match
+ relative to the directory of the page containing the pagespec, you can
+ use "./". For example, "./foo" on page "a/b" matches page "a/foo".</p>
+
+ <p>To indicate the name of the page the PageSpec is used in, you can
+ use a single dot. For example, <code>link(.)</code> matches all the pages
+ linking to the page containing the PageSpec.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+ <a href="./attachment/">pagespec/attachment</a>
+
+ <a href="./po/">pagespec/po</a>
+
+ <a href="./sorting/">pagespec/sorting</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>pagespec</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\npagespec\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>To select a set of pages, such as pages that are locked, pages\nwhose commit emails you want subscribe to, or pages to combine into a\nblog, the wiki uses a PageSpec. This is an expression that matches\na set of pages.</p>\n\n<p>The simplest PageSpec is a simple list of pages. For example, this matches\nany of the three listed pages:</p>\n\n<pre><code>foo or bar or baz\n</code></pre>\n\n<p>More often you will want to match any pages that have a particular thing in\ntheir name. You can do this using a glob pattern. "<code>*</code>" stands for any part\nof a page name, and "<code>?</code>" for any single letter of a page name. So this\nmatches all pages about music, and any <a href="../subpage/">SubPage</a>s of the SandBox, but does\nnot match the SandBox itself:</p>\n\n<pre><code>*music* or SandBox/*\n</code></pre>\n\n<p>You can also prefix an item with "<code>!</code>" to skip pages that match it. So to\nmatch all pages except for Discussion pages and the SandBox:</p>\n\n<pre><code>* and !SandBox and !*/Discussion\n</code></pre>\n\n<p>Some more elaborate limits can be added to what matches using these functions:</p>\n\n<ul>\n<li>"<code>glob(someglob)</code>" - matches pages and other files that match the given glob.\nJust writing the glob by itself is actually a shorthand for this function.</li>\n<li>"<code>page(glob)</code>" - like <code>glob()</code>, but only matches pages, not other files</li>\n<li>"<code>link(page)</code>" - matches only pages that link to a given page (or glob)</li>\n<li>"<code>tagged(tag)</code>" - matches pages that are tagged or link to the given tag (or\ntags matched by a glob)</li>\n<li>"<code>backlink(page)</code>" - matches only pages that a given page links to</li>\n<li>"<code>creation_month(month)</code>" - matches only files created on the given month\nnumber</li>\n<li>"<code>creation_day(mday)</code>" - or day of the month</li>\n<li>"<code>creation_year(year)</code>" - or year</li>\n<li>"<code>created_after(page)</code>" - matches only files created after the given page\nwas created</li>\n<li>"<code>created_before(page)</code>" - matches only files created before the given page\nwas created</li>\n<li>"<code>internal(glob)</code>" - like <code>glob()</code>, but matches even internal-use\npages that globs do not usually match.</li>\n<li>"<code>title(glob)</code>", "<code>author(glob)</code>", "<code>authorurl(glob)</code>",\n"<code>license(glob)</code>", "<code>copyright(glob)</code>", "<code>guid(glob)</code>"\n\n<ul>\n<li>match pages that have the given metadata, matching the specified glob.</li>\n</ul>\n</li>\n<li>"<code>user(username)</code>" - tests whether a modification is being made by a\nuser with the specified username. If openid is enabled, an openid can also\nbe put here. Glob patterns can be used in the username. For example,\nto match all openid users, use <code>user(*://*)</code></li>\n<li>"<code>admin()</code>" - tests whether a modification is being made by one of the\nwiki admins.</li>\n<li>"<code>ip(address)</code>" - tests whether a modification is being made from the\nspecified IP address. Glob patterns can be used in the address. For\nexample, <code>ip(127.0.0.*)</code></li>\n<li>"<code>comment(glob)</code>" - matches comments to a page matching the glob.</li>\n<li>"<code>comment_pending(glob)</code>" - matches unmoderated, pending comments.</li>\n<li>"<code>postcomment(glob)</code>" - matches only when comments are being\nposted to a page matching the specified glob</li>\n</ul>\n\n\n<p>For example, to match all pages in a blog that link to the page about music\nand were written in 2005:</p>\n\n<pre><code>blog/* and link(music) and creation_year(2005)\n</code></pre>\n\n<p>Note the use of "and" in the above example, that means that only pages that\nmatch each of the three expressions match the whole. Use "and" when you\nwant to combine expression like that; "or" when it\'s enough for a page to\nmatch one expression. Note that it doesn\'t make sense to say "index and\nSandBox", since no page can match both expressions.</p>\n\n<p>More complex expressions can also be created, by using parentheses for\ngrouping. For example, to match pages in a blog that are tagged with either\nof two tags, use:</p>\n\n<pre><code>blog/* and (tagged(foo) or tagged(bar))\n</code></pre>\n\n<p>Note that page names in PageSpecs are matched against the absolute\nfilenames of the pages in the wiki, so a pagespec "foo" used on page\n"a/b" will not match a page named "a/foo" or "a/b/foo". To match\nrelative to the directory of the page containing the pagespec, you can\nuse "./". For example, "./foo" on page "a/b" matches page "a/foo".</p>\n\n<p>To indicate the name of the page the PageSpec is used in, you can\nuse a single dot. For example, <code>link(.)</code> matches all the pages\nlinking to the page containing the PageSpec.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">ikiwiki</a>\n\n<a href="./attachment/">pagespec/attachment</a>\n\n<a href="./po/">pagespec/po</a>\n\n<a href="./sorting/">pagespec/sorting</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>pagespec</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ pagespec
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>To select a set of pages, such as pages that are locked, pages
+ whose commit emails you want subscribe to, or pages to combine into a
+ blog, the wiki uses a PageSpec. This is an expression that matches
+ a set of pages.</p>
+
+ <p>The simplest PageSpec is a simple list of pages. For example, this matches
+ any of the three listed pages:</p>
+
+ <pre><code>foo or bar or baz
+ </code></pre>
+
+ <p>More often you will want to match any pages that have a particular thing in
+ their name. You can do this using a glob pattern. "<code>*</code>" stands for any part
+ of a page name, and "<code>?</code>" for any single letter of a page name. So this
+ matches all pages about music, and any <a href="../subpage/">SubPage</a>s of the SandBox, but does
+ not match the SandBox itself:</p>
+
+ <pre><code>*music* or SandBox/*
+ </code></pre>
+
+ <p>You can also prefix an item with "<code>!</code>" to skip pages that match it. So to
+ match all pages except for Discussion pages and the SandBox:</p>
+
+ <pre><code>* and !SandBox and !*/Discussion
+ </code></pre>
+
+ <p>Some more elaborate limits can be added to what matches using these functions:</p>
+
+ <ul>
+ <li>"<code>glob(someglob)</code>" - matches pages and other files that match the given glob.
+ Just writing the glob by itself is actually a shorthand for this function.</li>
+ <li>"<code>page(glob)</code>" - like <code>glob()</code>, but only matches pages, not other files</li>
+ <li>"<code>link(page)</code>" - matches only pages that link to a given page (or glob)</li>
+ <li>"<code>tagged(tag)</code>" - matches pages that are tagged or link to the given tag (or
+ tags matched by a glob)</li>
+ <li>"<code>backlink(page)</code>" - matches only pages that a given page links to</li>
+ <li>"<code>creation_month(month)</code>" - matches only files created on the given month
+ number</li>
+ <li>"<code>creation_day(mday)</code>" - or day of the month</li>
+ <li>"<code>creation_year(year)</code>" - or year</li>
+ <li>"<code>created_after(page)</code>" - matches only files created after the given page
+ was created</li>
+ <li>"<code>created_before(page)</code>" - matches only files created before the given page
+ was created</li>
+ <li>"<code>internal(glob)</code>" - like <code>glob()</code>, but matches even internal-use
+ pages that globs do not usually match.</li>
+ <li>"<code>title(glob)</code>", "<code>author(glob)</code>", "<code>authorurl(glob)</code>",
+ "<code>license(glob)</code>", "<code>copyright(glob)</code>", "<code>guid(glob)</code>"
+
+ <ul>
+ <li>match pages that have the given metadata, matching the specified glob.</li>
+ </ul>
+ </li>
+ <li>"<code>user(username)</code>" - tests whether a modification is being made by a
+ user with the specified username. If openid is enabled, an openid can also
+ be put here. Glob patterns can be used in the username. For example,
+ to match all openid users, use <code>user(*://*)</code></li>
+ <li>"<code>admin()</code>" - tests whether a modification is being made by one of the
+ wiki admins.</li>
+ <li>"<code>ip(address)</code>" - tests whether a modification is being made from the
+ specified IP address. Glob patterns can be used in the address. For
+ example, <code>ip(127.0.0.*)</code></li>
+ <li>"<code>comment(glob)</code>" - matches comments to a page matching the glob.</li>
+ <li>"<code>comment_pending(glob)</code>" - matches unmoderated, pending comments.</li>
+ <li>"<code>postcomment(glob)</code>" - matches only when comments are being
+ posted to a page matching the specified glob</li>
+ </ul>
+
+
+ <p>For example, to match all pages in a blog that link to the page about music
+ and were written in 2005:</p>
+
+ <pre><code>blog/* and link(music) and creation_year(2005)
+ </code></pre>
+
+ <p>Note the use of "and" in the above example, that means that only pages that
+ match each of the three expressions match the whole. Use "and" when you
+ want to combine expression like that; "or" when it's enough for a page to
+ match one expression. Note that it doesn't make sense to say "index and
+ SandBox", since no page can match both expressions.</p>
+
+ <p>More complex expressions can also be created, by using parentheses for
+ grouping. For example, to match pages in a blog that are tagged with either
+ of two tags, use:</p>
+
+ <pre><code>blog/* and (tagged(foo) or tagged(bar))
+ </code></pre>
+
+ <p>Note that page names in PageSpecs are matched against the absolute
+ filenames of the pages in the wiki, so a pagespec "foo" used on page
+ "a/b" will not match a page named "a/foo" or "a/b/foo". To match
+ relative to the directory of the page containing the pagespec, you can
+ use "./". For example, "./foo" on page "a/b" matches page "a/foo".</p>
+
+ <p>To indicate the name of the page the PageSpec is used in, you can
+ use a single dot. For example, <code>link(.)</code> matches all the pages
+ linking to the page containing the PageSpec.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+ <a href="./attachment/">pagespec/attachment</a>
+
+ <a href="./po/">pagespec/po</a>
+
+ <a href="./sorting/">pagespec/sorting</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/openid</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>OpenID</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fopenid" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ OpenID
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fopenid" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has OpenID <strong>enabled</strong>.</p>
+
+ <p><a href="http://openid.net">OpenID</a> is a decentralized authentication mechanism
+ that allows you to have one login that you can use on a growing number of
+ websites.</p>
+
+ <p>If you have an account with some of the larger web service providers,
+ you might already have an OpenID.
+ <a href="http://openiddirectory.com/openid-providers-c-1.html">Directory of OpenID providers</a></p>
+
+ <p>To sign in to this wiki using OpenID, just enter it in the OpenID field in the
+ signin form. You do not need to give this wiki a password or go through any
+ registration process when using OpenID.</p>
+
+ <hr />
+
+ <p>It's also possible to make a page in the wiki usable as an OpenID url,
+ by delegating it to an openid server. Here's an example of how to do that:</p>
+
+ <pre><code>\[[!meta openid="http://yourid.myopenid.com/"
+ server="http://www.myopenid.com/server"]]
+ </code></pre>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>OpenID</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fopenid" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\nOpenID\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fopenid" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This wiki has OpenID <strong>enabled</strong>.</p>\n\n<p><a href="http://openid.net">OpenID</a> is a decentralized authentication mechanism\nthat allows you to have one login that you can use on a growing number of\nwebsites.</p>\n\n<p>If you have an account with some of the larger web service providers,\nyou might already have an OpenID.\n<a href="http://openiddirectory.com/openid-providers-c-1.html">Directory of OpenID providers</a></p>\n\n<p>To sign in to this wiki using OpenID, just enter it in the OpenID field in the\nsignin form. You do not need to give this wiki a password or go through any\nregistration process when using OpenID.</p>\n\n<hr />\n\n<p>It\'s also possible to make a page in the wiki usable as an OpenID url,\nby delegating it to an openid server. Here\'s an example of how to do that:</p>\n\n<pre><code>\[[!meta openid="http://yourid.myopenid.com/"\n server="http://www.myopenid.com/server"]]\n</code></pre>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">ikiwiki</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>OpenID</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fopenid" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ OpenID
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fopenid" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has OpenID <strong>enabled</strong>.</p>
+
+ <p><a href="http://openid.net">OpenID</a> is a decentralized authentication mechanism
+ that allows you to have one login that you can use on a growing number of
+ websites.</p>
+
+ <p>If you have an account with some of the larger web service providers,
+ you might already have an OpenID.
+ <a href="http://openiddirectory.com/openid-providers-c-1.html">Directory of OpenID providers</a></p>
+
+ <p>To sign in to this wiki using OpenID, just enter it in the OpenID field in the
+ signin form. You do not need to give this wiki a password or go through any
+ registration process when using OpenID.</p>
+
+ <hr />
+
+ <p>It's also possible to make a page in the wiki usable as an OpenID url,
+ by delegating it to an openid server. Here's an example of how to do that:</p>
+
+ <pre><code>\[[!meta openid="http://yourid.myopenid.com/"
+ server="http://www.myopenid.com/server"]]
+ </code></pre>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/subpage</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>subpage</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ subpage
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>ikiwiki supports placing pages in a directory hierarchy. For example,
+ this page, <span class="selflink">SubPage</span> has some related pages placed under it, like
+ <a href="./linkingrules/">LinkingRules</a>. This is a useful way to add some order to your
+ wiki rather than just having a great big directory full of pages.</p>
+
+ <p>To add a SubPage, just make a subdirectory and put pages in it. For
+ example, this page is subpage.mdwn in this wiki's source, and there is also
+ a subpage subdirectory, which contains subpage/linkingrules.mdwn. Subpages
+ can be nested as deeply as you'd like.</p>
+
+ <p>Linking to and from a SubPage is explained in <a href="./linkingrules/">LinkingRules</a>.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../pagespec/">pagespec</a>
+
+ <a href="./linkingrules/">subpage/linkingrules</a>
+
+ <a href="../wikilink/">wikilink</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>subpage</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fsubpage" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\nsubpage\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fsubpage" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>ikiwiki supports placing pages in a directory hierarchy. For example,\nthis page, <span class="selflink">SubPage</span> has some related pages placed under it, like\n<a href="./linkingrules/">LinkingRules</a>. This is a useful way to add some order to your\nwiki rather than just having a great big directory full of pages.</p>\n\n<p>To add a SubPage, just make a subdirectory and put pages in it. For\nexample, this page is subpage.mdwn in this wiki\'s source, and there is also\na subpage subdirectory, which contains subpage/linkingrules.mdwn. Subpages\ncan be nested as deeply as you\'d like.</p>\n\n<p>Linking to and from a SubPage is explained in <a href="./linkingrules/">LinkingRules</a>.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">ikiwiki</a>\n\n<a href="../pagespec/">pagespec</a>\n\n<a href="./linkingrules/">subpage/linkingrules</a>\n\n<a href="../wikilink/">wikilink</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>subpage</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ subpage
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>ikiwiki supports placing pages in a directory hierarchy. For example,
+ this page, <span class="selflink">SubPage</span> has some related pages placed under it, like
+ <a href="./linkingrules/">LinkingRules</a>. This is a useful way to add some order to your
+ wiki rather than just having a great big directory full of pages.</p>
+
+ <p>To add a SubPage, just make a subdirectory and put pages in it. For
+ example, this page is subpage.mdwn in this wiki's source, and there is also
+ a subpage subdirectory, which contains subpage/linkingrules.mdwn. Subpages
+ can be nested as deeply as you'd like.</p>
+
+ <p>Linking to and from a SubPage is explained in <a href="./linkingrules/">LinkingRules</a>.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../pagespec/">pagespec</a>
+
+ <a href="./linkingrules/">subpage/linkingrules</a>
+
+ <a href="../wikilink/">wikilink</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/markdown</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>markdown</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fmarkdown" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ markdown
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fmarkdown" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p><a href="http://daringfireball.net/projects/markdown/">Markdown</a>
+ is a minimal markup language that resembles plain text as used in
+ email messages. It is the markup language used by this wiki by default.</p>
+
+ <p>For documentation about the markdown syntax, see <a href="../formatting/">formatting</a> and
+ <a href="http://daringfireball.net/projects/markdown/syntax">Markdown: syntax</a>.</p>
+
+ <p>Note that <a href="../wikilink/">WikiLinks</a> and <a href="../directive/">directives</a> are not part
+ of the markdown syntax, and are the only bit of markup that this wiki
+ handles internally.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../formatting/">formatting</a>
+
+ <a href="../">ikiwiki</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>markdown</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fmarkdown" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\nmarkdown\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fmarkdown" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p><a href="http://daringfireball.net/projects/markdown/">Markdown</a>\nis a minimal markup language that resembles plain text as used in\nemail messages. It is the markup language used by this wiki by default.</p>\n\n<p>For documentation about the markdown syntax, see <a href="../formatting/">formatting</a> and\n<a href="http://daringfireball.net/projects/markdown/syntax">Markdown: syntax</a>.</p>\n\n<p>Note that <a href="../wikilink/">WikiLinks</a> and <a href="../directive/">directives</a> are not part\nof the markdown syntax, and are the only bit of markup that this wiki\nhandles internally.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../formatting/">formatting</a>\n\n<a href="../">ikiwiki</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>markdown</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fmarkdown" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ markdown
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fmarkdown" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p><a href="http://daringfireball.net/projects/markdown/">Markdown</a>
+ is a minimal markup language that resembles plain text as used in
+ email messages. It is the markup language used by this wiki by default.</p>
+
+ <p>For documentation about the markdown syntax, see <a href="../formatting/">formatting</a> and
+ <a href="http://daringfireball.net/projects/markdown/syntax">Markdown: syntax</a>.</p>
+
+ <p>Note that <a href="../wikilink/">WikiLinks</a> and <a href="../directive/">directives</a> are not part
+ of the markdown syntax, and are the only bit of markup that this wiki
+ handles internally.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../formatting/">formatting</a>
+
+ <a href="../">ikiwiki</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/wikilink</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>wikilink</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fwikilink" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ wikilink
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fwikilink" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>WikiLinks provide easy linking between pages of the wiki. To create a
+ <span class="selflink">WikiLink</span>, just put the name of the page to link to in double brackets.
+ For example <code>\[[WikiLink]]</code>.</p>
+
+ <p>If you ever need to write something like <code>\[[WikiLink]]</code> without creating a
+ wikilink, just prefix it with a <code>\</code>, like <code>\\[[WikiLink]]</code>.</p>
+
+ <p>There are some special <a href="../subpage/linkingrules/">LinkingRules</a> that come into play when
+ linking between <a href="../subpage/">SubPages</a>.</p>
+
+ <p>WikiLinks are matched with page names in a case-insensitive manner, so you
+ don't need to worry about getting the case the same, and can capitalise
+ links at the start of a sentence, and so on.</p>
+
+ <p>It's also possible to write a WikiLink that uses something other than the page
+ name as the link text. For example <code>\[[foo_bar|SandBox]]</code> links to the SandBox
+ page, but the link will appear like this: <a href="../../sandbox/">foo bar</a>.</p>
+
+ <p>To link to an anchor inside a page, you can use something like
+ <code>\[[WikiLink#foo]]</code> .</p>
+
+ <p>If the file linked to by a WikiLink looks like an image, it will
+ be displayed inline on the page.</p>
+
+ <hr />
+
+ <p>You can also put an url in a WikiLink, to link to an external page.
+ Email addresses can also be used to generate a mailto link.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../directive/">directive</a>
+
+ <a href="../formatting/">formatting</a>
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../markdown/">markdown</a>
+
+ <a href="../../sandbox/">sandbox</a>
+
+ <a href="../subpage/linkingrules/">subpage/linkingrules</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>wikilink</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fwikilink" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\nwikilink\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fwikilink" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>WikiLinks provide easy linking between pages of the wiki. To create a\n<span class="selflink">WikiLink</span>, just put the name of the page to link to in double brackets.\nFor example <code>\[[WikiLink]]</code>.</p>\n\n<p>If you ever need to write something like <code>\[[WikiLink]]</code> without creating a\nwikilink, just prefix it with a <code>\\</code>, like <code>\\\[[WikiLink]]</code>.</p>\n\n<p>There are some special <a href="../subpage/linkingrules/">LinkingRules</a> that come into play when\nlinking between <a href="../subpage/">SubPages</a>.</p>\n\n<p>WikiLinks are matched with page names in a case-insensitive manner, so you\ndon\'t need to worry about getting the case the same, and can capitalise\nlinks at the start of a sentence, and so on.</p>\n\n<p>It\'s also possible to write a WikiLink that uses something other than the page\nname as the link text. For example <code>\[[foo_bar|SandBox]]</code> links to the SandBox\npage, but the link will appear like this: <a href="../../sandbox/">foo bar</a>.</p>\n\n<p>To link to an anchor inside a page, you can use something like\n<code>\[[WikiLink#foo]]</code> .</p>\n\n<p>If the file linked to by a WikiLink looks like an image, it will\nbe displayed inline on the page.</p>\n\n<hr />\n\n<p>You can also put an url in a WikiLink, to link to an external page.\nEmail addresses can also be used to generate a mailto link.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../directive/">directive</a>\n\n<a href="../formatting/">formatting</a>\n\n<a href="../">ikiwiki</a>\n\n<a href="../markdown/">markdown</a>\n\n<a href="../../sandbox/">sandbox</a>\n\n<a href="../subpage/linkingrules/">subpage/linkingrules</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>wikilink</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fwikilink" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ wikilink
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fwikilink" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>WikiLinks provide easy linking between pages of the wiki. To create a
+ <span class="selflink">WikiLink</span>, just put the name of the page to link to in double brackets.
+ For example <code>\[[WikiLink]]</code>.</p>
+
+ <p>If you ever need to write something like <code>\[[WikiLink]]</code> without creating a
+ wikilink, just prefix it with a <code>\</code>, like <code>\\[[WikiLink]]</code>.</p>
+
+ <p>There are some special <a href="../subpage/linkingrules/">LinkingRules</a> that come into play when
+ linking between <a href="../subpage/">SubPages</a>.</p>
+
+ <p>WikiLinks are matched with page names in a case-insensitive manner, so you
+ don't need to worry about getting the case the same, and can capitalise
+ links at the start of a sentence, and so on.</p>
+
+ <p>It's also possible to write a WikiLink that uses something other than the page
+ name as the link text. For example <code>\[[foo_bar|SandBox]]</code> links to the SandBox
+ page, but the link will appear like this: <a href="../../sandbox/">foo bar</a>.</p>
+
+ <p>To link to an anchor inside a page, you can use something like
+ <code>\[[WikiLink#foo]]</code> .</p>
+
+ <p>If the file linked to by a WikiLink looks like an image, it will
+ be displayed inline on the page.</p>
+
+ <hr />
+
+ <p>You can also put an url in a WikiLink, to link to an external page.
+ Email addresses can also be used to generate a mailto link.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../directive/">directive</a>
+
+ <a href="../formatting/">formatting</a>
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../markdown/">markdown</a>
+
+ <a href="../../sandbox/">sandbox</a>
+
+ <a href="../subpage/linkingrules/">subpage/linkingrules</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/formatting</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>Formatting wiki pages</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fformatting" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ Formatting wiki pages
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fformatting" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Text on this wiki is, by default, written in a form very close to how you
+ might write text for an email message. This style of text formatting is
+ called <a href="../markdown/">MarkDown</a>, and it works like this:</p>
+
+ <p>Leave blank lines between paragraphs.</p>
+
+ <p>You can <em>*emphasise*</em> or <strong>**strongly emphasise**</strong> text by placing it
+ in single or double asterisks.</p>
+
+ <p>To create a list, start each line with an asterisk:</p>
+
+ <ul>
+ <li>"* this is my list"</li>
+ <li>"* another item"</li>
+ </ul>
+
+
+ <p>To make a numbered list, start each line with a number (any number will
+ do) followed by a period:</p>
+
+ <ol>
+ <li>"1. first line"</li>
+ <li>"2. second line"</li>
+ <li>"2. third line"</li>
+ </ol>
+
+
+ <p>To create a header, start a line with one or more <code>#</code> characters followed
+ by a space and the header text. The number of <code>#</code> characters controls the
+ size of the header:</p>
+
+ <h1># h1</h1>
+
+ <h2>## h2</h2>
+
+ <h3>### h3</h3>
+
+ <h4>#### h4</h4>
+
+ <h5>##### h5</h5>
+
+ <h6>###### h6</h6>
+
+ <p>To create a horizontal rule, just write three or more dashes or stars on
+ their own line:</p>
+
+ <hr />
+
+ <p>To quote someone, prefix the quote with "&gt;":</p>
+
+ <blockquote><p>To be or not to be,
+ that is the question.</p></blockquote>
+
+ <p>To write a code block, indent each line with a tab or 4 spaces:</p>
+
+ <pre><code>10 PRINT "Hello, world!"
+ 20 GOTO 10
+ </code></pre>
+
+ <p>To link to an url or email address, you can just put the
+ url in angle brackets: &lt;<a href="http://ikiwiki.info">http://ikiwiki.info</a>&gt;, or you can use the
+ form [link text](url)</p>
+
+ <hr />
+
+ <p>In addition to basic html formatting using <a href="../markdown/">MarkDown</a>, this wiki lets
+ you use the following additional features:</p>
+
+ <ul>
+ <li><p>To link to another page on the wiki, place the page's name inside double
+ square brackets. So you would use <code>\[[WikiLink]]</code> to link to <a href="../wikilink/">WikiLink</a>.</p></li>
+ <li><p>Insert various <a href="../directive/">directives</a> onto a page to perform useful
+ actions.
+ For example, you can:</p>
+
+ <ul>
+ <li><p>Change the title of a page:</p>
+
+ <p>\[[!meta title="full page title"]]</p></li>
+ <li><p>Create a blog by inlining a set of pages:</p>
+
+ <p>\[[!inline pages="blog/*"]]</p></li>
+ </ul>
+ </li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../markdown/">markdown</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-10-09T18:31:33Z">09/10/2014</time>
+ <!-- Created <time datetime="2014-10-09T18:31:33Z" pubdate="pubdate">09/10/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>Formatting wiki pages</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fformatting" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\nFormatting wiki pages\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fformatting" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Text on this wiki is, by default, written in a form very close to how you\nmight write text for an email message. This style of text formatting is\ncalled <a href="../markdown/">MarkDown</a>, and it works like this:</p>\n\n<p>Leave blank lines between paragraphs.</p>\n\n<p>You can <em>*emphasise*</em> or <strong>**strongly emphasise**</strong> text by placing it\nin single or double asterisks.</p>\n\n<p>To create a list, start each line with an asterisk:</p>\n\n<ul>\n<li>"* this is my list"</li>\n<li>"* another item"</li>\n</ul>\n\n\n<p>To make a numbered list, start each line with a number (any number will\ndo) followed by a period:</p>\n\n<ol>\n<li>"1. first line"</li>\n<li>"2. second line"</li>\n<li>"2. third line"</li>\n</ol>\n\n\n<p>To create a header, start a line with one or more <code>#</code> characters followed\nby a space and the header text. The number of <code>#</code> characters controls the\nsize of the header:</p>\n\n<h1># h1</h1>\n\n<h2>## h2</h2>\n\n<h3>### h3</h3>\n\n<h4>#### h4</h4>\n\n<h5>##### h5</h5>\n\n<h6>###### h6</h6>\n\n<p>To create a horizontal rule, just write three or more dashes or stars on\ntheir own line:</p>\n\n<hr />\n\n<p>To quote someone, prefix the quote with ">":</p>\n\n<blockquote><p>To be or not to be,\nthat is the question.</p></blockquote>\n\n<p>To write a code block, indent each line with a tab or 4 spaces:</p>\n\n<pre><code>10 PRINT "Hello, world!"\n20 GOTO 10\n</code></pre>\n\n<p>To link to an url or email address, you can just put the\nurl in angle brackets: <<a href="http://ikiwiki.info">http://ikiwiki.info</a>>, or you can use the\nform [link text](url)</p>\n\n<hr />\n\n<p>In addition to basic html formatting using <a href="../markdown/">MarkDown</a>, this wiki lets\nyou use the following additional features:</p>\n\n<ul>\n<li><p>To link to another page on the wiki, place the page\'s name inside double\nsquare brackets. So you would use <code>\[[WikiLink]]</code> to link to <a href="../wikilink/">WikiLink</a>.</p></li>\n<li><p>Insert various <a href="../directive/">directives</a> onto a page to perform useful\nactions.\nFor example, you can:</p>\n\n<ul>\n<li><p>Change the title of a page:</p>\n\n<p>\[[!meta title="full page title"]]</p></li>\n<li><p>Create a blog by inlining a set of pages:</p>\n\n<p>\[[!inline pages="blog/*"]]</p></li>\n</ul>\n</li>\n</ul>\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">ikiwiki</a>\n\n<a href="../markdown/">markdown</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-10-09T18:31:33Z">09/10/2014</time>\n<!-- Created <time datetime="2014-10-09T18:31:33Z" pubdate="pubdate">09/10/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>Formatting wiki pages</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fformatting" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ Formatting wiki pages
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fformatting" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Text on this wiki is, by default, written in a form very close to how you
+ might write text for an email message. This style of text formatting is
+ called <a href="../markdown/">MarkDown</a>, and it works like this:</p>
+
+ <p>Leave blank lines between paragraphs.</p>
+
+ <p>You can <em>*emphasise*</em> or <strong>**strongly emphasise**</strong> text by placing it
+ in single or double asterisks.</p>
+
+ <p>To create a list, start each line with an asterisk:</p>
+
+ <ul>
+ <li>"* this is my list"</li>
+ <li>"* another item"</li>
+ </ul>
+
+
+ <p>To make a numbered list, start each line with a number (any number will
+ do) followed by a period:</p>
+
+ <ol>
+ <li>"1. first line"</li>
+ <li>"2. second line"</li>
+ <li>"2. third line"</li>
+ </ol>
+
+
+ <p>To create a header, start a line with one or more <code>#</code> characters followed
+ by a space and the header text. The number of <code>#</code> characters controls the
+ size of the header:</p>
+
+ <h1># h1</h1>
+
+ <h2>## h2</h2>
+
+ <h3>### h3</h3>
+
+ <h4>#### h4</h4>
+
+ <h5>##### h5</h5>
+
+ <h6>###### h6</h6>
+
+ <p>To create a horizontal rule, just write three or more dashes or stars on
+ their own line:</p>
+
+ <hr />
+
+ <p>To quote someone, prefix the quote with "&gt;":</p>
+
+ <blockquote><p>To be or not to be,
+ that is the question.</p></blockquote>
+
+ <p>To write a code block, indent each line with a tab or 4 spaces:</p>
+
+ <pre><code>10 PRINT "Hello, world!"
+ 20 GOTO 10
+ </code></pre>
+
+ <p>To link to an url or email address, you can just put the
+ url in angle brackets: &lt;<a href="http://ikiwiki.info">http://ikiwiki.info</a>&gt;, or you can use the
+ form [link text](url)</p>
+
+ <hr />
+
+ <p>In addition to basic html formatting using <a href="../markdown/">MarkDown</a>, this wiki lets
+ you use the following additional features:</p>
+
+ <ul>
+ <li><p>To link to another page on the wiki, place the page's name inside double
+ square brackets. So you would use <code>\[[WikiLink]]</code> to link to <a href="../wikilink/">WikiLink</a>.</p></li>
+ <li><p>Insert various <a href="../directive/">directives</a> onto a page to perform useful
+ actions.
+ For example, you can:</p>
+
+ <ul>
+ <li><p>Change the title of a page:</p>
+
+ <p>\[[!meta title="full page title"]]</p></li>
+ <li><p>Create a blog by inlining a set of pages:</p>
+
+ <p>\[[!inline pages="blog/*"]]</p></li>
+ </ul>
+ </li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+ <a href="../markdown/">markdown</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-10-09T18:31:33Z">09/10/2014</time>
+ <!-- Created <time datetime="2014-10-09T18:31:33Z" pubdate="pubdate">09/10/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/searching</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>searching</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsearching" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ searching
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsearching" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has searching <strong>disabled</strong>.</p>
+
+ <p>If searching is enabled, you can enter search terms in the search field,
+ as you'd expect. There are a few special things you can do to construct
+ more powerful searches.</p>
+
+ <ul>
+ <li>To match a phrase, enclose it in double quotes.</li>
+ <li><code>AND</code> can be used to search for documents containing two expressions.</li>
+ <li><code>OR</code> can be used to search for documents containing either one of
+ two expressions.</li>
+ <li>Parentheses can be used to build up complicated search expressions. For
+ example, "(foo AND bar) OR (me AND you)"</li>
+ <li>Prefix a search term with "-" to avoid it from appearing in the results.
+ For example, "-discussion" will omit "discussion".</li>
+ <li>To search for a page with a given title, use "title:foo".</li>
+ <li>To search for pages that contain a "bar" link, use "link:bar".</li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>searching</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fsearching" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../">RPC Bug</a>/ \n\n<a href="../">ikiwiki</a>/ \n\n</span>\n<span class="title">\nsearching\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fsearching" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This wiki has searching <strong>disabled</strong>.</p>\n\n<p>If searching is enabled, you can enter search terms in the search field,\nas you\'d expect. There are a few special things you can do to construct\nmore powerful searches.</p>\n\n<ul>\n<li>To match a phrase, enclose it in double quotes.</li>\n<li><code>AND</code> can be used to search for documents containing two expressions.</li>\n<li><code>OR</code> can be used to search for documents containing either one of\ntwo expressions.</li>\n<li>Parentheses can be used to build up complicated search expressions. For\nexample, "(foo AND bar) OR (me AND you)"</li>\n<li>Prefix a search term with "-" to avoid it from appearing in the results.\nFor example, "-discussion" will omit "discussion".</li>\n<li>To search for a page with a given title, use "title:foo".</li>\n<li>To search for pages that contain a "bar" link, use "link:bar".</li>\n</ul>\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">ikiwiki</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>searching</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsearching" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../">RPC Bug</a>/
+
+ <a href="../">ikiwiki</a>/
+
+ </span>
+ <span class="title">
+ searching
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsearching" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has searching <strong>disabled</strong>.</p>
+
+ <p>If searching is enabled, you can enter search terms in the search field,
+ as you'd expect. There are a few special things you can do to construct
+ more powerful searches.</p>
+
+ <ul>
+ <li>To match a phrase, enclose it in double quotes.</li>
+ <li><code>AND</code> can be used to search for documents containing two expressions.</li>
+ <li><code>OR</code> can be used to search for documents containing either one of
+ two expressions.</li>
+ <li>Parentheses can be used to build up complicated search expressions. For
+ example, "(foo AND bar) OR (me AND you)"</li>
+ <li>Prefix a search term with "-" to avoid it from appearing in the results.
+ For example, "-discussion" will omit "discussion".</li>
+ <li>To search for a page with a given title, use "title:foo".</li>
+ <li>To search for pages that contain a "bar" link, use "link:bar".</li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">ikiwiki</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/pagespec/sorting</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>sorting</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fsorting" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">pagespec</a>/
+
+ </span>
+ <span class="title">
+ sorting
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fsorting" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Some <a href="../../directive/">directives</a> that use
+ <a href="../">PageSpecs</a> allow
+ specifying the order that matching pages are shown in. The following sort
+ orders can be specified.</p>
+
+ <ul>
+ <li><p><code>age</code> - List pages from the most recently created to the oldest.</p></li>
+ <li><p><code>mtime</code> - List pages with the most recently modified first.</p></li>
+ <li><p><code>title</code> - Order by title (page name), e.g. "z/a a/b a/c"</p></li>
+ <li><p><code>path</code> - Order by page name including parents, e.g. "a/b a/c z/a"</p></li>
+ <li><p><code>meta(title)</code> - Order according to the <code>\[[!meta title="foo" sortas="bar"]]</code>
+ or <code>\[[!meta title="foo"]]</code> <a href="../../directive/">directive</a>, or the page name if no
+ full title was set. <code>meta(author)</code>, <code>meta(date)</code>, <code>meta(updated)</code>, etc.
+ also work.</p></li>
+ </ul>
+
+
+ <p>In addition, you can combine several sort orders and/or reverse the order of
+ sorting, with a string like <code>age -title</code> (which would sort by age, then by
+ title in reverse order if two pages have the same age).</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>sorting</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec%2Fsorting" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../../">RPC Bug</a>/ \n\n<a href="../../">ikiwiki</a>/ \n\n<a href="../">pagespec</a>/ \n\n</span>\n<span class="title">\nsorting\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec%2Fsorting" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>Some <a href="../../directive/">directives</a> that use\n<a href="../">PageSpecs</a> allow\nspecifying the order that matching pages are shown in. The following sort\norders can be specified.</p>\n\n<ul>\n<li><p><code>age</code> - List pages from the most recently created to the oldest.</p></li>\n<li><p><code>mtime</code> - List pages with the most recently modified first.</p></li>\n<li><p><code>title</code> - Order by title (page name), e.g. "z/a a/b a/c"</p></li>\n<li><p><code>path</code> - Order by page name including parents, e.g. "a/b a/c z/a"</p></li>\n<li><p><code>meta(title)</code> - Order according to the <code>\[[!meta title="foo" sortas="bar"]]</code>\nor <code>\[[!meta title="foo"]]</code> <a href="../../directive/">directive</a>, or the page name if no\nfull title was set. <code>meta(author)</code>, <code>meta(date)</code>, <code>meta(updated)</code>, etc.\nalso work.</p></li>\n</ul>\n\n\n<p>In addition, you can combine several sort orders and/or reverse the order of\nsorting, with a string like <code>age -title</code> (which would sort by age, then by\ntitle in reverse order if two pages have the same age).</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>sorting</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fsorting" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">pagespec</a>/
+
+ </span>
+ <span class="title">
+ sorting
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fsorting" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>Some <a href="../../directive/">directives</a> that use
+ <a href="../">PageSpecs</a> allow
+ specifying the order that matching pages are shown in. The following sort
+ orders can be specified.</p>
+
+ <ul>
+ <li><p><code>age</code> - List pages from the most recently created to the oldest.</p></li>
+ <li><p><code>mtime</code> - List pages with the most recently modified first.</p></li>
+ <li><p><code>title</code> - Order by title (page name), e.g. "z/a a/b a/c"</p></li>
+ <li><p><code>path</code> - Order by page name including parents, e.g. "a/b a/c z/a"</p></li>
+ <li><p><code>meta(title)</code> - Order according to the <code>\[[!meta title="foo" sortas="bar"]]</code>
+ or <code>\[[!meta title="foo"]]</code> <a href="../../directive/">directive</a>, or the page name if no
+ full title was set. <code>meta(author)</code>, <code>meta(date)</code>, <code>meta(updated)</code>, etc.
+ also work.</p></li>
+ </ul>
+
+
+ <p>In addition, you can combine several sort orders and/or reverse the order of
+ sorting, with a string like <code>age -title</code> (which would sort by age, then by
+ title in reverse order if two pages have the same age).</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/pagespec/attachment</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>attachment</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fattachment" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">pagespec</a>/
+
+ </span>
+ <span class="title">
+ attachment
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fattachment" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has attachments <strong>disabled</strong>.</p>
+
+ <p>If attachments are enabled, the wiki admin can control what types of
+ attachments will be accepted, via the <code>allowed_attachments</code>
+ configuration setting.</p>
+
+ <p>For example, to limit most users to uploading small images, and nothing else,
+ while allowing larger mp3 files to be uploaded by joey into a specific
+ directory, and check all attachments for viruses, something like this could be
+ used:</p>
+
+ <pre><code>virusfree() and ((user(joey) and podcast/*.mp3 and mimetype(audio/mpeg) and maxsize(15mb)) or (mimetype(image/*) and maxsize(50kb)))
+ </code></pre>
+
+ <p>The regular <a href="../">PageSpec</a> syntax is expanded with the following
+ additional tests:</p>
+
+ <ul>
+ <li><p>"<code>maxsize(size)</code>" - tests whether the attachment is no larger than the
+ specified size. The size defaults to being in bytes, but "kb", "mb", "gb"
+ etc can be used to specify the units.</p></li>
+ <li><p>"<code>minsize(size)</code>" - tests whether the attachment is no smaller than the
+ specified size.</p></li>
+ <li><p>"<code>ispage()</code>" - tests whether the attachment will be treated by ikiwiki as a
+ wiki page. (Ie, if it has an extension of ".mdwn", or of any other enabled
+ page format).</p>
+
+ <p>So, if you don't want to allow wiki pages to be uploaded as attachments,
+ use <code>!ispage()</code> ; if you only want to allow wiki pages to be uploaded
+ as attachments, use <code>ispage()</code>.</p></li>
+ <li><p>"<code>mimetype(foo/bar)</code>" - checks the MIME type of the attachment. You can
+ include a glob in the type, for example <code>mimetype(image/*)</code>.</p></li>
+ <li><p>"<code>virusfree()</code>" - checks the attachment with an antiviral program.</p></li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>attachment</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec%2Fattachment" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../../">RPC Bug</a>/ \n\n<a href="../../">ikiwiki</a>/ \n\n<a href="../">pagespec</a>/ \n\n</span>\n<span class="title">\nattachment\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec%2Fattachment" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This wiki has attachments <strong>disabled</strong>.</p>\n\n<p>If attachments are enabled, the wiki admin can control what types of\nattachments will be accepted, via the <code>allowed_attachments</code>\nconfiguration setting.</p>\n\n<p>For example, to limit most users to uploading small images, and nothing else,\nwhile allowing larger mp3 files to be uploaded by joey into a specific\ndirectory, and check all attachments for viruses, something like this could be\nused:</p>\n\n<pre><code>virusfree() and ((user(joey) and podcast/*.mp3 and mimetype(audio/mpeg) and maxsize(15mb)) or (mimetype(image/*) and maxsize(50kb)))\n</code></pre>\n\n<p>The regular <a href="../">PageSpec</a> syntax is expanded with the following\nadditional tests:</p>\n\n<ul>\n<li><p>"<code>maxsize(size)</code>" - tests whether the attachment is no larger than the\nspecified size. The size defaults to being in bytes, but "kb", "mb", "gb"\netc can be used to specify the units.</p></li>\n<li><p>"<code>minsize(size)</code>" - tests whether the attachment is no smaller than the\nspecified size.</p></li>\n<li><p>"<code>ispage()</code>" - tests whether the attachment will be treated by ikiwiki as a\nwiki page. (Ie, if it has an extension of ".mdwn", or of any other enabled\npage format).</p>\n\n<p>So, if you don\'t want to allow wiki pages to be uploaded as attachments,\nuse <code>!ispage()</code> ; if you only want to allow wiki pages to be uploaded\nas attachments, use <code>ispage()</code>.</p></li>\n<li><p>"<code>mimetype(foo/bar)</code>" - checks the MIME type of the attachment. You can\ninclude a glob in the type, for example <code>mimetype(image/*)</code>.</p></li>\n<li><p>"<code>virusfree()</code>" - checks the attachment with an antiviral program.</p></li>\n</ul>\n\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>attachment</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fattachment" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">pagespec</a>/
+
+ </span>
+ <span class="title">
+ attachment
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fattachment" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has attachments <strong>disabled</strong>.</p>
+
+ <p>If attachments are enabled, the wiki admin can control what types of
+ attachments will be accepted, via the <code>allowed_attachments</code>
+ configuration setting.</p>
+
+ <p>For example, to limit most users to uploading small images, and nothing else,
+ while allowing larger mp3 files to be uploaded by joey into a specific
+ directory, and check all attachments for viruses, something like this could be
+ used:</p>
+
+ <pre><code>virusfree() and ((user(joey) and podcast/*.mp3 and mimetype(audio/mpeg) and maxsize(15mb)) or (mimetype(image/*) and maxsize(50kb)))
+ </code></pre>
+
+ <p>The regular <a href="../">PageSpec</a> syntax is expanded with the following
+ additional tests:</p>
+
+ <ul>
+ <li><p>"<code>maxsize(size)</code>" - tests whether the attachment is no larger than the
+ specified size. The size defaults to being in bytes, but "kb", "mb", "gb"
+ etc can be used to specify the units.</p></li>
+ <li><p>"<code>minsize(size)</code>" - tests whether the attachment is no smaller than the
+ specified size.</p></li>
+ <li><p>"<code>ispage()</code>" - tests whether the attachment will be treated by ikiwiki as a
+ wiki page. (Ie, if it has an extension of ".mdwn", or of any other enabled
+ page format).</p>
+
+ <p>So, if you don't want to allow wiki pages to be uploaded as attachments,
+ use <code>!ispage()</code> ; if you only want to allow wiki pages to be uploaded
+ as attachments, use <code>ispage()</code>.</p></li>
+ <li><p>"<code>mimetype(foo/bar)</code>" - checks the MIME type of the attachment. You can
+ include a glob in the type, for example <code>mimetype(image/*)</code>.</p></li>
+ <li><p>"<code>virusfree()</code>" - checks the attachment with an antiviral program.</p></li>
+ </ul>
+
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/pagespec/po</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>po</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fpo" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">pagespec</a>/
+
+ </span>
+ <span class="title">
+ po
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fpo" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has po support <strong>disabled</strong>.</p>
+
+ <p>If the \[[!iki plugins/po desc=po]] plugin is enabled, the regular
+ <a href="../">PageSpec</a> syntax is expanded with the following additional
+ tests that can be used to improve user navigation in a multi-lingual
+ wiki:</p>
+
+ <ul>
+ <li>"<code>lang(LL)</code>" - tests whether a page is written in the language
+ specified as a ISO639-1 (two-letter) language code.</li>
+ <li>"<code>currentlang()</code>" - tests whether a page is written in the same
+ language as the current page.</li>
+ <li>"<code>needstranslation()</code>" - tests whether a page needs translation
+ work. Only slave pages match this PageSpec. A minimum target
+ translation percentage can optionally be passed as an integer
+ parameter: "<code>needstranslation(50)</code>" matches only pages less than 50%
+ translated.</li>
+ </ul>
+
+
+ <p>Note that every non-po page is considered to be written in
+ <code>po_master_language</code>, as specified in <code>ikiwiki.setup</code>.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>po</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec%2Fpo" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../../">RPC Bug</a>/ \n\n<a href="../../">ikiwiki</a>/ \n\n<a href="../">pagespec</a>/ \n\n</span>\n<span class="title">\npo\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fpagespec%2Fpo" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>This wiki has po support <strong>disabled</strong>.</p>\n\n<p>If the \[[!iki plugins/po desc=po]] plugin is enabled, the regular\n<a href="../">PageSpec</a> syntax is expanded with the following additional\ntests that can be used to improve user navigation in a multi-lingual\nwiki:</p>\n\n<ul>\n<li>"<code>lang(LL)</code>" - tests whether a page is written in the language\nspecified as a ISO639-1 (two-letter) language code.</li>\n<li>"<code>currentlang()</code>" - tests whether a page is written in the same\nlanguage as the current page.</li>\n<li>"<code>needstranslation()</code>" - tests whether a page needs translation\nwork. Only slave pages match this PageSpec. A minimum target\ntranslation percentage can optionally be passed as an integer\nparameter: "<code>needstranslation(50)</code>" matches only pages less than 50%\ntranslated.</li>\n</ul>\n\n\n<p>Note that every non-po page is considered to be written in\n<code>po_master_language</code>, as specified in <code>ikiwiki.setup</code>.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>po</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fpo" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">pagespec</a>/
+
+ </span>
+ <span class="title">
+ po
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fpagespec%2Fpo" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>This wiki has po support <strong>disabled</strong>.</p>
+
+ <p>If the \[[!iki plugins/po desc=po]] plugin is enabled, the regular
+ <a href="../">PageSpec</a> syntax is expanded with the following additional
+ tests that can be used to improve user navigation in a multi-lingual
+ wiki:</p>
+
+ <ul>
+ <li>"<code>lang(LL)</code>" - tests whether a page is written in the language
+ specified as a ISO639-1 (two-letter) language code.</li>
+ <li>"<code>currentlang()</code>" - tests whether a page is written in the same
+ language as the current page.</li>
+ <li>"<code>needstranslation()</code>" - tests whether a page needs translation
+ work. Only slave pages match this PageSpec. A minimum target
+ translation percentage can optionally be passed as an integer
+ parameter: "<code>needstranslation(50)</code>" matches only pages less than 50%
+ translated.</li>
+ </ul>
+
+
+ <p>Note that every non-po page is considered to be written in
+ <code>po_master_language</code>, as specified in <code>ikiwiki.setup</code>.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:199: received procedure call from ikiwiki: [<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>format</methodName><params><param><value><string>page</string></value></param><param><value><string>ikiwiki/subpage/linkingrules</string></value></param><param><value><string>content</string></value></param><param><value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>linkingrules</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage%2Flinkingrules" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">subpage</a>/
+
+ </span>
+ <span class="title">
+ linkingrules
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage%2Flinkingrules" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>To link to or from a <a href="../">SubPage</a>, you can normally use a regular
+ <a href="../../wikilink/">WikiLink</a> that does not contain the name of the parent directory of
+ the <a href="../">SubPage</a>. Ikiwiki descends the directory hierarchy looking for a
+ page that matches your link.</p>
+
+ <p>For example, if FooBar/SubPage links to "OtherPage", ikiwiki will first
+ prefer pointing the link to FooBar/SubPage/OtherPage if it exists, next
+ to FooBar/OtherPage and finally to OtherPage in the root of the wiki.</p>
+
+ <p>Note that this means that if a link on FooBar/SomePage to "OtherPage"
+ currently links to OtherPage, in the root of the wiki, and FooBar/OtherPage
+ is created, the link will <em>change</em> to point to FooBar/OtherPage. On the
+ other hand, a link from BazBar to "OtherPage" would be unchanged by this
+ creation of a <a href="../">SubPage</a> of FooBar.</p>
+
+ <p>You can also specify a link that contains a directory name, like
+ "FooBar/OtherPage" to more exactly specify what page to link to. This is
+ the only way to link to an unrelated <a href="../">SubPage</a>.</p>
+
+ <p>You can use this to, for example, to link from BazBar to "FooBar/SubPage",
+ or from BazBar/SubPage to "FooBar/SubPage".</p>
+
+ <p>You can also use "/" at the start of a link, to specify exactly which page
+ to link to, when there are multiple pages with similar names and the link
+ goes to the wrong page by default. For example, linking from
+ "FooBar/SubPage" to "/OtherPage" will link to the "OtherPage" in the root
+ of the wiki, even if there is a "FooBar/OtherPage".</p>
+
+ <p>Also, if the wiki is configured with a userdir, you can link to pages
+ within the userdir without specifying a path to them. This is to allow for
+ easy linking to a user's page in the userdir, to sign a comment. These
+ links are checked for last of all.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">subpage</a>
+
+ <a href="../../wikilink/">wikilink</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value></param></params></methodCall>
+ ]
+ rpcbug:hook_proxy:262: format hook `format' returned: ['<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n\n<meta charset="utf-8" />\n<title>linkingrules</title>\n<meta name="viewport" content="width=device-width, initial-scale=1" />\n\n<link rel="stylesheet" href="../../../style.css" type="text/css" />\n\n<link rel="stylesheet" href="../../../local.css" type="text/css" />\n\n\n\n\n<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fsubpage%2Flinkingrules" />\n\n\n\n<meta name="robots" content="noindex, follow" />\n\n\n\n</head>\n<body>\n\n<article class="page">\n\n<section class="pageheader">\n<header class="header">\n<span>\n<span class="parentlinks">\n\n<a href="../../../">RPC Bug</a>/ \n\n<a href="../../">ikiwiki</a>/ \n\n<a href="../">subpage</a>/ \n\n</span>\n<span class="title">\nlinkingrules\n\n</span>\n</span>\n\n\n\n</header>\n\n\n<nav class="actions">\n<ul>\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&page=ikiwiki%2Fsubpage%2Flinkingrules" rel="nofollow">Edit</a></li>\n\n\n<li><a href="../../../recentchanges/">RecentChanges</a></li>\n\n\n\n\n<li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>\n\n\n\n\n\n</ul>\n</nav>\n\n\n\n\n\n\n\n\n</section>\n\n\n\n\n\n<div id="pagebody">\n\n<section id="content" role="main">\n<p>To link to or from a <a href="../">SubPage</a>, you can normally use a regular\n<a href="../../wikilink/">WikiLink</a> that does not contain the name of the parent directory of\nthe <a href="../">SubPage</a>. Ikiwiki descends the directory hierarchy looking for a\npage that matches your link.</p>\n\n<p>For example, if FooBar/SubPage links to "OtherPage", ikiwiki will first\nprefer pointing the link to FooBar/SubPage/OtherPage if it exists, next\nto FooBar/OtherPage and finally to OtherPage in the root of the wiki.</p>\n\n<p>Note that this means that if a link on FooBar/SomePage to "OtherPage"\ncurrently links to OtherPage, in the root of the wiki, and FooBar/OtherPage\nis created, the link will <em>change</em> to point to FooBar/OtherPage. On the\nother hand, a link from BazBar to "OtherPage" would be unchanged by this\ncreation of a <a href="../">SubPage</a> of FooBar.</p>\n\n<p>You can also specify a link that contains a directory name, like\n"FooBar/OtherPage" to more exactly specify what page to link to. This is\nthe only way to link to an unrelated <a href="../">SubPage</a>.</p>\n\n<p>You can use this to, for example, to link from BazBar to "FooBar/SubPage",\nor from BazBar/SubPage to "FooBar/SubPage".</p>\n\n<p>You can also use "/" at the start of a link, to specify exactly which page\nto link to, when there are multiple pages with similar names and the link\ngoes to the wrong page by default. For example, linking from\n"FooBar/SubPage" to "/OtherPage" will link to the "OtherPage" in the root\nof the wiki, even if there is a "FooBar/OtherPage".</p>\n\n<p>Also, if the wiki is configured with a userdir, you can link to pages\nwithin the userdir without specifying a path to them. This is to allow for\neasy linking to a user\'s page in the userdir, to sign a comment. These\nlinks are checked for last of all.</p>\n\n</section>\n\n\n\n\n\n\n\n</div>\n\n<footer id="footer" class="pagefooter" role="contentinfo">\n\n<nav id="pageinfo">\n\n\n\n\n\n\n<nav id="backlinks">\nLinks:\n\n<a href="../">subpage</a>\n\n<a href="../../wikilink/">wikilink</a>\n\n\n</nav>\n\n\n\n\n\n\n<div class="pagedate">\nLast edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>\n<!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->\n</div>\n\n</nav>\n\n\n<!-- from RPC Bug -->\n</footer>\n\n</article>\n\n</body>\n</html>\n']
+ rpcbug:handle_rpc:204: sending procedure response to ikiwiki: [<?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string><!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+
+ <meta charset="utf-8" />
+ <title>linkingrules</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <link rel="stylesheet" href="../../../style.css" type="text/css" />
+
+ <link rel="stylesheet" href="../../../local.css" type="text/css" />
+
+
+
+
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage%2Flinkingrules" />
+
+
+
+ <meta name="robots" content="noindex, follow" />
+
+
+
+ </head>
+ <body>
+
+ <article class="page">
+
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+
+ <a href="../../../">RPC Bug</a>/
+
+ <a href="../../">ikiwiki</a>/
+
+ <a href="../">subpage</a>/
+
+ </span>
+ <span class="title">
+ linkingrules
+
+ </span>
+ </span>
+
+
+
+ </header>
+
+
+ <nav class="actions">
+ <ul>
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=edit&amp;page=ikiwiki%2Fsubpage%2Flinkingrules" rel="nofollow">Edit</a></li>
+
+
+ <li><a href="../../../recentchanges/">RecentChanges</a></li>
+
+
+
+
+ <li><a href="/~louis/ikiwiki_bug_rpc/ikiwiki.cgi?do=prefs">Preferences</a></li>
+
+
+
+
+
+ </ul>
+ </nav>
+
+
+
+
+
+
+
+
+ </section>
+
+
+
+
+
+ <div id="pagebody">
+
+ <section id="content" role="main">
+ <p>To link to or from a <a href="../">SubPage</a>, you can normally use a regular
+ <a href="../../wikilink/">WikiLink</a> that does not contain the name of the parent directory of
+ the <a href="../">SubPage</a>. Ikiwiki descends the directory hierarchy looking for a
+ page that matches your link.</p>
+
+ <p>For example, if FooBar/SubPage links to "OtherPage", ikiwiki will first
+ prefer pointing the link to FooBar/SubPage/OtherPage if it exists, next
+ to FooBar/OtherPage and finally to OtherPage in the root of the wiki.</p>
+
+ <p>Note that this means that if a link on FooBar/SomePage to "OtherPage"
+ currently links to OtherPage, in the root of the wiki, and FooBar/OtherPage
+ is created, the link will <em>change</em> to point to FooBar/OtherPage. On the
+ other hand, a link from BazBar to "OtherPage" would be unchanged by this
+ creation of a <a href="../">SubPage</a> of FooBar.</p>
+
+ <p>You can also specify a link that contains a directory name, like
+ "FooBar/OtherPage" to more exactly specify what page to link to. This is
+ the only way to link to an unrelated <a href="../">SubPage</a>.</p>
+
+ <p>You can use this to, for example, to link from BazBar to "FooBar/SubPage",
+ or from BazBar/SubPage to "FooBar/SubPage".</p>
+
+ <p>You can also use "/" at the start of a link, to specify exactly which page
+ to link to, when there are multiple pages with similar names and the link
+ goes to the wrong page by default. For example, linking from
+ "FooBar/SubPage" to "/OtherPage" will link to the "OtherPage" in the root
+ of the wiki, even if there is a "FooBar/OtherPage".</p>
+
+ <p>Also, if the wiki is configured with a userdir, you can link to pages
+ within the userdir without specifying a path to them. This is to allow for
+ easy linking to a user's page in the userdir, to sign a comment. These
+ links are checked for last of all.</p>
+
+ </section>
+
+
+
+
+
+
+
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+
+ <nav id="pageinfo">
+
+
+
+
+
+
+ <nav id="backlinks">
+ Links:
+
+ <a href="../">subpage</a>
+
+ <a href="../../wikilink/">wikilink</a>
+
+
+ </nav>
+
+
+
+
+
+
+ <div class="pagedate">
+ Last edited <time datetime="2014-09-12T20:23:58Z">12/09/2014</time>
+ <!-- Created <time datetime="2014-09-12T20:23:58Z" pubdate="pubdate">12/09/2014</time> -->
+ </div>
+
+ </nav>
+
+
+ <!-- from RPC Bug -->
+ </footer>
+
+ </article>
+
+ </body>
+ </html>
+ </string></value>
+ </param>
+ </params>
+ </methodResponse>
+ ]
+ rpcbug:handle_rpc:191: waiting for procedure calls from ikiwiki...
+ rpcbug:handle_rpc:195: ikiwiki is going down, and so are we...
-If you look at [[todo/org mode]], the link to the Discussion page is not there (has a question mark), as if it didn't exist. But--through the search--I discovered that the Discussion page does exist actually: [[todo/org mode/Discussion]].
+If you look at [[plugins/contrib/org_mode]], the link to the Discussion page is not there (has a question mark), as if it didn't exist. But--through the search--I discovered that the Discussion page does exist actually: [[plugins/contrib/org_mode/Discussion]].
So, there is a bug that prevents a link to the existing Discussion page from appearing in the correct way on the corresponding main page. --Ivan Z.
--- /dev/null
+This fix is probably just changing
+
+http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=templates/googleform.tmpl;h=9468e062ab19a381f6dadb339480796efae827f5;hb=HEAD#l2
+
+to
+
+ <form method="get" action="//www.google.com/search" id="searchform">
+
+> I changed it to use https unconditionally - there seems little point
+> in doing Google searches in clear-text when Google supports https,
+> even on unencrypted wikis. [[done]] --[[smcv]]
--- /dev/null
+While working on the [Tails website](https://tails.boum.org/), I didn't
+managed to resize the text input on top of the search results.
+
+This is problematic with our layout and it might be the same for others.
+For example, reducing a bit the width of the browser on [this
+page](https://tails.boum.org/ikiwiki.cgi?P=testing) makes the search
+results jump at the bottom of the page since the text input is wider
+(size=65 by default) than the body of the page when side by side with
+the sidebar.
+
+Having CSS selectors to style the elements of this form would solve our
+problem.
+
+[[!tag patch]]
+
+Here is a patch:
+
+ From c4c6c9bf3b296c2db10d6fb9e6421d82f341b1cf Mon Sep 17 00:00:00 2001
+ From: sajolida <sajolida@pimienta.org>
+ Date: Sun, 9 Nov 2014 16:48:33 +0100
+ Subject: [PATCH] Add classes to form in search results
+
+ This is needed to style it, for example to reduce the width of the text
+ input and prevent layout issues.
+ ---
+ templates/searchquery.tmpl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+ diff --git a/templates/searchquery.tmpl b/templates/searchquery.tmpl
+ index 15bc78e..6277266 100644
+ --- a/templates/searchquery.tmpl
+ +++ b/templates/searchquery.tmpl
+ @@ -33,8 +33,8 @@ $def{NEXT,$if{$ne{$last,$msize},<INPUT TYPE=submit NAME=">" VALUE="Next">}}
+
+ <FORM NAME=P METHOD=GET
+ ACTION="$html{$env{CGIURL}}" TARGET="_top">
+ -<div style="text-align:center">
+ -<INPUT NAME=P VALUE="$html{$query}" SIZE=65>
+ +<div class="searchquery" style="text-align:center">
+ +<INPUT class="searchbox" NAME=P VALUE="$html{$query}" SIZE=65>
+ <INPUT TYPE=SUBMIT VALUE="Search">
+ $env{HELPLINK}
+ <hr>
+ --
+ 2.1.1
+
+> [[Applied|done]], thanks --[[smcv]]
And the extra newlines break the table. Can they be safely removed?
> If you want an HTML table, I would suggest using an HTML table, which
-> should pass through Markdown without being interpreted further:
->
-> <table><tr>
-> \[[!inline pages="link(/category/env)" feeds=no archive=yes sort=title template=tagtd]]
-> </tr></table>
->
-> where tagtd.tmpl is of the form `<td>your markup here</td>`; or even just
+> should pass through Markdown without being interpreted further. To
+> avoid getting the `<div>` inside the `<table>` you can use:
>
> \[[!inline pages="link(/category/env)" feeds=no archive=yes sort=title template=tagtable]]
>
--- /dev/null
+I was thinking about using ikiwiki for a project I'm working on and was testing to see how fast the project loaded when I came across this error while testing the ikiwiki website using <https://www.dotcom-tools.com/website-speed-test.aspx>
+It said the following element was not found:
+Url: <https://ikiwiki.info/wikiicons/email.png>
+<https://ikiwiki.info/ikiwiki.cgi?do=prefs>
+
+> [[fixed|done]] --[[smcv]]
--- /dev/null
+<http://developers.google.com/speed/pagespeed/insights/>
+
+indicates the viewport on mobile needs to be configured, e.g. `<meta name=viewport content="width=device-width, initial-scale=1">` in the header of
+
+http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=templates/page.tmpl;
+
+> This seems a lot like
+> [an "unbreak my application" option](http://ometer.com/free-software-ui.html)
+> but OK... presumably the motivation for this being opt-in is that "most"
+> websites have some sort of hard-coded fixed-width layout suitable for
+> a proportion of desktop browsers, rather than being responsive to window
+> size like they should have been all along. --[[smcv]]
+
+>> Fixed in master. It is currently on by default, but people with
+>> customized CSS that doesn't scale nicely can put
+>> `responsive_layout => 0` in the config to turn it off. --[[smcv]]
+
+Further more:
+
+* fonts need to be tweaked
+
+ > Suggestions?
+ >
+ > (Note that Joey has generally rejected stylistic changes to the default
+ > anti-theme; enhancing the other themes would be OK though.)
+ > --[[smcv]]
+
+ >> With git master, the layout and font sizes seem appropriate on my
+ >> Galaxy Nexus (360 CSS pixels wide), and on simulated devices
+ >> 320 device pixels wide (e.g. the first couple of iPhone models)
+ >> in Chromium's developer tools. [[done]]
+ >>
+ >> Test sites:
+ >>
+ >> * <http://actiontabs.hosted.pseudorandom.co.uk/>
+ >> * <http://blueview.hosted.pseudorandom.co.uk/>
+ >> * <http://goldtype.hosted.pseudorandom.co.uk/>
+ >> * <http://monochrome.hosted.pseudorandom.co.uk/>
+ >> * <http://unthemed.hosted.pseudorandom.co.uk/>
+ >>
+ >> If stylistic changes are needed, please open another issue with a
+ >> suggested patch.
+ >> --[[smcv]]
+
+* XHTML should be dropped !
+
+ > Already in the to-do list: [[todo/generate HTML5 by default]]. --[[smcv]]
+
+ >> Next version will always generate HTML5, unless someone overrules me.
+ >> --[[smcv]]
+
+I'm practicing this on http://dabase.com/ with <http://source.dabase.branchable.com/?p=source.git;a=blob;f=templates/page.tmpl;>
+
+> [[!format diff """
+-<TMPL_IF FORCEBASEURL><base href="<TMPL_VAR FORCEBASEURL>" /><TMPL_ELSE>
+-<TMPL_IF BASEURL><base href="<TMPL_VAR BASEURL>" /></TMPL_IF>
+"""]]
+> You probably don't want to delete those. It breaks the CGI. --[[smcv]]
--- /dev/null
+Hello,
+
+We got a report that http://www.gnu.org/software/hurd/ "embeds apparently non-free JS". This is because the embedded ikiwiki.js javascript file does not wear a copyright notice, to tell which licence this file is shipped under. Could you add such a copyright notice?
+
+Thanks
--- /dev/null
+We have a weird spam problem on our site - must be something via CGI.
+
+see <http://www.dk0tu.de/recentchanges/discussion/>
+
+The content is changing frequently without being checked into the git repository. Any ideas?
+
+--[[bastla]]
+
+> Please check your web server logs for any error messages from the CGI.
+> It seems likely that the spammer is editing that page but the changes
+> are somehow not getting committed or pushed.
+>
+> I can't tell you much without knowing details of your setup.
+> For instance, are you using the suggested git repository setup
+> shown in the diagram on the [[rcs/git]] page, or something
+> different? Can you publish a (possibly censored) setup file somewhere?
+>
+> It would probably also be worthwhile to compare the git history of
+> `srcdir/.git` with the git history of the bare repository, if you
+> have one.
+>
+> To recover, you could undo the spam in the `srcdir` (as the user ID
+> that owns the wiki), commit that, and merge with the bare repository
+> if necessary.
+>
+> ----
+>
+> When I tried editing the spammed page to clear it, I got this error:
+>
+> Error: /srv/www/Kurse/AFu-Lizenz/e09.tex independently created, not overwriting with version from Kurse/AFu-Lizenz/e09.tex
+>
+> Your srcdir and destdir seem to have got out of sync. You might need
+> to rebuild the wiki.
+>
+> (I think I'd have received the same error for *any* edit right now.)
+>
+> If you're going to enable completely anonymous editing, I
+> recommend monitoring the wiki more carefully. It might be useful
+> to enable the `syslog` option so that wiki errors go to the
+> system log.
+>
+> --[[smcv]]
+
+>> Whoever runs this wiki seems to have fixed it and enabled authentication now,
+>> so I'm going to consider this [[done]]. --[[smcv]]
--- /dev/null
+I just upgraded from ubuntu 14.04 to ubuntu 15.04. Since then uploading attachments using the attachment plugin doesn't work anymore in ikiwiki. It prints a "failed!" message. Any idea what may be wrong here and how to fix it?
+
+ikiwiki version 3.20141016.2
+
+`/var/log/apache2/error.log`
+
+gives this:
+
+Died at `/usr/share/perl5/IkiWiki/CGI.pm line 497`.
+
+> I think this is probably [[!debbug 786587]], which ikiwiki has worked around since 3.20150610
+> ([[!debbug 786586]]). If so, then it is [[already fixed|done]], but not in the version
+> you have. You could report an Ubuntu bug asking for
+> [ikiwiki commit 7a52c87](http://source.ikiwiki.branchable.com/?p=source.git;a=commit;h=7a52c87a8c745577a50d6c9d134f62f9c5b26b0a)
+> or
+> [CGI.pm commit e4500cf](https://github.com/leejo/CGI.pm/commit/e4500cfb2de27660398c09bc860d1d9e499cb372)
+> to be backported, although in practice bugs in universe packages are unlikely to get fixed
+> in an Ubuntu stable release.
+>
+> To work around this, you might be able to `apt-get remove libcgi-pm-perl` and use the
+> older version of CGI.pm that is shipped with Perl. --[[smcv]]
+
+Thanks, I just opened a bug r[eport on launchpad](https://bugs.launchpad.net/ubuntu/+source/ikiwiki/+bug/1470391).
A quick workaround might be to force the use of $config{url} instead of $cgi->url as a base for URLs when w3mmode is set.
-- Martin
+
+> [[Fixed|done]] --[[smcv]]
--- /dev/null
+Respected Sir,
+Your website "webconverger.org" is vulnerable to XSS Attack.
+
+Vulnerable Links:
+webconverger.org/ikiwiki.cgi?action=verify&do=signin&openid_identifier=1
+
+How To Reproduce The Vulnerability :
+
+1. Go to this link : webconverger.org/ikiwiki.cgi?action=verify&do=signin&openid_identifier=1
+2. refresh the page and intercept the http request using "brup suite" then at parameter "openid_identifier=" put xss payload
+3. forward the request
+
+XSS Payload :
+
+1. `"></script><script>prompt(909043)</script>`
+2. `"></script><script>prompt("XSS Alert...!!! : Hacked By Raghav Bisht")</script>`
+3. `"></script><script>prompt(document.cookie)</script>`
+
+NOTE : Proof of concept is attached.
+
+
+Thank You...!!
+
+
+Your Faithfully,
+Raghav Bisht
+raghav007bisht@gmail.com
+
+> Thanks Raghav for reporting this issue. I've fixed it in ikiwiki.
+>
+> --[[Joey]]
+
+>> [[Fix released|done]] as [[news/version_3.20150329]].
+>>
+>> Please try to report security vulnerabilities in private first,
+>> to give maintainers a chance to fix them without making it easier
+>> for attackers to exploit the newly discovered vulnerability
+>> until the maintainer can respond ("[[!wikipedia responsible disclosure]]").
+>> In this particular case, I was away from my computer for a few days
+>> and was unable to make a release until I got back. --[[smcv]]
+
+> Are versions `3.20120629` or `3.20130904.1~bpo70+1` vulnerable? (`wheezy` and
+> `wheezy-backports`, respectively) — [[Jon]]
+
+>> 3.20120629 is vulnerable; fixed in 3.20120629.2, which is in the proposed-updates
+>> queue (the security team declined to issue a DSA). The blogspam plugin doesn't
+>> work in wheezy either; again, a fix is in the proposed-updates queue.
+>>
+>> 3.20130904.1~bpo70+1 is almost certainly vulnerable, it looks as though someone
+>> has done a drive-by backport but not kept it updated. None of ikiwiki's Debian
+>> maintainers are involved in that backport; the .deb from jessie (or even from
+>> experimental) works fine on wheezy without recompilation. I use the latest
+>> upstream release from experimental on my otherwise-Debian-7 server. --[[smcv]]
--- /dev/null
+## What I did
+
+A friend reported this, and I'm seeing it too. With 3.20140916, on
+a system with Python 2.7 and 3.4 (and little else) installed, I
+tried to run the auto.setup:
+
+ :; ikiwiki --setup /etc/pkg/ikiwiki/auto.setup
+ What will the wiki be named? Import Errors
+ What revision control system to use? git
+ Which user (wiki account or openid) will be admin? schmonz
+
+
+ Setting up Import Errors ...
+ Importing /Users/schmonz/ImportErrors into git
+ Initialized empty shared Git repository in /Users/schmonz/ImportErrors.git/
+ Initialized empty Git repository in /Users/schmonz/ImportErrors/.git/
+ [master (root-commit) 20b1128] initial commit
+ 1 file changed, 1 insertion(+)
+ create mode 100644 .gitignore
+ Counting objects: 3, done.
+ Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
+ Total 3 (delta 0), reused 0 (delta 0)
+ To /Users/schmonz/ImportErrors.git
+ * [new branch] master -> master
+ Directory /Users/schmonz/ImportErrors is now a clone of git repository /Users/schmonz/ImportErrors.git
+ Traceback (most recent call last):
+ File "/usr/pkg/lib/ikiwiki/plugins/rst", line 45, in <module>
+ from proxy import IkiWikiProcedureProxy
+ File "/usr/pkg/lib/ikiwiki/plugins/proxy.py", line 41, in <module>
+ import xml.parsers.expat
+ File "/usr/pkg/lib/python3.4/xml/parsers/expat.py", line 4, in <module>
+ from pyexpat import *
+ ImportError: No module named 'pyexpat'
+
+
+ Creating wiki admin schmonz ...
+ Choose a password:
+ [...]
+
+## What I expected
+
+I expected to get a basic site.
+
+## What happened instead
+
+I got a basic site with some Python error messages.
+
+## Likely fix
+
+Looks like `proxy.py` needs the trick from [[!debbug 637604]] so
+that it can defer a few imports (at least `xml.parsers.expat` and
+the XML-RPC libs) until the methods using them are called. --[[schmonz]]
+
+-----
+
+It's more complicated than I thought. Findings and questions so
+far:
+
+### Failing to load an external plugin should be an error
+
+When a typical Perl plugin fails to load (say, by failing to compile),
+`IkiWiki::loadplugin()` throws an exception. For XML-RPC plugins
+written in any language, ikiwiki assumes loading succeeded.
+
+Let's take [[!iki plugins/rst]] as an example. It's written in
+Python and uses `proxy.py` to handle XML-RPC communication with
+ikiwiki. Let's say that `proxy.py` compiles, but `rst` itself
+doesn't. We'd like ikiwiki to know the plugin isn't loaded, and
+we'd like an error message about it (not just the Python errors).
+
+Now let's say `rst` would be fine by itself, but `proxy.py` doesn't
+compile because some of the Python modules it needs are missing
+from the system. (This can't currently happen on Debian, where
+`libpython2.7` includes `pyexpat.so`, but pkgsrc's `python27`
+doesn't; it's in a separate `py-expat` package.) As before, we'd
+like ikiwiki to know `rst` didn't load, but that's trickier when
+the problem lies with the communication mechanism itself.
+
+For the tricky case, what to do? Some ideas:
+
+- Figure out where in `auto.setup` we're enabling `rst` by default,
+ and stop doing that
+- In pkgsrc's `ikiwiki` package, add a dependency on Python and
+ `py-expat` just in case someone wants to enable `rst` or other
+ Python plugins
+
+For the simple case, I've tried the following:
+
+[[!template id=gitbranch branch=schmonz/external-plugin-loading author="[[schmonz]]"]]
+
+- In `IkiWiki::Plugin::external::import()`, capture stderr
+- Before falling off the end of `IkiWiki::Plugin::external::rpc_call()`,
+ if the command had been 'import' and stderr is non-empty, throw
+ an exception
+- In `IkiWiki::loadplugin()`, try/catch/throw just like we do with
+ regular non-external plugins
+
+With these changes, we have a test that fails when an external
+plugin can't be loaded (and passes, less trivially, when it can).
+Huzzah! (I haven't tested yet whether I've otherwise completely
+broken the interface for external plugins. Not-huzzah!) --[[schmonz]]
--- /dev/null
+<http://blog.steve.org.uk/an_anniversary_and_a_retirement.html>
+
+Unfortunately, this affects the blogspam plugin. I suspect it no
+longer detects spam at all. --[[Joey]]
+
+> Just updated blogspam to the 2.0 API. [[done]] --[[schmonz]]
> > > > > > I've turned the version I suggested above into a proper branch.
> > > > > > Review by someone who can commit to ikiwiki.git would be appreciated.
> > > > > > --[[smcv]]
+
+> > > > > > > Turns out "someone who can commit" includes me.
+> > > > > > > [[Merged|done]] this version, we can revert or alter it if
+> > > > > > > Joey remembers a reason to require `;` --[[smcv]]
Editing the wiki page with non-Latin characters using webinterface also fails with the same error.
Additionally, embedding graphviz graphs non-Latin, leads to he same error.
Observed in ikiwiki versions 3.20130904 and version 3.20140102
+
+> This is probably [[fixed|done]] in 3.20140916. Please provide more
+> information if not. --[[smcv]]
--- /dev/null
+links:
+
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=775310
+http://ikiwiki.info/forum/Your_local_changes_to_the_following_files_would_be_overwritten_by_merge:/
+
+phil is kindly running ikiwiki on hands.com as http://rhombus-tech.net
+we continuously run into "merge" issues which need recovering on a
+near monthly basis.
+
+i have a local checkout of the repository: i often need to upload images via
+that, doing the usual "git pull", followed by "git commit -a", followed by
+"git push", adding an HTML page that is edited by vim as well as the images.
+
+i also often need to "recover" the wiki - for example by renaming pages that
+users have erroneously added, deleting pages that they should not have made,
+moving pages from locations that they should not have added or that i decide
+should be restructured.
+
+these are the operations where everything usually gets completely fscked.
+
+the really weird thing is that when i know that things are out-of-sync,
+a "git pull" gives a *completely different* head branch from the one shown
+through the RecentChanges log!
+
+phil has often had to recover an entire set of files that are completely out
+of sync, that never enter the "git pull" stream onto my laptop, and are not
+visible on the wiki itself either.
+
+this is all incredibly strange and mysterious, but it basically means that
+ikiwiki is not particularly robust and reliable for everyday use. i'd very
+much like it to be!
+
--- /dev/null
+Please consider this [[patch]] for merging in.
+[[!format diff """
+From e697ba4ef7952ce549d449c4e4daea2e3f0a1aa7 Mon Sep 17 00:00:00 2001
+From: Nikolay Orlyuk <virkony@gmail.com>
+Date: Sun, 19 Oct 2014 18:46:34 +0300
+Subject: [PATCH] fix shebang paths manipulations
+
+Small enhancements for 67e778f4 to avoid erroneous she-bangs
+"/usr/bin/perl5.185.18" (version suffix added twice).
+---
+ Makefile.PL | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.PL b/Makefile.PL
+index 61fe336..2d54658 100755
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -63,7 +63,7 @@ docwiki:
+ perl_shebangs:
+ ifneq "$(PERL)" "/usr/bin/perl"
+ for file in $(shebang_scripts); do \
+- $(SED) -e "1s|^#!/usr/bin/perl|#!$(PERL)|" < $$file > "$$file.new"; \
++ $(SED) -e "1s|^#!/usr/bin/perl\>|#!$(PERL)|" < $$file > "$$file.new"; \
+ [ -x $$file ] && chmod +x "$$file.new"; \
+ mv -f "$$file.new" $$file; \
+ done
+@@ -72,7 +72,7 @@ endif
+ perl_shebangs_clean:
+ ifneq "$(PERL)" "/usr/bin/perl"
+ for file in $(shebang_scripts); do \
+- $(SED) -e "1s|^#!$(PERL)|#!/usr/bin/perl|" < $$file > "$$file.new"; \
++ $(SED) -e "1s|^#!$(PERL)\>|#!/usr/bin/perl|" < $$file > "$$file.new"; \
+ [ -x $$file ] && chmod +x "$$file.new"; \
+ mv -f "$$file.new" $$file; \
+ done
+--
+2.1.2
+"""]]
+
+[[Done]], but this word-boundary construct didn't work on at least
+one of my systems, so now we're using `$(PERL)` to do the job
+portably. --[[schmonz]]
--- /dev/null
+Calling ikiwiki with a bunch of options, including the `--dumpsetup somefile.setup` option creates `somefile.setup` for later reuse with the `--setup` option. The wiki state dir however is not saved in the setup file, it has no `wikistatedir` at all.
+
+Strange since same [[kind of bugs|bugs/dumpsetup_does_not_save_destdir]] have been fixed for `destdir`.
+
+--[[bbb]]
--- /dev/null
+When IkiWiki uses discount to implement [[plugins/mdwn]] rendering,
+there is a workaround for <https://rt.cpan.org/Ticket/Display.html?id=74016>:
+
+<pre><code>$t=~s/<style/<elyts/ig;
+my $r=Text::Markdown::Discount::markdown($t);
+$r=~s/<elyts/<style/ig;
+</code></pre>
+
+However, this workaround also applies to indented text or text in backticks:
+if you write <code>there is a bug involving the \`<style>\` tag</code>,
+or use indentation like
+
+<pre><code>you can use this markup:
+
+ <style type="text/css">...</style>
+</code></pre>
+
+then that gets turned into `<elyts` in the source before passing through
+`markdown`, comes out as `<elyts` in the output HTML, and is rendered
+as `<elyts` by the browser. This makes it quite difficult to talk about
+HTML stylesheet markup on an IkiWiki instance (I had to use raw HTML in
+this bug report's source to avoid the bug).
+
+I think the side-effect of the workaround is more damaging than the actual bug
+being worked around: I've never wanted to write inline style tags in the body of
+a Markdown page (which isn't even valid HTML) but I have certainly wanted to
+discuss style markup several times. The first couple of times I saw this happen,
+I thought it was some sort of misguided anti-cross-site-scripting filter...
+
+--[[smcv]]
--- /dev/null
+[this validator](https://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fanarc.at%2Ftag%2Fdrupal-planet%2Findex.rss) says that my RSS feed doesn't validate.
+
+the link to "comments" should be a full URL and there's a "self" tag missing.
+
+coming from [this bug report](https://www.drupal.org/node/1843576)
+
+-- [[anarcat]]
--- /dev/null
+Up-to-date version today (commit 287231f7d29374264c2cd23818d5cb9d607d33e9). Now "make test" fails with the following error:
+
+ Error: Can't use an undefined value as an ARRAY reference at /home/kat/files/repos/ikiwiki_master/blib/lib/IkiWiki.pm line 570.
+
+Looked up line 570, it's the first line of the "getlibdirs" function.
+
+ my @libdirs = @{$config{libdirs}};
+
+This error is triggered when $config{libdirs} is undefined; it didn't happen in the previous version because more checking was done before the value was dereferenced.
+
+A simple patch would be to alter that line to this:
+
+ my @libdirs = $config{libdirs} ? @{$config{libdirs}} : ();
+
+> [[Fixed|done]], sorry about that --[[smcv]]
--- /dev/null
+Now I know it's "bad" to rewrite history in git, but sometimes, and especially with public sites such as a wiki, if confidential information gets transmitted in the wiki, it can be pretty important to remove it, and the only way to do this on a public git repo is by rewriting history.
+
+(This happened as part of my implementation of [[todo/git-annex support]] to be honest, but i think it applies to other situations as well.)
+
+The problem is that ikiwiki keeps track of the last commit it saw in `$srcdir/.ikiwiki/indexdb`. Then it uses this to infer which files changed. If history changed, this will fail with a fairly dramatic:
+
+<pre>
+Error: 'git log --pretty=raw --raw --abbrev=40 --always -c --no-renames --reverse -r f9330f40527ba1f7df6656490cacb9d5ae9e2cd6..HEAD -- .' failed:
+</pre>
+
+Notice how the error message from git isn't present. It's in the `error.log`:
+
+<pre>
+[Mon Mar 30 20:20:04.393466 2015] [cgi:error] [pid 21463] [client 2001:1928:1:9::1:54315] AH01215: fatal: Invalid revision range f9330f40527ba1f7df6656490cacb9d5ae9e2cd6, referer: http://anarc.at/ikiwiki.cgi?do=edit&page=services%2Fwiki
+</pre>
+
+The workaround I have found was to remove the `indexdb` file, because that's [[apparently legit|tips/inside_dot_ikiwiki/]]. But it would be nice to have (1) a proper error message (it had to dig around the error.log to understand what's going on), (2) to have a proper fallback if the `git log` fails and (3) to recover with the newer commit ID when we fallback. --[[anarcat]]
+
+> FWIW, I had a `500 Internal Server Error` while submitting this bug at first. :)
--- /dev/null
+The new regression test from [[plugins/img]] fails when I try to build
+ikiwiki in sbuild for a release (with commits from my `img-test` branch
+also included, in an attempt to fix this):
+
+ Use of uninitialized value in numeric eq (==) at IkiWiki/Plugin/img.pm line 93.
+ Use of uninitialized value in numeric lt (<) at IkiWiki/Plugin/img.pm line 110.
+ Use of uninitialized value in numeric eq (==) at IkiWiki/Plugin/img.pm line 93.
+ Use of uninitialized value in numeric lt (<) at IkiWiki/Plugin/img.pm line 110.
+
+ # Failed test at t/img.t line 78.
+ # got: 'no image'
+ # expected: '12x12'
+
+ # Failed test at t/img.t line 79.
+ # got: 'no image'
+ # expected: '16x2'
+ # Looks like you failed 2 tests of 18.
+ t/img.t ......................
+ Dubious, test returned 2 (wstat 512, 0x200)
+ Failed 2/18 subtests
+
+I haven't been able to diagnose what else is wrong there yet.
+
+If anyone needs to release ikiwiki in a hurry, please delete that test
+and we can put it back later. --[[smcv]]
+
+> [[fixed in 3.20140916|done]] --[[smcv]]
--- /dev/null
+Peter Simons wrote:
+> I'm getting the following test suite failure in Nix, probably because
+> some Perl dependency was updated to a newer version recently:
+
+ # Failed test at t/img.t line 79.
+ # got: 'no image'
+ # expected: '12x12'
+
+ # Failed test at t/img.t line 80.
+ # got: 'no image'
+ # expected: '16x2'
+ # Looks like you failed 2 tests of 19.
+ t/img.t ........................
+ Dubious, test returned 2 (wstat 512, 0x200)
+ Failed 2/19 subtests
+
+> Do you have any idea how to fix this issue?
--- /dev/null
+After my upgrade from ubuntu 14.04 to 15.04 mathjax stopped working in my ikiwiki. Math is displayed correctly for pages created before the upgrade. For new pages or if I change an old page, math is not rendered but the LaTeX source code is printed (with \[ \] as deliminiters instead of $$ $$).
+
+Any idea what may be wrong here and how to fix it?
+
+> Mathjax does not seem to be supported by default by Ikiwiki. So the first question is: how did you enable mathjax?
+>
+> Maybe you can also save the html of an old page, change something in it to make it rebuilt, and diff the resulting html with the old one, to see what changed.
+>
+> -- [[Louis|spalax]]
+
+I installed mathjax via the pandoc-iki plugin as described [here](http://stackoverflow.com/a/8444409/406686)
+
+The rebuild of an old site containing math is missing the following lines:
+
+
+ <script src="/mathjax/MathJax.js?config=TeX-AMS_HTML-full" type="text/javascript"></script>
+ </head>
+ <body>
+ <noscript>
+ <div style="color:#CC0000; text-align:center">
+ <b>Warning: <a href="http://www.mathjax.org/">MathJax</a>
+ requires JavaScript to process the mathematics on this page.<br>
+ If your browser supports JavaScript, be sure it is enabled.</b>
+ </div>
+ <hr>
+ </noscript>
+
+----------------------
+
+I finally noticed that the `page.tmpl` was messed up. It seams that the upgrade deleted the relevant `mathjax` line. Adding this makes it work again. [[Thanks|done]]!
+
--- /dev/null
+The meta plugin, when used to add a stylesheet to a page, adds the
+following attributes by default:
+
+ - `rel="alternate stylesheet"`
+ - `title="mystylesheet"`
+
+The intent of this feature, according to the documentation is to "add a
+stylesheet to a page".
+
+ - By setting the `rel="alternate stylesheet"`, the additional
+ stylesheet is treated as an "alternate stylesheet" as described in
+<http://www.w3.org/Style/Examples/007/alternatives.en.html> and is not
+activated by default in the browser. The user is responsible for
+activating them somehow.
+ - The `title` attribute is used to *group* several alternate style
+ sheets into a single one. This attribute is otherwise "purely
+advisory" as defined in
+<http://www.w3.org/TR/html5/document-metadata.html#attr-link-title>.
+
+The current default behavior of the plugin implies having the additional
+stylesheet not activated (if you don't set `rel="stylesheet"`) or only
+one of them activated (if you add two stylesheets and not set the same
+title for both). This was hard to understand for two of us while working
+on <https://labs.riseup.net/code/issues/9314> and until we went and read
+those W3C documents.
+
+I think that to match better the description of that feature, and to be
+easier to comprehend in its default setting, the meta plugin should by
+default:
+
+ - Set `rel="stylesheet"`.
+ - Not set any `title`.
+
+If we agree on this proposal, I'm willing to provide a patch.
+
+This applies to all versions since c8b4ba3 and until today.
--- /dev/null
+The following could would be expected to produce a 3-month output similar to <code>gcal .</code>
+
+[[!format txt """
+[[!calendar type="month" month="-1"]]
+[[!calendar type="month" ]]
+[[!calendar type="month" month="+1"]]
+"""]]
+
+**Behaviour:** The 3rd entry doesn't show the *next* month, but the *1st* month of the year (aka January).
+
+**Problem:** Since there are no negative month numbers (unless someone starts with march because of Feb 29), *–1* is interpreted correctly.
+Explicitely positive numbers aren't recognized as being relative. Possibly it is the numerical interpretation of the value, there is no difference between *n* and *+n*.
+
+**Solution:** treat the value as string, check for a leading *+*, set a *relativeMonth* flag (which then also should happen on negative values, if it does not happen yet). If then it is set for the month in question, first calculate *month_year* and then go on as usual.
+
+**Idea:** since i mentioned gcal earlier, how about some of the shorthanded sytax as "." for this, ".-" for previous, ".+" for next month together with its neighbours?
+
+-- [[EdePopede]]
>>> willing to send notifications to a verified address?
>>>
>>> --[[smcv]]
+>>>
+>>>> hmm... true, that is a problem, especially for hostile wikis. but then any hostile site could send you such garbage - they would be spammers then. otherwise, you could ask the site manager to disable that account...
+>>>>
+>>>> this doesn't seem to be a very big security issue that would merit implementing a new verification mechanism, especially since we don't verify email addresses on accounts right now. what we could do however is allow password authentication on openid accounts, and allow those users to actually change settings like their email addresses. however, I don't think this should be blocking that functionality right now. --[[anarcat]]
+>>>>
+>>>> besides, the patch I am proposing doesn't make the vulnerability worse at all, it exists right now without the patch. my patch only allows users that **don't** have an email set (likely because their openid provider is more discreet) to set one... --[[anarcat]]
+
+>>>>> Maybe this is too much paint for one bikeshed, but I guess the email-verification idea seems worthwhile to me
+>>>>> and not terribly hard to implement (though I'm not stepping forward at the moment) ... store it with a flag
+>>>>> saying whether it's verified, send a magic cookie to it, let the user supply the cookie to toggle the flag.
+>>>>> I could also see leaving the email field hidden for OpenID login, but perhaps detecting the first use of a new
+>>>>> OpenID (it's not in the userdb, right?) and suggesting a stop on the preferences page, where if the provider
+>>>>> did supply an e-mail address, it could be already filled in as default (maybe still unverified if we don't want
+>>>>> to assume the provider did that). -- Chap
+
+>>>>>> So yay, I want a poney too, aka i agree that email verification would be nice.
+>>>>>>
+>>>>>> But the problem is that is a separate feature request, which should be filed as a
+>>>>>> separate [[wishlist]] item. What I am describing above is an actual *bug* that should be fixed regardless of
+>>>>>> the color you want that poney to be. :p -- [[anarcat]]
I have produced a patch for this issue, but beware, while it appears to fix the problem for me, I have little understanding of perl and the existing code base.
> It looks sound, but I have yet to test it. --[[anarcat]]
+
+>> I reviewed a version of this (possibly rebased or modified or something)
+>> that was in the [[todo/osm_plugin_GeoJSON_popup_patch]] branch,
+>> over on the todo page for that branch. Feel free to move my
+>> review comments for it here if you want to split the discussion. --[[smcv]]
+>> [[!tag reviewed]]
+
+Here's [[smcv]]'s review from [[todo/osm_plugin_GeoJSON_popup_patch]], annotated with my comments. --[[anarcat]]
+
+> It would be good if the commit added documentation for the new feature,
+> probably in `doc/ikiwiki/directive/osm.mdwn`.
+>
+> + my @layers = [ 'OSM' ];
+>
+> You mean `$layers`. `[]` is a scalar value (a reference to an array);
+> `@something` is an array.
+
+>> Or `@layers = ( 'OSM' );`. --[[anarcat]]
+
+>>> Yeah, and then `layers => [@layers]` or `layers => \@layers`
+>>> to turn it into a reference when building `%options`. --s
+
+> + @layers = [ split(/,/, $params{layers}) ];
+>
+> Is comma-separated the best fit here? Would whitespace, or whitespace and/or
+> commas, work better?
+
+>> Why don't we simply keep it an array as it already is? I fail to see the reason behind that change.
+>>
+>>> This seems to be at least partially a feature request for \[[!osm]]:
+>>> "allow individual \[[!osm]] maps to override `$config{osm_layers}`.
+>>> Items in `%config` can be a reference to an array, so that's fine.
+>>> However, parameters to a [[ikiwiki/directive]] cannot be an array,
+>>> so for the directive, we need a syntax for taking a scalar parameter
+>>> and splitting it into an array - comma-separated, whitespace-separated,
+>>> whatever. --s
+>>
+>> This is the config I use right now on http://reseaulibre.ca/:
+>>
+>> ~~~~
+>> osm_layers:
+>> - http://a.tile.stamen.com/toner/${z}/${x}/${y}.png
+>> - OSM
+>> - GoogleHybrid
+>> ~~~~
+>>
+>> It works fine. At the very least, we should *default* to the configuration set in the the .setup file, so this chunk of the patch should go:
+>>
+>> ~~~~
+>> - $options{'layers'} = $config{osm_layers};
+>> ~~~~
+>>
+>> Maybe the best would be to use `$config{osm_layers};` as a default? --[[anarcat]]
+
+> It's difficult to compare without knowing what the values would look like.
+> What would be valid values? The documentation for `$config{osm_layers}`
+> says "in a syntax acceptable for OpenLayers.Layer.OSM.url parameter" so
+> perhaps:
+>
+> # expected by current branch
+> \[[!osm layers="OSM,WTF,OMG"]]
+> \[[!osm layers="http://example.com/${z}/${x}/${y}.png,http://example.org/tiles/${z}/${x}/${y}.png"]]
+> # current branch would misbehave with this syntax but it could be
+> made to work
+> \[[!osm layers="OSM, WTF, OMG"]]
+> \[[!osm layers="""http://example.com/${z}/${x}/${y}.png,
+> http://example.org/tiles/${z}/${x}/${y}.png"""]]
+> # I would personally suggest whitespace as separator (split(' ', ...))
+> \[[!osm layers="OSM WTF OMG"]]
+> \[[!osm layers="""http://example.com/${z}/${x}/${y}.png
+> http://example.org/tiles/${z}/${x}/${y}.png"""]]
+>
+> If you specify more than one layer, is it like "get tiles from OpenCycleMap
+> server A or B or C as a round-robin", or "draw OpenCycleMap and then overlay
+> county boundaries and then overlay locations of good pubs", or what?
+
+>> Multiple layers support means that the user is shown the first layer by default, but can also choose to flip to another layer. See again http://reseaulibre.ca/ for an example. --[[anarcat]]
+
+> + layers => @layers,
+>
+> If @layers didn't have exactly one item, this would mess up argument-parsing;
+> but it has exactly one item (a reference to an array), so it works.
+> Again, if you replace @layers with $layers throughout, that would be better.
+>
+> - $options{'layers'} = $config{osm_layers};
+>
+> Shouldn't the default if no `$params{layers}` are given be this, rather
+> than a hard-coded `['OSM']`?
+
+>> Agreed. --[[anarcat]]
+
+> `getsetup()` says `osm_layers` is `safe => 0`, which approximately means
+> "don't put this in the web UI, changing it could lead to a security flaw
+> or an unusable website". Is that wrong? If it is indeed unsafe, then
+> I would expect changing the same thing via \[[!osm]] parameters to be
+> unsafe too.
+
+>> I put that at `safe=>0` as a security precaution, because I didn't
+>> exactly know what that setting did.
+>>
+>> It is unclear to me whether this could lead to a security flaw. The
+>> osm_layers parameter, in particular, simply decides which tiles get
+>> loaded in OpenLayers, but it is unclear to me if this is safe to change
+>> or not. --[[anarcat]]
+
+> I notice that `example => { 'OSM', 'GoogleSatellite' }` is wrong:
+> it should (probably) be `example => [ 'OSM', 'GoogleSatellite' ]`
+> (a list of two example values, not a map with key 'OSM' corresponding
+> to value 'GoogleSatellite'. That might be why you're having trouble
+> with this.
+
+>> That is an accurate statement.
+>>
+>> This is old code, so my memory may be cold, but i think that the "layers" parameters used to be a hash, not an array, until two years ago (commit 636e04a). The javascript code certainly expects an array right now. --[[anarcat]]
+
+>>> OK, then I think this might be a mixture of a bug and a feature request:
+>>>
+>>> * bug: the configuration suggested by the example (or the default when
+>>> unconfigured, or something) produces "TypeError: mapProjection is null"
+>>>
+>>> * feature request: per-\[[!osm]] configuration to complement the
+>>> per-wiki configuration
+>>>
+>>> --s
+>>>
+>>>> That is correct. --[[anarcat]]
--- /dev/null
+A simple use of this plugin seems to fail now,
+yeilding either a blank map or some javascript errors.
+
+The javascript errors I saw are:
+
+ SyntaxError: syntax error
+ OpenLayers.js (line 476, col 64)
+
+ ReferenceError: OpenLayers is not defined
+ osm.js (line 30, col 1)
+
+--[[Joey]]
+
+> I guess OpenLayers made a backwards-incompatible change... At [reseaulibre](http://wiki.reseaulibre.ca/) it seems we have survived this because we have a local copy of the OpenLayers source code:
+>
+> osm_openlayers_url: http://wiki.reseaulibre.ca/OpenLayers-2.12/OpenLayers.js
+>
+> Try specifying a versionned URL for the source:
+>
+> osm_openlayers_url: http://openlayers.org/api/2.12/OpenLayers.js
+>
+> ... and see if that fixes the problem. Then we can start looking at the [release notes](https://github.com/openlayers/openlayers/blob/master/notes/2.13.md) to figure out what change they did that broke us and upgrade. Or pin the version on our side. Or simply [[switch to something else|todo/replace_openlayers_with_leaflet]]. --[[anarcat]]
--- /dev/null
+ < thm> joeyh: ping
+ < thm> can you update the embedded jquery-ui? (for cve
+ 2010-5312, and/or 2012-6662)
+
+I'll do this next time I spend some time on ikiwiki unless Joey or
+Amitai gets there first.
+
+It doesn't look as though we actually use the vulnerable functionality.
+
+--[[smcv]]
+
+> This is more complicated than it looked at first glance because both
+> jquery and jquery-ui have broken API since the version we embed,
+> and we also ship other jquery plugins for [[plugins/attachment]].
+> Perhaps someone who knows jquery could check compatibility and
+> propose a branch? --[[smcv]]
>> My `templatebody` branch on [[template creation error]] fixes this.
>> --[[smcv]]
+
+>>> [[Merged|done]] --[[smcv]]
--- /dev/null
+I have here a site that uses the po plugin, and recently had this change
+committed to its setup:
+
+<pre>
+ po_slave_languages:
+ - de|Deutsch
+ - fr|Français
+-- ja|日本語
+-- tr|Türkçe
+</pre>
+
+The change was made by the web UI, so it must have involved a site rebuild
+at the time, as that configuration item has `rebuild => 1`.
+
+Some days after that config change, a push caused ikiwiki refresh to fail:
+
+ remote: /home/b-udm/public_html/Discussion/index.ja.html independently created, not overwriting with version from Discussion.ja
+
+Rebuilding the wiki cleared that up, but it seems that po plugin config
+changes can lead to follow-on problems of this sort.
+
+The site still has a `source/index.ja.po`. And it has
+`public_html/index.ja.html`, as well as `public_html/index.ja/index.html`.
+
+--[[Joey]]
--- /dev/null
+Saw a site using the po plugin crash with:
+
+ syntax error in pagespec "\"page(./tips/*)"
+
+I suspect the relevant configuration is this:
+
+ po_translatable_pages: /index or /hugo or /hugo/keys or /about or /archive or /tips
+ or /talks or /imprint or /copyright or /blog or /posts or /law or /quotes or /quotes/*
+
+Config problems in ikiwiki.setup should really not cause the whole site
+build to crash; this can make it hard to recover. --[[Joey]]
--- /dev/null
+On my [blog](http://anarc.at/blog), i have setup a simple calendar and sparkline on the sidebar, similar to [joey's](http://joeyh.name/blog/). Unfortunately, in my case it looks like all posts were done in february, date at which i [converted from drupal](http://anarc.at/blog/2015-02-06-migrating-drupal-ikiwiki/).
+
+This is how i did the directives:
+
+<pre>
+\[[!calendar pages="blog/* and !blog/*/* and !*/Discussion"]]
+
+\[[!calendar pages="blog/* and !blog/*/* and !*/Discussion" month=-1]]
+
+Temps passé entre les articles:
+\[[!postsparkline pages="blog/* and !blog/*/* and !link(foo) and
+!link(unfinished)" max=50
+formula=interval style=bar barwidth=2 barspacing=1 height=13]]
+Articles par mois:
+\[[!postsparkline pages="blog/* and !blog/*/* and !link(foo) and
+!link(unfinished)" max=23 formula=permonth style=bar barwidth=2 barspacing=1 height=13]]
+</pre>
+
+Is it possible the `meta(date)` directives are being ignored by those plugins? --[[anarcat]]
+
+> For background, each page has two dates: creation date (`ctime`, `meta(date)`)
+> and last modification date (`mtime`, `meta(updated)`). postsparkline
+> defaults to showing the ctime but can be configured to use the mtime
+> instead; calendar always uses ctime. So what you're doing *should* work
+> like you expect.
+>
+> The plugins don't get to choose whether they ignore meta(date);
+> the effect of a meta(date) directive in `$page` is to set `$pagectime{$page}`
+> during scanning (overriding whatever was found in the filesystem), and
+> that data structure is what the plugins read from. So the first thing to
+> investigate is whether the ctime
+> [[in your .ikiwiki/indexdb|tips/inside_dot_ikiwiki]] is correct. --[[smcv]]
--- /dev/null
+i'm migrating my blog from drupal, and i wrote this (what i thought was) clever script to tap directly into the mysql db. so far it's working great, and the contents gets imported, but the problem is that the order of posts is all FUBAR.
+
+The blog is here: <http://anarc.at/blog/>
+
+the migration script is here: <http://anarc.at/services/wiki/drupal/drupal2ikiwiki.py>
+
+at the time of writing, the current post is: <http://anarc.at/blog/2007-02-08-la-menace-de-linternet-%C3%A0-deux-vitesses/>
+
+the page itself says it was created 8 years ago. why is it on top? it's as if the `sort=meta(date)` parameter was ignored. if i try to preview the `blog` page, the results i get are basically random.
+
+how do i import dates properly? --[[anarcat]]
+
+Gaaah, nevermind, this is [[done]], i had redirection pages that were messing all this up. sorry for the noise.
+
+Related:
+
+* [[forum/Changing_when_a_page_is_posted/]] - suggests the meta directive, doesn't work for me
+* [[tips/Importing_posts_from_Wordpress/]] - generates commits through git fast-import, also uses meta
+++ /dev/null
-I suppose this isn't technically a bug, but whetever.
-
-I want symbolic links to be rendered as HTTP redirects. For example,
-if we do this,
-
- touch foo.mkdwn
- ln -s foo.mkdwn bar.mkdwn
- git push baz.branchable.com
-
-then the following command should print 302
-
- curl -o /dev/null -s -w "%{http_code}" http://baz.thomaslevine.com/bar/
-
-> An interesting idea, but it conflicts somewhat with wanting symlinks to be
-> treated as the referenced file when it's safe to do so, which would be
-> great for [[todo/git-annex support]], and also good to avoid duplication
-> for files in system-wide underlays.
->
-> Also, I don't think this is possible without help from the web server
-> configuration: for instance, under Apache, I believe the only way to get
-> an HTTP 302 redirect is via Apache-specific `.htaccess` files or
-> system-level Apache configuration.
->
-> In current ikiwiki, you can get a broadly similar effect by either
-> using \[[!meta redir=foo]] (which does a HTML `<meta>` redirect)
-> or reconfiguring the web server. --[[smcv]]
-
->> The CGI spec (http://www.ietf.org/rfc/rfc3875) says that a CGI can cause a redirect by returning a Location: header.
->> So it's possible; desirable (due to your point about conflicting with git-annex support) is a different matter.
-
->>> One of the major things that separates ikiwiki from other wiki software
->>> is that ikiwiki is a wiki compiler: ordinary page-views are purely
->>> static HTML, and the CGI only gets involved when you do something
->>> that really has to be dynamic (like an edit).
->>>
->>> However, there is no server-independent static content that ikiwiki
->>> could write out to the destdir that would result in that redirect.
->>>
->>> If you're OK with requiring the [[plugins/404]] plugin (and a
->>> web server where it works, which I think still means Apache) then
->>> it would be possible to write a plugin that detected symlinks,
->>> stored them in the `%wikistate`, and used them to make the
->>> [[plugins/404]] plugin (or its own hook similar to the one
->>> in that plugin) do a 302 redirect instead of a 404.
->>> Similarly, a plugin that assumed a suitable Apache
->>> configuration with fairly broad `AllowOverrides`,
->>> and wrote out `.htaccess` files, would be a feasible thing
->>> for someone to write.
->>>
->>> I don't think this is a bug; I think it's a request for a
->>> feature that not everyone will want. The solution to those
->>> is for someone who wants the feature to
->>> [[write a plugin|plugins/write]]. --[[smcv]]
> On second thought, this was a bug in ikiwiki, it should be transmitting
> that as a string. Fixed in external.pm --[[Joey]]
+
+>> [[done]] a while ago, then. I've added a regression test now. --[[smcv]]
> [[this related bug|bugs/pythonproxy-utf8_again]]. [[!tag patch]] --smcv
tested and fixed with patch [http://git.pseudorandom.co.uk/smcv/ikiwiki.git/commitdiff/38bd51bc1bab0cabd97dfe3cb598220a2c02550a](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/commitdiff/38bd51bc1bab0cabd97dfe3cb598220a2c02550a) and patch [http://git.pseudorandom.co.uk/smcv/ikiwiki.git/commitdiff/81506fae8a6d5360f6d830b0e07190e60a7efd1c](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/commitdiff/81506fae8a6d5360f6d830b0e07190e60a7efd1c)
+
+> [[done]], pending release --[[smcv]]
--- /dev/null
+The `$srcdir/.ikiwiki/sessions.db` file gets big. Does anything clean it?
+
+ -rw------- 1 jon jon 81M Mar 10 15:41 sessions.db
+
+That's 155,990 records, with the earliest having an atime of
+Sat, 29 Nov 2008 17:33:43 GMT… — [[Jon]]
+
>>> drop the contents of `%scanned` and rely on a single boolean
>>> flag instead.
>>>
+>>>> This is not actually good enough for the templatebody
+>>>> directive, which does in fact need to scan certain pages
+>>>> during the render phase, namely when a page that is rendered
+>>>> due to dependencies uses a template that no other page being
+>>>> rendered in this pass was using. I've reverted this optimization,
+>>>> to fix [[wrong rendering of templatebody]], and applied a more
+>>>> limited version which only optimizes rebuilds (the worst case
+>>>> of this memory consumption). --[[smcv]]
+>>>
>>> `%scanned` is likely to be no larger than `%rendered`, which
>>> we already track, and whose useful lifetime does not overlap
>>> with `%scanned` now. I was tempted to merge them both and call
>>>> decide whether to scan the template page, but would be generally more
>>>> robust for future plugin writing.
>>>>
+>>>>> At the moment templatebody really does need to re-scan templates in
+>>>>> the render phase, unfortunately. Not scanning in the render phase
+>>>>> seems to be precisely how [[wrong rendering of templatebody]]
+>>>>> happened. --s
+>>>>
>>>> **addendum**: if the new phase state is used to create warnings/errors
>>>> about improper ikiwiki api use of plugins (which is something i'd
>>>> advocate), that should likewise warn if `add_link` actually adds a link in
>>>> the render phase. such a warning would have helped spotting the
>>>> link-related [[template evaluation oddities]] earlier. --[[chrysn]]
+
+>>>>> [[Merged|done]] --[[smcv]]
--- /dev/null
+In my wiki I have a template page under `/templates` that looks like this:
+
+ \[[!inline
+ pages="<TMPL_VAR PAGE>/* and !<TMPL_VAR PAGE>/*/*"
+ show=0
+ template=titlepage
+ feeds=no
+ sort=title]]
+
+ \[[!trailitems
+ pages="<TMPL_VAR PAGE>/* and !<TMPL_VAR PAGE>/*/*"
+ sort=title]]
+
+I tested this page with many variations and by trial and error reached a conclusion that
+when using `trailitems` with a path that contains TMPL_VAR, or using the inline directive
+with `trail=yes` and a `pages` that contains TMPL_VAR, the trail plugin (or something else?)
+seems to not resolve the TMPL_VAR and ikiwiki fails to compile the wiki, and I get this:
+
+ syntax error in pagespec "<TMPL_VAR PAGE>/* and !<TMPL_VAR PAGE>/*/*"
+
+on the command line.
+
+Until I get feedback here I'll try to look at the source and see if I figure it out.
+My ikiwiki version: 3.20130904
+
+Huge thanks in advance!
+
+--[[fr33domlover]]
+
+> These templates have traditionally had a problem: they need to be
+> simultaneously a valid page in their own right, and a valid page after
+> template substitutions.
+>
+> In newer ikiwiki versions, the [[ikiwiki/directive/templatebody]]
+> directive [[solves this|done]] ... but your ikiwiki is nearly a year
+> and a half old, so you don't have recent bugfixes.
+>
+> You might be able to get somewhere by abusing the two intersecting
+> markup languages, something like this:
+>
+> <TMPL_IF FALSE>
+> \[[!if test="included() and !included()" then="""
+> </TMPL_IF>
+> ... real content here: inline, trailitems etc. ...
+> ... just don't use a triple quote mark ...
+> <TMPL_IF FALSE>
+> """]]
+> </TMPL_IF>
+>
+> Alternatively, if you have direct commit access and don't need
+> to be able to perform web-based edits on your template, I think
+> renaming your template from `foo.mdwn` to `foo.tmpl` would bypass
+> this while still working as a template. --[[smcv]]
>>>> and *something* when there is ambiguity is ok for now; especially, it's
>>>> not up to the autoindex branch to come up with a solution to the general
>>>> problem. --[[chrysn]]
+
+>>>>> [[Merged|done]] --[[smcv]]
>> I suppose what I would like would be to not need to use a `<base href>` in searching at all.
>> --[[KathrynAndersen]]
+
+>>> `<base href>` is *not* required to be absolute in HTML5, so when
+>>> `html5: 1` is used, I've changed it to be host-relative in most cases.
+>>> I think that at least partially addresses this bug report,
+>>> particularly if we [[todo/generate HTML5 by default]] like I've suggested.
+>>>
+>>> The `<base>` is there so we can avoid having to compute how to
+>>> get to (the virtual directory containing) the root of the wiki from
+>>> `ikiwiki.cgi`, which might well be somewhere odd like `/cgi-bin/`.
+>>> I think there are probably other things that it fixes or simplifies.
+>>> --[[smcv]]
--- /dev/null
+If the TZ environment variable is unset *and* the 'timezone' entry in setup is unset, then libc defaults to /etc/localtime which is all well and good, but it causes it to stat() that file for every strftime or similar. This results in somewhere in the region of 300k calls to stat(/etc/localtime) for my 600 page ikiwiki and introduces appreciable slowness into builds.
+
+If either of TZ or timezone is set, then instead it is believed and /etc/localtime is not repeatedly stat()d, even if TZ or timezone is set to ":/etc/localtime".
+
+A conversation with smcv on IRC suggested:
+
+> `it just needs "elsif (-e /etc/localtime) { $ENV{TZ} = ':/etc/localtime'; } else { $ENV{TZ} = 'GMT'; } or some such`
+
+relating to the processing of `$ENV{TZ}` and `$config{timezone}` in `Ikiwiki.pm`
+
+> should be [[done]] in the next version >= 3.20150301 --[[smcv]]
--- /dev/null
+I recently moved from Trisquel's version of ikiwiki (from 2013, the same one of
+Debian wheezy backports) to the version 5.20141016 which I built from git, by
+pulling the tag. One of the new things I have now is the templatebody
+directive.
+
+> Not directly relevant to this bug, but if you want the latest ikiwiki release
+> for a Debian derivative, you can fetch it from Debian unstable (normally)
+> or Debian experimental (during the Debian release freeze, e.g. now) -
+> the correct way is to get the (signed) source package with `dget`
+> or similar, check the GPG signature (which should be from me or Joey), and
+> rebuild it for your distribution. Just getting the binary `.deb` from Debian
+> is a little more risky, depending how far your distribution has diverged from
+> Debian, but in the case of ikiwiki it should usually work fine in practice.
+> --[[smcv]]
+
+I started using it in my templates, and I suddenly notice strange behavior: one
+of my templates renders as the *rest* of the template page when used, instead of
+the body part. In other words, it renders exactly the part it should hide (the
+description) and ignores the body itself (which is inside \[[!templatebody]]).
+
+> With a hint from [[kjs]] on [[templates/discussion]], I was able to reproduce
+> this bug. It seems to have been caused by an optimization: please try applying
+> [commit 5fd863b5](http://source.ikiwiki.branchable.com/?p=source.git;a=commitdiff;h=5fd863b5b05449669ec56c6798d836e3302386e2)
+> to your Render.pm. A follow-up commit partially brings back the optimization
+> (only for rebuilds). So I think this is [[done]]? (remove that link if
+> not) --[[smcv]]
+
+When I manually re-generate the wiki, it suddenly renders right. As soon as the
+page gets rebuilt automatically after some git push, it renders the wrong way.
+
+> Where did you install the newer ikiwiki? `/usr/local`? Somewhere else?
+>
+> It sounds to me as though manual re-generation is using ikiwiki ≥ 3.20140916
+> with the `templatebody` directive enabled, but the git hook is using
+> ikiwiki < 3.20140916 and/or has the `templatebody` disabled. This might
+> result from having a different `PERL5LIB` environment variable in
+> the two situations, for instance.
+>
+> It might help to debug this if you edit your older and newer ikiwiki's
+> `IkiWiki.pm`, `IkiWiki/Render.pm` and/or `IkiWiki/Plugin/templatebody.pm`
+> so they do `print STDERR "loaded (old/new) (whatever).pm"` at some fairly
+> early stage - I would suggest `getsetup()`, `refresh()` and `import()`
+> respectively. --[[smcv]]
+
+>> Yes, I installed in `/usr/local`, but I also removed the deb package. So I
+>> only have 1 ikiwiki version now.
+>>
+>> I also noticed the following behavior. I created a set of pages, each of them
+>> containing several occurences of a certain template. Then I created another
+>> page, which inlines all of them. All good. Then, I edited that main page to do
+>> different sorting (using inline directive's sort option). After comitting the change,
+>> suddenly all the inlined pages have the templates inside them contain the
+>> template info instead of template body. How is that even related to the minor
+>> change I did - change the sorting? :-P
+>>
+>> I'll look at the templatebody.pm file and try debug prints. I hope I can see them in
+>> the git push output, because rendering the wiki from command line doesn't have this
+>> problem.
+>>
+>> One more thing, my setup uses the pingee plugin. When doing a git push, it browses to
+>> the wiki page using wget with `?do=ping` parameter, and then ikiwiki responds by rebuilding
+>> the necessary pages.
+>>
+>> Thanks for the pointers.
+>>
+>> --[[fr33domlover]]
+
+
+[[This|http://www.rel4tion.org/languages/haskell/]] is the page, and
+[[this|http://www.rel4tion.org/templates/wikitag/]] is a template it uses. Right
+now the template is rendered on that page exactly like the template page itself.
+Both display the description text, and the \[[!templatebody]] content isn't
+displayed at all.
+
+If I debug it myself and find something relevant, I'll update here.
+
+-- [[fr33domlover]]
available to do consulting or other work on ikiwiki.
* [[Joey]] wrote ikiwiki. He is available for consulting on a part-time basis.
+* [[Amitai Schlair]] (a.k.a. [[schmonz]]) wrote [[rcs/cvs]],
+ [[plugins/rsync]], and [[todo/fancypodcast]], among other things.
+ Contact him via [his website](http://www.schmonz.com/).
Feel free to add yourself to this list.
* [[tips/convert_moinmoin_to_ikiwiki]]
* [[tips/convert_blogger_blogs_to_ikiwiki]]
* [[tips/Movable_Type_to_ikiwiki]]
+* [[tips/convert_textpattern_to_ikiwiki]]
+* [[tips/convert_drupal_to_ikiwiki]]
In addition, [[JoshTriplett]] has written scripts to convert Twiki sites, see [his page](/users/JoshTriplett) for more information.
+
+Also consider using [jekyll-import](http://import.jekyllrb.com/), which imports into [Jekyll](jekyllrb.com), granted, but it already supports a bunch of CMSes and the markdown syntax of Jekyll may just be compatible with your ikiwiki.
The [openSUSE Build Service](http://software.opensuse.org/search?baseproject=ALL&p=1&q=ikiwiki) has packages for openSUSE
-A [PKGBUILD for Arch Linux](http://aur.archlinux.org/packages.php?ID=12284) is in the AUR.
+A [PKGBUILD for Arch Linux](https://aur.archlinux.org/packages/ikiwiki/) is in the AUR.
Or, run this command to set up a blog with ikiwiki.
- % ikiwiki -setup /etc/ikiwiki/auto-blog.setup
+ % ikiwiki --setup /etc/ikiwiki/auto-blog.setup
Some additional configuration you might want to do, if not using
`auto-blog.setup`:
--- /dev/null
+This is the second post to this example blog. To add new posts, just add files to the posts/ subdirectory, or use the web form.
--- /dev/null
+I've made the following ikiwiki tweaks which now reside in separate branches
+of my online git repo.
+
+* Album plugin: Image metadata - Populate album with metadata extracted from
+image using Image::ExifTool. Also generate tags and osm waypoint if gps data
+is available.
+* Album plugin: New albumpreview.tmpl with corresponding changes to album.pm
+that creates a thumbnail that links to an album rather than an image. Useful
+for creating thumbnailed indexes of albums.
+* Img plugin: sharpen images when resampling. (also save interlaced jpg's)
+* My kalleswork.net-current branch contains further tweaks, themes and
+crazyness that's likely only of interest to me.
+
+These are all of very low quality as I've just hacked about with no knowledge
+of the codebase or indeed coding (even less Perl). In spite of this they now
+seem to work! They should all be options or have options in the config but
+I've not gotten around to figuring that out yet.
+
+I'd like to share them as a prod to someone with actual skills to look at them
+if they find the features interesting. I'm hesitant to place my repo in the
+[[git]] list and tagging the various feature off with [[templates/gitbranch/]]
+because of the pick axe coding going on. Should I do this regardless of quality
+or is there a better way to share it?
+
+/[[/users/kjs]]
+
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkickHAzX_uVJMd_vFJjae6SLs2G38URPU"
+ nickname="Kalle"
+ subject="Config"
+ date="2015-02-07T12:48:14Z"
+ content="""
+Turns out making the features configurable was easy enough.
+
+/[[users/kjs]]
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="comment 2"
+ date="2015-02-09T23:04:08Z"
+ content="""
+i'd say just share it normally.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkickHAzX_uVJMd_vFJjae6SLs2G38URPU"
+ nickname="Kalle"
+ subject="git branch now added"
+ date="2015-02-18T21:58:48Z"
+ content="""
+I've added the branches using the git template where I guessed it was appropriate.
+"""]]
--- /dev/null
+In [[plugins/write|plugins/write]] I am told that
+
+> The `%destsources` hash records the name of the source file used to
+> create each destination file. The key is the output filename (ie,
+> "foo/index.html"), and the value is the source filename that it was built
+> from (eg, "foo.mdwn").
+
+but that's not what I see happening. I see a hash that maps the output
+filename (eg., "foo/index.html") to a source _page_ name (eg., "foo").
+
+I need an additional visit to `%pagesources` to get from "foo"
+to "foo.mdwn".
+
+It seems to be consistent and happily working that way, so maybe the
+description in [[plugins/write]] is the only mistake. Have I missed something?
+
+-- [[jcflack]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 1"
+ date="2014-09-23T07:55:24Z"
+ content="""
+You were correct, thanks. I've fixed it.
+"""]]
+++ /dev/null
-I have completely overhauled the Asciidoc plugin for ikiwiki that was created by [[Karl Mowson|http://www.mowson.org/karl/colophon/]]. The source can be downloaded from my [[Dropbox|http://dl.dropbox.com/u/11256359/asciidoc.pm]].
-
-### Features
-
-* Uses a filter hook to escape WikiLinks and Directives using Asciidoc `+++` passthrough macros, to avoid them being processed by Asciidoc. This behavior is configurable in the wiki setup file.
-* Adds a preprocessor directive 'asciidoc' which allows extra Asciidoc command-line options to be passed on a per-page basis. Each parameter name is the option name (the leading `--` will be inserted automatically), and the parameter value is the option value. Currently, only 'conf-file' and 'doctype' are allowed (or even useful).
-* Sets the page title from the first line in the Asciidoc file using a meta directive. This behavior is configurable in the wiki setup file.
-* Searches for an Asciidoc configuration file named the same as the wiki if none is specified in the setup file.
-* Asciidoc configuration files are stored in the wiki. They should be named `._conf` to avoid publishing them.
-
-### Problems
-
-* Escaping Directives is not optimal. It prevents markup from being used in Directives, and the passthrough macros have to include extra spaces to avoid having directives that return an empty string collapse to `++++++`. In addition, I had to borrow the regexps from the Ikiwiki source code; it would be nice if this were available as part of the API.
-* Handling of Asciidoc errors is suboptimal; they are simply inserted into the returned page. This could be fixed in Perl 5.12 by using the run_forked() in IPC::Cmd.
--- /dev/null
+During my adventures tweaking the album plugin to read image metadata I've
+encountered some unexpected behavior. My tweaks populate the [[tag]] from the
+xmp:subject tag in the image and the file is written to the transient
+underlay.
+
+The tag links get created but the corresponding /tag/* page isn't auto created
+until I run a full --rebuild. Checked in pages appear to get instantly
+autotagged and their tag pages created.
+
+There is some discussion about autotagging and transients on this site. But I
+can't quite descipher what is now the expected behaviour with autotagging and transients.
+
+Anyone able to explain if the above scenario is as it should be? (for whatever
+reason) --[[kjs]]
+
+
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 1"
+ date="2015-02-18T23:55:19Z"
+ content="""
+I think I can see why this wouldn't work: ikiwiki calculates the set of
+potential \"autofiles\" (automatically-created pages, normally in the transient
+underlay), once, then creates them. It does not check after it has created
+them to see whether it should create any more for some reason. I'm not sure
+whether it should or not.
+
+One possible workaround would be for your tag-extraction code to call
+`IkiWiki::Plugin::tag::gentag` itself, at the same time it calls
+`add_autofile` for its own automatically-created page.
+
+Having metadata like tags in transient pages seems a somewhat precarious
+situation anyway: your wiki is structurally different, depending whether the
+transient pages have turned up or not. That doesn't seem ideal?
+
+Whenever I've looked into making album extract metadata from photos, my idea
+had been that it would generate \"real pages\" that get committed to git, so that
+the metadata gets copied out of the opaque binary with no useful diff, that is not
+necessarily even in the VCS (I use an underlay for photos), and into an editable
+text format in git with useful diffs and history.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkickHAzX_uVJMd_vFJjae6SLs2G38URPU"
+ nickname="Kalle"
+ subject="Precarious situation"
+ date="2015-02-19T11:13:58Z"
+ content="""
+Thanks for the gentag tip will try it out.
+
+About transients being precarious. In my workflow I like the metadata to be regenerated if the image changes. Generally I don't want my local image library to diverge from the published one and I'd like to avoid duplicating efford changing the metadata in two places. The simplest way of doing this is to upload images with changed metadata again or use cli exif tools with the server mounted as sshfs copying only metadata across to the image files. Editing mdwns to match the exif data is much more complicated and time consuming.
+
+The brilliant thing with the transient would be that I could check in the files I don't want auto updated, cases where the web should diverge from my local files, whilst the transients would just get replaced. A magic solution to a potentially complex problem.
+
+Unfortunately there is a catch with the album lugin as it fails to update the album if I change or add images to the underlay. It may build the files but it then doesn't recognize the files it has created requiring a rebuild. By touching the file with the album directive before changing any images and committing / pushing the directive file the problem is mitigated. Forgetting this have however caused a lot of rebuilds :)
+
+--[[kjs]]
+
+
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkickHAzX_uVJMd_vFJjae6SLs2G38URPU"
+ nickname="Kalle"
+ subject="gentag"
+ date="2015-02-19T22:02:32Z"
+ content="""
+Gentag solved the tag page autocreation problem. Thanks again for the tip!
+--[[kjs]]
+"""]]
--- /dev/null
+I like the idea of having some common configuration (let's say of plugins) in my main server (with cgi and websetup enabled) as well as on other repositories clones and copies. In the ideal situations only some dir settings should be different (src, dest, lib, etc.) in the different setup files.
+
+Managing two setup files (one for the server and one for the laptop) is however a pain since each time a change is made on the server (through websetup for instance) one has to manually integrated it (after being made aware of it) on each clone setup file and vice-versa.
+
+What is a good way to share such settings (without having to copy them twice or more) ?
+
+I tried to discuss that same point in [[laptop_wiki_with_git discussion|tips/laptop_wiki_with_git/discussion]].
+
+--[[bbb]]
--- /dev/null
+How can I add an "older posts" link to my blog? I understand trail can be used for moving between individual posts, but how do I move between pages of blog posts?
+
+Thanks, Jamie
--- /dev/null
+I got the following error related to `Encode.pm` when I build my Ikiwiki instance
+
+
+ $ ikiwiki --setup mysite.setup
+ 'git pull --prune origin' failed: at /usr/pkg/lib/perl5/vendor_perl/5.20.0/IkiWiki/Plugin/git.pm line 220.
+ Cannot decode string with wide characters at /usr/pkg/lib/perl5/5.20.0/darwin-thread-multi-2level/Encode.pm line 175.
+
+
+Any idea how to fix it?
+
+I installed ikiwiki via pkgsrc on OS X 10.10.2:
+
+ $ ikiwiki --version
+ ikiwiki version 3.20141016
+ $ uname -a
+ Darwin qazwsx.local 14.1.0 Darwin Kernel Version 14.1.0: Mon Dec 22 23:10:38 PST 2014; root:xnu-2782.10.72~2/RELEASE_X86_64 x86_64
+ $ which perl
+ /usr/bin/perl
+ $ perl --version
+
+ This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
+ (with 2 registered patches, see perl -V for more detail)
+ ...
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="potential patch"
+ date="2015-01-29T19:33:23Z"
+ content="""
+This sounds like an issue that I hoped we'd already fixed, but
+[Debian bug 776181](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776181) points
+out one other situation where it can happen. Could you try the patch from that bug and
+see whether that fixes it for you too?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlobQ5j7hQVIGkwMWW3yKB_DWqthJcpnsQ"
+ nickname="Qi"
+ subject="Additional advice?"
+ date="2015-01-29T20:07:11Z"
+ content="""
+I manually modified `/usr/pkg/lib/perl5/vendor_perl/5.20.0/IkiWiki/CGI.pm` removing the three lines
+
+ # call decode_utf8 on >= 5.20 only if it's not already decoded,
+ # otherwise it balks, on < 5.20, always call it
+ if ($] < 5.02 || !Encode::is_utf8($octets)) {
+
+and adding a new line
+
+ if (!Encode::is_utf8($octets)) {
+
+Then I ran ikiwiki --setup mysite.setup and see the following messages:
+
+ ...
+ Aborting
+ 'git pull --prune origin' failed: at /usr/pkg/lib/perl5/vendor_perl/5.20.0/IkiWiki/Plugin/git.pm line 220.
+ Cannot decode string with wide characters at /usr/pkg/lib/perl5/5.20.0/darwin-thread-multi-2level/Encode.pm line 175.
+
+
+Any ideas?
+
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 2"
+ date="2014-10-05T22:56:56Z"
+ content="""
+In git master, if `$config{html5} = 1` then the `<base>` URL
+will usually be host-relative or protocol-relative (`/wiki/` or
+`//example.com/wiki/`) which reduces the need for that option.
+
+This is not yet available in a release, and is still subject to
+change.
+
+I still don't know what your wiki's configuration is, because you
+never told us the settings I asked for (`cgiurl` and `url`), so
+I don't know whether this will help you.
+"""]]
--- /dev/null
+From the latest homebrew, it prompts the following seearch result:
+
+ $ brew search ikiwiki
+ No formula found for "ikiwiki".
+ Searching pull requests...
+ Closed pull requests:
+ Add ikiwiki (https://github.com/Homebrew/homebrew/pull/5355)
+ Add ikiwiki formula (https://github.com/Homebrew/homebrew/pull/5358)
+
+Reading the messages on those two GitHub links, it seems the request of adding Ikiwiki into Homebrew is rejected for too much Perl dependencies but an "HomeBrew-Alt" is possible. Does anyone know if Ikiwiki is added to this "HomeBrew-Alt"? How to install Ikiwiki on Mac OS X using "Homebrew-Alt"? I'm desperate in getting Ikiwiki to work on my Mac computers.
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlcaGfdn9Kye1Gc8aGb67PDVQW4mKbQD7E"
+ nickname="Amitai"
+ subject="comment 1"
+ date="2014-10-14T22:41:59Z"
+ content="""
+I don't use Homebrew and can't speak for it, but have you tried the suggestion in [[tips/ikiwiki on mac os x]]?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ ip="91.65.196.164"
+ subject="comment 2"
+ date="2014-10-15T12:33:28Z"
+ content="""
+I second that request. Although it is possible to install ikiwiki like amitai suggests, it would be a great convenience to be able to just \"brew install ikiwiki\".
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlcaGfdn9Kye1Gc8aGb67PDVQW4mKbQD7E"
+ nickname="Amitai"
+ subject="comment 3"
+ date="2014-10-15T13:43:24Z"
+ content="""
+Maybe someone reading this is able to act on your request. In case that's not true, I'd suggest investigating a few questions on the Homebrew side of things:
+
+7. From Homebrew's 2011 point of view, why did flangy consider [\"large number of perl dependencies\"](https://github.com/Homebrew/homebrew/pull/5358) to be a basis for rejection?
+7. From Homebrew's 2014 point of view, is that rationale still considered valid?
+7. If so, then does Homebrew make it easy for users to install formulae from repositories other than the official one?
+7. If so, then is there an existing non-official repository that either contains an ikiwiki formula or would be willing to accept one?
+
+Since I already use pkgsrc for all my packages (not only ikiwiki) on all my systems (not only OS X), I'm unmotivated to pursue this line of inquiry for possibly zero benefit. If you're already invested in Homebrew, and happy about it, then perhaps it's worth it to you to get this figured out.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ ip="91.65.196.164"
+ subject="comment 4"
+ date="2014-10-15T18:49:16Z"
+ content="""
+I asked the homebrew people on freenode. Here's what I got:
+
+My Question: (Hopefully) quick question: There has been an interest in having a brew formula for the static wiki generator ikiwiki (see http://ikiwiki.info/forum/Can_someone_add_Ikiwiki_in_Homebrew__63__/) in 2011 a pull request for that (https://github.com/Homebrew/homebrew/pull/5358) was closed due to too many perl dependencies. It was suggestet, that one uses homebrew-alt instead. Since homebrew-alt doesn’t seem to exist (anymore), I was curious what one can do to move this request forward.
+
+Answer: You can always host a formula yourself without having it accepted into homebrew core, using the tap mechanism. We have some formulas for packages written in Python where we explicitly fetch and install the dependencies into the parent formula's prefix; check out ansible.rb for an example. If you can do something like that for ikiwiki's dependencies, that would probably go through.
+
+I'll look into it, but have to admit, that I have very little time right now (and am also not sure, if I am able to produce a working brew formula…). But maybe somebody else now has enough info to get startet.
+"""]]
--- /dev/null
+Cross posting on Stackoverflow http://stackoverflow.com/questions/28709936/perl-error-related-to-encode-pm
+
+I have the following software:
+
+Ubuntu Linux 14.04 LTS
+
+ $ uname -a
+ Linux XXX 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
+
+
+Perl 5.18:
+
+ $ perl -version
+
+ This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
+ (with 41 registered patches, see perl -V for more detail)
+
+and Encode.pm 2.49:
+
+ $ head -n 10 /usr/lib/perl/5.18/Encode.pm
+ #
+ # $Id: Encode.pm,v 2.49 2013/03/05 03:13:47 dankogai Exp dankogai $
+
+
+When I use [ikiwiki](https://packages.debian.org/experimental/ikiwiki), which is a package using Encode.pm, I got the following error:
+
+ $ ikiwiki --setup ~/wiki.setup
+ Cannot decode string with wide characters at /usr/lib/perl/5.18/Encode.pm line 176.
+
+Lines 166 - 180 of Encode.pm reads:
+
+ sub decode($$;$) {
+ my ( $name, $octets, $check ) = @_;
+ return undef unless defined $octets;
+ $octets .= '';
+ $check ||= 0;
+ my $enc = find_encoding($name);
+ unless ( defined $enc ) {
+ require Carp;
+ Carp::croak("Unknown encoding '$name'");
+ }
+ my $string = $enc->decode( $octets, $check );
+ $_[1] = $octets if $check and !ref $check and !( $check & LEAVE_SRC() );
+ return $string;
+ }
+
+Does any kind soul have idea how to fix this issue?
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlobQ5j7hQVIGkwMWW3yKB_DWqthJcpnsQ"
+ nickname="Qi"
+ subject="Fix"
+ date="2015-02-25T05:43:26Z"
+ content="""
+I fixed it by adding
+
+~~~
+sub decode($$;$) {
+ my ( $name, $octets, $check ) = @_;
+ return undef unless defined $octets;
+ return $octets if Encode::is_utf8($octets); # add this check
+ $octets .= '';
+~~~
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="looks like Debian#776181"
+ date="2015-03-01T12:55:20Z"
+ content="""
+This looks like [Debian bug #776181](https://bugs.debian.org/776181), although I'm
+surprised you're seeing it on such an old version of Encode. What version of IkiWiki
+is this?
+
+Please try reverting the change you made to Encode.pm, and making the change to IkiWiki
+shown on that bug report instead. (If you don't know how to read diffs, the short version
+is: delete the lines prefixed with \"-\", add the lines prefixed with \"+\".)
+
+I've made the same change in ikiwiki git master, so this should be fixed in the
+next release (>= 3.20150301).
+"""]]
--- /dev/null
+I try to merge my existing blog with my wiki. I just started the process and ran into a problem:
+
+I created a blog in my ikiwiki install and wanted to import my blogposts, that are just a bunch of (octopress) text files. Of course, ikiwiki can read them, etc. Here's my problem: When adding an old post to git, the imported blog article in my wiki is shown to be posted today. This is not the desired behaviour, since I have published this article a while before. The only way to change this I found was to fiddle around with the commit where I added the post. A way to this is described in [this stackoverflow answer](http://stackoverflow.com/a/454750).
+
+This works. Well, almost.
+
+For some weird reason the "posted" time is off one hour. Let's say, I published an article Fri Mar 2 01:30:00 2012. I corrected the commit as outlined by the link I provided. Ikiwiki will show that the article got posted at Fri Mar 2 00:30:00 2012. The only reason I can think of, that could produce this error, is DST. Has anyone an idea how to correct this error? Did I do something wrong or did I overlook something?
+
+Any help is appreciated!
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 1"
+ date="2014-09-24T07:27:38Z"
+ content="""
+It does sound as though you have some sort of DST issue going on.
+Did you specify the time zone taking into account DST
+(e.g. if you are in USA Eastern time (UTC-05:00) and you wrote
+a blog post in summer, you'll want to use -0400)?
+
+You don't need to alter the git commit dates, you can use
+something like \[[!meta date=\"2014-09-24 08:26:05+0100\"]]
+which takes precedence over the commit date from git.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ ip="141.23.120.160"
+ subject="comment 2"
+ date="2014-09-24T13:19:58Z"
+ content="""
+Thank you for pointing out the meta directive to me! This was exactly what I was looking for. :) Also, you were right, I didn't use the right offset. Everything works now.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 2"
+ date="2014-10-05T22:55:01Z"
+ content="""
+I have added a new `$config{reverse_proxy}` option in git master
+which applies the necessary hard-coding.
+
+Also in git master, if `$config{html5} = 1` then the `<base>` URL
+will usually be host-relative or protocol-relative (`/wiki/` or
+`//example.com/wiki/`) which reduces the need for that option.
+
+These are not yet available in a release, and are still subject to
+change.
+"""]]
--- /dev/null
+Hey everyone, I have the following problem: I am writing a German Wiki and therefore use umlauts (ä,ö,ü…) quite often in my writing. When I am not using the browser for editing the wiki (or writing comments) everything is fine. Since I want other poeple to be able to post comments or use the discussion pages I need to get the encoding to work. Here is what is happening when I'm trying to edit a discussion page:
+
+* Writing the comment: ![](http://f.cl.ly/items/2F3u36261z2N141T343E/Screen%20Shot%202014-10-12%20at%2017.54.06.png)
+* Checking the comment via the "preview": ![](http://f.cl.ly/items/3O1c2G011u2x0E2s0o3q/Screen%20Shot%202014-10-12%20at%2017.54.17.png)
+* Pressing "cancel" since umlauts don't work: ![](http://f.cl.ly/items/141P2M1v323g1J2H3220/Screen%20Shot%202014-10-12%20at%2017.54.30.png)
+
+As I said, when I'm not posting from the browser everything works fine. Here's what I've checked/done to prevent the encoding error:
+
+* I put "export LANG=de_DE.UTF-8" and "export LANGUAGE=de_DE.UTF-8" in my .bashrc
+* I set "locale:" to "de_DE.UTF-8" in my ikiwiki .setup-File
+
+What else could there be wrong? What else could I try to solve the problem?
+
+Any ideas are appreciated! Thanks in advance!
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlcaGfdn9Kye1Gc8aGb67PDVQW4mKbQD7E"
+ nickname="Amitai"
+ subject="fixed in a recent release, I think"
+ date="2014-10-12T16:40:17Z"
+ content="""
+What version of ikiwiki are you running? I believe this was fixed in [[news/version 3.20140916]], with the patch from [[bugs/garbled non-ascii characters in body in web interface]].
+
+Related reading:
+
+- [[forum/\"Error: cannot decode string with wide characters\" on Mageia Linux x86-64 Cauldron]]
+- [[forum/build error: Cannot decode string with wide characters]]
+- [[todo/should use a standard encoding for utf chars in filenames]]
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ ip="91.65.196.164"
+ subject="comment 2"
+ date="2014-10-17T17:23:12Z"
+ content="""
+I just tested replacing my ikiwiki install with a new one (tar from today) and still get the same error. I read up on the links you provided, but it seems to me that I can't really do anything with that info (other than updating my ikiwiki that is…). Any other ideas?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="JohnGoerzen"
+ subject="Still seeing this"
+ date="2015-09-28T16:22:21Z"
+ content="""
+I'm running 20141016.2 on Debian jessie and I'm seeing this. From what I can tell, all known bugs around this should be fixed. Any ideas?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 4"
+ date="2015-10-01T19:48:38Z"
+ content="""
+This could be [#786586](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786586) and [#786587](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786587), which have a matching symptom. (The two Debian bugs are aspects of the same thing.)
+
+Workaround: remove libcgi-pm-perl and use the older CGI.pm in Perl.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="spalax"
+ ip="82.233.196.200"
+ subject="Plugin compile"
+ date="2014-10-04T10:37:16Z"
+ content="""
+Hello,
+I enventually wrote a plugin that might fit your need: [[plugins/contrib/compile]].
+
+In setup file, you specify which command is to be applied to files. For instance, to convent `odt` files to `pdf`, you can use:
+
+ compile_filetypes = '
+ \"odt\": {
+ \"build\": \"libreoffice --headless --convert-to pdf %{srcname}s\",
+ \"destname\": \"%{basename}s.pdf\"
+ }
+ }'
+
+Then, in your wiki pages, you can use `\[[!compile files=\"foo.odt\"]]`. This will convert file to pdf, and render as a link to the `pdf` file. If option `inline` is set, you can also simply use a wikilink `\[[foo.odt]]`, which will have the same effect.
+
+The only problem I see is that when linking several times to the same file, it will be compiled several times. I marked it as [[a feature request|http://atelier.gresille.org/issues/420]] to the plugin.
+
+Regards,
+-- [[Louis|spalax]]
+
+"""]]
--- /dev/null
+Has anyone experimented with pulling commits from an external ikiwiki into your own?
+
+I ask because I've just read a great [article about Federated Wikis](http://hapgood.us/2014/11/06/federated-education-new-directions-in-digital-collaboration/ "Federated Education: New Directions In Digital Collaboration").
+
+Anyway, the author opens with the idea that good ideas are often lost or delayed for years because of we don't communicate as well as we could. He presents an example: Arthur C. Clarke speculating about GPS over a decade before Sputnik.
+
+He goes on to present the idea of a federation of wikis. Note: 'federation' is used as a technical term here: cf. email or Google Wave.
+
+I for one am persuaded by his article, because wiki federation is an idea I've had before!
+
+With ikiwiki, couldn't it work just by adding external wikis as remotes and selectively merging from them?
+
+Cheers,
+
+--Dave
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkwqKsWfFCk-NK99S77R2v1JorVCnpzXUA"
+ nickname="Dave"
+ subject="comment 1"
+ date="2014-11-07T16:25:57Z"
+ content="""
+Apparently the author of the article uses this: https://github.com/WardCunningham/Smallest-Federated-Wiki
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="anarcat"
+ subject="comment 2"
+ date="2014-11-20T03:16:50Z"
+ content="""
+you should probably look at the [[tips/distributed_wikis/]] page, which details a few of those scenarios. --[[anarcat]]
+"""]]
--- /dev/null
+I set up a local Ikiwiki following the instruction on [manually installing](https://ikiwiki.info/setup/byhand/). However, when I Git push, I see the following
+
+
+ $ git push
+ Counting objects: 22, done.
+ Delta compression using up to 4 threads.
+ Compressing objects: 100% (22/22), done.
+ Writing objects: 100% (22/22), 2.71 KiB | 0 bytes/s, done.
+ Total 22 (delta 14), reused 0 (delta 0)
+ remote: Died at /usr/share/perl5/IkiWiki/CGI.pm line 491.
+ remote: Content-type: text/html
+ remote:
+ remote: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ <skip>
+
+
+where the content at the bottom of the console printout is actually the content of my `rootdir/index.mdwn`. And the destination, i.e. the deployed web documents is not automatically updated reflecting the commits I pushed to Git repo. Any idea?
+
+I'm using ikiwiki version 3.20150107 on Ubuntu Linux 14.0.4 LTS.
+
+
--- /dev/null
+[[!comment format=mdwn
+ username="cbaines"
+ subject="comment 1"
+ date="2015-03-01T10:45:47Z"
+ content="""
+From looking at line 491 of CGI.pm, the returned content should include some information about the error that occurred, is this the case?
+
+Otherwise, what happens when you try to build the wiki manually?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlobQ5j7hQVIGkwMWW3yKB_DWqthJcpnsQ"
+ nickname="Qi"
+ subject="comment 2"
+ date="2015-03-10T06:01:06Z"
+ content="""
+Building manually seems to generate a functioning output web site. I can't see any obvious error in the result or the console output when running ikiwiki.
+
+The complete console output for running `git push` from the source dir is:
+ Counting objects: 33, done.
+ Delta compression using up to 4 threads.
+ Compressing objects: 100% (32/32), done.
+ Writing objects: 100% (33/33), 11.62 KiB | 0 bytes/s, done.
+ Total 33 (delta 15), reused 0 (delta 0)
+ remote: Died at /usr/share/perl5/IkiWiki/CGI.pm line 491.
+ remote: Content-type: text/html
+ remote:
+ remote: <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
+ remote: \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
+ remote: <html xmlns=\"http://www.w3.org/1999/xhtml\">
+ remote:
+ remote: <head>
+ remote:
+ remote:
+ remote: <base href=\"/~qazwsx/pages/\" />
+ remote:
+ remote:
+ remote: <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
+ remote: <title>Error</title>
+ remote:
+ remote: <link rel=\"stylesheet\" href=\"/~qazwsx/pages/style.css\" type=\"text/css\" />
+ remote:
+ remote: <link rel=\"stylesheet\" href=\"/~qazwsx/pages/local.css\" type=\"text/css\" />
+ remote:
+ remote:
+ remote:
+ remote:
+ remote:
+ remote: </head>
+ remote: <body>
+ remote:
+ remote: <div class=\"page\">
+ remote:
+ remote: <div class=\"pageheader\">
+ remote: <div class=\"header\">
+ remote: <span>
+ remote: <span class=\"parentlinks\">
+ remote:
+ remote: <a href=\"/~qazwsx/pages/\">Qazwsx XXX's Home Page</a><font color=\"gray\"> / </font>
+ remote:
+ remote: </span>
+ remote: <span class=\"title\">
+ remote: Error
+ remote:
+ remote: </span>
+ remote: </span>
+ remote:
+ remote:
+ remote:
+ remote: </div>
+ remote:
+ remote: <!-- do not use action bar (the gray bar under the title) -->
+ remote: <!-- -->
+ remote: <!-- <div class=\"actions\"> -->
+ remote: <!-- <ul> -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- <!--<li><a href=\"./recentchanges/\">RecentChanges</a></li>-->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- -->
+ remote: <!-- </ul> -->
+ remote: <!-- </div> -->
+ remote: <!-- -->
+ remote:
+ remote:
+ remote:
+ remote: </div>
+ remote:
+ remote:
+ remote:
+ remote: <div id=\"pagebody\">
+ remote:
+ remote: <div id=\"content\">
+ remote: <p class=\"error\">Error: \"do\" parameter missing
+ remote: </p>
+ remote: </div>
+ remote:
+ remote:
+ remote:
+ remote: </div>
+ remote:
+ remote: <div id=\"footer\" class=\"pagefooter\">
+ remote:
+ remote: <!-- from Qazwsx XXX's Home Page -->
+ remote: </div>
+ remote:
+ remote: </div>
+ remote:
+ remote: </body>
+ remote: </html>
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlobQ5j7hQVIGkwMWW3yKB_DWqthJcpnsQ"
+ nickname="Qi"
+ subject="comment 3"
+ date="2015-03-10T06:09:10Z"
+ content="""
+See [here](http://pastebin.com/sBZvFYNp) for the complete console output when I ran `git push`.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 4"
+ date="2015-03-10T08:56:46Z"
+ content="""
+It looks as though either your git hook is running ikiwiki with '--cgi', or you have
+`cgi: true` (or equivalent Perl) in the setup file, or you generated the git hook using
+`ikiwiki ... --cgi --wrappers` or similar. This is not correct: `cgi: true` does not
+mean \"enable CGI\", it means \"always run in CGI mode\", which is not what is desired.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlobQ5j7hQVIGkwMWW3yKB_DWqthJcpnsQ"
+ nickname="Qi"
+ subject="comment 5"
+ date="2015-03-10T15:40:34Z"
+ content="""
+After fixing cgi config
+
+ git_wrapper: '/home/qazwsx/space-pages/repo.git/hooks/post-update'
+ cgi_wrapper: '/home/qazwsx/public_html/space-pages/ikiwiki.cgi'
+
+, rebuilding, modifying some .md file, git commit & push, it now works.
+
+The git wrapper is the executable that lives in your git repository, and is used to accept git pushes. The cgi wrapper is the executable that is visible by your web server, and is run by the web server when requests come in from the web
+"""]]
--- /dev/null
+Hello,
+
+I've setup authentication on my ikiwiki website using httpauth plugin. I've also disabled anonok, openid and passwordauth so that httpauth is the unique authentication method. I've configured the `cgiauthurl` to https://example.com/auth/ikiwiki.cgi in order to make the authentication more secured (password is never sent in clear). My `url` points to http://example.com/ and my `cgiurl` points to http://example.com/ikiwiki.cgi .
+
+When I try to edit a page accessed by http, everything works fine: there is a redirection to https://example.com/auth/ikiwiki.cgi (defined in `cgiauthurl`) and my browser launches an HTTP Basic Authentication login form. But when I try to edit a page accessed by https there is no redirection to the `cgiauthurl` url. Instead, I can edit (and save) the page without authentication. I've tried this with a fresh new browser session where I have never been asked for authentication before. It seems that editing pages directly from https://example.com/ikiwiki.cgi?page=page&do=edit works without authentication...
+
+I think that the Ikiwiki CGI do not redirect to `cgiauthurl` when it is accessed by HTTPS.
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlcaGfdn9Kye1Gc8aGb67PDVQW4mKbQD7E"
+ nickname="Amitai"
+ subject="comment 1"
+ date="2014-10-14T22:25:13Z"
+ content="""
+I have a site like this and can't reproduce the bug. What version of ikiwiki are you running? Can you post your ikiwiki.setup, and perhaps also your web server configuration?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 2"
+ date="2014-10-15T23:26:52Z"
+ content="""
+I can't reproduce this either.
+
+Do you perhaps still have an ikiwiki login session cookie stored in your browser
+from when you previously used passwordauth or openid?
+(In Firefox: Edit->Preferences, Privacy tab, Show Cookies.)
+
+The login sessions that are considered to be valid are stored in `.ikiwiki/sessions.db`
+in your wiki's `srcdir`.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 3"
+ date="2014-10-15T23:30:21Z"
+ content="""
+It might also be interesting to visit your wiki's preferences page
+(`ikiwiki.cgi?do=prefs`) which should tell you who you are logged-in as.
+If you \"view source\" it will also show you your session ID, which should match
+what's in the `ikiwiki_session_something` cookie.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk8U772S3jDrZJCO0WA5WaDLjJv5mMl6Yw"
+ nickname="Nadine"
+ subject="It was an Apache problem..."
+ date="2014-10-16T14:57:26Z"
+ content="""
+Hello,
+
+thank you for your comments. The problem comes from the Apache configuration. I use a git-http-backend on this server and I affect the content of the REMOTE_USER environment variable like this:
+
+ SetEnv REMOTE_USER=$REDIRECT_REMOVE_USER
+
+Ikiwiki CGI seems to use this variable to determine which is the current user. Even if the variable content is NULL, ikiwiki.cgi use it.
+
+I just changed this to:
+
+ SetEnvIf Request_URI \"^/git/\" REMOTE_USER=$REDIRECT_REMOVE_USER
+
+and everything runs Ok now...
+
+Sorry for bothering Ikiwikiboard with an HTTP server problem.
+
+"""]]
How to allow .markdown and .md (at the same time) as valid extensions for source files? The default is .mdwn.
+
+> Add `md` to your `add_plugins`, set `libdir` if not already set,
+> put the following in `${libdir}/IkiWiki/Plugin/md.pm`, and rebuild:
+
+ #!/usr/bin/perl
+ package IkiWiki::Plugin::md;
+
+ use warnings;
+ use strict;
+ use IkiWiki 3.00;
+
+ my @ADDITIONAL_EXTENSIONS = qw(md markdown);
+
+ sub import {
+ IkiWiki::loadplugin('mdwn');
+ foreach my $ext (@ADDITIONAL_EXTENSIONS) {
+ hook(type => "htmlize", id => $ext, call => \&IkiWiki::Plugin::mdwn::htmlize, longname => "Markdown (.$ext)");
+ }
+ }
+
+ 1
+
+> --[[schmonz]]
--- /dev/null
+Ikiwiki creates on every page automatically a specific link list at the bottom of the page.
+
+How can I move this list to the top or to the left? How can I have it both on the top and on the bottom of the page?
+
+Since I want to change it globally I tried to find an option in local.css but didn't find anything related.
--- /dev/null
+[[!comment format=mdwn
+ username="spalax"
+ subject="Change the `page.tmpl` template"
+ date="2015-08-28T15:23:54Z"
+ content="""
+You can change the [page.tmpl](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=templates/page.tmpl) template (look for `BACKLINKS` in it). To overwrite the default `page.tmpl`, copy it in, say, a `templates` folder in your repository, and change the setup file to use this folder as a template folder.
+
+-- [[Louis|spalax]]
+"""]]
--- /dev/null
+When running `ikiwiki rebuild` I got error:
+
+ failed to syslog: Wide character in syswrite at /usr/lib/perl/5.18/Sys/Syslog.pm line 546
+
+Ubuntu 14.04. ikiwiki 20150107.
--- /dev/null
+./pm_filter /usr/local 3.20141016.1 /usr/local/share/perl5 < ikiwiki.in > ikiwiki.out
+/bin/sh: ./pm_filter: /usr/bin/perl5.18.15.18.1: bad interpreter: No such file or directory
+make: *** [ikiwiki.out] Error 126
+
+Kind of a newbie and I'm not sure what is happening here--when it invokes the perl interpreter is it somehow adding the version twice? Not sure what to do... I appreciate any help/advice.
--- /dev/null
+[[!comment format=mdwn
+ username="schmonz"
+ subject="""fixed in 3.20150107"""
+ date="2015-02-08T16:58:09Z"
+ content="""
+This was a bug I introduced in 3.20141016. It's fixed in the
+3.20150107 release. If you can't update current release, perhaps
+you can apply the patch from
+[9f04f8c](http://source.ikiwiki.branchable.com/?p=source.git;a=commitdiff;h=9f04f8ccc58d8389efac84afe859b08edb8d4518).
+
+See also <https://ikiwiki.info/bugs/double_shebang_replacement___47__usr__47__bin__47__perl5.185.18/>.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="http://hendry.iki.fi/"
+ nickname="Kai Hendry"
+ subject="Going mobile"
+ date="2015-05-08T06:39:19Z"
+ content="""
+Hello Mikko,
+
+Thank you for sharing! I like what you have done. Needs some more work according to Google mind:
+
+* <https://www.google.com/webmasters/tools/mobile-friendly/?url=https%3A%2F%2Fmcfrisk.kapsi.fi%2Fskiing%2F>
+* <http://shallowsky.com/blog/tech/web/google-mobile-friendly.html>
+
+We need to \"mobilize\" ikiwiki.info. And then I need to fix my own site: <http://webconverger.org/> !!
+
+
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 2"
+ date="2015-05-09T07:06:01Z"
+ content="""
+Recent ikiwiki is meant to scale down to phone sizes using similar techniques,
+although it isn't fully there yet. Further patches to style.css would be
+very welcome...
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="http://hendry.iki.fi/"
+ nickname="Kai Hendry"
+ subject="You are right"
+ date="2015-05-10T02:22:27Z"
+ content="""
+Sorry, I was using my own local.css and page.tmpl that was exacerbating the issue.
+"""]]
--- /dev/null
+As per above. I'm using a inline to show most recent pages using meta(date). I want to limit the number of items to 20 but here is the catch I want to maintain chronological order. Kind of like using `sort -n | tail`.
+
+Showing the `n` oldest pages in chronological order starting with the first is easy just combine sort and show. Same thing goes for showing the `n` most recent pages in reverse chronological order.
+
+Can't figure out if what I want to do is doable.
+
+A bit of background:
+I'm using my [[tweaked img plugin|kjs]] to populate meta data from images. The meta date is set according to the image exif data. On the homepage I show thumbnails of the 20 most recent images. This is a site of family photos (why I can't share the link here) and such and it's a bit confusing to show all sequences in reverse. I.e first image shows all the presents opened then they repackage themselves and end up with ribbons.
+
+-[[kjs]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 1"
+ date="2015-08-15T12:33:11Z"
+ content="""
+I don't think this is currently possible: `show` takes the first *n*
+pages after sorting.
+
+Care to contribute a patch adding `show=\"last 10\"`? Then you could do
+
+ \[[inline pages=\"...\" sort=\"-age\" show=\"last 10\"]]
+
+and I think that would have the result you want.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="kjs"
+ subject="comment 2"
+ date="2015-08-16T20:09:33Z"
+ content="""
+I could do a patch if I could program... The img plugin stuff is more a working accident of mine ;)
+
+For now I've reverted to showing all albums in reverse chronological order. Atleast then people aren't confused by different ordering of the homepage inline and the actual album.
+
+I'll see if I can have a look at the show last patch as you suggest, but that won't happen shortly.
+
+Regards
+
+"""]]
--- /dev/null
+(I don't know whether this is about a bug or about a feature request, so apologies if this post is in the wrong place.)
+
+# Rationale:
+
+It seems to me that the way ikiwiki handles language information at
+the moment isn't optimal.
+
+For instance, if I want to apply different CSS properties depending on
+the language, I can't. (This matters for some typographic rules that
+differ depending on the language.)
+
+Also, without proper language declarations, the browser cannot hyphen
+words correctly, resulting in poor line breaking/wrapping.
+
+
+# The problem:
+
+## How it's done now:
+
+Right now, correct me if I'm wrong, but I need to write
+
+ bracket bracket !meta language="en"]]
+
+somewhere inside a post in order to tell ikiwiki which language the
+post is written in. This will result in the post's HTML as:
+
+ <meta name="language" content="en" />
+
+
+This isn't sufficient.
+
+## What isn't done
+
+### 1. the blog's lang
+
+There's no way to tell ikiwiki the overall, or main language of the
+blog at the moment (again, that's as far as I can see from reading
+documentations, forums, etc.)
+
+This setting would be nice, in order to add have something like
+
+ <html lang="en">
+
+on all pages.
+
+
+### 2. the post's lang
+
+Then, if a specific post has the meta language property explicitly
+defined, it should override the language declaration set as default.
+
+### 3. template variable
+
+Right now, there's no
+
+ <TMPL_VAR LANGUAGE>
+
+from what I can tell by testing. As a result, I cannot give specific
+css properties or the like.
+
+
+# Fast way to resolve this
+
+The easiest way to resolve this is to create a TMPL_VAR LANGUAGE so
+that at least people who care can use this variable and improve their templates.
+
+
+----
+
+This really is the most needed feature for me as a writer in both
+English and French that I miss the most with ikiwiki. I have looked
+around in the source code on <https://github.com/joeyh/ikiwiki> but I
+couldn't figure out where this is happening...
+
+
+I hope you also care :-)
+
+Thanks,
--- /dev/null
+[[!comment format=mdwn
+ username="fboulogne@247e5cb9cf56b3ff602b5e50ee07bb3985b88808"
+ nickname="fboulogne"
+ subject="comment 1"
+ date="2015-08-01T02:15:27Z"
+ content="""
+I totally agree on this need. It's also very important for the accessibility (especially handicapped people who need a specific software.)
+"""]]
--- /dev/null
+I kind of want to start anew with my wiki, but I also don't want the stuff that I've written inaccessible. Right now I have one folder, where all my wiki files live and I'd like to move everything into a subfolder e.g.: let's say my stuff lives in ```~/notes/ ``` I would like to move the notes to ```~/notes/old``` without breaking any of the wiki links. Looking at [linkingrules](http://ikiwiki.info/ikiwiki/subpage/linkingrules/) it seems to me that it should work out of the box, but this is not the case. When I try to move a page to ```~/notes/old``` the file is accesible as a wikipage (http://example.com/old/note) but the old links to that page don't work anymore. The wiki thinks the site is missing or something and does not look for it in subfolders. Or so it seems. Anyway. If anyone has an idea to get this to work the right way, that is: to move all current pages to a subfolder without breaking links, I'd be very happy to know.
--- /dev/null
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ subject="comment 1"
+ date="2015-06-21T23:35:42Z"
+ content="""
+This sounds like a job for mod_rewrite rather than ikiwiki itself.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ subject="comment 2"
+ date="2015-06-30T09:50:31Z"
+ content="""
+This would work, but there's another problem (of convenience): Since the notes directory is my working directory for notes, I would like to move the notes (this the main reason for trying to do this), so I don't have to see them all the time. I would like to be able to refer to the files in the future, without having to see them. But, I guess, this is not so easily done. But if someone has an idea for a \"native\" ikiwiki solution I'd be very grateful.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://launchpad.net/~beaufils"
+ nickname="beaufils"
+ subject="Does the exclude feature work at all?"
+ date="2015-06-22T10:49:53Z"
+ content="""
+I am not sure if that is a bug or a feature, but it is annoying, definitively related to this post:
+
+ $ ikiwiki --version
+ ikiwiki version 3.20141016.2
+
+ $ mkdir src ; echo A >src/get ; echo A >src/noget
+
+ $ ikiwiki src out
+ $ cat out/noget
+ A
+
+ # Let's ask ikiwiki to forget noget
+ $ ikiwiki src out --exclude noget
+ $ cat out/noget
+ A
+
+ # No? Maybe with --rebuild?
+ $ ikiwiki src out --exclude noget --rebuild
+ $ cat out/noget
+ A
+
+ # So let's remove it manually and try again
+ $ rm out/noget
+
+ $ ikiwiki src out --exclude noget
+ $ cat out/noget
+ cat: out/noget: No such file or directory
+
+ # Hum are we sure it worked?
+ $ ikiwiki src out --exclude noget --rebuild
+ $ cat out/noget
+ A
+
+ # Nope :-(
+
+I am really confused with the exclude feature and the way ikiwiki lookup files. Finally I tend to think this is a bug.
+
+Is there a way to make ikiwiki consider that a file in the `srcdir` should not be present in the `destdir` and thus removed if present?
+
+--[[bbb]]
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="http://www.globalclue.com/"
+ nickname="Dion"
+ subject="comment 5"
+ date="2014-12-08T17:44:49Z"
+ content="""
+I tried just now and it does work, and it is quite surprising
+"""]]
Server has an older ikiwiki installed but I'd like to use a newer version from git, and I don't have root access.
> You can't set `PERL5LIB` in `ENV` in a setup file, because ikiwiki is already
-> running before it reads that, and so it has little effect. Your error
+> running before it reads that, and so it has little effect.
+>> That's [fixed now](http://source.ikiwiki.branchable.com/?p=source.git;a=commitdiff;h=9d928bd69496648cd7a2d4542a2d533992c01757;hp=f574bc2ed470b60f576a2906998bc7c129f2f983)
+>> for anything invoked through the generated wrappers: they put all the setup `ENV`
+>> values into the real environment before starting Perl. (When running `ikiwiki` at the
+>> command line, `PERL5LIB` just has to be in the environment, as it would normally be.)
+>
+> Your error
> messages do look like a new bin/ikiwiki is using an old version of
> `IkiWiki.pm`.
>
--- /dev/null
+A while ago I added RTL text support to my wiki:
+
+<http://ikiwiki.info/tips/Right-to-left___40__RTL__41___page_text>
+
+But this support does not work with PO files. When I write a page in
+English, I need the Hebrew/Arabic translation to have additional text
+(in my case, using the template directive) which causes the direction of the
+text to be RTL.
+
+I saw a recent patch which claims to solve the problem by exposing the
+language code and direction to the templates (which would help a lot), but
+when I go to the original website from which it came, it looks like the Arabic
+text is still aligned LTR just like English:
+
+<http://addons.nvda-project.org/index.ar.html>
+
+Another issue is that I use Debian stable, and I'm not sure it's safe to
+use some unstable ikiwiki (currently I use the version from backports) -
+advice welcome :-)
+
+It's still important to have the ability to change direction inside the page,
+but the default direction specified either in CSS on in the page.tmpl file
+should be dynamic. I didn't check how the PO plugin works, but it may be
+necessary to update there, because if all it does is copy the HTML page and
+switch strings with translations, it must be modified to also edit the
+LTR/RTL directives so that different translations of the same page can have
+different directions.
+
+I hope I'll have some time to look into it myself, I'm just a bit behind now
+with non-recent ikiwiki version (maybe it's time for me to try sid or from
+source).
+
+--[[fr33domlover]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 11"
+ date="2014-09-21T12:50:11Z"
+ content="""
+> Yes, [a RTL meta tag] would help. But I'd need the PO plugin to
+> respect this lang tag. Is this already possible?
+
+Do you need the po plugin at all? The po plugin is specifically for
+sites that are written in a master language (usually English) and
+then translated into a bunch of other languages - the same general
+approach as <https://www.debian.org/> (that site does not use IkiWiki
+but the idea is the same).
+
+If you're selecting languages in some other way -
+e.g. all your content is in Arabic except that the `/programming/`
+subtree is in English, or something like that - then the po
+plugin is not designed for what you're doing, and adding support
+for a new meta tag to the meta plugin would be a better way to
+get the language code into the header. It could use the same
+`TMPL_VAR` hooks in page.tmpl that po does? I'd review a patch.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 11"
+ date="2014-09-21T13:06:24Z"
+ content="""
+> Maybe if you could set dir to \"flip\" instead of \"rtl\" and \"ltr\"
+
+This feature does not exist in HTML. The allowed values for dir
+are rtl, ltr, and auto (where auto means \"please guess based on the
+content\" - see the HTML5 spec for the exact algorithm used).
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="fr33domlover"
+ ip="46.117.109.179"
+ subject="comment 12"
+ date="2014-10-22T16:46:01Z"
+ content="""
+As to exposing the language tag, I was told here that there is a patch already:
+
+[[/forum/Right-to-left_support/]]
+
+The CSS should requires that I modify my local.css to use the conditional
+instead of an \"rtl\" class. For that I need to understand on which items it
+affects (and just insert direction=rtl there, like I'm doing now with the class).
+
+When I make the changes in my wiki and test them, I'll send you a patch.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 13"
+ date="2014-10-23T08:06:48Z"
+ content="""
+> I was told here that there is a patch already
+
+That patch is for the po plugin, which is specifically designed for a wiki
+in which every page `foo` is written in a \"master language\" (often English)
+in a file like `/foo.mdwn`, and then translated into secondary languages
+via translation files like `/foo.ar.po`.
+
+If that doesn't describe your wiki, then the po plugin is not intended
+for you, and you would be better off with a change to the meta plugin
+to make it possible to emit the same language and/or direction
+attributes in the HTML, but triggered by different source code.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="next steps"
+ date="2014-09-17T08:09:50Z"
+ content="""
+HTML5 says:
+
+> Authors are strongly encouraged to use the dir attribute to indicate text direction rather than using CSS, since that way their documents will continue to render correctly even in the absence of CSS (e.g. as interpreted by search engines).
+
+Could you test whether your tip works with `<div dir=\"rtl\">` or something,
+please? If it does, please change the tip, if not, we'll have to look at
+whether the [[plugins/htmlscrubber]] is getting in the way.
+
+After that, I think the next step towards good RTL support would be to
+put together some test-cases for things that are meant to work, in the
+form of:
+
+* self-contained source code and setup file for a very simple wiki
+* the pages in that wiki making it clear what their intended text
+ direction is (e.g. \"this paragraph should be right to left\")
+
+As far as I know, none of the IkiWiki committers can read any RTL
+languages, so if you use Arabic or Hebrew or whatever in those
+test-cases, we'll need a screenshot/image of what it's meant to look
+like. Using Latin text marked as RTL (so it should come out backwards
+if everything is working correctly) might be easier.
+
+The obvious cases that I can think of are:
+
+* the wiki is \"mostly\" in a RTL language
+* the master language is LTR but the [[plugins/po]] plugin
+ provides a translation into a RTL language
+
+and possibly
+
+* the master language is RTL but the [[plugins/po]] plugin
+ provides a translation into a LTR language
+
+It might be necessary to add support for a per-wiki, per-page or
+(for po) per-translation-language direction override that would set
+the `<html dir>` attribute, but we should find test-cases first, then we
+can work out solutions.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 2"
+ date="2014-09-17T08:19:38Z"
+ content="""
+If I'm interpreting that Arabic website correctly, it *is* RTL, but
+left-justified (which is a somewhat confusing CSS glitch, but hopefully
+not a barrier to understanding by people who can read Arabic). English
+words embedded in the Arabic are LTR, but my understanding of the bidi
+algorithm is that that's meant to happen.
+
+For instance, in the English version, the last paragraph before the inline says:
+
+> Please feel free to subscribe to the rss or atom feeds to be informed on when new addons or a new version of an addon is made available. The following community supported addons are available:
+
+and in the Arabic version, the last paragraph looks like this in my browser
+(where `*****` represents Arabic that I don't know how to read):
+
+ : ***** (... lots more ....) ***** atom feeds * rss **** ****
+
+So that looks right for RTL: the colon is at the end (left), and the
+mentions of rss feeds and atom feeds are at the beginning (right).
+When I \"view source\", it's the other way round.
+
+Also, the page source says:
+
+ <html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"ar\" xml:lang=\"ar\" dir=\"rtl\">
+
+which looks right?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 3"
+ date="2014-09-17T08:29:48Z"
+ content="""
+> I saw a recent patch which claims to solve the problem by exposing the language code and direction to the templates
+
+It looks as though you mean [[mhameed]]'s change from
+[[todo/expose_html_language_and_direction]], which exposed them to the
+templates, but did not modify the default `page.tmpl` to make use
+of them. Perhaps you or mhameed could provide a `page.tmpl` patch?
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="fr33domlover"
+ ip="46.117.109.179"
+ subject="comment 4"
+ date="2014-09-17T11:22:57Z"
+ content="""
+> Could you test whether your tip works with \<div dir=\"rtl\"> or something, please?
+
+Sure, I will check that soon. I think it does, I just tried here in ikiwiki. Just curious, why is
+div preferred? IIRC I use \"class\" there after looking at some existing templates. But
+I'm not an expert, especially not in CSS. Would that be used as an HTML4 parallel of the dir attribute?
+
+As to that website with the patch, the problem is that the text is aligned to the left. When
+I type Hebrew in an LTR page, it already shows more or less correctly - English words are
+shown in correct letter order thanks to the bidi algorithm. The issue seems to be aligning
+to the right - that is what my tip does. Maybe the direction setting in the CSS also has other
+effects - I just know it works :-)
+
+I'll happily help with the tests. I also have a test page on my wiki which uses many ikiwiki
+features, to demonstrate how they all look in RTL. Test case ideas:
+
+- Page in RTL (e.g. Arabic) with an LTR paragraph (e.g. English)
+- Page in RTL with LTR paragraph in the same language (e.g. fancy way to write a poem)
+- Page in LTR (e.g. English) with an RTL paragraph (e.g. Hebrew)
+- Page in LTR with RTL paragraph in the same language (poem again)
+- Translated page - master language is LTR, slave is RTL
+- Translated page - master language is RTL, slave is LTR
+- Master LTR page has RTL paragraph, all slaves have it RTL too regardless of their global direction
+- Master RTL page has LTR paragraph, all slaves have it LTR too regardless of their global direction
+
+An example for the last 2 tests is an English master page about linguistics which has a paragraph in some
+RTL language that is being studied, and all slave pages must keep that paragraph intact - both the
+text itself and its RTL direction. But the rest of the page can be translated and correctly made RTL when
+translated to RTL languages.
+
+This gives me another idea - most of the time what you actually mean is to reverse the direction: RTL
+becomes LTR and vice versa. When writing some fancy poem, that's what you probably want. But in the
+previous example, the direction should not be reversed - so there should maybe be two kinds of direction
+modifiers:
+
+1. Dynamic (the default) - You write e.g. a master page in LTR and some RTL paragraphs. an RTL translation
+ automatically reverses directions, RTL <=> LTR.
+2. Fixed - this is like my tip, e.g. An RTL paragraph in an LTR page has a fixed direction set, which is kept even in
+ translations for RTL languages - the page in general is reversed, but that paragraph is not.
+
+Another very useful thing (at least to me) would be an option to have different wiki pages/section with
+different master languages. I have sections in English and sections in Hebrew, which makes the PO
+plugin a problem to use, unless I keep one of these sections untranslated.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 5"
+ date="2014-09-17T11:35:07Z"
+ content="""
+`<div>` is not specifically preferred, any block-level element will do
+(e.g. `<p>`); but `<div>` is something you can wrap around any block,
+so it's good for a generic `\[[!template]]`.
+
+The difference between the use of a `dir` attribute and the use
+of a `class` attribute is that `dir` has a spec-defined semantic
+meaning in HTML4 and HTML5: search engines can look at
+`<div dir=\"rtl\">` and know that it is definitely right-to-left.
+
+`<div class=\"rtl\">` *might* mean right-to-left, but it could equally
+well mean (for instance) documentation about a run-time library,
+or something; classes have no built-in semantic meaning that generic
+user-agents like browsers and search engines can rely on.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlcaGfdn9Kye1Gc8aGb67PDVQW4mKbQD7E"
+ nickname="Amitai"
+ subject="comment 6"
+ date="2014-09-17T14:24:38Z"
+ content="""
+smcv wrote:
+
+> As far as I know, none of the IkiWiki committers can read any RTL languages
+
+I read Hebrew well enough to detect chirality errors (e.g., L-Hebrew in an R-Hebrew universe). --[[schmonz]]
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 7"
+ date="2014-09-17T15:52:36Z"
+ content="""
+LTR with embedded RTL, or vice versa, sounds like a job for
+the [[tips/Right-to-left___40__RTL__41___page_text]] tip or
+something very similar.
+
+> Maybe the direction setting in the CSS also has other effects
+
+https://html.spec.whatwg.org/#the-dir-attribute suggests that the
+`dir` attribute is meant to be sufficient, but perhaps it's overridden
+by an explict `text-align: left`?
+
+> most of the time what you actually mean is to reverse the direction:
+> RTL becomes LTR and vice versa
+
+I don't think \"I know I am switching between English and Arabic,
+but I don't know which one I'm currently writing\" is a major use-case :-)
+
+> an option to have different wiki pages/section with different master
+> languages
+
+It sounds as though the po plugin is not really what you want, and
+you'd be better off with being able to write
+`\[[!meta lang=ar dir=rtl]]` or something.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="fr33domlover"
+ ip="194.90.37.82"
+ subject="comment 8"
+ date="2014-09-20T12:50:13Z"
+ content="""
+> I don't think \"I know I am switching between English and Arabic, but I don't know which one I'm currently writing\" is a major use-case
+
+Sure you need to know, but there's a difference between \"make the whole text RTL\" or \"make the LTR text RTL and make the RTL text LTR\".
+It depends on what the user means.
+
+> It sounds as though the po plugin is not really what you want, and you'd be better off with being able to write \[[!meta lang=ar dir=rtl]] or something.
+
+Yes, that would help. But I'd need the PO plugin to respect this lang tag. Is this already possible?
+
+> Could you test whether your tip works with <div dir=\"rtl\"> or something, please?
+
+I did and it works, but there's an issue: In both ways - my CSS and the dir attribute - some things don't work right, for example, right-aligned floating
+boxes need to be made left-aligned. How do I handle this with dir? I don't know CSS, but I think it may be possible to define CSS for various page
+elements differently when in the \".rtl\" class - am I right? Another problem is that the horizontal bars of polls (poll plugin) still go LTR. Is there a way
+to fix these things without CSS class? With the notebox template, the right-alignment uses CSS so if we want to use 'dir' it needs to be changed
+to something non-CSS with correct semantics. Maybe if you could set dir to \"flip\" instead of \"rtl\" and \"ltr\", to mean \"the direction opposite to the
+page's direction\". And that new 'dir' would also need to control alignment, since right now notebox is not affected by the dir like I said. The text inside
+does become RTL but the box is still on the right like in LTR.
+
+I don't see other issues but there are plugins I didn't try, e.g. does the box generated by pagetstats directive align to the left in RTL?
+
+If CSS isn't needed for this I'll update the tip, otherwise I should probably fix these issues (notebox-rtl and poll) and add this to the CSS in
+the tip, until there is a better solution (and even then, people will be running previous ikiwiki versions without the solution).
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 9"
+ date="2014-09-21T12:41:56Z"
+ content="""
+[Authoring HTML: Handling Right-to-left Scripts](http://www.w3.org/TR/i18n-html-tech-bidi/)
+might be useful reading.
+
+In [modern browsers](http://caniuse.com/css-sel2) (i.e. not IE6) it
+should be possible to make CSS conditional on any attribute, not
+just class, so you could maybe do something like this:
+
+ /* ikiwiki's existing CSS */
+ .sidebar {
+ float: right;
+ margin-left: 4px;
+ }
+
+ /* new */
+ html[dir=\"rtl\"] .sidebar {
+ float: left;
+ margin-left: 0px;
+ margin-right: 4px;
+ }
+
+If you contributed a patch for `style.css` to make markup like this
+\"just work\", I'd be happy to review it. (`notebox` could use the
+same technique).
+"""]]
--- /dev/null
+Hey everyone, I have a problem with the img plugin/directive. I get an error stating "```\[[!img Error: Image::Magick is not installed]]```". So the directive "tag" thingie is shown with an error where I had written the path to the image in the markdown file (of this blog post, in that case…). Any ideas why this might happen? Maybe a problem with my hoster, which is nearlyfreespeech (I couldn't install ```Image::Magick``` with either ```PERL5LIB=`pwd`/ikiwiki:`pwd`/ikiwiki/cpan:`pwd`/lib/perl5 PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'CPAN::Shell->install("Image::Magick")'``` nor with ```PERL5LIB=`pwd`/ikiwiki:`pwd`/ikiwiki/cpan:`pwd`/lib/perl5 PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'CPAN::Shell->force(install => "Image::Magick")'``` which I both adapted from [this tip](https://ikiwiki.info/tips/nearlyfreespeech/). But in two admittedly very old (members only) forum posts (from 2003 and 2004, respectively) they said, they do indeed have support for PerlMagick.)?
+
+Thanks in advance as allways for any help you can offer!
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ ip="91.65.196.164"
+ subject="comment 1"
+ date="2014-10-22T22:01:41Z"
+ content="""
+Okay. I figured it out with help from the nearlyfreespeech forum. It had nothing to do with ikiwiki. Nonetheless here's the solution, for posterity: You can check, if PerlMagick is installed by running ```perl -MImage::Magick -e \"print $Image::Magick::VERSION\"```. If it isn't, you will get an error that looks like this:
+
+>```Can't locate Image/Magick.pm in @INC (@INC contains: /usr/local/lib/perl5/5.16/BSDPAN /usr/local/lib/perl5/site_perl/5.16/mach /usr/local/lib/perl5/site_perl/5.16 /usr/local/lib/perl5/5.16/mach /usr/local/lib/perl5/5.16 .).
+BEGIN failed--compilation aborted. ```
+
+If that's the case, you might have to upgrade/switch to a new \"realm\". As of the time of this writing PerlMagick is installed in the realms \"indigo\" and \"white\". How this is done, is described in the members only FAQ of nfs.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="fr33domlover"
+ ip="46.117.109.179"
+ subject="comment 2"
+ date="2014-09-17T06:57:41Z"
+ content="""
+I couldn't figure out how to make a comment on the commandline so I made this:
+
+[[forum/PO_and_RTL_support]]
+
+The Arabic pages on your wiki seem to have the Arabic in LTR, instead of the intended
+RTL. The reason may be that the PO plugin does not generate each slave page from scratch,
+but rather uses the original page, which causes slave pages to have language 'en' and direction
+LTR. I didn't verify this yet. If you do check this, please share results here :)
+
+What I got to work so far is RTL chunks inside LTR pages. It doesn't replace the PO plugin but
+it can be used to make PO+RTL work:
+
+[Right-to-left (RTL) page text](http://ikiwiki.info/tips/Right-to-left___40__RTL__41___page_text)
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 3"
+ date="2014-10-23T07:57:39Z"
+ content="""
+> The Arabic pages on your wiki seem to have the Arabic in LTR, instead of the intended RTL
+
+As I said on the other forum thread, it does look to me as though it is RTL;
+the display bug is that it's left-justified (text-align: left) because the
+blueview stylesheet explicitly (and unnecessarily?) left-aligns text.
+
+You can test RTL/LTR in English by putting a distinctive directionless punctuation
+character at the beginning and end of a paragraph like this:
+
+ <p dir=\"ltr\">• This renders with a bullet on the left and an ellipsis on the right…</p>
+ <p dir=\"rtl\">• This renders with a bullet on the right and an ellipsis on the left…</p>
+
+The actual text still goes left-to-right because Latin characters are known
+to be left-to-right by the Unicode bidi algorithm, but the punctuation moves
+around, and in ikiwiki themes other than blueview and goldtype, the alignment
+changes too:
+
+<p dir=\"ltr\">• This renders with a bullet on the left and an ellipsis on the right…</p>
+<p dir=\"rtl\">• This renders with a bullet on the right and an ellipsis on the left…</p>
+
+More test-cases:
+
+* <http://actiontabs.hosted.pseudorandom.co.uk/rtl/>
+* <http://blueview.hosted.pseudorandom.co.uk/rtl/>
+* <http://goldtype.hosted.pseudorandom.co.uk/rtl/>
+* <http://unthemed.hosted.pseudorandom.co.uk/rtl/>
+"""]]
--- /dev/null
+I'm working on consolidating my blog and wiki with ikiwiki. I have the following question: Is it possible to serve a blog under a different subdomain? For example: URL of the wiki: ```wiki.example.com``` and I would like to be able to reach the blog under the URL ```blog.example.com```. The permalink structure right now looks like this: ```wiki.example.com/blog/post/``` is it possible to rewrite it so it is served as ```blog.example.com/post/```? I don't even know if this is a question for the ikiwiki forum, but I need to start somewhere.
+
+Thanks in advance for any ideas on how to accomplish that!
--- /dev/null
+[[!comment format=mdwn
+ username="spalax"
+ ip="82.233.196.200"
+ subject="Several .setup files"
+ date="2014-09-27T06:18:29Z"
+ content="""
+I am not sure to have understood your question, but I assume the following:
+
+- your source wiki contains some subdirectory `blog`;
+- you want the whole wiki to be served as [[wiki.example.com]]
+- you want the `blog` subdirectory serves as [[blog.example.com]]
+
+If so, what you can do is having two different setup files.
+
+- the first one would contain (using the old setup file format, but you can adapt it for the new one):
+
+ srcdir => \"/path/to/your/source/wiki/\",
+ url => \"http://wiki.example.com\",
+
+- and the second one would contain:
+
+ srcdir => \"/path/to/your/source/wiki/blog\",
+ url => \"http://blog.example.com\",
+
+I hope I answered your question.
+
+-- [[Louis|spalax]]
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="spalax"
+ ip="82.233.196.200"
+ subject="Apache redirection"
+ date="2014-09-27T06:20:09Z"
+ content="""
+I think you can also (assuming you are using Apache2, and having some control over it) make apache redirect [[blog.example.com]] to [[wiki.example.com/blog]].
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ ip="81.100.115.242"
+ subject="comment 6"
+ date="2014-10-05T22:54:06Z"
+ content="""
+> One way to solve this would be a new `$config{hard_code_urls}` option
+
+I have added basically this in git master. It isn't in a release yet,
+and I renamed it to `$config{reverse_proxy}`.
+
+Also in git master, if `$config{html5} = 1` then the `<base>` URL
+will usually be host-relative or protocol-relative (`/wiki/` or
+`//example.com/wiki/`) which reduces the need for that option.
+
+These are still subject to change, for now.
+"""]]
--- /dev/null
+I assume this is a bug:
+
+When when writing the string "S." on a page, it gets replace with "a." for some reason. I am using "ikiwiki version 3.20150614" form pkgsrc on OS X 10.10.4.
+
+If this is not a bug: Where would I be able to change that behaviour?
+
+P.S.: "S." is the short form of the German "Seite" (en: "p." and "page") and is used frquently in citations, so it's kind of important…
--- /dev/null
+[[!comment format=mdwn
+ username="openmedi"
+ subject="comment 1"
+ date="2015-08-12T15:44:58Z"
+ content="""
+As we can see (and this is lucky in hindsight): The problem doesn't show on the ikiwiki.info site itself. So maybe I did indeed something wrong. Hm.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="Markdown is weird like that"
+ date="2015-08-12T15:51:38Z"
+ content="""
+Is it right at the beginning of a line, such that Markdown interprets it as a numbered list item for an HTML `<ol>`?
+
+~~~
+a. One
+b. Two
+c. Three
+
+a. One
+a. Two
+a. Three
+
+S. One
+X. Two
+Z. Three
+~~~
+
+are all interpreted as
+
+a. One
+b. Two
+c. Three
+
+If this is what's going on, you can use:
+
+`p\. 49`
+
+to get:
+
+p\. 49
+
+or adjust your spacing so it isn't the first thing on a line.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 3"
+ date="2015-08-12T16:08:10Z"
+ content="""
+There is a `MKD_NOALPHALIST` option to discount (assuming that's the Markdown implementation you're using), but it isn't clear which way should be preferred in general.
+
+With that option off, people complain that they can't have alphabetical sub-lists (Google for \"markdown alpha list\" to see this feature request in various places).
+
+With that option on, you get unexpected results for things like your example. It's also liable to break initials (`S. J. McVittie is an ikiwiki contributor`) or the French abbreviation for Monsieur (`M. Poirot is a famous French-speaking detective`).
+
+The original Markdown didn't have lettered lists; neither does CommonMark, although it's a feature request in CommonMark.
+"""]]
--- /dev/null
+Ok, I'm trying to get into a good routine where I keep ikiwiki updated for my site.
+The plan is to keep a local (partial) git clone, and rebuild from tagged release commits.
+
+I started out with 3.20140831, more or less like this:
+
+ $ git clone ...
+ $ git checkout 3.20140831
+ $ perl Makefile.PL PREFIX=$HOME/blah
+ $ make
+ $ make install
+ $ cd ~/my-wiki-admin-stuff
+ $ ~/blah/bin/ikiwiki --dumpsetup=my.wiki.setup
+ $ vi my.wiki.setup
+ $ ~/blah/bin/ikiwiki --setup my.wiki.setup
+
+So far so good. Fast-forward (heh) to 3.20140916:
+
+ $ git fetch ...
+ $ git merge --ff-only FETCH_HEAD
+ $ git checkout 3.20140916
+ $ perl Makefile.PL ... ; make ; make install
+ $ cd ~/my-wiki-admin-stuff ; ~/blah/bin/ikiwiki --setup my.wiki.setup
+
+This happened to work, but in general if the new ikiwiki version had new
+setup options I needed to know about, I wouldn't necessarily find out, and
+I could be running the new version with something important taking an
+inappropriate default because I didn't add it to the setup file.
+
+What I'm looking for is some sort of
+
+ ikiwiki --read-my-current-setup-file-and-write-one-with-the-same-config-but-with-new-options-shown-and-commented
+
+command.
+
+Will `ikiwiki --changesetup setupfile` do what I'm looking for?
+
+I'm hoping for something simple that takes care of the way the setup sections are conditional
+(so `--dumpsetup` doesn't even show you `git` options unless it knows `rcs=git`, so ideally it
+would look in the current setup to learn what to dump).
+
+How are other folks handling this routinely?
--- /dev/null
+could we get email notifications going here? [[plugins/notifyemail]] is installed on the git-annex wiki, and it works really well to followup on the pages i participate in... thanks! --[[anarcat]]
--- /dev/null
+After enabling "Show sidebar on all pages" (global_sidebars) I can no longer access the setup page via the web interface.
+
+The rest of the wiki continues to work, but only "Content-type: text/html" gets sent for this page.
+
+* Fresh ikiwiki --setup of 3.20141016-1
+* Nginx
+* EDIT: Arch Linux, built ikiwiki from AUR
+
+Would this be something I'm doing wrong or a bug?
+
--- /dev/null
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="more info needed"
+ date="2014-11-27T12:14:56Z"
+ content="""
+That sounds like a bug. Please check your web server log for warnings
+or error messages from the CGI script.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="Veyrdite"
+ subject="Apologies"
+ date="2014-12-12T01:32:56Z"
+ content="""
+I'm a horrible person. Rather than working out what caused the issue I instead setup ikiwiki on Debian Stable (which was going to be my final platform for the server anyway).
+
+My debugging experience with cgi and webservers is limited, but I will give it another go on my Arch box to see if I can find a resolution. Other users might be affected by the same issue.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="alexjj@97b75209148c043997fe05b4341a629090820035"
+ nickname="alexjj"
+ subject="Cheap VPS"
+ date="2015-06-05T17:51:53Z"
+ content="""
+Get a cheap VPS from [lowendspirit](http://lowendspirit.com/). 3 euro/year!
+
+It's perfect for running ikiwiki and some other services for a personal site.
+
+Note: You only get ipv6 and NAT ipv4, but the forums explains how you can setup domains and things to get a website working. I have one with ikiwiki and it's great.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="progress"
+ date="2015-03-28T16:31:52Z"
+ content="""
+i made some progress here, please review and test suggested changes in [[todo/git-annex_support]]. --[[anarcat]]
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlTS8BlL-OtDvQwLk1ohkRAmfCb_U5yOvQ"
+ nickname="Roland"
+ subject="Working configuration for nginx"
+ date="2015-03-03T11:23:51Z"
+ content="""
+This works fine for me with nginx:
+
+ location /wiki {
+ error_page 404 @ikiwiki404;
+ }
+
+ # Another definition for ikiwiki.cgi, only reachable by error_page 404.
+ location @ikiwiki404 {
+ fastcgi_pass unix:/var/run/fcgiwrap.socket;
+ fastcgi_index ikiwiki.cgi;
+ fastcgi_param SCRIPT_FILENAME /srv/www/htdocs/wiki/ikiwiki.cgi;
+ fastcgi_param DOCUMENT_ROOT /srv/www/htdocs/wiki;
+
+ # For 404 plugin
+ fastcgi_param QUERY_STRING \"\";
+ fastcgi_param REQUEST_METHOD \"get\";
+ fastcgi_param REDIRECT_STATUS 404;
+ fastcgi_param REDIRECT_URL $uri;
+
+ include /etc/nginx/fastcgi_params;
+ }
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="http://christian.amsuess.com/chrysn"
+ subject=""please tell me" when this happens, severity"
+ date="2015-11-15T13:45:29Z"
+ content="""
+i think that this is an issue to be considered, as it breaks ikiwiki installations that previously worked. the scenario this happened in for me was this:
+
+ages ago, i set up a dedicated user for ikiwiki on a server, and created wikis there with cgi and commit access for power users. things worked nicely, commits from web users showed up with author \"username <username@web>\" and committer \"gitusername <gitusername@hostname.(none)>\"; not exactly pretty, but it worked.
+
+when upgrading git, the wiki kept working for directly pushing users, but when web users did a change, it was written in the source directory, but not committed (with the error message showing up in the log, but no error message to the users). only when they looked in the recent changes, they noted their modifications missing, and power users would never see their changes.
+
+i suggest that ikiwiki provide a default value for committer (eg. \"ikiwiki <username@hostname>\") to circumvent this issue.
+
+(i didn't pinpoint the exact git version this changed in, but it's between 1.7 and 1.9).
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 3"
+ date="2015-11-30T19:58:43Z"
+ content="""
+I've made essentially the change [[chrysn]] suggested in git master. It will be in the next release.
+
+I've also added Debian [autopkgtest](https://tracker.debian.org/pkg/autopkgtest) support; conveniently, it exhibited this bug, so we can make sure it stays fixed.
+"""]]
--- /dev/null
+For a while I've been wondering how to use a communication channel which can be
+accessed both by e-mail and web interface, while using ikiwiki's git repo. There
+are solutions like Drupal which can combine mailing lists and a forum, but then
+you lose the ikiwiki integration.
+
+So I had an idea:
+
+What if an ikiwiki server subscribes to a mailing list, and automatically posts
+under a "forum" page (like the [[/forum]] here) every time it gets a new e-mail?
+And when someone posts a new entry using git or the web UI, it can send an
+e-mail to the mailing list! (perhaps mark it somehow to avoid an infinite loop)
+
+Does something like this make sense? It can work not only with e-mail but also
+with other forum tools (e.g. Syndie). Are there any critical synchronization
+issues I'm missing? If not, I'd like to suggest this as a feature and add this
+to my todo list :-)
+
+Currently I have mail and forum separate, and I'd like to integrate them. If I
+get positive feedback, I'll start working on it at some point (soon, I hope).
+
+-- [[fr33domlover]]
--- /dev/null
+I found the handling of options and terms regarding both actions highly confusing from the very beginning some weeks ago. so i created a bash function used as *iki $wikiname* that called *ikiwiki* with the needed parameters and the complete pathname of the apropriate configuration file. Only now that shell is gone and the function lost. So I had to find that command again (remember, I didn't used it for weeks).
+
+ ikiwiki --setup $setupfile
+
+Didn't work as expected, rebuilt the whole wiki.
+
+ ikiwiki -setup -refresh $setupfile
+
+Output was:
+
+ cannot read -refresh: No such file or directory
+ usage: ikiwiki [options] source dest
+ ikiwiki --setup configfile
+
+So it was clear: *first* refresh, *then* setup -- and so
+
+ ikiwiki -refresh -setup $setupfile
+
+finally did what I wanted.
+
+## situation
+
+1.) The manpage says:
+
+ --refresh
+ Refresh the wiki, updating any changed pages. This is the
+ default behavior so you don't normally need to specify it.
+ --setup setupfile
+ The default action when --setup is specified is to automatically
+ generate wrappers for a wiki based on data in a setup file, and
+ rebuild the wiki. If you only want to build any changed pages,
+ you can use --refresh with --setup.
+
+Only, both *ikiwiki* and *ikiwiki $setupfile* spit out an error. So it seems i **MUST** use *--refresh* to do a refresh. but I also have to use *--setup $setupfile* because ikiwiki **NEEDS** a config file, but only one of those two options take one.
+
+2.) after building the wiki with the list of directories the install script says:
+
+ To modify settings, edit ~/ikiwiki/$wikiname.setup and then run:
+ ikiwiki -setup ~/ikiwiki/$wikiname.setup
+
+2.a) It is the only place where *-setup* is used. the error output and the manpage use *--setup*
+2.b) It should also say how to rebuild the wiki by creating *only* the new and changed pages.
+
+3.) The file with the basic settings for the installation procedure is referred to as "setup" file. And so are the files with the settings for a particular wiki. Only the manpage uses the term "configuration" more than just a few times.
+
+And maybe it would be possible to update a wiki if the program is called with only a config file as parameter. the mass-rebuild aproach doesn't work for me, a wiki in a user directory is not part of system stucture and so i don't use my root account for anything besides basic installation.
+
+## conclusion
+
+1.) The text for *--refresh* should be updated.
+2.) Short and long options should be clearly distinguishable (and also if 1 or 2 hyphens may be used). So the line *--refresh* in the man page could e.g. read *-r --refresh*
+3.) I'd suggest using "setup" for the file(s) shipped with the software thatare used to create (then so to be called) configuration files with the settings for particular wiki instances.
+
+I also adapted the install script so it doen's clutter my home directory. As for now it still creates *~/.ikiwiki* (useless for me, maybe there could be a setup option not to do it?) but all the rest goes into the same directory (setup file, and the config file and the directory for each instance).
+
+*P.S.: HOWTO sign?*
+
+--[[EdePopede]]
--- /dev/null
+[[!comment format=mdwn
+ username="cbaines"
+ subject="refresh option"
+ date="2015-02-28T19:15:18Z"
+ content="""
+I can't quite work out why the usage/man page is incorrect. It looks like it has been incorrect since it was added in this commit [ffc0be87d7eca4de4dbc91d740d36b7b40bfa911](http://source.ikiwiki.branchable.com/?p=source.git;a=commit;h=ffc0be87d7eca4de4dbc91d740d36b7b40bfa911).
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 2"
+ date="2015-03-01T15:13:08Z"
+ content="""
+> ikiwiki --setup $setupfile
+>
+> Didn't work as expected, rebuilt the whole wiki.
+
+The default action is to rebuild if `--setup` is used, or refresh otherwise.
+
+> ikiwiki -setup -refresh $setupfile
+>
+> Output was:
+>
+> cannot read -refresh: No such file or directory
+
+Well, no, you told ikiwiki to use a setup file named `-refresh`. That's not
+going to work, unless you happen to have such a file. The man page does say
+
+> --setup setupfile
+
+implying that an argument is expected and required. Either of these would be OK,
+for instance:
+
+ ikiwiki -refresh -setup setupfile
+ ikiwiki --setup setupfile --refresh
+
+> 2.a) It is the only place where *-setup* is used. the error output and the manpage use *--setup*
+
+Perl's command-line parser accepts either.
+
+> 3.) The file with the basic settings for the installation procedure is referred to as \"setup\" file. And so are the files with the settings for a particular wiki.
+
+That's because the one used for the auto-installation (which is not mandatory: you can
+write the entire setup file yourself if you prefer, like ikiwiki-hosting does) is a
+special case of the one used for a configured wiki./
+
+> And maybe it would be possible to update a wiki if the program is called with only a config file as parameter.
+
+ikiwiki needs either:
+
+* two non-option arguments, a srcdir *and* a destdir (and probably lots of other options
+ in practice); or
+
+* a setup file (which can specify most things supported by the command line) and
+ no non-option arguments
+
+Both ways are meant to work; the srcdir/destdir syntax is for very simple
+cases (e.g. building static documentation) and the setup file is for
+more complicated cases (entire websites).
+
+Treating two non-option arguments as srcdir/destdir, but a single
+non-option argument as a setup file, seems more confusing to me
+than the current situation.
+"""]]
--- /dev/null
+Just found a bug while building a table with 1st column made of the lines output by <tt>ls -1</tt>. That means, in the beginning there's only 1 cell in each row, and if adding additional columns in other rows, the delimiter ('|') is taken as-is. No difference if the table has a header line or not, or if that one cell is following a '|'.
+
+Examples:
+
+
+### 2 cells each
+
+table with header
+
+[[!table data="""
+1 | 2
+one | two
+a |b
+"""]]
+
+table without header
+
+[[!table header="no" data="""
+1 | 2
+one | two
+a |b
+"""]]
+
+### 2 cells, 3 later
+
+
+table with header
+
+[[!table data="""
+1 | 2
+one | two
+a |b | c
+"""]]
+
+table without header
+
+[[!table header="no" data="""
+1 | 2
+one | two
+a |b | c
+"""]]
+
+### 1 cell, 3 later
+
+
+table with header
+
+[[!table data="""
+1
+one | two
+a |b | c
+"""]]
+
+table without header
+
+[[!table header="no" data="""
+1
+one | two
+a |b | c
+"""]]
+
+### 1 cell (ended by delimiter), 3 later
+
+
+table with header
+
+[[!table data="""
+1|
+one | two
+a |b | c
+"""]]
+
+table without header
+
+[[!table header="no" data="""
+1|
+one | two
+a |b | c
+"""]]
+
+### 1 cell (line starts with delimiter), 3 later
+
+
+table with header
+
+[[!table data="""
+|1
+one | two
+a |b | c
+"""]]
+
+table without header
+
+[[!table header="no" data="""
+|1
+one | two
+a |b | c
+"""]]
+
+### 1 cell (line starts with SPC + delimiter), 3 later
+
+
+table with header
+
+[[!table data="""
+ |1
+one | two
+a |b | c
+"""]]
+
+table without header
+
+[[!table header="no" data="""
+ |1
+one | two
+a |b | c
+"""]]
+
+
+ -- [[EdePopede]]
--- /dev/null
+I have a bogus admin email address infesting a new wiki.
+
+The actual address -- as is on clear display in the wiki's setup file -- is of the form "bob@bobsdomain.org". The infestation, which I cannot kill, or so it seems, is of the form "bob@bobsdomain.org.com".
+
+I have done 'ikiwiki --rebuild --setup mywikis.setup' to no avail. I have grepped everywhere I can think of looking for "org.com." Also no joy.
+
+
+Signed,
+
+Mystified in Rhode Island!
+
+[wingnut@zeus.jtan.com](mailto: wingnut@zeus.jtan.com)
--- /dev/null
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/eetjWe8B34ZeUsHyFzpwC5QvBcEuVxllSvpJHw--#376d7"
+ nickname="Bob"
+ subject="zombie"
+ date="2015-04-07T19:00:48Z"
+ content="""
+I forgot to note that the bogus email addy (*.org.com) appears in the \"Preferecnes\" screen. Nowhere else.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="smcv"
+ subject="comment 2"
+ date="2015-04-13T17:29:50Z"
+ content="""
+If you are logging in using [[plugins/passwordauth]] or [[plugins/httpauth]],
+your email address as used in Preferences is your choice, and you should be
+able to change it via Preferences.
+
+If you are logging in using OpenID, your email address as used in Preferences comes
+from your OpenID provider.
+
+Either way, it's stored in [[the userdb|tips/inside_dot_ikiwiki]].
+"""]]
* [[intrigeri]] `git://gaffer.ptitcanardnoir.org/ikiwiki.git`
* [[gmcmanus]] `git://github.com/gmcmanus/ikiwiki.git`
* [[jelmer]] `git://git.samba.org/jelmer/ikiwiki.git`
-* [[hendry]] `git://webconverger.org/git/ikiwiki`
* [[jon]] `git://github.com/jmtd/ikiwiki.git`
* [[ikipostal|DavidBremner]] `git://pivot.cs.unb.ca/git/ikipostal.git`
* [[ikimailbox|DavidBremner]] `git://pivot.cs.unb.ca/git/ikimailbox.git`
* [[jonas|JonasSmedegaard]] `git://source.jones.dk/ikiwiki-upstream`
* [[arpitjain]] `git://github.com/arpitjain11/ikiwiki.git`
* [[chrysn]] `git://prometheus.amsuess.com/ikiwiki`
-* [[simonraven]] `git://github.com/kjikaqawej/ikiwiki-simon.git`
+* [[simonraven]] (unavailable) `git://github.com/kjikaqawej/ikiwiki-simon.git`
* [[schmonz]] `git://github.com/schmonz/ikiwiki.git`
* [[will]] `http://www.cse.unsw.edu.au/~willu/ikiwiki.git`
* [[kaizer]] `git://github.com/engla/ikiwiki.git`
-* [[bbb]] `http://git.boulgour.com/bbb/ikiwiki.git`
+* [[bbb]] (unavailable) `http://git.boulgour.com/bbb/ikiwiki.git`
* [[KathrynAndersen]] `git://github.com/rubykat/ikiplugins.git`
* [[ktf]] `git://github.com/ktf/ikiwiki.git`
* [[tove]] `git://github.com/tove/ikiwiki.git`
* [[GiuseppeBilotta]] `git://git.oblomov.eu/ikiwiki`
-* [[roktas]] `git://github.com/roktas/ikiwiki.git`
-* [[davrieb|David_Riebenbauer]] `git://git.liegesta.at/git/ikiwiki`
+* [[roktas]] (unavailable) `git://github.com/roktas/ikiwiki.git`
+* [[davrieb|David_Riebenbauer]] (unavailable) `git://git.liegesta.at/git/ikiwiki`
([browse](http://git.liegesta.at/?p=ikiwiki.git;a=summary))
* [[GustafThorslund]] `http://gustaf.thorslund.org/src/ikiwiki.git`
-* [[users/peteg]] `git://git.hcoop.net/git/peteg/ikiwiki.git`
+* [[users/peteg]] (unavailable) `git://git.hcoop.net/git/peteg/ikiwiki.git`
* [[privat]] `git://github.com/privat/ikiwiki.git`
* [[blipvert]] `git://github.com/blipvert/ikiwiki.git`
-* [[bzed|BerndZeimetz]] `git://git.recluse.de/users/bzed/ikiwiki.git`
+* [[bzed|BerndZeimetz]] (unavailable) `git://git.recluse.de/users/bzed/ikiwiki.git`
* [[wtk]] `git://github.com/wking/ikiwiki.git`
* [[sunny256]] `git://github.com/sunny256/ikiwiki.git`
-* [[fmarier]] `git://gitorious.org/~fmarier/ikiwiki/fmarier-sandbox.git`
+* [[fmarier]] (unavailable) `git://gitorious.org/~fmarier/ikiwiki/fmarier-sandbox.git`
* [[levitte]] `git://github.com/levitte/ikiwiki.git`
* jo `git://git.debian.org/users/jo-guest/ikiwiki.git`
([browse](http://git.debian.org/?p=users/jo-guest/ikiwiki.git;a=summary))
-* [[timonator]] `git://github.com/timo/ikiwiki.git`
+* [[timonator]] (unavailable) `git://github.com/timo/ikiwiki.git`
* [[sajolida]] `http://un.poivron.org/~sajolida/ikiwiki.git/`
-* nezmer `git://gitorious.org/ikiwiki-nezmer/ikiwiki-nezmer.git`
+* nezmer (unavailable) `git://gitorious.org/ikiwiki-nezmer/ikiwiki-nezmer.git`
* [[yds]] `git://github.com/yds/ikiwiki.git`
* [[pelle]] `git://github.com/hemmop/ikiwiki.git`
* [[chrismgray]] `git://github.com/chrismgray/ikiwiki.git`
* [[ttw]] `git://github.com/ttw/ikiwiki.git`
-* [[anarcat]] `git://src.anarcat.ath.cx/ikiwiki`
+* [[anarcat]] `git://src.anarc.at/ikiwiki`
* anderbubble `git://civilfritz.net/ikiwiki.git`
* frioux `git://github.com/frioux/ikiwiki`
* llipavsky `git://github.com/llipavsky/ikiwiki`
* [[cbaines]] `git://git.cbaines.net/ikiwiki`
* [[mhameed]] `git://github.com/mhameed/ikiwiki.git`
* [[spalax]] `git://github.com/paternal/ikiwiki.git` ([[browse|https://github.com/paternal/ikiwiki]])
+* [[jcflack]] `git://github.com/jcflack/ikiwiki.git`
+* [[users/mjd]] `https://github.com/mjdominus/ikiwiki.git` ([[browse|https://github.com/mjdominus/ikiwiki]])
+* [[users/kjs]] `git://src.kalleswork.net/ikiwiki.git`
+* bfree `git://github.com/bfree/ikiwiki.git`
## branches
This command uses two [[templates]] to generate
the pages, `calendarmonth.tmpl` and `calendaryear.tmpl`.
+# [[plugins/calendar]] setup option
+
+Most of the goals of this command can be replaced by setting up
+`calendar_autocreate` setup option (of plugin [[plugins/calendar]]), and
+running `ikiwiki --setup you.setup`. The only thing that `ikiwiki-calendar` can
+do and that `ikiwiki` cannot is forcing page generation (using `-f` switch).
+
# AUTHOR
Joey Hess <joey@ikiwiki.info>
--- /dev/null
+# NAME
+
+ikiwiki-comment - posts a comment
+
+# SYNOPSIS
+
+ikiwiki-comment page.mdwn
+
+# DESCRIPTION
+
+`ikiwiki-comment` creates a comment for the specified wiki page file,
+and opens your editor to edit it.
+
+Once you're done, it's up to you to add the comment to whatever version
+control system is being used by the wiki, and do any necessary pushing to
+publish it.
+
+Note that since ikiwiki-comment is not passed the configuration of
+the wiki it's acting on, it doesn't know what types of markup are
+available. Instead, it always removes one level of extensions from the
+file, so when run on a page.mdwn file, it puts the comment in page/
+
+The username field is set to the unix account name you're using.
+You may want to edit it to match the username you use elsewhere
+on the wiki.
+
+# AUTHOR
+
+Joey Hess <joey@ikiwiki.info>
+
+Warning: this page is automatically made into ikiwiki-comments's man page, edit with care
typically use this directive to display a calendar, and also use [[inline]]
to display or list pages created in the given time frame.
-The `ikiwiki-calendar` command can be used to automatically generate the
-archive pages. It also refreshes the wiki, updating the calendars to
-highlight the current day. This command is typically run at midnight from
-cron.
+## Generating archive pages
+
+If [[!iki plugins/calendar desc=option]] `calendar_autocreate` is not set, the
+[[!iki ikiwiki-calendar]] command can be used to automatically generate the archive
+pages. It also refreshes the wiki, updating the calendars to highlight the
+current day. This command is typically run at midnight from cron.
An example crontab:
- 0 0 * * * ikiwiki-calendar ~/ikiwiki.setup "posts/* and !*/Discussion"
+ 0 0 * * * ikiwiki-calendar ~/ikiwiki.setup "posts/* and !*/Discussion"
+
+
+With [[!iki plugins/calendar desc="setup option"]] `calendar_autocreate`,
+all this work is done by `ikiwiki` itself. Thus, the crontab command can be
+replaced by:
+
+ 0 0 * * * ikiwiki --setup ~/ikiwiki.setup --refresh
## usage
for the whole wiki by setting `archivebase` in ikiwiki's setup file.
Calendars link to pages under here, with names like "2010/04" and
"2010". These pages can be automatically created using the
- `ikiwiki-calendar` program.
+ `calendar_autocreate` [[!iki plugins/calendar desc="setup option"]].
* `year` - The year for which the calendar is requested. Defaults to the
current year. Can also use -1 to refer to last year, and so on.
* `month` - The numeric month for which the calendar is requested, in the
The `comment` directive is supplied by the
-[[!iki plugins/comments desc=comments]] plugin, and is used to add a comment
-to a page. Typically, the directive is the only thing on a comment page,
-and is filled out by the comment plugin when a user posts a comment.
+[[!iki plugins/comments desc=comments]] plugin. There should
+be one comment directive in each source file with extension
+`._comment` or `._comment_pending`, and the directive should not
+appear anywhere else. Comments are normally created via the web,
+in which case ikiwiki automatically creates a suitable
+`._comment` file.
+
+Wiki administrators can also commit comment files to the version
+control system directly: they should be named starting with
+the *comments\_pagename* config option (usually `comment_`)
+and ending with `._comment`, for instance `comment_42._comment`.
Example:
## usage
The only required parameter is `content`, the others just add or override
-metadata of the comment.
+metadata for the comment. Many parameters are shortcuts for [[meta]]
+directives.
* `content` - Text to display for the comment.
Note that [[directives|ikiwiki/directive]]
"silent=yes".
Often the template page contains a simple skeleton for a particular type of
-page. For the bug report pages in the above example, it might look
-something like:
+page, wrapped in a [[templatebody]] directive. For the bug report pages in
+the above example, it might look something like:
+ \[[!templatebody <<ENDBODY
Package:
Version:
Reproducible: y/n
Details:
+ ENDBODY]]
The template page can also contain [[!cpan HTML::Template]] directives,
like other ikiwiki [[templates]].
suitable for use in `\[[!meta date="<TMPL_VAR time>"]]`
(see [[meta]]) or `\[[!date "<TMPL_VAR time>"]]` (see [[date]]).
+Text outside the [[templatebody]] directive is not part of the template,
+and can be used to document it.
+
+If the template does not contain a [[templatebody]] directive, the entire
+source of the page is used for the template. This is deprecated.
+
[[!meta robots="noindex, follow"]]
markup around it, as if it were a literal part of the source of the
inlining page.
* `sort` - Controls how inlined pages are [[sorted|pagespec/sorting]].
- The default is to sort the newest created pages first.
+ The default is to sort the newest created pages first, and if pages
+ were created in the same commit, sort them by the name of the page
+ (equivalent to `sort="age title"`).
* `reverse` - If set to "yes", causes the sort order to be reversed.
* `feedlimit` - Specify the maximum number of matching pages to include in
the rss/atom feeds. The default is the same as the `limit` value above.
The problem is that it does not generate the lang attribute in `<html>` and that's what's required for [hyphenation](https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens) so this would be welcome too!
Also, being able to use the language variable in templates would be very useful for various css tweaks. — [Hugo](https://hroy.eu)
+
+----
+
+When `title` is set, is there a way to get the real `pagename` in templates (so that I can use `title_overridden` to render the pagename, as the last part of the page URL, in breadcrumbs) ? -- [[BBB]]
## Creating a template
-The template is a regular wiki page, located in the `templates/`
+The template is in a regular wiki page, located in the `templates/`
subdirectory inside the source directory of the wiki.
+The contents of the [[templatebody]] directive are used as the
+template. Anything outside that directive is not included in the template,
+and is usually used as documentation describing the template.
+
+If the template does not contain a [[templatebody]] directive, the entire
+source of the page is used for the template. This is deprecated, because
+it leads to the template markup being interpreted as ordinary
+page source when the page is built, as well as being used as the template.
Alternatively, templates can be stored in a directory outside the wiki,
as files with the extension ".tmpl".
By default, these are searched for in `/usr/share/ikiwiki/templates`,
the `templatedir` setting can be used to make another directory be searched
first. When referring to templates outside the wiki source directory, the "id"
-parameter is not interpreted as a pagespec, and you must include the full filename
-of the template page, including the ".tmpl" extension. E.g.:
+parameter is not interpreted as a pagespec, you must include the full filename
+of the template page including the ".tmpl" extension,
+and the templatebody directive is not used. E.g.:
\[[!template id=blogpost.tmpl]]
Here's a sample template:
+ \[[!templatebody <<ENDBODY
<span class="infobox">
Name: \[[<TMPL_VAR raw_name>]]<br />
Age: <TMPL_VAR age><br />
<TMPL_VAR notes>
</TMPL_IF>
</span>
+ ENDBODY]]
+
+ This template describes a person. Parameters: name, age,
+ color (favorite color, optional), notes (optional).
The filled out template will be formatted the same as the rest of the page
that contains it, so you can include WikiLinks and all other forms of wiki
--- /dev/null
+The `templatebody` directive is supplied by the
+[[!iki plugins/templatebody desc=templatebody]] plugin.
+
+This directive allows wiki pages to be used as templates
+for the [[template]] or [[edittemplate]] directive, without having
+[[!cpan HTML::Template]] markup interpreted as wiki markup when that
+page is built.
+
+This directive does not produce any output in the wiki page that
+defines the template; the rest of that page can be used to to document
+how to use the template.
+
+The first, un-named parameter is the content of the template.
+Because templates often contain [[directives|ikiwiki/directive]], it's
+convenient to use the "here-document" syntax for it:
+
+ \[[!templatebody <<ENDBODY
+ [[!meta title="<TMPL_VAR name>"]]
+ \[[!tag person]]
+ <dl>
+ <dt>Name:</dt><dd><TMPL_VAR name></dd>
+ <dt>Age:</dt><dd><TMPL_VAR age></dd>
+ </dl>
+
+ <TMPL_VAR description>
+ ENDBODY]]
+
+[[!meta robots="noindex, follow"]]
See also: [Debian ikiwiki popcon graph](http://qa.debian.org/popcon.php?package=ikiwiki)
and [google search for ikiwiki powered sites](http://www.google.com/search?q=%22powered%20by%20ikiwiki%22).
-While nothing makes me happier than knowing that ikiwiki has happy users,
+While nothing makes us happier than knowing that ikiwiki has happy users,
dropping some change in the [[TipJar]] is a nice way to show extra
appreciation.
* [[Smuxi IRC Client|https://smuxi.im/]] - powerful IRC client for GNOME
* [[hplusroadmap|http://diyhpl.us/wiki/]] - a community for open source hardware, do-it-yourself biohacking and practical transhumanism
* [[OpenAFS|http://wiki.openafs.org]] - an open-source, cross-platform distributed file system
+* [Copyleft.org](http://copyleft.org/)
+* [Hacklab Independência](https://hi.ato.br) - radical tech collective
+* [Piratas XYZ](http://piratas.xyz) - one of [pirate party of brazil](http://partidopirata.org)'s sites
Personal sites and blogs
========================
* [[Simon_McVittie|smcv]]'s [website](http://www.pseudorandom.co.uk/) and
[blog](http://smcv.pseudorandom.co.uk/)
* Svend's [website](http://ciffer.net/~svend/) and [blog](http://ciffer.net/~svend/blog/)
-* [muammar's site](http://muammar.me)
* [Per Bothner's blog](http://per.bothner.com/blog/)
* [Bernd Zeimetz (bzed)](http://bzed.de/)
* [Gaudenz Steinlin](http://gaudenz.durcheinandertal.ch)
* [L'Altro Wiki](http://laltromondo.dynalias.net/~iki/) Tutorials, reviews, miscellaneus articles in English and Italian.
* gregoa's [p.r. - political rants](http://info.comodo.priv.at/pr/)
* [Michael Hammer](http://www.michael-hammer.at/)
-* [Richardson Family Wiki](http://the4richardsons.com) A wiki, blog or some such nonsense for the family home page or something or other... I will eventually move the rest of my sites to ikiwiki. The source of the site is in git.
* [The personal website of Andrew Back](http://carrierdetect.com)
* [Paul Elms](http://paul.elms.pro) Personal site and blog in russian.
* [Salient Dream](http://www.salientdream.com/) - All Things Strange.
* [Puckspage]( http://www.puckspage.org/ ) Political and personal blog in German. The name comes from the elf out of midsummer nights dream.
* [[LucaCapello]]'s [homepage](http://luca.pca.it)
* [[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
* Julien Lefrique's [homepage](http://julien.lefrique.name/), hosted on [GitHub pages](https://github.com/jlefrique/jlefrique.github.com) with CGI disabled
* [Anarcat's homepage](http://anarcat.ath.cx/) - with a custom [[theme|theme_market]]
* [KheOps's blog](https://w.ceops.eu/words/)
* [Stig Sandbeck Mathisen](http://fnord.no/) - Personal site and blog, with a bootstrap theme, and varnish frontend.
* Kalle Söderman: [Seen Architecture](http://img.kalleswork.net), [Stockholm Project](http://stockholm.kalleswork.net) - Mainly -image galleries using the album and osm plugins with a customized html5 theme.
-
+* [James Technotes](http://jamestechnotes.com), my [wiki](http://jamestechnotes.com) and [blog](http://jamestechnotes.com/blog).
+* [Amitai Schlair's site](http://www.schmonz.com/)
+* My ([[spalax]]) [professional website](http://paternault.fr)
+* [Aloodo Blog](http://blog.aloodo.org/)
+* Ninguém tem blog! - Restricted ikiwiki hosting
+ * [Dissertos radicais](http://dissertosradicais.tem.blog.br)
+ * [E pelas praças não terá nome](http://epelaspracasnaoteranome.tem.blog.br)
+ * [Igreja Universal do Reino do Iuri](http://iuri.tem.blog.br)
+ * [Mim](http://mim.tem.blog.br)
+* [Mídia Capoeira](https://capoeira.li/blog/) - independent journalism initiative
+* [Sean Whitton's personal website](http://spwhitton.name/)
+[[!template id=links]]
+
Ikiwiki is a **wiki compiler**. It converts wiki pages into HTML pages
suitable for publishing on a website. Ikiwiki stores pages and history in a
[[revision_control_system|rcs]] such as [[Subversion|rcs/svn]] or [[rcs/Git]].
[[blogging|blog]] and [[podcasting|podcast]], as well as a large
array of [[plugins]].
-[[!template id=links]]
+Alternatively, think of ikiwiki as a particularly flexible static
+site generator with some dynamic features.
+
+
## using ikiwiki
Ikiwiki is developed by [[Joey]] and many contributors,
and is [[FreeSoftware]].
+
+
-[Integrated issue tracking with Ikiwiki](http://www.linuxworld.com/news/2007/040607-integrated-issue-tracking-ikiwiki.html) by Joey Hess is now available on LinuxWorld.com. (LinuxWorld's author contract also allows this article to become part of the project's documentation.) Learn how to use Ikiwiki inlining and PageSpecs for lightweight workflow. Joey also explains how having the BTS and docs in the project's revision control system can help users of distributed revision control systems keep bug tracking info in sync with code changes.
\ No newline at end of file
+[[!meta date="2007-04-06 21:29:16 +0000"]]
+
+[Integrated issue tracking with Ikiwiki](http://www.linuxworld.com/news/2007/040607-integrated-issue-tracking-ikiwiki.html) by Joey Hess is now available on LinuxWorld.com. (LinuxWorld's author contract also allows this article to become part of the project's documentation.) Learn how to use Ikiwiki inlining and PageSpecs for lightweight workflow. Joey also explains how having the BTS and docs in the project's revision control system can help users of distributed revision control systems keep bug tracking info in sync with code changes.
+[[!meta date="2008-07-11 09:58:19 -0400"]]
+
I've produced a [code_swarm](http://vis.cs.ucdavis.edu/~ogawa/codeswarm/)
visualization of the first 2+ years of ikiwiki's commit history.
+[[!meta date="2008-06-12 16:34:18 -0400"]]
+
I was asked a good question today: How can a company find someone to work
on ikiwiki? To help answer this question, I've set up a [[consultants]] page.
If you might be interested in being paid to work on ikiwiki, please add your
-After looking up and noticing that another 8 hours had passed, replying to people and hacking, I've added a [[TipJar]] page, in case anyone feels like tossing me a few bucks for ikiwiki. TIA! --[[Joey]]
\ No newline at end of file
+[[!meta date="2006-12-29 07:05:57 +0000"]]
+
+After looking up and noticing that another 8 hours had passed, replying to people and hacking, I've added a [[TipJar]] page, in case anyone feels like tossing me a few bucks for ikiwiki. TIA! --[[Joey]]
+[[!meta date="2008-10-24 16:08:36 -0400"]]
+
Now you can use [[git]] to clone this wiki, and push your changes back,
thanks to ikiwiki's new support for [[tips/untrusted_git_push]]. Enjoy
working on the wiki while offline! --[[Joey]]
+[[!meta date="2010-08-05 17:44:47 -0400"]]
+
ikiwiki-hosting is an interface on top of Ikiwiki to allow easy management
of lots of ikiwiki sites. I developed it for
[Branchable](http://www.branchable.com/), an Ikiwiki hosting provider.
+[[!meta date="2007-03-15 10:55:18 +0000"]]
+
Google has accepted ikiwiki as a mentoring organization for [Summer of Code 2007](http://code.google.com/soc).
See our [[Summer_of_Code|soc]] page for projects.
---[[JoshTriplett]]
\ No newline at end of file
+--[[JoshTriplett]]
+[[!meta date="2007-11-26 19:14:22 -0500"]]
+
I've put together a short screencast that covers approximatly the first
half of the [[setup]] document, and includes a demo of setting up a blog
using ikiwiki.
+[[!meta date="2008-12-31 15:30:41 -0500"]]
+
Ikiwiki has reached version 3.0 and entered a new phase in its
[[development_cycle|roadmap]].
+[[!meta date="2007-02-20 10:11:01 +0000"]]
+
Ikiwiki now has an IRC channel: `#ikiwiki` on irc.oftc.net
The channel features live commit messages for CIA for changes to both
+[[!meta date="2007-10-24 22:21:06 -0400"]]
+
I've started using git as ikiwiki's main repository. See [[download]] for
repository locations.
-Ikiwiki has its own domain now, ikiwiki.info. Update your links.
\ No newline at end of file
+Ikiwiki has its own domain now, ikiwiki.info. Update your links.
+
+[[!meta date="2007-02-18 20:24:26 +0000"]]
I'll keep an eye on [[server_speed]]..
--[[Joey]]
+
+[[!meta date="2008-01-29 18:48:01 -0500"]]
OpenID, and see how OpenID works for you. And let me know your feelings about
making such a switch. --[[Joey]]
-[[!poll 76 "Accept only OpenID for logins" 21 "Accept only password logins" 49 "Accept both"]]
+[[!poll open=no 77 "Accept only OpenID for logins" 22 "Accept only password logins" 50 "Accept both"]]
+
+[[!meta date="2006-11-20 21:08:23 +0000"]]
This poll is now 8 years old. Do we have enough data to make a decision?
Can we consider adding `open=no` to the poll? -- [[Jon]]
+
+----
+
+I vote against disabling password logins until my OpenID will work on [ikiwiki.info](/)!
+See [[/plugins/openid/troubleshooting]]. -- Chap
any changes across since git makes that bog-easy.
Please report any problems..
+
+[[!meta date="2008-03-19 23:07:13 -0400"]]
this, your DNS has already caught up and you are using the new server.
By the way, the new server should be somewhat faster.
--[[Joey]]
+
+[[!meta date="2009-12-12 15:19:42 -0500"]]
[[discussion]] page.
Ikiwiki is now hosted at [Branchable](http://branchable.com/).
+
+[[!meta date="2007-02-20 10:40:02 +0000"]]
style sheet, and always appreciate suggestions for it.
--[[Joey]]
+
+[[!meta date="2006-09-23 00:12:21 +0000"]]
+++ /dev/null
-ikiwiki 3.20140125 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * inline: Allow overriding the title of the feed. Closes: #[735123](http://bugs.debian.org/735123)
- Thanks, Christophe Rhodes
- * osm: Escape name parameter. Closes: #[731797](http://bugs.debian.org/731797)"""]]
\ No newline at end of file
+++ /dev/null
-ikiwiki 3.20140227 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Added useragent config setting. Closes: #[737121](http://bugs.debian.org/737121)
- Thanks, Tuomas Jormola
- * po: Add html\_lang\_code and html\_lang\_dir template variables
- for the language code and direction of text.
- Thanks, Mesar Hameed
- * Allow up to 8 levels of nested directives, rather than previous 3
- in directive infinite loop guard.
- * git diffurl: Do not escape / in paths to changed files, in order to
- interoperate with cgit (gitweb works either way)
- Thanks, intrigeri.
- * git: Explicity push master branch, as will be needed by git 2.0's
- change to push.default=matching by default.
- Thanks, smcv
- * Deal with nasty issue with gettext clobbering $@ while printing
- error message containing it.
- Thanks, smcv
- * Cleanup of the openid login widget, including replacing of hotlinked
- images from openid providers with embedded, freely licensed artwork.
- Thanks, smcv
- * Improve templates testing.
- Thanks, smcv
- * python proxy: Avoid utf-8 related crash.
- Thanks, Antoine Beaupré
- * Special thanks to Simon McVittie for being the patchmeister for this
- release."""]]
\ No newline at end of file
+++ /dev/null
-ikiwiki 3.20140613 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * only\_committed\_changes could fail in a git repository merged
- with git merge -s ours.
- * Remove google from openid selector, per http://xkcd.com/1361/"""]]
\ No newline at end of file
+++ /dev/null
-ikiwiki 3.20140815 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Add google back to openid selector. Apparently this has gotten a stay
- of execution until April 2015. (It may continue to work until 2017.)
- * highlight: Add compatibility with highlight 3.18, while still supporting
- 3.9+. Closes: #[757679](http://bugs.debian.org/757679)
- Thanks, David Bremner
- * highlight: Add support for multiple language definition directories
- Closes: #[757680](http://bugs.debian.org/757680)
- Thanks, David Bremner"""]]
\ No newline at end of file
+++ /dev/null
-ikiwiki 3.20140831 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Make --no-gettime work in initial build. Closes: #[755075](http://bugs.debian.org/755075)"""]]
\ No newline at end of file
--- /dev/null
+ikiwiki 3.20141016 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+[ Joey Hess ]
+
+ * Fix crash that can occur when only_committed_changes is set and a
+ file is deleted from the underlay.
+
+[ Simon McVittie ]
+
+ * core: avoid dangerous use of CGI->param in list context, which led
+ to a security flaw in Bugzilla; as far as we can tell, ikiwiki
+ is not vulnerable to a similar attack, but it's best to be safe
+ * core: new reverse_proxy option prevents ikiwiki from trying to detect
+ how to make self-referential URLs by using the CGI environment variables,
+ for instance when it's deployed behind a HTTP reverse proxy
+ (Closes: [[!debbug 745759]])
+ * core: the default User-Agent is now "ikiwiki/$version" to work around
+ ModSecurity rules assuming that only malware uses libwww-perl
+ * core: use protocol-relative URLs (e.g. //www.example.com/wiki) so that
+ https stays on https and http stays on http, particularly if the
+ html5 option is enabled
+ * core: avoid mixed content when a https cgiurl links to http static pages
+ on the same server (the static pages are assumed to be accessible via
+ https too)
+ * core: force the correct top URL in w3mmode
+ * google plugin: Use search form
+ * docwiki: replace Paypal and Flattr buttons with text links
+ * comments: don't record the IP address in the wiki if the user is
+ logged in via passwordauth or httpauth
+ * templates: add ARIA roles to some page elements, if html5 is enabled.
+ Thanks, Patrick
+ * debian: build-depend on libmagickcore-6.q16-2-extra | libmagickcore-extra
+ so we can thumbnail SVGs in the docwiki
+ * debian: explicitly depend and build-depend on libcgi-pm-perl
+ * debian: drop unused python-support dependency
+ * debian: rename debian/link to debian/links so the intended symlinks appear
+ * debian: fix some wrong paths in the copyright file
+"""]]
+[[!meta date="2014-10-17 01:01:53 +0100"]]
--- /dev/null
+ikiwiki 3.20150107 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ [ [[Joey Hess|joey]] ]
+
+ * Added ikiwiki-comment program.
+ * Add missing build-depends on `libcgi-formbuilder-perl`, needed for
+ `t/relativity.t`
+ * openid: Stop suppressing the email field on the Preferences page.
+ * Set Debian package maintainer to Simon McVittie as I'm retiring from
+ Debian.
+
+ [ [[Simon McVittie|smcv]] ]
+
+ * calendar: add `calendar_autocreate` option, with which `ikiwiki --refresh`
+ can mostly supersede the `ikiwiki-calendar` command.
+ Thanks, Louis Paternault
+ * search: add more classes as a hook for CSS. Thanks, sajolida
+ * core: generate HTML5 by default, but keep avoiding new elements
+ like `<section>` that require specific browser support unless `html5` is
+ set to 1.
+ * Tell mobile browsers to draw our pages in a device-sized viewport,
+ not an 800-1000px viewport designed to emulate a desktop/laptop browser.
+ * Add new `responsive_layout` option which can be set to 0 if your custom
+ CSS only works in a large viewport.
+ * style.css, actiontabs, blueview, goldtype, monochrome: adjust layout
+ below 600px ("responsive layout") so that horizontal scrolling is not
+ needed on smartphone browsers or other small viewports.
+ * core: new `libdirs` option alongside `libdir`. Thanks, Louis Paternault
+
+ [ [[Amitai Schlair|schmonz]] ]
+
+ * core: log a debug message before waiting for the lock.
+ Thanks, Mark Jason Dominus
+ * build: in po/Makefile, use the same `$(MAKE)` as the rest of the build.
+ Thanks, ttw
+ * blogspam: use the 2.0 JSON API (the 1.0 XML-RPC API has been EOL'd).
+ Closes: [[!debbug 774441]]
+
+ [ [[Joey Hess|joey]] ]
+
+ * po: If msgmerge falls over on a problem po file, print a warning
+ message, but don't let this problem crash ikiwiki entirely.
+"""]]
+[[!meta date="2015-01-07 10:24:25 +0000"]]
--- /dev/null
+ikiwiki 3.20150329 released with [[!toggle text="these changes"]]. This is a
+security update fixing a cross-site scripting vulnerability.
+
+[[!toggleable text="""
+ [ [[Joey Hess|joey]] ]
+
+ * Fix NULL ptr deref on ENOMEM in wrapper. (Thanks, igli)
+
+ [ [[Simon McVittie|smcv]] ]
+
+ * Really don't double-decode CGI submissions, even on Perl versions that
+ bundle an old enough Encode.pm for that not to be a problem: the
+ system might have a newer Encode.pm installed separately, like Fedora 20.
+ (Closes: [[!debbug 776181]]; thanks, Anders Kaseorg)
+ * If neither timezone nor TZ is set, set both to :/etc/localtime if
+ we're on a GNU system and that file exists, or GMT otherwise
+ * t/inline.t: accept translations of "Add a new post titled:"
+ (Closes: [[!debbug 779365]])
+ * Consistently document command-line options as e.g. --refresh, not -refresh
+
+ [ [[Amitai Schlair|schmonz]] ]
+
+ * In VCS-committed anonymous comments, link to url.
+
+ [ [[Joey Hess|joey]] ]
+
+ * Fix XSS in openid selector. Thanks, Raghav Bisht.
+ (Closes: [[!debbug 781483]])
+"""]]
+
+In addition, version 3.20141016.2 was released on the same day to backport
+the cross-site-scripting fix to Debian 8.
+
+[[!meta date="2015-03-29 22:46:39 +0100"]]
--- /dev/null
+News for ikiwiki 3.20150610:
+
+ The new [[plugins/emailauth]] plugin allows users to authenticate using an email
+ address, without otherwise creating an account.
+ The [[plugins/openid]] plugin now enables emailauth by default. Please include
+ emailauth in the `disable_plugins` setting if this is not desired.
+ Conversely, if emailauth is required on a wiki that does not enable
+ openid, you can list it in the `enable_plugins` setting.
+
+ikiwiki 3.20150610 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ [[Joey Hess|joey]] ]
+ * New [[plugins/emailauth]] plugin lets users log in, without any registration,
+ by simply clicking on a link in an email.
+ * Re-remove google from [[plugins/openid]] selector; their openid provider is
+ gone for good.
+ * Make the openid selector display "Password" instead of "Other"
+ when appropriate, so users are more likely to click on it when
+ they don't have an openid.
+ * Converted openid-selector into a more generic loginselector helper
+ plugin.
+ * passwordauth: Don't allow registering accounts that look like openids.
+ * Make cgiurl output deterministic, not hash order. Closes: #[785738](https://bugs.debian.org/785738)
+ Thanks, Daniel Kahn Gillmor
+ * [ [[Simon McVittie|smcv]] ]
+ * Do not enable emailauth by default, to avoid surprises on httpauth-only
+ sites. Enable it by default in openid instead, since it is essentially
+ a replacement for OpenIDs.
+ * Make the attachment plugin work with CGI.pm 4.x (Closes: #[786586](https://bugs.debian.org/786586);
+ workaround for #[786587](https://bugs.debian.org/786587) in libcgi-pm-perl)
+ * Add a public-domain email icon from tango-icon-theme
+ * Populate pagectime from either mtime or inode change time,
+ whichever is older, again for more reproducible builds
+ * debian: build the docwiki with LC\_ALL=C.UTF-8 and TZ=UTC
+ * debian/copyright: consolidate permissive licenses
+ * debian/copyright: turn comments on provenance into Comment
+ * [[plugins/brokenlinks]]: sort the pages that link to the missing page, for
+ better reproducibility
+ * Add \[[!meta date]] to news items and tips, since the git checkout
+ and build process can leave the checkout date in the tarball
+ release, leading to unstable sorting
+ * Sort backlinks deterministically, by falling back to sorting by href
+ if the link text is identical
+ * Add a `$config{deterministic}` option and use it for the docwiki
+ * [[plugins/haiku]]: if deterministic build is requested, return a hard-coded haiku
+ * [[plugins/polygen]]: if deterministic build is requested, use a well-known random seed"""]]
--- /dev/null
+ikiwiki 3.20150614 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * inline: change default sort order from age to "age title" for
+ determinism, partially fixing deterministic build for git-annex,
+ ikiwiki-hosting etc. (Closes: #[785757](http://bugs.debian.org/785757))
+ * img: avoid ImageMagick misinterpreting filenames containing a colon
+ * img test: set old timestamp on source file that will change, so that
+ the test will pass even if it takes less than 1 second"""]]
\ No newline at end of file
## data transfer notes
-If you run 'ikiwiki -setup my.setup' to force a rebuild of your wiki, the
+If you run 'ikiwiki --setup my.setup' to force a rebuild of your wiki, the
entire thing will be re-uploaded to Amazon S3. This will take time, and
cost you money, so it should be avoided as much as possible.
-If you run 'ikiwiki -setup my.setup -refresh', ikiwiki will only upload the
+If you run 'ikiwiki --setup my.setup --refresh', ikiwiki will only upload the
modified pages that it refreshes. Faster and cheaper. Still, if you have
very large pages (for example, a page that inlines hundreds of other pages
.. or is just very large), the complete page contents will be re-uploaded
## deleting a bucket
-You can use "ikiwiki -setup my.setup --delete-bucket" to delete anything
+You can use "ikiwiki --setup my.setup --delete-bucket" to delete anything
that's in the configured bucket, and remove the bucket.
To check for and moderate comments, log in to the wiki as an admin,
go to your Preferences page, and click the "Comment Moderation" button.
-The plugin requires the [[!cpan RPC::XML]] perl module.
+The plugin requires the [[!cpan JSON]] perl module.
You can control how content is tested via the `blogspam_options` setting.
-The list of options is [here](http://blogspam.net/api/testComment.html#options).
+The list of options is [here](http://blogspam.net/api/2.0/testComment.html#options).
By default, the options are configured in a way that is appropriate for
wiki content. This includes turning off some of the more problematic tests.
An interesting option for testing is `fail`, by setting it (e.g.,
The directive displays a calendar, similar to the typical calendars shown on
some blogs.
-The [[ikiwiki-calendar]] command is used to keep the calendar up-to-date.
+The [[ikiwiki-calendar]] command is used to force generating year and month
+pages from templates (overriding the existing ones).
+
+## Setup options
+
+* `archivebase` - Default value for [[ikiwiki/directive/calendar]] directive
+ option of the same name.
+* `archive_pagespec` - [[ikiwiki/PageSpec]] of pages to include in the
+ archives, if option `calendar_autocreate` is on. It defaults to `*`.
+* `calendar_autocreate` - Control whether new archive pages are created as
+ needed. It defaults to being done only if option `archivebase` is set.
+* `calendar_fill_gaps` - If set (and `calendar_autocreate` is set as well),
+ build calendar pages of empty years and months (but does not build pages older
+ than the older page, and younger than the younger page of the pagespec). If
+ not, those empty calendar pages will be skipped. *Please note:*
+ * The archive pages will not be automatically updated if this option changes.
+ It is up to the user to delete relevant pages, and rebuild the wiki.
+ * When `calendar_fill_gaps` is set, and a post is deleted, making the
+ corresponding year/month empty, the corresponding page is left, and shows
+ an empty calendar. This is on purpose, not to break any external link
+ pointing to this particular page. If you do not like it, delete the
+ relevant pages, and rebuild the wiki.
## CSS
> I've implemented this. See [[todo/Restrict_formats_allowed_for_comments]].
> --[[wentasah]]
+
+## URLs in anonymous-style comments committed directly via VCS
+
+[[!template id=gitbranch branch=schmonz/comments-anonymous-url-vcs author="[[schmonz]]"]]
+
+I recently imported my site from Textpattern into ikiwiki (using
+an `ikiwiki-import` program that may someday make its way into
+ikiwiki proper). Textpattern's comments behave much like ikiwiki's
+anonymous comments, so piping each imported comment through
+`ikiwiki-comment` and regenerating the site with `comments_allowauthor=1`
+preserved almost all the information.
+
+What's missing: if a comment directive has a `url` param, I'd expect
+the rendered page to href the author's name to that URL. This works
+as I expect for new comments added via the CGI, but not for imported
+comments added via the VCS directly.
+
+My branch has a fix that doesn't break `t/comments.t`, doesn't
+appear to break anonymous or signed-in comments via the CGI in any
+way I've tried, and lets me render my (incredibly valuable ;-)
+imported blog comments with full fidelity. OK to commit?
+
+> Ship it. --[[smcv]]
+
+>> Thanks, have done. --[[schmonz]]
My wishlist for the plugin would include:
-- Reading exif info from the imagefile
-- ~~Keeping the full resolution image files out of version control~~ Solved this by simply creating a underlay for the images. Works out of the box for my non cgi workflow.
+[[!template id=gitbranch branch=kjs/album6-imgmeta author="[[Kalle Söderman|kjs]]"]]
+
+- ~~Reading exif info from the imagefile~~
+ - I have now implemented this (in some fashion) and the patch is available in my album6-imgmeta branch. --kjs
+
+- ~~Keeping the full resolution image files out of version control~~ Solved
+this by simply creating a underlay for the images. Works out of the box for my
+non cgi workflow.
- Being able to create new albums by tag or by manually picking images from other albums. Could be a simple comma separated list of viewer names, or even full urls, in the album directive.
- A counter showing **current image/total number of images in album**. This would mean that you know how many images you have left to click through before you have seen all images in an album. This gives you enought info to decide weather to click through or go back/leave.
--- /dev/null
+[[!template id=plugin name=asciidoc author="Karl Mowson, GEychaner"]]
+[[!tag type/format]]
+
+I have [completely overhauled](https://groups.google.com/forum/#!topic/asciidoc/vwS1Vijv4hQ) the Asciidoc plugin for ikiwiki that was created by [[Karl Mowson|http://www.mowson.org/karl/colophon/]]. The source can be downloaded from my [[Dropbox|http://dl.dropbox.com/u/11256359/asciidoc.pm]].
+
+### Features
+
+* Uses a filter hook to escape WikiLinks and Directives using Asciidoc `+++` passthrough macros, to avoid them being processed by Asciidoc. This behavior is configurable in the wiki setup file.
+* Adds a preprocessor directive 'asciidoc' which allows extra Asciidoc command-line options to be passed on a per-page basis. Each parameter name is the option name (the leading `--` will be inserted automatically), and the parameter value is the option value. Currently, only 'conf-file' and 'doctype' are allowed (or even useful).
+* Sets the page title from the first line in the Asciidoc file using a meta directive. This behavior is configurable in the wiki setup file.
+* Searches for an Asciidoc configuration file named the same as the wiki if none is specified in the setup file.
+* Asciidoc configuration files are stored in the wiki. They should be named `._conf` to avoid publishing them.
+
+### Problems
+
+* Escaping Directives is not optimal. It prevents markup from being used in Directives, and the passthrough macros have to include extra spaces to avoid having directives that return an empty string collapse to `++++++`. In addition, I had to borrow the regexps from the Ikiwiki source code; it would be nice if this were available as part of the API.
+* Handling of Asciidoc errors is suboptimal; they are simply inserted into the returned page. This could be fixed in Perl 5.12 by using the run_forked() in IPC::Cmd.
--- /dev/null
+[[!meta author="spalax"]]
+[[!template id=plugin name=compile author="[[Louis|spalax]]"]]
+
+# Compile
+
+The compile plugin provides the `compile` directive, used to on-the-fly compile
+and publish documents.
+
+For instance, if you want to publish files together with their sources (like
+`.tex` and `.pdf` files), you can have the `.tex` file in your source wiki
+directory, and command `\[[!compile files="foo.tex"]]` (or wikilink
+`\[[foo.tex]]`, if the right option is set) will compile file and render as a
+link to the `.pdf` file.
+
+[[!toc startlevel=2]]
+
+## Warning
+
+Some important security notice.
+
+- This plugins allows user to execute arbitrary commands when compiling the
+ wiki. Use at your own risk. If you use Ikiwiki as a static web site compiler
+ (and not a wiki), and you are the only one to compile the wiki, there is no
+ risk.
+
+- Source files are published, wheter option `source` is true or not. If
+ `source` is false, source may not be *advertised*, but it is still available
+ somewhere on your website (most likely by replacing in the compiled file URL
+ the extension of the compiled file by the extension of the source file). So,
+ do not use this plugin if you do not want to publish your source files
+ (sorry: I designed this plugin to publish free stuff).
+
+## Rationale
+
+I want to publish some latex files, both source (`.tex`) and compiled (`.pdf`)
+version, but I do not want to maintain two versions of the same file.
+
+Using this plugin, I only have to maintain the `.tex` files, and thoses files
+are compiled on the fly, so that the `pdf` is published.
+
+## String formatting
+
+Strings (destination name, template name and build command) accept python-like
+syntax ``%{name}s``, which is replaced by the value of variable ``name``. The
+following variables are abailable.
+
+- `srcname`: Source name.
+- `srcextension`: Extension of the source name.
+- `filetype`: File type (extension of the source name, otherwise specified by directive).
+- `dirname`: Directory of the source file.
+- `wikiname`: Name of source file, relative to source wiki directory.
+- `srcfullname`: Name of source file, relative to file system root.
+- `basename`: Source name, without directory nor extension.
+- `destname`: Destination name (without directory).
+- `destextension`: Extension of the destination name.
+- `targetname`: Destination name, relative to the destination directory.
+- `destfullname`: Destination name, relative to file system root.
+
+## Directive
+
+### Usage
+
+Basic usage of this plugin is:
+
+ \[[!compile files="foo.ext"]]
+
+It renders file `foo.ext` according to rules defined in the setup file, and
+publish the compiled version.
+
+### Arguments
+
+All the arguments (but `source` and `filetype`) are string which are processed
+using python-like string formatting, and described in the setup options section.
+
+- `files`: List of files used in compilation, as space separated string. For
+ instance, to compile some tex file including a png image, you will have:
+ `files="foo.tex image.png"`. It is not possible to have filenames containing
+ spaces (unless you provide me a patch to recognize escaped spaces).
+- `filetype`: By default, the source file extension is used to determine build
+ command and other configuration. If the same extension refer to different
+ type of files, you can enforce the filetype using this argument. For
+ instance, if some your LaTeX files have to be compiled with `pdflatex`, while
+ the other require `latex`, your `compile_filetypes` can contains two keys
+ `tex` and `texdvi`. By default, LaTeX files will be compiled using
+ configuration associated to `tex`, unless directive has argument
+ `filetype=texdvi`, in which case the latter configuration is used.
+- `destname`: Name of the compiled file name.
+- `build`: Build command.
+- `source`: Boolean to choose whether to publish source file or not. The only
+ effect is the template choice: source is always published (but not always
+ advertised).
+- `template`: Name of the template to use (if set, the `source` option is
+ irrelevant).
+
+### Extensions
+
+Note: This directive does not work if source file name does not have an
+extension (i.e. does not contain a dot). This should not be too hard to
+implement, but I do not need it. Patches welcome.
+
+## Configuration
+
+Here are the setup options (most of them can be overloaded on a per-extension
+basis by setup option `compile_filetypes`, or by directive arguments):
+
+- `compile_source` (boolean): should sources be published with compiled file
+ (this only affect template choice; see warning)? Default is true.
+- `compile_template_source` (string): name of the template to use for compiled
+ files when option `source` is true. Default is `compile_source.tmpl`.
+- `compile_template_nosource` (string): name of the template to use for
+ compiled files when option `source` is false. Default is
+ `compile_nosource.tmpl`.
+- `compile_filetypes` (string): Per extension configuration (see paragraph
+ below).
+- `compile_tmpdir` (string): Path of a directory to use to compile files:
+ source file (and dependency) are copied to this directory before being
+ compiled (to avoid messing the ikiwiki directory with compiled version or
+ auxiliary files). Default is `SOURCE_WIKI/.ikwiki/tmp/compile`.
+- `compile_bindir` (string): Directory containing binaries to use to compile
+ files. Default is undefined.
+- `compile_depends` (string): List of files all compiled files will depend on
+ (see *Compilation* section below).
+- `compile_build` (string): Command to use to compile files. Default
+ is undefined.
+- `compile_inline` (boolean): If true, wikilinks pointing to files with an
+ extension specified in `compile_filetypes` are treated as a directive
+ \[[!compile files="LINK"]]. For instance, if this is set globally (or just
+ for tex), a wikilink \[[foo.tex]] will compile file `foo.tex`, and publish
+ the compiled `foo.pdf` file.
+
+### The `compile_filetypes` option
+
+This variable is a json string, representing a dictionary. Keys are source file
+extensions, values are dictionary of options applying only to files with this
+extension.
+
+Keys of these new directory are `source`, `template_nosource`,
+`template_source`, `build`, `depends`, `inline`, and overrides generic options
+defined above. They are themselves overriden by directive arguments (excepted
+`inline`).
+
+Example:
+
+ compile_filetypes => '{
+ "tex": {
+ "build": "pdflatex %{basename}s",
+ "destname": "%{basename}s.pdf",
+ "depends": ["logo.png"],
+ "inline": "1"
+ },
+ "texdvi": {
+ "build": "latex %{basename}s",
+ "destname": "%{basename}s.pdf",
+ "depends": ["logo.eps"]
+ }
+ }'
+
+## Compilation
+
+### Dependencies
+
+Before compilation, the source file and all dependencies are copied to the
+temporary directory defined by option `compile_tmpdir`. For instance, if all
+you LaTeX files are compiled using a custom class `foo.sty`, and a particular
+file `bar.tex` uses the `logo.png` file, your setup option will contain
+`foo.sty` as `depends`, and `compile` directive will be called using
+`\[[!compile files="bar.tex logo.png"]]`. Then, before compilation, files
+`foo.sty`, `bar.tex` and `logo.png` will be copied in the same temporary
+directory.
+
+Note that path are *flattened* when copied: before performing compilation of
+directive `\[[!compile files="sub1/foo sub2/bar"]]`, files `foo` and `bar` will
+be copied in the same directory: this temporary directory will contain failes
+`foo` and `bar`, but not `sub1/foo` and `sub2/bar`.
+
+### Build command
+
+The build command used is (if defined, by priority order):
+
+- defined by argument `build` of directive;
+- setup command ``compile_filetypes{TYPE}{build}``;
+- setup command ``compile_build`` (if you have a generic build command);
+- command ``$config{compile_bindir}/${extension}s %{srcname}s`` (if setup variable ``compile_bindir``is defined, is a directory, and contains an executable file matching the extension, it will be used);
+- command ``make -f $config{compile_bindir}/make.${extension}s %{destname}s`` (if setup variable ``compile_bindir`` is defined, is a directory, and contains a readable makefile ``make.EXTENSION``, it will be used).
+
+## Template
+
+The way links are rendered is defined in a template, which is (by order of
+priority, some of them depends on whether ``source`` is true):
+
+- argument `template` of directive;
+- setup variable ``compile_filetypes{TYPE}{template_source}`` or ``compile_filetypes{TYPE}{template_nosource}``;
+- setup variable ``compile_source`` or ``compile_nosource``;
+- `compile_source.mdwn` or `compile_nosource.mdwn`.
+
+It is passed the following variables:
+
+- `DESTURL`: URL to the compiled file.
+- `DESTNAME`: Name of the compiled file.
+- `SRCURL`: URL to the source file.
+- `SRCNAME`: Name of the source file (without directory).
+- `ORIGNAME`: Name of the source file (with directory).
+
+Note that templates can be used to display images (instead of a link to them).
+For instance, if you have a `.tiff` file you want to convert to png before
+displaying it on your website, you can use as a template:
+
+ <img src="<TMPL_VAR DESTURL>">
+
+# Download
+
+Code and documentation can be found here : [[https://atelier.gresille.org/projects/gresille-ikiwiki/wiki/Compile]].
--- /dev/null
+This plugin sounds exactly like what I need! I too have sources I want to compile on the fly,
+such as diagrams made with Dia and perhaps API reference manuals made with Doxygen.
+
+I'd like to use it, but -
+
+Problem: Any user can change the command to something dangerous that deletes file and
+causes irreversible damage to the system. I can even happen by mistake.
+
+Suggestion: Add an option to the setup file that forbids to override the build command in the
+directive, and then only the setup file can configure build commands (if you want). Another
+idea, an option to validate the build command, either against a regex or using an arbitrary
+script specified in setup file - then e.g. you can choose which commands are allowed.
+
+What do you think?
+
+-- [[fr33domlover]]
+
+> The problem you mention is known, and is not a problem for me, since I am the
+only user of the wiki. However, if we need a *secure* version of this
+command...
+>
+> Imagine we have a setup option `compile_unsecure`.
+>
+> The directive takes the following arguments
+>
+> - filetype: No problem.
+> - build: Forbidden.
+> - source: No problem.
+> - template: No problem.
+> - destname and files: The problem is that right now, the command is run using a shell
+> call. Thus, a user can easily use this argument to inject malicious
+> commands (something like \[[!compile files=";rm -fr *"]] (well, this
+> actually would not work, but you get the idea)). I do want to keep the
+> ability to use shell commands, for the flexibility it provides, but I imagine
+> we can:
+> - interpret the `build` command depending on its type:
+> - if it is a string, it is interpreted as a shell command;
+> - if it is a list of strings, the first one is the command to execute,
+> the following ones are the arguments. If I am not wrong, this should
+> prevent command injection.
+> - if it is a list of lists of strings, it is a list of commands to
+> execute (execution being stopped on the first error; usefull for stuff
+> like `latex foo.tex && dvipdf foo.dvi`).
+> - the `compile_unsecure` would:
+> - forbid commands to be strings (thus, forbidding shell commands, and preventing command injections);
+> - forbid compilation using Makefile or executable present in the wiki (to prevent users from modifying those files, and executing arbitrary commands);
+> - forbid directive argument `build`.
+>
+>
+> Any thoughts?
+>
+> -- [[Louis|spalax]]
--- /dev/null
+# TL;DR
+
+**Plugin**: [opengraph.pm](https://notabug.org/hiatobr/ikiwiki-plugin-opengraph/raw/master/opengraph.pm)
+
+**Source**: [git](https://notabug.org/hiatobr/ikiwiki-plugin-opengraph)
+
+---
+
+[[!toc]]
+
+---
+
+# NAME
+
+IkiWiki::Plugin::opengraph - Adds Open Graph tags on the html head
+
+---
+
+# DESCRIPTION
+
+This plugin implements the Open Graph tags in the head of the hmtl for all pages, provided you configure it properly and add it to the current template.
+For more information on what is Open Graph, visit [[!wikipedia Open_Graph]].
+To test your site against the Open Graph rules, use the tool available on <https://developers.facebook.com/tools/debug/og/object/>.
+
+# DISCLAIMER
+
+> **WARNING: Open Graph is modern spyware. You should use this if and only if you don't mind making the readers of your wiki/blog being tracked by evil corporations without their consent. By using this plugin you are being mean to the people who are reading your content. You have been warned.**
+
+---
+
+# INSTALLATION
+
+Put [opengraph.pm](https://notabug.org/hiatobr/ikiwiki-plugin-opengraph/raw/master/opengraph.pm) in *${HOME}/.ikiwiki/IkiWiki/Plugin/* or elsewhere in
+your *@INC* path. Or read [[/plugins/install]].
+
+---
+
+# CONFIGURATION
+
+Add to the configuration in your [[blog.setup|/setup#index5h2]] file.
+
+ ## Open Graph plugin
+ # For more information, see
+ # <https://en.wikipedia.org/wiki/Open_Graph#Open_Graph_protocol>.
+ # Default values for <http://ikiwiki.info>
+ # obtained from <https://developers.facebook.com/tools/debug/og/object/>
+ # meta property="og:title"
+ opengraph_title: "ikiwiki"
+ # meta property="og:type"
+ opengraph_type: "website"
+ # meta property="og:url"
+ opengraph_url: "http://ikiwiki.info/"
+ # meta property="og:image"
+ opengraph_image: "http://ikiwiki.info/logo/ikiwiki.png"
+ # meta property="og:description"
+ opengraph_description: "Ikiwiki is a wiki compiler."
+
+Add *opengraph* to the list of plugins:
+
+ add_plugins: [qw{goodstuff opengraph}]
+
+---
+
+# TEMPLATES
+
+You will need to add the following code to [[page.tmpl|/templates]] on the current
+[[template|/templates]]. It **must** be in the <head> section of the <html>. I recommend
+puting it after the <title> tag.
+
+ <TMPL_IF OPENGRAPH>
+ <TMPL_VAR OPENGRAPH_TAGS>
+ </TMPL_IF>
+
+---
+
+# BUGS AND LIMITATIONS
+
+...that's not a bug. It's an issue. Issues shall be reported [here](https://notabug.org/hiatobr/ikiwiki-plugin-opengraph/issues)
+
+Seriously, I don't know how to fetch the current page's description. Help on that is appreciated.
+
+---
+
+# LICENSE AND COPYRIGHT
+
+Copyleft (.) 2015 Hacklab Independência
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+---
+
+# SEE ALSO
+
+[[index]]
+
+[[!wikipedia Open_Graph]]
+
+[[plugins/contrib/opengraph]]
--- /dev/null
+Summary
+=======
+
+A plugin for handling files written in [org-mode][].
+
+A complete rewrite of the plugin can be found
+[here][chrismgray-rewrite]. It uses a
+dedicated emacs instance to parse the org-mode files. Thus, it should
+be a bit faster than the older plugin, as well as properly handling
+[[wikilinks|ikiwiki/wikilink]] and images, two features not present in the older
+plugin. An example of its use can be found at my [blog][chrismgray-blog].
+
+[[!template id=gitbranch branch=wtk/org author="[[wtk]]"]]
+
+Original plugin
+===============
+
+This is an updated form of [Manoj Srivastava's plugin][MS]. You can
+see the plugin [in action][example] on my blog.
+
+For reasons discussed in the [[reStructuredText plugin|plugins/rst]],
+wikilinks and other ikiwiki markup that inserts raw HTML can cause
+problems. Org-mode provides a [means for processing raw HTML][raw],
+but Ikiwiki currently (as far as I know) lacks a method to escape
+inserted HTML depending on which plugins will be used during the
+[[htmlize phase|plugins/write#index11h3]].
+
+[org-mode]: http://orgmode.org/
+[MS]: http://www.golden-gryphon.com/blog/manoj/blog/2008/06/08/Using_org-mode_with_Ikiwiki/
+[example]: http://blog.tremily.us/posts/Git/notes/
+[raw]: http://orgmode.org/manual/Quoting-HTML-tags.html
+[chrismgray-rewrite]: https://github.com/chrismgray/ikiwiki-org-plugin
+[chrismgray-blog]: http://chrismgray.github.com
+
--- /dev/null
+I don't find org.pm in git branch. The steps are:
+
+1. git clone git://github.com/wking/ikiwiki.git
+2. cd ikiwiki
+3. find . | grep org.pm
+
+I've taken the name from <http://www.golden-gryphon.com/software/misc/org.pm.html>
--- /dev/null
+I've submitted a couple of patches in [this pull request](https://github.com/jmtd/ikiwiki/pull/1).
+The first passes along whatever parameters are being supplied to the pagespec evaluation
+(without which, specs like `user(alice)` don't work).
+
+The second changes the "example" returned by `getsetup` to be an actual map, since I saw
+that `--dumpsetup` can make use of that to produce a syntactically correct map example
+in the YAML config file. An earlier commit comment suggested that once was a problem,
+but it doesn't seem to be one now.
+
+Only later did I notice this [[earlier discussion|todo/pagespec_aliases]] suggesting
+that the problem with a map might have been in websetup - which I'm not using, so I don't
+know if it would still be a problem there.
+
+[[jcflack]]
+
+> With apologies for the delay, jcflack's patches have now been merged. — [[Jon]]
--- /dev/null
+Does this support ikiwiki-specific idioms like `\[[links]]` or `\[[!macros]]`? I looked at [the readme](https://github.com/sciunto/ikiwiki-pandoc) and it's not quite clear there... --[[anarcat]]
+
+> I don't think it needs to? [[wikilinks|ikiwiki/wikilink]] and
+> [[directives|ikiwiki/directive]] (what you called "macros") are handled
+> by the linkify and preprocess hooks, whereas [[plugins/mdwn]] and
+> this plugin are done afterwards, in the htmlize hook. --[[smcv]]
+
+> > I guess that answers my question by a delicious "yes", thanks! --[[anarcat]]
--- /dev/null
+[[!template id=plugin name=signinview core=0 author="[[jcflack]]"]]
+[[!tag type/special-purpose]]
+
+This plugin is one implementation approach to a [[todo/zoned ikiwiki]]. It is named
+like [[plugins/signinedit]], which requires users to sign in before editing pages.
+Similarly, this plugin requires users to sign in before _viewing_ certain pages.
+Unlike [[plugins/signinedit]], which _only_ checks that any user is signed in,
+this plugin is also similar to [[plugins/lockedit]] in that it checks the user's
+identity and a [[ikiwiki/PageSpec]] to determine _which_ pages may be viewed.
+It works with any auth methods ikiwiki supports, not only those the `http` server
+also understands.
+
+## How to configure
+
+This plugin adds a new function, `do=view`, to ikiwiki's CGI wrapper. It is intended
+to be called by the `http` server as an `ErrorDocument` for the `403` (forbidden) error response.
+
+In order to be usable even in shared-hosting situations without full access to
+the `http` server configuration files, this plugin requires nothing more than
+`.htaccess` files, as long as the server is configured to honor `ErrorDocument` and
+`Deny` or `Require` directives in them.
+
+To divide the wiki into a public zone and one or more private zone(s), simply place
+`Require all denied` (Apache 2.4), `Deny from All` (Apache 2.2), or the equivalent
+directive for the server and version in use, on the topmost directory of any private
+zone, either in an `.htaccess` file, or in the server configuration file if possible.
+Any location outside of these will continue to be served as normal public static
+ikiwiki content.
+
+Then, if the `{$cgiurl}` is, for example, `/cgi-bin/ikiwiki.cgi`, add the directive
+
+ ErrorDocument 403 /cgi-bin/ikiwiki.cgi?do=view
+
+at the private locations or any ancestor up to the documentroot itself, again either
+in a `.htaccess` file or in the server configuration file.
+
+That's it for the server configuration. The server will now punt every request for
+private content to the ikiwiki wrapper. Everything else about the authorization
+decision--what auth method to use, whether there is just one private zone or different
+zones for different users--is handled by ikiwiki using a [[ikiwiki/PageSpec]].
+
+### viewable_pages config option
+
+This option in `ikiwiki.setup` is a [[ikiwiki/PageSpec]] defining which pages can be viewed.
+Because one predicate that can be used in a [[ikiwiki/PageSpec]] is `user`, this is enough
+to define interesting access rules. For example:
+
+ viewable_pages: >
+ ((user(astolfo) or user(basilio)) and team1/*)
+ or
+ ((user(clotaldo) or user(estrella)) and team2/*)
+
+Note that this defines the conditions to _allow_ viewing, which is opposite the
+sense of the [[plugins/lockedit]] plugin, where you define the conditions
+to _deny_ editing.
+
+If there are more than a few users in a group, or the specification for accessible
+pages is more complex, the [[plugins/contrib/pagespec_alias]] plugin
+can be useful to factor things out. Note it currently must [[be patched|plugins/contrib/pagespec_alias/discussion]]
+for this to work:
+
+ pagespec_aliases:
+ team1: >
+ user(astolfo)
+ or user(basilio)
+ team2: >
+ user(clotaldo)
+ or user(estrella)
+ team1stuff: team1/* or common/*
+ team2stuff: team2/* or common/*
+ viewable_pages: >
+ (team1() and team1stuff())
+ or (team2() and team2stuff())
+
+### mime_types config option
+
+Normally, when serving the static pages of an ordinary public site,
+the `http` server itself is responsible for identifying the `Content-Type`
+of each file. However, for any page that is served by this plugin instead
+of directly, the CGI specification makes it [plugin's job](http://tools.ietf.org/html/rfc3875#section-6.3.1),
+not the server's, to identify the `Content-Type`.
+
+In the current version, this plugin does that in a dead-simple way. For any page that ikiwiki htmlized
+(that is, for which the `pagetype` [[plugin API function|plugins/write]] returns a value),
+the type `text/html` is assigned. For anything else, a simple collection of content types and `PageSpec`s
+must be configured in the `ikiwiki.setup` file:
+
+ mime_types:
+ image/png: '*.png'
+ application/pdf: '*.pdf'
+ text/css: '*.css'
+
+Anything without a matching rule gets served as `application/octet-stream`, which is
+probably not what you want, but a clear sign of what rule needs to be added.
+
+## Other considerations
+
+### Leakage of non-content files
+
+Any CGI code that does what this plugin does, and can serve requested files under the
+document root, needs to be careful not to allow viewing of certain sensitive files
+that may also be found there, such as `.htaccess`, `.htpasswd`, etc. Instead of trying
+to think of all the possible files that should not be served, this plugin takes an
+absolutely strict approach: every requested file is looked up in the `%destsources` hash,
+containing all the files ikiwiki has generated or placed in the web root.
+Any file that _ikiwiki didn't put there_, this plugin _won't touch_. Otherwise, its page
+name is now known, and must satisfy the `viewable_pages` `PageSpec`.
+
+This policy is also what allows this plugin to work back through `%pagesources` to
+the original source name, needed for the content-type rules described above.
+
+### Cache control
+
+The purpose of a non-public zone can be defeated if there are caching proxies or
+other non-private caches that might retain the content this plugin returns.
+
+Caching of the response is automatically forbidden by the HTTP specification
+[if there was an `Authorization` header in the request](http://tools.ietf.org/html/rfc7234#section-3.2).
+However, this plugin works with any auth method ikiwiki supports, not all of which require
+that header, so this plugin always emits response headers to explicitly forbid caching.
+
+Note that nothing precludes an evil caching agent that ignores the rules.
+
+### Other ways to handle `Content-Type`
+
+While it is simple enough to supply a `mime_types` map in `ikiwiki.setup`, it also
+duplicates logic that has already been done to death in other places. Another approach
+would be to use `File::MimeInfo::Magic`, which is already present if the `filecheck`
+plugin is in use.
+
+In a wiki _compiler_, it would be natural to do that content-type determination
+at compile time and save it in page state, so this plugin would simply output
+the stored type. On the other hand, saving the type for every (non-htmlized?) page
+would enlarge the state `Storable` that has to be loaded, and so might not be
+faster than typing the file on the fly.
+
+## Obtaining and installing
+
+The `signinview` plugin is [not in github yet](https://github.com/jcflack/ikiwiki/tree/plug-signinview)
+(horroars! vaporware!). What _is_ in github at the moment is a preliminary patch I have
+[proposed](https://github.com/joeyh/ikiwiki/pull/14),
+giving plugins some control over the environment variables that a generated wrapper will preserve.
+
+Depending on the ultimate fate of that patch, I will adjust/rebase and then push the `signinview`
+branch itself.
--- /dev/null
+[[!template id="plugin" name="sqlite_search" author="Baldur Kristinsson"]]
+
+The [sqlite_search plugin](https://github.com/bk/ikiwiki-plugin-sqlite_search), available on GitHub, provides a full text search backend for those who, for one reason or another, find it impractical or bothersome to install or configure the Xapian-based backend of the search module which comes with IkiWiki. Practically the only dependency is DBD::SQLite.
+
+It is suitable for small and medium sites in a language written using the Latin alphabet and with a UTF-8 locale.
+**Update:** I've submitted a patch, [rubykat/ikiplugins pull request #5](https://github.com/rubykat/ikiplugins/issues/5).
+
+I have just opened [rubykat/ikiplugins issue #4](https://github.com/rubykat/ikiplugins/issues/4)
+regarding the fact that ymlfront doesn't seem to delete any old pagestate when fields have been
+removed in an edit. The fields are stuck there with their old values until a full rebuild. Seems
+to me ymlfront should just clear out all of the `{ymlfront}` pagestate before parsing the new
+stuff - including in the case where the new page has no ymlfront section at all.
+
+I discovered another slightly-different-but-related issue where simply _changing_ a field value
+in the YAML section doesn't always cause the generated HTML to be updated. Oddly, ikiwiki will
+_say_ it's building the page, but when you look at the HTML output, it's the old content.
+
+Could this involve some clever optimization where ikiwiki looks at the content (that's left over
+after ymlfront stripped out the YAML) and sees it hasn't changed? Does ymlfront need to do
+something more to indicate there is a change? Does the _template_ need to somehow be declared
+to depend on more stuff?
+
+As I said, the log does have a line for 'building' the page, so whatever optimization is happening
+must come later than the determination of what pages to 'build'.
+
+I'm mentioning it here because I'm not sure whether this or the issue on github will be seen
+first - there's a pretty old one open there. This seems to be quite
+potentially useful stuff that never quite got finished - is [[KathrynAndersen]] still
+interested? -- [[jcflack]]
+
+----
+Previous discussion re: delimiters
+
Now that I have implemented a \[[!ymlfront ...]] directive, I would like to remove support for the old "---" delimited format, because
* it is fragile (easily breakable)
--- /dev/null
+[[!template id=plugin name=emailauth core=1 author="[[Joey]]"]]
+[[!tag type/auth]]
+
+This plugin lets users log into ikiwiki using any email address. To complete
+the login, a one-time-use link is emailed to the user, and they can simply
+open that link in their browser.
+
+It is (indirectly) enabled by default, but can be turned off if you want to
+only use some other form of authentication, such as [[passwordauth]] or
+[[openid]].
+
+Users who have logged in using emailauth will have their email address used as
+their username. In places where the username is displayed, like the
+RecentChanges page, the domain will be omitted, to avoid exposing the
+user's email address. In places where the full username needs to be put,
+like commits of changes, the email address is cloaked using
+<a href="http://xmlns.com/foaf/spec/#term_mbox_sha1sum">the
+foaf:mbox_sha1sum spec</a>.
+
+This plugin needs the [[!cpan Mail::SendMail]] perl module installed,
+and able to send outgoing email.
links on pages that match the [[ikiwiki/PageSpec]] automatically use
the `cgiauthurl`, and prevents matching pages from being edited by
users authentication via other methods.
+
+## Using httpauth with nginx
+
+You have to pass the $remote_user variable to the CGI:
+
+ location /ikiwiki.cgi {
+ fastcgi_param REMOTE_USER $remote_user;
+ ....
+ }
full-size version.
This plugin uses the [ImageMagick](http://www.imagemagick.org/) tools via
-[PerlMagick](http://www.imagemagick.org/www/perl-magick.html).
+[PerlMagick](http://www.imagemagick.org/script/perl-magick.php).
Note that this is a stripped down version of Christian Mock's
[[original_img_plugin|contrib/img]].
> Seems unlikely to break *too* much. I can imagine css that styles the img
> unexpectedly applying the table. --[[Joey]]
+
+[[!template id=gitbranch branch=kjs/img-sharpen author="[[Kalle Söderman|kjs]]"]]
+
+I have created a patch that allows the image to be sharpened when resampled.
+There is also an additional option to interlace the image using plane for
+progressive display. --[[kjs]]
+
+---
+
+Is it possible to give an external image URL, must the image be local? One use case would be displaying *badges*, like [[the number of stars|https://img.shields.io/github/stars/joeyh/ikiwiki.svg]] of a [[github project|http://github.com/joeyh/ikiwiki]], but ``\[[!img https://img.shields.io/github/stars/joeyh/ikiwiki.svg]]`` does not work: [[!img https://img.shields.io/github/stars/joeyh/ikiwiki.svg]]. --[[Louis|spalax]]
+
+> Eventually wrote my own plugin: [[plugins/contrib/rimg]]. --[[Louis|spalax]]
+
+>> All the markup formats supported by ikiwiki can do raw HTML (possibly
+>> filtered), so you can use `<img>` for basic remote images; or you can
+>> use your chosen markup format's image syntax, like
+>> !\[some stars](https://img.shields.io/github/stars/joeyh/ikiwiki.svg)
+>> for Markdown. I don't think ikiwiki directives should duplicate markup
+>> formats' features unless it makes a significant difference to functionality
+>> or usability. --[[smcv]]
+
+>>> I totally agree. I never think about using HTML in my markdown documents,
+>>> and I did not know the `!\[Alt text](image url)`. Anyway, this plugin took
+>>> me less than one hour to write and publish; I will delete it soon.
+>>>
+>>> Anyway, thanks for your answer. --[[Louis|spalax]]
`/usr/local/lib/site_perl` for modules, you can locally install ikiwiki
plugins to `/usr/local/lib/site_perl/IkiWiki/Plugin`
-You can use the `libdir` configuration option to add a directory to the
+You can use the `libdirs` and/or `libdir` configuration options to add
+directories to the
search path. For example, if you set `libdir` to `/home/you/.ikiwiki/`,
then ikiwiki will look for plugins in `/home/you/.ikiwiki/IkiWiki/Plugin`.
Ikiwiki also supports plugins that are external programs. These are
typically written in some other language than perl. Ikiwiki searches for
-these in `/usr/lib/ikiwiki/plugins` by default. If `libdir` is set, it will
-also look under that directory, for example in `/home/you/.ikiwiki/plugins`.
+these in `/usr/lib/ikiwiki/plugins` by default. If `libdirs` or `libdir` are
+set, it will also look under those directories, for example in
+`/home/you/.ikiwiki/plugins`.
Note that this type of plugin has to be executable for ikiwiki to use it.
-This plugin allows uses to subscribe to pages, and emails them when
-they are created or changed.
+This plugin allows users to subscribe to pages, and emails them when
+those pages are created or changed.
-It needs the [[!cpan Mail::SendMail]] perl module, and sends mail
+It needs the [[!cpan Mail::Sendmail]] perl module, and sends mail
using the local MTA.
Each user can configure which pages they are interested in, using an
to be used when doing openid authentication. The `openid_cgiurl` must
point to an ikiwiki [[CGI]], and it will need to match the `openid_realm`
to work.
+
+## troubleshooting
+
+See [[plugins/openid/troubleshooting]] for a number of issues that may
+need to be addressed when setting up ikiwiki to accept OpenID logins reliably.
--- /dev/null
+**TL;DR**
+
+[[!toc levels=4]]
+
+# An odyssey through lots of things that have to be right before OpenID works
+
+Having just (at last) made an ikiwiki installation accept my
+OpenID, I have learned many of the things that may have to be checked
+when getting the [[plugins/openid]] plugin to work. (These are probably
+the reasons why [ikiwiki.info](/) itself won't accept my OpenID!)
+
+Just to describe my OpenID setup a bit (and why it makes a good stress-test
+for the OpenID plugin :).
+
+I'm using my personal home page URL as my OpenID. My page lives at
+a shared-hosting service I have hired. It contains links that delegate
+my OpenID processing to [indieauth.com](https://indieauth.com).
+
+IndieAuth, in turn, uses
+[rel-me authentication](http://microformats.org/wiki/RelMeAuth) to find
+an [OAuth](http://microformats.org/wiki/OAuth) provider that can authenticate
+me. (At present, I am using [github](http://github.com) for that, which
+is an OAuth provider but not an OpenID provider, so the gatewaying provided
+by IndieAuth solves that problem.) As far as ikiwiki is concerned,
+IndieAuth is my OpenID provider; the details beyond that are transparent.
+
+So, what were the various issues I had to sort out before my first successful
+login with the [[plugins/openid]] plugin?
+
+## no_identity_server: Could not determine ID provider from URL.
+
+This is the message [ikiwiki.info](/) shows as soon as I enter my home URL
+as an OpenID. It is also the first one I got on my own ikiwiki installation.
+
+### various possible causes ...
+
+There could be lots of causes. Maybe:
+
+* the offered OpenID is an `https:` URL and there is an issue in checking
+ the certificate, so the page can't be retrieved?
+* the page can be retrieved, but it isn't well-formed HTML and the library
+ can't parse it for the needed OpenID links?
+* ...?
+
+### make a luckier setting of useragent ?!
+
+In my case, it was none of the above. It turns out my shared-hosting provider
+has a rule that refuses requests with `User-Agent: libwww-perl/6.03` (!!).
+This is the sort of problem that's really hard to anticipate or plan around.
+I could fix it (_for this case!_) by changing `useragent:` in `ikiwiki.setup`
+to a different string that my goofy provider lets through.
+
+__Recommendation:__ set `useragent:` in `ikiwiki.setup` to some
+unlikely-to-be-blacklisted value. I can't guess what the best
+unlikely-to-be-blacklisted value is; if there is one, it's probably the
+next one all the rude bots will be using anyway, and some goofy provider
+like mine will blacklist it.
+
+> If your shared hosting provider is going to randomly break functionality,
+> I would suggest "voting with your wallet" and taking your business to
+> one that does not.
+>
+> In principle we could set the default UA (if `$config{useragent}` is
+> unspecified) to `IkiWiki/3.20140915`, or `IkiWiki/3.20140915 libwww-perl/6.03`
+> (which would be the "most correct" option AIUI), or some such.
+> That might work, or might get randomly blacklisted too, depending on the
+> whims of shared hosting providers. If you can't trust your provider to
+> behave helpfully then there isn't much we can do about it.
+>
+> Blocking requests according to UA seems fundamentally flawed, since
+> I'm fairly sure no hosting provider can afford to blacklist UAs that
+> claim to be, for instance, Firefox or Chrome. I wouldn't want
+> to patch IkiWiki to claim to be an interactive browser by default,
+> but malicious script authors will have no such qualms, so I would
+> argue that your provider's strategy is already doomed... --[[smcv]]
+
+>> I agree, and I'll ask them to fix it (and probably refer them to this page).
+>> One reason they still have my business is that their customer service has
+>> been notably good; I always get a response from a human on the first try,
+>> and on the first or second try from a human who understands what I'm saying
+>> and is able to fix it. With a few exceptions over the years. I've dealt with organizations not like that....
+>>
+>> But I included the note here because I'm sure if _they're_ doing it, there's
+>> probably some nonzero number of other hosting providers where it's also
+>> happening, so a person setting up OpenID and being baffled by this failure
+>> needs to know to check for it. Also, while the world of user-agent strings
+>> can't have anything but relatively luckier and unluckier choices, maybe
+>> `libwww/perl` is an especially unlucky one?
+
+>>> Yippee! _My_ provider found their offending `mod_security` rule and took it out,
+>>> so now [ikiwiki.info](/) accepts my OpenID. I'm still not sure it wouldn't be
+>>> worthwhile to change the useragent default.... -- Chap
+
+#### culprit was an Atomicorp ModSecurity rule
+
+Further followup: my provider is using [ModSecurity](https://www.modsecurity.org/)
+with a ruleset commercially supplied by [Atomicorp](https://www.atomicorp.com/products/modsecurity.html),
+which seems to be where this rule came from. They've turned the rule off for _my account_.
+I followed up on my ticket with them, suggesting they at least think about turning it off
+more systemwide (without waiting for other customers to have bizarre problems that are
+hard to troubleshoot), or opening a conversation with Atomicorp about whether such a rule
+is really a good idea. Of course, while they were very responsive about turning it off
+_for me_, it's much iffier whether they'll take my advice any farther than that.
+
+So, this may crop up for anybody with a provider that uses Atomicorp ModSecurity rules.
+
+The ruleset produces a log message saying "turn this rule off if you use libwww-perl", which
+just goes to show whoever wrote that message wasn't thinking about what breaks what. It would
+have to be "turn this rule off if any of _your_ customers might ever need to use or depend on
+an app or service _hosted anywhere else_ that _could_ have been implemented using libwww-perl,
+over which you and your customer have no knowledge or control."
+
+Sigh. -- Chap
+
+> Thanks for the pointer. It seems the open-source ruleset blacklists libwww-perl by default
+> too... this seems very misguided but whatever. I've changed our default User-Agent to
+> `ikiwiki/3.20141012` (or whatever the version is). If we get further UA-blacklisting
+> problems I'm very tempted to go for `Mozilla/5.0 (but not really)` as the
+> next try. --[[smcv]]
+
+## Error: OpenID failure: naive_verify_failed_network: Could not contact ID provider to verify response.
+
+Again, this could have various causes. It was helpful to bump the debug level
+and get some logging, to see:
+
+ 500 Can't connect to indieauth.com:443 (Net::SSL from Crypt-SSLeay can't
+ verify hostnames; either install IO::Socket::SSL or turn off verification
+ by setting the PERL_LWP_SSL_VERIFY_HOSTNAME environment variable to 0)
+
+I don't belong to the camp that solves every verification problem by turning
+verification off, so this meant finding out how to get verification to be done.
+It turns out there are two different Perl modules that can be used for SSL:
+
+* `IO::Socket::SSL` (verifies hostnames)
+* `Net::SSL` (_does not_ verify hostnames)
+
+Both were installed on my hosted server. How was Perl deciding which one
+to use?
+
+### set `PERL_NET_HTTPS_SSL_SOCKET_CLASS` appropriately
+
+It turns out
+[there's an environment variable](https://rt.cpan.org/Public/Bug/Display.html?id=71599).
+So just set `PERL_NET_HTTPS_SSL_SOCKET_CLASS` to `IO::Socket::SSL` and the
+right module gets used, right?
+
+[Wrong](https://github.com/csirtgadgets/LWPx-ParanoidAgent/commit/fed6f7d7df8619df0754e8883cfad2ac15703a38#diff-2).
+That change was made to `ParanoidAgent.pm` back in November 2013 because of an
+unrelated [bug](https://github.com/csirtgadgets/LWPx-ParanoidAgent/issues/4)
+in `IO::Socket::SSL`. Essentially, _hmm, something goes wrong in
+`IO::Socket::SSL` when reading certain large documents, so we'll fix it by
+forcing the use of `Net::SSL` instead (the one that never verifies hostnames!),
+no matter what the admin has set `PERL_NET_HTTPS_SSL_SOCKET_CLASS` to!_
+
+### undo change that broke `PERL_NET_HTTPS_SSL_SOCKET_CLASS`
+
+Plenty of [comments](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=738493)
+quickly appeared about how good an idea that wasn't, and it was corrected in
+June 2014 with [one commit](https://github.com/csirtgadgets/LWPx-ParanoidAgent/commit/a92ed8f45834a6167ff62d3e7330bb066b307a35)
+to fix the original reading-long-documents issue in `IO::Socket::SSL` and
+[another commit](https://github.com/csirtgadgets/LWPx-ParanoidAgent/commit/815c691ad5554a219769a90ca5f4001ae22a4019)
+that reverts the forcing of `Net::SSL` no matter how the environment is set.
+
+Unfortunately, there isn't a release in CPAN yet that includes those two
+commits, but they are only a few lines to edit into your own locally-installed
+module.
+
+> To be clear, these are patches to [[!cpan LWPx::ParanoidAgent]].
+> Debian's `liblwpx-paranoidagent-perl (>= 1.10-3)` appears to
+> have those two patches. --[[smcv]]
+>
+> Irrelevant to this ikiwiki instance, perhaps relevant to others:
+> I've added these patches to [pkgsrc](http://www.pkgsrc.org)'s
+> [[!pkgsrc www/p5-LWPx-ParanoidAgent]] and they'll be included in the
+> soon-to-be-cut 2014Q3 branch. --[[schmonz]]
+
+## Still naive_verify_failed_network, new improved reason
+
+ 500 Can't connect to indieauth.com:443 (SSL connect attempt failed
+ with unknown error error:14090086:SSL
+ routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed)
+
+Yay, at least it's trying to verify! Now why can't it verify IndieAuth's
+certificate?
+
+[Here's why](https://tools.ietf.org/html/rfc6066#section-3). As it turns out,
+[indieauth.com](https://indieauth.com/) is itself a virtual host on a shared
+server. If you naively try
+
+ openssl s_client -connect indieauth.com:443
+
+you get back a certificate for [indieweb.org](https://indieweb.org/)
+instead, so the hostname won't verify. If you explicitly indicate what server
+name you're connecting to:
+
+ openssl s_client -connect indieauth.com:443 -servername indieauth.com
+
+then, magically, the correct certificate comes back.
+
+### ensure `OpenSSL`, `Net::SSLeay`, `IO::Socket::SSL` new enough for SNI
+
+If your `openssl` doesn't recognize the `-servername` option, it is too old
+to do SNI, and a newer version needs to be built and installed. In fact,
+even though SNI support was reportedly backported into OpenSSL 0.9.8f, it will
+not be used by `IO::Socket::SSL` unless it is
+[1.0 or higher](http://search.cpan.org/~sullr/IO-Socket-SSL-1.998/lib/IO/Socket/SSL.pod#SNI_Support).
+
+Then a recent `Net::SSLeay` perl module needs to be built and linked against it.
+
+> I would tend to be somewhat concerned about the update status and security
+> of a shared hosting platform that is still on an OpenSSL major version from
+> pre-2010 - it might be fine, because it might be RHEL or some similarly
+> change-averse distribution backporting security fixes to ye olde branch,
+> but equally it might be as bad as it seems at first glance.
+> "Let the buyer beware", I think... --[[smcv]]
+
+>> As far as I can tell, this particular provider _is_ on Red Hat (EL 5).
+>> I can't conclusively tell because I'm in what appears to be a CloudLinux container when I'm in,
+>> and certain parts of the environment (like `rpm`) I can't see. But everything
+>> I _can_ see is like several RHEL5 boxen I know and love.
+
+
+### Local OpenSSL installation will need certs to trust
+
+Bear in mind that the OpenSSL distribution doesn't come with a collection
+of trusted issuer certs. If a newer version is built and installed locally
+(say, on a shared server where the system locations can't be written), it will
+need to be given a directory of trusted issuer certs, say by linking to the
+system-provided ones. However, a change to the certificate hash algorithm used
+for the symlinks in that directory was [reportedly](http://www.cilogon.org/openssl1)
+made with OpenSSL 1.0.0. So if the system-provided trusted certificate directory
+was set up for an earlier OpenSSL version, all the certificates in it will be
+fine but the hash symlinks will be wrong. That can be fixed by linking only the
+named certificate files from the system directory into the newly-installed one,
+and then running the new version of `c_rehash` there.
+
+## Still certificate verify failed
+
+Using [SNI](https://tools.ietf.org/html/rfc6066#section-3)-supporting versions
+of `IO::Socket::SSL`, `Net::SSLeay`, and `OpenSSL` doesn't do any good if an
+upper layer hasn't passed down the name of the host being connected to so the
+SSL layer can SNI for it.
+
+### ensure that `LWPx::ParanoidAgent` passes server name to SSL layer for SNI
+
+That was fixed in `LWPx::ParanoidAgent` with
+[this commit](https://github.com/csirtgadgets/LWPx-ParanoidAgent/commit/df6df19ccdeeb717c709cccb011af35d3713f546),
+which needs to be backported by hand if it hasn't made it into a CPAN release
+yet.
+
+> Also in Debian's `liblwpx-paranoidagent-perl (>= 1.10-3)`, for the record.
+> --[[smcv]]
+>
+> And now in pkgsrc's `www/p5-LWPx-ParanoidAgent`, FWIW. --[[schmonz]]
+
+Only that still doesn't end the story, because that hand didn't know what
+[this hand](https://github.com/noxxi/p5-io-socket-ssl/commit/4f83a3cd85458bd2141f0a9f22f787174d51d587#diff-1)
+was doing. What good is passing the name in
+`PeerHost` if the SSL code looks in `PeerAddr` first ... and then, if that
+doesn't match a regex for a hostname, decides you didn't supply one at all,
+without even looking at `PeerHost`?
+
+Happily, is is possible to assign a key that _explicitly_ supplies the
+server name for SNI:
+
+ --- LWPx/Protocol/http_paranoid.pm 2014-09-08 03:33:00.000000000 -0400
+ +++ LWPx/Protocol/http_paranoid.pm 2014-09-08 03:33:27.000000000 -0400
+ @@ -73,6 +73,7 @@
+ close($el);
+ $sock = $self->socket_class->new(PeerAddr => $addr,
+ PeerHost => $host,
+ + SSL_hostname => $host,
+ PeerPort => $port,
+ Proto => 'tcp',
+ Timeout => $conn_timeout,
+
+... not submitted upstream yet, so needs to be applied by hand.
+
+> I've [reported this to Debian](https://bugs.debian.org/761635)
+> (which is where ikiwiki.info's supporting packages come from).
+> Please report it upstream too, if the Debian maintainer doesn't
+> get there first. --[[smcv]]
+>
+> Applied in pkgsrc. I haven't attempted to conduct before-and-after
+> test odysseys, but here's hoping your travails save others some
+> time and effort. --[[schmonz]]
+
+> Reported upstream as [LWPx-ParanoidAgent#14](https://github.com/csirtgadgets/LWPx-ParanoidAgent/issues/14)
+> _and_ [IO-Socket-SSL#16](https://github.com/noxxi/p5-io-socket-ssl/issues/16). -- Chap
+
+# Success!!
+
+And with that, ladies and gents, I got my first successful OpenID login!
+I'm pretty sure that if the same fixes can be applied to
+[ikiwiki.info](/) itself, a wider range of OpenID logins (like mine, for
+example :) will work here too.
+
+-- Chap
[[the techno-viking|http://techno-viking.com/posts/ikiwiki-maps/]] and fixed up
by [[anarcat]].
-See [[the Mtl-mesh
-wiki|http://mesh.openisp.ca/nodes/anarcat]] for a sample of what this
+See [[the Reseaulibre.ca wiki|http://reseaulibre.ca/]] for a sample of what this
plugin can do
See also [[plugins/contrib/googlemaps]].
>>> Commit 3c2bffe21b91684 in my po branch does this. --[[intrigeri]]
>>>> Cherry-picked --[[Joey]]
+
+----
+# Failing to have currentlang respected when using inline
+I am trying to wrap my head around l10n with ikiwiki. Set up a test site, l10n is working fine.
+Now when inlining a bunch of pages, no matter what inline template I use all links are
+going to the master language, the slave being ignored on all levels I tried.
+
+Trying to use currentlang() inside the inline directive to force the current setting in ikiwiki.setup - I get **no pages or links** to pages at all.
+\[[!inline pages=\"man/* and currentlang() and !*/sidebar and !*/b and !*.*\" template=\"inlinepage\" archive=\"yes\" quick=\"yes\" show=\"0\" sort=\"mtime\" reverse=\"no\"]]
+
+Turning meta title on slave translation pages on and off - **no change**.
+Turning usedirs on and off - **no change**.
+Testing with different inline templates - **no change**.
+Trying the use of tags on the slave language pages - **tagged() doesn't match any tagged pages**.
+
+I tried everything I could think of being the cause.
+Could this be related to the templates used by inline not being localized?
+Any hints wether I am currently running into some dead end with ikiwiki regarding template l10n here would be greatly appreciated.
+
+Besides: When using the map instead of the inline directive, regarding l10n all is working like it should, pitty is that for the kind of deployment I am heading for I will also need pages to be included with a custom template. --[[Boris]]
what about handling a `shortcuts-local.mdwn` or `shortcuts/local.mdwn` (if such
a file exists in the wiki), and additionally process that one. Possibily a
conditional `\[[!inline]]` could be used. --[[tschwinge]]
+
+----
+
+The page says
+
+> Additionally, %W is replaced with the text encoded just right for Wikipedia
+
+with the implication that this is odd. However, it appears the escapes
+actually mean:
+
+=%s=
+ If every character in the string is in the Latin-1 range, encode each
+ character as a http %xx escape: ö -> %F6. If not,
+ mangle the string: ☃ (U+2603 SNOWMAN) -> %2603 which
+ actually means "&03".
+=%S=
+ Leave the string as-is.
+=%W=
+ Encode the string as UTF-8, then encode each byte of the UTF-8
+ individually as a http %xx escape: ö -> %C3%B6, ☃ (U+2603 SNOWMAN) ->
+ %E2%98%83.
+
+http %xx encoding is defined in terms of input bytes, not input characters,
+so you can't encode arbitrary Unicode into URLs without knowing which
+encoding the destination server is going to use. UTF-8 is what's
+recommended by the [[!wikipedia Internationalized resource identifier]]
+specification, so I suspect %W is right more often than it's wrong...
+
+I wonder whether %s should mean what %W does now, with a new format
+character - maybe %L for Latin-1? - for the version that only works
+for strings that can be encoded losslessly in Latin-1? --[[smcv]]
--- /dev/null
+[[!template id=plugin name=templatebody author="[[smcv]]" core=1]]
+[[!tag type/special-purpose]]
+
+This plugin provides the [[ikiwiki/directive/templatebody]]
+[[ikiwiki/directive]]. With this plugin, you can set up templates
+stored in the wiki for [[template]] or [[edittemplate]] without the
+[[!cpan HTML::Template]] markup being interpreted as wiki markup.
of the themes included in ikiwiki and the [[theme market]] for third party themes.
You can set the theme via the **theme** option in your config file (after
-enabling the plugin). Refresh the wiki (with `ikiwiki -setup <file>`, `--setup` won't work, they are not interchangable) after changing it to see the changes.
+enabling the plugin). Refresh the wiki (with `ikiwiki --setup <file>`)
+after changing it to see the changes.
Hints for theme builders
------------------------
>> along the way and it stays falsish. Interested in your branch;
>> sorry I can't offer precise feedback right now, but it looks sane
>> at a glance. --[[schmonz]]
+
+How could this be tampered to make another plugin that would enable partial listing so I could make multiple "subTOCs" in the same page? For instance I'd have a `\[[!toc startlevel=1 levels=1]]` in the top of the page while after a level 1 heading I would have a `\[[!toc startlevel=2]]` with the level 2 and below headers limited by the ones below this particular level 1 header --[[iuri]]
The function is passed named parameters "page" and "content". Its return
value is ignored.
+### <a name="readtemplate">readtemplate</a>
+
+ hook(type => "readtemplate", id => "foo", call => \&readtemplate);
+
+Runs on the raw source of a page or `*.tmpl` file that is being
+used as a template, before it is parsed by [[!cpan HTML::Template]].
+For instance, the [[plugins/templatebody]] plugin uses this to return
+the content of the [[ikiwiki/directive/templatebody]] directive (if there
+is one) instead of the page's full content.
+
+The function is passed named parameters:
+
+* `id`: the name under which the template was looked up,
+ such as `page.tmpl` or `note`
+* `page`: the name of the template as a page or attachment in the wiki,
+ such as `templates/note`, or `undef` if it's outside the wiki (e.g. in
+ `/usr/share/ikiwiki/templates`)
+* `content`: the content of the corresponding file
+* `untrusted`: true if the template was loaded from the wiki or an underlay,
+ false if it was loaded from a trusted location
+
+It should return the replacement content.
+
### <a name="filter">filter</a>
hook(type => "filter", id => "foo", call => \&filter);
if the name is set to the name of a user who is not registered,
a basic registration of the user will be automatically performed.
+Auth plugins can use the loginselector helper plugin to let the user
+select which authentication method to use.
+
### <a name="sessioncgi">sessioncgi</a>
hook(type => "sessioncgi", id => "foo", call => \&sessioncgi);
### `%pagesources`
-The `%pagesources` has can be used to look up the source filename
+The `%pagesources` hash can be used to look up the source filename
of a page. So the key is the page name, and the value is the source
filename. Do not modify this hash.
+Attachments also appear in this hash, with the same key and value.
+
$pagesources{"foo"} = "foo.mdwn";
+ $pagesources{"logo/ikiwiki.png"} = "logo/ikiwiki.png";
+
### `%destsources`
The `%destsources` hash records the name of the source file used to
create each destination file. The key is the output filename (ie,
-"foo/index.html"), and the value is the source filename that it was built
-from (eg, "foo.mdwn"). Note that a single source file may create multiple
+"foo/index.html"), and the value is the name of the page that it was built
+from (eg, "foo"). Note that a single source file may create multiple
destination files. Do not modify this hash directly; call `will_render()`.
-
- $destsources{"foo/index.html"} = "foo.mdwn";
+
+Attachments also appear in this hash, with the same key and value.
+
+ $destsources{"foo/index.html"} = "foo";
+ $destsources{"logo/ikiwiki.png"} = "logo/ikiwiki.png";
## Library functions
git_wrapper => "/working/dir/.git/hooks/post-commit",
Then just committing should refresh the private ikiwiki on the local
-host. Now just run `ikiwiki -setup localwiki.setup -gettime` and
-you should be good to go. (You only need the slow `-gettime` option
+host. Now just run `ikiwiki --setup localwiki.setup --gettime` and
+you should be good to go. (You only need the slow `--gettime` option
the first time you run setup.) Use standard git commands to handle
pulling from and pushing to the server. **Note**: After
pulling changes from the bare root repository, you will need to
manually update the local wiki, with a command such as `ikiwiki
--setup localwiki.setup -refresh`. You could use git's `post-merge` hook
+--setup localwiki.setup --refresh`. You could use git's `post-merge` hook
to automate that command.
## Using ikiwiki with Gerrit
+[[!template id=test45 text="""Here is the text to insert into my note."""]]
+dddddddddddd
+
+[[!meta date="Thu Jun 16 22:04:33 2005" updated="Thu Dec 22 01:23:20 2011"]]
This is the [[SandBox]], a page anyone can edit to try out ikiwiki
(version [[!version ]]).
+vvvv
+CamelCase ?
What about [[this page]]?
hello world (right back at ya)
+wait how does versioning work
+
test, is it being saved? Probably. I will check. This seems really straightforward.
~~~
> This is a blockquote.
>
> This is the first level of quoting.
+A block of text
>
> > This is a nested blockquote.
>
>> Without a space works too.
>>> to three levels
+
+This is pretty sweet
+
+Azerty
+** Qsdf **
+
>
> Back to the first level.
>
1. foo
2. bar
3. quz
+ 3. quze
Bulleted list
* one
* footballs; runner; unices
* Cool !
+ * test
+ * this
+* something else
+ * some more
+ * and more
+ * and
+ * this
+> a blockquote
+> in a list
+> how is this handled
+ *this _ _ _
+ * this 2
+ * this 3
test _this_ out.
`pre?`
+Testing. Test. 試験として書き込みします。
+Καλημέρα!
This hole was discovered on 16 May 2012 and fixed the same day with
the release of ikiwiki 3.20120516. A fix was backported to Debian squeeze,
as version 3.20100815.9. An upgrade is recommended for all sites.
+
+## XSS via openid selector
+
+Raghav Bisht discovered this XSS in the openid selector. ([[!cve CVE-2015-2793]])
+
+The hole was reported on March 24th, a fix was developed on March 27th,
+and the fixed version 3.20150329 was released on the 29th. A fix was backported
+to Debian jessie as version 3.20141016.2 and to Debian wheezy as version
+3.20120629.2. An upgrade is recommended for sites using CGI and openid.
If you're using Debian or Ubuntu, ikiwiki is an <code><a href="http://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_basic_package_management_operations">apt-get</a> install ikiwiki</code> away.
If you're not, see the [[download]] and [[install]] pages.
+You may also want to try out a [[Docker image|https://github.com/elecnix/ikiwiki-docker]] with ikiwiki pre-installed.
+
## Create your wiki
All it takes to create a fully functional wiki using ikiwiki is running
* [[!shortcut name=mozillazinekb url="http://kb.mozillazine.org/%s"]]
* [[!shortcut name=freebsdwiki url="http://wiki.freebsd.org/%s"]]
* [[!shortcut name=hackage url="http://hackage.haskell.org/package/%s"]]
+* [[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]]
+* [[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]]
+* [[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]]
To add a new shortcut, use the `shortcut`
[[ikiwiki/directive]]. In the url, "%s" is replaced with the
cd81b9f | 2014/01/03 | domtheo9110 | ?
e3376ce | 2014/08/19 | Nng_L (OpenID) | 58.186.127.104
104c606 | 2014/08/19 | tlevine (OpenID) | 82.153.13.48
+4c7f247 and 4 more | 2015/01/08 | lis (OpenID) | 122.173.219.54
+eb526e9 and 5 more | 2015/01/10 | loveneet (OpenID) | 122.173.133.14
+ca4d8fc and 17 more | 2015/01/12-14 | spalax. (note the trailing dot) | 122.173.227.51 and 122.173.17.141
+992f995 | 2015/03/20 | snape (OpenID) | 187.209.217.54
+1d05cf3 | 2015/05/20 | justine (OpenID) | ?
"""]]
--- /dev/null
+An user ``spalax.`` has been hijacking [[my|spalax]] page, and started doing the same with [[anarcat's|http://source.ikiwiki.branchable.com/?p=source.git;a=blobdiff;f=doc/tips/convert_mediawiki_to_ikiwiki.mdwn;h=5eaf5b14c16a55ae8ae8838fe59759d9f2317e3c;hp=e8f6a26a1e8f6d27289e56835e2d6a97478cd5ad;hb=16f9fee1da6f3f102c953f61f79bcd8bdb28aaf3;hpb=5e2ffe57e4926a5082069533a2de4957f328d49a]] page (examples [[1|http://source.ikiwiki.branchable.com/?p=source.git;a=blobdiff;f=doc/plugins/contrib/sidebar2.mdwn;h=c4c46637784ef760d70d587cd5512fefac064941;hp=5c169bfd49f4f132860dee56f69c4a423d2ed7b5;hb=5e2ffe57e4926a5082069533a2de4957f328d49a;hpb=2c19d161310832e0e5fb64c86a408dd01fc2f88a]] [[2|http://source.ikiwiki.branchable.com/?p=source.git;a=blobdiff;f=doc/users/spalax..mdwn;h=a9a030c5a338b26bcde79411c4703292fc6cb114;hp=0000000000000000000000000000000000000000;hb=9b3c77c5dc50f6f67318bdfa456917b93472548d;hpb=42452ba377baa5f3be3e1d0b405fcb05954b5dee]] [[3|http://source.ikiwiki.branchable.com/?p=source.git;a=blobdiff;f=doc/bugs/empty_div_element.mdwn;h=84341accc241bdd345a930202d5c3589590d3881;hp=7e28730fd9689bfc8de34713bf02bf62067debcc;hb=ca4d8fc32e18a6dbd84882f0253e57ff389ca64d;hpb=460cc21af5d30d20f3aabbfa9026971cfc5cd7dd]]). I [[reverted|http://source.ikiwiki.branchable.com/?p=source.git;a=commit;h=544608aa5e926563f099f7f397aa0536a7b25c5d]] the modifications, but I do not have the rights to block the user.
+
+-- [[Louis|spalax]]
+
+----
+
+I wonder if there is a set of best practices to operate spam fighting on a ikiwiki blog somewhere. Through some digging, i found this page but it may be useful to link to other resources from here and document how it's done. I have found good information in the `setup` branch of this wiki, especially the `banned_user` list. I wonder if that list couldn't be shared somehow - or if it shouldn't be reported upstream at blogspam.net... --[[anarcat]]
display: none;
}
-/* openid selector */
-#openid_choice {
+/* login selector */
+#login_choice {
display: none;
}
-#openid_input_area {
+#login_input_area {
clear: both;
padding: 10px;
}
-#openid_btns, #openid_btns br {
+#login_btns, #login_btns br {
clear: both;
}
-#openid_highlight {
+#login_highlight {
background-color: black;
float: left;
}
-.openid_large_btn {
+.login_large_btn {
padding: 1em 1.5em;
border: 1px solid #DDD;
margin: 3px;
float: left;
}
-.openid_small_btn {
+.login_small_btn {
padding: 4px 4px;
border: 1px solid #DDD;
margin: 3px;
float: left;
}
-a.openid_large_btn:focus {
+a.login_large_btn:focus {
outline: none;
}
-a.openid_large_btn:focus {
+a.login_large_btn:focus {
outline-style: none;
}
-.openid_selected {
+.login_selected {
border: 4px solid #DDD;
}
.trailsep {
display: none;
}
+
+/* mobile/small-screen-friendly layout */
+@media (max-width: 600px) {
+ .sidebar {
+ width: auto;
+ float: none;
+ margin-top: 0;
+ border: none;
+ }
+
+ /* if the mobile browser is new enough, use flex layout to shuffle
+ * the sidebar to the end */
+ .page {
+ display: -webkit-box;
+ display: -webkit-flexbox;
+ display: -webkit-flex;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-flex-direction: tb;
+ -webkit-flex-direction: column;
+ -webkit-flex-flow: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ }
+ #pageheader {
+ -webkit-box-ordinal-group: -1;
+ -webkit-order: -1;
+ -ms-box-ordinal-group: -1;
+ -ms-flex-order: -1;
+ order: -1;
+ }
+ .sidebar, #footer {
+ -webkit-box-ordinal-group: 1;
+ -webkit-order: 1;
+ -ms-box-ordinal-group: 1;
+ -ms-flex-order: 1;
+ order: 1;
+ }
+
+ .blogform, #blogform {
+ padding: 4px 4px;
+ }
+}
[[!if test="enabled(template) or enabled(edittemplate)" then="""
## template pages
-Template pages are regular wiki pages that are used as templates for other
-pages.
+Template pages are regular wiki pages containing a
+[[!iki ikiwiki/directive/templatebody desc="templatebody directive"]],
+used as templates for other pages. The parts of the template
+page outside the directive can be used to document it.
"""]]
[[!if test="enabled(template)" then="""
rootpage=templates postformtext="Add a new template page named:"]]
"""]]
+If the template does not contain a `templatebody` directive, the entire
+source of the page is used for the template. This is deprecated.
+
## template files
Template files are unlike template pages in that they have the extension
* `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`,
`editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`,
`editcomment.tmpl` `commentmoderation.tmpl`, `renamesummary.tmpl`,
- `passwordmail.tmpl`, `openid-selector.tmpl`, `revert.tmpl` - Parts of ikiwiki's user
- interface; do not normally need to be customised.
+ `passwordmail.tmpl`, `emailauth.tmpl, `login-selector.tmpl`,
+ `revert.tmpl` - Parts of ikiwiki's user interface; do not normally need
+ to be customised.
[[!meta robots="noindex, follow"]]
> > I intend do (mis)use links for a horizontal navigation. Or may I be better off altering page.tmpl?
> > --z3ttacht
+----
+
Is there a list of the TMPL_VAR-Variables that are defined by ikiwiki?
What I'm trying to achieve is to print the URL of every page on the page itself and therefore I would need the corresponding value in the Template.
> the moment), a [[plugin|plugins/write]] to add one would be about 10
> lines of perl - you'd just need to define a `pagetemplate` hook. --[[smcv]]
+----
+
Is there a list of all the available variables somewhere, or do I just grep the source for TMPL_VAR? And is there a way to refer to a variable inside of a wiki page or does it have to be done from a template? Thanks. -- [[AdamShand]]
I pulled a list of variables and posted it, its in the history for [[templates]] under my name. [[justint]]
-I am trying to override `page.tmpl` by providing `templates/page.tmpl` in my `srcdir`- this works, but now `templates/page.tmpl` is created in my `destdir` as well! Is this expected? Is there a way to avoid this? --chenz
+----
+
+I am trying to override `page.tmpl` by providing `templates/page.tmpl` in my `srcdir`- this works, but now `templates/page.tmpl` is created in my `destdir` as well! Is this expected? --chenz
+
+> Yes. Every file found in the wiki is treated as either a page (passed through the whole
+> rendering pipeline to HTML) or an attachment (copied as-is). --[[smcv]]
+
+Is there a way to avoid this? --chenz
+
+> With the page in your wiki's git repository: not currently.
+> You can define a `templatedir` in your setup file and put your overridden page.tmpl
+> there instead. --s
+
+----
+
+I'm seeing some curious behaviour with `$srcdir/templates/` templates not being found when
+pushing from a remote computer. Touching the relevant file on the server and
+`ikiwiki --setup wiki.setup --refresh -v` sorts it out. I have done `--refresh
+--wrappers` just to be sure the hooks aren't out of date. Anyone knows what
+might be causing this? I'm running a custom branch of ikiwiki master from a
+couple of weeks ago so could be my own doing but my changes are mainly to the
+album and img plugins. --[[kjs]]
+
+> Seems like the issue is rather that the templates aren't found/triggered
+> when the page render is set off by dependencies rather than direct editing
+> of the page. Not the remove local issue mentioned above. --[[kjs]]
+
+>> Thanks, that was the hint I needed to be able to reproduce this bug. It seems
+>> to have been caused by an optimization: please try applying
+>> [commit 5fd863b5](http://source.ikiwiki.branchable.com/?p=source.git;a=commitdiff;h=5fd863b5b05449669ec56c6798d836e3302386e2)
+>> to your Render.pm. A follow-up commit partially restores the optimization,
+>> only for rebuilds. --[[smcv]]
+
+>>> I've applied both your patches and as far as I can tell it's now working
+>>> as expected. Templates get rendered even if rebuild is triggered by
+>>> comments on another page. --[[kjs]]
+[[!templatebody <<ENDBODY
<div class="infobox">
Available in a [[!taglink /git]] repository [[!taglink branch|/branches]].<br />
Branch: <TMPL_IF browse><a href="<TMPL_VAR browse>"></TMPL_IF><TMPL_VAR branch><TMPL_IF browse></a></TMPL_IF><br />
<TMPL_IF author>Author: <TMPL_VAR author><br /></TMPL_IF>
</div>
-<TMPL_UNLESS branch>
+ENDBODY]]
+
This template is used to create an infobox for a git branch. It uses
these parameters:
(e.g. github/master)</li>
<li>author - the author of the branch</li>
</ul>
-</TMPL_UNLESS>
+[[!templatebody <<ENDBODY
<div class="infobox">
[[ikiwiki_logo|logo/ikiwiki.png]]
<ul>
<li>[[SiteMap]]</li>
<li>[[Contact]]</li>
<li>[[TipJar]]</li>
+<li><a href="http://flattr.com/thing/39811/ikiwiki">Flattr ikiwiki</a></li>
</ul>
-<a href="http://flattr.com/thing/39811/ikiwiki">
-<img src="https://api.flattr.com/button/flattr-badge-large.png"
-alt="Flattr this" title="Flattr this" /></a>
</div>
+ENDBODY]]
+
+This template contains the navigation links used on the front page.
+[[!templatebody <<ENDBODY
<div class="notebox">
<TMPL_VAR text>
</div>
-<TMPL_UNLESS text>
+ENDBODY]]
+
Use this template to insert a note into a page. The note will be styled to
float to the right of other text on the page. This template has one
parameter:
<ul>
<li>`text` - the text to display in the note
</ul>
-</TMPL_UNLESS>
+[[!templatebody <<ENDBODY
<span class="infobox">
Plugin: <TMPL_VAR name><br />
Author: <TMPL_VAR author><br />
</span>
[[!if test="sourcepage(plugins/contrib/*)" then="""[[!meta title="<TMPL_VAR name> (third party plugin)"]]"""]]
<TMPL_IF core>[[!tag plugins/type/core]]</TMPL_IF>
-<TMPL_UNLESS name>
+ENDBODY]]
+
This template is used to create an infobox for an ikiwiki plugin. It uses
these parameters:
<ul>
<li>author - the author of the plugin
<li>core - set to a true value if the plugin is enabled by default
</ul>
-</TMPL_UNLESS>
-<TMPL_UNLESS mouseover>
Use this template to create a popup window that is displayed when the mouse
is over part of the page. This template has two parameters:
<ul>
</ul>
Note that browsers that do not support the CSS will display the popup
inline in the page, inside square brackets.
-</TMPL_UNLESS>
+
+[[templatebody <<ENDBODY
<span class="popup"><TMPL_VAR mouseover>
<span class="paren">[</span><span class="balloon"><TMPL_VAR popup></span><span class="paren">]</span>
</span>
+ENDBODY]]
--- /dev/null
+[[!templatebody <<ENDBODY
+<div class="notebox">
+<TMPL_VAR text> (This is a note, made using the test45 template.)
+</div>
+ENDBODY]]
+
+Use this template to insert a note into a page. This template is a duplicate of note, but with test45 text appended to it. The note will be styled to
+float to the right of other text on the page. This template has one
+parameter:
+<ul>
+<li>`text` - the text to display in the note
+</ul>
* **[[Bootstrap theme|http://anonscm.debian.org/gitweb/?p=users/jak/website.git;a=summary]]**, contributed by [[JAK LINUX|http://jak-linux.org/about/]], based on [[Twitter Bootstrap|http://twitter.github.com/bootstrap/]]
- * **[[Bootstrap 3|https://github.com/ramseydsilva/ikiwiki-bootstrap-theme]]**, contributed by [[ramsey]], based on [[Twitter Bootstrap 3|http://getbootstrap.com]]
+ * **[[Bootstrap 3|https://github.com/ramseydsilva/ikiwiki-bootstrap-theme]]**, contributed by [[ramsey]], based on [[Twitter Bootstrap 3|http://getbootstrap.com]], also modified by [dequis.org](https://github.com/dequis/ikiwiki-bootstrap-theme/tree/dequis.org)
+
+ * **[[Bootstrap 2|https://notabug.org/hiatobr/ikiwiki-bootstrap-theme-2]]**, contributed by [Hacklab Independência](https://hi.ato.br), a fork of [[ramsey]]'s [[Bootstrap 3|https://github.com/ramseydsilva/ikiwiki-bootstrap-theme]] original work. You may see examples on [[my user page|/users/desci]]
+
+ * yet another **[Bootstrap 3](https://github.com/anderbubble/ikiwiki-bootstrap)** theme, contributed by anderbubble
+
+ * and one more **[Bootstrap 3](https://github.com/tgpfeiffer/ikiwiki-bootstrap-template)** theme (can't you guys get along already?!), contributed by tgpfeiffer, this one shipping a copy of the bootstrap files
Ikiwiki is [[FreeSoftware]], but you're also free to show your appreciation
-to [[Joey]] or help offset hosting costs with a donation in any amount you
+by helping to offset hosting costs with a donation in any amount you
choose. If you'd like to fund development of a specific feature, see the
[[consultants]] page.
-<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=joey%40kitenet%2enet&item_name=ikiwiki&no_shipping=1&cn=Comments%3f&tax=0¤cy_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8"><img src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" alt="donate with PayPal" /></a>
-
-<script type="text/javascript">var flattr_url = 'http://ikiwiki.info';</script>
-<script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>
+* [Donate with PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=joey%40kitenet%2enet&item_name=ikiwiki&no_shipping=1&cn=Comments%3f&tax=0¤cy_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8)
+* [Donate with Flattr](http://flattr.com/thing/39811/ikiwiki)
Thanks to the following people for their kind contributions:
* Jon Dowland
* Amitai Schlair
* Luca Capello
+* Patrick ZAJDA
+* Fergus Cameron
-(Note that this page is locked to prevent anyone from tampering with the PayPal button.
+(Note that this page is locked to prevent anyone from tampering with the PayPal link.
If you prefer your donation *not* be listed here, let [[Joey]] know.)
+[[!meta date="2008-08-19 05:30:33 -0400"]]
+
<a href="http://disqus.com">Disqus</a> is a comment system that you can add to your blog to manage comments.
To add it to ikiwiki first create an account at disqus and add you blog. Then click on the Admin link at that top of the main page.
+[[!meta date="2008-05-05 14:14:08 -0400"]]
+
# Introduction
I had some trouble installing ikiwiki on to a shared hosting service (DreamHost) and figured I'd post the results, since it was pretty rough to get installed. These instructions should work for Perl generally (some of the docs are borrowed from Catalyst's docs), but are tailored for Ikiwiki. There are a few items I'll file as bugs, as well, to aid future installation, but frankly the problems appear to be with installing perl as a non-root user, not anything specific to iki.
+[[!meta date="2008-10-19 18:33:59 -0400"]]
+
One may want to provide ikiwiki hosting with [[rcs/git]]+ssh access and web
server located at different hosts. Here's a description for such
a setup, using password-less SSH as a way of communication between
+[[!meta date="2008-10-18 09:21:24 -0400"]]
+
Instead of the [[plugins/search]] plugin you could embed [Google Custom Search](http://www.google.com/cse) for site search functionality.
**Unfortunately** you need [[plugins/rawhtml]] enabled.
[[!meta title="Hosting Ikiwiki with a master git repository on a remote machine"]]
+[[!meta date="2013-07-22 16:38:20 -0400"]]
This tutorial explains how to set up a wiki such that:
## Configuring the wiki on the wiki machine so that it uses the repository of the git machine
- Configure ssh so that it uses the ssh key `id_SITE` to connect to the git
- michine: add the following lines to file `~/.ssh/config` on the ikiwiki
+ machine: add the following lines to file `~/.ssh/config` on the ikiwiki
machine:
Host server.name.of.the.git.machine
+[[!meta date="2013-09-26 09:22:26 -0400"]]
+
# Howto avoid heavy files in ikiwiki git repo
Continuation of discussion at [git-annex forum](http://git-annex.branchable.com/forum/git-annex___38___ikiwiki_experiment/) turns out the git-annex tricks could be avoided.
--- /dev/null
+i don't understand how this works, but I think i made it work "the right way"(TM) in [[todo/git-annex_support]] now... please review and feedback! --[[anarcat]]
+[[!meta date="2007-10-05 06:59:14 +0000"]]
+
Use case: You want to move away from Wordpress to Ikiwiki as your blogging/website platform, but you want to retain your old posts.
[This](http://git.chris-lamb.co.uk/?p=ikiwiki-wordpress-import.git) is a simple tool that generates [git-fast-import](http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html)-compatible data from a WordPress export XML file.
+[[!meta date="2007-09-10 04:32:55 +0000"]]
+
The source file `foo/bar.mdwn` or `foo/bar.html` generates the
page `foo/bar/index.html`, but the links to the page appear
as "`foo/bar/`". This is fine (and recommended) for pages
+[[!meta date="2011-07-14 17:27:42 -0400"]]
+
To accomplish this on a blog setup, I ran:
mkdir ${SRCDIR}/templates
+[[!meta date="2013-09-24 05:32:11 -0400"]]
+
this script can be used to convert your existing Movable Type blog/database to a ikiwiki blog.
First, go to your MT Admin panel and purge all spam comments/trackbacks. Then use this script: <http://anti.teamidiot.de/static/nei/*/Code/MovableType/mtdump_to_iki.pl>
+[[!meta date="2014-07-11 08:25:31 -0400"]]
+
Here's a simple way to create pages in which the page body (or a part of it) goes right-to-left.
This includes things you insert into the page, such as polls and blockquotes and
lists and a progress bar and so on. Some things don't work perfectly, but if
Create a new template page *templates/rtl.mdwn* with the following content:
- <div class="rtl">
+ <div dir="rtl">
<TMPL_VAR text>
</div>
<TMPL_UNLESS text>
</ul>
</TMPL_UNLESS>
-# 2 Add an RTL class to the CSS
-
-In your *local.css* add the following:
-
-[[!format css """
-/* rtl template */
-.rtl {
- direction: rtl;
-}
-"""]]
-
-# 3 Use the Template
+# 2 Use the Template
To make a page or part of it RTL, use the [[ikiwiki/directive/template]] directive:
+[[!meta date="2009-04-10 17:47:39 -0400"]]
+
If you use twitter or identi.ca, here's how to make a box
on the side of your blog that holds your recent status updates
from there, like I have on [my blog](http://kitenet.net/~joey/blog/)
+[[!meta date="2007-04-14 20:18:11 +0000"]]
+
I have a [blog](http://git.kitenet.net/?p=joey/home.git;a=blob_plain;f=bin/blog)
program that I use to write blog posts in a text editor. The first line I
enter is used as the title, and it automatically comes up with a unique page
name based on the title and handles all the details of posting to my blog.
--[[Joey]]
-
--- /dev/null
+There are now 4 or more ikiwiki bootstrap themes flying around in the [[theme_market]]. It is quite confusing.
+
+In order to figure out exactly which ones fares the best, i made test wikis for all of them. All the wikis have a sidebar with the sidebar plugin enable, so if you don't see it, it's because the theme doesn't support it.
+
+* <http://bootstrap-jak.wiki.orangeseeds.org/> demos the [jak-linux.org](http://jak-linux.org/about/) original bootstrap 2 theme, now updated to 3.3.4. note that this theme needs the [bootmenu](https://github.com/dnstap/dnstap-ikiwiki/blob/master/libdir/IkiWiki/Plugin/bootmenu.pm) plugin to generate a menu, and doesn't support the sidebar plugin
+* <http://bootstrap-ramseydsilva.wiki.orangeseeds.org> demos the [ramseydsilva](https://github.com/ramseydsilva/ikiwiki-bootstrap-theme) bootstrap 3 theme
+* <http://bootstrap-hiatobr.wiki.orangeseeds.org> demos the [hiatobr](https://notabug.org/hiatobr/ikiwiki-bootstrap-theme-2) fork of the above
+* <http://bootstrap-dequis.wiki.orangeseeds.org> demos the [dequis](https://github.com/dequis/ikiwiki-bootstrap-theme) theme, *another* fork of the above
+* <http://bootstrap-tgpfeiffer.wiki.orangeseeds.org> demos the [tgpfeiffer](https://github.com/tgpfeiffer/ikiwiki-bootstrap-template) rewrite
+* <http://bootstrap-anderbubble.wiki.orangeseeds.org/> demos the theme from [anderbubble](https://github.com/anderbubble/ikiwiki-bootstrap), another separate implementation
+
+Hopefully this will help others figure out what the heck is going on here... Personnally, I think I prefer the JAK linux one, but i don't like the idea of depending on a theme-specific plugin... -- [[anarcat]]
+
+Update: I ended up forking the Jak theme also... My experience has been documented in [this blog post](http://anarc.at/blog/2015-09-09-bootstrap/?updated). --[[anarcat]]
+[[!meta date="2008-12-18 20:20:42 -0500"]]
+
You've enabled the [[plugins/comments]] plugin, so a set of pages on your
blog can have comments added to them. Pages with comments even have special
feeds that can be used to subscribe to those comments. But you'd like to
+[[!meta date="2013-01-18 04:42:05 -0400"]]
+
Daniel Burrows
[explains](http://algebraicthunk.net/~dburrows/blog/entry/howto-convert-your-blogger-or-blogspot-blog-to-ikiwiki/)
how to convert your Blogger/BlogSpot blog to ikiwiki.
--- /dev/null
+[[!meta date="2015-02-06 11:29:25 -0500"]]
+
+[[anarcat]] wrote a
+[drupal2ikiwiki](http://anarc.at/services/wiki/drupal/drupal2ikiwiki.py)
+program to import his Drupal site. There's a [detailed article](http://anarc.at/blog/2015-02-06-migrating-drupal-ikiwiki/) explaining the justification behind the switch, the various approaches taken and more!
[[!toc levels=2]]
+[[!meta date="2008-10-20 16:55:38 -0400"]]
Mediawiki is a dynamically-generated wiki which stores its data in a
relational database. Pages are marked up using a proprietary markup. It is
+[[!meta date="2008-10-20 16:55:39 -0400"]]
+
This MoinMoin converter converts wikis to ikiwikis backed by a git repository, including full history. It simply parses the wiki pages into markdown using the MoinMoin engine.
The converter was originally written by [[JoshTriplett]] and included support for Tikiwiki, for which it parses the wiki pages to HTML then back into markdown using the `libhtml-wikiconverter` Perl package. That original version from Josh is still available from [his wiki page](/users/JoshTriplett).
--- /dev/null
+[[!meta date="2015-01-07 23:11:57 -0500"]]
+
+[[Amitai Schlair|schmonz]] wrote an `ikiwiki-import` program that
+currently can only [import from
+Textpattern](https://github.com/schmonz/txp2ikiwiki), and then only
+if configured exactly like the site he imported. But `ikiwiki-import`
+is designed to be extensible, and maybe after a little extending
+it'll be suitable for inclusion in ikiwiki.
+[[!meta date="2008-05-06 19:22:09 -0400"]]
+
[[rcs/git]] and other distributed version control systems are all about
making it easy to create and maintain copies and branches of a project. And
this can be used for all sorts of interesting stuff. Since ikiwiki can use
1. [[a simple HTML mirror|tips/Git_repository_and_web_server_on_different_hosts/]]
2. [[separate ikiwiki and git servers|tips/Hosting_Ikiwiki_and_master_git_repository_on_different_machines]]
3. separate `srcdir`, still requires a central bare repo - uses [[plugins/pinger]]
- 4. completely distinct ikiwiki installs, synchronised with [[plugins/contrib/gitpush]]
+ 4. completely distinct ikiwiki installs
Here's a graphic overview of those:
[[!img decentralized_wikis.svg size=400x]]
In this configuration, each wiki is fully independent and pushes its
-changes to other wikis using the [[plugins/contrib/gitpush]] plugin.
+changes to other wikis using git.
## Step by step setup instructions
git_wrapper: /home/user/source.git/hooks/post-commit
git_test_receive_wrapper: /home/user/source.git/hooks/pre-receive
-To do this, the mirror needs to push back to the master, using the [[plugins/contrib/gitpush]] plugin:
+To make the mirror push back to the master, use, for example:
- git_push_to:
- - git://wiki.example.com/
+ git_wrapper_background_command: git push git://wiki.example.com/
-This will ensure that commits done on the mirror will propagate back to the master.
+This will help ensure that commits done on the mirror will propagate back to the master.
## Other ideas
+[[!meta date="2009-01-12 20:01:03 -0500"]]
+
It's common to name the [[cgi]] "ikiwiki.cgi", and put it somewhere
like `~/public_html/ikiwiki.cgi`, or `/var/www/wiki/ikiwiki.cgi`.
These instructions are for Debian systems, but the basic
configuration changes should work anywhere.
+[[!toc]]
+
## apache 2
* Make sure the cgi module is loaded. (Ie, `a2enmod cgi`).
+[[!meta date="2008-11-10 17:40:03 -0500"]]
+
A [markdown mode](http://jblevins.org/projects/markdown-mode/) for
emacs can help in editing of ikiwiki
[[ikiwiki/markdown]] files.
+[[!meta date="2008-12-26 15:27:49 -0500"]]
+
Content from sites such as YouTube can be embedded into a web page. Maybe
you want to do this. But you'll find that the [[plugins/htmlscrubber]]
doesn't let you. It blocks the tags used to embed such content, because
+[[!meta date="2010-02-08 23:32:05 -0500"]]
+
The [ikiwiki-nav](http://www.vim.org/scripts/script.php?script_id=2968) plugin
for vim eases the editing of IkiWiki wikis, by letting you "follow" the
wikilinks on your file (page), by loading the file associated with a given
+[[!meta date="2008-12-29 14:58:54 -0500"]]
+
Here's how to set up a static wiki or blog using ikiwiki with no hosting
fees. Everything is hosted on github, both the git repository and the web
site. Your laptop is used to generate and publish changes to it.
+[[!meta date="2007-04-14 20:29:32 +0000"]]
+
If you have a [[blog]] that is aggregated, either on a site like Planet
Debian, or just through user subscriptions, one common problem is that
changes to the guids of items in the blog can “flood” the aggregator,
+[[!meta date="2010-07-07 10:48:36 +0000"]]
+
Enable [[plugins/lockedit]] in your setup file.
For example:
+[[!meta date="2010-03-14 14:58:13 -0400"]]
+
If you try to include a `.htaccess` file in your wiki's source, in order to
configure the web server, you'll find that ikiwiki excludes it from
processing. In fact, ikiwiki excludes any file starting with a dot, as well
+[[!meta date="2010-05-02 17:16:15 -0400"]]
+
First, if you just want to embed videos using the html5 `<video>` tag,
you can do that without switching anything else to html5.
However, if you want to fully enter the brave new world of html5, read on..
[[!template id=note text="**Table of contents** [[!toc ]]"]]
+[[!meta date="2009-09-02 17:17:15 -0400"]]
Introduction
------------
[[!toc]]
+[[!meta date="2011-06-24 17:35:14 -0400"]]
# pkgsrc
7. [install binary packages (OSX)](http://www.pkgsrc.org/#index1h1)
-{OK} As of 2014/08/24, the [version of ikiwiki in pkgsrc](http://pkgsrc.se/www/ikiwiki) is 3.20140815.
+{OK} As of 2014/10/14, the [version of ikiwiki in pkgsrc](http://pkgsrc.se/www/ikiwiki) is 3.20140916.
-----
Enrique Castilla
-[!] As of 2014/08/24, the [version of ikiwiki in MacPorts](http://www.macports.org/ports.php?by=name&substr=Ikiwiki) is 3.20110608.
+[!] As of 2014/10/14, the [version of ikiwiki in MacPorts](http://www.macports.org/ports.php?by=name&substr=Ikiwiki) is 3.20110608.
-----
_ This setup file causes ikiwiki to create a wiki, check it into revision
_ control, generate a setup file for the new wiki, and set everything up.
- _ Just run: ikiwiki -setup /etc/ikiwiki/auto.setup
+ _ Just run: ikiwiki --setup /etc/ikiwiki/auto.setup
_By default, it asks a few questions, and confines itself to the user's home
_directory. You can edit it to change what it asks questions about, or to
+[[!meta date="2008-06-15 15:05:02 -0400"]]
+
Remember gopher? Ikiwiki can be served up by this venerable protocol.
It's pretty simple to get it going. Just install pygopherd or another gopher
+[[!meta date="2009-08-08 16:04:58 -0400"]]
+
[Here](http://blog.spang.cc/posts/migrating_from_typo_to_ikiwiki/) is a blog post that gives instructions and a script for importing posts from [Typo](http://typosphere.org/), a Ruby-on-Rails based blogging engine.
[[!meta title="inside .ikiwiki"]]
+[[!meta date="2008-03-21 13:52:50 -0400"]]
The `.ikiwiki` directory contains ikiwiki's internal state. Normally,
you don't need to look in it, but here's some tips for how to do so if
[[!meta title="Integrated issue tracking with Ikiwiki"]]
+[[!meta date="2007-04-06 21:36:07 +0000"]]
[[!meta author="Joey Hess, LinuxWorld.com"]]
[[!toc]]
+[[!meta date="2007-10-22 01:45:55 +0000"]]
Using ikiwiki with the [[rcs/git]] backend, some interesting things can be done
with creating mirrors (or, really, branches) of a wiki. In this tip, I'll
and configure it so that each page links to the corresponding page on the
server.
-Now just run `ikiwiki -setup wiki.setup -getctime` and you should be
+Now just run `ikiwiki --setup wiki.setup --getctime` and you should be
good to go. (You only need the slow `-getctime` option the first time you
run setup.) If you have taken your `wiki.setup` file from an existing
wiki, you may need to change certain parameters to adapt to the paths
Use standard git commands to handle pulling from and pushing to the server.
Note that if changes are pulled from the server, you will need to manually
-update the wiki, with a command such as `ikiwiki -setup wiki.setup -refresh`.
+update the wiki, with a command such as `ikiwiki --setup wiki.setup --refresh`.
If you'd like it to automatically update when changes are merged in, you
can simply make a symlink `post-merge` hook pointing at the `post-update`
hook ikiwiki created.
I have followed this idea too, however after pushing to the server running gitk in the scrdir shows that the remotes/origin/master branch is newer than the master. Is this normal? Have I reset the master branch to remotes/origin/master then every time when someone pushed something (and run ikiwiki -setup afterwards?)
[[Micheal]]
+
+-----
+
+I like the idea of having some common configuration (let's say of plugins) in the server as well as on the laptop clone. In the ideal situations only some dir should be different (src, dest, lib, etc.) in the two setup files.
+
+Managing two setup files (one for the server and one for the laptop) is however a pain since each time a change is made on the server (through websetup for instance) one has to manually integrated it (after being made aware of it) on the laptop setup file and vice-versa
+
+One solution is to allow multiple use of `--setup` on the command line : the first is the main setup file (the one from the server, e.g. `main.setup`) and the second is the specificities of the laptop clone (e.g `laptop.setup`). In such a situation ikiwiki is called with `ikiwiki --setup main.setup` on the server and `ikiwiki --setup main.setup --setup laptop.setup` on the laptop (merging both configuration data in order).
+
+This solution seems to work, but are there any bad side effects which I miss doing that (I thought that in IkiWiki code only one setupfile is keeped) ? --[[bbb]]
+
+Unfortunatley that does not fully work, as soon as `cgi_wrapper` is defined in setup file since each time ikiwiki reads a setup file it adds (not replace) a wrapper in `$config{wrappers}`.
+
+I am still trying to find an idea to share config data through server and laptop. --[[bbb]]
[[!meta title="Laptop Ikiwiki extended"]]
+[[!meta date="2008-03-03 08:21:04 -0500"]]
I have (at least) three different hosts, `laptop`, `gitserver`, and `webserver`.
+[[!meta date="2013-04-13 11:46:28 -0400"]]
+
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:
~~~~
+[[!meta date="2009-01-11 16:04:32 -0500"]]
+
For people that were not born with GNU emacs fingers,
there is a markdown editor (with preview and outline)
for [eclipse](http://www.eclipse.org) available
+[[!meta date="2009-08-02 13:35:04 -0400"]]
+
When using [mathopd](http://www.mathopd.org) to serve ikiwiki, be careful of your Umask settings in the mathopd.conf.
With `Umask 026` in mathopd.conf, editing pages resulted in the following errors and a 404 page when the wiki tried to take me to the updated page.
+[[!meta date="2013-07-21 20:06:12 -0400"]]
+
First, get familiar with [[howto avoid flooding aggregators]].
## Into ikiwiki, from another CMS
+[[!meta date="2014-04-01 10:39:47 -0400"]]
+
because of [[bugs/notifyemail_fails_with_some_openid_providers]], I have been struggling with finding ways of being notified of changes to pages I want to watch here.
the workaround I found so far was to join the `#ikiwiki` channel on freenode, and set the following "hilight" in irssi:
+[[!meta date="2008-05-05 14:51:26 -0400"]]
+
[NearlyFreeSpeech.net](http://NearlyFreeSpeech.net) is a shared hosting
provider with very cheap pay as you go pricing. Here's how to install ikiwiki
there if you don't have a dedicated server.
mkdir ~/wiki
cd ~/wiki
cp -r ~/ikiwiki/doc/examples/blog/* .
- ikiwiki -dumpsetup ikiwiki.setup
+ ikiwiki --dumpsetup ikiwiki.setup
nano ikiwiki.setup
# Set destdir to /home/htdocs
# Set srcdir to /home/private/wiki
# Set the git_wrapper path to /home/private/wiki.git/hooks/post-update
# Configure the rest to your liking and save the file.
ikiwiki-makerepo git . ../wiki.git
- ikiwiki -setup ikiwiki.setup
+ ikiwiki --setup ikiwiki.setup
## Clean up
> it ikiwiki. --[[Joey]]
Thanks a lot Joey. :-)
+
+Hi
+
+I installed version 3.20141016 as described, and it works mostly. However to get [[!iki plugins/sparkline]] to work properly I had to add
+
+[[!format php """
+set_include_path(get_include_path() . PATH_SEPARATOR . '/home/private/src/sparkline-php-0.2/lib');
+require_once('/home/private/src/sparkline-php-0.2/lib/Sparkline_$style.php');
+"""]]
+
+to `sparkline.pm` around line 38. This is mostly likely because
+
+1. I didn't install sparkline into php's default path.
+1. I don't really know php.
+1. I don't have the time (right now) to sort out the proper way to do this.
+
+I also haven't sorted out how to make [[!iki ikiwiki/directive/format]] fully functional. I suspect I don't have everything installed on the host. -- [[james]]
+[[!meta date="2009-10-15 18:42:46 -0400"]]
+
Ikiwiki is a wiki compiler, which means that, unlike a traditional wiki,
all the work needed to display your wiki is done up front. Where you can
see it and get annoyed at it. In some ways, this is better than a wiki
Are you building your wiki by running a command like this?
- ikiwiki -setup my.setup
+ ikiwiki --setup my.setup
If so, you're always telling ikiwiki to rebuild the entire site, from
scratch. But, ikiwiki is smart, it can incrementally update a site,
building only things affected by the changes you make. You just have to let
it do so:
- ikiwiki -setup my.setup -refresh
+ ikiwiki --setup my.setup --refresh
Ikiwiki automatically uses an incremental refresh like this when handing
a web edit, or when run from a [[rcs]] post-commit hook. (If you've
configured the hook in the usual way.) Most people who have run into this
-problem got in the habit of running `ikiwiki -setup my.setup` by hand
+problem got in the habit of running `ikiwiki --setup my.setup` by hand
when their wiki was small, and found it got slower as they added pages.
## use the latest version
command. Obviously, more files will make it take longer.
You can avoid this scanning overhead, if you're using git, by setting
- `only_committed_changes`. This makes ikiwiki -refresh query git for
+ `only_committed_changes`. This makes ikiwiki --refresh query git for
changed files since the last time, which tends to be a lot faster.
However, it only works if all files in your wiki are committed to git
(or stored in the [[/plugins/transient]] underlay).
+[[!meta date="2008-07-16 17:43:57 -0400"]]
+
Here are some tips for ways to style the links
provided by the [[plugins/parentlinks]] plugin.
+[[!meta date="2010-12-12 07:33:25 +0000"]]
+
Here's the app.psgi file if you want to run ikiwiki with [PSGI](http://plackperl.org) instead of apache or other web servers:
use Plack::App::CGIBin;
+[[!meta date="2007-04-11 01:17:05 +0000"]]
+
Want to turn on the `usedirs` setting on an existing wiki without breaking
all the links into it?
"(.*)\.(atom|rss)$" => "$1/index.$2"
)
}
- }
\ No newline at end of file
+ }
+[[!meta date="2010-03-01 13:14:48 +0000"]]
+
Any wiki with a form of web-editing enabled will have to deal with
spam. (See the [[plugins/blogspam]] plugin for one defensive tool you
can deploy).
+[[!meta date="2007-04-29 22:48:35 +0000"]]
+
As of version 2.0, ikiwiki will switch to enabling the 'usedirs' setting by
default. This *will* break all URLs to wikis that did not have 'usedirs'
turned on before. You can either follow this procedure to convert your wiki
The cleaner urls seem worth it to me. The `urlto()` function makes it easy
for ikiwiki code to deal with the path changes. --[[Joey]]
+
+--------
+
+when migrating to usedirs, the following apache config sniplet might be useful (use inside the Directory section that manages your wiki):
+
+ RewriteEngine on
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^(.+)\.html$ /my_base_path/$1/ [R]
+
+that sniplet causes redirects from any non-existing .html file to the respective usedirs directory. (when serving from the host root url, drop the my_base_path part, otherwise adapt it to your needs).
+
+i recommend using this or a similar mechanism to keep your old urls reachable.
+
+--[[chrysn]]
+[[!meta date="2008-10-24 15:47:18 -0400"]]
+
This tip will describe how to allow anyone on the planet to `git push`
changes into your wiki, without needing a special account. All a user needs
to know is:
+[[!meta date="2008-12-23 16:20:37 -0500"]]
+
Version 3.0 of ikiwiki makes some significant changes, which
you will need to deal with when upgrading from ikiwiki 2.x.
your wiki is upgraded to 3.0.
You can move these preferences into the setup file by running
-`ikiwiki-transition moveprefs your.setup; ikiwiki -setup your.setup -refresh -wrappers`
+`ikiwiki-transition moveprefs your.setup; ikiwiki --setup your.setup --refresh --wrappers`
(Make sure you have converted the setup file to the new format first.)
2. Use [[ikiwiki-transition]] to rename all existing aggregated `.html`
files in the srcdir. The command to run is
`ikiwiki-transition aggregateinternal your.setup`,
-3. Refresh the wiki. (`ikiwiki -setup your.setup -refresh`)
+3. Refresh the wiki. (`ikiwiki --setup your.setup --refresh`)
## embed / googlecalendar
+[[!meta date="2007-04-14 20:18:12 +0000"]]
+
If you use Firefox or Iceweasel, the [It's All
Text](https://addons.mozilla.org/en-US/firefox/addon/4125) extension allows
you to use a real text editor like Emacs or Vim to edit the contents of text
+[[!meta date="2010-09-12 19:25:38 -0500"]]
+
# Vim and ikiwiki
## Syntax highlighting
+[[!meta date="2010-09-12 19:25:37 -0500"]]
+
This page is deprecated. See [[tips/vim_and_ikiwiki]] for the most up to date
content
+[[!meta date="2007-04-14 20:18:13 +0000"]]
+
One thing I use ikiwiki for is the web pages for software projects I
maintain. Each of my projects has a news page with an announcements feed,
and to automatically update this when I release a new version, generating
+[[!meta date="2010-03-19 17:58:40 -0400"]]
+
Here's how to convert your existing standard format ikiwiki setup file into
the new YAML format recently added to ikiwiki.
--- /dev/null
+The `PM_FILTER` doesn't include the `DESTDIR` variable. This means that, if you use it with your build, it's incoherent to the rest of the build; i.e. the `INSTALLDIR_AUTOREPLACE` doesn't include it. Honestly I can't recall what the final effect of that was but the following [[patch]] fixed it.
+
+[[!format diff """
+diff --git a/Makefile.PL b/Makefile.PL
+index 5b0eb74..94adb0f 100755
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -194,7 +194,7 @@ coverage:
+ WriteMakefile(
+ NAME => 'IkiWiki',
+ PREFIX => "/usr/local",
+- PM_FILTER => './pm_filter $(PREFIX) $(VER) $(PROBABLE_INST_LIB)',
++ PM_FILTER => './pm_filter $(DESTDIR)$(PREFIX) $(VER) $(PROBABLE_INST_LIB)',
+ MAN1PODS => {},
+ PREREQ_PM => {
+ 'XML::Simple' => "0",
+"""]]
+
+> This change certainly looks plausible, but I maintain a package
+> of ikiwiki in a build system that sets `DESTDIR`, and I've not
+> noticed any problems there. Would you be willing to do one more
+> build in your environment without this change, so that we can
+> understand the problem it's trying to fix? --[[schmonz]]
+>> Thinking about this more and perhaps this is incorrect? Or more accurately, I may have been using `DESTDIR` incorrectly. I'm unsure. I don't currently have access to the correct build environment but my best recollection is that I was using the `DESTDIR` to set base install directory for multiple working copies. Of course, the `DESTDIR` is normally a staging install for the root directory (i.e. not normally visible during runtime). I'm not 100% on the use of `DESTDIR` but perhaps you are? Otherwise, leave this, and I'll adjust that build environment to rework the `PREFIX` variable instead. -- [[ttw]]
+
+>>> Maybe one of these explanations from
+>>> [GNU](https://www.gnu.org/prep/standards/html_node/DESTDIR.html) or
+>>> [pkgsrc](https://www.netbsd.org/docs/pkgsrc/fixes.html#destdir-support)
+>>> clarifies `DESTDIR` for you. If you can narrow down a specific,
+>>> reproducible problem that setting `DESTDIR` helps solve, please do
+>>> report it here. Until then, marking this [[done]]. --[[schmonz]]
+
+Also, the `po/Makefile` presumes the use of `make`, explicitly. If you use another build tool it fails (ironically I was actually using `gmake` in non-gnu environment so it wasn't aliased to `make`). Switch from the explicit call to the generic recall variable `$(MAKE)`.
+
+[[!format diff """
+diff --git a/po/Makefile b/po/Makefile
+index 5ec4a15..4d1d33e 100644
+--- a/po/Makefile
++++ b/po/Makefile
+@@ -84,7 +84,7 @@ underlays: ../ikiwiki.out underlays_copy_stamp
+ ../ikiwiki.out -libdir .. -setup underlay.setup -refresh
+
+ ../ikiwiki.out: ../Makefile
+- make -C .. ikiwiki.out
++ $(MAKE) -C .. ikiwiki.out
+
+ ../Makefile: ../Makefile.PL
+ cd .. && ./Makefile.PL
+"""]]
+
+> This change looks more obviously correct, and I understand exactly
+> I haven't encountered the problem you have (my build system ensures
+> that `make` gets me `gmake` for ikiwiki). Cherry-picked, with amended
+> commit message. --[[schmonz]]
+
+Note following comments by [[Joey]] via github
+
+> These are not mergeable in their current state.
+>
+> *Pull 'DESTDIR' update to 'Makefile.PL' from mixed-master.*
+>
+> This doesn't explain
+>
+> * what the problem was
+> * how the change fixed it
+> * why the change is correct
+
+>> No, I suppose not; I won't explain. Hopefully the above clarifies. -- [[ttw]]
+
+> *Re-merge from 'joeyh' to new, clean head.*
+>
+> I have no idea what the above commit is doing, but it somehow makes changes to 432 files?!
+
+>> Yeah, sort of. I'm not very good with computers ... specifically, with `git` and stuff. The diff between my `master` and your `master` is only two files so hopefully it *is* actually doing what's intended (that is, those changes are from your repository into my own -- I "rebased" my own in an attempt to simplify things). Anyway. -- [[ttw]]
+
+> *Pull the 'po/Makefile' change from the mixed-master.*
+>
+> This one is adding a $(MAKE) where there was a make. Which is fine, but the commit message is again, horrible. What is the mixed-master? Describe the change you are making, not your internal process for making it.
+
+>> Note to others, `graft` from `hg` doesn't pull original commit messages the way you wish it did (or I did something wrong ... more likely). -- [[ttw]]
+
+> Also, please don't use github pull requests for ikiwiki. Post todo items on ikiwiki.info with a link to your git repository and branches to be merged.
+
+>> NP. [[http://github.com/ttw/ikiwiki]]; `master` branch. -- [[ttw]]
--- /dev/null
+Is there any current thought of reworking ikiwiki CGI using
+any of the suggested [[!cpan CGI::Alternatives]] in response to the
+official deprecation of [[!cpan CGI desc=CGI.pm]]?
+
+Or is it just a matter of 'hold course until [[rewrite ikiwiki in haskell]]'?
+
+> I don't know whether Joey has any plans in this direction, but
+> [[!cpan CGI]], [[!cpan CGI::Session]] and [[!cpan CGI::FormBuilder]]
+> are all documented to be part of the [[plugin API|plugins/write]]
+> so in the short term, I don't think anything is going to change.
+> If someone works out a way to do equivalent hooks nicely in a
+> different framework, that would have to be IkiWiki 4.
+>
+> I'm not sure how much IkiWiki would stand to gain from moving to a
+> more extensive web framework: it doesn't do elaborate URL routing
+> like most webapps, because it produces static HTML for as much of
+> its content as possible anyway. --[[smcv]]
+
+>> One reason for such a change (although a rewrite in haskell is a little drastic, and overlaps with "gitit") would be to allow ikiwiki to run as a shared thread under FastCGI or mod_perl, instead of forking all the time for every new user. The discussion for this is in [[todo/fastcgi_or_modperl_installation_instructions]] and [[todo/multi-thread_ikiwiki]].
+>>
+>> Also right now, there are serious lock contention issues in ikiwiki: any `?do=` action in the CGI is under a global lock right now (`lockwiki()`), for example, which makes scaling ikiwiki to multiple editing users a significant problem. I have seen such contention as a user on this wiki but mostly on the git-annex wiki.
+>>
+>> I, for one, would be happy to see some improvements in this area... --[[anarcat]]
+
+>>> That would be a rewrite, in whatever language: IkiWiki assumes that
+>>> global state is OK, and I don't think keeping existing APIs or
+>>> plugins working unmodified when that changes would be feasible.
+>>>
+>>> It isn't on *my* to-do list, put it that way. --[[smcv]]
+
+>> I'm on a thin pipe, but IIRC CGI.pm is simply no longer going to be bundled with Perl core, and is not deprecated in any other way. Just old, and now an explicit dependency. I may be wrong. --[[schmonz]]
+
+>>> Yeah, that's what perldelta says. Also, in Debian, the future is already
+>>> here: perl-modules Recommends libcgi-pm-perl, and libcgi-pm-perl comes
+>>> before the bundled copy in the search path, so I'm already testing against
+>>> an unbundled CGI.pm, and I suspect Joey is too. --[[smcv]]
--- /dev/null
+[[!tag wishlist]]I would quite like to be able to run ikiwiki in a "CGI-only" mode, where
+every wikilink was routed via the cgi, and such "normal" page visits were rendered on the
+fly by the CGI, a bit like edit-preview mode.
+
+The reason I'd like this is I would like to have a number of parallel ikiwiki instances
+running alongside my prime one, based on the same source repository; but with different
+setup parameters (such as possibly different overlay or template directories, etc.).
+
+I would still need to have multiple copies of the source repository (= separate `.ikiwiki`
+directories, seperate locks); but I could use `git-relink` or shallow clones or various
+other methods to limit the disk-space impact of that; what I want to avoid is multiple
+*destination* directories, especially for what might be relatively throw-away experiments.
+
+I imagine if this was possible, it would be hella-slow, but it would still be useful I
+think (and might even help to highlight some of the pain points for future optimisation
+efforts).
+
+ — [[Jon]]
--- /dev/null
+[[!template id=gitbranch branch=kjs/mobistyle author="[[kjs]]"]]
+Currently the bottom border cuts through the text on small devices. Resize your window to a narrow column to check.
+
> > ```
> >
> > ... maybe a bug in Discount... --[[anarcat]]
+
+> > > Discount versions older than 2.1.6 do not support the \`\`\` fences.
+> > > ikiwiki.info (hosted by branchable.com) presumably runs on Debian
+> > > stable, which only has 2.1.3. I am not involved in running Branchable,
+> > > but it seems reasonable to assume that it will be upgraded to 2.1.7
+> > > as part of upgrading to Debian 8 when that is released. --[[smcv]]
+
+> > I strongly support this feature as well! --[[integrii]]
+
+> > > ikiwiki has no support for specific Markdown features: all it does
+> > > is to recognise a Markdown file and give it to a Markdown
+> > > implementation such as [[!cpan Text::Markdown::Discount]].
+> > > If you would like ikiwiki to support a different subset of Markdown,
+> > > please either recommend a better Markdown implementation, or
+> > > report bugs / feature requests to the maintainer of Discount.
+> > >
+> > > In this case it appears there is no code change required in
+> > > ikiwiki (and for that matter, nothing to do in Discount either
+> > > because the feature request has already been implemented),
+> > > so I'm [[closing this todo item|done]]. --[[smcv]]
--- /dev/null
+[[!template id=gitbranch branch=jcflack/config-envsave
+author="[[Chapman Flack|jcflack]]"
+browse=https://github.com/joeyh/ikiwiki/pull/14]]
+
+I created this [[!taglink patch]] in advance of writing the [[plugins/contrib/signinview]] plugin. This patch does nothing `signinview`-specific, but simply refactors wrapper generation a bit so that plugins have some influence over what environment variables a wrapper will preserve.
+
+For example, Wrapper.pm previously hardcoded not only (some of) the RFC 3875 variables needed for a CGI wrapper (and hardcoded its own test for _whether it was generating_ a CGI wrapper), but also the Apache ErrorDocument-specific variables needed by the [[plugins/404]] plugin. Given that `signinview`, as a `403` handler, would have similar requirements to `404`, and it seemed possible other wrappers for other purposes could rely on other environment variables too, it seemed to make sense to move the preserved-variable list out of Wrapper.pm hardcoding, and closer to the plugins or other code relying on the variables.
+
+----
+I was asked by [[Joey]] to create a page here for purposes of review. I'm still trying to figure out the preferred workflow for this project ... I'm assuming the github link is ok for looking over the comments and code changes, since they're already pushed to my git fork and (to me, anyway) reviewing changes in a decent repository browser is so much nicer than a `diff -u` pasted into a page between `<pre>` tags.
+
+That seemed to be ok for reviewing [[bugs/CGI wrapper doesn't store PERL5LIB environment variable]], so I hope it's ok for this one too. If another way would be preferable, please let me know.
+
+-- [[jcflack]]
+
+> This is less about what plugins need, and more about what is safe.
+> If an environment variable is unsafe (in the sense of "can make a
+> setuid executable change its behaviour in dangerous ways") then we
+> must not pass it through, however desirable it might be.
+>
+> Because the only safe thing we can do is a whitelist, the list
+> is secondarily about what plugins need: if nothing needs a variable,
+> we don't pass it through.
+>
+> However, if a particular variable is safe, then it's always safe;
+> so if any plugin needs something, we might as well just put it in
+> the big list of things to keep. (In other words, any change to this
+> list is already security-sensitive.)
+>
+> As such, and because importing CGI into Setup pulls in a bunch
+> of extra code that is normally only imported when we are actually
+> running as a CGI, it might make more sense to have the "master list"
+> stay in Wrapper.
+>
+> What variables would `signinview` need? Can we just add them to
+> the list and skip the complexity of per-plugin configurability?
+>
+> Sorting the list makes sense to me, and so does adding the RFC 3875 set.
+>
+> [[!format txt """
+This change does seem to have exposed a thing where various plugins that
+call checksessionexpiry() (in CGI.pm) have been supplying one more argument
+than its prototype allows ... for years ...
+"""]]
+>
+> I fixed that in ikiwiki 3.20141016. Please don't add the extra ignored
+> parameter to the prototype.
+>
+> [[!format diff """
++ if ( $config{needenvkeys} ) {
+"""]]
+>
+> If this is needed at all, you should include this in the master list of
+> setup keys in IkiWiki.pm so it's documentable. Please mention setuid
+> in the description: "environment variables that are safe to pass through
+> a setuid wrapper" or something.
+>
+> I think it's `safe => 0, advanced => 1`.
+>
+> `preserve_env` or `env_keep` (or without the underscore, as you prefer)
+> might be better names for it (terminology stolen from `debuild` and `sudo`
+> respectively).
+>
+> --[[smcv]]
--- /dev/null
+[[!tag wishlist]]
+
+Maybe I'm not using ikiwiki right, and I'll appreciate any advice on this, but
+it seems to me that using ikiwiki instead of a mailing lists has some major
+weaknesses which I fail to overcome, but which may be possible to fix, maybe
+using some client-side software.
+
+The problem: Mailing lists give me things I need but can't find here, so I'm
+failing to track the [[/forum]], [[/todo]] and so on:
+
+- With MLs I can easily see what I read, to what I replied, mark things with
+ colors and labels if my MUA supports it
+- With MLs I can easily send a reply, without going through git. Reading and
+ writing happen together in the same dedicated UI
+
+I know I can subscribe to [[forum]] and to individual posts' comment feeds, but
+it's not the same - I don't see the tree of comments like in e-mail. Either I
+sort by creation time (not seeing evidence of more recent replies) or by
+last-edited time, or perhaps by last comment (then busy pages cause less busy
+ones quickly go deep into the list and are never seen by the user).
+
+Is there an existing solution to this?
+
+Random ideas, maybe direction for a solution:
+
+- Make client software which takes a local git clone of a wiki and operates on
+ it, while the user sees an MUA-like interface
+- Add some plugin to ikiwiki that can cooperate with an MTA: listen to e-mail
+ on a mailing list with specific formatting and put the content into a wiki.
+
+What do you think? How do you keep track of the forum etc. in the same way it's
+done with mailing lists?
+
+(I don't mind a hacked solution that solves the problem for me, but if it's not just
+me being crazy, I prefer a general-purpose solution that helps everyone)
+
+-- [[fr33domlover]]
> like `limit` (by analogy with SQL) or `max` as the canonical name for the
> "number of things to match" parameter, at which point a non-numeric
> `show` could mean this thing. --[[smcv]]
+
+>> [[!template id=gitbranch branch=smcv/pagestats-show
+author="[[Louis|spalax]], [[smcv]]"
+browse=http://git.pseudorandom.co.uk/smcv/ikiwiki.git/shortlog/refs/heads/pagestats-show]]
+>> Here's a branch. It depends on my `ready/limit` branch
+>> from [[todo/pick a new canonical name for equivalent of SQL limit]].
+>> --[[smcv]]
--- /dev/null
+Hi,
+
+I've modified page.tmpl to take into account rtl languages. Basically I've modified the `<html>` tag to generate
+
+ <html dir="$DIRECTION" lang="$LANG">
+
+if the PO plugin is enabled.
+
+I can't seem to attach a patch - sending it to Joey.
+Copy pasting markup here seems to be quite problematic.
+Pasting it here: https://paste.debian.net/318146/
+
+
+Cheers.
+
+> [[applied|done]] --[[Joey]]
> CGI-generated pages should generate those links. This was the implementation of
> [[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]].
>
+>> This wasn't actually the case if the schemes are different; but now
+>> IkiWiki will generate protocol-relative URLs if the CGI is https,
+>> the url is http and the hostname is the same (i.e. it assumes that the https
+>> equivalent of the url will also work). This is to prevent mixed-content
+>> issues, and partially addresses this todo item.
+>> --[[smcv]]
+>
> If your`$config{url}` and `$config{cgiurl}` have different hostnames (e.g.
> `url => "http://wiki.example.com", cgiurl => "http://cgi.example.com/ikiwiki.cgi"`)
> then you might still have this problem. In principle, IkiWiki could generate
> protocol-relative URLs in this situation, but it isn't clear to me how
> widely-supported those are.
>
+>> HTML5 says protocol-relative URLs work, and they seem to be widely
+>> supported in practice, so I've changed the rule to: if the url and cgiurl
+>> share a scheme (protocol) but differ only by hostname, use `//foo/bar`
+>> protocol-relative URLs. This partially addresses this todo.
+>> I'm still thinking about what the right thing is for more complicated
+>> situations: see [[todo/design for cross-linking between content and CGI]].
+>> --[[smcv]]
+>
> If you set both the `$config{url}` and `$config{cgiurl}` to https, but make
> the resulting HTML available over HTTP as well as HTTPS, that should work
> fine - accesses will be over http until the user either explicitly
* <http://johnmacfarlane.net/babelmark2/faq.html#what-are-some-big-questions-that-the-markdown-spec-does-not-answer>
It might be worth following...
+
+> ikiwiki does not implement Markdown: we use a third-party library for that
+> (there are several options, but the recommended one is currently
+> [[!cpan Text::Markdown::Discount]]). We support whatever dialect
+> of Markdown is implemented by the chosen Markdown implementation.
+>
+> As a result, nothing is likely to change in ikiwiki's interpretation of
+> Markdown unless someone either changes the behaviour of Discount,
+> or recommends a different (and hopefully better) third-party library.
+> --[[smcv]]
+[[!toc levels=3]]
+
+# Zoned ikiwiki
+
+## The idea
+
The idea behind this would be to have one ikiwiki behave as a dynamic private wiki in a specified area
-and a more static publiczone wiki. Actually private wiki page can be addressed via a *pagespec*.
+and a more static publiczone wiki.
+
+## Use cases
+
+This can be more or less difficult depending on the use case.
+
+### Purely static public zone with a single, controlled-access inward zone
+
+For this case, only a known set of people are authorized to see the inward zone
+or edit anything. Everybody else sees only the public zone. This use case is mostly
+easy to handle now, as long as access to things like the `recentchanges` page and
+repository browser are not granted for the public zone. In particular, the features
+that allow information exposure via edit access are not of concern in this case.
+
+### Static public zone, more than one controlled inward zone
+
+In this case, the known, controlled set of people with special access are divided
+into groups with access to different (or overlapping) zones. The public still sees only a static zone.
+
+Here, some of the harder issues, like information disclosure via edit access, do apply,
+but only to members of the known, controlled groups. How much of a problem that is
+depends on _how sensitive_ the information is that each group might reveal from another
+zone. The rcs logs will show when a page has been edited to contain an [[ikiwiki/directive/inline]]
+directive or other trick to reveal information, so if it is enough to treat the trusted users' conduct
+as a management issue ("don't do that, please") then the risks can be acceptable in this case.
+
+### Public zone allows contribution/editing by external users
+
+This case is the most difficult to cover at present, and probably shouldn't be attempted
+without solutions to most or all of the **obstacles** identified here.
+
+## Implementation techniques
+
+### Edit control by user and pagespec: lockedit
+
+This works today, using the [[plugins/lockedit]] plugin. Because the `user` predicate
+can be part of a [[ikiwiki/PageSpec]], this is all we need to flexibly control edit access
+using any authentication method `ikiwiki` supports.
+
+### View control in the `http` server
+
+We already can more or less do this for example with [[httpauth|/plugins/httpauth/]], `.htaccess` files and a proper `httpauth_pagespec`.
+
+_Drawbacks:_ might be fiddly to configure and require maintaining two different user/pass logbases (native ikiwiki
+signin), or impractical if ikiwiki is using an authentication method not natively supported
+in the `http` server (e.g., OpenID).
+
+### View control in ikiwiki CGI
+
+By requiring access to private zones to go through an ikiwiki CGI wrapper,
+any ikiwiki-supported authentication method can be used, and the accessible
+pages can be specified using the `user` predicate with [[ikiwiki/PageSpec]]s,
+just as with the [[plugins/lockedit]] plugin.
+
+The [[plugins/contrib/signinview]] plugin implements this idea, using very
+simple configuration that is possible even in shared-hosting environments
+without complete access to the `http` server configuration, as long as
+`.htaccess` files or their equivalent can be created. The top directory of
+a private zone needs only a `.htaccess` file with `Deny from All` or
+`Require all denied` (or other equivalent directive for the `http` server
+in use), and a `403` error handler of `{$cgiurl}?do=view`.
+
+The plugin emits response headers intended to discourage non-private caches
+from retaining the retrieved content. (They are already supposed to avoid
+caching any response to a request with an `Authorization` header, but this
+plugin can be used with any ikiwiki-supported auth method, not all of which
+require that header.)
+
+A plugin like [[plugins/contrib/pagespec_alias]] can be very useful for
+defining a group of authorized users:
+
+ us: user(alice) or user(bob) or user(clotaldo)
+
+so that zone access can be a simple [[ikiwiki/PageSpec]]:
+
+ us() and ours/*
-What is ready /can be done:
+*Drawbacks:* The private zones no longer reap all the benefits of a static
+wiki generator, as a (fairly heavy) ikiwiki CGI wrapper must be started for
+each access. (On the other hand, all it needs to do after confirming authorization
+is basically `cat` the statically-generated page with appropriate response headers,
+keeping the code simple and easy to audit.)
-* We already can more or less do this for example with [[httpauth|/plugins/httpauth/]], *.htaccess* files and a proper *httpauth_pagespec*
-yet at the cost of maintaining two different user/pass logbase (native ikiwiki signin)
-* Furthermore we can [[lockedit|plugins/lockedit/]] some pagespecs, ie in the public zone.
+This can be adequate for a case where the static, public zone could receive a lot
+of traffic, with the private zone(s) accessed only by a known small group of people.
+
+### View control with a FastCGI Authorizer
+
+A plugin implementing a [FastCGI](http://www.fastcgi.com/)
+[Authorizer](http://www.fastcgi.com/drupal/node/6?q=node/22#S6.3) could provide
+the same benefits as [[plugins/contrib/signinview]] (any ikiwiki-supported auth
+method, simple zone definition with [[ikiwiki/PageSpec]]s) with less overhead
+per access. It would also be simpler than [[plugins/contrib/signinview]] by
+leaving it as the `http` server's responsibility to generate the proper headers
+and serve the content.
+
+Caching proxies are already supposed to avoid caching any response to a request
+that included an `Authorization` header. For some ikiwiki-supported auth methods,
+that header might not be needed in the request, and care may be needed to configure
+the server to emit other necessary response headers to discourage caching of
+content from a private zone.
+
+*Drawbacks:* Not yet implemented, someone would have to do it.
+It's not clear [[what code changes fastcgi|todo/fastcgi or modperl installation instructions]]
+would require in ikiwiki. An Authorizer seems like a good place to start because of its
+limited, simple functionality--but as it could make use of any ikiwiki-supported auth method,
+evaluate `PageSpec`s, and the like, it could still run a non-trivial amount of the code.
+
+## Obstacles
+
+A number of ikiwiki features aren't (yet) designed with zoning in mind,
+and it will take some effort both to identify them all, and to think out how they
+could be addressed. This section invites brainstorming of both kinds.
+This might eventually merit a separate page [[Zoned ikiwiki obstacles]]
+but I'll begin it here.
+
+Note that not all of these issues will be problems for all **zoned ikiwiki use cases**.
+
+### Leakage of page existence by `do=goto`
+
+An unauthorized client can use a `do=goto` request to find out whether a
+page exists (will be forbidden to view it) or not (will be forbidden to create it).
+
+In [[plugins/contrib/signinview]] this is handled by hooking
+`cgi` first and checking for `goto` and a non-public page. If the requested page
+(existing or not) matches the `public_pages` PageSpec, it is handed off for the `goto`
+plugin to handle normally. Otherwise, the `do` parameter is changed to `signingoto`
+so the `goto` plugin's `cgi` hook will _not_ handle it, and the `sessioncgi` hook
+takes care of it when the user's identity is available.
+
+### Backlinks
What is problematic is when you link a public page in a private page :
a backlink will be generated from the public page to the private page.
-As I noticed in [[per_page_ACLs]] in the end users through backlink
+As noted in [[per_page_ACLs]] in the end users through backlink
navigation will frequently hit HTTP/401 deterring browsing as well as for the admin at false-positive logwatching.
One can radically [[disable backlinks feature|todo/allow_disabling_backlinks]] but then no more neat backlink navigation that
is really good to have in both area.
-I think of just preventing this backlink leak in that case would be sufficient via i.e a *privatebacklinks* config and
-a below patch.
+Another way of just preventing this backlink leak in that case would be sufficient via i.e a *privatebacklinks* config and
+a patch like this one [[!toggle id="backlinkpatch" text="(show)"]].
+[[!toggleable id="backlinkpatch" text="""
Comments are welcome.
[[mathdesc]]
}
</pre>
+"""]]
+
+In use cases where the main concern about backlinks is only the bad user experience when links are
+shown that lead to access denial when clicked, a workable
+solution could be to make the backlinks `div` invisible in `local.css`.
+
+### recentchanges page
+
+An accessible `recentchanges` page can include links to changes to pages
+that should not be accessible. Even if the links cannot be followed, the
+existence of the pages and their edit history are leaked. If rcs integration
+is configured, those links on the `recentchanges` page can leak complete contents
+through the **rcs browser**.
+
+It can be helpful to generate separate `recentchanges` pages for different zones.
+The [[plugins/recentchanges]] plugin already allows this--a `recentchanges` page
+can be created anywhere, just by using the `recentchanges` directive
+with the right [[ikiwiki/PageSpec]] for the zone it should cover--except that it cannot yet
+be configured to generate a different `recentchanges` link destination into pages
+in different zones. So, it would be helpful if its configuration could allow multiple
+`recentchangespage` values, paired with `PageSpec`s for the pages on which they
+should be used.
+
+### rcs browser
+
+If the repository browser is accessible, potentially all content can be exposed.
+Even if links to the repository browser are not generated into public wiki pages,
+if a user can obtain or guess the repository browser URL and construct arbitrary
+requests, information can be revealed.
+
+Solutions could involve authnz features of the revision control systems themselves
+and their associated repository browsers; for example, `svn` supposedly has such
+features, and recent versions of `viewvc` supposedly honor them. But such features
+may not be available for every rcs, and where they are available, they'll have to
+be configured separately and differently from ikiwiki itself. They might not support
+the same auth methods (e.g. OpenID) being used by the wiki itself.
+
+Another approach would be for ikiwiki's own rcs plugin to generate a CGI wrapper
+that invokes the repository browser CGI (which itself would _not_ be made
+executable via `http` request). The `historyurl` and `diffurl` would then refer
+to this wrapper. (In fact, they would not have to be specified in the config file,
+as the plugin would know where it generated them. Instead, what would need to be
+specified would be the filesystem path for the rcs browser being wrapped). The
+wrapper could dissect the request parameters, identify the pages being accessed,
+and subject them to the same accessibility tests used for the wiki. The rcs browser
+itself needs to be configured to use the wrapper URL in all its generated links,
+
+This might not be very hard to do with `gitweb` as it is already implemented in Perl.
+The wrapper could probably import it and use its already-supplied routines to parse
+the request into the affected file names, and probably complete the whole request
+without a second `exec`. Other rcs backends might or might not be as easy.
+
+### Search
+
+If [[plugins/search]] is enabled, private content is indexed and
+searchable to the public.
+
+### Information leaks allowed by edit access
> Have you considered all the ways that anyone with edit access to the
> public wiki could expose information from the public wiki? For example,
-> you could inline all the private pages into a public page. --[[Joey]]
+> you could inline all the private pages into a public page. --[[Joey]]
+
+Many ikiwiki features could give information exposure opportunities to someone
+with edit access. The list here is surely incomplete, and would take a purposeful
+review of the code and plugins (including third-party plugins) to complete.
+
+* Directives that can inline information from other pages
+ * [[ikiwiki/directive/inline]] *the most obvious one*
+ * [[ikiwiki/directive/map]]
+ * [[ikiwiki/directive/brokenlinks]] ?
+ * [[ikiwiki/directive/orphans]] ?
+ * [[ikiwiki/directive/linkmap]] ?
+ * _others_?
+* Not to forget `contrib` plugins
+ * [[plugins/contrib/report]] ?
+ * _others_?
+
+Note that, _with_ the right controls on who can edit the pages and insert
+the directives, the fact that a public page can inline stuff from private
+pages can be very useful. Public pages can be created that are populated
+by selected content that's maintained on the private side. The [[ikiwiki/directive/if]]
+directive can be used in the private content to control what parts can be
+inlined into public pages. All of this is in ikiwiki today.
--- /dev/null
+Here is a patch for page.tmpl to add these landmarks.
+
+--[Patrick](https://www.google.com/accounts/o8/id?id=AItOawlnBLXDQbzD3OCcqZshcmExPNwlgD0tJ7A)
+
+> This can't be applied as a patch as-is because it's based on Tails'
+> modified `page.tmpl`, but I get the general idea. A reviewer will need
+> to check the ARIA meanings of those roles to confirm that they
+> are appropriate (I haven't done that yet). [[!tag patch]] --[[smcv]]
+
+[[!format diff """
+diff --git a/templates/page.tmpl b/templates/page.tmpl
+index 5efad1a..cb76590 100644
+--- a/templates/page.tmpl
++++ b/templates/page.tmpl
+@@ -30,7 +30,7 @@
+ </head>
+ <body>
+
+-<div class="banner">
++<div class="banner" role="banner">
+ <a class="tails" href="<TMPL_VAR HOMEPAGEURL>">
+ <span class="acronym">Tails</span><br/>
+ <span class="slogan">The Amnesic Incognito Live System</span>
+@@ -155,20 +155,20 @@
+ <TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
+
+ <TMPL_IF SIDEBAR>
+-<TMPL_IF HTML5><aside class="sidebar"><TMPL_ELSE><div class="sidebar"></TMPL_IF>
++<TMPL_IF HTML5><aside class="sidebar" role="navigation"><TMPL_ELSE><div class="sidebar" role="navigation"></TMPL_IF>
+ <TMPL_VAR SIDEBAR>
+ <TMPL_IF HTML5></aside><TMPL_ELSE></div></TMPL_IF>
+ </TMPL_IF>
+
+ <div id="pagebody">
+
+-<TMPL_IF HTML5><section id="content"><TMPL_ELSE><div id="content"></TMPL_IF>
++<TMPL_IF HTML5><section id="content" role="main"><TMPL_ELSE><div id="content" role="main"></TMPL_IF>
+ <TMPL_VAR CONTENT>
+ <TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
+
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF COMMENTS>
+-<TMPL_IF HTML5><section id="comments"><TMPL_ELSE><div id="comments"></TMPL_IF>
++<TMPL_IF HTML5><section id="comments" role="complementary"><TMPL_ELSE><div id="comments" role="complementary"></TMPL_IF>
+ <TMPL_VAR COMMENTS>
+ <TMPL_IF ADDCOMMENTURL>
+ <div class="addcomment">
+@@ -183,7 +183,7 @@
+
+ </div>
+
+-<TMPL_IF HTML5><footer id="footer" class="pagefooter"><TMPL_ELSE><div id="footer" class="pagefooter"></TMPL_IF>
++<TMPL_IF HTML5><footer id="footer" class="pagefooter" role="contentinfo"><TMPL_ELSE><div id="footer" class="pagefooter" role="contentinfo"></TMPL_IF>
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF HTML5><nav id="pageinfo"><TMPL_ELSE><div id="pageinfo"></TMPL_IF>
+
+"""]]
+
+----
+
+Here is a review. Please "sign" any responses so we can keep track of
+who is talking to who :-)
+
+General points:
+
+The `role` attribute is not allowed by the XHTML 1.0 Strict DTD, so we
+should only emit it in HTML5 mode (and we should probably
+[[todo/generate_HTML5_by_default]]).
+
+Specific roles:
+
+[[!format diff """
+-<div class="banner">
++<div class="banner" role="banner">
+"""]]
+
+There is no such class in IkiWiki's page.tmpl, so this part can't be applied.
+After this is applied to the main IkiWiki, you'll need to talk to the
+maintainers of the Tails wiki about changing that in their fork of the template.
+
+[[!format diff """
+-<TMPL_IF HTML5><aside class="sidebar"><TMPL_ELSE><div class="sidebar"></TMPL_IF>
++<TMPL_IF HTML5><aside class="sidebar" role="navigation"><TMPL_ELSE><div class="sidebar" role="navigation"></TMPL_IF>
+"""]]
+
+I don't think the sidebar is *necessarily* navigation, although it's a
+reasonable guess. I would hope that the fact that it's an `<aside>`
+in HTML5 mode is enough to give accessibility tools a clue already?
+Would declaring this to be a `note` be sufficient?
+
+I've applied your suggested roles for #main, #comments and #footer,
+but only in HTML5 mode for the reason given above. I have not applied
+a role to the sidebar just yet.
+
+--[[smcv]]
to check for common spam signatures. --[[Joey]]
[[done]]
+
+----
+
+I am sorry to say that neither those solutions are sufficient for a site that allows anonymous comments. blogspam lets thousands of commits through here, as i described in [[todo/commandline_comment_moderation]]. Now, maybe I didn't configure blogspam correctly, I am not sure. I just enabled the plugin and set `blogspam_pagespec: postcomment(blog/*) or */discussion`. I have also imported the blocklist from this wiki's ikiwiki.setup, generated from [[spam_fighting]]. I have had to add around 10 IPs to that list already.
+
+It seems to me a list of blocked URLs or blocked IPs as mentionned above would be an interesting solution. blogspam is great, but the API doesn't seem to support reporting IPs or bad content back, which seems to be a major problem in working around false negatives. I'm tempted to just remove the `done` tag above, because this is clearly not fixed for me here... --[[anarcat]]
> something else, it has no reason to care what the pagetype is. (Same for
> linkify.) --[[Joey]]
->> My [[org-mode|todo/org_mode]] external plugin (which will never
+>> My [[org-mode|plugins/contrib/org_mode]] external plugin (which will never
>> really make sense to include with ikiwiki I think) does this. I
>> think that most plugins defining alternate wiki syntaxes would as
>> well. --[[chrismgray]]
Here is a patch that makes [[ikiwiki-calendar]] almost useless.
+> [[merged|done]], thanks! --[[smcv]]
+
It adds some options, the main one being `calendar_autocreate`, which is
similar to the `tag_autocreate` option of the [[tag|plugins/tag]]: it create
archive pages when needed.
>
> I think that should be `ikiwiki --setup ~/ikiwiki.setup --refresh`
>
+> > [[Corrected|https://github.com/paternal/ikiwiki/commit/213dad76d47bab9db8e44d6e20c8371960375e77]]
+>
> The indentation of some of the new code in `IkiWiki/Plugin/calendar.pm`
> is weird. Please use one hard tab (U+0009) per indent step: you seem
> to have used a mixture of one hard tab per indent or two spaces
> per indent, which looks bizarre for anyone whose tab size is not
> 2 spaces.
>
+> > [[Corrected|https://github.com/paternal/ikiwiki/commit/1d97160dae775c31e166d9886472dacdd773d571]]
+>
> + return unless $config{calendar_autocreate};
>
> This is checked in `gencalendaryear` but not in `gencalendarmonth`.
> Shouldn't `gencalendarmonth` do it too? Alternatively, do the check
> in `scan`, which calls `gencalendarmonth` directly.
>
+> > Once again, [[you are right|https://github.com/paternal/ikiwiki/commit/473bcbe7a42a4168cab82ed12185817248de045f]]
+>
> + my $year = $date[5] + 1900;
>
> You calculate this, but you don't seem to do anything with it?
>
+> > [[Corrected|https://github.com/paternal/ikiwiki/commit/d0b34951240317642543351ec62f98d3d8df8c0f]]
+>
> + if (not exists $changed{$params{year}}) {
> + $changed{$params{year}} = ();
> + }
> in order to put the pair `$params{month} => 1` in it (the term to look
> up if you're curious is "autovivification").
>
+> > [[Corrected|https://github.com/paternal/ikiwiki/commit/d0b34951240317642543351ec62f98d3d8df8c0f]]
+>
> --[[smcv]]
+>
+> > Thank you for your review.
+> > --[[Louis|spalax]]
--- /dev/null
+So I have enabled the [[moderatedcomments]] plugin on my wiki. and good thing that! around 1000 spammy comments showed up in the last 3 months! Awful!
+
+It's pretty hard to figure out the ham and the spam in there. One thing I was hoping was to use the power of the commandline to filter through all that stuff. Now, it seems there's only a "ikiwiki-comment" tool now, and nothing to examine the moderated comments.
+
+It seems to me it would be great to have some tool to filter through that...
+
+
+So it turns out it was over 3000 comments. The vast majority of those (every one but 42 comments) were from the IP `46.161.41.34` which i recommend null-routing everywhere. I used the following shell magic to figure that out:
+
+<pre>
+#!/bin/sh
+
+set -e
+
+cd .ikiwiki/transient || {
+ echo could not find comments, make sure you are in a ikiwiki source directory.
+ exit 1
+ }
+# count the number of comments
+echo found $(find . -name '*._comment_pending' | wc -l) pending comments
+# number of comments per IP
+echo IP distribution:
+find . -name '*._comment_pending' | xargs grep -h ip= | sort | uniq -c | sort -n
+# generate a banlist for insertion in `banusers`, assuming all the
+# pending comments are spam
+echo banlist would look like:
+find . -name '*._comment_pending' | xargs grep -h ip= | sort -u| sed 's/ ip="//;s/"//;s/^/- ip(/;s/$/)/'
+
+echo to remove comments from a specific IP, use one of those:
+find . -name '*._comment_pending' | xargs grep -h ip= | sort -u \
+ | sed 's/ ip="//;s/"//;' \
+ | while read ip; do
+ echo "find . -name '*._comment_pending' | xargs grep -l 'ip=\"$ip\"'| xargs rm"
+ done
+echo to flush all pending comments, use:
+echo "find . -name '*._comment_pending' -delete"
+</pre>
+
+The remaining 42 comments I reviewed throught the web interface, then flushed using the above command. My final addition to the banlist is:
+
+<pre>
+- ip(159.224.160.225)
+- ip(176.10.104.227)
+- ip(176.10.104.234)
+- ip(188.143.233.211)
+- ip(193.201.227.41)
+- ip(195.154.181.152)
+- ip(213.238.175.29)
+- ip(31.184.238.11)
+- ip(37.57.231.112)
+- ip(37.57.231.204)
+- ip(46.161.41.34)
+- ip(46.161.41.199)
+- ip(95.130.13.111)
+- ip(95.181.178.142)
+</pre>
+
+ --[[anarcat]]
+
+Update: i made a script, above. And the banlist is much larger now so the above list is pretty much out of date now... --[[anarcat]]
>>>
>>> As you pointed out, CSS inclusion is more painful than it should be, and
>>> your proposal seems to answer that. Go ahead! --[[Louis|spalax]]
+
+> Concatenating the theme css as is done now results in files that are
+> unecessarily large with a doubling of a lot of selectors etc. It only makes
+> sense for changes that should be local.css anyway. Catted css is inefficient
+> both while downloading and while rendering. I've disabled the catting in the
+> makefile to avoid this on my personal site. In my view it would be better for
+> theme developers to work from the basewiki style, if lazy just add their
+> changes to the end of it, or if speed is of secondary importance @import it.
+>
+> The advanced melding of stylesheets discussed sounds quite complicated with
+> likely useability problems when the site don't quite look as expected. Hunting
+> down the problematic css will be difficult.
+>
+> Are there parsers that remove double defined selectors according to cascading
+> rules as is done in browser? This would at least produce cleaner css but the
+> useability problems would remain.
+>
+> When using complete themes and hunting that last bit of speed a config option
+> to turn off local.css would probably be a good idea? Plugin css is difficult.
+> A choice between a plugin complete theme or a local.css (or @import from it)
+> would be a simple solution that lets you choose how you prioritize speed
+> vs convenience. --[[kjs]]
--- /dev/null
+We're accumulating a significant number of bugs related to cross-linking
+between the content and the CGI not being as relative as we would like.
+This is an attempt to design a solution for them all in a unified way,
+rather than solving one bug at the cost of exacerbating another.
+--[[smcv]]
+
+# Terminology
+
+* Absolute: starts with a scheme, like
+ `http://example.com/ikiwiki.cgi`, `https://www.example.org/`
+
+* Protocol-relative: starts with `//` like `//example.com/ikiwiki.cgi`
+
+* Host-relative: starts with `/` like `/ikiwiki.cgi`
+
+* Relative: starts with neither `/` nor a scheme, like `../ikiwiki.cgi`
+
+# What we need
+
+* Static content must be able to link to other static content
+
+* Static content must be able to link to the CGI
+
+* CGI-generated content must be able to link to arbitrary
+ static content (it is sufficient for it to be able to link
+ to the "root" of the `destdir`)
+
+* CGI-generated content must be able to link to the CGI
+
+# Constraints
+
+* URIs in RSS feeds must be absolute, because feed readers do not have
+ any consistent semantics for the base of relative links
+
+* If we have a `<base href>` then HTML 4.01 says it must be
+ absolute, although HTML 5 does relax this by defining semantics
+ for a relative `<base href>` - it is interpreted relative to the
+ "fallback base URL" which is the URL of the page being viewed
+ ([[bugs/trouble_with_base_in_search]],
+ [[bugs/preview_base_url_should_be_absolute]])
+
+* It is currently possible for the static content and the CGI
+ to be on different domains, e.g. `www.example.com`
+ vs. `cgi.example.com`; this should be preserved
+
+* It is currently possible to serve static content "mostly over
+ HTTP" (i.e. advertise a http URI to readers, and use a http
+ URI in RSS feeds etc.) but use HTTPS for the CGI
+
+* If the static content is served over HTTPS, it must refer
+ to other static content and the CGI via HTTPS (to avoid
+ mixed content, which is a vulnerability); this may be
+ either absolute, protocol-relative, host-relative or relative
+
+* If the CGI is served over HTTPS, it must refer to static
+ content and the CGI via HTTPS; again, this may be either
+ either absolute, protocol-relative, host-relative or relative
+ ([[todo/Protocol_relative_urls_for_stylesheet_linking]])
+
+* Because reverse proxies and `w3mmode` exist, it must be
+ possible to configure ikiwiki to not believe the `HTTPS`, etc.,
+ CGI variables, and force a particular scheme or host
+ ([[bugs/W3MMode_still_uses_http:__47____47__localhost__63__]],
+ [[forum/Using_reverse_proxy__59___base_URL_is_http_instead_of_https]],
+ [[forum/Dot_CGI_pointing_to_localhost._What_happened__63__]])
+
+* For relative links in page-previews to work correctly without
+ having to have global state or thread state through every use of
+ `htmllink` etc., `cgitemplate` needs to make links in the page body
+ work as if we were on the page being previewed.
+
+# "Would be nice"
+
+* In general, the more relative the better
+
+* [[schmonz]] wants to direct all CGI pageviews to https
+ even if the visitor comes from http (but this can be done
+ at the webserver level by making http://example.com/ikiwiki.cgi
+ a redirect to https://example.com/ikiwiki.cgi, so is not
+ necessarily mandatory)
+
+* [[smcv]] has some sites that have non-CA-cartel-approved
+ certificates, with a limited number of editors who can be taught
+ to add SSL policy exceptions and log in via https;
+ anonymous/read-only actions like `do=goto` should
+ not go via HTTPS, since random readers would get scary SSL
+ warnings
+ ([[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]],
+ [[forum/CGI_script_and_HTTPS]])
+
+* It would be nice if the CGI did not need to use a `<base>` so that
+ we could use host-relative URI references (`/sandbox/`) or scheme-relative
+ URI references (`//static.example.com/sandbox/`)
+ (see [[bugs/trouble_with_base_in_search]])
+
+As a consequence of the "no mixed content" constraint, I think we can
+make some assumptions:
+
+* if the `cgiurl` is http but the CGI discovers at runtime that it has
+ been reached via https, we can assume that the https equivalent,
+ or a host- or protocol-relative URI reference to itself, would work;
+
+* if the `url` is http but the CGI discovers at runtime that it has been
+ reached via https, we can assume that the https equivalent of the `url`
+ would work
+
+In other words, best-practice would be to list your `url` and `cgiurl`
+in the setup file as http if you intend that they will most commonly
+be accessed via http (e.g. the "my cert is not CA-cartel approved"
+use-case), or as https if you intend to force accesses into
+being via https (the "my wiki is secret" use-case).
+
+# Regression test
+
+I've added a regression test in `t/relativity.t`. We might want to
+consider dropping some of it or skipping it unless a special environment
+variable is set once this is all working, since it's a bit slow.
+--[[smcv]]
+
+# Remaining bugs
+
+## Arguable
+
+* Configure the url and cgiurl to both be https, then access the
+ CGI via a non-https address. The stylesheet is loaded from the http
+ version of the static site, but maybe it should be forced to https?
+
+* Configure url = "http://static.example.com/",
+ cgiurl = "http://cgi.example.com/ikiwiki.cgi" and access the
+ CGI via staging.example.net. Self-referential links to the
+ CGI point to cgi.example.com, but maybe they should point to
+ staging.example.net?
+
+* *(possibly incomplete, look for TODO and ??? in relativity.t)*
>> what make `pagespec_match_list` more efficient than repeated
>> `pagespec_match_list`." to give an idea of why it is there in the first
>> place. --[[chrysn]]
+
+>>> [[done]] in 3.20140916 --s
--- /dev/null
+With many users no longer having an openid account, and Persona seeming to
+be dying on the vine, and no other replacements looking very likely (except
+for Oauth type stuff perhaps), it would be good to have a new easy way to
+log into ikiwiki, that doesn't need pre-registration.
+
+Importantly, I want something that is not going to go
+the way of openid in the future. I think that email is here to stay; at
+least anyone who wants an email address is going to be able to get one in
+the forseeable future. (Google and large providers are making it harder to
+run small email systems, but it's still very possible, and there are at
+worst many large providers.)
+
+I've read about email being used for login auth, and seen it once or twice.
+While I can't remember any links right now, the basic idea is:
+
+1. user enters email address into form
+2. response page says "a login link has been emailed to you"
+3. user opens email and clicks login link
+4. user is logged in until the cookie expires or is cleared
+
+A few points to make this more secure:
+
+* Only 1 login link should be active at a time; old ones won't work to log in.
+* A login link is only valid for a single login. Once it's used, it cannot
+ be used to log in again.
+* A login link is only valid for a certain period of time. 24 hours seems
+ like more than enough, and 12 hours would probably be plenty too.
+ This timeout means a user doesn't need to worry about their email
+ archives being used to log in.
+
+Still, this could be attacked:
+
+* If an attacker can access a user's inbox, they can generate a new login
+ link, and log in as them. They are probably busy draining their bank
+ account by this method and not logging into some wiki though.
+* If TLS is not used for the email transport, a MITM can snoop login links
+ and use them. Again probably more lucrative ways to exploit such a MITM.
+* If https is not used for the login link, a MITM can intercept and proxy
+ web traffic and either steal a copy of the cookie, or use the login
+ link themselves without letting the user log in. This attack seems no
+ worse than using password authentication w/o https, and the solution is
+ of course https.
+* If an attacker wants to DOS a wiki, they can try to get its domain, IP,
+ whatever blacklisted as a spam source.
+
+These attacks don't seem worth not doing it; many of the same attacks can
+be performed against openid, or passwordauth. Eg, reset password and
+intercept email.
+
+Implementation notes:
+
+* Use the email address as the username.
+* Sanitize the email for display in recentchanges etc.
+* The login link should be as short an url as possible, while containing
+ sufficient entropy. Some email clients will let the user click on it,
+ but some users will need to cut and paste.
+* The `adminemail` config setting has a bit of overlap with an `adminuser`
+ set to an email address. Probably worth keeping them separae though;
+ the `adminemail` is an email address to display, and we may not want to
+ let anyone who can read the adminemail's mailbox to log into the wiki.
+* Will want to make passwordauth reject registrations that contain `@`.
+ Otherwise, someone could use passwordauth to register as a username that
+ looks like an email address, which would be confusing to possibly a
+ security hole. Probably best to keep passwordauth and emailauth accounts
+ entirely distinct. Update: passwordauth never allowed `@` in usernames.
+* Currently, subscription to comments w/o registering is handled by
+ passwordauth, by creating a passwordless account (making up a username,
+ not using the email address as the username thankfully). That account can be
+ upgraded to a passworded account if the user follows a link in comment
+ mails to login. So there is considerable overlap between that and
+ emailauth.
+* Adapting the passwordauth reset code is probably the simplest way to
+ implement emailauth. That uses a CGI::Session id as the entropy.
+
+----
+
+So this all seems doable. What I'm unsure about is this: Is emailauth going
+to be sufficiently easier than passwordauth that it will let users
+contribute to wikis who otherwise wouldn't?
+
+Using passwordauth, the user can register by just picking a password, and
+username, and entering email. That's 2 more things that need to be entered,
+but then there is no need to wait for an email link to arrive. Which can
+take a while, or be an unreliable, opaque process for users.
+
+OTOH, maybe some users don't want to have to make up a username and
+password, or pchycologically don't want to register. emailauth would then
+let them contiribute.
+
+I also have a motivation for ikiwiki-hosting/branchable. That needs the
+user to be able to log into the site, create their own wiki, and then log
+into their own wiki. Currently, openid is the only way to do that;
+emailauth would be another way.
+
+Another motivation from ikiwiki-hosting/branchable is that with google
+openid going away, many sites can have only google openids as adminusers, and
+that has to be manually dealt with. But if emailauth is added, those
+adminusers can be converted, perhaps automatically, to use the email
+addresses on record.
+
+Thoughts anyone? --[[Joey]]
+
+> I had looked at something like this before, through [[todo/indyauth_support]] - which basically turned out to outsource their own auth to http://intridea.github.io/omniauth/ and http://indiewebcamp.com/RelMeAuth...
+>
+> But it seems to me that your proposal is basic "email opt-in".. the one impact this has on (drupal) sites i know is that spammers use even those forms to send random emails to users. it's weird, but it seems that some bots simply try to shove victim's emails into forms with the spam data as they can and hope for the best... it seems this could be vulnerable as well... - [[anarcat]]
+
+>> Implemented now. [[done]]
+>>
+>> Only thing that we might want to revisit sometime is that the email address
+>> is used in git commits. While it won't be displayed on any static wiki
+>> pages (AFAICS), spammers could find it in the git commit log.
+>>
+>> Of course, spammers can troll git repos for emails anyway, so maybe
+>> this is fine. --[[Joey]]
+
+>>> I'm not so sure this is OK: user expectations for "a random wiki/blog"
+>>> are not the same as for direct git contributions. Common practice for
+>>> websites is for email addresses to be only available to the site owner
+>>> and/or outsourced services - if ikiwiki doesn't work like this,
+>>> I think wiki contributors/blog commenters are going to blame ikiwiki,
+>>> not themselves.
+>>>
+>>> One way to avoid this would be to
+>>> [[separate authentication from authorization]], so our account names
+>>> would be smcv and joey even on a purely emailauth wiki, with the
+>>> fact that we authenticate via email being an implementation detail.
+>>>
+>>> Another way to do it would be to hash the email address,
+>>> so the commit appears to come from
+>>> `smcv <smcv@02f3eecb59311fc89970578832b63d57a071579e>` instead of
+>>> from `smcv <smcv@debian.org>` - if the hash is of `mailto:whatever`
+>>> (like my example one) then it's compatible with
+>>> [FOAF](http://xmlns.com/foaf/spec/#term_mbox_sha1sum).
+>>> --[[smcv]]a
+
+>>> Email addresses are now cloaked in commits, using foaf:mbox_sha1sum. --[[Joey]]
## Future improvements
+### Embedded audio/video player in browsers
+
+* For a given enclosure, depending on autodetected MIME:
+ * `audio/*` -> `<audio>`
+ * `video/*` -> `<video>`
+* For a given template:
+ * `page.tmpl` -> eagerly fetch media
+ * `inlinepage.tmpl` -> fetch just enough to display durations
+* Only for HTML5 sites, or also okay for XHTML?
+* Does this work well enough in enough browsers, or do we need a
+ JavaScript player to fill in some gaps?
+
### iTunes fancy podcasting
* [iTunes-specific tags](https://www.apple.com/itunes/podcasts/specs.html)
appear to be RSS-only
- * If they work in Atom, teach `inline` to optionally iTunesify RSS/Atom.
- * Else, add `itunes` as a third kind of feed (RSS plus more stuff).
+ * Can we always include them in RSS feeds, or would that break
+ some feed readers?
+ * Is it even valid to include them in Atom feeds? If so, do
+ Atom podcasts look any better in podcatchers?
+ * Avoid adding a third kind of feed (`itunesrss`), or options
+ to the existing `rss` and `atom` feeds, unless we have to.
* Notable tags for feeds:
* `itunes:subtitle`
* `itunes:author`
* [ffprobe](http://ffmpeg.org/ffprobe.html) is reasonably fast
* [mediainfo](http://mediainfo.sourceforge.net/) is way slower
* Cache computed durations as pagestate
+* [Podcast Feed Best
+ Practice](https://github.com/gpodder/podcast-feed-best-practice/blob/master/podcast-feed-best-practice.md)
+ from the gPodder folks
### Fancy podcast aggregating
--- /dev/null
+The `html5` option was added in 2010 and marked as "not experimental" in 2011
+but is not the default.
+
+According to <http://caniuse.com/#feat=html5semantic>, current versions of
+all recent versions of all major browsers - even IE (9+) - support the HTML5
+semantic elements (`<section>` etc.), except for `<main>` which IkiWiki
+doesn't use anyway. However, IE 8 is not a current version, but has ~ 4%
+market share and doesn't support `<section>` and friends; so there's still
+a compatibility concern there.
+
+In particular, non-HTML5 mode uses `<!DOCTYPE html PUBLIC
+"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">`
+which doesn't allow newer markup like the `role` attribute, so we can't close
+[[todo/add_aria_landmarks_to_make_ikiwiki_websites_more_accessible]] while
+remaining XHTML 1.0 Strict. The recommended pseudo-doctype for HTML5, and for
+HTML with ARIA markup, is `<!DOCTYPE html>`.
+
+(I do think we should continue to use `<xml-compatible-tags />` and output
+well-formed XML so people who want to do XSLT tricks with IkiWiki's output
+can do so, though.)
+
+In practice, real browsers have never actually implemented a strict XHTML mode:
+they've always parsed `text/html` as "tag soup", because they need a tag-soup
+parser anyway, and nobody wants to maintain two parsers.
+
+Kai also wants a HTML5 doctype for [[bugs/more mobile friendly default themes]].
+
+Options include:
+
+* set html5 to 1 by default but retain the dual-mode templates,
+ breaking IE 8 by default
+
+* remove the option and always behave as if it had been 1, simplifying
+ the templates and breaking IE 8 unconditionally
+
+* either of the above and include
+ [html5shiv](https://code.google.com/p/html5shiv/) to de-break IE 8
+
+* change the doctype to `<!DOCTYPE html>`
+ unconditionally, stop trying to limit ourselves to XHTML 1.0 Strict
+ (use HTML5 features that degrade gracefully, like
+ [[ARIA roles|todo/add aria landmarks to make ikiwiki websites more accessible]]),
+ but avoid using the new elements like `<section>` that require specific
+ browser support unless `html5` is set to 1. That would get rid of the
+ backwards-compatibility concerns while keeping the ability to use
+ post-2000 markup; we can use `html5` to mean "be more enthusiastic about
+ HTML5 features even if they might fail on older browsers".
+
+Using the HTML5 doctype does mean we lose the ability to validate the output
+against a DTD (as `wdg-html-validator` does), but DTDs have very little to
+do with practical browser compatibility in any case.
+
+[[!template id=gitbranch branch=smcv/ready/html5
+author="[[Simon McVittie|smcv]]"
+browse=http://git.pseudorandom.co.uk/smcv/ikiwiki.git/shortlog/refs/heads/ready/html5]]
+[[!tag patch users/smcv/ready]]
+
+At the moment my preferred option is the last, for which see my `ready/html5`
+branch. I'll apply this at some point if there are no objections.
+
+--[[smcv]]
+
+> [[merged|done]] --[[smcv]]
Alternative implementation
==========================
-An alternative implementation, which remains to be detailed but is mentionned in [[forum/ikiwiki_and_big_files]], is to use the [[underlay]] feature combined with the `hardlink` option to deploy the git-annex'd files. Then git-annex is separate from the base ikiwiki git repo. --[[anarcat]]
+An alternative implementation, which remains to be detailed but is mentionned in [[forum/ikiwiki_and_big_files]], is to use the [[underlay]] feature combined with the `hardlink` option to deploy the git-annex'd files. Then git-annex is separate from the base ikiwiki git repo. See also [[tips/Ikiwiki_with_git-annex__44___the_album_and_the_underlay_plugins]] for an example.
+
+Also note that ikiwiki-hosting has a [patch waiting](https://ikiwiki-hosting.branchable.com/todo/git-annex_support) to allow pushes to work with git-annex. This could potentially be expanded to sync content to the final checkout properly, avoiding some of the problems above (esp. wrt to non-annex bare repos).
+
+Combined with the [[underlay]] feature, this could work very nicely indeed... --[[anarcat]]
+
+Here's an attempt:
+
+<pre>
+cd /home/user
+git clone source.git source.annex
+cd source.annex
+git annex direct
+cd ../source.git
+git annex group . transfer
+git remote add annex ../source.annex
+git annex sync annex
+</pre>
+
+Make sure the `hardlink` setting is enabled, and add the annex as an underlay, in `ikiwiki.setup`:
+
+<pre>
+hardlink: 1
+add_underlays:
+- /home/w-anarcat/source.annex
+</pre>
+
+Then moving files to the underlay is as simple as running this command in the bare repo:
+
+<pre>
+#!/bin/sh
+
+echo "moving big files to annex repository..."
+git annex move --to annex
+</pre>
+
+I have added this as a hook in `$HOME/source.git/hooks/post-receive` (don't forget to `chmod +x`).
+
+The problem with the above is that the underlay wouldn't work: for some reason it wouldn't copy those files in place properly. Maybe it's freaking out because it's a full copy of the repo... My solution was to make the source repository itself a direct repo, and then add it as a remote to the bare repo. --[[anarcat]]
+
+Back from the top
+=================
+
+Obviously, the final approach of making the `source` repository direct mode will fail because ikiwiki will try to commit files there from the web interface which will fail (at best) and (at worst) add big files into git-annex (or vice-versa, not sure what's worse actually).
+
+Also, I don't know how others here made the underlay work, but it didn't work for me. I think it's because in the "source" repository, there are (dead) symlinks for the annexed files. This overrides the underlay, because of [[security]] - although I am unclear as to why this is discarded so early. So in order to make the original idea above work properly (ie. having a separate git-annex repo in direct mode) work, we must coerce ikiwiki into tolerating symlinks in the srcdir a little more:
+
+<pre>
+diff --git a/IkiWiki.pm b/IkiWiki.pm
+index 1043ef4..949273c 100644
+--- a/IkiWiki.pm
++++ b/IkiWiki.pm
+@@ -916,11 +916,10 @@ sub srcfile_stat {
+ my $file=shift;
+ my $nothrow=shift;
+
+- return "$config{srcdir}/$file", stat(_) if -e "$config{srcdir}/$file";
+- foreach my $dir (@{$config{underlaydirs}}, $config{underlaydir}) {
+- return "$dir/$file", stat(_) if -e "$dir/$file";
++ foreach my $dir ($config{srcdir}, @{$config{underlaydirs}}, $config{underlaydir}) {
++ return "$dir/$file", stat(_) if (-e "$dir/$file" && ! -l "$dir/$file");
+ }
+- error("internal error: $file cannot be found in $config{srcdir} or underlay") unless $nothrow;
++ error("internal error: $file cannot be found in $config{srcdir} or underlays @{$config{underlaydirs}} $config{underlaydir}") unless $nothrow;
+ return;
+ }
+
+diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
+index 9d6f636..e0b4cf8 100644
+--- a/IkiWiki/Render.pm
++++ b/IkiWiki/Render.pm
+@@ -337,7 +337,7 @@ sub find_src_files (;$$$) {
+
+ if ($underlay) {
+ # avoid underlaydir override attacks; see security.mdwn
+- if (! -l "$abssrcdir/$f" && ! -e _) {
++ if (1 || ! -l "$abssrcdir/$f" && ! -e _) {
+ if (! $pages{$page}) {
+ push @files, $f;
+ push @IkiWiki::underlayfiles, $f;
+</pre>
+
+<del>Now obviously this patch is incomplete: I am not sure we actually avoid the attack, ie. i am not sure the check in `srcdir()` is sufficient to remove completely the check in `find_src_files()`.</del>
+
+After reviewing the code further, it seems that `find_src_files` in three places in ikiwiki:
+
+<pre>
+../IkiWiki/Render.pm:421: find_src_files(1, \@files, \%pages);
+../IkiWiki/Render.pm:846: ($files, $pages)=find_src_files();
+../po/po2wiki:18:my ($files, $pages)=IkiWiki::find_src_files();
+</pre>
+
+The first occurence is in `IkiWiki::Render::process_changed_files`, where it is used mostly for populating `@IkiWiki::underlayfiles`, the only side effect of
+`find_src_files`. The second occurence is in `IkiWiki::Render::refresh`. There things are a little more complicated (to say the least) and a lot of stuff happens. To put it in broad terms, first it does a `IkiWiki::Render::scan` and then a `IkiWiki::Render::render`. The last two call `srcfile()` appropriately (where i put an extra symlink check), except for `will_render()` in `scan`, which I can't figure out right now and that seems to have a lot of global side effects. It still looks fairly safe at first glance. The `rcs_get_current_rev`, `refresh`, `scan` and `rendered` hooks are also called in there, but I assume those to be safe, since they are called with sanitized values already.
+
+The patch does work: the files get picked up from the underlay and properly hardlinked into the target `public_html` directory! So with the above patch, then the following hook in `source.git/hooks/post-receive`:
+
+<pre>
+#!/bin/sh
+
+OLD_GIT_DIR="$GIT_DIR"
+unset GIT_DIR
+echo "moving big files to annex repository..."
+git annex copy --to annex
+git annex sync annex
+</pre>
+
+(I am not sure anymore why GIT_DIR is necessary, but I remember it destroyed all files in my repo because git-annex synced against the `setup` branch in the parent directory. fun times.)
+
+Then the `annex` repo is just a direct clone of the source.git:
+
+<pre>
+cd /home/user
+git clone --shared source.git annex
+cd annex
+git annex direct
+cd ../source.git
+git remote add annex ../annex
+</pre>
+
+And we need the following config:
+
+<pre>
+hardlink: 1
+add_underlays:
+- /home/w-anarcat/annex
+add_plugins:
+- underlay
+</pre>
+
+... and the `ikiwiki-hosting` patch mentionned earlier to allow git-annex-shell to run at all. Also, the `--shared` option will [make git-annex use hardlinks itself between the two repos](https://git-annex.branchable.com/todo/wishlist:_use_hardlinks_for_local_clones/), so the files will be available for download as well. --[[anarcat]]
+
+> <del>...aaaand this doesn't work anymore. :( i could have sworn this was working minutes ago, but for some reason the annexed files get skipped again now. :(</del> Sorry for the noise, the annex repo wasn't in direct mode - the above works! --[[anarcat]]
> Ah, but then git-log would still complain "bad revision 'HEAD'"
> --[[Joey]]
+ jrayhawk@piny:/srv/git/jrayhawk.git$ time perl -e 'for( $i = 1; $i < 10000; $i++) { system("git", "show-ref", "--quiet", "--verify", "--", "refs/heads/master"); }'
+
+ real 0m10.988s
+ user 0m0.120s
+ sys 0m1.210s
+
+> FWIW, "an extra millisecond per edit" vs "full git coverage" is no
+> contest for me; I use that patch on seven different systems, including
+> freedesktop.org, because I've spent more time explaining to users either
+> why Ikiwiki won't work on their empty repositories or why their
+> repositories need useless initial commits (a la Branchable) that make
+> pushing not work and why denyNonFastForwards=0 and git push -f are
+> necessary than all the milliseconds that could've been saved in the
+> world.
+>
+> But, since we're having fun rearranging deck chairs on the RMS Perl
+> (toot toot)...
+>
+> There's some discrepency here I wasn't expecting:
+
+ jrayhawk@piny:/srv/git/jrayhawk.git$ time dash -c 'i=0; while [ $i -lt 10000 ]; do i=$((i+1)); git show-ref --quiet --verify -- refs/heads/master; done'
+
+ real 0m9.986s
+ user 0m0.170s
+ sys 0m0.940s
+
+> While looking around in the straces, I notice Perl, unlike {b,d}ash
+> appears to do PATH lookup on every invocation of git, adding up to
+> around 110 microseconds apiece on a post-2.6.38 16-thread QPI system:
+
+ 29699 0.000112 execve("/home/jrayhawk/bin/git", ["git", "show-ref", "--quiet", "--verify", "--", "refs/heads/master"], [/* 17 vars */]) = -1 ENOENT (No such file or directory)
+ 29699 0.000116 execve("/usr/local/bin/git", ["git", "show-ref", "--quiet", "--verify", "--", "refs/heads/master"], [/* 17 vars */]) = -1 ENOENT (No such file or directory)
+ 29699 0.000084 execve("/usr/bin/git", ["git", "show-ref", "--quiet", "--verify", "--", "refs/heads/master"], [/* 17 vars */]) = 0
+
+> You can probably save a reasonable number of context switches and
+> RCU-heavy (or, previously, lock-heavy) dentry lookups by doing a Perl
+> equivalent of `which git` and using the result. It might even add up to
+> a whole millisecond in some circumstances!
+>
+> No idea where the rest of that time is going. Probably cache misses
+> on the giant Perl runtime or something.
+>
+> ...
+>
+> Now I feel dirty for having spent more time talking about optimization
+> than that optimization is likely to save. This must be what being an
+> engineer feels like.
+> --jrayhawk
+
<pre>
@@ -474,7 +478,10 @@ sub rcs_update () {
# Update working directory.
Also, is there any point in breaking the pull up into a
fetch followed by a merge? --[[Joey]]
+> The same benchmarking applies, at least.
+>
+> Re: fetch/merge: We can't test for the nonexistence of the origin branch
+> without fetching it, and we can't merge it if it is, indeed,
+> nonexistant.
+>
+> Unless you're implying that it would be better to just spam stderr with
+> unnecessary scary messages and/or ignore/suppress them and lose the
+> ability to respond appropriately to every other error condition. As
+> maintainer, you deal with a disproportionate amount of the resulting
+> support fallout, so I'm perfectly satisfied letting you make that call.
+> --jrayhawk
+
<pre>
@@ -559,7 +566,7 @@ sub rcs_commit_helper (@) {
# So we should ignore its exit status (hence run_or_non).
</pre>
This seems fine to apply. --[[Joey]]
+
+> Hooray!
+> --jrayhawk
--- /dev/null
+Ikiwiki already has localizations for several languages, but not for Hebrew.
+Hebrew is also special, being a right-to-left language (same is true for Arabic
+and several others). I hope the page template localizations can handle the
+layout direction issues and make the whole wiki HTML to be right-to-left.
+
+Anyway, I started preparing a Hebrew localization. Just wanted to say it here
+to avoid duplication, and to let the developers/maintainers know in case it
+matters.
+
+--[[fr33domlover]]
--- /dev/null
+this looks pretty awesome: <https://indieauth.com/>
+
+anyone working on a plugin or has ideas on how to implement this? --[[anarcat]]
+
+> My understanding of indyauth is that the wiki owner would need to pick an
+> indyauth provider, which handles the communication with the Big Silos.
+>
+> I guess the wiki owner could run their own, but they'd be more likely to
+> run the one provided by the indyauth people. So, this is effectively
+> centralized, although without lock-in.
+>
+> Also, see related <https://indiecert.net/> --[[Joey]]
>> external plugins means it's automatically in their `sys.path` without
>> needing special configuration. --[[smcv]]
>> (a mostly-inactive member of Debian's Python modules packaging team)
+
+>>> I mostly agree, but a problem arises when the external plugin we are using is not located in the same directory as the `proxy.py` file, but in a directory somewhere in a `libdir` or `libdirs` directory. Right now (for a soon-to-be published plugin I am working on) the solutions I am thinking about are:
+>>>
+>>> - Call ikiwiki using ``PYTHONPATH="$PYTHONPATH:/usr/lib/ikiwiki/plugins ikiwiki ...``, but it is a pain to write this each time I want to use this (and any solution like creating a custom script do not seem very nice);
+>>> - Make my plugin add `/usr/lib/ikiwiki/plugins` to its python path, but I do not know how portable this is for a non Debian distribution.
+>>>
+>>> Any better idea (and sorry for digging up an old post)?
+>>> -- [[Louis|spalax]]
--- /dev/null
+If I'm reading the docs right, I count three different ways
+of associating some local styling information with a portion
+of a site:
+
+* [[plugins/localstyle]] uses the [[ikiwiki/subpage/LinkingRules]] to find the 'nearest' stylesheet
+* [[plugins/edittemplate]] uses a directive with a [[ikiwiki/PageSpec]] to indicate which
+ pages should get which templates
+* [[plugins/pagetemplate]] doesn't do a thing for you unless you shoehorn a
+ `pagetemplate` directive into every affected page.
+
+That last is the one that seems least useful. The [[ikiwiki/PageSpec]] approach seems
+most flexible.
+
+Would it be a bad thing to allow `pagetemplate` to work the way `edittemplate` does?
+Maybe just extend the existing directive? If it has a `pages` parameter, it specifies
+the template for the supplied [[ikiwiki/PageSpec]], otherwise it just affects the enclosing page
+as it does now?
+
+--Chap
--- /dev/null
+It would be useful if ikiwiki could reject adding file with names
+longer than some limit, like 255 bytes. I've had some git-annex users
+complain that some files ended up longer than that, which won't work on
+some OS's and filesystems.
+
+255 might be a good default value, even.
+
+This would apply to pages created following broken wikilinks and using
+blogpost forms, as well as to uploaded attachments, and perhaps aggregated
+pages. In the wikilink case, I guess ikiwiki would need to reject it as
+too long; in the other cases it could simply pick a shorter version of
+the proposed filename.
+
+--[[Joey]]
--- /dev/null
+When ikiwiki is being used for issue tracking, it would be convenient to
+have a way to close a bug from a comment, rather than editing the bug
+report page in a wiki-manner.
+
+So, some way to set a tag from a comment, such that it applies to the
+parent page.
+
+Turning on allowdirectives may make that work (I have not tried), but
+it's probably too heavyweight/intrusive/possible a security issue.
+
+Maybe extend the comment directive with a field to set/unset tags?
+--[[Joey]]
+++ /dev/null
-[[!template id=gitbranch branch=wtk/org author="[[wtk]]"]]
-
-summary
-=======
-
-Add a plugin for handling files written in [org-mode][].
-
-notes
-=====
-
-This is an updated form of [Manoj Srivastava's plugin][MS]. You can
-see the plugin [in action][example] on my blog.
-
-For reasons discussed in the [[reStructuredText plugin|plugins/rst]],
-wikilinks and other ikiwiki markup that inserts raw HTML can cause
-problems. Org-mode provides a [means for processing raw HTML][raw],
-but Ikiwiki currently (as far as I know) lacks a method to escape
-inserted HTML depending on which plugins will be used during the
-[[htmlize phase|plugins/write#index11h3]].
-
-new plugin
-==========
-
-A complete rewrite of the plugin can be found
-[here][chrismgray-rewrite]. It uses a
-dedicated emacs instance to parse the org-mode files. Thus, it should
-be a bit faster than the older plugin, as well as properly handling
-[[wikilinks|ikiwiki/wikilink]] and images, two features not present in the older
-plugin. An example of its use can be found at my [blog][chrismgray-blog].
-
-[org-mode]: http://orgmode.org/
-[MS]: http://www.golden-gryphon.com/blog/manoj/blog/2008/06/08/Using_org-mode_with_Ikiwiki/
-[example]: http://blog.tremily.us/posts/Git/notes/
-[raw]: http://orgmode.org/manual/Quoting-HTML-tags.html
-[chrismgray-rewrite]: https://github.com/chrismgray/ikiwiki-org-plugin
-[chrismgray-blog]: http://chrismgray.github.com
+++ /dev/null
-I don't find org.pm in git branch. The steps are:
-
-1. git clone git://github.com/wking/ikiwiki.git
-2. cd ikiwiki
-3. find . | grep org.pm
-
-I've taken the name from <http://www.golden-gryphon.com/software/misc/org.pm.html>
When using the GeoJSON output of the OSM plugin (osm_format: GeoJSON), the name and description in the popups are missing, this patch fixes the issue.
+> "Fix the title and description of map popups"
+>
+> + # Rename desc to description (this matches the kml output)
+>
+> Is there a spec for this anywhere, or a parser with which it needs to be
+> compatible?
+> --[[smcv]] [[!tag reviewed]]
+>> This is especially confusing because this is actually about JSON, not KML. Disregarding that, here's the [geojson homepage](http://geojson.org/) which has a link to the spec. The spec doesn't seem to specify `description`, `desc` or `name` anywhere. --[[anarcat]]
+
+>> No, although I believe the only code that parses this is line 112 of
+>> [underlays/osm/ikiwiki/osm.js](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=underlays/osm/ikiwiki/osm.js;h=37e588f7b5bba4c1125052f82c358359a3459705;hb=HEAD#l112).
+
+>>> Ah, right, then this may make sense after all... --[[anarcat]]
Currently, the documented icon parameter to the waypoint directive is not used. This patch fixes that, and fixes some related problems in the KML output.
> That patch looks pretty awesome, thanks for your work on it. I don't have time to test it now, but if it works, I am all for its inclusion. --[[anarcat]]
+
+> + my $tag = $params{'tag'};
+>
+> Please check indentation: you're mixing spaces and hard tabs, apparently
+> with the assumption that a tab is worth 4 spaces.
+>
+> - my $icon = $config{'osm_default_icon'} || "ikiwiki/images/osm.png"; # sanitized: we trust $config
+> + my $icon = $params{'icon'}; # sanitized: we trust $config
+>
+> So there's a comment there that explains why the value of `$icon` can
+> be trusted, but it is no longer true, because it no longer comes from
+> `$config`. This does not fill me with confidence. Maybe it's OK to use
+> a wiki-editor-supplied icon, maybe not. If it is OK, please justify why,
+> and in any case, please do not leave old comments if they are no longer
+> true.
+>
+> In this case I suspect editors may be able to specify an icon whose URL is
+> `javascript:alert("cross-site scripting!")` (or something more malicious)
+> and have it written into the KML as-is. The osm plugin has had cross-site
+> scripting vulnerabilities before, I don't want to add another.
+>
+> + externalGraphic: "${icon}"
+>
+> I don't think Perl variable interpolation is going to work in Javascript?
+> I suspect this should have been inserting something into the GeoJSON instead?
+>
+> --[[smcv]]
+
+>> I have now fixed the indentation issues.
+>>
+>> I have changed the comment relating to the icon parameter, but I don't
+>> really understand how ikiwiki handles sanitisation, so I have not changed
+>> anything else for this.
+>>
+>> As for the Perl variable interpolation, see this
+>> [documentation](http://docs.openlayers.org/library/feature_styling.html#attribute-replacement-syntax).
+>>
+>> -- [[cbaines]]
Or if keeping `show=10` is preferred, what should be the conventional name
for functionality like `\[[!map show=title]]`?
-I personally like the idea of `\[[!inline limit=10]]`. --[[smcv]]
+> [[!template id=gitbranch branch=smcv/ready/limit
+author="[[Simon McVittie|smcv]]"
+browse=http://git.pseudorandom.co.uk/smcv/ikiwiki.git/shortlog/refs/heads/ready/limit]]
+> [[!tag patch users/smcv/ready]]
+
+I personally prefer `\[[!inline limit=10]]` so I have put that in a branch.
+Agreement/objections/better ideas welcome. --[[smcv]]
--- /dev/null
+I am zvonimir from croatia. i have created the localization for @ikiwiki
--- /dev/null
+I suppose this isn't technically a bug, but whetever.
+
+I want symbolic links to be rendered as HTTP redirects. For example,
+if we do this,
+
+ touch foo.mkdwn
+ ln -s foo.mkdwn bar.mkdwn
+ git push baz.branchable.com
+
+then the following command should print 302
+
+ curl -o /dev/null -s -w "%{http_code}" http://baz.thomaslevine.com/bar/
+
+> An interesting idea, but it conflicts somewhat with wanting symlinks to be
+> treated as the referenced file when it's safe to do so, which would be
+> great for [[todo/git-annex support]], and also good to avoid duplication
+> for files in system-wide underlays.
+>
+> Also, I don't think this is possible without help from the web server
+> configuration: for instance, under Apache, I believe the only way to get
+> an HTTP 302 redirect is via Apache-specific `.htaccess` files or
+> system-level Apache configuration.
+>
+> In current ikiwiki, you can get a broadly similar effect by either
+> using \[[!meta redir=foo]] (which does a HTML `<meta>` redirect)
+> or reconfiguring the web server. --[[smcv]]
+
+>> The CGI spec (http://www.ietf.org/rfc/rfc3875) says that a CGI can cause a redirect by returning a Location: header.
+>> So it's possible; desirable (due to your point about conflicting with git-annex support) is a different matter.
+
+>>> One of the major things that separates ikiwiki from other wiki software
+>>> is that ikiwiki is a wiki compiler: ordinary page-views are purely
+>>> static HTML, and the CGI only gets involved when you do something
+>>> that really has to be dynamic (like an edit).
+>>>
+>>> However, there is no server-independent static content that ikiwiki
+>>> could write out to the destdir that would result in that redirect.
+>>>
+>>> If you're OK with requiring the [[plugins/404]] plugin (and a
+>>> web server where it works, which I think still means Apache) then
+>>> it would be possible to write a plugin that detected symlinks,
+>>> stored them in the `%wikistate`, and used them to make the
+>>> [[plugins/404]] plugin (or its own hook similar to the one
+>>> in that plugin) do a 302 redirect instead of a 404.
+>>> Similarly, a plugin that assumed a suitable Apache
+>>> configuration with fairly broad `AllowOverrides`,
+>>> and wrote out `.htaccess` files, would be a feasible thing
+>>> for someone to write.
+>>>
+>>> I don't think this is a bug; I think it's a request for a
+>>> feature that not everyone will want. The solution to those
+>>> is for someone who wants the feature to
+>>> [[write a plugin|plugins/write]]. --[[smcv]]
--- /dev/null
+The [stay of execution](http://source.ikiwiki.branchable.com/?p=source.git;a=commit;h=6660fd643bf3b65745d62b24cb16fef1b5205207) of Google's OpenID support, possibly until 2017,
+_only_ applies to ikiwikis that had already been live and whose `openid_realm`s had been
+seen by Google in at least one request by 19 May 2014, or whose admins had emailed Google to
+request an extension by 15 June 2014 ... this according to Miguel Andres's answer on
+[this thread](http://stackoverflow.com/questions/23773275/changed-domain-error-openid-auth-request-contains-an-unregistered-domain).
+
+Google will not work as an OpenID provider for any ikiwiki set up since that time.
+
+So, probably that Google option shouldn't be in the OpenID selector; maybe there
+should be an option: default _off_, can be turned _on_ for an established ikiwiki
+instance that is known to be grandfathered.
+
+-- [[jcflack]]
+
+> Oh well, it's dead and gone now. [[done]] --[[Joey]]
--- /dev/null
+Openlayers is *huge*! At 200k lines of code and 450KB, it is a significant overhead on a GIS-enabled modest ikiwiki site. It would be good to consider switching to [Leaflet](http://leafletjs.com/) which is only 123KB ([source](https://en.wikipedia.org/wiki/Leaflet_(software))).
+
+This would imply rewriting osm.js and probably bits of osm.pm, but would give us significant gains in performance... Leaflet is used by Flickr, Wikimedia, the main OpenStreemap map site and many others. --[[anarcat]]
--- /dev/null
+Would this be replacing openlayers in the osm plugin? Or writing a new plugin that can use leaflet (and possibly other libraries including OpenLayers 3?) ?
+
+> I think the module should be split in two: one part could simply make an inventory of waypoints and generate GIS files (.csv, .kml, etc). Another could render the map based on those files, and that could be made with leaflet. -- [[anarcat]]
+
+Enabling leaflet sounds like a great idea. I've been pining for this since I
+started using the osm plugin! -- [[kjs]]
>>>> it means that someone else is taking care of keeping it ahead of
>>>> the bot authors.
+>> As [[spam_fighting]] shows, OpenID spam is now real. Yahoo, at least, would need to be blocked, according to the above, which seems like a bold move. --[[anarcat]]
+
Okie - I have a first pass of this. There are still some issues.
Currently the code verifies the CAPTCHA. If you get it right then you're fine.
--- /dev/null
+[[plugins/openid]] and the new [[plugins/emailauth]] both assume that
+the user's authentication identity (how they log in) is suitable as
+an authorization identity (who they are when they have logged in). In
+particular, the OpenID or email address goes into the git history.
+
+Relatedly, I'm not sure I'd be comfortable with enabling [[plugins/emailauth]]
+on my own sites while it writes users' email addresses into the git history:
+non-technical people (and many technical people for that matter) get
+possessive about who can know their email address. The usual expectation for
+email addresses on websites seems to be that they will be used by the site
+owner (and maybe their outsourced service providers), but not available
+to random third parties. The principle of least astonishment would suggest
+that we should do the same here.
+
+> This part is now addressed by cloaking email addresses:
+> `smcv@debian.org` → `smcv@02f3eecb59311fc89970578832b63d57a071579e`
+> (that's the sha1sum of `mailto:smcv@debian.org`, as used in FOAF).
+> --[[smcv]]
+
+(The expectation of privacy for direct git commits is rather different:
+I think we can expect direct git committers to know that they
+should either set a plausible non-email-address in their git identity,
+like I used to use my OpenID, or have good spam filtering.)
+
+If we present email-based users in the "web UI" using only the local-part
+of their address, we also have a potentially confusing situation where
+`chris@example.com` and `chris@other.example.net` both contribute to a wiki:
+if I'm reading the code right, they'd both be presented as `chris`, with no
+way to change that other than using a different email address?
+
+Here is a sketch of a different account model that would address that:
+
+* An account has a username, e.g. `smcv`. It normally matches some regexp that
+ includes neither @ nor / (to rule out collisions with email addresses
+ and OpenIDs).
+
+ * We currently allow qr{-[:alnum:]+/.:_} by default, so passwordauth
+ accounts can in principle collide with OpenIDs. That would probably be
+ worth fixing (for new account creation) anyway - I don't think we want
+ users with / in their names, which would make their user-page into a
+ subpage?
+
+ > I have fixed passwordauth to not let urls be registered. It seems this
+ > was not quite a security hole; it didn't let registering a username that
+ > already existed, so if an openid was an admin, as long as the user logged
+ > in using that openid, someone else couldn't come along and passwordauth
+ > collide with it. (Might be exploitable if you could guess an openid that
+ > was going to be added as an admin later though.) --[[Joey]]
+
+* If passwordauth is enabled, accounts may have a password. Users can
+ authenticate to an account that has a password by entering that password.
+ The username is always the account name (because there's little reason
+ to do anything else).
+
+* If httpauth is enabled, anyone who can authenticate to the web server
+ automatically gets access to the account of the same name in the wiki.
+ (Or we could consider having a configurable map
+ { web-server-level username => wiki account } but the default would be
+ an identity mapping.)
+
+* If OpenID is enabled, accounts may have an OpenID.
+ The owner of that OpenID can log in, and gets logged-in to that account.
+ Either reusing the same OpenID for multiple accounts is not allowed, or
+ if the same OpenID is attached to more than one account the user can choose
+ (as an extra step). Optionally, more than one OpenID could be allowed.
+
+* If emailauth is enabled, accounts may have an email address.
+ Users can authenticate to an account that has an email
+ address (and is not a grandfathered OpenID) by using the token challenge.
+ (passwordauth accounts could already do a password-reset, so this is not
+ any less secure.)
+
+* Creating an account from an email address (maybe also OpenID?) has a new
+ step: choosing a username, with some text about "this name will appear
+ in recentchanges and in the wiki's history". The default would be the
+ local-part (user) from the email address.
+
+* Grandfathered OpenID support: every existing account that looks like an
+ OpenID has that OpenID associated with it, and it cannot be changed or
+ removed. The displayed form is openiduser().
+
+* Grandfathered emailauth support, if required (but it might not be required
+ if we implement this model before the next ikiwiki release): every existing
+ account that looks like an email address has that email address associated
+ with it, and it cannot be changed or removed. The displayed form is
+ emailuser() but we should maybe change that to output something more
+ like `smcv@…`.
+
+* Hypothetically, an account could also have a https client certificate
+ for a new client-certificate plugin, or a Google account for a new OAuth2
+ plugin, or whatever, and all of the above applies equally.
+
+* Unlike the current OpenID support, if the user's authentication provider
+ goes away (or if Google stops doing OAuth2 and moves on to the next big
+ thing), they can associate a different authentication identity with
+ their existing wiki account, and continue.
+
+This is basically the same model that Mozilla Persona encourages,
+except using emailauth ourselves instead of outsourcing (the equivalent
+of) that step to Mozilla.
+
+Thoughts?
+
+--[[smcv]]
+
+> I always find it a little ackward that i have two different accounts on this wiki: one for OpenID, and the other (regular account) for email notifications (because of [[bugs/notifyemail_fails_with_some_openid_providers/]]). It seems to me those accounts should just be merged as one, ie. I was expecting to be able to choose a username when i registered with openid.
+>
+> Also, when you talk about "separating authentication from authorization", i immediately thought of [[todo/ACL/]] and [[todo/Zoned_ikiwiki/]], so i thought i could mention those... having stability in the usernames would help in the design of those... --[[anarcat]]
+
+> I'm not opposed to this, but I don't anticipate having resources to do any
+> work on it either. (I do hope to obscure email addresses from git
+> commits.) --[[Joey]]
> Reviewed, tested: looks good to me. We need it for the [Tails forum](https://tails.boum.org/forum/). --[[intrigeri]]
>> Hi, is there a chance of seeing this plugin getting included in a release at any point soon? --sajolida
+
+>>> (Reviewing, better late than never...)
+>>>
+>>> It seems really non-obvious to me that the mtime of a page is
+>>> updated as a side-effect of sorting. I think it might also happen too
+>>> late for it to have the desired effect: mtimes should be updated before
+>>> the build phase starts, but sorting happens during the build phase.
+>>>
+>>> If we had a solution for [[!debbug 479371]] - copying
+>>> the mtime from child pages to a parent page - then it would
+>>> be enough to configure the forum threads to inherit the mtime
+>>> of their comments, and then sorting by mtime would do what
+>>> you wanted. The remaining problem would be to have a page pick up the
+>>> most recent mtime from a somewhat configurable set of pages. If the page
+>>> selection is done by pagespec, then by the time those can be matched
+>>> deterministically, it's also too late to be getting the desired
+>>> effect from changing mtimes... so perhaps this is a non-starter.
+>>>
+>>> Alternatively, perhaps just doing the sorting, and updating some
+>>> displayable last-update counter that is not the mtime, would be OK?
+>>> --[[smcv]]
[[DavidBremner]]
+> I would like this feature too, for the very same reasons.
+>
+> To preserve backward compatibility, I tried to implement it in the following way: if `libdir` is a string, it is (as it is right now), a directory in which plugins can be searched; if `libdir` is an array of strings, it is a list of libdirs. The ideal place to put it in would be in subroutine [checkconfig](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=IkiWiki.pm;hb=56f8223f9594ae687099dada0c138d669a6f931f#l569). However, plugins are loaded (and option `libdir` is used) in subroutine [loadplugins](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=IkiWiki.pm;hb=56f8223f9594ae687099dada0c138d669a6f931f#l713), which is called [just before `checkconfig`](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=ikiwiki.in;hb=729991564ec7e1116fc023c51e73b47af8b6fce7#l143).
+>
+> A solution would be to check `libdir` (and turn it into a list if necessary) somewhere in subroutine [getconfig](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=ikiwiki.in;hb=729991564ec7e1116fc023c51e73b47af8b6fce7#l26), but I do not know where to put it not to make it look like a bad hack…
+>
+> Any idea about the best place to preprocess `libdir`? Or any better idea to implement this?
+>
+> [[Louis|spalax]]
+
+>> Modifying `getconfig` is not a valid solution, because IkiWiki.pm is also imported by
+>> [[ikiwiki-transition]], [[ikiwiki-calendar]], the regression tests, etc.
+>>
+>> The way I would personally do it is to have a new non-exported function `getlibdirs`
+>> or something, have it do something like this:
+>>
+>> if (! ref $config{libdir}) {
+>> if (length $config{libdir}) {
+>> $config{libdir} = [$config{libdir}];
+>> } else {
+>> $config{libdir} = [];
+>> }
+>> }
+>> return @{$config{libdir}};
+>>
+>> and replace all uses of $config{libdir} with it.
+>>
+>> --[[smcv]]
+>>>
+>>> I implemented it (see branch ``paternal/libdirs``). I used [[smcv]]'s idea, but
+>>> avoiding side effects. I edited documentation as well. As usual, as neither
+>>> English nor Perl are my first languages (damn! I would be so much more
+>>> efficient in Python) feel free to improve my [[!taglink patch]].
+>>> [[!template id=gitbranch branch=spalax/paternal/libdirs browse="https://github.com/paternal/ikiwiki/tree/paternal/libdirs" author="[[Louis|spalax]]"]]
+
+>>>> While reviewing and applying your patch I decided the new
+>>>> "sometimes a list, sometimes not" behaviour of `libdir` was
+>>>> too confusing in documentation, so I made it work like underlaydir(s)
+>>>> instead: ikiwiki will now search each item of `$config{libdirs}`, then
+>>>> `$config{libdir}`. [[done]] --[[smcv]]
+
+>>>>> Good. I cannot see any justification apart from historical reasons, but I
+>>>>> agree with your choice.
+>>>>> -- [[Louis|spalax]]
+
[[!taglink wishlist]]
There's been a lot of work on contrib syntax highlighting plugins. One should be
picked and added to ikiwiki core.
+> I'm calling this [[done]] since I added the [[plugins/highlight]]
+> plugin. There are some unresolved issues touched on here,
+> but they either have the own other bug reports, or are documented
+> as semi-features in the docs to the plugin. --[[Joey]]
+
We want to support both converting whole source files into wiki
pages, as well as doing syntax highlighting as a preprocessor directive
(which is either passed the text, or reads it from a file). But,
Perhaps the thing to do here is to use the new `longname` parameter to
the format hook, to give them all names that will group together at or
near the end of the list. Ie: "Syntax: perl", "Source code: c", etc.
-
----
-
-I'm calling this [[done]] since I added the [[plugins/highlight]]
-plugin. There are some unresolved issues touched on here,
-but they either have the own other bug reports, or are documented
-as semi-features in the docs to the plugin. --[[Joey]]
--- /dev/null
+[[!tag wishlist]]
+
+Maybe I'm missing something, but... is there a reason the [[/tags]] page is not
+in the basewiki? Also, maybe it should move to be under [[/ikiwiki]], since
+unlike [[/templates]] and [[/shortcuts]] there's no special reason to edit it.
+
+--[[fr33domlover]]
--- /dev/null
+[[!tag wishlist patch ]]
+[[!template id=gitbranch branch=bfree/userdirps author="niall"]]
+I've written a very small plugin, inspired by
+[[forum/Can_ikiwiki_be_configured_as_multi_user_blog__63__]]
+which adds match_userdir to IkiWiki::PageSpec
+
+userdir() in a [[IkiWiki/PageSpec]] takes no arguments and checks
+if the page is the users userpage or a SubPage of it.
+
+The plugin is named userdirps.
+
+In case my gitbranch template is wrong:
+[[https://github.com/bfree/ikiwiki/commit/1f699d15c0778702cc5264dd3c8f822c6b0609ba]]
ikiwiki [options] source destination
-ikiwiki --setup setupfile
+ikiwiki --setup setupfile [options]
# DESCRIPTION
`source` in the [[ikiwiki/Markdown]] language (or others), and writes it out to
`destination`.
-Note that most options can be shortened to single letters, and boolean
-flags such as --verbose can be negated with --no-verbose.
+Note that most options can be shortened to single letters, boolean
+flags such as --verbose can be negated with --no-verbose, and
+options such as --verbose can also be spelled like -verbose.
# MODE OPTIONS
* --refresh
Refresh the wiki, updating any changed pages. This is the default
- behavior so you don't normally need to specify it.
+ behavior if no other mode action is specified (but note that --setup is
+ a mode action, and has different default behavior).
* --rebuild
* --setup setupfile
- The default action when --setup is specified is to automatically generate
- wrappers for a wiki based on data in a setup file, and rebuild the wiki.
+ Load options from the given setup file. If no other mode action is specified,
+ generate wrappers and rebuild the wiki, as if --rebuild --wrappers were used.
If you only want to build any changed pages, you can use --refresh with
--setup.
* ikiwiki --setup my.setup --refresh --wrappers
- Refresh the wiki, including regnerating all wrapper programs,
+ Refresh the wiki, including regenerating all wrapper programs,
but do not rebuild all pages. Useful if you have changed something
in the setup file that does not need a full wiki rebuild to update
- all pages, but that you want to immediatly take effect.
+ all pages, but that you want to immediately take effect.
+
+* ikiwiki --rebuild srcdir destdir
+
+ Use srcdir as source and build HTML in destdir, without using a
+ setup file.
+
+* ikiwiki srcdir destdir
+
+ Use srcdir as source to update changed pages' HTML in destdir,
+ without using a setup file.
# ENVIRONMENT
--- /dev/null
+[[!meta redir=users/schmonz]]
--- /dev/null
+[[!meta title="Boris Vogeler"]]
+
+Boris <a href="mailto:bvogeler@gmail.com">bvogeler@gmail.com</a> has been using ikiwiki for several years now as both a wiki engine for group organizing and documenting and as static site generator for a bunch of sites out there, one example would be [[nb-instrument.com|http://nb-instrument.com]].
+
+So while apparently coming from the web-frontend, he never wanted to really learn any of the messy stuff that lingers around in this realm besides HTML and CSS and a little scripting where necessary.
+
+He is well aware of the web being an amateurish, crappy place, while he thinks that the internet as such, still can be thought of and be used as "a natural resource" like Alan Kay pointed out.
+
+To learn to write things from scratch he's currently looking at Yesod and other frameworks in Haskell and in Rust, learning Haskell (since it's beautiful) and later on Rust (since it wants to be wise) to dig into functional languages for building some future proof applications. As a studied Marxist and working as a sound engineer, musician and producer, running a small studio in an artists run space, he actually is doing this to be able to show to his kids how important the understanding of fundamentals is.
I'm Chris Gray. I have an ikiwiki-based blog at
[[http://chrismgray.github.com]]. I wrote a plugin for
-[[org-mode|todo/org_mode]] files that is probably the first ikiwiki
+[[org-mode|plugins/contrib/org_mode]] files that is probably the first ikiwiki
plugin written mostly in emacs lisp.
--- /dev/null
+Sites I am using Ikiwiki with the [[bootstrap 3 theme|/theme_market]]:
+
+* <https://hi.ato.br>
+* <https://capoeira.li/blog>
+* <http://dissertosradicais.tem.blog.br>
+* <http://epelaspracasnaoteranome.tem.blog.br>
+* <http://iuri.tem.blog.br>
+* <http://mim.tem.blog.br>
+* <http://piratas.xyz>
+
+---
+
+A plugin to add facebook spyware to your ikiwiki: [[plugins/contrib/opengraph/]]
-There isn't much to say, I'm just a person of the common kind,
-trying to make this world a bit better for the next generations.
-
-I run a website, you're welcome to visit.
-
-* Clearnet: <http://www.partager.null> (requires [OpenNIC])
-* I2P: <http://partager.i2p>
-* Tor: <http://75dae7c76okcrloz.onion>
-
-[OpenNIC]: https://www.opennicproject.org/
+<http://rel4tion.org/people/fr33domlover/>
--- /dev/null
+Contacts
+=
+
+* iuri _at_ hush _dot_ ai
+* [Neocities contact page](http://iuri.neocities.org/contatos.html) (brazilian portuguese)
+* [Ikiwiki personal blog](http://iuri.tem.blog.br) (actually currently is an octopress blog but it is supposed to build from an ikiwiki generated git repository)
+
+Ikiwiki projects
+=
+
+I used/still_try to maintain these Ikiwiki projects:
+
+* [Hacklab Independência](https://wiki.hi.ato.br) - Free software initiative
+* [Ninguém Tem Blog!](http://ninguem.tem.blog.br) - Ikiwiki (and other platforms) blog hosting
+
+Quote made for this page
+=
+
+> Internet should **`s/media/iki/g`** period
--- /dev/null
+Runs ikiwiki on his home page at [[http://jamestechnotes.com]] and can be reached at [[james@jamestechnotes.com]]
Websites using ikiwiki:
+* <http://kalleswork.net>
* <http://img.kalleswork.net>
* <http://stockholm.kalleswork.net>
-Mostly using ikiwiki with the [[/plugins/contrib/album/]] and [[plugins/osm]] plugins. My git repo with tweaks including the simplebw theme and changes to the [[plugins/contrib/album]] templates can be cloned via http at:
+[[!template id=gitbranch branch=kjs/kalleswork.net author="[[Kalle Söderman|kjs]]"]]
-* <http://src.kalleswork.net/ikiwiki.git>
+Mostly using ikiwiki with the [[/plugins/contrib/album/]] and [[plugins/osm]]
+plugins. My git repo with tweaks including the simplebw theme and various
+changes to the [[plugins/contrib/album]] plugin and templates can be found in
+my kalleswork.net branch
+
+Note that the kalleswork.net branch is all my changes piled into one branch
+that I compile to run my sites.
+
+**I can't code (clone my repo above if you don't believe me!) so noone should
+run my code without checking it first.** I can't stress this enough.
+
+The main changes I've done are the following
+
+* How you browse through the images. The interface i simplified and you click
+the image to view the next rather than download it.
+* Added separate download link for full resolution image unless size is set to
+full in the album directive.
+* Extract metadata from exif/xmp data in the image according to preexisting
+pattern in the album plugin. This was done using
+[Image::ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/ExifTool.html)
+* Autogenerate [[ikiwiki/directive/tag/]]s from exif:Subject if possible.
+* Use the albumitem template to create tag pages with thumbnails.
+* Additional albumpreview template which allows you to define a thumbnail that
+link to the album. Useful for visual index of albums.
+* Extract GPS data and populate a [[plugins/osm]] waypoint if available.
+* Add span around osm icon to allow for styling.
+
+For my public websites above have been using the tweaked img plugin for many months now. It works well except when deleting images, this seems to require a removal of the indexdb and a rebuild... not very convenient.
+
+A simple test wiki with downloadable setup and data can be found at:
+<http://src.kalleswork.net/masterbranch/>
--- /dev/null
+Mark Jason Dominus / `yrlnry` (on IRC) / [[Ikiwiki git repo|https://github.com/mjdominus/ikiwiki]]
+
+* [[blog|http://blog.plover.com/]]
+* [[CPAN|https://metacpan.org/author/MJD]]
+* [[math.stackexchange|http://math.stackexchange.com/users/25554/mjd]]
one sabr sub
+[[!meta date="2008-04-17 03:08:36 -0400"]]
two sabr sub
+[[!meta date="2008-04-17 03:08:58 -0400"]]
[Amitai Schlair](http://www.schmonz.com/) has contributed code to ikiwiki...
[[!map
-pages="!*/Discussion and ((link(users/schmonz) and plugins/*) or rcs/cvs or todo/fancypodcast)"
+pages="!*/Discussion and ((link(users/schmonz) and plugins/* and !plugins/openid/*) or rcs/cvs or todo/fancypodcast)"
]]
...and uses ikiwiki for all sorts of things:
## Public
+* [My personal web site](http://www.schmonz.com/)
+* [A very small podcast](http://agilein3minutes.com/)
* [A major open-source project's wiki](http://wiki.netbsd.org) (with
the [[rcs/cvs]] plugin)
* [An undergraduate group's university-provided-static-hosted
## Non-public
-* At work, team documentation and project planning: product and sprint
- backlogs, burndown charts, release plans/procedures/announcements,
- aggregating feeds of shared interest, etc.
* On my laptop, personal to-do and scratch space
* [A small personal site](http://podcast.schmonz.com/) (happily hosted at
[Branchable](http://www.branchable.com/))
-
-## Non-yet-ikiwiki
-
-* [My personal web site](http://www.schmonz.com/) (to be happily
- hosted at Branchable when it's running a post-[[todo/fancypodcast]]
- release)
+* At a previous job, team documentation and project planning: product and sprint
+ backlogs, burndown charts, release plans/procedures/announcements,
+ aggregating feeds of shared interest, etc.
[[!meta title="Louis Paternault"]]
-User of IkiWiki.
+User of IkiWiki (my [professional website](http://paternault.fr), among others).
# Plugins
I have a few things in mind. Their status is something between *I will implement it someday* to *maybe someone could need this* or *I will need it if I implement this killer website I have in mind*.
* [[plugins/contrib/htaccessmanager]]: Create a cgi page to manage a htaccess file.
-* Automatically add calendar pages (WIP: see the [[ikiwiki-calendar discussion|ikiwiki-calendar/discussion]]).
# Contact
underlaydirbase => "underlays",
underlaydir => "underlays/basewiki",
discussion => 0,
- exclude => qr/\/discussion|bugs\/*|todo\/*|forum\/*/, # save space
+ exclude => qr/\/discussion|bugs\/*|todo\/*|forum\/*|sandbox\/*/, # save space
locale => '',
verbose => 1,
syslog => 0,
disable_plugins => [qw{recentchanges openid}],
rcs => $rcs,
gitorigin_branch => '', # don't pull during build
+ deterministic => 1,
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="internet-mail.svg"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
+ inkscape:version="0.46"
+ sodipodi:version="0.32"
+ id="svg5816"
+ height="48px"
+ width="48px"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective73" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient6719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5060">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop5062" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5064" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient6717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ id="linearGradient5048">
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="0"
+ id="stop5050" />
+ <stop
+ id="stop5056"
+ offset="0.5"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5052" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient6715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <linearGradient
+ id="linearGradient28260">
+ <stop
+ style="stop-color:#9aa29a;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop28262" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop28264" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient28254">
+ <stop
+ id="stop28256"
+ offset="0.0000000"
+ style="stop-color:#9aa29a;stop-opacity:1.0000000;" />
+ <stop
+ id="stop28258"
+ offset="1.0000000"
+ style="stop-color:none" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2274">
+ <stop
+ style="stop-color:#000000;stop-opacity:0.12871288;"
+ offset="0.0000000"
+ id="stop2276" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop2278" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9749">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop9751" />
+ <stop
+ style="stop-color:#ededed;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop9753" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2152">
+ <stop
+ style="stop-color:#9aa29a;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2154" />
+ <stop
+ style="stop-color:#b5beb5;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2156" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2166">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2168" />
+ <stop
+ style="stop-color:#dcdcdc;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2170" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient18913">
+ <stop
+ style="stop-color:#ededed;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop18915" />
+ <stop
+ style="stop-color:#c8c8c8;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop18917" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2136">
+ <stop
+ style="stop-color:#989690;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2138" />
+ <stop
+ style="stop-color:#656460;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2140" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15107">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop15109" />
+ <stop
+ style="stop-color:#e2e2e2;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop15111" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10691"
+ inkscape:collect="always">
+ <stop
+ id="stop10693"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop10695"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ r="7.2284161"
+ fy="73.615714"
+ fx="6.7027131"
+ cy="73.615714"
+ cx="6.7027131"
+ gradientTransform="scale(1.902215,0.525703)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11382"
+ xlink:href="#linearGradient10691"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="32.203162"
+ x2="9.7619219"
+ y1="37.784682"
+ x1="8.7803760"
+ gradientTransform="matrix(2.394900,0.000000,0.000000,0.781058,2.879512,0.343005)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27463"
+ xlink:href="#linearGradient2274"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="24.132717"
+ x2="21.111549"
+ y1="13.686079"
+ x1="11.233107"
+ gradientTransform="matrix(1.370928,0.000000,0.000000,1.443758,2.431133,-0.140786)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27468"
+ xlink:href="#linearGradient9749"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="52.090678"
+ x2="9.8855033"
+ y1="37.197018"
+ x1="8.9156475"
+ gradientTransform="matrix(2.454781,0.000000,0.000000,0.762004,2.879512,0.343005)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27471"
+ xlink:href="#linearGradient2152"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="52.090678"
+ x2="9.8855033"
+ y1="37.197018"
+ x1="8.9156475"
+ gradientTransform="matrix(2.454781,0.000000,0.000000,0.762004,2.879512,0.343005)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27474"
+ xlink:href="#linearGradient2152"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="29.568739"
+ x2="15.310744"
+ y1="15.148383"
+ x1="10.184240"
+ gradientTransform="matrix(1.819266,0.000000,0.000000,1.028193,2.879512,0.343005)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27477"
+ xlink:href="#linearGradient2166"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="17.876846"
+ x2="13.467486"
+ y1="7.2310905"
+ x1="5.8266134"
+ gradientTransform="matrix(1.570607,0.000000,0.000000,1.190976,2.879512,0.343005)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27483"
+ xlink:href="#linearGradient18913"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.022910"
+ x2="18.475286"
+ y1="4.7461626"
+ x1="11.572842"
+ gradientTransform="matrix(1.343475,0.000000,0.000000,1.417854,2.879511,0.314599)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27486"
+ xlink:href="#linearGradient15107"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.257116"
+ x2="30.599684"
+ y1="15.257116"
+ x1="2.0618774"
+ gradientTransform="matrix(1.343475,0.000000,0.000000,1.417854,2.879511,0.314599)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient27488"
+ xlink:href="#linearGradient2136"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="105"
+ inkscape:window-x="331"
+ inkscape:window-height="743"
+ inkscape:window-width="872"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:cy="18.816166"
+ inkscape:cx="28.384904"
+ inkscape:zoom="1"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Mail</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Andreas Nilsson</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>mail</rdf:li>
+ <rdf:li>e-mail</rdf:li>
+ <rdf:li>MUA</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1">
+ <g
+ transform="matrix(2.269972e-2,0,0,2.297929e-2,44.98918,37.78447)"
+ id="g6707">
+ <rect
+ style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect6709"
+ width="1339.6335"
+ height="478.35718"
+ x="-1559.2523"
+ y="-150.69685" />
+ <path
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+ id="path6711"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path6713"
+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ style="fill:url(#linearGradient27486);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient27488);stroke-width:0.85660440;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 6.3334395,16.972251 L 6.3334395,41.481799 L 43.305555,41.481799 L 43.244499,17.089859 C 43.241050,15.712272 31.395999,2.4121110 29.210877,2.4121110 L 20.659391,2.4121110 C 18.362072,2.4121110 6.3334395,15.673953 6.3334395,16.972251 z "
+ id="path12723"
+ sodipodi:nodetypes="ccczzzz" />
+ <path
+ style="fill:url(#linearGradient27483);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 6.9230610,16.787103 C 6.5250222,16.356975 18.809966,3.0935378 20.667210,3.0935378 L 29.042965,3.0935378 C 30.790449,3.0935378 43.079567,16.221603 42.470079,16.978956 L 31.608858,30.475150 L 19.295373,30.156846 L 6.9230610,16.787103 z "
+ id="path18153"
+ sodipodi:nodetypes="czzzccz" />
+ <path
+ style="fill:#000000;fill-opacity:0.14619882;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 19.077530,30.017590 L 11.744526,21.271586 L 36.562951,14.335513 L 39.592221,20.551966 L 32.175956,29.992298"
+ id="path2164"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-opacity:0.14619882;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 18.291767,29.836259 L 10.809167,21.026146 L 35.456637,14.132812 L 38.630714,20.403811 L 31.390193,29.810968"
+ id="path2162"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-opacity:0.14619882;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 18.775313,29.957146 L 11.100386,21.296624 L 36.068405,14.232329 L 39.354114,20.824726 L 31.873739,29.931855"
+ id="path2160"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient27477);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 18.593984,30.440693 L 11.260975,21.694689 L 35.972554,14.801355 L 39.083369,21.188770 L 31.963198,30.174701"
+ id="path15105"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient27474);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 20.488434,29.064331 L 7.0924698,40.036319 L 21.001312,30.432013 L 30.019470,30.432013 L 42.438517,39.914206 L 30.575092,29.064331 L 20.488434,29.064331 z "
+ id="path14245"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="color:#000000;fill:url(#linearGradient27471);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ d="M 6.9634751,16.885144 L 18.479648,31.201334 L 19.548151,30.346532 L 6.9634751,16.885144 z "
+ id="path14339"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:url(#linearGradient27468);stroke-width:0.85660428;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 7.3077115,17.131415 L 7.3388644,40.342421 L 42.283659,40.342421 L 42.221353,17.257512 C 42.219329,16.508413 31.005032,3.4591863 28.837233,3.4591863 L 20.941579,3.4591863 C 18.689313,3.4591863 7.3066655,16.351067 7.3077115,17.131415 z "
+ id="path15103"
+ sodipodi:nodetypes="ccczzzz" />
+ <path
+ style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 20.957271,30.452732 L 9.0157722,38.723588 L 11.235205,38.729695 L 21.233330,31.860755 L 30.055238,30.437917 L 20.957271,30.452732 z "
+ id="path17393"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 11.427536,21.670296 L 12.752479,23.080719 L 35.543311,16.196529 L 38.458445,21.878896 L 39.072496,21.166981 L 36.003081,14.789145 L 11.427536,21.670296 z "
+ id="path2174"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:url(#linearGradient27463);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 13.308098,23.636340 L 19.334450,30.090093 L 20.531174,29.064331 L 30.617831,29.107071 L 31.429893,29.833651 L 35.404721,25.089502 C 34.250740,23.679081 13.308098,23.636340 13.308098,23.636340 z "
+ id="path2272"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path27492"
+ d="M 41.812936,17.847945 L 31.861315,30.479232 L 30.792812,29.624431 L 41.812936,17.847945 z "
+ style="color:#000000;fill:#b1b1b1;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
+ </g>
+</svg>
IkiWiki::rcs_commit_staged(message => gettext("calendar update"))
if $config{rcs};
-exec("ikiwiki", "-setup", $setup, "-refresh");
-die "failed to run ikiwiki -setup $setup -refresh\n";
+exec("ikiwiki", "--setup", $setup, "--refresh");
+die "failed to run ikiwiki --setup $setup --refresh\n";
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use lib '.'; # For use in nonstandard directory, munged by Makefile.
+use IkiWiki;
+use IkiWiki::Plugin::comments;
+use Getopt::Long;
+
+sub usage {
+ die gettext("usage: ikiwiki-comment pagefile [options]") . "\n";
+}
+
+sub main {
+ my $pagefile=shift || usage();
+ my $interactive = -t STDIN;
+ my $content;
+ my ($format, $username, $subject, $date, $url, $email, $ip);
+ GetOptions(
+ 'format:s' => \$format,
+ 'username:s' => \$username,
+ 'subject:s' => \$subject,
+ 'date:s' => \$date,
+ 'url:s' => \$url,
+ 'email:s' => \$email,
+ 'ip:s' => \$ip,
+ ) || usage();
+
+ my $dir=get_dir($pagefile);
+ my $page=get_page($pagefile);
+
+ IkiWiki::Plugin::comments::checkconfig();
+
+ if ($interactive) {
+ $format ||= 'mdwn';
+ $username ||= get_username();
+ $subject ||= get_subject($page, $dir);
+ $date ||= IkiWiki::Plugin::comments::commentdate();
+ $url ||= undef;
+ $email ||= undef;
+ $ip ||= undef;
+ } else {
+ $format ||= undef;
+ die "must supply username" unless defined $username;
+ $subject ||= get_subject($page, $dir);
+ die "must supply date" unless defined $date;
+ $url ||= undef;
+ $email ||= undef;
+ $ip ||= undef;
+ chomp($content = join('', <STDIN>));
+ }
+
+ my $comment=get_comment($format, $username, $subject, $date, $url, $email, $ip, $content);
+
+ # For interactive use, this will yield a hash of the comment before
+ # it's edited, but that's ok; the date provides sufficient entropy
+ # to avoid collisions, and the hash of a comment does not need to
+ # match its actual content.
+ # Doing it this way avoids needing to move the file to a final
+ # location after it's edited.
+ my $location=IkiWiki::Plugin::comments::unique_comment_location($page, $comment, $dir)."._comment";
+
+ IkiWiki::writefile($location, $dir, $comment);
+ exec_editor("$dir/$location") if $interactive;
+}
+
+sub get_dir {
+ my ($file) = @_;
+ my $dir=IkiWiki::dirname($file);
+ $dir="." unless length $dir;
+ return $dir;
+}
+
+sub get_page {
+ my ($file) = @_;
+ my $page=IkiWiki::basename($file);
+ $page=~s/\.[^.]+$// unless -d $file;
+ return $page;
+}
+
+sub get_username {
+ my $username = getpwuid($<);
+ $username="" unless defined $username;
+ return $username;
+}
+
+sub get_subject {
+ my ($page, $dir) = @_;
+ my $comment_num=1+IkiWiki::Plugin::comments::num_comments($page, $dir);
+ return "comment $comment_num";
+}
+
+sub get_comment {
+ my ($format, $username, $subject, $date, $url, $email, $ip, $content) = @_;
+ $format = defined $format ? $format = " format=$format" : q{};
+ $content = '' unless defined $content;
+ my $comment="[[!comment$format\n";
+ $comment.=" username=\"$username\"\n";
+ $comment.=" subject=\"\"\"$subject\"\"\"\n";
+ $comment.=" date=\"$date\"\n";
+ $comment.=" url=\"$url\"\n" if defined $url;
+ $comment.=" email=\"$email\"\n" if defined $email;
+ $comment.=" ip=\"$ip\"\n" if defined $ip;
+ $comment.=" content=\"\"\"\n$content\n\"\"\"]]\n";
+ return $comment;
+}
+
+sub exec_editor {
+ my ($file) = @_;
+
+ my @editor="vi";
+ if (-x "/usr/bin/editor") {
+ @editor="/usr/bin/editor";
+ }
+ if (exists $ENV{EDITOR}) {
+ @editor=split(' ', $ENV{EDITOR});
+ }
+ if (exists $ENV{VISUAL}) {
+ @editor=split(' ', $ENV{VISUAL});
+ }
+ exec(@editor, $file);
+}
+
+main(@ARGV);
cd "$srcdir"
git init
+ if [ -z "$(git config user.name)" ]; then
+ git config user.name IkiWiki
+ fi
+ if [ -z "$(git config user.email)" ]; then
+ git config user.email ikiwiki.info
+ fi
echo /.ikiwiki > .gitignore
git add .
git commit -m "initial commit"
return;
}
print "Processing $setup as user ".username()." ...\n";
- my $ret=system("ikiwiki", "-setup", $setup, @ARGV);
+ my $ret=system("ikiwiki", "--setup", $setup, @ARGV);
if ($ret != 0) {
print STDERR "warning: processing $setup failed with code $ret\n";
}
sub usage () {
die gettext("usage: ikiwiki [options] source dest"), "\n",
- gettext(" ikiwiki --setup configfile"), "\n";
+ gettext(" ikiwiki --setup my.setup [options]"), "\n";
}
sub setup (@) {
Name: ikiwiki
-Version: 3.20140831
+Version: 3.20150615
Release: 1%{?dist}
Summary: A wiki compiler
elsif ($. == 1 && ($ENV{NOTAINT}=0) && m{^(#!.*perl.*?)$}) {
$_=qq{$1 -T\n};
}
-elsif (/^\$ENV{PATH}="(.*)";/) {
+elsif (/^\$ENV\{PATH}="(.*)";/) {
$_="\$ENV{PATH}=\"$1:$prefix/bin\";\n";
}
touch $@
underlays: ../ikiwiki.out underlays_copy_stamp
- ../ikiwiki.out -libdir .. -setup underlay.setup -refresh
+ ../ikiwiki.out --libdir .. --setup underlay.setup --refresh
../ikiwiki.out: ../Makefile
- make -C .. ikiwiki.out
+ $(MAKE) -C .. ikiwiki.out
../Makefile: ../Makefile.PL
cd .. && ./Makefile.PL
msgstr ""
"Project-Id-Version: ikiwiki-bg\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2007-01-12 01:19+0200\n"
"Last-Translator: Damyan Ivanov <dam@modsodtsys.com>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr ""
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
#, fuzzy
msgid "Preferences"
msgstr "Предпочитанията са запазени."
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr ""
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Предпочитанията са запазени."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Достъпът ви е забранен."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Грешка"
msgid "(feed entities escaped)"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "данните от източника предизвикаха грешка в модула XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "създаване на нова страницa „%s”"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "грешка при обработване на шаблона"
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "създаване на нова страницa „%s”"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Няма „счупени” връзки!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "създаване на нова страницa „%s”"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "създаване на %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "създаване на %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgstr "създаване на %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "промяна на %s"
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Грешка при изпращане на поща"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, fuzzy, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "При използване на приеставката „search” е необходимо е да се укаже %s"
msgid "prog not a valid graphviz program"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "няма разпознати усмивки; изключване на приставката „smiley”"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
#, fuzzy
msgid "Image::Magick is not installed"
msgstr "не е инсталиран polygen"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, fuzzy, perl-format
msgid "failed to read %s: %s"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "грешка при запис на файла „%s”: %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, fuzzy, perl-format
msgid "failed to resize: %s"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, fuzzy, perl-format
msgid "failed to determine size of image %s"
msgstr "грешка при запис на файла „%s”: %s"
msgid "missing pages parameter"
msgstr "липсващ параметър „id” на шаблона"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "грешка при обработване на шаблона"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "модулът „RPC::XML::Client” не е намерен; източникът не е проверен"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
#, fuzzy
msgid "failed to run dot"
msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgstr ""
"Страницата „%s” е заключена от потребителя „%s” и не може да бъде променяна"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "крешка при компилиране на файла %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
#, fuzzy
msgid "All pages have other pages linking to them."
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Грешка при изпращане на поща"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
#, fuzzy
msgid "failed to translate"
msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr ""
msgid "missing id parameter"
msgstr "липсващ параметър „id” на шаблона"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr ""
msgid "failed to generate image from code"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "сканиране на „%s”"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "пропускане на невалидното име на файл „%s”"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "премахване на старата страница „%s”"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "обновяване на страницата „%s”, съдържаща препратки към „%s”"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "премахване на „%s” понеже не се генерира от „%s”"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "обновяване на страницата „%s”, зависеща от „%s”"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "обновяване на „%s” и осъвременяване на обратните връзки"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, fuzzy, perl-format
msgid "building %s"
msgstr "промяна на %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: неуспех при обновяване на страницата „%s”"
msgid "wrapper filename not specified"
msgstr "не е указан файл на обвивката"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "крешка при компилиране на файла %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "успешно генериране на %s"
msgstr "формат: ikiwiki [опции] източник местоназначение"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "осъвременяване на уики..."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Дискусия"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"При използване на пареметъра „--cgi” е необходимо да се укаже и "
"местоположението на уикито чрез параметъра „--url”"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "пропускане на невалидното име на файл „%s”"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "шаблонът „%s” не е намерен"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "непознат вид сортиране „%s”"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "непознат вид сортиране „%s”"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "грешка при четене на „%s”: %s"
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr ""
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "крешка при компилиране на файла %s"
+
#~ msgid "You need to log in first."
#~ msgstr "Първо трябва да влезете."
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2009-09-11 20:23+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
"pravděpodobná chyba konfigurace: je nastavena proměnná sslcookie, ale "
"Ezkoušíte se přihlásit přes http a ne přes https"
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr "přihlášení selhalo; možná si musíte povolit cookies?"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr "Vaše sezení expirovalo."
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "Přihlášení"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Předvolby"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Správce"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Nastavení uloženo."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Jste vyhoštěni."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Chyba"
msgid "(feed entities escaped)"
msgstr "(entity byly v kanálu zakódovány)"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "kanál shodil XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "vytvářím novou stránku %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "nepodařilo se zpracovat:"
msgid "bad attachment filename"
msgstr "chybné jméno souboru s přílohou"
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr "příloha nahrána"
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s není ani příloha, ani stránka."
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "vytvářím novou stránku %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Žádné porušené odkazy!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "vytvářím novou stránku %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "komentář k %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
#, fuzzy
msgid "moderation"
msgstr "Schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "nepodporovaný formát stránky %s"
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr "komentář musí mít obsah"
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr "Anonym"
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
#, fuzzy
msgid "Comment Moderation"
msgstr "Schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "chybný název stránky"
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr "komentář k %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "stránka „%s“ neexistuje, takže nemůžete komentovat"
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, fuzzy, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr "komentáře na stránce „%s“ jsou uzamčeny"
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "komentáře na stránce „%s“ jsou uzamčeny"
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr "komentář uložen pro schválení"
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr "Váš komentář bude zobrazen po schválení moderátorem"
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr "Přidán komentář"
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr "Přidán komentář: %s"
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr "nejste přihlášeni jako správce"
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr "Schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr "schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, fuzzy, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
#, fuzzy
msgid "Comment"
msgstr "Komentáře"
msgstr "vytvářím %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "upravuji %s"
msgid "edittemplate %s registered for %s"
msgstr "edittemplate %s byla zaregistrována pro %s"
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Nepodařilo se odeslat email."
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr "musíte zadat formát a text"
msgid "%s is an attachment, not a page."
msgstr "%s není ani příloha, ani stránka."
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr "nejste oprávněni měnit %s"
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "nemůžete pracovat se souborem s přístupovým oprávněními %s"
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr "nejste oprávněni měnit přístupová oprávnění souborů"
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "nejste oprávněni měnit %s"
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "nelze zkompilovat %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "%s musíte zadat při každém použití modulu %s"
msgid "prog not a valid graphviz program"
msgstr "program není platným programem graphviz"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr "tohighlight obsahuje neznámý typ souboru „%s“"
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr "Zdrojový kód: %s"
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr "varování: perlový modul highlight není dostupný; pokračuji bez něj"
msgid "htmltidy failed to parse this html"
msgstr "htmltidy se nepodařilo zpracovat toto html"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr "Image::Magick není nainstalován"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "nelze číst %s: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "nelze určit velikost obrázku %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr "chybné rozměry „%s“ (formát má být ŠxV)"
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "nelze změnit velikost: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr "nelze určit velikost obrázku %s"
msgid "missing pages parameter"
msgstr "chybí parametr pages"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "parametry %s a %s nelze použít zároveň"
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Přidat nový příspěvek nazvaný:"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "nepodařilo se zpracovat:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client nebyl nalezen, nepinkám"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "nepodařilo se spustit dot"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "Stránka %s je zamknutá a nelze ji měnit"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr "je povolen multimarkdown, ale Text::MultiMarkdown není nainstalován"
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr "schvalování komentářů"
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "nelze zkompilovat %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr "Na každou stránku vede odkaz z jiné stránky."
msgid "No email address, so cannot email password reset instructions."
msgstr "Bez e-mailové adresy nelze zaslat postup na resetování hesla."
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Nepodařilo se odeslat email."
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr "Postup na resetování hesla vám byl odeslán na e-mail."
msgstr ""
"po_link_to=negotiated vyžaduje zapnuté usedirs, používám po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr "aktualizovány PO soubory"
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
"Nemohu odstranit překlad. Nicméně pokud bude odstraněna hlavní stránka, "
"budou odstraněny také její překlady."
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
"Nemohu přejmenovat překlad. Nicméně pokud bude přejmenována hlavní stránka, "
"budou přejmenovány také její překlady."
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "POT soubor (%s) neexistuje"
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "nepodařilo se zkopírovat PO soubor na %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr "nepodařilo se aktualizovat %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "nepodařilo se zkopírovat POT soubor na %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr "nepodařilo se přeložit %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr "odstraněny zastaralé PO soubory"
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr "nepodařilo se zapsat %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr "překlad se nezdařil"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"neplatná gettext data, pro pokračování v úpravách se vraťte na předchozí "
"stránku"
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, fuzzy, perl-format
msgid "need Digest::SHA to index %s"
msgstr "pro indexování %s je potřeba Digest::SHA1"
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr "hledání"
msgid "missing id parameter"
msgstr "chybí parametr id"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+#, fuzzy
+msgid "first parameter must be the content"
+msgstr "komentář musí mít obsah"
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr "chybí TeXový kód"
msgid "failed to generate image from code"
msgstr "z kódu se nepodařilo vygenerovat obrázek"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr "nemohu určit identitu nedůvěryhodného uživatele %s"
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "prohledávám %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"v cestě ke zdrojovému adresáři (%s) byl nalezen symbolický odkaz -- chcete-"
"li to povolit, nastavte proměnnou allow_symlinks_before_srcdir"
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "přeskakuji chybné jméno souboru %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s má několik možných zdrojových stránek"
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "odstraňuji starou stránku %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, perl-format
msgid "building %s, which links to %s"
msgstr "sestavuji %s, která odkazuje na %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "odstraňuji %s, již není sestavována pomocí %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, perl-format
msgid "building %s, which depends on %s"
msgstr "sestavuji %s, která závisí na %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "sestavuji %s, aby se aktualizovaly zpětné odkazy"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, perl-format
msgid "building %s"
msgstr "sestavuji %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: nelze sestavit %s"
msgid "wrapper filename not specified"
msgstr "jméno souboru s obalem nebylo zadáno"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "nelze zkompilovat %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "%s byl úspěšně vytvořen"
msgstr "použití: ikiwiki [volby] zdroj cíl"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+#, fuzzy
+msgid " ikiwiki --setup my.setup [options]"
msgstr " ikiwiki --setup konfigurační.soubor"
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "obnovuji wiki..."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Diskuse"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Při použití --cgi musíte pomocí --url zadat url k wiki"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, fuzzy, perl-format
msgid "unsupported umask setting %s"
msgstr "nepodporovaný formát stránky %s"
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr "nelze použít několik rcs modulů"
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr "nepodařilo se nahrát externí modul vyžadovaný modulem %s: %s"
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "Byla rozpoznána smyčka na %s v hloubce %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr "chybné jméno souboru %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "šablona %s nebyla nalezena"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr "ano"
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "neznámý typ řazení %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "neznámý typ řazení %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr "nelze vybrat stránky: %s"
msgstr "Který systém pro správu verzí se má použít?"
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+#, fuzzy
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr "Který uživatel (wiki účet nebo openid) bude správce?"
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr "Jaké je doménové jméno webového serveru?"
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "nelze zkompilovat %s"
+
#~ msgid "automatic index generation"
#~ msgstr "automatické vytváření indexu"
msgstr ""
"Project-Id-Version: ikiwiki 3.20110430\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2011-05-05 13:30+0200\n"
"Last-Translator: Jonas Smedegaard <dr@jones.dk>\n"
"Language-Team: None\n"
"X-Poedit-Country: DENMARK\n"
"X-Poedit-SourceCharset: utf-8\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
"mulig opsætningsfejl: sslcookie er sat, men du forsøger at logge på via "
"http, ikke https"
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr "Pålogning mislykkedes, måske skal du tillade infokager (cookies)?"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr "Din kørsel (login session) er udløbet"
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "Pålogning"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Indstillinger"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Admin"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Indstillinger gemt"
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Du er banlyst."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Fejl"
msgid "(feed entities escaped)"
msgstr "(fødningselementer omgået (escaped))"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "fødning fik XML::Feed til at bryde sammen!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "opretter ny side %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
msgid "failed to process template:"
msgstr "behandling af skabelon mislykkedes:"
msgid "bad attachment filename"
msgstr "dårligt vedhæftningsfilnavn"
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr "vedhæftningsoplægning"
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s er en vedhæftning, ikke en side."
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "opretter indeks-side %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Ingen henvisninger der ikker fungerer!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "opretter indeks-side %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, perl-format
msgid "this comment needs %s"
msgstr "denne kommentar kræver %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr "moderering"
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "Ikke-understøttet sideformat %s"
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr "kommentar skal have indhold"
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr "Anonym"
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr "Kommentarmoderering"
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "dårligt sidenavn"
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr "kommenterer på %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "siden '%s' eksisterer ikke, så du kan ikke kommentere"
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, fuzzy, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr "kommentarer på side '%s' er lukket"
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "kommentarer på side '%s' er lukket"
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr "kommentar gemt for moderering"
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr "Din kommentar vil blive tilføjet efter moderatorgenemsyn"
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr "Tilføjede en kommentar"
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr "Tilføjede en kommentar: %s"
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr "du er ikke logget på som en administrator"
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr "Kommentarmoderering"
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr "kommentarkoderering"
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr "Kommentér"
msgstr "opretter %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "redigerer %s"
msgid "edittemplate %s registered for %s"
msgstr "redigeringsskabelon %s registreret for %s"
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Afsendelse af mail mislykkedes"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr "skal angive format og tekst"
msgid "%s is an attachment, not a page."
msgstr "%s er en vedhæftning, ikke en side."
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr "Du har ikke lov til at ændre %s"
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "du kan ikke påvirke en fil med modus %s"
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr "du har ikke lov til at ændre modus for filer"
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr "Du har ikke lov til at tilbageføre en sammenlægning"
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, perl-format
msgid "Failed to revert commit %s"
msgstr "tilbageføring af indlæg %s mislykkedes"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Skal angive %s når udvidelsen %s bruges"
msgid "prog not a valid graphviz program"
msgstr "prog er ikke et gyldigt graphviz-program"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr "tohighlight indeholder ukendt filtype '%s'"
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr "Kildekode: %s"
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "htmltidy kunne ikke afkode dette html"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr "Image::Magick ikke installeret"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "læsning af %s mislykkedes: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "Vurdering af billedstørrelse mislykkedes: %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr "forkert størrelsesformat \"%s\" (burde være WxH)"
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "Ændring af størrelse mislykkedes: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr "Vurdering af billedstørrelse mislykkedes: %s"
msgid "missing pages parameter"
msgstr "mangler pages-parametren"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "parametrene %s og %s kan ikke anvendes sammen"
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr "%s (RSS-fødning)"
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr "%s (Atom-fødning)"
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Tilføj nyt indlæg med følgende titel:"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, perl-format
msgid "failed to process template %s"
msgstr "behandling af skabelon %s mislykkedes"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client ikke fundet, pinger ikke"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "dot-kørsel mislykkedes"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr "henvisningskort"
msgid "%s is locked and cannot be edited"
msgstr "%s er låst og kan ikke redigeres"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"multimarkdown er aktiveret, men Text::MultiMarkdown er ikke installeret"
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr "kommentarkoderering"
-#: ../IkiWiki/Plugin/openid.pm:71
-#, perl-format
-msgid "failed to load openid module: "
-msgstr "indlæsning af openid-modul mislykkedes: "
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr "Alle sider har henvisninger fra andre sider."
msgstr ""
"Ingen emailadresse, så kan ikke sende adgangskodenulstillingsinstruktioner."
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Afsendelse af mail mislykkedes"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr "Du har fået tilsendt adgangskodenulstillingsinstruktioner."
"po_link_to=negotiated kræver at usedirs er aktiveret, falder tilbage til "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr "opdaterer PO-filer"
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
"Kan ikke fjerne en oversættelse. Fjern i stedet hovedsiden, så fjernes dens "
"oversættelser også."
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
"Kan ikke omdøbe en oversættelse. Omdøb i stedet hovedsiden, så omdøbes dens "
"oversættelser også."
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "POT-filen %s eksisterer ikke"
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "kopiering af underlags-PO-fil til %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr "opdatering af %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "kopiering af POT-filen til %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr "oversættelse af %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr "forældede PO filer fjernet"
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr "skrivning af %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr "oversættelse mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"forkert gettext-data, gå tilbage til forrige side og fortsæt redigering"
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr "%s har forkert syntaks: skal bruge CODE|NAME"
msgid "rsync_command exited %d"
msgstr "rsync_command sluttede (exit code) %d"
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr "behøver Digest::SHA til indeks %s"
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr "søg"
msgid "missing id parameter"
msgstr "manglende id-parameter"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+#, fuzzy
+msgid "first parameter must be the content"
+msgstr "kommentar skal have indhold"
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr "manglende tex-kode"
msgid "failed to generate image from code"
msgstr "billedopbygning fra kode mislykkedes"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr "kan ikke afgøre id for ikke-tillidsfulde skribent %s"
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "gennemlæser %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"symbolsk lænke fundet i srcdir-sti (%s) -- sæt allow_symlinks_before_srcdir "
"for at tillade dette"
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "udelader forkert filnavn %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s har flere mulige kildesider"
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr "anmoder %s om oprettelses- og redigeringstider for fil.."
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, perl-format
msgid "removing obsolete %s"
msgstr "fjerner forældet %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, perl-format
msgid "building %s, which links to %s"
msgstr "danner %s, som henviser til %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "fjerner %s, ikke længere dannet af %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, perl-format
msgid "building %s, which depends on %s"
msgstr "danner %s, som afhænger af %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "danner %s, for at opdatere dens krydshenvisninger (backlinks)"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, perl-format
msgid "building %s"
msgstr "danner %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: kan ikke danne %s"
msgid "wrapper filename not specified"
msgstr "wrapper-navn ikke angivet"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "kompilering af %s mislykkedes"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "Korrekt bygget %s"
msgstr "brug: ikiwiki [valg] kilde mål"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+#, fuzzy
+msgid " ikiwiki --setup my.setup [options]"
msgstr " ikiwiki --setup opsætningsfil"
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "genopfrisker wiki..."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Diskussion"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Skal angive url til wiki med --url når der bruges --cgi"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, fuzzy, perl-format
msgid "unsupported umask setting %s"
msgstr "Ikke-understøttet sideformat %s"
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr "kan ikke bruge flere samtidige RCS-udvidelser"
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
"indlæsning af ekstern udvidelse krævet af udvidelsen %s mislykkedes: %s"
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "forudberegningssløkke fundet på %s ved dybde %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr "dårligt filnavn %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "skabelon %s ikke fundet"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr "ja"
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, perl-format
msgid "invalid sort type %s"
msgstr "forkert sorteringstype %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "ukendt sorteringsform %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr "kan ikke få sider til at passe sammen: %s"
msgstr "Hvilket revisionskontrolsystem skal bruges?"
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+#, fuzzy
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr "Hvilken bruger (wiki konto eller openid) skal være administrator?"
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr "Hvad er webserverens domænenavn?"
+
+#~ msgid "failed to load openid module: "
+#~ msgstr "indlæsning af openid-modul mislykkedes: "
msgstr ""
"Project-Id-Version: ikiwiki 3.14159\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2010-03-14 16:09+0530\n"
"Last-Translator: Sebastian Kuhnert <mail@sebastian-kuhnert.de>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
"vermutliche Fehlkonfiguration: sslcookie ist gesetzt, aber Sie versuchen "
"sich via http anzumelden, nicht https"
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
"Anmeldung fehlgeschlagen, möglicherweise müssen Sie zuvor Cookies aktivieren?"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr "Ihre Anmeldezeit ist abgelaufen."
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "Anmelden"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Einstellungen"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Administrator"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Einstellungen gespeichert."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Sie sind ausgeschlossen worden."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Fehler"
msgid "(feed entities escaped)"
msgstr "(Einträge in der Vorlage (feed) wurden maskiert)"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "Vorlage (feed) führte zum Absturz von XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "erstelle neue Seite %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "Fehler beim Ablauf:"
msgid "bad attachment filename"
msgstr "fehlerhafter Dateiname für Anhang"
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr "Anhang hochladen"
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "Seite %s ist ein Anhang und keine Seite."
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "erstelle neue Seite %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Es gibt keine ungültigen Verweise!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "erstelle neue Seite %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "kommentiere %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
#, fuzzy
msgid "moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "nicht unterstütztes Seitenformat %s"
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr "ein Kommentar sollte Inhalt haben"
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr "Anonym"
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
#, fuzzy
msgid "Comment Moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "fehlerhafter Seitenname"
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr "kommentiere %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
"Seite %s existiert nicht, Sie können sie deshalb auch nicht kommentieren"
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, fuzzy, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr "Kommentare zur Seite %s sind gesperrt"
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "Kommentare zur Seite %s sind gesperrt"
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr "Der Kommentar wurde zur Moderation gespeichert"
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr "Ihr Kommentar wird nach Moderation verschickt"
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr "Kommentar hinzugefügt"
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr "Kommentar hinzugefügt: %s"
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr "Sie sind nicht als Administrator angemeldet"
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr "Kommentieren"
msgstr "erstelle %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "bearbeite %s"
msgid "edittemplate %s registered for %s"
msgstr "edittemplate %s für %s registriert"
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Es konnte keine E-Mail versandt werden"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr "Format und Text müssen spezifiziert werden"
msgid "%s is an attachment, not a page."
msgstr "Seite %s ist ein Anhang und keine Seite."
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr "Sie dürfen %s nicht verändern"
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "Sie können eine Datei mit den Zugriffsrechten %s nicht nutzen"
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr "Sie dürfen die Zugriffsrechte der Datei nicht ändern"
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "Sie dürfen %s nicht verändern"
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "erzeugen von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "%s muss angegeben werden, wenn die %s Erweiterung verwandt wird"
msgid "prog not a valid graphviz program"
msgstr "prog ist kein gültiges graphviz-Programm"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr "tohighlight enteilt unbekannten Dateityp '%s'"
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr "Quellcode: %s"
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "htmltidy konnte dieses HTML nicht auswerten"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr "Image::Magick ist nicht installiert"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "Lesen von %s fehlgeschlagen: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "Größe des Bildes %s konnte nicht festgestellt werden."
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr "falsches Format in \"%s\" für size (sollte BxH sein)"
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "Größenänderung fehlgeschlagen: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr "Größe des Bildes %s konnte nicht festgestellt werden."
msgid "missing pages parameter"
msgstr "fehlender Seitenparameter"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "die Parameter %s und %s können nicht zusammen benutzt werden"
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Füge einen neuen Beitrag hinzu. Titel:"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "Fehler beim Ablauf:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client nicht gefunden, führe Ping nicht aus"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "dot konnte nicht ausgeführt werden"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr "Verknüpfungskarte"
msgid "%s is locked and cannot be edited"
msgstr "%s ist gesperrt und kann nicht bearbeitet werden"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"multimarkdown ist eingeschaltet, aber Text::MultiMarkdown ist nicht "
"installiert"
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "erzeugen von %s fehlgeschlagen"
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr "Alle Seiten haben mindestens einen Verweis von einer anderen Seite."
"es gibt keine E-Mail Adresse, deshalb kann keine Anweisung zum Zurücksetzen "
"des Passwortes zugeschickt werden."
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Es konnte keine E-Mail versandt werden"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr "Ihnen wurden Anweisungen zum Zurücksetzen des Passworts zugesandt."
"po_link_to=negotiated benötigt usedirs eingeschaltet, greife zurück auf "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr "PO-Dateien aktualisiert"
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
"Übersetzung kann nicht entfernt werden. Wenn die Master Seite entfernt wird, "
"werden auch ihre Übersetzungen entfernt."
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
"Eine Übersetzung kann nicht umbenannt werden. Wenn die Master Seite "
"unbenannt wird, werden auch ihre Übersetzungen unbenannt."
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "POT-Datei (%s) existiert nicht"
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "konnte die PO-Datei nicht aus dem Underlay nach %s kopieren"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr "aktualisieren von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "kopieren der POT-Datei nach %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr "übersetzen von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr "überflüssige PO-Dateien wurden entfernt"
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr "schreiben von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr "übersetzen fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"ungültige gettext Datei, gehe zurück zur vorherigen Seite um weiter zu "
"arbeiten"
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr "rsync_command gibt Fehler %d zurück"
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, fuzzy, perl-format
msgid "need Digest::SHA to index %s"
msgstr "benötige Digest::SHA1 um einen Index von %s zu erstellen"
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr "suchen"
msgid "missing id parameter"
msgstr "fehlender Parameter id"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+#, fuzzy
+msgid "first parameter must be the content"
+msgstr "ein Kommentar sollte Inhalt haben"
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr "fehlender TeX-Code"
msgid "failed to generate image from code"
msgstr "konnte kein Bild aus dem Code erzeugen"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgstr ""
"id des nicht vertrauenswürdigen Absenders %s konnte nicht feststellt werden"
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "durchsuche %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"symbolischer Verweis im srcdir Pfad (%s) gefunden -- setzen Sie "
"allow_symlinks_before_srcdir, um dies zu erlauben"
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "überspringe fehlerhaften Dateinamen %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s hat mehrere mögliche Quellseiten"
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "entferne alte Seite %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, perl-format
msgid "building %s, which links to %s"
msgstr "erzeuge %s, die auf %s verweist"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "entferne %s, wird nicht länger von %s erzeugt"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, perl-format
msgid "building %s, which depends on %s"
msgstr "erzeuge %s, die von %s abhängt"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "erzeuge %s, um dessen Rückverweise zu aktualisieren"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, perl-format
msgid "building %s"
msgstr "erzeuge %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: kann %s nicht erzeugen"
msgid "wrapper filename not specified"
msgstr "Dateiname des Wrappers nicht angegeben"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "erzeugen von %s fehlgeschlagen"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "%s wurde erfolgreich erstellt"
msgstr "Aufruf: ikiwiki [Optionen] Quelle Ziel"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+#, fuzzy
+msgid " ikiwiki --setup my.setup [options]"
msgstr " ikiwiki --setup Konfigurationsdatei"
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "aktualisiere Wiki.."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Diskussion"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Es muss eine URL zum Wiki mit --url angegeben werden, wenn --cgi verwandt "
"wird"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, fuzzy, perl-format
msgid "unsupported umask setting %s"
msgstr "nicht unterstütztes Seitenformat %s"
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
"Es können nicht mehrere Versionskontrollsystem-Erweiterungen verwandt werden"
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr "Laden der für %s benötigten externen Erweiterung fehlgeschlagen: %s"
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "Präprozessorschleife auf %s in Tiefe %i erkannt"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr "fehlerhafter Dateiname %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "Vorlage %s nicht gefunden"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr "ja"
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "Unbekannter Sortierungstyp %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "Unbekannter Sortierungstyp %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr "Kann die Seiten nicht zuordnen: %s"
msgstr "Welches Versionskontrollsystem soll verwandt werden?"
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+#, fuzzy
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr "Wer (Wiki-Konto oder OpenID) soll Administrator sein?"
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr "Wie lautet der Domainname des Webservers?"
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "erzeugen von %s fehlgeschlagen"
+
#~ msgid "automatic index generation"
#~ msgstr "automatische Index-Erstellung"
msgstr ""
"Project-Id-Version: es\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2009-06-14 12:32+0200\n"
"Last-Translator: Victor Moral <victor@taquiones.net>\n"
"Language-Team: <en@li.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
"activa, pero está intentando registrarse en el sistema vía el protocolo "
"'http' y no 'https'"
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
"registro fallido, ¿ tal vez necesita activar las cookies en el navegador ?"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr "Su registro en el sistema ha expirado."
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "Identificación"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Preferencias"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Administración"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Las preferencias se han guardado."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Ha sido expulsado."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Error"
msgid "(feed entities escaped)"
msgstr "(los caracteres especiales de la fuente de datos están exceptuados)"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "¡ la fuente de datos ha provocado un error fatal en XML::Feed !"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "creando nueva página %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
msgid "bad attachment filename"
msgstr "nombre de archivo adjunto erróneo"
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr "enviado el adjunto"
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "la página %s no es modificable"
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "creando nueva página %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "¡ No hay enlaces rotos !"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "creando nueva página %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "creando comentarios en la página %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
#, fuzzy
msgid "moderation"
msgstr "Aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "formato de página %s no soportado"
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr "Un comentario debe tener algún contenido"
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr "Anónimo"
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
#, fuzzy
msgid "Comment Moderation"
msgstr "Aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "nombre de página erróneo"
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr "creando comentarios en la página %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "la página '%s' no existe, así que no se puede comentar sobre ella"
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, fuzzy, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr "los comentarios para la página '%s' están cerrados"
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "los comentarios para la página '%s' están cerrados"
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr "comentario guardado a la espera de aprobación"
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr "Su comentario será publicado después de que el moderador lo revise"
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr "Añadir un comentario"
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr "Comentario añadido: %s"
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr "No está registrado como un administrador"
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr "Aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr "aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, fuzzy, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
#, fuzzy
msgid "Comment"
msgstr "Comentarios"
msgstr "creando página %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "modificando página %s"
msgid "edittemplate %s registered for %s"
msgstr "plantilla de edición %s registrada para %s"
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "No he podido enviar el mensaje de correo electrónico"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr "se deben especificar tanto el formato como el texto"
msgid "%s is an attachment, not a page."
msgstr "la página %s no es modificable"
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr "No puede cambiar %s"
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "no puede actuar sobre un archivo con permisos %s"
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr "No puede cambiar los permisos de acceso de un archivo"
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "No puede cambiar %s"
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, fuzzy, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Es obligatorio indicar %s cuando se utiliza el complemento de búsqueda"
msgid "prog not a valid graphviz program"
msgstr "prog no es un programa graphviz válido "
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr "la directiva tohighlight contiene el tipo de archivo desconocido '%s' "
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr "Código fuente: %s"
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "Algunos emoticonos tienen errores"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr "El complemento Image::Magick no ha sido instalado"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "no puedo leer de %s: %s "
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "no he podido determinar el tamaño de la imagen %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "dimensionamiento fallido: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr "no he podido determinar el tamaño de la imagen %s"
msgid "missing pages parameter"
msgstr "falta el parámetro pages"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Añadir una entrada nueva titulada:"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "no he podido ejecutar el programa dot"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "La página %s está bloqueada y no puede modificarse"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"el modo multimarkdown está activo, pero no está instalado Text::MultiMarkdown"
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr "aprobación de comentarios"
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "ha fallado la compilación del programa %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
#, fuzzy
msgid "All pages have other pages linking to them."
"No tengo dirección de correo electrónica, así que no puedo enviar "
"instrucciones para reiniciar la contraseña"
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "No he podido enviar el mensaje de correo electrónico"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, fuzzy, perl-format
msgid "POT file (%s) does not exist"
msgstr "No existe la página %s."
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "dimensionamiento fallido: %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "dimensionamiento fallido: %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
#, fuzzy
msgid "failed to translate"
msgstr "no he podido ejecutar el programa dot"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, fuzzy, perl-format
msgid "need Digest::SHA to index %s"
msgstr "se necesita la instalación de Digest::SHA1 para indexar %s"
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr "buscar"
msgid "missing id parameter"
msgstr "falta el parámetro \"id\""
+#: ../IkiWiki/Plugin/templatebody.pm:42
+#, fuzzy
+msgid "first parameter must be the content"
+msgstr "Un comentario debe tener algún contenido"
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr "falta el código tex"
msgid "failed to generate image from code"
msgstr "no he podido crear la imagen desde el código"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr "no puedo determinar el identificador de un usuario no fiable como %s"
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "explorando %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"encontrado un enlace simbólico en la ruta del directorio fuente (%s) -- use "
"la directiva allow_symlinks_before_srcdir para permitir la acción"
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "ignorando el archivo %s porque su nombre no es correcto"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s tiene mútiples páginas fuente posibles"
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "eliminando la antigua página %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "convirtiendo la página %s, la cual referencia a %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "eliminando la página %s puesto que ya no se deriva de %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "convirtiendo la página %s, la cual depende de %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr ""
"convirtiendo la página %s para actualizar la lista de páginas que hacen "
"referencia a ella."
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, fuzzy, perl-format
msgid "building %s"
msgstr "Informaremos a %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: no puedo convertir la página %s"
msgid "wrapper filename not specified"
msgstr "el programa envoltorio no ha sido especificado"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "ha fallado la compilación del programa %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "creado con éxito el programa envoltorio %s"
msgstr "uso: ikiwiki [opciones] origen destino"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+#, fuzzy
+msgid " ikiwiki --setup my.setup [options]"
msgstr " ikiwiki --setup archivo_de_configuración"
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "actualizando el wiki.."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Comentarios"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Es obligatorio especificar un url al wiki con el parámetro --url si se "
"utiliza el parámetro --cgi"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, fuzzy, perl-format
msgid "unsupported umask setting %s"
msgstr "formato de página %s no soportado"
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr "no puedo emplear varios complementos rcs"
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr "no he podido cargar el complemento externo %s necesario para %s"
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
"se ha detectado en la página %s un bucle de preprocesado en la iteración "
"número %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr "el nombre de archivo %s es erróneo"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "no he encontrado la plantilla %s"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr "si"
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "no conozco este tipo de ordenación %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "no conozco este tipo de ordenación %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr "no encuentro páginas coincidentes: %s"
#: ../auto.setup:21
#, fuzzy
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
"¿ Qué usuario del wiki (ó qué identificador openid) será el empleado como "
"administrador ? "
msgid "What is the domain name of the web server?"
msgstr "¿ Cuál es el dominio para el servidor web ?"
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "ha fallado la compilación del programa %s"
+
#~ msgid "automatic index generation"
#~ msgstr "creación de índice automática"
msgstr ""
"Project-Id-Version: ikiwiki 3.141\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2010-10-03 10:42+0200\n"
"Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
"Erreur de configuration probable : sslcookie est positionné mais vous tentez "
"de vous connecter avec http au lieu de https"
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr "Échec de l'identification, vous devez autoriser les cookies."
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr "Session d'authentification expirée."
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "S’identifier"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Préférences"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Administrateur"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Les préférences ont été enregistrées."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Vous avez été banni."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Erreur"
msgid "(feed entities escaped)"
msgstr "(échappement des entités de flux)"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "Plantage du flux XML::Feed !"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "Création de la nouvelle page %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
msgid "failed to process template:"
msgstr "Échec du traitementdu modèle :"
msgid "bad attachment filename"
msgstr "Nom de la pièce jointe incorrect"
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr "Envoi de la pièce jointe"
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s est une pièce jointe, pas une page."
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "Création de la nouvelle page %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Aucun lien cassé !"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "Création de la nouvelle page %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, perl-format
msgid "this comment needs %s"
msgstr "Ce commentaire demande %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr "Modération"
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "Format de page non reconnu %s"
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr "Un commentaire doit avoir un contenu."
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr "Anonyme"
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr "Modération du commentaire"
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "Nom de page incorrect"
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr "Faire un commentaire sur %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "La page '%s' n'existe pas, commentaire impossible."
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, fuzzy, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr "Le commentaire pour la page '%s' est terminé."
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "Le commentaire pour la page '%s' est terminé."
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr "Le commentaire a été enregistré, en attente de « modération »"
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr "Votre commentaire sera publié après vérification par le modérateur"
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr "Commentaire ajouté"
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr "Commentaire ajouté : %s"
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr "Vous n'êtes pas authentifié comme administrateur"
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr "Modération du commentaire"
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr "modération du commentaire"
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr "poster un commentaire"
msgstr "Création de %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "Édition de %s"
msgid "edittemplate %s registered for %s"
msgstr "edittemplate %s enregistré pour %s"
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Impossible d'envoyer un courriel"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr "le format et le texte doivent être indiqués"
msgid "%s is an attachment, not a page."
msgstr "%s est une pièce jointe, pas une page."
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr "Vous n'êtes pas autorisé à modifier %s"
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "Vous ne pouvez pas modifier un fichier dont le mode est %s"
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr "Vous n'êtes pas autorisé à modifier le mode des fichiers"
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "Vous n'êtes pas autorisé à modifier %s"
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "Échec de la compilation de %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Vous devez indiquer %s lors de l'utilisation du greffon %s."
msgid "prog not a valid graphviz program"
msgstr "Ce programme n'est pas un programme graphviz valable"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr "tohighlight contient un type de fichier inconnu : '%s'"
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr "Code source : %s"
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "htmltidy n'a pas pu analyser cette page html"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr "Image::Magick n'est pas installé"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "Échec de la lecture de %s : %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "Échec de la détermination de la taille de l'image : %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr "Format de la taille incorrect \"%s\", (devrait être LxH)"
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "Échec du redimensionnement : %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr "Échec de la détermination de la taille de l'image : %s"
msgid "missing pages parameter"
msgstr "Paramètre « pages » manquant"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "Les paramètres %s et %s ne peuvent être utilisés ensemble."
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Ajouter un nouvel article dont le titre est :"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "Échec du traitementdu modèle :"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client introuvable, pas de réponse au ping"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "Échec du lancement de dot"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr "linkmap"
msgid "%s is locked and cannot be edited"
msgstr "%s est verrouillé et ne peut être modifié"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr "mulitmarkdown est activé mais Text::Multimarkdown n'est pas installé"
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr "modération du commentaire"
-#: ../IkiWiki/Plugin/openid.pm:71
-#, perl-format
-msgid "failed to load openid module: "
-msgstr "Impossible de charger le module openid"
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr "Toutes les pages sont liées à d'autres pages."
"Aucune adresse indiquée. Impossible d'envoyer les instructions pour "
"réinitialiser le mot de passe."
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Impossible d'envoyer un courriel"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=negotiated nécessite que usedirs soit activé, retour à "
"po_link_to=default."
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr "Fichiers PO mis à jour."
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
"Impossible de supprimer cette traduction. Si la page maître est supprimée, "
"alors ses traductions seront supprimées."
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
"Impossible de renommer cette traduction. Si la page maître est renommée, "
"alors ses traductions pourront être renommées."
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "Le fichier POT %s n'existe pas."
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "Impossible de copier le fichier PO underlay dans %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr "Impossible de mettre à jour %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "Impossible de copier le fichier POT dans %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr "Impossible de traduire %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr "Fichiers PO obsolètes supprimés."
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr "Impossible de modifier %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr "Impossible de traduire"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"Données gettext incorrectes, retour à la page précédente pour la poursuite "
"des modifications."
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr "La syntaxe de %s n'est pas correcte : il faut utiliser CODE|NOM"
msgid "rsync_command exited %d"
msgstr "la commande rsync s'est terminée avec le code : %d"
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr "Digest::SHA1 est nécessaire pour indexer %s"
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr "recherche"
msgid "missing id parameter"
msgstr "Paramètre d'identification manquant"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+#, fuzzy
+msgid "first parameter must be the content"
+msgstr "Un commentaire doit avoir un contenu."
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr "Il manque le code TeX"
msgid "failed to generate image from code"
msgstr "Échec de la création de l'image à partir du code"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgstr ""
"Impossible de déterminer l'identifiant de %s, (enregistrement non fiable)"
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "Examen de %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"Lien symbolique trouvé dans l'adresse de srcdir (%s) -- pour l'autoriser, "
"activez le paramètre « allow_symlinks_before_srcdir »."
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "Omission du fichier au nom incorrect %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s peut être associé à plusieurs pages source."
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
"recherche de %s pour les dates de modification et de création des fichiers..."
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, perl-format
msgid "removing obsolete %s"
msgstr "Suppression de %s obsolète"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, perl-format
msgid "building %s, which links to %s"
msgstr "Reconstruction de %s, qui est lié à %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "Suppression de %s, qui n'est plus rendu par %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, perl-format
msgid "building %s, which depends on %s"
msgstr "Reconstruction de %s, qui dépend de %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "Reconstruction de %s, afin de mettre à jour ses rétroliens"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, perl-format
msgid "building %s"
msgstr "construction de %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki : impossible de reconstruire %s"
msgid "wrapper filename not specified"
msgstr "Le nom du fichier CGI n'a pas été indiqué"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "Échec de la compilation de %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "%s a été créé avec succès"
msgstr "Syntaxe : ikiwiki [options] source destination"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+#, fuzzy
+msgid " ikiwiki --setup my.setup [options]"
msgstr " ikiwiki --setup fichier de configuration"
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "Rafraîchissement du wiki..."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Discussion"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Vous devez indiquer l'URL du wiki par --url lors de l'utilisation de --cgi"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, fuzzy, perl-format
msgid "unsupported umask setting %s"
msgstr "Format de page non reconnu %s"
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr "Impossible d'utiliser plusieurs systèmes de contrôle des versions"
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr "Impossible de charger le greffon externe nécessaire au greffon %s : %s"
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "Une boucle de prétraitement a été détectée sur %s à hauteur de %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr "Nom de fichier incorrect %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "Modèle de page %s introuvable"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr "oui"
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, perl-format
msgid "invalid sort type %s"
msgstr "Type de tri %s inconnu"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "Type de tri %s inconnu"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr "Impossible de trouver les pages : %s"
msgstr "Système de contrôle de version utilisé :"
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+#, fuzzy
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr "Identifiant de l'administrateur (utilisateur du wiki ou openid) :"
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr "Nom de domaine du serveur HTTP :"
+#~ msgid "failed to load openid module: "
+#~ msgstr "Impossible de charger le module openid"
+
#~ msgid "automatic index generation"
#~ msgstr "Génération de l'index automatique"
msgstr ""
"Project-Id-Version: ikiwiki-gu\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2007-01-11 16:05+0530\n"
"Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
"Language-Team: Gujarati <team@utkarsh.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr "પ્રવેશ નિષ્ફળ, કદાચ તમારી કુકીઓ સક્રિય બનાવવી પડશે?"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr ""
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
#, fuzzy
msgid "Preferences"
msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ."
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr ""
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "તમારા પર પ્રતિબંધ છે."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "ક્ષતિ"
msgid "(feed entities escaped)"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "ફીડ ભાંગી ગયું XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "નવું પાનું %s બનાવે છે"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "નવું પાનું %s બનાવે છે"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "અહીં કોઇ તૂટેલ કડી નથી!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "નવું પાનું %s બનાવે છે"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgstr "%s બનાવે છે"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "%s સુધારે છે"
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "મેઇલ મોકલવામાં નિષ્ફળ"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgid "%s is an attachment, not a page."
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, fuzzy, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "જ્યારે શોધ પ્લગઇન ઉપયોગ કરતા હોવ ત્યારે %s સ્પષ્ટ કરવું જ પડશે"
msgid "prog not a valid graphviz program"
msgstr "કાર્યક્રમએ યોગ્ય ગ્રાફવિઝ કાર્યક્રમ નથી"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "કોઇપણ સ્માઇલીઓ ઉકેલવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
#, fuzzy
msgid "Image::Magick is not installed"
msgstr "પોલિગોન સ્થાપિત નથી"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "%s વાંચવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "માપ બદલવામાં નિષ્ફળ: %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, fuzzy, perl-format
msgid "failed to determine size of image %s"
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
msgid "missing pages parameter"
msgstr "ખોવાયેલ %s વિકલ્પ"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "આ શિર્ષકથી નવું પોસ્ટ ઉમેરો:"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવામાં આવતું નથી"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "ડોટ ચલાવવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s એ %s દ્વારા તાળું મરાયેલ છે અને તેમાં સુધારો કરી શકાશે નહી"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr "Markdown.pm પર્લ મોડ્યુલ (%s) અથવા /usr/bin/markdown (%s) લાવવામાં નિષ્ફળ"
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-
#: ../IkiWiki/Plugin/orphans.pm:56
#, fuzzy
msgid "All pages have other pages linking to them."
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "મેઇલ મોકલવામાં નિષ્ફળ"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "%s લખવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
#, fuzzy
msgid "failed to translate"
msgstr "ડોટ ચલાવવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr ""
msgid "missing id parameter"
msgstr "ખોવાયેલ આઇડી વિકલ્પ"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
#, fuzzy
msgid "missing tex code"
msgid "failed to generate image from code"
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "%s શોધે છે"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "જુનાં પાનાં દૂર કરે છે %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "રેન્ડર કરે છે %s, જે %s સાથે જોડાણ ધરાવે છે"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "દૂર કરે છે %s, હવે %s વડે રેન્ડર કરાતું નથી"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "રેન્ડર કરે છે %s, જે %s પર આધારિત છે"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "રેન્ડર કરે છે %s, તેનાં પાછળનાં જોડાણો સુધારવા માટે"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, fuzzy, perl-format
msgid "building %s"
msgstr "%s સુધારે છે"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: %s રેન્ડર કરી શકાતું નથી"
msgid "wrapper filename not specified"
msgstr "આવરણ ફાઇલનામ સ્પષ્ટ કરેલ નથી"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "સફળતાપૂર્વક પેદા કરેલ છે %s"
msgstr "ઉપયોગ: ikiwiki [વિકલ્પો] source dest"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "વીકીને તાજી કરે છે.."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "ચર્ચા"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "જ્યારે --cgi ઉપયોગ કરતાં હોય ત્યારે વીકીનું યુઆરએલ સ્પષ્ટ કરવું જ પડશે"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "%s પર શોધાયેલ લુપ %s પર ચલાવે છે %i ઉંડાણ પર"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "ટેમ્પલેટ %s મળ્યું નહી"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "વાંચી શકાતી નથી %s: %s"
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr ""
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
+
#~ msgid "You need to log in first."
#~ msgstr "તમારે પ્રથમ લોગ ઇન થવું પડશે."
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-08-31 14:18-0700\n"
+"POT-Creation-Date: 2015-06-09 22:32+0100\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"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:374
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:399
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr ""
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr ""
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr ""
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr ""
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:362
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:465 ../IkiWiki/CGI.pm:466 ../IkiWiki.pm:1533
+#: ../IkiWiki/CGI.pm:490 ../IkiWiki/CGI.pm:491 ../IkiWiki.pm:1652
msgid "Error"
msgstr ""
msgid "prohibited by allowed_attachments"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:225
+#: ../IkiWiki/Plugin/attachment.pm:234
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:298
+#: ../IkiWiki/Plugin/attachment.pm:307
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:349
+#: ../IkiWiki/Plugin/attachment.pm:358
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:367
+#: ../IkiWiki/Plugin/attachment.pm:376
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr ""
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr ""
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, perl-format
+msgid "creating calendar page %s"
+msgstr ""
+
#: ../IkiWiki/Plugin/comments.pm:128
#, perl-format
msgid "this comment needs %s"
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:221
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:283
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/comments.pm:383
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:417 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:420
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:437
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:444
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:569
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:571
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:588
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:658 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:717
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:758
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:921
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:931
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:90 ../IkiWiki/Plugin/passwordauth.pm:377
+msgid "Failed to send mail"
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:92
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:109
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgstr ""
#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
-#: ../IkiWiki.pm:1753
+#: ../IkiWiki.pm:1872
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, perl-format
+msgid "failed to get dimensions of %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr ""
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:355
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:396 ../IkiWiki/Plugin/template.pm:46
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, perl-format
msgid "failed to process template %s"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:735
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr ""
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr ""
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr ""
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, perl-format
-msgid "failed to load openid module: "
-msgstr ""
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr ""
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:343
msgid "Error creating account."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:297
+#: ../IkiWiki/Plugin/passwordauth.pm:303
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:304
+#: ../IkiWiki/Plugin/passwordauth.pm:310
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:334
+#: ../IkiWiki/Plugin/passwordauth.pm:340
msgid "Account creation successful. Now you can Login."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:344
+#: ../IkiWiki/Plugin/passwordauth.pm:350
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr ""
-
-#: ../IkiWiki/Plugin/passwordauth.pm:373
+#: ../IkiWiki/Plugin/passwordauth.pm:379
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:408
+#: ../IkiWiki/Plugin/passwordauth.pm:414
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:411
+#: ../IkiWiki/Plugin/passwordauth.pm:417
msgid "password reset denied"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:424
+#: ../IkiWiki/Plugin/passwordauth.pm:430
msgid "incorrect url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:427
+#: ../IkiWiki/Plugin/passwordauth.pm:433
msgid "access denied"
msgstr ""
msgid "failed to copy underlay PO file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:998
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1004
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1040
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1051
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1134
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1191 ../IkiWiki/Plugin/po.pm:1203
-#: ../IkiWiki/Plugin/po.pm:1242
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1201
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1254
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1297
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "Total votes:"
msgstr ""
-#: ../IkiWiki/Plugin/polygen.pm:42
+#: ../IkiWiki/Plugin/polygen.pm:43
msgid "polygen not installed"
msgstr ""
-#: ../IkiWiki/Plugin/polygen.pm:61
+#: ../IkiWiki/Plugin/polygen.pm:62
msgid "command failed"
msgstr ""
msgid "missing id parameter"
msgstr ""
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr ""
msgid "failed to generate image from code"
msgstr ""
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr ""
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:332 ../IkiWiki/Render.pm:393
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
-#: ../IkiWiki/Render.pm:349 ../IkiWiki/Render.pm:398
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:435
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:509
+#: ../IkiWiki/Render.pm:517
#, perl-format
msgid "removing obsolete %s"
msgstr ""
-#: ../IkiWiki/Render.pm:593
+#: ../IkiWiki/Render.pm:602
#, perl-format
msgid "building %s, which links to %s"
msgstr ""
-#: ../IkiWiki/Render.pm:602
+#: ../IkiWiki/Render.pm:611
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr ""
-#: ../IkiWiki/Render.pm:685 ../IkiWiki/Render.pm:767
+#: ../IkiWiki/Render.pm:694 ../IkiWiki/Render.pm:776
#, perl-format
msgid "building %s, which depends on %s"
msgstr ""
-#: ../IkiWiki/Render.pm:780
+#: ../IkiWiki/Render.pm:789
#, perl-format
msgid "building %s, to update its backlinks"
msgstr ""
-#: ../IkiWiki/Render.pm:883
+#: ../IkiWiki/Render.pm:901
#, perl-format
msgid "building %s"
msgstr ""
-#: ../IkiWiki/Render.pm:948
+#: ../IkiWiki/Render.pm:970
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr ""
msgid "wrapper filename not specified"
msgstr ""
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr ""
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr ""
msgstr ""
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr ""
-#: ../IkiWiki.pm:255
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr ""
-#: ../IkiWiki.pm:595
+#: ../IkiWiki.pm:656
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
-#: ../IkiWiki.pm:643
+#: ../IkiWiki.pm:731
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:683
+#: ../IkiWiki.pm:771
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:713
+#: ../IkiWiki.pm:801
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1515
+#: ../IkiWiki.pm:1634
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
-#: ../IkiWiki.pm:1709
+#: ../IkiWiki.pm:1828
#, perl-format
msgid "bad file name %s"
msgstr ""
-#: ../IkiWiki.pm:2019
+#: ../IkiWiki.pm:2141
#, perl-format
msgid "template %s not found"
msgstr ""
-#: ../IkiWiki.pm:2269
+#: ../IkiWiki.pm:2399
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2354
+#: ../IkiWiki.pm:2484
#, perl-format
msgid "invalid sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2375
+#: ../IkiWiki.pm:2505
#, perl-format
msgid "unknown sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2511
+#: ../IkiWiki.pm:2654
#, perl-format
msgid "cannot match pages: %s"
msgstr ""
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgstr ""
"Project-Id-Version: Ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2009-08-16 11:01+0100\n"
"Last-Translator: Luca Bruno <lucab@debian.org>\n"
"Language-Team: Italian TP <tp@lists.linux.it>\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
"possibile errore di configurazione: sslcookie è impostato, ma si sta "
"tentando un accesso via http, non https"
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr "errore nell'accesso, probabilmente i cookie sono disabilitati?"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr "La sessione è scaduta."
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "Entra"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Preferenze"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Amministrazione"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Preferenze salvate."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Avete ricevuto un ban."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Errore"
msgid "(feed entities escaped)"
msgstr "(entità del notiziario espanse con escape)"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "il notiziario ha fatto andare in crash XML::Feed."
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "creazione nuova pagina %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "errore nell'elaborazione:"
msgid "bad attachment filename"
msgstr "nome file dell'allegato non valido"
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr "carica allegato"
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s è un allegato, non una pagina."
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "creazione nuova pagina %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Non ci sono collegamenti rotti."
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "creazione nuova pagina %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "commento su %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
#, fuzzy
msgid "moderation"
msgstr "Moderazione commenti"
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "formato pagina %s non supportato"
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr "i commenti devono avere un contenuto"
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr "Anonimo"
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
#, fuzzy
msgid "Comment Moderation"
msgstr "Moderazione commenti"
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "nome pagina non valido"
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr "commento su %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "la pagina «%s» non esiste, impossibile commentarla"
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, fuzzy, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr "i commenti per la pagina «%s» sono chiusi"
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "i commenti per la pagina «%s» sono chiusi"
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr "commento trattenuto per moderazione"
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr "Il commento sarà pubblicato dopo la verifica del moderatore"
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr "Aggiunto commento"
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr "Aggiunto commento: %s"
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr "non siete autenticati come amministratore"
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr "Moderazione commenti"
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr "moderazione commento"
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, fuzzy, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
#, fuzzy
msgid "Comment"
msgstr "Commenti"
msgstr "creazione %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "modifica %s"
msgid "edittemplate %s registered for %s"
msgstr "edittemplate %s registrato per %s"
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Impossibile spedire il messaggio"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr "occorre specificare formato e testo"
msgid "%s is an attachment, not a page."
msgstr "%s è un allegato, non una pagina."
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr "non è permesso modificare %s"
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "non è permesso lavorare su un file in modalità %s"
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr "non è permesso cambiare la modalità del file"
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "non è permesso modificare %s"
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "errore nel compilare %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Occorre specificare %s quando si usa il plugin %s"
msgid "prog not a valid graphviz program"
msgstr "prog non è un programma graphviz valido"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr "tohighlight contiene il tipo di file sconosciuto «%s»"
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr "Sorgente: %s"
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "impossibile interpretare gli smile"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr "Image::Magick non è installato"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr "impossibile leggere %s: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "impossibile determinare la dimensione dell'immagine %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr "Formato dimensione «%s» non valido (dovrebbe essere LxA)"
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr "impossibile ridimensionare: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr "impossibile determinare la dimensione dell'immagine %s"
msgid "missing pages parameter"
msgstr "parametro pagine mancante"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "i parametri %s e %s non possono essere usati insieme"
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Aggiungere un nuovo articolo dal titolo:"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "errore nell'elaborazione:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client non trovato, impossibile inviare ping"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr "impossibile eseguire dot"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s è bloccata e non può essere modificata"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"multimarkdown è stato abilitato, ma Text::MultiMarkdown non è aggiornato"
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr "moderazione commento"
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "errore nel compilare %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr "Tutte le pagine hanno collegamenti in entrata da altre pagine."
"Nessun indirizzo email, impossibile inviare per email le istruzioni per "
"reimpostare la password."
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Impossibile spedire il messaggio"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=negotiated richiede che venga abilitato usedirs, verrà utilizzato "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr "file PO aggiornati"
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
"Impossibile eliminare una traduzione. Tuttavia, se la pagina principale è "
"stata eliminata anche le traduzioni lo saranno."
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
"Impossibile rinominare una traduzione. Tuttavia, se la pagina principale è "
"stata rinominata anche le traduzioni lo saranno."
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "Il file POT (%s) non esiste"
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "impossibile copiare il file PO di underlay in %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr "impossibile aggiornare %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "impossibile copiare il file POT in %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr "N/D"
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr "impossibile tradurre %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr "file PO obsoleti rimossi"
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr "impossibile scrivere %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr "impossibile tradurre"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"dati gettext non validi, tornare alle pagina precedente per continuare le "
"modifiche"
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, fuzzy, perl-format
msgid "need Digest::SHA to index %s"
msgstr "è necessario Digest::SHA1 per l'indice di %s"
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr "cerca"
msgid "missing id parameter"
msgstr "parametro id mancante"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+#, fuzzy
+msgid "first parameter must be the content"
+msgstr "i commenti devono avere un contenuto"
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr "codice tex mancante"
msgid "failed to generate image from code"
msgstr "impossibile generare l'immagine dal codice"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr "impossibile determinare l'id del committer non fidato %s"
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "scansione %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"collegamento simbolico trovato nel percorso srcdir (%s) -- impostare "
"allow_symlinks_before_srcdir per abilitare questa configurazione"
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "ignorato il file dal nome scorretto %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s ha diverse pagine sorgenti possibili"
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "rimozione della vecchia pagina %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, perl-format
msgid "building %s, which links to %s"
msgstr "compilazione di %s, che è collegato a %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "rimozione di %s, non più richiesto da %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, perl-format
msgid "building %s, which depends on %s"
msgstr "compilazione di %s, che dipende da %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "compilazione di %s, per aggiornare i collegamenti ai precedenti"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, perl-format
msgid "building %s"
msgstr "compilazione di %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: impossibile compilare %s"
msgid "wrapper filename not specified"
msgstr "nome del file del contenitore non specificato"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "errore nel compilare %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "%s generato con successo"
msgstr "utilizzo: ikiwiki [opzioni] sorgente destinazione"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+#, fuzzy
+msgid " ikiwiki --setup my.setup [options]"
msgstr " ikiwiki --setup configfile"
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "aggiornamento wiki..."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Discussione"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Occorre specificare l'url del wiki tramite --url quando si usa --cgi"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, fuzzy, perl-format
msgid "unsupported umask setting %s"
msgstr "formato pagina %s non supportato"
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr "impossibile usare più plugin rcs"
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr "impossibile caricare il plugin esterno per il plugin %s: %s"
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "ciclo del preprocessore individuato su %s alla profondità %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr "nome file %s scorretto"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "modello %s non trovato"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr "sì"
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "ordinamento %s sconosciuto"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "ordinamento %s sconosciuto"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr "impossibile trovare pagine corrispondenti: %s"
msgstr "Che sistema di controllo di revisione usare?"
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+#, fuzzy
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr "Quale utente (openid o del wiki) sarà l'amministratore?"
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr "Qual è il nome del dominio del server web?"
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "errore nel compilare %s"
+
#~ msgid "automatic index generation"
#~ msgstr "generazione automatica dell'indice"
msgstr ""
"Project-Id-Version: ikiwiki 1.51\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2007-04-27 22:05+0200\n"
"Last-Translator: Pawel Tecza <ptecza@net.icm.edu.pl>\n"
"Language-Team: Debian L10n Polish <debian-l10n-polish@lists.debian.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
"Nieudane logowanie. Proszę sprawdzić czy w przeglądarce włączone są "
"ciasteczka (ang. cookies)"
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr ""
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
#, fuzzy
msgid "Preferences"
msgstr "Preferencje zapisane."
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr ""
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Preferencje zapisane."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Twój dostęp został zabroniony przez administratora."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Błąd"
msgid "(feed entities escaped)"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "awaria kanału RSS w module XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "tworzenie nowej strony %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "awaria w trakcie przetwarzania:"
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "tworzenie nowej strony %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Wszystkie odnośniki są aktualne!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "tworzenie nowej strony %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "tworzenie %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "tworzenie %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgstr "tworzenie %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "edycja %s"
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Awaria w trakcie wysyłania wiadomości"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgid "%s is an attachment, not a page."
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, fuzzy, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Wtyczka do wyszukiwarka wymaga podania %s"
msgid "prog not a valid graphviz program"
msgstr "prog nie jest poprawnym programem graphviz"
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "awaria w trakcie przetwarzania emitoikonki"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
#, fuzzy
msgid "Image::Magick is not installed"
msgstr "wtyczka polygen nie jest zainstalowana"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, fuzzy, perl-format
msgid "failed to read %s: %s"
msgstr "awaria w trakcie odczytu %s: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "awaria w trakcie zmiany rozmiaru: %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, fuzzy, perl-format
msgid "failed to resize: %s"
msgstr "awaria w trakcie zmiany rozmiaru: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, fuzzy, perl-format
msgid "failed to determine size of image %s"
msgstr "awaria w trakcie zmiany rozmiaru: %s"
msgid "missing pages parameter"
msgstr "brakujący parametr %s"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr "Tytuł nowego wpisu"
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "awaria w trakcie przetwarzania:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
#, fuzzy
msgid "failed to run dot"
msgstr "awaria w trakcie uruchamiania dot"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
"strona %s jest tymczasowo zablokowana przez użytkownika %s i nie może być "
"teraz edytowana"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "awaria w trakcie kompilowania %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
#, fuzzy
msgid "All pages have other pages linking to them."
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Awaria w trakcie wysyłania wiadomości"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "awaria w trakcie zmiany rozmiaru: %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "awaria w trakcie zapisu %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
#, fuzzy
msgid "failed to translate"
msgstr "awaria w trakcie uruchamiania dot"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr ""
msgid "missing id parameter"
msgstr "brakujący parametr id"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
#, fuzzy
msgid "missing tex code"
msgid "failed to generate image from code"
msgstr "awaria w trakcie zmiany rozmiaru: %s"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "skanowanie %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "pomijanie nieprawidłowej nazwy pliku %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "usuwanie starej strony %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "renderowanie %s z odnośnikiem do %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "usuwanie %s nie tworzonego już przez %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "renderowanie %s zależącego od %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "renderowanie %s w celu aktualizacji powrotnych odnośników"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, fuzzy, perl-format
msgid "building %s"
msgstr "edycja %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: awaria w trakcie tworzenia %s"
msgid "wrapper filename not specified"
msgstr "nieokreślona nazwa pliku osłony"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "awaria w trakcie kompilowania %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "pomyślnie utworzono %s"
msgstr "użycie: ikiwiki [parametry] źródło cel"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "odświeżanie wiki..."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Dyskusja"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Użycie parametru --cgi wymaga podania adresu URL do wiki za pomocą parametru "
"--url"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "polecenie preprocesora %s wykryte w %s na głębokości %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "pomijanie nieprawidłowej nazwy pliku %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "nieznaleziony szablon %s"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "nieznany sposób sortowania %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "nieznany sposób sortowania %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "awaria w trakcie odczytu %s: %s"
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr ""
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "awaria w trakcie kompilowania %s"
+
#~ msgid "You need to log in first."
#~ msgstr "Proszę najpierw zalogować się."
$pagesources{$page}=$file; # used by po plugin functions
}
+$IkiWiki::phase = IkiWiki::PHASE_RENDER;
+
foreach my $lang (@{$config{po_slave_languages}}) {
my ($ll, $name)=IkiWiki::Plugin::po::splitlangpair($lang);
$config{destdir}="../underlays/locale/$ll";
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2007-01-10 23:47+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr ""
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
#, fuzzy
msgid "Preferences"
msgstr "Inställningar sparades."
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr ""
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Inställningar sparades."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Du är bannlyst."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Fel"
msgid "(feed entities escaped)"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "kanalen kraschade XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "skapar nya sidan %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "misslyckades med att behandla mall:"
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "skapar nya sidan %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Det finns inga trasiga länkar!"
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "skapar nya sidan %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "skapar %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "skapar %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgstr "skapar %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "redigerar %s"
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Misslyckades med att skicka e-post"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, fuzzy, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Måste ange %s när sökinsticket används"
msgid "prog not a valid graphviz program"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "misslyckades med att tolka smilisar, inaktiverar instick"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
#, fuzzy
msgid "Image::Magick is not installed"
msgstr "polygen inte installerad"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, fuzzy, perl-format
msgid "failed to read %s: %s"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "misslyckades med att skriva %s: %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, fuzzy, perl-format
msgid "failed to resize: %s"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, fuzzy, perl-format
msgid "failed to determine size of image %s"
msgstr "misslyckades med att skriva %s: %s"
msgid "missing pages parameter"
msgstr "mall saknar id-parameter"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "misslyckades med att behandla mall:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client hittades inte, pingar inte"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
#, fuzzy
msgid "failed to run dot"
msgstr "linkmap misslyckades att köra dot"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s är låst av %s och kan inte redigeras"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "misslyckades med att kompilera %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
#, fuzzy
msgid "All pages have other pages linking to them."
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Misslyckades med att skicka e-post"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
#, fuzzy
msgid "failed to translate"
msgstr "linkmap misslyckades att köra dot"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr ""
msgid "missing id parameter"
msgstr "mall saknar id-parameter"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr ""
msgid "failed to generate image from code"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "söker av %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "hoppar över felaktigt filnamn %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "tar bort gammal sida %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "ritar upp %s, vilken länkar till %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "tar bort %s, som inte längre ritas upp av %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "ritar upp %s, vilken är beroende av %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "ritar upp %s, för att uppdatera dess bakåtlänkar"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, fuzzy, perl-format
msgid "building %s"
msgstr "redigerar %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: kan inte rita upp %s"
msgid "wrapper filename not specified"
msgstr "filnamn för wrapper har inte angivits"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "misslyckades med att kompilera %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "generering av %s lyckades"
msgstr "användning: ikiwiki [flaggor] källa mål"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "uppdaterar wiki.."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Diskussion"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Måste ange url till wiki med --url när --cgi används"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "%s förbehandlingsslinga detekterades på %s, djup %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "hoppar över felaktigt filnamn %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "mallen %s hittades inte"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "okänd sorteringstyp %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "okänd sorteringstyp %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "kan inte läsa %s: %s"
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr ""
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "misslyckades med att kompilera %s"
+
#~ msgid "You need to log in first."
#~ msgstr "Du måste logga in först."
msgstr ""
"Project-Id-Version: ikiwiki 3.20091031\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2009-11-08 03:04+0200\n"
"Last-Translator: Recai Oktaş <roktas@debian.org>\n"
"Language-Team: Turkish <debian-l10n-turkish@lists.debian.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr "Giriş"
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
msgid "Preferences"
msgstr "Tercihler"
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr "Yönet"
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Tercihler kaydedildi."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Hata"
msgid "(feed entities escaped)"
msgstr "(özet akışı girdileri işlendi)"
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "özet akışı XML::Feed'in çakılmasına yol açtı!"
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "%s için yeni sayfa oluşturuluyor"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
msgid "failed to process template:"
msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "%s için yeni sayfa oluşturuluyor"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "%s için yeni sayfa oluşturuluyor"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, perl-format
msgid "this comment needs %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, perl-format
msgid "commenting on %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgstr ""
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr ""
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, perl-format
msgid "Failed to revert commit %s"
msgstr ""
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr ""
msgid "prog not a valid graphviz program"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
msgid "Image::Magick is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, perl-format
msgid "failed to read %s: %s"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, perl-format
+msgid "failed to get dimensions of %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, perl-format
msgid "failed to resize: %s"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, perl-format
msgid "failed to determine size of image %s"
msgstr ""
msgid "missing pages parameter"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, perl-format
msgid "failed to process template %s"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr ""
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
msgid "failed to run dot"
msgstr ""
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr ""
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, perl-format
-msgid "failed to load openid module: "
-msgstr ""
-
#: ../IkiWiki/Plugin/orphans.pm:56
msgid "All pages have other pages linking to them."
msgstr ""
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr ""
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, perl-format
msgid "failed to update %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, perl-format
msgid "failed to translate %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, perl-format
msgid "failed to write %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
msgid "failed to translate"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr ""
msgid "missing id parameter"
msgstr ""
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr ""
msgid "failed to generate image from code"
msgstr ""
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr ""
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, perl-format
msgid "removing obsolete %s"
msgstr ""
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, perl-format
msgid "building %s, which links to %s"
msgstr ""
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr ""
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, perl-format
msgid "building %s, which depends on %s"
msgstr ""
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, perl-format
msgid "building %s, to update its backlinks"
msgstr ""
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, perl-format
msgid "building %s"
msgstr ""
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr ""
msgid "wrapper filename not specified"
msgstr ""
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr ""
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr ""
msgstr ""
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr ""
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr ""
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, perl-format
msgid "bad file name %s"
msgstr ""
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr ""
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, perl-format
msgid "invalid sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, perl-format
msgid "cannot match pages: %s"
msgstr ""
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-04 10:16-0400\n"
+"POT-Creation-Date: 2015-05-14 10:41-0400\n"
"PO-Revision-Date: 2007-01-13 15:31+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: LocFactoryEditor 1.6fc1\n"
-#: ../IkiWiki/CGI.pm:200
+#: ../IkiWiki/CGI.pm:222
msgid ""
"probable misconfiguration: sslcookie is set, but you are attempting to login "
"via http, not https"
msgstr ""
-#: ../IkiWiki/CGI.pm:203
+#: ../IkiWiki/CGI.pm:225
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
-#: ../IkiWiki/CGI.pm:222 ../IkiWiki/CGI.pm:373
+#: ../IkiWiki/CGI.pm:244 ../IkiWiki/CGI.pm:396
msgid "Your login session has expired."
msgstr ""
-#: ../IkiWiki/CGI.pm:243
+#: ../IkiWiki/CGI.pm:265
msgid "Login"
msgstr ""
-#: ../IkiWiki/CGI.pm:244
+#: ../IkiWiki/CGI.pm:266
#, fuzzy
msgid "Preferences"
msgstr "Tùy thích đã được lưu."
-#: ../IkiWiki/CGI.pm:245
+#: ../IkiWiki/CGI.pm:267
msgid "Admin"
msgstr ""
-#: ../IkiWiki/CGI.pm:285
+#: ../IkiWiki/CGI.pm:307
msgid "Preferences saved."
msgstr "Tùy thích đã được lưu."
-#: ../IkiWiki/CGI.pm:337
+#: ../IkiWiki/CGI.pm:359
msgid "You are banned."
msgstr "Bạn bị cấm ra."
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1508
+#: ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:488 ../IkiWiki.pm:1624
msgid "Error"
msgstr "Lỗi"
msgid "(feed entities escaped)"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:556
+#: ../IkiWiki/Plugin/aggregate.pm:558
msgid "feed crashed XML::Feed!"
msgstr "nguồn tin đã gây ra XML::Feed sụp đổ."
-#: ../IkiWiki/Plugin/aggregate.pm:649
+#: ../IkiWiki/Plugin/aggregate.pm:652
#, perl-format
msgid "creating new page %s"
msgstr "đang tạo trang mới %s"
-#: ../IkiWiki/Plugin/aggregate.pm:677 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:682 ../IkiWiki/Plugin/edittemplate.pm:137
#, fuzzy
msgid "failed to process template:"
msgstr "mẫu không xử lý được:"
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:296
+#: ../IkiWiki/Plugin/attachment.pm:298
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:347
+#: ../IkiWiki/Plugin/attachment.pm:349
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:365
+#: ../IkiWiki/Plugin/attachment.pm:367
msgid "just uploaded"
msgstr ""
msgid "creating index page %s"
msgstr "đang tạo trang mới %s"
-#: ../IkiWiki/Plugin/blogspam.pm:119
+#: ../IkiWiki/Plugin/blogspam.pm:139
msgid ""
"Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
"\">blogspam</a>: "
msgid "There are no broken links!"
msgstr "Không có liên kết bị ngắt nào."
-#: ../IkiWiki/Plugin/comments.pm:124
+#: ../IkiWiki/Plugin/calendar.pm:115 ../IkiWiki/Plugin/calendar.pm:117
+#, perl-format
+msgid "building calendar for %s, its previous or next year has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:120 ../IkiWiki/Plugin/calendar.pm:122
+#, perl-format
+msgid "building calendar for %s/%s, its previous or next month has changed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/calendar.pm:131
+#, fuzzy, perl-format
+msgid "creating calendar page %s"
+msgstr "đang tạo trang mới %s"
+
+#: ../IkiWiki/Plugin/comments.pm:128
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/Plugin/comments.pm:127
+#: ../IkiWiki/Plugin/comments.pm:131
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:154 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:158 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:159
+#: ../IkiWiki/Plugin/comments.pm:163
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:217
+#: ../IkiWiki/Plugin/comments.pm:227
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:279
+#: ../IkiWiki/Plugin/comments.pm:285
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:375 ../IkiWiki/Plugin/comments.pm:379
+#: ../IkiWiki/Plugin/comments.pm:381 ../IkiWiki/Plugin/comments.pm:385
msgid "email replies to me"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:413 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/comments.pm:419 ../IkiWiki/Plugin/editpage.pm:96
#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:416
+#: ../IkiWiki/Plugin/comments.pm:422
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/Plugin/comments.pm:433
+#: ../IkiWiki/Plugin/comments.pm:439
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:440
+#: ../IkiWiki/Plugin/comments.pm:449
+#, perl-format
+msgid "comments on page '%s' are not allowed"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:456
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:565
+#: ../IkiWiki/Plugin/comments.pm:583
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:567
+#: ../IkiWiki/Plugin/comments.pm:585
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:580
+#: ../IkiWiki/Plugin/comments.pm:598
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:584
+#: ../IkiWiki/Plugin/comments.pm:602
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:654 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:676 ../IkiWiki/Plugin/userlist.pm:55
#: ../IkiWiki/Plugin/websetup.pm:272
msgid "you are not logged in as an admin"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:708
+#: ../IkiWiki/Plugin/comments.pm:735
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:749
+#: ../IkiWiki/Plugin/comments.pm:776
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:910
+#: ../IkiWiki/Plugin/comments.pm:939
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:920
+#: ../IkiWiki/Plugin/comments.pm:949
msgid "Comment"
msgstr ""
msgstr "đang tạo %s"
#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
-#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
-#: ../IkiWiki/Plugin/editpage.pm:454
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:414
+#: ../IkiWiki/Plugin/editpage.pm:456
#, perl-format
msgid "editing %s"
msgstr "đang sửa %s"
msgid "edittemplate %s registered for %s"
msgstr ""
+#: ../IkiWiki/Plugin/emailauth.pm:55
+msgid "Invalid email address."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:88 ../IkiWiki/Plugin/passwordauth.pm:371
+msgid "Failed to send mail"
+msgstr "Lỗi gửi thư"
+
+#: ../IkiWiki/Plugin/emailauth.pm:90
+msgid ""
+"You have been sent an email, with a link you can open to complete the login "
+"process."
+msgstr ""
+
+#: ../IkiWiki/Plugin/emailauth.pm:107
+msgid ""
+"Wrong login token length. Please check that you pasted in the complete login "
+"link from the email!"
+msgstr ""
+
#: ../IkiWiki/Plugin/format.pm:30
msgid "must specify format and text"
msgstr ""
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:789 ../IkiWiki/Plugin/git.pm:852
-#: ../IkiWiki.pm:1728
+#: ../IkiWiki/Plugin/git.pm:839 ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki.pm:1844
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:811
+#: ../IkiWiki/Plugin/git.pm:861
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:815
+#: ../IkiWiki/Plugin/git.pm:865
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:885
+#: ../IkiWiki/Plugin/git.pm:935
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:902
+#: ../IkiWiki/Plugin/git.pm:952
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:41
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:48
#, fuzzy, perl-format
msgid "Must specify %s when using the %s plugin"
msgstr "Cần phải xác định %s khi dùng bổ sung tìm kiếm"
msgid "prog not a valid graphviz program"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:83
+#: ../IkiWiki/Plugin/highlight.pm:91
#, perl-format
msgid "tohighlight contains unknown file type '%s'"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:94
+#: ../IkiWiki/Plugin/highlight.pm:102
#, perl-format
msgid "Source code: %s"
msgstr ""
-#: ../IkiWiki/Plugin/highlight.pm:180
+#: ../IkiWiki/Plugin/highlight.pm:198
msgid ""
"warning: highlight perl module not available; falling back to pass through"
msgstr ""
msgid "htmltidy failed to parse this html"
msgstr "lỗi phân tách hình cười nào nên tắt bổ sung"
-#: ../IkiWiki/Plugin/img.pm:70
+#: ../IkiWiki/Plugin/img.pm:75
#, fuzzy
msgid "Image::Magick is not installed"
msgstr "chưa cài đặt polygen"
-#: ../IkiWiki/Plugin/img.pm:74 ../IkiWiki/Plugin/img.pm:118
+#: ../IkiWiki/Plugin/img.pm:80 ../IkiWiki/Plugin/img.pm:125
#, fuzzy, perl-format
msgid "failed to read %s: %s"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/img.pm:80
+#: ../IkiWiki/Plugin/img.pm:83
+#, fuzzy, perl-format
+msgid "failed to get dimensions of %s"
+msgstr "lỗi ghi %s: %s"
+
+#: ../IkiWiki/Plugin/img.pm:93
#, perl-format
msgid "wrong size format \"%s\" (should be WxH)"
msgstr ""
-#: ../IkiWiki/Plugin/img.pm:122
+#: ../IkiWiki/Plugin/img.pm:129
#, fuzzy, perl-format
msgid "failed to resize: %s"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/img.pm:147
+#: ../IkiWiki/Plugin/img.pm:154
#, fuzzy, perl-format
msgid "failed to determine size of image %s"
msgstr "lỗi ghi %s: %s"
msgid "missing pages parameter"
msgstr "mẫu thiếu tham số id"
-#: ../IkiWiki/Plugin/inline.pm:209
+#: ../IkiWiki/Plugin/inline.pm:216
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:315
+#: ../IkiWiki/Plugin/inline.pm:322
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:319
+#: ../IkiWiki/Plugin/inline.pm:326
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:348
+#: ../IkiWiki/Plugin/inline.pm:359
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:400 ../IkiWiki/Plugin/template.pm:46
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "mẫu không xử lý được:"
-#: ../IkiWiki/Plugin/inline.pm:725
+#: ../IkiWiki/Plugin/inline.pm:739
msgid "RPC::XML::Client not found, not pinging"
msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
-#: ../IkiWiki/Plugin/linkmap.pm:81 ../IkiWiki/Plugin/linkmap.pm:88
-#: ../IkiWiki/Plugin/linkmap.pm:92 ../IkiWiki/Plugin/linkmap.pm:95
+#: ../IkiWiki/Plugin/linkmap.pm:94 ../IkiWiki/Plugin/linkmap.pm:101
+#: ../IkiWiki/Plugin/linkmap.pm:105 ../IkiWiki/Plugin/linkmap.pm:108
#, fuzzy
msgid "failed to run dot"
msgstr "linkmap không chạy dot được"
-#: ../IkiWiki/Plugin/linkmap.pm:85
+#: ../IkiWiki/Plugin/linkmap.pm:98
msgid "linkmap"
msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s bị %s khoá nên không thể sửa được"
+#: ../IkiWiki/Plugin/loginselector.pm:95
+msgid "Other"
+msgstr ""
+
+#: ../IkiWiki/Plugin/loginselector.pm:107
+msgid "Password"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:96
+#: ../IkiWiki/Plugin/mdwn.pm:97
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr "lỗi nạp mô-đun perl Markdown.pm (%s) hay « /usr/bin/markdown » (%s)"
msgid "comment notification:"
msgstr ""
-#: ../IkiWiki/Plugin/openid.pm:71
-#, fuzzy, perl-format
-msgid "failed to load openid module: "
-msgstr "lỗi biên dịch %s"
-
#: ../IkiWiki/Plugin/orphans.pm:56
#, fuzzy
msgid "All pages have other pages linking to them."
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:371
-msgid "Failed to send mail"
-msgstr "Lỗi gửi thư"
-
#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:467
+#: ../IkiWiki/Plugin/po.pm:473
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:490
+#: ../IkiWiki/Plugin/po.pm:496
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:510
+#: ../IkiWiki/Plugin/po.pm:516
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:956
+#: ../IkiWiki/Plugin/po.pm:975
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:970
+#: ../IkiWiki/Plugin/po.pm:989
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/po.pm:979
+#: ../IkiWiki/Plugin/po.pm:997
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/po.pm:985
+#: ../IkiWiki/Plugin/po.pm:1003
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/po.pm:1021
+#: ../IkiWiki/Plugin/po.pm:1039
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1032
+#: ../IkiWiki/Plugin/po.pm:1050
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1111
+#: ../IkiWiki/Plugin/po.pm:1133
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
-#: ../IkiWiki/Plugin/po.pm:1219
+#: ../IkiWiki/Plugin/po.pm:1190 ../IkiWiki/Plugin/po.pm:1202
+#: ../IkiWiki/Plugin/po.pm:1241
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1178
+#: ../IkiWiki/Plugin/po.pm:1200
#, fuzzy
msgid "failed to translate"
msgstr "linkmap không chạy dot được"
-#: ../IkiWiki/Plugin/po.pm:1231
+#: ../IkiWiki/Plugin/po.pm:1253
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1274
+#: ../IkiWiki/Plugin/po.pm:1296
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
msgid "rsync_command exited %d"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:199
+#: ../IkiWiki/Plugin/search.pm:216
#, perl-format
msgid "need Digest::SHA to index %s"
msgstr ""
-#: ../IkiWiki/Plugin/search.pm:253
+#: ../IkiWiki/Plugin/search.pm:270
msgid "search"
msgstr ""
msgid "missing id parameter"
msgstr "mẫu thiếu tham số id"
+#: ../IkiWiki/Plugin/templatebody.pm:42
+msgid "first parameter must be the content"
+msgstr ""
+
#: ../IkiWiki/Plugin/teximg.pm:73
msgid "missing tex code"
msgstr ""
msgid "failed to generate image from code"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/trail.pm:393
+#: ../IkiWiki/Plugin/trail.pm:392
#, perl-format
msgid "building %s, its previous or next page has changed"
msgstr ""
msgid "cannot determine id of untrusted committer %s"
msgstr ""
-#: ../IkiWiki/Render.pm:158
+#: ../IkiWiki/Render.pm:161
#, perl-format
msgid "scanning %s"
msgstr "đang quét %s"
-#: ../IkiWiki/Render.pm:281
+#: ../IkiWiki/Render.pm:284
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:317
+#: ../IkiWiki/Render.pm:335 ../IkiWiki/Render.pm:396
#, perl-format
msgid "skipping bad filename %s"
msgstr "đang bỏ qua tên tập tin sai %s"
-#: ../IkiWiki/Render.pm:333
+#: ../IkiWiki/Render.pm:352 ../IkiWiki/Render.pm:401
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:438
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:447
+#: ../IkiWiki/Render.pm:513
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "đang gỡ bỏ trang cũ %s"
-#: ../IkiWiki/Render.pm:531
+#: ../IkiWiki/Render.pm:598
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "đang vẽ %s mà liên kết tới %s"
-#: ../IkiWiki/Render.pm:540
+#: ../IkiWiki/Render.pm:607
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "đang gỡ bỏ %s, không còn được vẽ lại bởi %s"
-#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
+#: ../IkiWiki/Render.pm:690 ../IkiWiki/Render.pm:772
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "đang vẽ %s mà phụ thuộc vào %s"
-#: ../IkiWiki/Render.pm:718
+#: ../IkiWiki/Render.pm:785
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "đang vẽ %s để cập nhật các liên kết ngược của nó"
-#: ../IkiWiki/Render.pm:806
+#: ../IkiWiki/Render.pm:896
#, fuzzy, perl-format
msgid "building %s"
msgstr "đang sửa %s"
-#: ../IkiWiki/Render.pm:871
+#: ../IkiWiki/Render.pm:965
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: không thể vẽ %s"
msgid "wrapper filename not specified"
msgstr "chưa xác định tên tập tin bộ bao bọc"
-#: ../IkiWiki/Wrapper.pm:109
+#: ../IkiWiki/Wrapper.pm:122
msgid "Please wait"
msgstr ""
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:268
+#: ../IkiWiki/Wrapper.pm:288
#, perl-format
msgid "failed to compile %s"
msgstr "lỗi biên dịch %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:288
+#: ../IkiWiki/Wrapper.pm:308
#, perl-format
msgid "successfully generated %s"
msgstr "%s đã được tạo ra"
msgstr "cách sử dụng: ikiwiki [tùy chọn] nguồn đích"
#: ../ikiwiki.in:11
-msgid " ikiwiki --setup configfile"
+msgid " ikiwiki --setup my.setup [options]"
msgstr ""
#: ../ikiwiki.in:102
msgid "refreshing wiki.."
msgstr "đang làm tươi wiki.."
-#: ../IkiWiki.pm:248
+#: ../IkiWiki.pm:270
msgid "Discussion"
msgstr "Thảo luận"
-#: ../IkiWiki.pm:580
+#: ../IkiWiki.pm:648
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Cần phải xác định địa chỉ URL tới wiki với « --url » khi dùng « --cgi »"
-#: ../IkiWiki.pm:628
+#: ../IkiWiki.pm:723
#, perl-format
msgid "unsupported umask setting %s"
msgstr ""
-#: ../IkiWiki.pm:668
+#: ../IkiWiki.pm:763
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:698
+#: ../IkiWiki.pm:793
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1490
+#: ../IkiWiki.pm:1606
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "vòng lặp tiền xử lý %s được phát hiện trên %s ở độ sâu %i"
-#: ../IkiWiki.pm:1684
+#: ../IkiWiki.pm:1800
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "đang bỏ qua tên tập tin sai %s"
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:2113
#, perl-format
msgid "template %s not found"
msgstr "không tìm thấy mẫu %s"
-#: ../IkiWiki.pm:2234
+#: ../IkiWiki.pm:2371
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2318
+#: ../IkiWiki.pm:2456
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "kiểu sắp xếp không rõ %s"
-#: ../IkiWiki.pm:2339
+#: ../IkiWiki.pm:2477
#, perl-format
msgid "unknown sort type %s"
msgstr "kiểu sắp xếp không rõ %s"
-#: ../IkiWiki.pm:2475
+#: ../IkiWiki.pm:2626
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "không thể đọc %s: %s"
msgstr ""
#: ../auto.setup:21
-msgid "Which user (wiki account or openid) will be admin?"
+msgid "Which user (wiki account, openid, or email) will be admin?"
msgstr ""
#: ../auto.setup:24
msgid "What is the domain name of the web server?"
msgstr ""
+#, fuzzy
+#~ msgid "failed to load openid module: "
+#~ msgstr "lỗi biên dịch %s"
+
#~ msgid "You need to log in first."
#~ msgstr "Trước tiên bạn cần phải đăng nhập."
--- /dev/null
+#!/usr/bin/perl
+package IkiWiki;
+
+use warnings;
+use strict;
+use Test::More tests => 43;
+
+BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+BEGIN { use_ok("IkiWiki::Plugin::aggregate"); }
+BEGIN { use_ok("IkiWiki::Plugin::autoindex"); }
+BEGIN { use_ok("IkiWiki::Plugin::html"); }
+BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
+
+ok(! system("rm -rf t/tmp; mkdir t/tmp"));
+
+$config{verbose} = 1;
+$config{srcdir} = 't/tmp/in';
+$config{underlaydir} = 't/tmp/underlay';
+$config{underlaydirbase} = '.';
+$config{templatedir} = 'templates';
+$config{usedirs} = 1;
+$config{htmlext} = 'html';
+$config{wiki_file_chars} = "-[:alnum:]+/.:_";
+$config{userdir} = "users";
+$config{tagbase} = "tags";
+$config{default_pageext} = "mdwn";
+$config{wiki_file_prune_regexps} = [qr/^\./];
+$config{autoindex_commit} = 1;
+
+is(checkconfig(), 1);
+
+%oldrenderedfiles=%pagectime=();
+%pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
+%destsources=%renderedfiles=%pagecase=%pagestate=();
+
+# Pages that (we claim) were deleted in an earlier pass. We're using deleted,
+# not autofile, to test backwards compat.
+$wikistate{autoindex}{deleted}{deleted} = 1;
+$wikistate{autoindex}{deleted}{expunged} = 1;
+$wikistate{autoindex}{deleted}{reinstated} = 1;
+
+foreach my $page (qw(tags/numbers deleted/bar reinstated reinstated/foo gone/bar)) {
+ # we use a non-default extension for these, so they're distinguishable
+ # from programmatically-created pages
+ $pagesources{$page} = "$page.html";
+ $pagemtime{$page} = $pagectime{$page} = 1000000;
+ writefile("$page.html", "t/tmp/in", "your ad here");
+}
+
+# a directory containing only an internal page shouldn't be indexed
+$pagesources{"has_internal/internal"} = "has_internal/internal._aggregated";
+$pagemtime{"has_internal/internal"} = 123456789;
+$pagectime{"has_internal/internal"} = 123456789;
+writefile("has_internal/internal._aggregated", "t/tmp/in", "this page is internal");
+
+# a directory containing only a page in an underlay shouldn't be indexed
+# (arguably; see [[transient autocreated tagbase is not transient autoindexed]])
+$pagesources{"has_underlay/underlay"} = "has_underlay/underlay.mdwn";
+$pagemtime{"has_underlay/underlay"} = 123456789;
+$pagectime{"has_underlay/underlay"} = 123456789;
+writefile("has_underlay/underlay.mdwn", "t/tmp/underlay", "this page is in an underlay");
+
+# a directory containing only a transient page shouldn't be indexed
+# (arguably; see [[transient autocreated tagbase is not transient autoindexed]])
+$pagesources{"has_transient/transient"} = "has_transient/transient.mdwn";
+$pagemtime{"has_transient/transient"} = 123456789;
+$pagectime{"has_transient/transient"} = 123456789;
+writefile("has_transient/transient.mdwn", "t/tmp/in/.ikiwiki/transient", "this page is transient");
+
+# a directory containing only an attachment should be indexed
+$pagesources{"attached/pie.jpg"} = "attached/pie.jpg";
+$pagemtime{"attached/pie.jpg"} = 123456789;
+$pagectime{"attached/pie.jpg"} = 123456789;
+writefile("attached/pie.jpg", "t/tmp/in", "I lied, this isn't a real JPEG");
+
+# "gone" disappeared just before this refresh pass so it still has a mtime
+$pagemtime{gone} = $pagectime{gone} = 1000000;
+
+my %pages;
+my @del;
+
+IkiWiki::Plugin::autoindex::refresh();
+
+# this page is still on record as having been deleted, because it has
+# a reason to be re-created
+is($wikistate{autoindex}{autofile}{"deleted.mdwn"}, 1);
+is($autofiles{"deleted.mdwn"}{plugin}, "autoindex");
+%pages = ();
+@del = ();
+IkiWiki::gen_autofile("deleted.mdwn", \%pages, \@del);
+is_deeply(\%pages, {});
+is_deeply(\@del, []);
+ok(! -f "t/tmp/in/deleted.mdwn");
+
+# this page is tried as an autofile, but because it'll be in @del, it's not
+# actually created
+ok(! exists $wikistate{autoindex}{autofile}{"gone.mdwn"});
+%pages = ();
+@del = ("gone.mdwn");
+is($autofiles{"gone.mdwn"}{plugin}, "autoindex");
+IkiWiki::gen_autofile("gone.mdwn", \%pages, \@del);
+is_deeply(\%pages, {});
+is_deeply(\@del, ["gone.mdwn"]);
+ok(! -f "t/tmp/in/gone.mdwn");
+
+# this page does not exist and has no reason to be re-created, but we no longer
+# have a special case for that - see
+# [[todo/autoindex_should_use_add__95__autofile]] - so it won't be created
+# even if it gains subpages later
+is($wikistate{autoindex}{autofile}{"expunged.mdwn"}, 1);
+ok(! exists $autofiles{"expunged.mdwn"});
+ok(! -f "t/tmp/in/expunged.mdwn");
+
+# a directory containing only an internal page shouldn't be indexed
+ok(! exists $wikistate{autoindex}{autofile}{"has_internal.mdwn"});
+ok(! exists $autofiles{"has_internal.mdwn"});
+ok(! -f "t/tmp/in/has_internal.mdwn");
+
+# a directory containing only a page in an underlay shouldn't be indexed
+# (arguably; see [[transient autocreated tagbase is not transient autoindexed]])
+ok(! exists $wikistate{autoindex}{autofile}{"has_underlay.mdwn"});
+ok(! exists $autofiles{"has_underlay.mdwn"});
+ok(! -f "t/tmp/in/has_underlay.mdwn");
+
+# a directory containing only a transient page shouldn't be indexed
+# (arguably; see [[transient autocreated tagbase is not transient autoindexed]])
+ok(! exists $wikistate{autoindex}{autofile}{"has_transient.mdwn"});
+ok(! exists $autofiles{"has_transient.mdwn"});
+ok(! -f "t/tmp/in/has_transient.mdwn");
+
+# this page was re-created, but that no longer gets a special case
+# (see [[todo/autoindex_should_use_add__95__autofile]]) so it's the same as
+# deleted
+is($wikistate{autoindex}{autofile}{"reinstated.mdwn"}, 1);
+ok(! exists $autofiles{"reinstated.mdwn"});
+ok(! -f "t/tmp/in/reinstated.mdwn");
+
+# needs creating (deferred; part of the autofile mechanism now)
+ok(! exists $wikistate{autoindex}{autofile}{"tags.mdwn"});
+%pages = ();
+@del = ();
+is($autofiles{"tags.mdwn"}{plugin}, "autoindex");
+IkiWiki::gen_autofile("tags.mdwn", \%pages, \@del);
+is_deeply(\%pages, {"t/tmp/in/tags" => 1});
+is_deeply(\@del, []);
+ok(-s "t/tmp/in/tags.mdwn");
+
+# needs creating because of an attachment
+ok(! exists $wikistate{autoindex}{autofile}{"attached.mdwn"});
+%pages = ();
+@del = ();
+is($autofiles{"attached.mdwn"}{plugin}, "autoindex");
+IkiWiki::gen_autofile("attached.mdwn", \%pages, \@del);
+is_deeply(\%pages, {"t/tmp/in/attached" => 1});
+is_deeply(\@del, []);
+ok(-s "t/tmp/in/attached.mdwn");
+
+1;
use warnings;
use strict;
-use Test::More tests => 38;
+use Test::More tests => 50;
BEGIN { use_ok("IkiWiki"); }
BEGIN { use_ok("IkiWiki::Render"); }
ok(! system("rm -rf t/tmp; mkdir t/tmp"));
$config{verbose} = 1;
-$config{srcdir} = 't/tmp';
-$config{underlaydir} = 't/tmp';
+$config{srcdir} = 't/tmp/in';
+$config{underlaydir} = 't/tmp/underlay';
$config{underlaydirbase} = '.';
$config{templatedir} = 'templates';
$config{usedirs} = 1;
# from programmatically-created pages
$pagesources{$page} = "$page.html";
$pagemtime{$page} = $pagectime{$page} = 1000000;
- writefile("$page.html", "t/tmp", "your ad here");
+ writefile("$page.html", "t/tmp/in", "your ad here");
}
# a directory containing only an internal page shouldn't be indexed
$pagesources{"has_internal/internal"} = "has_internal/internal._aggregated";
$pagemtime{"has_internal/internal"} = 123456789;
$pagectime{"has_internal/internal"} = 123456789;
-writefile("has_internal/internal._aggregated", "t/tmp", "this page is internal");
+writefile("has_internal/internal._aggregated", "t/tmp/in", "this page is internal");
+
+# a directory containing only a page in an underlay is now indexed
+# (see [[transient autocreated tagbase is not transient autoindexed]])
+$pagesources{"has_underlay/underlay"} = "has_underlay/underlay.mdwn";
+$pagemtime{"has_underlay/underlay"} = 123456789;
+$pagectime{"has_underlay/underlay"} = 123456789;
+writefile("has_underlay/underlay.mdwn", "t/tmp/underlay", "this page is in an underlay");
+
+# a directory containing only a transient page is now indexed
+# (see [[transient autocreated tagbase is not transient autoindexed]])
+$pagesources{"has_transient/transient"} = "has_transient/transient.mdwn";
+$pagemtime{"has_transient/transient"} = 123456789;
+$pagectime{"has_transient/transient"} = 123456789;
+writefile("has_transient/transient.mdwn", "t/tmp/in/.ikiwiki/transient", "this page is transient");
# a directory containing only an attachment should be indexed
$pagesources{"attached/pie.jpg"} = "attached/pie.jpg";
$pagemtime{"attached/pie.jpg"} = 123456789;
$pagectime{"attached/pie.jpg"} = 123456789;
-writefile("attached/pie.jpg", "t/tmp", "I lied, this isn't a real JPEG");
+writefile("attached/pie.jpg", "t/tmp/in", "I lied, this isn't a real JPEG");
# "gone" disappeared just before this refresh pass so it still has a mtime
$pagemtime{gone} = $pagectime{gone} = 1000000;
IkiWiki::gen_autofile("deleted.mdwn", \%pages, \@del);
is_deeply(\%pages, {});
is_deeply(\@del, []);
-ok(! -f "t/tmp/deleted.mdwn");
+ok(! -f "t/tmp/in/deleted.mdwn");
# this page is tried as an autofile, but because it'll be in @del, it's not
# actually created
IkiWiki::gen_autofile("gone.mdwn", \%pages, \@del);
is_deeply(\%pages, {});
is_deeply(\@del, ["gone.mdwn"]);
-ok(! -f "t/tmp/gone.mdwn");
+ok(! -f "t/tmp/in/gone.mdwn");
# this page does not exist and has no reason to be re-created, but we no longer
# have a special case for that - see
# even if it gains subpages later
is($wikistate{autoindex}{autofile}{"expunged.mdwn"}, 1);
ok(! exists $autofiles{"expunged.mdwn"});
-ok(! -f "t/tmp/expunged.mdwn");
+ok(! -f "t/tmp/in/expunged.mdwn");
# a directory containing only an internal page shouldn't be indexed
ok(! exists $wikistate{autoindex}{autofile}{"has_internal.mdwn"});
ok(! exists $autofiles{"has_internal.mdwn"});
-ok(! -f "t/tmp/has_internal.mdwn");
+ok(! -f "t/tmp/in/has_internal.mdwn");
+
+# a directory containing only a page in an underlay is now indexed
+# (see [[transient autocreated tagbase is not transient autoindexed]])
+ok(! exists $wikistate{autoindex}{autofile}{"has_underlay.mdwn"});
+is($autofiles{"has_underlay.mdwn"}{plugin}, "autoindex");
+%pages = ();
+@del = ();
+IkiWiki::gen_autofile("has_underlay.mdwn", \%pages, \@del);
+is_deeply(\%pages, {"t/tmp/in/has_underlay" => 1});
+is_deeply(\@del, []);
+ok(! -f "t/tmp/in/has_underlay.mdwn");
+ok(-s "t/tmp/in/.ikiwiki/transient/has_underlay.mdwn");
+
+# a directory containing only a transient page is now indexed
+# (see [[transient autocreated tagbase is not transient autoindexed]])
+ok(! exists $wikistate{autoindex}{autofile}{"has_transient.mdwn"});
+is($autofiles{"has_transient.mdwn"}{plugin}, "autoindex");
+%pages = ();
+@del = ();
+IkiWiki::gen_autofile("has_transient.mdwn", \%pages, \@del);
+is_deeply(\%pages, {"t/tmp/in/has_transient" => 1});
+is_deeply(\@del, []);
+ok(! -f "t/tmp/in/has_transient.mdwn");
+ok(-s "t/tmp/in/.ikiwiki/transient/has_transient.mdwn");
# this page was re-created, but that no longer gets a special case
# (see [[todo/autoindex_should_use_add__95__autofile]]) so it's the same as
# deleted
is($wikistate{autoindex}{autofile}{"reinstated.mdwn"}, 1);
ok(! exists $autofiles{"reinstated.mdwn"});
-ok(! -f "t/tmp/reinstated.mdwn");
+ok(! -f "t/tmp/in/.ikiwiki/transient/reinstated.mdwn");
# needs creating (deferred; part of the autofile mechanism now)
ok(! exists $wikistate{autoindex}{autofile}{"tags.mdwn"});
@del = ();
is($autofiles{"tags.mdwn"}{plugin}, "autoindex");
IkiWiki::gen_autofile("tags.mdwn", \%pages, \@del);
-is_deeply(\%pages, {"t/tmp/tags" => 1});
+is_deeply(\%pages, {"t/tmp/in/tags" => 1});
is_deeply(\@del, []);
-ok(! -s "t/tmp/tags.mdwn");
-ok(-s "t/tmp/.ikiwiki/transient/tags.mdwn");
+ok(! -s "t/tmp/in/tags.mdwn");
+ok(-s "t/tmp/in/.ikiwiki/transient/tags.mdwn");
# needs creating because of an attachment
ok(! exists $wikistate{autoindex}{autofile}{"attached.mdwn"});
@del = ();
is($autofiles{"attached.mdwn"}{plugin}, "autoindex");
IkiWiki::gen_autofile("attached.mdwn", \%pages, \@del);
-is_deeply(\%pages, {"t/tmp/attached" => 1});
+is_deeply(\%pages, {"t/tmp/in/attached" => 1});
is_deeply(\@del, []);
-ok(-s "t/tmp/.ikiwiki/transient/attached.mdwn");
+ok(-s "t/tmp/in/.ikiwiki/transient/attached.mdwn");
1;
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More 'no_plan';
+use Test::More;
+
+my $installed = $ENV{INSTALLED_TESTS};
ok(! system("rm -rf t/tmp; mkdir t/tmp"));
-ok(! system("make -s ikiwiki.out"));
-ok(! system("make underlay_install DESTDIR=`pwd`/t/tmp/install PREFIX=/usr >/dev/null"));
+
+my @command;
+if ($installed) {
+ @command = qw(env LC_ALL=C ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ ok(! system("make underlay_install DESTDIR=`pwd`/t/tmp/install PREFIX=/usr >/dev/null"));
+ @command = qw(env LC_ALL=C perl -I. ./ikiwiki.out
+ --underlaydir=t/tmp/install/usr/share/ikiwiki/basewiki
+ --set underlaydirbase=t/tmp/install/usr/share/ikiwiki
+ --templatedir=templates);
+}
foreach my $plugin ("", "listdirectives") {
- ok(! system("LC_ALL=C perl -I. ./ikiwiki.out -rebuild -plugin brokenlinks ".
+ ok(! system(@command, qw(--rebuild --plugin brokenlinks),
# always enabled because pages link to it conditionally,
# which brokenlinks cannot handle properly
- "-plugin smiley ".
- ($plugin ? "-plugin $plugin " : "").
- "-underlaydir=t/tmp/install/usr/share/ikiwiki/basewiki ".
- "-set underlaydirbase=t/tmp/install/usr/share/ikiwiki ".
- "-templatedir=templates t/basewiki_brokenlinks t/tmp/out"));
+ qw(--plugin smiley),
+ ($plugin ? ("--plugin", $plugin) : ()),
+ qw(t/basewiki_brokenlinks t/tmp/out)));
my $result=`grep 'no broken links' t/tmp/out/index.html`;
ok(length($result));
if (! length $result) {
ok(! system("rm -rf t/tmp/out t/basewiki_brokenlinks/.ikiwiki"));
}
ok(! system("rm -rf t/tmp"));
+
+done_testing();
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More 'no_plan';
+use Test::More;
use IkiWiki;
ok(! system("rm -rf t/tmp"));
ok(! system("cp -R t/tinyblog t/tmp/in"));
ok(mkdir "t/tmp/in/post" or -d "t/tmp/in/post");
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
my $comment;
$comment = <<EOF;
ok(utime(333333333, 333333333, "t/tmp/in/post/comment_1._comment"));
# Build the wiki
-ok(! system("make -s ikiwiki.out"));
-ok(! system("perl -I. ./ikiwiki.out -verbose -plugin comments -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -set comments_pagespec='*' -templatedir=templates t/tmp/in t/tmp/out"));
+ok(! system(@command, qw(--verbose --plugin comments --url=http://example.com --cgiurl=http://example.com/ikiwiki.cgi --rss --atom --set comments_pagespec=* t/tmp/in t/tmp/out)));
# Check that the comments are in the right order
my $content = slurp("t/tmp/out/post/index.html");
ok(defined $content);
ok($content =~ m/I conquered.*I explored.*I landed/s);
+
+done_testing();
use strict;
use Test::More tests => 106;
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ ok(1, "running installed");
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
# setup
my $srcdir="t/tmp/src";
my $destdir="t/tmp/dest";
-ok(! system("make -s ikiwiki.out"));
# runs ikiwiki to build test site
sub runiki {
my $testdesc=shift;
- ok((! system("perl -I. ./ikiwiki.out -plugin txt -plugin rawhtml -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates $srcdir $destdir @_")),
+ ok((! system(@command, qw(--plugin txt --plugin rawhtml),
+ $srcdir, $destdir, @_)),
$testdesc);
}
sub refreshiki {
use Test::More; my $total_tests = 72;
use IkiWiki;
+my $installed = $ENV{INSTALLED_TESTS};
+
my $default_test_methods = '^test_*';
my @required_programs = qw(
cvs
$config{wrapper} = $config{cvs_wrapper};
require IkiWiki::Wrapper;
- {
- no warnings 'once';
+ if ($installed) {
$IkiWiki::program_to_wrap = 'ikiwiki.out';
- # XXX substitute its interpreter to Makefile's $(PERL)
- # XXX best solution: do this to all scripts during build
}
+ else {
+ $IkiWiki::program_to_wrap = `which ikiwiki`;
+ }
+ # XXX substitute its interpreter to Makefile's $(PERL)
+ # XXX best solution: do this to all scripts during build
IkiWiki::gen_wrapper();
my $cvs = "cvs -d $config{cvsrepo}";
die $@;
}
}
-use Test::More tests => 22;
+use Test::More tests => 26;
BEGIN { use_ok("IkiWiki"); }
IkiWiki::loadplugins();
IkiWiki::checkconfig();
+my $makerepo;
+if ($ENV{INSTALLED_TESTS}) {
+ $makerepo = "ikiwiki-makerepo";
+}
+else {
+ $makerepo = "./ikiwiki-makerepo";
+}
+
ok (mkdir($config{srcdir}));
-is (system("./ikiwiki-makerepo git $config{srcdir} $dir/repo"), 0);
+is (system("$makerepo git $config{srcdir} $dir/repo"), 0);
my @changes;
@changes = IkiWiki::rcs_recentchanges(3);
q{path separators are preserved when UTF-8scaping filename}
);
+# do a clean checkout to verify that "empty ident not allowed" is avoided
+ok(! system("rm", "-rf", $config{srcdir}));
+ok(! system("git", "clone", "$dir/repo", $config{srcdir}));
+
+writefile('unconfigured_author.mdwn', $config{srcdir}, 'I am an unconfigured git author');
+IkiWiki::rcs_add("unconfigured_author.mdwn");
+IkiWiki::rcs_commit(
+ file => "unconfigured_author.mdwn",
+ message => "hello, world",
+ token => "moo",
+);
+
+@changes = IkiWiki::rcs_recentchanges(6);
+
+is($#changes, 5);
+is($changes[0]{pages}[0]{"page"}, "unconfigured_author");
+
system "rm -rf $dir";
+++ /dev/null
-#!/usr/bin/perl
-use warnings;
-use strict;
-use Test::More;
-
-my @pages;
-
-BEGIN {
- @pages=qw(index features news plugins/map security);
- if (! -x "/usr/bin/validate") {
- plan skip_all => "/usr/bin/validate html validator not present";
- }
- else {
- plan(tests => int @pages + 2);
- }
- use_ok("IkiWiki");
-}
-
-# Have to build the html pages first.
-# Note that just building them like this doesn't exersise all the possible
-# html that can be generated, in particular it misses some of the action
-# links at the top, etc.
-ok(system("make >/dev/null") == 0);
-
-foreach my $page (@pages) {
- print "# Validating $page\n";
- ok(system("validate html/$page.html") == 0);
-}
-
-# TODO: validate form output html
use warnings;
use strict;
use Test::More;
+plan(skip_all => "Image::Magick not available")
+ unless eval q{use Image::Magick; 1};
-BEGIN { use_ok("IkiWiki"); }
-BEGIN { use_ok("Image::Magick"); }
+use IkiWiki;
+
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
+push @command, qw(--set usedirs=0 --plugin img t/tmp/in t/tmp/out --verbose);
+
+my $magick = new Image::Magick;
+my $SVGS_WORK = defined $magick->QueryFormat("svg");
ok(! system("rm -rf t/tmp; mkdir -p t/tmp/in"));
ok(! system("cp t/img/redsquare.png t/tmp/in/redsquare.png"));
-writefile("emptysquare.svg", "t/tmp/in", '<svg width="30" height="30"/>');
+# colons in filenames are a corner case for img
+ok(! system("cp t/img/redsquare.png t/tmp/in/hello:world.png"));
+ok(! system("cp t/img/redsquare.png t/tmp/in/a:b:c.png"));
+ok(! system("cp t/img/redsquare.png t/tmp/in/a:b:c:d.png"));
+ok(! system("cp t/img/redsquare.png t/tmp/in/a:b:c:d:e:f:g:h:i:j.png"));
+
+if ($SVGS_WORK) {
+ writefile("emptysquare.svg", "t/tmp/in",
+ '<svg width="30" height="30"><rect x="0" y="0" width="30" height="30" fill="blue"/></svg>');
+}
+
# using different image sizes for different pages, so the pagenumber selection can be tested easily
ok(! system("cp t/img/twopages.pdf t/tmp/in/twopages.pdf"));
+my $maybe_svg_img = "";
+if ($SVGS_WORK) {
+ $maybe_svg_img = "[[!img emptysquare.svg size=10x]]";
+}
+
writefile("imgconversions.mdwn", "t/tmp/in", <<EOF
[[!img redsquare.png]]
[[!img redsquare.png size=10x]]
[[!img redsquare.png size=30x50]] expecting 30x30
-[[!img emptysquare.svg size=10x]]
+[[!img hello:world.png size=x8]] expecting 8x8
+[[!img a:b:c.png size=x4]]
+[[!img a:b:c:d:e:f:g:h:i:j.png size=x6]]
+$maybe_svg_img
[[!img twopages.pdf size=12x]]
[[!img twopages.pdf size=16x pagenumber=1]]
EOF
);
+ok(utime(333333333, 333333333, "t/tmp/in/imgconversions.mdwn"));
-ok(! system("make -s ikiwiki.out"));
-
-my $command = "perl -I. ./ikiwiki.out -set usedirs=0 -plugin img t/tmp/in t/tmp/out -verbose";
-
-ok(! system($command));
+ok(! system(@command));
sub size($) {
my $filename = shift;
my $im = Image::Magick->new();
- my $r = $im->Read($filename);
+ my $r = $im->Read(":$filename");
return "no image" if $r;
my $w = $im->Get("width");
my $h = $im->Get("height");
is(size("$outpath/10x-redsquare.png"), "10x10");
ok(! -e "$outpath/30x-redsquare.png");
ok($outhtml =~ /width="30" height="30".*expecting 30x30/);
-# if this fails, you need libmagickcore-6.q16-2-extra installed
-is(size("$outpath/10x-emptysquare.png"), "10x10");
+
+if ($SVGS_WORK) {
+ # if this fails, you need libmagickcore-6.q16-2-extra installed
+ is(size("$outpath/10x-emptysquare.png"), "10x10");
+}
+
is(size("$outpath/12x-twopages.png"), "12x12");
is(size("$outpath/16x-p1-twopages.png"), "16x2");
+ok($outhtml =~ /width="8" height="8".*expecting 8x8/);
+is(size("$outpath/x8-hello:world.png"), "8x8");
+is(size("$outpath/x4-a:b:c.png"), "4x4");
+is(size("$outpath/x6-a:b:c:d:e:f:g:h:i:j.png"), "6x6");
# now let's remove them again
if (1) { # for easier testing
writefile("imgconversions.mdwn", "t/tmp/in", "nothing to see here");
- ok(! system("$command --refresh"));
+ ok(! system(@command, "--refresh"));
ok(! -e "$outpath/10x-simple.png");
ok(! -e "$outpath/10x-simple-svg.png");
ok(! -e "$outpath/10x-simple-pdf.png");
ok(! -e "$outpath/10x-p1-simple-pdf.png");
+ ok(! -e "$outpath/x8-hello:world.png");
+ ok(! -e "$outpath/x4-a:b:c.png");
+ ok(! -e "$outpath/x6-a:b:c:d:e:f:g:h:i:j.png");
# cleanup
ok(! system("rm -rf t/tmp"));
use Test::More;
use IkiWiki;
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
+push @command, qw(--set usedirs=0 --plugin inline
+ --url=http://example.com --cgiurl=http://example.com/ikiwiki.cgi
+ --rss --atom t/tmp/in t/tmp/out --verbose);
+
my $blob;
+my $add_new_post = gettext("Add a new post titled:");
+
ok(! system("rm -rf t/tmp"));
ok(! system("mkdir t/tmp"));
write_old_file("$page.mdwn", "this page is {$page}");
}
-ok(! system("make -s ikiwiki.out"));
-
-my $command = "perl -I. ./ikiwiki.out -set usedirs=0 -plugin inline -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates t/tmp/in t/tmp/out -verbose";
-
-ok(! system($command));
-
-ok(! system("$command -refresh"));
+ok(! system(@command));
+ok(! system(@command, "--refresh"));
$blob = readfile("t/tmp/out/protagonists.html");
-like($blob, qr{Add a new post}, 'rootpage=yes gives postform');
+like($blob, qr{\Q$add_new_post\E}, 'rootpage=yes gives postform');
like($blob, qr{<input type="hidden" name="from" value="protagonists/new"},
'explicit rootpage is /protagonists/new');
$blob = readfile("t/tmp/out/friends.html");
-like($blob, qr{Add a new post}, 'postform=yes forces postform');
+like($blob, qr{\Q$add_new_post\E}, 'postform=yes forces postform');
like($blob, qr{<input type="hidden" name="from" value="friends"},
'implicit rootpage is /friends');
-like($blob, qr[this page is {friends/garrus}.*this page is {friends/liara}]s,
+like($blob, qr[this page is \{friends/garrus}.*this page is \{friends/liara}]s,
'first two pages in desired sort order are present');
unlike($blob, qr{friends/(?:midna|telma)},
'pages excluded by limit should not be present');
$blob = readfile("t/tmp/out/antagonists.html");
-unlike($blob, qr{Add a new post}, 'default is no postform');
+unlike($blob, qr{\Q$add_new_post\E}, 'default is no postform');
$blob = readfile("t/tmp/out/enemies.html");
-unlike($blob, qr{Add a new post}, 'postform=no forces no postform');
-like($blob, qr[this page is {enemies/zant}.*this page is {enemies/rachni}]s,
+unlike($blob, qr{\Q$add_new_post\E}, 'postform=no forces no postform');
+like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
'first two pages in reversed sort order are present');
unlike($blob, qr{enemies/(?:benezia|geth)},
'pages excluded by show should not be present');
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More;
+use File::Path qw(make_path remove_tree);
+
+BEGIN { use_ok("IkiWiki"); }
+
+make_path("t/tmp/libdir");
+make_path("t/tmp/libdirs");
+make_path("t/tmp/libdirs/1");
+make_path("t/tmp/libdirs/2");
+
+writefile("IkiWiki/Plugin/test_plugin_in_libdir.pm", "t/tmp/libdir", "#");
+writefile("IkiWiki/Plugin/test_plugin_in_libdir_1.pm", "t/tmp/libdirs/1", "#");
+writefile("IkiWiki/Plugin/test_plugin_in_libdir_2.pm", "t/tmp/libdirs/2", "#");
+writefile("plugins/ext_plugin_in_libdir", "t/tmp/libdir", "#!/bin/true");
+writefile("plugins/ext_plugin_in_libdir_1", "t/tmp/libdirs/1", "#!/bin/true");
+writefile("plugins/ext_plugin_in_libdir_2", "t/tmp/libdirs/2", "#!/bin/true");
+ok(chmod 0755, "t/tmp/libdir/plugins/ext_plugin_in_libdir");
+ok(chmod 0755, "t/tmp/libdirs/1/plugins/ext_plugin_in_libdir_1");
+ok(chmod 0755, "t/tmp/libdirs/2/plugins/ext_plugin_in_libdir_2");
+
+%config=IkiWiki::defaultconfig();
+$config{srcdir}=$config{destdir}="/dev/null";
+$config{libdir}="t/tmp/libdir";
+$config{libdirs}=["t/tmp/libdirs/1", "t/tmp/libdirs/2"];
+
+my @plugins = IkiWiki::listplugins();
+
+ok(grep { m/^test_plugin_in_libdir$/ } @plugins);
+ok(grep { m/^test_plugin_in_libdir_1$/ } @plugins);
+ok(grep { m/^test_plugin_in_libdir_2$/ } @plugins);
+
+ok(grep { m/^ext_plugin_in_libdir$/ } @plugins);
+ok(grep { m/^ext_plugin_in_libdir_1$/ } @plugins);
+ok(grep { m/^ext_plugin_in_libdir_2$/ } @plugins);
+
+remove_tree("t/tmp/libdir");
+remove_tree("t/tmp/libdirs");
+
+done_testing;
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More;
+use IkiWiki;
+
+my $tmp = 't/tmp';
+my $srcdir = "$tmp/in";
+my $destdir = "$tmp/out";
+
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
+push @command, qw(--plugin meta --disable-plugin htmlscrubber);
+push @command, $srcdir, $destdir;
+
+sub write_build_read_compare {
+ my ($pagename, $input, $expected_output) = @_;
+ ok(! system("mkdir -p $srcdir"), q{setup});
+ writefile("$pagename.mdwn", $srcdir, $input);
+ ok(! system(@command), q{build});
+ like(readfile("$destdir/$pagename/index.html"), $expected_output);
+ ok(! system("rm -rf $tmp"), q{teardown});
+}
+
+write_build_read_compare(
+ 'title',
+ q{[[!meta title="a page about bar"]]},
+ qr{<title>a page about bar</title>},
+);
+
+write_build_read_compare(
+ 'description',
+ q{[[!meta description="a page about bar"]]},
+ qr{<meta name="description" content="a page about bar" />},
+);
+
+write_build_read_compare(
+ 'guid',
+ q{[[!meta guid="12345"]]},
+ qr{<meta name="guid" content="12345" />},
+);
+
+write_build_read_compare(
+ 'license',
+ q{[[!meta license="you get to keep both pieces"]]},
+ qr{<div class="pagelicense">},
+);
+
+write_build_read_compare(
+ 'copyright',
+ q{[[!meta copyright="12345"]]},
+ qr{<div class="pagecopyright">},
+);
+
+write_build_read_compare(
+ 'enclosure',
+ q{[[!meta enclosure="ikiwiki/login-selector/wordpress.png"]]},
+ qr{<meta name="enclosure" content="/ikiwiki/login-selector/wordpress.png" />},
+);
+
+write_build_read_compare(
+ 'author',
+ q{[[!meta author="Noodly J. Appendage"]]},
+ qr{<meta name="author" content="Noodly J. Appendage" />},
+);
+
+write_build_read_compare(
+ 'authorurl',
+ q{[[!meta authorurl="http://noodly.appendage"]]},
+ qr{<meta name="authorurl" content="http://noodly.appendage" />},
+);
+
+write_build_read_compare(
+ 'permalink',
+ q{[[!meta permalink="http://noodly.appendage"]]},
+ qr{<link rel="bookmark" href="http://noodly.appendage" />},
+);
+
+write_build_read_compare(
+ 'date',
+ q{[[!meta date="12345"]]},
+ qr{<meta name="date" content="12345" />},
+);
+
+write_build_read_compare(
+ 'updated',
+ q{[[!meta updated="12345"]]},
+ qr{<meta name="updated" content="12345" />},
+);
+
+#write_build_read_compare(
+# 'stylesheet',
+# q{[[!meta stylesheet="wonka.css"]]},
+# qr{<link href="wonka.css"},
+#);
+
+#write_build_read_compare(
+# 'script',
+# q{[[!meta script="wonka.js"]]},
+# qr{<link href="wonka.js"},
+#);
+
+write_build_read_compare(
+ 'openid',
+ q{[[!meta openid="wonka.openid.example"]]},
+ qr{<link href="wonka\.openid\.example" rel="openid\.delegate" />},
+);
+
+write_build_read_compare(
+ 'foaf',
+ q{[[!meta foaf="wonka.foaf.example"]]},
+ qr{<link rel="meta" type="application/rdf\+xml" title="FOAF"},
+);
+
+write_build_read_compare(
+ 'redir',
+ q{[[!meta redir="http://wonka.redir.example"]]},
+ qr{<meta http-equiv="refresh" content="0; URL=http://wonka\.redir\.example" />},
+);
+
+#write_build_read_compare(
+# 'link',
+# q{[[!meta link="http://wonka.link.example"]]},
+# qr{<link href="http://wonka\.link\.example" />},
+#);
+
+write_build_read_compare(
+ 'name',
+ q{[[!meta name="thingy" value1="hi" value2="hello"]]},
+ qr{<meta name="thingy" value[0-9]{1}=".+?" value[0-9]{1}=".+?" />},
+);
+
+write_build_read_compare(
+ 'keywords',
+ q{[[!meta keywords="word1,word2,word3"]]},
+ qr{<meta name="keywords" content="word1,word2,word3" />},
+);
+
+write_build_read_compare(
+ 'arbitrary',
+ q{[[!meta moo="mooooo"]]},
+ qr{<meta name="moo" content="mooooo" />},
+);
+
+#write_build_read_compare(
+# 'twittercard1',
+# '[[!meta twitter:card="player"]]',
+# qr{<meta name="twitter:card" content="player" />},
+#);
+
+write_build_read_compare(
+ 'twittercard2',
+ '[[!meta name="twitter:card" content="player"]]',
+ qr{<meta name="twitter:card" content="player" />},
+);
+
+done_testing();
use warnings;
use strict;
-use Test::More 'no_plan';
+use Test::More;
my %expected;
# Main
test_loop('parentlinks', $expected{'parentlinks'});
+
+done_testing();
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More 'no_plan';
+use Test::More;
+
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
ok(! system("rm -rf t/tmp"));
ok(! system("mkdir t/tmp"));
-ok(! system("make -s ikiwiki.out"));
-ok(! system("perl -I. ./ikiwiki.out -plugin inline -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates t/tinyblog t/tmp/out"));
+ok(! system(@command, qw(--plugin inline --url=http://example.com
+ --cgiurl=http://example.com/ikiwiki.cgi --rss --atom
+ t/tinyblog t/tmp/out)));
# This guid should never, ever change, for any reason whatsoever!
my $guid="http://example.com/post/";
ok(length `egrep '<guid.*>$guid</guid>' t/tmp/out/index.rss`);
ok(length `egrep '<id>$guid</id>' t/tmp/out/index.atom`);
ok(! system("rm -rf t/tmp t/tinyblog/.ikiwiki"));
+
+done_testing();
"XML::Feed and/or HTML::Parser or File::MimeInfo not available"};
}
else {
- eval q{use Test::More tests => 136};
+ eval q{use Test::More tests => 137};
}
}
use Cwd;
use File::Basename;
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @base_command;
+if ($installed) {
+ ok(1, "running installed");
+ @base_command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @base_command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
my $tmp = 't/tmp';
my $statedir = 't/tinypodcast/.ikiwiki';
my $podcast_style = shift;
my $baseurl = 'http://example.com';
- my @command = (qw(./ikiwiki.out -plugin inline -rss -atom));
- push @command, qw(-underlaydir=underlays/basewiki);
- push @command, qw(-set underlaydirbase=underlays -templatedir=templates);
- push @command, "-url=$baseurl", qw(t/tinypodcast), "$tmp/out";
+ my @command = (@base_command, qw(--plugin inline --rss --atom));
+ push @command, "--url=$baseurl", qw(t/tinypodcast), "$tmp/out";
ok(! system("mkdir $tmp"),
q{setup});
}
sub single_page_html {
- my @command = (qw(./ikiwiki.out));
- push @command, qw(-underlaydir=underlays/basewiki);
- push @command, qw(-set underlaydirbase=underlays -templatedir=templates);
+ my @command = @base_command;
push @command, qw(t/tinypodcast), "$tmp/out";
ok(! system("mkdir $tmp"),
q{html enclosure});
my ($href) = _extract_html_links($html, 'piano');
is($href, '/piano.mp3',
- q{html enclosure sans -url is site-absolute});
+ q{html enclosure sans --url is site-absolute});
$html = "$tmp/out/attempted_multiple_enclosures/index.html";
like(_extract_html_content($html, 'content'), qr/has content and/m,
q{html enclosure});
($href) = _extract_html_links($html, 'walter');
is($href, '/walter.ogg',
- q{html enclosure sans -url is site-absolute});
+ q{html enclosure sans --url is site-absolute});
my $baseurl = 'http://example.com';
- ok(! system(@command, "-url=$baseurl", q{--rebuild}));
+ ok(! system(@command, "--url=$baseurl", q{--rebuild}));
$html = "$tmp/out/pianopost/index.html";
($href) = _extract_html_links($html, 'piano');
is($href, "$baseurl/piano.mp3",
- q{html enclosure with -url is fully absolute});
+ q{html enclosure with --url is fully absolute});
$html = "$tmp/out/attempted_multiple_enclosures/index.html";
($href) = _extract_html_links($html, 'walter');
is($href, "$baseurl/walter.ogg",
- q{html enclosure with -url is fully absolute});
+ q{html enclosure with --url is fully absolute});
ok(! system("rm -rf $tmp $statedir"), q{teardown});
}
sub inlined_pages_html {
- my @command = (qw(./ikiwiki.out -plugin inline));
- push @command, qw(-underlaydir=underlays/basewiki);
- push @command, qw(-set underlaydirbase=underlays -templatedir=templates);
+ my @command = (@base_command, qw(--plugin inline));
push @command, qw(t/tinypodcast), "$tmp/out";
ok(! system("mkdir $tmp"),
q{html enclosure});
my ($href) = _extract_html_links($html, 'piano.mp3');
is($href, '/piano.mp3',
- q{html enclosure from pianopost sans -url});
+ q{html enclosure from pianopost sans --url});
($href) = _extract_html_links($html, 'walter.ogg');
is($href, '/walter.ogg',
- q{html enclosure from attempted_multiple_enclosures sans -url});
+ q{html enclosure from attempted_multiple_enclosures sans --url});
ok(! system("rm -rf $tmp $statedir"), q{teardown});
}
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Test::More;
+plan(skip_all => "IPC::Run not available")
+ unless eval q{
+ use IPC::Run qw(run);
+ 1;
+ };
+
+use IkiWiki;
+
+use Cwd qw(getcwd);
+use Errno qw(ENOENT);
+
+# Black-box (ish) test for relative linking between CGI and static content
+
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
+sub parse_cgi_content {
+ my $content = shift;
+ my %bits;
+ if ($content =~ qr{<base href="([^"]+)" */>}) {
+ $bits{basehref} = $1;
+ }
+ if ($content =~ qr{href="([^"]+/style.css)"}) {
+ $bits{stylehref} = $1;
+ }
+ if ($content =~ qr{class="parentlinks">\s+<a href="([^"]+)">this is the name of my wiki</a>/}s) {
+ $bits{tophref} = $1;
+ }
+ if ($content =~ qr{<a[^>]+href="([^"]+)\?do=prefs"}) {
+ $bits{cgihref} = $1;
+ }
+ return %bits;
+}
+
+sub write_old_file {
+ my $name = shift;
+ my $content = shift;
+
+ writefile($name, "t/tmp/in", $content);
+ ok(utime(333333333, 333333333, "t/tmp/in/$name"));
+}
+
+sub write_setup_file {
+ my (%args) = @_;
+ my $urlline = defined $args{url} ? "url: $args{url}" : "";
+ my $w3mmodeline = defined $args{w3mmode} ? "w3mmode: $args{w3mmode}" : "";
+ my $reverseproxyline = defined $args{reverse_proxy} ? "reverse_proxy: $args{reverse_proxy}" : "";
+
+ writefile("test.setup", "t/tmp", <<EOF
+# IkiWiki::Setup::Yaml - YAML formatted setup file
+wikiname: this is the name of my wiki
+srcdir: t/tmp/in
+destdir: t/tmp/out
+$urlline
+cgiurl: $args{cgiurl}
+$w3mmodeline
+cgi_wrapper: t/tmp/ikiwiki.cgi
+cgi_wrappermode: 0754
+# make it easier to test previewing
+add_plugins:
+- anonok
+anonok_pagespec: "*"
+$reverseproxyline
+ENV: { 'PERL5LIB': 'blib/lib:blib/arch' }
+EOF
+ );
+}
+
+sub thoroughly_rebuild {
+ ok(unlink("t/tmp/ikiwiki.cgi") || $!{ENOENT});
+ ok(! system(@command, qw(--setup t/tmp/test.setup --rebuild --wrappers)));
+}
+
+sub check_cgi_mode_bits {
+ my (undef, undef, $mode, undef, undef,
+ undef, undef, undef, undef, undef,
+ undef, undef, undef) = stat("t/tmp/ikiwiki.cgi");
+ is($mode & 07777, 0754);
+}
+
+sub check_generated_content {
+ my $cgiurl_regex = shift;
+ ok(-e "t/tmp/out/a/b/c/index.html");
+ my $content = readfile("t/tmp/out/a/b/c/index.html");
+ # no <base> on static HTML
+ unlike($content, qr{<base\W});
+ like($content, $cgiurl_regex);
+ # cross-links between static pages are relative
+ like($content, qr{<li>A: <a href="../../">a</a></li>});
+ like($content, qr{<li>B: <a href="../">b</a></li>});
+ like($content, qr{<li>E: <a href="../../d/e/">e</a></li>});
+}
+
+sub run_cgi {
+ my (%args) = @_;
+ my ($in, $out);
+ my $is_preview = delete $args{is_preview};
+ my $is_https = delete $args{is_https};
+ my %defaults = (
+ SCRIPT_NAME => '/cgi-bin/ikiwiki.cgi',
+ HTTP_HOST => 'example.com',
+ );
+ if (defined $is_preview) {
+ $defaults{REQUEST_METHOD} = 'POST';
+ $in = 'do=edit&page=a/b/c&Preview';
+ $defaults{CONTENT_LENGTH} = length $in;
+ } else {
+ $defaults{REQUEST_METHOD} = 'GET';
+ $defaults{QUERY_STRING} = 'do=prefs';
+ }
+ if (defined $is_https) {
+ $defaults{SERVER_PORT} = '443';
+ $defaults{HTTPS} = 'on';
+ } else {
+ $defaults{SERVER_PORT} = '80';
+ }
+ my %envvars = (
+ %defaults,
+ %args,
+ );
+ run(["./t/tmp/ikiwiki.cgi"], \$in, \$out, init => sub {
+ map {
+ $ENV{$_} = $envvars{$_}
+ } keys(%envvars);
+ });
+
+ return $out;
+}
+
+sub test_startup {
+ ok(! system("rm -rf t/tmp"));
+ ok(! system("mkdir t/tmp"));
+
+ write_old_file("a.mdwn", "A");
+ write_old_file("a/b.mdwn", "B");
+ write_old_file("a/b/c.mdwn",
+ "* A: [[a]]\n".
+ "* B: [[b]]\n".
+ "* E: [[a/d/e]]\n");
+ write_old_file("a/d.mdwn", "D");
+ write_old_file("a/d/e.mdwn", "E");
+}
+
+sub test_site1_perfectly_ordinary_ikiwiki {
+ write_setup_file(
+ url => "http://example.com/wiki/",
+ cgiurl => "http://example.com/cgi-bin/ikiwiki.cgi",
+ );
+ thoroughly_rebuild();
+ check_cgi_mode_bits();
+ # url and cgiurl are on the same host so the cgiurl is host-relative
+ check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"});
+ my %bits = parse_cgi_content(run_cgi());
+ like($bits{basehref}, qr{^(?:(?:http:)?//example\.com)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:http:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:http:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+
+ # when accessed via HTTPS, links are secure
+ %bits = parse_cgi_content(run_cgi(is_https => 1));
+ like($bits{basehref}, qr{^(?:(?:https:)?//example\.com)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+
+ # when accessed via a different hostname, links stay on that host
+ %bits = parse_cgi_content(run_cgi(HTTP_HOST => 'staging.example.net'));
+ like($bits{basehref}, qr{^(?:(?:http:)?//staging\.example\.net)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:http:)?//staging.example.net)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:http:)?//staging.example.net)?/cgi-bin/ikiwiki.cgi$});
+
+ # previewing a page
+ %bits = parse_cgi_content(run_cgi(is_preview => 1));
+ like($bits{basehref}, qr{^(?:(?:http:)?//example\.com)?/wiki/a/b/c/$});
+ like($bits{stylehref}, qr{^(?:(?:http:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.\./\.\./\.\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:http:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+}
+
+sub test_site2_static_content_and_cgi_on_different_servers {
+ write_setup_file(
+ url => "http://static.example.com/",
+ cgiurl => "http://cgi.example.com/ikiwiki.cgi",
+ );
+ thoroughly_rebuild();
+ check_cgi_mode_bits();
+ # url and cgiurl are not on the same host so the cgiurl has to be
+ # protocol-relative or absolute
+ check_generated_content(qr{<a[^>]+href="(?:http:)?//cgi.example.com/ikiwiki.cgi\?do=prefs"});
+
+ my %bits = parse_cgi_content(run_cgi(SCRIPT_NAME => '/ikiwiki.cgi', HTTP_HOST => 'cgi.example.com'));
+ like($bits{basehref}, qr{^(?:(?:http:)?//static.example.com)?/$});
+ like($bits{stylehref}, qr{^(?:(?:http:)?//static.example.com)?/style.css$});
+ like($bits{tophref}, qr{^(?:http:)?//static.example.com/$});
+ like($bits{cgihref}, qr{^(?:(?:http:)?//cgi.example.com)?/ikiwiki.cgi$});
+
+ # when accessed via HTTPS, links are secure
+ %bits = parse_cgi_content(run_cgi(is_https => 1, SCRIPT_NAME => '/ikiwiki.cgi', HTTP_HOST => 'cgi.example.com'));
+ like($bits{basehref}, qr{^(?:https:)?//static\.example\.com/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//static.example.com)?/style.css$});
+ like($bits{tophref}, qr{^(?:https:)?//static.example.com/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//cgi.example.com)?/ikiwiki.cgi$});
+
+ # when accessed via a different hostname, links to the CGI (only) should
+ # stay on that host?
+ %bits = parse_cgi_content(run_cgi(is_preview => 1, SCRIPT_NAME => '/ikiwiki.cgi', HTTP_HOST => 'staging.example.net'));
+ like($bits{basehref}, qr{^(?:http:)?//static\.example\.com/a/b/c/$});
+ like($bits{stylehref}, qr{^(?:(?:http:)?//static.example.com|\.\./\.\./\.\.)/style.css$});
+ like($bits{tophref}, qr{^(?:(?:http:)?//static.example.com|\.\./\.\./\.\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:http:)?//(?:staging\.example\.net|cgi\.example\.com))?/ikiwiki.cgi$});
+ TODO: {
+ local $TODO = "use self-referential CGI URL?";
+ like($bits{cgihref}, qr{^(?:(?:http:)?//staging.example.net)?/ikiwiki.cgi$});
+ }
+}
+
+sub test_site3_we_specifically_want_everything_to_be_secure {
+ write_setup_file(
+ url => "https://example.com/wiki/",
+ cgiurl => "https://example.com/cgi-bin/ikiwiki.cgi",
+ );
+ thoroughly_rebuild();
+ check_cgi_mode_bits();
+ # url and cgiurl are on the same host so the cgiurl is host-relative
+ check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"});
+
+ # when accessed via HTTPS, links are secure
+ my %bits = parse_cgi_content(run_cgi(is_https => 1));
+ like($bits{basehref}, qr{^(?:(?:https:)?//example\.com)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+
+ # when not accessed via HTTPS, links should still be secure
+ # (but if this happens, that's a sign of web server misconfiguration)
+ %bits = parse_cgi_content(run_cgi());
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ TODO: {
+ local $TODO = "treat https in configured url, cgiurl as required?";
+ is($bits{basehref}, "https://example.com/wiki/");
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+ }
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+
+ # when accessed via a different hostname, links stay on that host
+ %bits = parse_cgi_content(run_cgi(is_https => 1, HTTP_HOST => 'staging.example.net'));
+ like($bits{basehref}, qr{^(?:(?:https:)?//staging\.example\.net)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//staging.example.net)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//staging.example.net)?/cgi-bin/ikiwiki.cgi$});
+
+ # previewing a page
+ %bits = parse_cgi_content(run_cgi(is_preview => 1, is_https => 1));
+ like($bits{basehref}, qr{^(?:(?:https:)?//example\.com)?/wiki/a/b/c/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.\./\.\./\.\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+}
+
+sub test_site4_cgi_is_secure_static_content_doesnt_have_to_be {
+ # (NetBSD wiki)
+ write_setup_file(
+ url => "http://example.com/wiki/",
+ cgiurl => "https://example.com/cgi-bin/ikiwiki.cgi",
+ );
+ thoroughly_rebuild();
+ check_cgi_mode_bits();
+ # url and cgiurl are on the same host but different schemes
+ check_generated_content(qr{<a[^>]+href="https://example.com/cgi-bin/ikiwiki.cgi\?do=prefs"});
+
+ # when accessed via HTTPS, links are secure (to avoid mixed-content)
+ my %bits = parse_cgi_content(run_cgi(is_https => 1));
+ like($bits{basehref}, qr{^(?:(?:https:)?//example\.com)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+
+ # FIXME: when not accessed via HTTPS, should the static content be
+ # forced to https anyway? For now we accept either
+ %bits = parse_cgi_content(run_cgi());
+ like($bits{basehref}, qr{^(?:(?:https?)?://example\.com)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https?:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:(?:https?://example.com)?/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+
+ # when accessed via a different hostname, links stay on that host
+ %bits = parse_cgi_content(run_cgi(is_https => 1, HTTP_HOST => 'staging.example.net'));
+ # because the static and dynamic stuff is on the same server, we assume that
+ # both are also on the staging server
+ like($bits{basehref}, qr{^(?:(?:https:)?//staging\.example\.net)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//staging.example.net)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:(?:(?:https:)?//staging.example.net)?/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//(?:staging\.example\.net|example\.com))?/cgi-bin/ikiwiki.cgi$});
+ TODO: {
+ local $TODO = "this should really point back to itself but currently points to example.com";
+ like($bits{cgihref}, qr{^(?:(?:https:)?//staging.example.net)?/cgi-bin/ikiwiki.cgi$});
+ }
+
+ # previewing a page
+ %bits = parse_cgi_content(run_cgi(is_preview => 1, is_https => 1));
+ like($bits{basehref}, qr{^(?:(?:https:)?//example\.com)?/wiki/a/b/c/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+ like($bits{tophref}, qr{^(?:/wiki|\.\./\.\./\.\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+}
+
+sub test_site5_w3mmode {
+ # as documented in [[w3mmode]]
+ write_setup_file(
+ url => undef,
+ cgiurl => "ikiwiki.cgi",
+ w3mmode => 1,
+ );
+ thoroughly_rebuild();
+ check_cgi_mode_bits();
+ # FIXME: does /$LIB/ikiwiki-w3m.cgi work under w3m?
+ check_generated_content(qr{<a[^>]+href="(?:file://)?/\$LIB/ikiwiki-w3m.cgi/ikiwiki.cgi\?do=prefs"});
+
+ my %bits = parse_cgi_content(run_cgi(PATH_INFO => '/ikiwiki.cgi', SCRIPT_NAME => '/cgi-bin/ikiwiki-w3m.cgi'));
+ my $pwd = getcwd();
+ like($bits{tophref}, qr{^(?:\Q$pwd\E/t/tmp/out|\.)/$});
+ like($bits{cgihref}, qr{^(?:file://)?/\$LIB/ikiwiki-w3m.cgi/ikiwiki.cgi$});
+ like($bits{basehref}, qr{^(?:(?:file:)?//)?\Q$pwd\E/t/tmp/out/$});
+ like($bits{stylehref}, qr{^(?:(?:(?:file:)?//)?\Q$pwd\E/t/tmp/out|\.)/style.css$});
+}
+
+sub test_site6_behind_reverse_proxy {
+ write_setup_file(
+ url => "https://example.com/wiki/",
+ cgiurl => "https://example.com/cgi-bin/ikiwiki.cgi",
+ reverse_proxy => 1,
+ );
+ thoroughly_rebuild();
+ check_cgi_mode_bits();
+ # url and cgiurl are on the same host so the cgiurl is host-relative
+ check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"});
+
+ # because we are behind a reverse-proxy we must assume that
+ # we're being accessed by the configured cgiurl
+ my %bits = parse_cgi_content(run_cgi(HTTP_HOST => 'localhost'));
+ like($bits{tophref}, qr{^(?:/wiki|\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+ like($bits{basehref}, qr{^(?:(?:https:)?//example\.com)?/wiki/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+
+ # previewing a page
+ %bits = parse_cgi_content(run_cgi(is_preview => 1, HTTP_HOST => 'localhost'));
+ like($bits{tophref}, qr{^(?:/wiki|\.\./\.\./\.\.)/$});
+ like($bits{cgihref}, qr{^(?:(?:https:)?//example.com)?/cgi-bin/ikiwiki.cgi$});
+ like($bits{basehref}, qr{^(?:(?:https)?://example\.com)?/wiki/a/b/c/$});
+ like($bits{stylehref}, qr{^(?:(?:https:)?//example.com)?/wiki/style.css$});
+}
+
+test_startup();
+
+test_site1_perfectly_ordinary_ikiwiki();
+test_site2_static_content_and_cgi_on_different_servers();
+test_site3_we_specifically_want_everything_to_be_secure();
+test_site4_cgi_is_secure_static_content_doesnt_have_to_be();
+test_site5_w3mmode();
+test_site6_behind_reverse_proxy();
+
+done_testing();
}
}
-use Test::More tests => 2;
+use Test::More tests => 3;
BEGIN { use_ok("IkiWiki"); }
IkiWiki::loadplugins();
IkiWiki::checkconfig();
-ok(IkiWiki::htmlize("foo", "foo", "rst", "foo\n") =~ m{\s*<p>foo</p>\s*});
+like(IkiWiki::htmlize("foo", "foo", "rst", "foo\n"), qr{\s*<p>foo</p>\s*});
+# regression test for [[bugs/rst fails on file containing only a number]]
+my $html = IkiWiki::htmlize("foo", "foo", "rst", "11");
+$html =~ s/<[^>]*>//g;
+like($html, qr{\s*11\s*});
use strict;
use Test::More;
+plan(skip_all => 'running installed') if $ENV{INSTALLED_TESTS};
+
my @progs="ikiwiki.in";
my @libs="IkiWiki.pm";
# monotone, external, amazon_s3, po, and cvs
use strict;
use Test::More;
+plan(skip_all => 'running installed') if $ENV{INSTALLED_TESTS};
+
my @templates=(glob("templates/*.tmpl"), glob("doc/templates/*.mdwn"));
plan(tests => 2*@templates);
--- /dev/null
+#!/usr/bin/perl
+package IkiWiki;
+
+use warnings;
+use strict;
+use Test::More tests => 18;
+
+BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+BEGIN { use_ok("IkiWiki::Plugin::templatebody"); }
+BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
+BEGIN { use_ok("IkiWiki::Plugin::tag"); }
+BEGIN { use_ok("IkiWiki::Plugin::template"); }
+
+sub assert_pagespec_matches {
+ my $page = shift;
+ my $spec = shift;
+ my @params = @_;
+ @params = (location => 'index') unless @params;
+
+ my $res = pagespec_match($page, $spec, @params);
+
+ if ($res) {
+ pass($res);
+ }
+ else {
+ fail($res);
+ }
+}
+
+sub assert_pagespec_doesnt_match {
+ my $page = shift;
+ my $spec = shift;
+ my @params = @_;
+ @params = (location => 'index') unless @params;
+
+ my $res = pagespec_match($page, $spec, @params);
+
+ if (ref $res && $res->isa("IkiWiki::ErrorReason")) {
+ fail($res);
+ }
+ elsif ($res) {
+ fail($res);
+ }
+ else {
+ pass($res);
+ }
+}
+
+ok(! system("rm -rf t/tmp; mkdir t/tmp t/tmp/src t/tmp/dst"));
+
+$config{verbose} = 1;
+$config{srcdir} = 't/tmp/src';
+$config{underlaydir} = 't/tmp/src';
+$config{destdir} = 't/tmp/dst';
+$config{underlaydirbase} = '.';
+$config{templatedir} = 'templates';
+$config{usedirs} = 1;
+$config{htmlext} = 'html';
+$config{wiki_file_chars} = "-[:alnum:]+/.:_";
+$config{default_pageext} = "mdwn";
+$config{wiki_file_prune_regexps} = [qr/^\./];
+
+is(checkconfig(), 1);
+
+%oldrenderedfiles=%pagectime=();
+%pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
+%destsources=%renderedfiles=%pagecase=%pagestate=();
+
+$pagesources{index} = "index.mdwn";
+$pagemtime{index} = $pagectime{index} = 1000000;
+writefile("index.mdwn", "t/tmp/src", <<EOF
+[[!template id="deftmpl" greeting="hello" them="world"]]
+[[!template id="oldtmpl" greeting="greetings" them="earthlings"]]
+EOF
+);
+
+$pagesources{"templates/deftmpl"} = "templates/deftmpl.mdwn";
+$pagemtime{index} = $pagectime{index} = 1000000;
+writefile("templates/deftmpl.mdwn", "t/tmp/src", <<EOF
+[[!templatebody <<ENDBODY
+<p><b><TMPL_VAR GREETING>, <TMPL_VAR THEM></b></p>
+[[!tag greeting]]
+ENDBODY]]
+
+This template says hello to someone.
+[[!tag documentation]]
+EOF
+);
+
+$pagesources{"templates/oldtmpl"} = "templates/oldtmpl.mdwn";
+$pagemtime{index} = $pagectime{index} = 1000000;
+writefile("templates/oldtmpl.mdwn", "t/tmp/src", <<EOF
+<p><i><TMPL_VAR GREETING>, <TMPL_VAR THEM></i></p>
+EOF
+);
+
+my %content;
+
+foreach my $page (keys %pagesources) {
+ my $content = readfile("t/tmp/src/$pagesources{$page}");
+ $content = IkiWiki::filter($page, $page, $content);
+ $content = IkiWiki::preprocess($page, $page, $content);
+ $content{$page} = $content;
+}
+
+# Templates are expanded
+like($content{index}, qr{<p><b>hello, world</b></p>});
+like($content{index}, qr{<p><i>greetings, earthlings</i></p>});
+assert_pagespec_matches('index', 'tagged(greeting)');
+# The documentation from the templatebody-using page is not expanded
+unlike($content{index}, qr{This template says hello to someone});
+assert_pagespec_doesnt_match('index', 'tagged(documentation)');
+
+# In the templatebody-using page, the documentation is expanded
+like($content{'templates/deftmpl'}, qr{This template says hello to someone});
+assert_pagespec_matches('templates/deftmpl', 'tagged(documentation)');
+# In the templatebody-using page, the template is *not* expanded
+unlike($content{'templates/deftmpl'}, qr{<p><b>hello, world</b></p>});
+unlike($content{'templates/deftmpl'}, qr{<p><i>greetings, earthlings</i></p>});
+assert_pagespec_doesnt_match('templates/deftmpl', 'tagged(greeting)');
+
+1;
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More 'no_plan';
+use Test::More;
+
+plan(skip_all => 'running installed') if $ENV{INSTALLED_TESTS};
$/=undef;
open(IN, "doc/templates.mdwn") || die "doc/templates.mdwn: $!";
$file=~s/templates\///;
ok($page =~ /\Q$file\E/, "$file documented on doc/templates.mdwn");
}
+
+done_testing();
--- /dev/null
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use Test::More tests => 4;
+use utf8;
+
+BEGIN {
+ use_ok('IkiWiki');
+ use_ok('IkiWiki::Plugin::mdwn');
+ use_ok('IkiWiki::Plugin::textile');
+};
+
+subtest 'Text::Textile apparently double-escapes HTML entities in hrefs' => sub {
+ my $text = q{Gödel, Escher, Bach};
+ my $text_ok = qr{G(?:ö|ö|ö|&#x[fF]6;)del, Escher, Bach};
+ my $href = q{https://en.wikipedia.org/wiki/Gödel,_Escher,_Bach};
+ my $href_ok = qr{https://en\.wikipedia\.org/wiki/G(?:ö|ö|ö|&#x[fF]6|%[cC]3%[bB]6)del,_Escher,_Bach};
+ my $good = qr{<p><a href="$href_ok">$text_ok</a></p>};
+
+ chomp(my $mdwn_html = IkiWiki::Plugin::mdwn::htmlize(
+ content => qq{[$text]($href)},
+ ));
+ like($mdwn_html, $good);
+
+ chomp(my $txtl_html = IkiWiki::Plugin::textile::htmlize(
+ content => qq{"$text":$href},
+ ));
+ TODO: {
+ local $TODO = "Text::Textile double-escapes the href";
+ like($txtl_html, $good);
+ unlike($txtl_html, qr{<p><a href="https://en\.wikipedia\.org/wiki/G&ouml;del,_Escher,_Bach">Gödel, Escher, Bach</a></p>}i);
+ }
+};
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More 'no_plan';
+use Test::More;
use IkiWiki;
sub check_trail {
ok(! system("rm -rf t/tmp"));
ok(! system("mkdir t/tmp"));
+my $installed = $ENV{INSTALLED_TESTS};
+
+my @command;
+if ($installed) {
+ @command = qw(ikiwiki);
+}
+else {
+ ok(! system("make -s ikiwiki.out"));
+ @command = qw(perl -I. ./ikiwiki.out
+ --underlaydir=underlays/basewiki
+ --set underlaydirbase=underlays
+ --templatedir=templates);
+}
+
+push @command, qw(--set usedirs=0 --plugin trail --plugin inline
+ --url=http://example.com --cgiurl=http://example.com/ikiwiki.cgi
+ --rss --atom t/tmp/in t/tmp/out --verbose);
+
# Write files with a date in the past, so that when we refresh,
# the update is detected.
sub write_old_file {
EOF
);
-ok(! system("make -s ikiwiki.out"));
-
-my $command = "perl -I. ./ikiwiki.out -set usedirs=0 -plugin trail -plugin inline -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates t/tmp/in t/tmp/out -verbose";
-
-ok(! system($command));
-
-ok(! system("$command -refresh"));
+ok(! system(@command));
+ok(! system(@command, "--refresh"));
$blob = readfile("t/tmp/out/meme.html");
ok($blob =~ /<a href="(\.\/)?badger.html">badger<\/a>/m);
writefile("untrail.mdwn", "t/tmp/in", "no longer a trail");
-ok(! system("$command -refresh"));
+ok(! system(@command, "--refresh"));
check_trail("add/a.html", "n=add/b p=");
check_trail("add/b.html", "n=add/c p=add/a");
check_no_trail("untrail/b.html");
ok(! system("rm -rf t/tmp"));
+
+done_testing();
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More tests => 26;
+use Test::More tests => 31;
BEGIN { use_ok("IkiWiki"); }
is(IkiWiki::cgiurl(cgiurl => 'https://foo/ikiwiki'), "https://foo/ikiwiki");
is(IkiWiki::cgiurl(do => 'badger', cgiurl => 'https://foo/ikiwiki'), "https://foo/ikiwiki?do=badger");
-# with url and cgiurl on different sites, "local" degrades to absolute
+# with url and cgiurl on different sites, "local" degrades to protocol-relative
$IkiWiki::config{url} = "http://example.co.uk/~smcv";
$IkiWiki::config{cgiurl} = "http://dynamic.example.co.uk/~smcv/ikiwiki.cgi";
is(IkiWiki::checkconfig(), 1);
-is(IkiWiki::cgiurl(), "http://dynamic.example.co.uk/~smcv/ikiwiki.cgi");
-is(IkiWiki::baseurl(undef), "http://example.co.uk/~smcv/");
-is(IkiWiki::urlto('stoats', undef), "http://example.co.uk/~smcv/stoats/");
-is(IkiWiki::urlto('', undef), "http://example.co.uk/~smcv/");
+is(IkiWiki::cgiurl(), "//dynamic.example.co.uk/~smcv/ikiwiki.cgi");
+is(IkiWiki::baseurl(undef), "//example.co.uk/~smcv/");
+is(IkiWiki::urlto('stoats', undef), "//example.co.uk/~smcv/stoats/");
+is(IkiWiki::urlto('', undef), "//example.co.uk/~smcv/");
+
+# with url and cgiurl on different schemes, "local" degrades to absolute for
+# CGI but protocol-relative for static content, to avoid the CGI having
+# mixed content
+$IkiWiki::config{url} = "http://example.co.uk/~smcv";
+$IkiWiki::config{cgiurl} = "https://dynamic.example.co.uk/~smcv/ikiwiki.cgi";
+is(IkiWiki::checkconfig(), 1);
+is(IkiWiki::cgiurl(), "https://dynamic.example.co.uk/~smcv/ikiwiki.cgi");
+is(IkiWiki::baseurl(undef), "//example.co.uk/~smcv/");
+is(IkiWiki::urlto('stoats', undef), "//example.co.uk/~smcv/stoats/");
+is(IkiWiki::urlto('', undef), "//example.co.uk/~smcv/");
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Cwd qw();
+use File::Find;
+use Test::More;
+
+plan(skip_all => 'running installed') if $ENV{INSTALLED_TESTS};
+
+plan(skip_all => "XML::Parser not available")
+ unless eval q{use XML::Parser (); 1;};
+
+use IkiWiki;
+
+ok(system("make >/dev/null") == 0);
+
+chdir("html") || die "chdir: $!";
+
+sub wanted {
+ my $file = $_;
+ return if -d $file;
+ $file =~ s{^\./}{};
+ return if $file !~ m/\.html$/;
+ if (eval {
+ XML::Parser->new()->parsefile($file);
+ 1;
+ }) {
+ pass($file);
+ }
+ elsif ($file =~ m{^(?:
+ # user-contributed, contains explicit <br>
+ plugins/contrib/gallery |
+ # use templatebody when branchable.com has been upgraded
+ templates/ |
+ # malformed content in <pre> not escaped by discount
+ tips/convert_mediawiki_to_ikiwiki
+ # user-contributed, content is anyone's guess
+ users/ |
+ )}x) {
+ TODO: {
+ local $TODO = $@;
+ fail($file);
+ }
+ }
+}
+
+find({
+ no_chdir => 1,
+ wanted => \&wanted,
+}, '.');
+
+done_testing;
--- /dev/null
+To log into <TMPL_VAR WIKINAME>, just open the following link:
+
+<TMPL_VAR AUTHURL>
+
+This link can only be used once to log in, and will expire in one day.
+
+(Please disregard this email if you were not trying to log in.)
+
+--
+ikiwiki
-<form method="get" action="http://www.google.com/search" id="searchform">
+<form method="get" action="https://www.google.com/search" id="searchform">
<div>
<input name="sitesearch" value="<TMPL_VAR URL>" type="hidden" />
<input name="q" value="" id="searchbox" size="16" maxlength="255" type="text"
- <TMPL_IF HTML5>placeholder="search"</TMPL_IF> />
+ placeholder="search" />
</div>
</form>
--- /dev/null
+<script type="text/javascript" src="ikiwiki/jquery.min.js"></script>
+<script type="text/javascript" src="ikiwiki/login-selector/login-selector.js"></script>
+<script type="text/javascript">
+$(document).ready(function() {
+ selector.init(
+ 'openid_identifier',
+ {
+ <TMPL_IF LOGIN_SELECTOR_OPENID>'openid': 1,</TMPL_IF>
+ <TMPL_IF LOGIN_SELECTOR_EMAILAUTH>'email': 1,</TMPL_IF>
+ },
+ '<TMPL_IF OTHERFORM>otherform</TMPL_IF>',
+ '<TMPL_VAR OTHERFORM_LABEL>'
+ );
+});
+</script>
+
+<form action="<TMPL_VAR CGIURL>" method="get" id="login_selector_form">
+ <div>
+ <script>
+ $('fieldset').append("<legend>Select login method</legend>");
+ </script>
+
+ <input type="hidden" name="do" value="signin" />
+ <input type="hidden" name="action" value="verify" />
+ <div id="login_choice">
+ <div id="login_btns"></div>
+ </div>
+
+ <div id="login_input_area">
+ <TMPL_IF LOGIN_SELECTOR_OPENID>
+ <div>
+ <h3>OpenId login:</h3>
+ <label for="openid_identifier" class="block">Enter your OpenID:</label>
+ <input id="openid_identifier" name="openid_identifier" type="text" value="<TMPL_VAR ESCAPE=HTML OPENID_URL>"/>
+ <input id="openid_submit" type="submit" value="Login"/>
+ </div>
+ </TMPL_IF>
+ <TMPL_IF LOGIN_SELECTOR_EMAILAUTH>
+ <div>
+ <h3>Email login:</h3>
+ <label for="email_address" class="block">Enter your email address:</label>
+ <input id="email_address" name="Email_entry" type="text" value="<TMPL_VAR ESCAPE=HTML EMAIL_ADDRESS>"/>
+ <input id="email_submit" type="submit" value="Login"/>
+ </div>
+ </TMPL_IF>
+ </div>
+
+ <TMPL_IF LOGIN_ERROR>
+ <div class="error"><TMPL_VAR LOGIN_ERROR></div>
+ </TMPL_IF>
+ <TMPL_IF LOGIN_INFO>
+ <TMPL_VAR LOGIN_INFO>
+ </TMPL_IF>
+ </div>
+</form>
+
+<div id="otherform">
+<TMPL_IF OTHERFORM>
+<br />
+<noscript>
+<h3><TMPL_VAR OTHERFORM_LABEL> login:</h3>
+</noscript>
+</TMPL_IF>
+<TMPL_VAR OTHERFORM>
+</div>
+++ /dev/null
-<script type="text/javascript" src="ikiwiki/jquery.min.js"></script>
-<script type="text/javascript" src="ikiwiki/openid/openid-jquery.js"></script>
-<script type="text/javascript">
-$(document).ready(function() {
- openid.init('openid_identifier','<TMPL_IF NONOPENIDFORM>nonopenidform</TMPL_IF>');
-});
-</script>
-
-<noscript>
-<h2>OpenID:</h2>
-</noscript>
-
-<form action="<TMPL_VAR CGIURL>" method="get" id="openid_form">
- <fieldset>
- <script>
- $('fieldset').append("<legend>Select your account provider</legend>");
- </script>
-
- <input type="hidden" name="do" value="signin" />
- <input type="hidden" name="action" value="verify" />
- <div id="openid_choice">
- <div id="openid_btns"></div>
- </div>
- <div id="openid_input_area">
- <label for="openid_identifier" class="block">Enter your OpenID:</label>
- <input id="openid_identifier" name="openid_identifier" type="text" value="<TMPL_VAR OPENID_URL>"/>
- <input id="openid_submit" type="submit" value="Login"/>
- </div>
- <TMPL_IF OPENID_ERROR>
- <div class="error"><TMPL_VAR OPENID_ERROR></div>
- </TMPL_IF>
- </fieldset>
-</form>
-
-<div id="nonopenidform">
-<TMPL_IF NONOPENIDFORM>
-<br />
-<noscript>
-<h2>Other:</h2>
-</noscript>
-</TMPL_IF>
-<TMPL_VAR NONOPENIDFORM>
-</div>
-<TMPL_IF HTML5><!DOCTYPE html>
-<html>
-<TMPL_ELSE><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-</TMPL_IF>
+<!DOCTYPE html>
+<TMPL_IF HTML_LANG_CODE><html lang="<TMPL_VAR HTML_LANG_CODE>" dir="<TMPL_VAR HTML_LANG_DIR>" xmlns="http://www.w3.org/1999/xhtml"><TMPL_ELSE><html xmlns="http://www.w3.org/1999/xhtml"></TMPL_IF>
<head>
<TMPL_IF DYNAMIC>
<TMPL_IF FORCEBASEURL><base href="<TMPL_VAR FORCEBASEURL>" /><TMPL_ELSE>
</TMPL_IF>
<TMPL_IF HTML5><meta charset="utf-8" /><TMPL_ELSE><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></TMPL_IF>
<title><TMPL_VAR TITLE></title>
+<TMPL_IF RESPONSIVE_LAYOUT><meta name="viewport" content="width=device-width, initial-scale=1" /></TMPL_IF>
<TMPL_IF FAVICON>
<link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" />
</TMPL_IF>
<div id="pagebody">
-<TMPL_IF HTML5><section id="content"><TMPL_ELSE><div id="content"></TMPL_IF>
+<TMPL_IF HTML5><section<TMPL_ELSE><div</TMPL_IF> id="content" role="main">
<TMPL_VAR CONTENT>
<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
<TMPL_UNLESS DYNAMIC>
<TMPL_IF COMMENTS>
-<TMPL_IF HTML5><section id="comments"><TMPL_ELSE><div id="comments"></TMPL_IF>
+<TMPL_IF HTML5><section<TMPL_ELSE><div</TMPL_IF> id="comments" role="complementary">
<TMPL_VAR COMMENTS>
<TMPL_IF ADDCOMMENTURL>
<div class="addcomment">
</div>
-<TMPL_IF HTML5><footer id="footer" class="pagefooter"><TMPL_ELSE><div id="footer" class="pagefooter"></TMPL_IF>
+<TMPL_IF HTML5><footer<TMPL_ELSE><div</TMPL_IF> id="footer" class="pagefooter" role="contentinfo">
<TMPL_UNLESS DYNAMIC>
<TMPL_IF HTML5><nav id="pageinfo"><TMPL_ELSE><div id="pageinfo"></TMPL_IF>
<form method="get" action="<TMPL_VAR SEARCHACTION>" id="searchform">
<div>
<input type="text" id="searchbox" name="P" value="" size="16"
-<TMPL_IF HTML5>placeholder="search"</TMPL_IF> />
+ placeholder="search" />
</div>
</form>
<FORM NAME=P METHOD=GET
ACTION="$html{$env{CGIURL}}" TARGET="_top">
-<div style="text-align:center">
-<INPUT NAME=P VALUE="$html{$query}" SIZE=65>
+<div class="searchquery" style="text-align:center">
+<INPUT class="searchbox" NAME=P VALUE="$html{$query}" SIZE=65>
<INPUT TYPE=SUBMIT VALUE="Search">
$env{HELPLINK}
<hr>
/* allow space for the action tabs */
margin-bottom: 2em;
}
+
+@media (max-width: 600px) {
+ #content, #enclosure, #comments, #footer {
+ margin: 0.5em;
+ }
+ .pageheader .actions ul li {
+ padding: .1em .2em 0 .2em;
+ font-size: 0.8em;
+ }
+}
}
+/* lose the border on mobile */
+@media (max-width: 600px) {
+ body {
+ padding: 0;
+ }
+ .page {
+ border: none;
+ margin: 0;
+ }
+ #pagebody {
+ margin: auto;
+ border: none;
+ padding: 0.5em;
+ }
+ #footer {
+ padding: 0.5em;
+ }
+}
+
+/* cancel the minimum width if it would mean scrollbars */
+@media (max-width: 850px) {
+ .page {
+ width: auto;
+ min-width: 0;
+ padding: 0;
+ }
+}
margin-left: auto;
margin-right: auto;
width: 48em;
+ max-width: 95%;
background: url(gradient.png) repeat-x white 0px -16px;
margin-top: 48px; /* height of gradient.png that we want to see */
--- /dev/null
+/*
+Based on the Simple OpenID Plugin
+http://code.google.com/p/openid-selector/
+
+This code is licenced under the New BSD License.
+*/
+
+var selections_email_large = {
+ email: {
+ name: 'Email',
+ icon: 'wikiicons/email.png',
+ label: 'Enter your email address:',
+ url: null
+ }
+};
+var selections_openid_large = {
+ openid: {
+ name: 'OpenID',
+ icon: 'wikiicons/openidlogin-bg.gif',
+ label: 'Enter your OpenID:',
+ url: null
+ }
+};
+var selections_openid_small = {
+ verisign: {
+ name: 'Verisign',
+ icon: 'ikiwiki/login-selector/verisign.png',
+ label: 'Enter your Verisign username:',
+ url: 'http://{username}.pip.verisignlabs.com/'
+ },
+ yahoo: {
+ name: 'Yahoo',
+ icon: 'ikiwiki/login-selector/goa-account-yahoo.png',
+ url: 'http://me.yahoo.com/'
+ },
+ flickr: {
+ name: 'Flickr',
+ icon: 'ikiwiki/login-selector/goa-account-flickr.png',
+ label: 'Enter your Flickr username:',
+ url: 'http://flickr.com/photos/{username}/'
+ },
+ wordpress: {
+ name: 'Wordpress',
+ icon: 'ikiwiki/login-selector/wordpress.png',
+ label: 'Enter your Wordpress.com username:',
+ url: 'http://{username}.wordpress.com/'
+ },
+ aol: {
+ name: 'AOL',
+ icon: 'ikiwiki/login-selector/aol.png',
+ label: 'Enter your AOL username:',
+ url: 'http://openid.aol.com/{username}'
+ }
+};
+var selections = $.extend({}, selections_email_large, selections_openid_large, selections_openid_small);
+
+var selector = {
+
+ ajaxHandler: null,
+ cookie_expires: 6*30, // 6 months.
+ cookie_name: 'openid_selection', // historical name
+ cookie_path: '/',
+
+ img_path: 'images/',
+
+ input_id: null,
+ selection_url: null,
+ selection_id: null,
+ othersignin_id: null,
+
+ init: function(input_id, login_methods, othersignin_id, othersignin_label) {
+
+ var selector_btns = $('#login_btns');
+
+ this.input_id = input_id;
+
+ $('#login_choice').show();
+ $('#login_input_area').empty();
+
+ // add box for each selection
+ if (login_methods['openid']) {
+ for (id in selections_openid_large) {
+ selector_btns.append(this.getBoxHTML(selections_openid_large[id], 'large'));
+ }
+ }
+ if (login_methods['email']) {
+ for (id in selections_email_large) {
+ selector_btns.prepend(this.getBoxHTML(selections_email_large[id], 'large'));
+ }
+ }
+
+ if (othersignin_label != "") {
+ this.othersignin_label=othersignin_label;
+ }
+ else {
+ this.othersignin_label="other";
+ }
+ if (othersignin_id != "") {
+ this.othersignin_id=othersignin_id;
+ selector_btns.prepend(
+ '<a href="javascript: selector.signin(\'othersignin\');"' +
+ ' style="background: #FFF" ' +
+ 'class="othersignin login_large_btn">' +
+ '<img alt="" width="16" height="16" src="favicon.ico" />' +
+ ' ' + this.othersignin_label +
+ '</a>'
+ );
+ $('#'+this.othersignin_id).hide();
+ }
+
+ if (login_methods['openid'] && selections_openid_small) {
+ selector_btns.append('<br/>');
+
+ for (id in selections_openid_small) {
+ selector_btns.append(this.getBoxHTML(selections_openid_small[id], 'small'));
+ }
+ }
+
+ $('#login_selector_form').submit(this.submit);
+
+ var box_id = this.readCookie();
+ if (box_id) {
+ this.signin(box_id, true);
+ }
+ },
+ getBoxHTML: function(selection, box_size) {
+ var label="";
+ var title=""
+ if (box_size == 'large') {
+ label=' ' + selection["name"];
+ }
+ else {
+ title=' title="'+selection["name"]+'"';
+ }
+ var box_id = selection["name"].toLowerCase();
+ return '<a' + title +' href="javascript: selector.signin(\''+ box_id +'\');"' +
+ ' style="background: #FFF" ' +
+ 'class="' + box_id + ' login_' + box_size + '_btn">' +
+ '<img alt="" width="16" height="16" src="' + selection["icon"] + '" />' +
+ label +
+ '</a>';
+
+ },
+ /* selection image click */
+ signin: function(box_id, onload) {
+
+ if (box_id == 'othersignin') {
+ this.highlight(box_id);
+ $('#login_input_area').empty();
+ $('#'+this.othersignin_id).show();
+ this.setCookie(box_id);
+ return;
+ }
+ else {
+ if (this.othersignin_id) {
+ $('#'+this.othersignin_id).hide();
+ }
+ }
+
+ var selection = selections[box_id];
+ if (! selection) {
+ return;
+ }
+
+ this.highlight(box_id);
+
+ this.selection_id = box_id;
+ this.selection_url = selection['url'];
+
+ // prompt user for input?
+ if (selection['label']) {
+ this.setCookie(box_id);
+ this.useInputBox(selection);
+ } else {
+ this.setCookie('');
+ $('#login_input_area').empty();
+ if (! onload) {
+ $('#login_selector_form').submit();
+ }
+ }
+ },
+ /* Sign-in button click */
+ submit: function() {
+ var url = selector.selection_url;
+ if (url) {
+ url = url.replace('{username}', $('#entry').val());
+ selector.setOpenIdUrl(url);
+ }
+ else {
+ selector.setOpenIdUrl("");
+ }
+ if (selector.ajaxHandler) {
+ selector.ajaxHandler(selector.selection_id, document.getElementById(selector.input_id).value);
+ return false;
+ }
+ return true;
+ },
+ setOpenIdUrl: function (url) {
+
+ var hidden = $('#'+this.input_id);
+ if (hidden.length > 0) {
+ hidden.value = url;
+ } else {
+ $('#login_selector_form').append('<input style="display:none" id="' + this.input_id + '" name="' + this.input_id + '" value="'+url+'"/>');
+ }
+ },
+ highlight: function (box_id) {
+
+ // remove previous highlight.
+ var highlight = $('#login_highlight');
+ if (highlight) {
+ highlight.replaceWith($('#login_highlight a')[0]);
+ }
+ // add new highlight.
+ $('.'+box_id).wrap('<div id="login_highlight"></div>');
+ },
+ setCookie: function (value) {
+
+ var date = new Date();
+ date.setTime(date.getTime()+(this.cookie_expires*24*60*60*1000));
+ var expires = "; expires="+date.toGMTString();
+
+ document.cookie = this.cookie_name+"="+value+expires+"; path=" + this.cookie_path;
+ },
+ readCookie: function () {
+ var nameEQ = this.cookie_name + "=";
+ var ca = document.cookie.split(';');
+ for(var i=0;i < ca.length;i++) {
+ var c = ca[i];
+ while (c.charAt(0)==' ') c = c.substring(1,c.length);
+ if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+ }
+ return null;
+ },
+ useInputBox: function (selection) {
+
+ var input_area = $('#login_input_area');
+
+ var html = '';
+ var id = selection['name']+'_entry';
+ var value = '';
+ var label = selection['label'];
+ var style = '';
+
+ if (selection['name'] == 'OpenID') {
+ id = this.input_id;
+ value = '';
+ style = 'background:#FFF url(wikiicons/openidlogin-bg.gif) no-repeat scroll 0 50%; padding-left:18px;';
+ }
+ if (label) {
+ html = '<label for="'+ id +'" class="block">' + label + '</label>';
+ }
+ html += '<input id="'+id+'" type="text" style="'+style+'" name="'+id+'" value="'+value+'" />' +
+ '<input id="selector_submit" type="submit" value="Login"/>';
+
+ input_area.empty();
+ input_area.append(html);
+
+ $('#'+id).focus();
+ },
+ setAjaxHandler: function (ajaxFunction) {
+ this.ajaxHandler = ajaxFunction;
+ }
+};
+++ /dev/null
-/*
-Simple OpenID Plugin
-http://code.google.com/p/openid-selector/
-
-This code is licenced under the New BSD License.
-*/
-
-var providers_large = {
- google: {
- name: 'Google',
- icon: 'ikiwiki/openid/goa-account-google.png',
- url: 'https://www.google.com/accounts/o8/id'
- },
- verisign: {
- name: 'Verisign',
- icon: 'ikiwiki/openid/verisign.png',
- label: 'Enter your Verisign username:',
- url: 'http://{username}.pip.verisignlabs.com/'
- },
- yahoo: {
- name: 'Yahoo',
- icon: 'ikiwiki/openid/goa-account-yahoo.png',
- url: 'http://me.yahoo.com/'
- },
- openid: {
- name: 'OpenID',
- icon: 'wikiicons/openidlogin-bg.gif',
- label: 'Enter your OpenID:',
- url: null
- }
-};
-var providers_small = {
- livejournal: {
- name: 'LiveJournal',
- icon: 'ikiwiki/openid/livejournal.png',
- label: 'Enter your Livejournal username:',
- url: 'http://{username}.livejournal.com/'
- },
- flickr: {
- name: 'Flickr',
- icon: 'ikiwiki/openid/goa-account-flickr.png',
- label: 'Enter your Flickr username:',
- url: 'http://flickr.com/photos/{username}/'
- },
- wordpress: {
- name: 'Wordpress',
- icon: 'ikiwiki/openid/wordpress.png',
- label: 'Enter your Wordpress.com username:',
- url: 'http://{username}.wordpress.com/'
- },
- aol: {
- name: 'AOL',
- icon: 'ikiwiki/openid/aol.png',
- label: 'Enter your AOL username:',
- url: 'http://openid.aol.com/{username}'
- }
-};
-var providers = $.extend({}, providers_large, providers_small);
-
-var openid = {
-
- demo: false,
- ajaxHandler: null,
- cookie_expires: 6*30, // 6 months.
- cookie_name: 'openid_provider',
- cookie_path: '/',
-
- img_path: 'images/',
-
- input_id: null,
- provider_url: null,
- provider_id: null,
- localsignin_id: null,
-
- init: function(input_id, localsignin_id) {
-
- var openid_btns = $('#openid_btns');
-
- this.input_id = input_id;
-
- $('#openid_choice').show();
- $('#openid_input_area').empty();
-
- // add box for each provider
- for (id in providers_large) {
- openid_btns.append(this.getBoxHTML(providers_large[id], 'large'));
- }
-
- if (providers_small) {
- openid_btns.append('<br/>');
-
- for (id in providers_small) {
-
- openid_btns.append(this.getBoxHTML(providers_small[id], 'small'));
- }
- }
- if (localsignin_id != "") {
- this.localsignin_id=localsignin_id;
- openid_btns.append(
- '<a href="javascript: openid.signin(\'localsignin\');"' +
- ' style="background: #FFF" ' +
- 'class="localsignin openid_small_btn">' +
- '<img alt="" width="16" height="16" src="favicon.ico" />' +
- ' other' +
- '</a>'
- );
- $('#'+this.localsignin_id).hide();
- }
-
- $('#openid_form').submit(this.submit);
-
- var box_id = this.readCookie();
- if (box_id) {
- this.signin(box_id, true);
- }
- },
- getBoxHTML: function(provider, box_size) {
- var label="";
- var title=""
- if (box_size == 'large') {
- label=' ' + provider["name"];
- }
- else {
- title=' title="'+provider["name"]+'"';
- }
- var box_id = provider["name"].toLowerCase();
- return '<a' + title +' href="javascript: openid.signin(\''+ box_id +'\');"' +
- ' style="background: #FFF" ' +
- 'class="' + box_id + ' openid_' + box_size + '_btn">' +
- '<img alt="" width="16" height="16" src="' + provider["icon"] + '" />' +
- label +
- '</a>';
-
- },
- /* Provider image click */
- signin: function(box_id, onload) {
-
- if (box_id == 'localsignin') {
- this.highlight(box_id);
- $('#openid_input_area').empty();
- $('#'+this.localsignin_id).show();
- this.setCookie(box_id);
- return;
- }
- else {
- if (this.localsignin_id) {
- $('#'+this.localsignin_id).hide();
- }
- }
-
- var provider = providers[box_id];
- if (! provider) {
- return;
- }
-
- this.highlight(box_id);
-
- this.provider_id = box_id;
- this.provider_url = provider['url'];
-
- // prompt user for input?
- if (provider['label']) {
- this.setCookie(box_id);
- this.useInputBox(provider);
- } else {
- this.setCookie('');
- $('#openid_input_area').empty();
- if (! onload) {
- $('#openid_form').submit();
- }
- }
- },
- /* Sign-in button click */
- submit: function() {
-
- var url = openid.provider_url;
- if (url) {
- url = url.replace('{username}', $('#openid_username').val());
- openid.setOpenIdUrl(url);
- }
- if(openid.ajaxHandler) {
- openid.ajaxHandler(openid.provider_id, document.getElementById(openid.input_id).value);
- return false;
- }
- if(openid.demo) {
- alert("In client demo mode. Normally would have submitted OpenID:\r\n" + document.getElementById(openid.input_id).value);
- return false;
- }
- return true;
- },
- setOpenIdUrl: function (url) {
-
- var hidden = $('#'+this.input_id);
- if (hidden.length > 0) {
- hidden.value = url;
- } else {
- $('#openid_form').append('<input style="display:none" id="' + this.input_id + '" name="' + this.input_id + '" value="'+url+'"/>');
- }
- },
- highlight: function (box_id) {
-
- // remove previous highlight.
- var highlight = $('#openid_highlight');
- if (highlight) {
- highlight.replaceWith($('#openid_highlight a')[0]);
- }
- // add new highlight.
- $('.'+box_id).wrap('<div id="openid_highlight"></div>');
- },
- setCookie: function (value) {
-
- var date = new Date();
- date.setTime(date.getTime()+(this.cookie_expires*24*60*60*1000));
- var expires = "; expires="+date.toGMTString();
-
- document.cookie = this.cookie_name+"="+value+expires+"; path=" + this.cookie_path;
- },
- readCookie: function () {
- var nameEQ = this.cookie_name + "=";
- var ca = document.cookie.split(';');
- for(var i=0;i < ca.length;i++) {
- var c = ca[i];
- while (c.charAt(0)==' ') c = c.substring(1,c.length);
- if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
- }
- return null;
- },
- useInputBox: function (provider) {
-
- var input_area = $('#openid_input_area');
-
- var html = '';
- var id = 'openid_username';
- var value = '';
- var label = provider['label'];
- var style = '';
-
- if (provider['name'] == 'OpenID') {
- id = this.input_id;
- value = '';
- style = 'background:#FFF url(wikiicons/openidlogin-bg.gif) no-repeat scroll 0 50%; padding-left:18px;';
- }
- if (label) {
- html = '<label for="'+ id +'" class="block">' + label + '</label>';
- }
- html += '<input id="'+id+'" type="text" style="'+style+'" name="'+id+'" value="'+value+'" />' +
- '<input id="openid_submit" type="submit" value="Login"/>';
-
- input_area.empty();
- input_area.append(html);
-
- $('#'+id).focus();
- },
- setDemoMode: function (demoMode) {
- this.demo = demoMode;
- },
- setAjaxHandler: function (ajaxFunction) {
- this.ajaxHandler = ajaxFunction;
- }
-};
# wikis. Run this script when upgrading ikiwiki to an incompatible new
# version that requires rebuilding everything.
#
-# ikiwiki-mass-rebuild su's to the listed user and then runs ikiwiki -setup
+# ikiwiki-mass-rebuild su's to the listed user and then runs ikiwiki --setup
# on the specified ikiwiki setup file.
#
# It's also possible to let a user list setup files in ~user/.ikiwiki/wikilist