Merge commit 'origin/master' into aggregateinternal
authorSimon McVittie <smcv@carbon.pseudorandom.co.uk>
Mon, 14 Jul 2008 22:34:07 +0000 (23:34 +0100)
committerSimon McVittie <smcv@carbon.pseudorandom.co.uk>
Mon, 14 Jul 2008 22:34:07 +0000 (23:34 +0100)
49 files changed:
IkiWiki.pm
IkiWiki/CGI.pm
IkiWiki/Plugin/aggregate.pm
IkiWiki/Plugin/conditional.pm
IkiWiki/Plugin/edittemplate.pm
IkiWiki/Plugin/fortune.pm
IkiWiki/Plugin/googlecalendar.pm
IkiWiki/Plugin/graphviz.pm
IkiWiki/Plugin/img.pm
IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/linkmap.pm
IkiWiki/Plugin/meta.pm
IkiWiki/Plugin/pagetemplate.pm
IkiWiki/Plugin/pinger.pm
IkiWiki/Plugin/polygen.pm
IkiWiki/Plugin/postsparkline.pm
IkiWiki/Plugin/shortcut.pm
IkiWiki/Plugin/sparkline.pm
IkiWiki/Plugin/table.pm
IkiWiki/Plugin/template.pm
IkiWiki/Plugin/testpagespec.pm
IkiWiki/Plugin/teximg.pm
IkiWiki/Render.pm
IkiWiki/Setup.pm
debian/changelog
debian/control
doc/bugs/Broken_URL_to_your_blog_script.mdwn [new file with mode: 0644]
doc/bugs/Missing_build-dep_on_perlmagick__63__.mdwn [new file with mode: 0644]
doc/bugs/Undefined_subroutine_IkiWiki::refresh.mdwn [new file with mode: 0644]
doc/bugs/__96____96__clear:_both__39____39___for___96__.page__42____39____63__.mdwn
doc/bugs/html_errors.mdwn
doc/bugs/package_build_fails_in_non-English_environment.mdwn [new file with mode: 0644]
doc/plugins/write.mdwn
doc/plugins/write/tutorial.mdwn
doc/rcs/mercurial.mdwn
doc/style.css
doc/tips/blog_script.mdwn
doc/todo/Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename.mdwn
doc/todo/color_plugin.mdwn [new file with mode: 0644]
doc/todo/darcs.mdwn
doc/todo/mercurial.mdwn
doc/todo/pedigree_plugin.mdwn [new file with mode: 0644]
doc/users/smcv.mdwn [new file with mode: 0644]
docwiki.setup
ikiwiki.in
po/ikiwiki.pot
t/basewiki_brokenlinks.t
templates/inlinepage.tmpl
templates/page.tmpl

index f1a5f8058ec551667027e1af755848f7c11655aa..80e31711062694fb9494306e5900df4ca54f8b2f 100644 (file)
@@ -189,11 +189,6 @@ sub loadplugin ($) { #{{{
 sub error ($;$) { #{{{
        my $message=shift;
        my $cleaner=shift;
-       if ($config{cgi}) {
-               print "Content-type: text/html\n\n";
-               print misctemplate(gettext("Error"),
-                       "<p>".gettext("Error").": $message</p>");
-       }
        log_message('err' => $message) if $config{syslog};
        if (defined $cleaner) {
                $cleaner->();
@@ -773,21 +768,30 @@ sub preprocess ($$$;$$) { #{{{
                        }
                        my $ret;
                        if (! $scan) {
-                               $ret=$hooks{preprocess}{$command}{call}->(
-                                       @params,
-                                       page => $page,
-                                       destpage => $destpage,
-                                       preview => $preprocess_preview,
-                               );
+                               $ret=eval {
+                                       $hooks{preprocess}{$command}{call}->(
+                                               @params,
+                                               page => $page,
+                                               destpage => $destpage,
+                                               preview => $preprocess_preview,
+                                       );
+                               };
+                               if ($@) {
+                                       chomp $@;
+                                       $ret="[[!$command <span class=\"error\">".
+                                               gettext("Error").": $@"."</span>]]";
+                               }
                        }
                        else {
                                # use void context during scan pass
-                               $hooks{preprocess}{$command}{call}->(
-                                       @params,
-                                       page => $page,
-                                       destpage => $destpage,
-                                       preview => $preprocess_preview,
-                               );
+                               eval {
+                                       $hooks{preprocess}{$command}{call}->(
+                                               @params,
+                                               page => $page,
+                                               destpage => $destpage,
+                                               preview => $preprocess_preview,
+                                       );
+                               };
                                $ret="";
                        }
                        $preprocessing{$page}--;
index 6770f6feb7081f4462be9f30d6e0db87195e29a5..d805506aa9dd1a62940d82599375b8b284fde262 100644 (file)
@@ -750,4 +750,14 @@ sub cgi (;$$) { #{{{
        }
 } #}}}
 
+# Does not need tobe called directly; all errors will go through here.
+sub cgierror ($) { #{{{
+       my $message=shift;
+
+       print "Content-type: text/html\n\n";
+       print misctemplate(gettext("Error"),
+               "<p class=\"error\">".gettext("Error").": $message</p>");
+       die $@;
+} #}}}
+
 1
index 4fbcde390d59fd232f9fbfaf63f358259f74b423..b3d4a5eec84d5a46f5b8b3c485cd0d73430c62a2 100644 (file)
@@ -134,7 +134,7 @@ sub preprocess (@) { #{{{
 
        foreach my $required (qw{name url}) {
                if (! exists $params{$required}) {
-                       return "[[aggregate ".sprintf(gettext("missing %s parameter"), $required)."]]";
+                       error sprintf(gettext("missing %s parameter"), $required)
                }
        }
 
index 57db010544b52d436e7dac2ed42e34ef80445360..6be52eaa6d43b6cc5052a657a0bf907a2d1c78f1 100644 (file)
@@ -15,7 +15,7 @@ sub preprocess_if (@) { #{{{
 
        foreach my $param (qw{test then}) {
                if (! exists $params{$param}) {
-                       return "[[if ".sprintf(gettext('%s parameter is required'), $param)."]]";
+                       error sprintf(gettext('%s parameter is required'), $param);
                }
        }
 
index 76c1cd42aed37b24ff3f313a50c0d49cd4112aa7..d1716a31564031813e7d9f273ab7ff3ca02f3f5c 100644 (file)
@@ -38,10 +38,10 @@ sub preprocess (@) { #{{{
        return "" if $params{page} ne $params{destpage};
 
        if (! exists $params{template} || ! length($params{template})) {
-               return "[[meta ".gettext("template not specified")."]]";
+               error gettext("template not specified")
        }
        if (! exists $params{match} || ! length($params{match})) {
-               return "[[meta ".gettext("match not specified")."]]";
+               error gettext("match not specified")
        }
 
        $pagestate{$params{page}}{edittemplate}{$params{match}}=$params{template};
@@ -108,7 +108,9 @@ sub filltemplate ($$) { #{{{
                );
        };
        if ($@) {
-               return "[[pagetemplate ".gettext("failed to process")." $@]]";
+               # Indicate that the earlier preprocessor directive set 
+               # up a template that doesn't work.
+               return "[[!pagetemplate ".gettext("failed to process")." $@]]";
        }
 
        $template->param(name => $page);
index a3b13f687dac48aa37eee64ddf2eb7035dbac064..a78a73d5f1f4fa034777408896496971643d5f3b 100644 (file)
@@ -15,7 +15,7 @@ sub preprocess (@) { #{{{
        my $f = `fortune 2>/dev/null`;
 
        if ($?) {
-               return "[[".gettext("fortune failed")."]]";
+               error gettext("fortune failed");
        }
        else {
                return "<pre>$f</pre>\n";
index c6409e5e6db3732e1efd3ea4d5232b5dc66c76be..7efa1daa377538fdb2174eada674fca300701086 100644 (file)
@@ -19,7 +19,7 @@ sub preprocess (@) { #{{{
        # Avoid XSS attacks..
        my ($url)=$params{html}=~m#iframe\s+src="http://www\.google\.com/calendar/embed\?([^"<>]+)"#;
        if (! defined $url || ! length $url) {
-               return "[[googlecalendar ".gettext("failed to find url in html")."]]";
+               error gettext("failed to find url in html")
        }
        my ($height)=$params{html}=~m#height="(\d+)"#;
        my ($width)=$params{html}=~m#width="(\d+)"#;
index fe3559857a211807a133d9b95be05dafac5254b7..b13d15fa6350aadd237494350dd1c8949bf72700 100644 (file)
@@ -55,7 +55,7 @@ sub render_graph (\%) { #{{{
 
                waitpid $pid, 0;
                $SIG{PIPE}="DEFAULT";
-               return  "[[graph ".gettext("failed to run graphviz")."]]" if ($sigpipe);
+               error gettext("failed to run graphviz") if $sigpipe;
 
                if (! $params{preview}) {
                        writefile($dest, $config{destdir}, $png, 1);
@@ -82,7 +82,7 @@ sub graph (@) { #{{{
        $params{src} = "" unless defined $params{src};
        $params{type} = "digraph" unless defined $params{type};
        $params{prog} = "dot" unless defined $params{prog};
-       return "[[graph ".gettext("prog not a valid graphviz program")."]]" unless $graphviz_programs{$params{prog}};
+       error gettext("prog not a valid graphviz program") unless $graphviz_programs{$params{prog}};
 
        return render_graph(%params);
 } # }}}
index cc0e84b01f09a7527c341a99c8262eeebb34d106..17a9367d3339145170256d44c734663f561e94ec 100644 (file)
@@ -46,14 +46,14 @@ sub preprocess (@) { #{{{
        my $base = IkiWiki::basename($file);
 
        eval q{use Image::Magick};
-       error($@) if $@;
+       error gettext("Image::Magick is not installed") if $@;
        my $im = Image::Magick->new;
        my $imglink;
        my $r;
 
        if ($params{size} ne 'full') {
                my ($w, $h) = ($params{size} =~ /^(\d+)x(\d+)$/);
-               return "[[img ".sprintf(gettext('bad size "%s"'), $params{size})."]]"
+               error sprintf(gettext('bad size "%s"'), $params{size})
                        unless (defined $w && defined $h);
 
                my $outfile = "$config{destdir}/$dir/${w}x${h}-$base";
@@ -63,14 +63,14 @@ sub preprocess (@) { #{{{
 
                if (-e $outfile && (-M srcfile($file) >= -M $outfile)) {
                        $r = $im->Read($outfile);
-                       return "[[img ".sprintf(gettext("failed to read %s: %s"), $outfile, $r)."]]" if $r;
+                       error sprintf(gettext("failed to read %s: %s"), $outfile, $r) if $r;
                }
                else {
                        $r = $im->Read(srcfile($file));
-                       return "[[img ".sprintf(gettext("failed to read %s: %s"), $file, $r)."]]" if $r;
+                       error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
 
                        $r = $im->Resize(geometry => "${w}x${h}");
-                       return "[[img ".sprintf(gettext("failed to resize: %s"), $r)."]]" if $r;
+                       error sprintf(gettext("failed to resize: %s"), $r) if $r;
 
                        # don't actually write file in preview mode
                        if (! $params{preview}) {
@@ -84,7 +84,7 @@ sub preprocess (@) { #{{{
        }
        else {
                $r = $im->Read(srcfile($file));
-               return "[[img ".sprintf(gettext("failed to read %s: %s"), $file, $r)."]]" if $r;
+               error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
                $imglink = $file;
        }
 
@@ -101,7 +101,7 @@ sub preprocess (@) { #{{{
        }
 
        if (! defined($im->Get("width")) || ! defined($im->Get("height"))) {
-               return "[[img ".sprintf(gettext("failed to determine size of image %s"), $file)."]]";
+               error sprintf(gettext("failed to determine size of image %s"), $file)
        }
 
        my $imgtag='<img src="'.$imgurl.
index 32915c342d33898a68e8cf8b3a2a48845eeb0311..5517e3c9434e9d483f343e8c676db6da42efcda7 100644 (file)
@@ -98,7 +98,7 @@ sub preprocess_inline (@) { #{{{
        my %params=@_;
        
        if (! exists $params{pages}) {
-               return "[[inline ".gettext("missing pages parameter")."]]";
+               error gettext("missing pages parameter");
        }
        my $raw=yesno($params{raw});
        my $archive=yesno($params{archive});
index 82b38f4cb79909c449e29bd8a68340db9d343bde..ab199b7238511b74b36255363809d902ef773eb9 100644 (file)
@@ -94,9 +94,7 @@ sub genmap ($) { #{{{
        
        waitpid $pid, 0;
        $SIG{PIPE}="DEFAULT";
-       if ($sigpipe) {
-               return  "[[linkmap ".gettext("failed to run dot")."]]";
-       }
+       error gettext("failed to run dot") if $sigpipe;
 
        return $ret;
 } #}}}
index d00b6854f698126e6b6548fc0705deefc0f6f748..4e0e9e8c72162d93e99cf874da29672ff1b11ab6 100644 (file)
@@ -138,7 +138,7 @@ sub preprocess (@) { #{{{
                # editable page as a stylesheet
                my $stylesheet=bestlink($page, $value.".css");
                if (! length $stylesheet) {
-                       return "[[meta ".gettext("stylesheet not found")."]]";
+                       error gettext("stylesheet not found")
                }
                push @{$metaheaders{$page}}, '<link href="'.urlto($stylesheet, $page).
                        '" rel="'.encode_entities($rel).
@@ -172,7 +172,7 @@ sub preprocess (@) { #{{{
                        add_depends($page, $redir_page);
                        my $link=bestlink($page, $redir_page);
                        if (! length $link) {
-                               return "[[meta ".gettext("redir page not found")."]]";
+                               error gettext("redir page not found")
                        }
 
                        $value=urlto($link, $page);
@@ -185,7 +185,7 @@ sub preprocess (@) { #{{{
                        my %seen;
                        while (exists $pagestate{$at}{meta}{redir}) {
                                if ($seen{$at}) {
-                                       return "[[meta ".gettext("redir cycle is not allowed")."]]";
+                                       error gettext("redir cycle is not allowed")
                                }
                                $seen{$at}=1;
                                $at=$pagestate{$at}{meta}{redir};
index 69a2433a8ffb1d74119762c8d9aeae3e3cedae01..205f5a9d77b13ce34b6b30d7d528f7658315df09 100644 (file)
@@ -18,7 +18,7 @@ sub preprocess (@) { #{{{
        if (! exists $params{template} ||
            $params{template} !~ /^[-A-Za-z0-9._+]+$/ ||
            ! defined IkiWiki::template_file($params{template})) {
-                return "[[pagetemplate ".gettext("bad or missing template")."]]";
+                error gettext("bad or missing template")
        }
 
        if ($params{page} eq $params{destpage}) {
index c6fa76e3f8fde2652e7703e50b84f03f1a1ff829..614d428853c7d0d2efbaa74987edc97e6643a452 100644 (file)
@@ -34,7 +34,7 @@ sub needsbuild (@) { #{{{
 sub preprocess (@) { #{{{
        my %params=@_;
        if (! exists $params{from} || ! exists $params{to}) {
-               return "[[ping ".gettext("requires 'from' and 'to' parameters")."]]";
+               error gettext("requires 'from' and 'to' parameters");
        }
        if ($params{from} eq $config{url}) {
                $pagestate{$params{destpage}}{pinger}{$params{to}}=1;
index 5208a44ec5c9a342ff798a3ec8401f240f8562ba..70378cf1b7102cf383e6839cb6dfd4d64ddf2a02 100644 (file)
@@ -29,7 +29,7 @@ sub preprocess (@) { #{{{
 
        my $grmfile = '/usr/share/polygen/ita/polygen.grm';
        if (! -d '/usr/share/polygen') {
-               return "[[".gettext("polygen not installed")."]]";
+               error gettext("polygen not installed");
        }
        find({wanted => sub {
                        if (substr($File::Find::name, -length($grammar)) eq $grammar) {
@@ -48,7 +48,7 @@ sub preprocess (@) { #{{{
        }
 
        if ($?) {
-               $res="[[".gettext("polygen failed")."]]";
+               error gettext("command failed");
        }
 
        # Strip trailing spaces and newlines so that we flow well with the
index 9e885741e073bc4ded2e3947366ea6265d8249db..6fc96f8b343cbca8eeeb893c41e2569a962d915c 100644 (file)
@@ -29,14 +29,14 @@ sub preprocess (@) { #{{{
        }
 
        if (! exists $params{formula}) {
-               return "[[postsparkline ".gettext("missing formula")."]]";
+               error gettext("missing formula")
        }
        my $formula=$params{formula};
        $formula=~s/[^a-zA-Z0-9]*//g;
        $formula=IkiWiki::possibly_foolish_untaint($formula);
        if (! length $formula ||
            ! IkiWiki::Plugin::postsparkline::formula->can($formula)) {
-               return "[[postsparkline ".gettext("unknown formula")."]]";
+               error gettext("unknown formula");
        }
 
        add_depends($params{page}, $params{pages});
@@ -53,7 +53,7 @@ sub preprocess (@) { #{{{
 
        my @data=eval qq{IkiWiki::Plugin::postsparkline::formula::$formula(\\\%params, \@list)};
        if ($@) {
-               return "[[postsparkline error $@]]";
+               error $@;
        }
 
        if (! @data) {
index f1a38ea48070ed255ea8046e8b4d5c1dd6787af3..8df60cfe2a34b5e428e1eafcae88ac9c71a3c0ed 100644 (file)
@@ -24,7 +24,7 @@ sub preprocess_shortcut (@) { #{{{
        my %params=@_;
 
        if (! defined $params{name} || ! defined $params{url}) {
-               return "[[shortcut ".gettext("missing name or url parameter")."]]";
+               error gettext("missing name or url parameter");
        }
 
        hook(type => "preprocess", no_override => 1, id => $params{name},
index 69b3512c27e708d1155fab842e76b46b7dbff9f5..bcff46aeb47ed8156b8d866f348ffab29a7a0f23 100644 (file)
@@ -60,13 +60,13 @@ sub preprocess (@) { #{{{
                        }
                }
                elsif (! length $value) {
-                       return "[[sparkline ".gettext("parse error")." \"$key\"]]";
+                       error gettext("parse error")." \"$key\"";
                }
                elsif ($key eq 'featurepoint') {
                        my ($x, $y, $color, $diameter, $text, $location)=
                                split(/\s*,\s*/, $value);
                        if (! defined $diameter || $diameter < 0) {
-                               return "[[sparkline ".gettext("bad featurepoint diameter")."]]";
+                               error gettext("bad featurepoint diameter");
                        }
                        $x=int($x);
                        $y=int($y);
@@ -76,7 +76,7 @@ sub preprocess (@) { #{{{
                        if (defined $location) {
                                $location=$locmap{$location};
                                if (! defined $location) {
-                                       return "[[sparkline ".gettext("bad featurepoint location")."]]";
+                                       error gettext("bad featurepoint location");
                                }
                        }
                        $php.=qq{\$sparkline->SetFeaturePoint($x, $y, '$color', $diameter};
@@ -87,23 +87,23 @@ sub preprocess (@) { #{{{
        }
 
        if ($c eq 0) {
-               return "[[sparkline ".gettext("missing values")."]]";
+               error gettext("missing values");
        }
 
        my $height=int($params{height} || 20);
        if ($height < 2 || $height > 100) {
-               return "[[sparkline ".gettext("bad height value")."]]";
+               error gettext("bad height value");
        }
        if ($style eq "Bar") {
                $php.=qq{\$sparkline->Render($height);\n};
        }
        else {
                if (! exists $params{width}) {
-                       return "[[sparkline ".gettext("missing width parameter")."]]";
+                       error gettext("missing width parameter");
                }
                my $width=int($params{width});
                if ($width < 2 || $width > 1024) {
-                       return "[[sparkline ".gettext("bad width value")."]]";
+                       error gettext("bad width value");
                }
                $php.=qq{\$sparkline->RenderResampled($width, $height);\n};
        }
@@ -141,7 +141,7 @@ sub preprocess (@) { #{{{
                waitpid $pid, 0;
                $SIG{PIPE}="DEFAULT";
                if ($sigpipe) {
-                       return  "[[sparkline ".gettext("failed to run php")."]]";
+                       error gettext("failed to run php");
                }
 
                if (! $params{preview}) {
index 11474c8f08412c701a58f60ce350888f84a1057a..892ea182e267229531db7e6b64a4067a6294b6a1 100644 (file)
@@ -19,7 +19,7 @@ sub preprocess (@) { #{{{
 
        if (exists $params{file}) {
                if (! $pagesources{$params{file}}) {
-                       return "[[table ".gettext("cannot find file")."]]";
+                       error gettext("cannot find file");
                }
                $params{data} = readfile(srcfile($params{file}));
                add_depends($params{page}, $params{file});
@@ -61,7 +61,7 @@ sub preprocess (@) { #{{{
                        defined $params{delimiter} ? $params{delimiter} : "|",);
        }
        else {
-               return "[[table ".gettext("unknown data format")."]]";
+               error gettext("unknown data format");
        }
 
        my $header;
@@ -69,7 +69,7 @@ sub preprocess (@) { #{{{
                $header=shift @data;
        }
        if (! @data) {
-               return "[[table ".gettext("empty data")."]]";
+               error gettext("empty data");
        }
 
        my @lines;
index aa1f57c0703ebcea645bb8818ef779ffaa520d1c..c33dbbb83b8d1623ffd1348667247ec3be04f082 100644 (file)
@@ -16,7 +16,7 @@ sub preprocess (@) { #{{{
        my %params=@_;
 
        if (! exists $params{id}) {
-               return "[[template ".gettext("missing id parameter")."]]";
+               error gettext("missing id parameter")
        }
 
        my $template_page="templates/$params{id}";
@@ -42,7 +42,7 @@ sub preprocess (@) { #{{{
                );
        };
        if ($@) {
-               return "[[template ".gettext("failed to process:")." $@]]";
+               error gettext("failed to process:")." $@"
        }
 
        $params{basename}=IkiWiki::basename($params{page});
index f9ec90d8791f8b5e6aa422ceb527fe272bfea9df..4faef7be197a8b20362132521ae67de2976a3ad8 100644 (file)
@@ -14,7 +14,7 @@ sub preprocess (@) { #{{{
        
        foreach my $param (qw{match pagespec}) {
                if (! exists $params{$param}) {
-                       return "[[testpagespec $param parameter is required]]";
+                       error sprintf(gettext("%s parameter is required"), $param);
                }
        }
 
index 8c3e88c6974a8f2d5aa00fc119ba1f8941f4c943..6a6bdd4fa404739789eadd065cad4c8c34e4082f 100644 (file)
@@ -27,14 +27,14 @@ sub preprocess (@) { #{{{
        
        my $code = $params{code};
        if (! defined $code && ! length $code) {
-               return "[[teximg ".gettext("missing tex code"). "]]";
+               error gettext("missing tex code");
        }
 
        if (check($code)) {
                return create($code, check_height($height), \%params);
        }
        else {
-               return "[[teximg ".gettext("code includes disallowed latex commands"). "]]";
+               error gettext("code includes disallowed latex commands")
        }
 } #}}}
 
@@ -85,7 +85,7 @@ sub create ($$$) { #{{{
                        .qq{" class="teximg" />};
        }
        else {
-               return qq{[[teximg <a href="$logurl">}.gettext("failed to generate image from code")."</a>]]";
+               error qq{<a href="$logurl">}.gettext("failed to generate image from code")."</a>";
        }
 } #}}}
 
index c241fd40b5beb7abff5901246930d978cb9476b5..990fcaaa111d3d48985eff126fbdd30bd0d17003 100644 (file)
@@ -229,10 +229,14 @@ sub render ($) { #{{{
                will_render($file, $file, 1);
                
                if ($config{hardlink}) {
-                       prep_writefile($file, $config{destdir});
-                       unlink($config{destdir}."/".$file);
-                       if (link($srcfile, $config{destdir}."/".$file)) {
-                               return;
+                       # only hardlink if owned by same user
+                       my @stat=stat($srcfile);
+                       if ($stat[4] == $>) {
+                               prep_writefile($file, $config{destdir});
+                               unlink($config{destdir}."/".$file);
+                               if (link($srcfile, $config{destdir}."/".$file)) {
+                                       return;
+                               }
                        }
                        # if hardlink fails, fall back to copying
                }
index 2b76efc16b92bd471429f660df73d4d2f24b05e9..3b7a112539acf794e855a6daffb192f657c49f11 100644 (file)
@@ -97,6 +97,8 @@ sub setup () { #{{{
        loadplugins();
        checkconfig();
 
+       require IkiWiki::Render;
+
        if ($config{render}) {
                commandline_render();
        }
index f10200a52644823f199d428420d6f7e01966f4b0..3c535fd5fdd0a4cb352a44ee1ad55849bdca8c87 100644 (file)
@@ -19,6 +19,12 @@ ikiwiki (2.54) UNRELEASED; urgency=low
     uuid in feeds. (smcv)
   * Move yesno function out of inline and into IkiWiki core, not exported.
   * meta: fix title() PageSpec (smcv)
+  * Some footer style changes. (smcv)
+  * Error handling improvement for preprocess hooks. It's now safe to call
+    error() from such hooks; it will cause a nicely formatted error message
+    to be inserted into the page.
+  * Cut the size of the binary package in half by excluding pages for bugs
+    and todo items from the html shipped in it.
 
  -- Josh Triplett <josh@freedesktop.org>  Wed, 09 Jul 2008 21:30:33 -0700
 
index a50c13c269563891bc20450f70af592b046fd3ac..36d83c640ccc7a92a2f54413407921174c7038c4 100644 (file)
@@ -2,7 +2,7 @@ Source: ikiwiki
 Section: web
 Priority: optional
 Build-Depends: perl, debhelper (>= 5)
-Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl, libtext-markdown-perl | markdown, libtimedate-perl, libhtml-template-perl, libhtml-scrubber-perl, wdg-html-validator, libhtml-parser-perl, liburi-perl
+Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl, libtext-markdown-perl | markdown, libtimedate-perl, libhtml-template-perl, libhtml-scrubber-perl, wdg-html-validator, libhtml-parser-perl, liburi-perl, perlmagick
 Maintainer: Joey Hess <joeyh@debian.org>
 Uploaders: Joey Hess <joeyh@debian.org>, Josh Triplett <josh@freedesktop.org>
 Standards-Version: 3.8.0
diff --git a/doc/bugs/Broken_URL_to_your_blog_script.mdwn b/doc/bugs/Broken_URL_to_your_blog_script.mdwn
new file mode 100644 (file)
index 0000000..3d6661d
--- /dev/null
@@ -0,0 +1,10 @@
+Joey, I would like to see your blog script I've found
+at [[Tips|tips/blog_script]] page, but it seems that the URL
+(http://git.kitenet.net/?p=joey/home;a=blob_plain;f=bin/blog)
+to its Git repo is broken:
+
+    403 Forbidden - No such project
+
+--[[Paweł|ptecza]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Missing_build-dep_on_perlmagick__63__.mdwn b/doc/bugs/Missing_build-dep_on_perlmagick__63__.mdwn
new file mode 100644 (file)
index 0000000..f6c0266
--- /dev/null
@@ -0,0 +1,14 @@
+Trying to build current Git master in a (two weeks old - no DSL here) sid chroot triggers :
+
+        rendering news.mdwn
+        Can't locate Image/Magick.pm in @INC (@INC contains: . blib/lib /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at (eval 175) line 2.
+        BEGIN failed--compilation aborted at (eval 175) line 2.
+
+        make[1]: *** [extra_build] Error 2
+        make[1]: Leaving directory `/tmp/buildd/ikiwiki-2.54'
+        make: *** [build-stamp] Error 2
+
+Adding perlmagick to the build-deps fixes it. I read somewhere in debian/changelog that this build-deb was not needed, but...
+
+> It's not needed by the test suite, but once I added a img to the source
+> wiki, it became needed. [[done]] --[[Joey]]
diff --git a/doc/bugs/Undefined_subroutine_IkiWiki::refresh.mdwn b/doc/bugs/Undefined_subroutine_IkiWiki::refresh.mdwn
new file mode 100644 (file)
index 0000000..c0cc3fd
--- /dev/null
@@ -0,0 +1,7 @@
+After building a fresh deb from current Git master (9b62dac4bcf62f3a1f76ec5a7ed5a90db16ea1c8) :
+
+        $ ikiwiki --setup ~/ikiwiki.setup  --rebuild
+        Undefined subroutine &IkiWiki::refresh called at /usr/share/perl5/IkiWiki/Setup.pm line 113.
+
+> [[done]], it just needed "require IkiWiki::Render" before it started
+> rendering. --[[smcv]]
index e389ce3ed23699a95dd929cfbdb79fa6a3ca5e98..a1b5ba94acb1ec1185147ee2a7a931e5816e38a9 100644 (file)
@@ -15,3 +15,21 @@ adding this `clear: both`?
 > before the modification date. So all of them have to clear both above and
 > below. I'm sure there are better ways for the CSS to handle that.
 > --[[Joey]] 
+
+>> There is indeed a better way - all the optional things below the
+>> content are wrapped in `<div id="footer">`, so to have the browser wait
+>> until all floating boxes have finished before rendering the footer, it
+>> would be sufficient to have `#footer { clear: both; }` and remove all
+>> the other footer-related `clear` attributes. I'm not sure what you mean
+>> by "clear above and below" - the clear attribute takes values none, left,
+>> right or both, and its purpose is to stop floating boxes (sidebars,
+>> mainly) from overlapping with footers.
+>>
+>> ... oh, I see what you mean - this affects inlines too. In inlinepage.tmpl
+>> we could wrap the "pseudo-footer" in `<div class="inlinefooter">` too?
+>> Then sites could choose whether to set clear:both on the inlinefooter
+>> or not, and this would be separate from the same styling on whole pages.
+>>
+>> [[done]] --[[smcv]]
+
+[[patch]]
index 5a60e0449caef7372f7fddfb6bfee72fbcfaec8e..aef2f7f71dc4e364b65e52a90a4d3cc50e135945 100644 (file)
@@ -1,2 +1,5 @@
 ikiwiki will generate html formatted error messages to the command
 line if --cgi is set, even if it's not yet running as a cgi
+
+> [[done]], at last. Oldest open bug.. just thought of an elegant fix!
+> --[[Joey]]
diff --git a/doc/bugs/package_build_fails_in_non-English_environment.mdwn b/doc/bugs/package_build_fails_in_non-English_environment.mdwn
new file mode 100644 (file)
index 0000000..521ba62
--- /dev/null
@@ -0,0 +1,11 @@
+basewiki_brokenlinks.t fails when running dpkg-buildpackage in non-English environment : it greps for an (non-)error message that is i18n'd. This of course does not happen when building in a proper chroot environment... which happens to fail as well, for other reasons, but this will be for another bug.
+
+The `LANG=` on line 9 does not seem to do what it's supposed to, go figure.
+
+I've never had to understand the Unix locales, so I randomly tried to replace `LANG=` in basewiki_brokenlinks.t with :
+
+- `LANG=C` : fails
+- `LANGUAGE=` : fails
+- `LANGUAGE=C` : works!
+
+> For maximum precedence it should have been LC_ALL=C. [[done]], I think... --[[smcv]]
index 6b49ec58d9379b86b8fc6c842bce8479401681d8..4dc55e30219667428cff64d57931683cb88ebd71 100644 (file)
@@ -412,12 +412,13 @@ Aborts with an error message. If the second parameter is passed, it is a
 function that is called after the error message is printed, to do any final
 cleanup.
 
-Note that while any plugin can use this for a fatal error, plugins should
-try to avoid dying on bad input when building a page, as that will halt
-the entire wiki build and make the wiki unusable. So for example, if a
-[[ikiwiki/PreProcessorDirective]] is passed bad parameters, it's better to
-return an error message, which can appear on the wiki page, rather than
-calling error().
+If called inside a preprocess hook, error() does not abort the entire
+wiki build, but instead replaces the [[ikiwiki/PreProcessorDirective]] with
+a version containing the error message.
+
+In other hooks, error() is a fatal error, so use with care. Try to avoid
+dying on bad input when building a page, as that will halt
+the entire wiki build and make the wiki unusable.
 
 #### `template($;@)`
 
index 8b12fd183c01f1bec27b37bb549bf06f34a1d1be..94b72c763c565ddc86efe1e48d0c700a7d5ee62f 100644 (file)
@@ -169,7 +169,7 @@ be a guard on how high it will go.
                }
                my $num=$last{$page}++;
                if ($num > 25) {
-                       return "[[fib will only calculate the first 25 numbers in the sequence]]";
+                       error "can only calculate the first 25 numbers in the sequence";
                }
                return fib($num);
        }
@@ -182,7 +182,7 @@ does for numbers less than 1. Or for any number that's not an integer. In
 either case, it will run forever. Here's one way to fix that:
 
                if (int($num) != $num || $num < 1) {
-                       return "[[fib positive integers only, please]]";
+                       error "positive integers only, please";
                }
 
 As these security problems have demonstrated, even a simple input from the
index 5eaae199742fe6c6079ea72b1712f01cc10a3bb2..b4baf07f4a32ba4af0bdfd40e3cd0d3f2657d80e 100644 (file)
@@ -2,7 +2,17 @@
 system developed by Matt Mackall. Ikiwiki supports storing a wiki in a
 mercurial repository.
 
-Ikiwiki can run as a post-update hook to update a wiki whenever commits
+Ikiwiki can run as a `post-commit` and/or `incoming` hook to update a wiki whenever commits or remote pushes
 come in. When running as a [[cgi]] with Mercurial, ikiwiki automatically
 commits edited pages, and uses the Mercurial history to generate the
 [[RecentChanges]] page.
+
+Example for a `.hg/hgrc` file in `$SRCDIR`:
+
+    [hooks]
+    post-commit = /home/abe/bin/rebuildwiki
+    incoming = /home/abe/bin/rebuildwiki
+
+Do not use `commit` or `precommit` hooks or ikiwiki will run into a dead lock when committing in `$SRCDIR`
+
+See also [[todo/mercurial|todo/mercurial]]
index b985079914f9230163a67283465fc9b71ed2b14f..0e3bfb3e6caf3226988a74f5f299debd8ab62ee2 100644 (file)
        padding: .2em .4em;
 }
 
-.tags {
+.pagefooter {
        clear: both;
 }
 
+.tags {
+}
+
 #pageinfo {
-       clear: both;
        margin: 1em 0;
        border-top: 1px solid #000;
 }
@@ -140,12 +142,15 @@ div.recentchanges {
 .pagedate,
 .pagelicense,
 .pagecopyright {
-       clear: both;
        font-style: italic;
        display: block;
        margin-top: 1em;
 }
 
+.error {
+       color: #C00;
+}
+
 /* Used for invalid form fields. */
 .fb_invalid {
        color: red;
index b0f5f14c160451367a4f133091948ad9e55689b9..1dfd715383526269b2d3ea867ae6abcc80bb8f2a 100644 (file)
@@ -1,4 +1,4 @@
-I have a [blog](http://git.kitenet.net/?p=joey/home;a=blob_plain;f=bin/blog)
+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.
index b7b8296ba2dcb9583ba33a38371b4148489abe61..b97c81efa2c1ea6e0e647b65a0b43e12efa81bc0 100644 (file)
@@ -72,3 +72,8 @@ a dedicated plugin, called `genealogictitle` or whatever, and :
 -- intrigeri
 
 > Plugin sounds reasonable. --[[Joey]]
+
+>> Well, it seems I once more designed a solution before clearly
+>> defining my problem... What I really need is more generic, can be
+>> done as a plugin, and deserves its own [[todo|pedigree_plugin]], so
+>> I'm tagging this one wontfix^W [[done]]. I'm sorry. -- intrigeri
diff --git a/doc/todo/color_plugin.mdwn b/doc/todo/color_plugin.mdwn
new file mode 100644 (file)
index 0000000..ac6eb8c
--- /dev/null
@@ -0,0 +1,28 @@
+Recently I've wanted to colour some piece of text on my Ikiwiki page.
+It seems that Markdown can do it only using HTML tags, so I used
+&lt;span class="color"&gt;foo bar baz&lt;/span&gt;.
+
+However, in my opinion mixing Markdown syntax and HTML tags is rather ugly,
+so maybe we should create a new color plugin to add more color to Ikiwiki ;)
+I know that another Wikis have similar plugin, for example
+[WikiDot](http://www.wikidot.com/).
+
+I've noticed that htmlscrubber plugin strips `style` attribute, because of
+security, so probably we need to use `class` attribute of HTML. But then
+we have to customize our `local.css` file to add all color we want to use.
+It's not as easy in usage like color name or definition as plugin argument,
+but I don't have a better idea right now.
+
+What do you think about it? --[[PaweÅ‚|ptecza]]
+
+> Making a plugin preserve style attributes can be done, it just has to add
+> them after the sanitize step, which strips them. The general method is
+> adding placeholders first, and replacing them with the real html later.
+> 
+> The hard thing to me seems to be finding a syntax that is better than a
+> `<span>`. A preprocessor directive is not really any less ugly than html
+> tags, though at least it could play nicely with nested markdown: --[[Joey]]
+> 
+>      \[[color red,green """
+>      Xmas-colored markdown here
+>      """]]
index c31ce105c467c7ca06a17ed4a5f54e3c9f32494c..84c99dabae0c4801cca429f5f1e44e1b160f4ddd 100644 (file)
@@ -480,4 +480,8 @@ It is in a [darcs repository](http://joyful.com/darcsweb/darcsweb.cgi?r=ikiwiki-
 >   conflicts and return a page with conflict markers for the user to fix
 >   the conflict.
 
+I have addressed the recentchanges bit, you can find my hacked up darcs.pm at <http://web.mornfall.net/stuff/web-root/IkiWiki/Rcs/darcs.pm>.
+
+It's got couple of FIXMEs, and a very site-specific filter for recentchanges. Not sure how to do that better though. I will eventually add web commits, probably of my own (and mention it here).
+
 [[tag patch]]
index 0a1098f70fe3ff3d922ac949ebd61865a47a2d05..77b538c02a9876834bb722a1edb7054ad4258153 100644 (file)
@@ -1,5 +1,3 @@
-* Need to get post commit hook working (or an example of how to use it.)
-  * See below. --[[bma]]
 * rcs_notify is not implemented (not needed in this branch --[[Joey]])
 * Is the code sufficiently robust? It just warns when mercurial fails.
 * When rcs_commit is called with a $user that is an openid, it will be
diff --git a/doc/todo/pedigree_plugin.mdwn b/doc/todo/pedigree_plugin.mdwn
new file mode 100644 (file)
index 0000000..8214385
--- /dev/null
@@ -0,0 +1,76 @@
+After realizing (thanks to
+[[Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename]])
+that I needed some kind of "parentlinks on steroids", I wrote a new
+plugin, called pedigree.
+
+This plugin provides a bunch of loops that one can use in his/her
+`HTML::Template`'s to iterate over all or a subset of a page's
+parents. Inside these loops, half a dozen variables are made
+available, in addition to `PAGE` and `URL` that are already provided
+by parentlinks.
+
+Amongst many possibilities, one can e.g. simply use this plugin to
+give every parent link a different `class=` attribute, depending
+either on its depth in the path leading to the current page, or on its
+distance to it.
+
+The code and documentation (including simple and complex usage
+examples) are in the 'pedigree' Git branch in this repo:
+
+       git://repo.or.cz/ikiwiki/intrigeri.git
+
+Seems there is also a [gitweb](http://repo.or.cz/w/ikiwiki/intrigeri.git).
+
+> Ok, I'll take a look. BTW, could you allow user joey on repo.or.cz
+> push access to the main ikiwiki repo you set up there? --[[Joey]]
+
+>> I did not. The main ikiwiki repo on repo.or.cz seems to have been
+>> been setup by johannes.schindelin@gmx.de ; mine is what they call
+>> a "fork" (but it's not, obviously).
+
+Any opinions on the idea/design/implementation?
+
+> Seems that there should be a more generic way to do `PEDIGREE_BUT_ROOT`
+> and `PEDIGREE_BUT_TWO_OLDEST` (also `is_second_ancestor`,
+> `is_grand_mother` etc). One way would be to include in `PEDIGREE`
+> a set of values like `depth_1`, `depth_2`, etc. The one corresponding
+> to the `absdepth` would be true. This would allow a template like this:
+
+       <TMPL_LOOP NAME="PEDIGREE">
+         <TMPL_IF NAME="depth_1">
+           </TMPL_ELSE>
+           <TMPL_IF NAME="depth_2">
+           </TMPL_ELSE>
+             <TMPL_VAR PAGE> /* only showing pages 2 levels deep */
+           </TMPL_IF>
+         </TMPL_IF>
+       </TMPL_LOOP>
+
+> The only missing information would be `reldepth`, but in the above
+> example the author of that template knows that it's `absdepth - 1`
+> (Things would be a lot nicer if `HTML::Template` had equality tests!)
+> 
+> Since this would make it more generic and also fix your one documented
+> bug, I can see no reason not to do it. ;-) --[[Joey]]
+
+>> Thanks for your comments. I'll answer soon. (Grrr, I really
+>> need to find a way to edit this wiki offline, every minute
+>> online costs bucks to me, my old modem gently weeps,
+>> and I hate webbrowsers.) -- intrigeri
+
+(I'll try never to rebase this branch, but writing this plugin has
+been a pretext for me to start learning Git, so...)
+
+To finish with, it seems no plugin bundled with ikiwiki uses the current
+parentlinks implementation, so one could event think of moving it from the
+core to this plugin (which should then be enabled by default, since the
+default templates do use parentlinks ;).
+
+> I think that moving parentlinks out to a plugin is a good idea.
+> However, if it's done, I think the plugin should be named parentlinks,
+> and should continue to use the same template variables as are used now,
+> to avoid needing to change custom templates. Pedigree is a quite nice
+> name, but renaming it to parentlinks seems to be the way to go to me.
+> --[[Joey]]
+
+>> Agreed. -- intrigeri
diff --git a/doc/users/smcv.mdwn b/doc/users/smcv.mdwn
new file mode 100644 (file)
index 0000000..33ae450
--- /dev/null
@@ -0,0 +1 @@
+I'm trying to add enough features/fix enough bugs to convert [smcv.pseudorandom.co.uk](http://smcv.pseudorandom.co.uk/) from Django + Python + misc hacks to ikiwiki.
index 0a6a86678e7591f4c3178cbe0e8c5e2236ac3148..ba3dd680d409d8afcf9e0e4019e618e6884acde2 100644 (file)
@@ -9,7 +9,7 @@ use IkiWiki::Setup::Standard {
        underlaydir => "underlays/basewiki",
        wrappers => [],
        discussion => 0,
-       exclude => qr/\/discussion/,
+       exclude => qr/\/discussion|bugs\/*|todo\/*/,
        locale => '',
        verbose => 1,
        syslog => 0,
index e0a59182422ae0d2aaa1b69d15fa3463f144d9c8..3bb881c4320f246b1edd4f9af80014149036d9e4 100755 (executable)
@@ -123,7 +123,10 @@ sub main () { #{{{
        }
        elsif ($config{cgi}) {
                require IkiWiki::CGI;
-               cgi();
+               eval {cgi()};
+               if ($@) {
+                       cgierror($@);
+               }
        }
        elsif ($config{render}) {
                require IkiWiki::Render;
index 8aef6cc1a4bb487ae0f62a76891f895b69902280..71cddfdd0348fe5144db3b8ebb541d1236c737c7 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-07-11 06:04-0400\n"
+"POT-Creation-Date: 2008-07-13 15:04-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -50,7 +50,7 @@ msgid "%s is not an editable page"
 msgstr ""
 
 #: ../IkiWiki/CGI.pm:438 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:266 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/inline.pm:261 ../IkiWiki/Plugin/opendiscussion.pm:17
 #: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:95
 #: ../IkiWiki/Render.pm:162
 msgid "discussion"
@@ -71,6 +71,10 @@ msgstr ""
 msgid "You are banned."
 msgstr ""
 
+#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:782
+msgid "Error"
+msgstr ""
+
 #: ../IkiWiki/Plugin/aggregate.pm:53
 msgid "Aggregation triggered via web."
 msgstr ""
@@ -148,7 +152,7 @@ msgstr ""
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:37 ../IkiWiki/Setup.pm:115
+#: ../IkiWiki/Plugin/amazon_s3.pm:37 ../IkiWiki/Setup.pm:117
 msgid "done"
 msgstr ""
 
@@ -190,7 +194,7 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:18
+#: ../IkiWiki/Plugin/conditional.pm:18 ../IkiWiki/Plugin/testpagespec.pm:17
 #, perl-format
 msgid "%s parameter is required"
 msgstr ""
@@ -208,7 +212,7 @@ msgstr ""
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:111
+#: ../IkiWiki/Plugin/edittemplate.pm:113
 msgid "failed to process"
 msgstr ""
 
@@ -228,6 +232,10 @@ msgstr ""
 msgid "prog not a valid graphviz program"
 msgstr ""
 
+#: ../IkiWiki/Plugin/img.pm:49
+msgid "Image::Magick is not installed"
+msgstr ""
+
 #: ../IkiWiki/Plugin/img.pm:56
 #, perl-format
 msgid "bad size \"%s\""
@@ -253,33 +261,33 @@ msgstr ""
 msgid "Must specify url to wiki with --url when using --rss or --atom"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:106
+#: ../IkiWiki/Plugin/inline.pm:101
 msgid "missing pages parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:154
+#: ../IkiWiki/Plugin/inline.pm:149
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:225
+#: ../IkiWiki/Plugin/inline.pm:220
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:241
+#: ../IkiWiki/Plugin/inline.pm:236
 #, perl-format
 msgid "nonexistant template %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:274 ../IkiWiki/Render.pm:99
+#: ../IkiWiki/Plugin/inline.pm:269 ../IkiWiki/Render.pm:99
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:504
+#: ../IkiWiki/Plugin/inline.pm:506
 msgid "RPC::XML::Client not found, not pinging"
 msgstr ""
 
-#: ../IkiWiki/Plugin/linkmap.pm:98
+#: ../IkiWiki/Plugin/linkmap.pm:97
 msgid "failed to run dot"
 msgstr ""
 
@@ -297,15 +305,15 @@ msgstr ""
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:137
+#: ../IkiWiki/Plugin/meta.pm:141
 msgid "stylesheet not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:171
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "redir page not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:184
+#: ../IkiWiki/Plugin/meta.pm:188
 msgid "redir cycle is not allowed"
 msgstr ""
 
@@ -387,11 +395,11 @@ msgstr ""
 msgid "LWP not found, not pinging"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:65
+#: ../IkiWiki/Plugin/poll.pm:60
 msgid "vote"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:73
+#: ../IkiWiki/Plugin/poll.pm:68
 msgid "Total votes:"
 msgstr ""
 
@@ -400,7 +408,7 @@ msgid "polygen not installed"
 msgstr ""
 
 #: ../IkiWiki/Plugin/polygen.pm:51
-msgid "polygen failed"
+msgid "command failed"
 msgstr ""
 
 #: ../IkiWiki/Plugin/postsparkline.pm:32
@@ -604,47 +612,47 @@ msgstr ""
 msgid "getctime not implemented"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:286 ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:290 ../IkiWiki/Render.pm:311
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:361
+#: ../IkiWiki/Render.pm:365
 #, perl-format
 msgid "removing old page %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:401
+#: ../IkiWiki/Render.pm:405
 #, perl-format
 msgid "scanning %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:406
+#: ../IkiWiki/Render.pm:410
 #, perl-format
 msgid "rendering %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:427
+#: ../IkiWiki/Render.pm:431
 #, perl-format
 msgid "rendering %s, which links to %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:448
+#: ../IkiWiki/Render.pm:452
 #, perl-format
 msgid "rendering %s, which depends on %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:487
+#: ../IkiWiki/Render.pm:491
 #, perl-format
 msgid "rendering %s, to update its backlinks"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:499
+#: ../IkiWiki/Render.pm:503
 #, perl-format
 msgid "removing %s, no longer rendered by %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:523
+#: ../IkiWiki/Render.pm:527
 #, perl-format
 msgid "ikiwiki: cannot render %s"
 msgstr ""
@@ -660,11 +668,11 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr ""
 
-#: ../IkiWiki/Setup.pm:105
+#: ../IkiWiki/Setup.pm:107
 msgid "rebuilding wiki.."
 msgstr ""
 
-#: ../IkiWiki/Setup.pm:108
+#: ../IkiWiki/Setup.pm:110
 msgid "refreshing wiki.."
 msgstr ""
 
@@ -712,15 +720,15 @@ msgstr ""
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#: ../IkiWiki.pm:194 ../IkiWiki.pm:195
-msgid "Error"
-msgstr ""
-
 #. translators: The first parameter is a
 #. translators: preprocessor directive name,
 #. translators: the second a page name, the
 #. translators: third a number.
-#: ../IkiWiki.pm:770
+#: ../IkiWiki.pm:765
 #, perl-format
 msgid "%s preprocessing loop detected on %s at depth %i"
 msgstr ""
+
+#: ../IkiWiki.pm:1212
+msgid "yes"
+msgstr ""
index baee285e24409fc699edec0609e3243e825d8092..994e3e3779d94e118f63a916d3e70dca23c379ae 100755 (executable)
@@ -6,7 +6,7 @@ use Test::More 'no_plan';
 ok(! system("mkdir t/tmp"));
 ok(! system("make -q ikiwiki.out"));
 ok(! system("make extra_install DESTDIR=`pwd`/t/tmp/install PREFIX=/usr >/dev/null"));
-ok(! system("LANG= perl -T -I. ./ikiwiki.out -plugin smiley -plugin brokenlinks -rebuild -underlaydir=t/tmp/install/usr/share/ikiwiki/basewiki -templatedir=templates t/basewiki_brokenlinks t/tmp/out"));
+ok(! system("LC_ALL=C perl -T -I. ./ikiwiki.out -plugin smiley -plugin brokenlinks -rebuild -underlaydir=t/tmp/install/usr/share/ikiwiki/basewiki -templatedir=templates t/basewiki_brokenlinks t/tmp/out"));
 ok(`grep 'no broken links' t/tmp/out/index.html`);
 ok(-e "t/tmp/out/style.css");
 ok(! system("rm -rf t/tmp t/basewiki_brokenlinks/.ikiwiki"));
index 71d57b00830fcdf821d87535f195e8add7d4e173..ffcb897a8d250b88fd1a3e22d1ab765329da39f6 100644 (file)
@@ -1,4 +1,7 @@
 <div class="inlinepage">
+
+<div class="inlineheader">
+
 <TMPL_IF NAME="AUTHOR">
 <span class="author">
 <TMPL_IF NAME="AUTHORURL">
 <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a>
 </TMPL_IF>
 </span>
+
+</div><!--.inlineheader-->
+
+<div class="inlinecontent">
 <TMPL_VAR CONTENT>
+</div><!--.inlinecontent-->
+
+<div class="inlinefooter">
 
 <span class="pagedate">
 Posted <TMPL_VAR CTIME>
@@ -52,7 +62,9 @@ License: <TMPL_VAR LICENSE>
 <li><TMPL_VAR DISCUSSIONLINK></li>
 </TMPL_IF>
 </ul>
-</div>
+</div><!--.actions-->
 </TMPL_IF>
 
-</div>
+</div><!--.inlinefooter-->
+
+</div><!--.inlinepage-->
index 166f3c5604c2fc91bade3963600ae84917fd8b97..d39c9aa2ab182707eb0bb5fc845348f1390aa869 100644 (file)
@@ -17,6 +17,7 @@
 </head>
 <body>
 
+<div class="pageheader">
 <div class="header">
 <span>
 <TMPL_LOOP NAME="PARENTLINKS">
@@ -50,6 +51,7 @@
 </ul>
 </div>
 </TMPL_IF>
+</div> <!-- .pageheader -->
 
 <TMPL_IF SIDEBAR>
 <div id="sidebar">
@@ -61,7 +63,7 @@
 <TMPL_VAR CONTENT>
 </div>
 
-<div id="footer">
+<div id="footer" class="pagefooter">
 <div id="pageinfo">
 
 <TMPL_IF NAME="TAGS">
@@ -88,7 +90,7 @@ Links:
 </span>
 </span>
 </TMPL_IF>
-</div>
+</div><!-- #backlinks -->
 </TMPL_IF>
 
 <TMPL_IF COPYRIGHT>
@@ -110,10 +112,10 @@ Last edited <TMPL_VAR NAME=MTIME>
 <!-- Created <TMPL_VAR NAME=CTIME> -->
 </div>
 
-</div>
+</div><!-- #pageinfo -->
 <TMPL_IF EXTRAFOOTER><TMPL_VAR EXTRAFOOTER></TMPL_IF>
 <!-- from <TMPL_VAR NAME=WIKINAME> -->
-</div>
+</div><!-- .pagefooter #footer -->
 
 </body>
 </html>