diff options
49 files changed, 370 insertions, 128 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index f1a5f8058..80e317110 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -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}--; diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 6770f6feb..d805506aa 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -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 diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index 4fbcde390..b3d4a5eec 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -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) } } diff --git a/IkiWiki/Plugin/conditional.pm b/IkiWiki/Plugin/conditional.pm index 57db01054..6be52eaa6 100644 --- a/IkiWiki/Plugin/conditional.pm +++ b/IkiWiki/Plugin/conditional.pm @@ -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); } } diff --git a/IkiWiki/Plugin/edittemplate.pm b/IkiWiki/Plugin/edittemplate.pm index 76c1cd42a..d1716a315 100644 --- a/IkiWiki/Plugin/edittemplate.pm +++ b/IkiWiki/Plugin/edittemplate.pm @@ -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); diff --git a/IkiWiki/Plugin/fortune.pm b/IkiWiki/Plugin/fortune.pm index a3b13f687..a78a73d5f 100644 --- a/IkiWiki/Plugin/fortune.pm +++ b/IkiWiki/Plugin/fortune.pm @@ -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"; diff --git a/IkiWiki/Plugin/googlecalendar.pm b/IkiWiki/Plugin/googlecalendar.pm index c6409e5e6..7efa1daa3 100644 --- a/IkiWiki/Plugin/googlecalendar.pm +++ b/IkiWiki/Plugin/googlecalendar.pm @@ -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+)"#; diff --git a/IkiWiki/Plugin/graphviz.pm b/IkiWiki/Plugin/graphviz.pm index fe3559857..b13d15fa6 100644 --- a/IkiWiki/Plugin/graphviz.pm +++ b/IkiWiki/Plugin/graphviz.pm @@ -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); } # }}} diff --git a/IkiWiki/Plugin/img.pm b/IkiWiki/Plugin/img.pm index cc0e84b01..17a9367d3 100644 --- a/IkiWiki/Plugin/img.pm +++ b/IkiWiki/Plugin/img.pm @@ -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. diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 32915c342..5517e3c94 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -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}); diff --git a/IkiWiki/Plugin/linkmap.pm b/IkiWiki/Plugin/linkmap.pm index 82b38f4cb..ab199b723 100644 --- a/IkiWiki/Plugin/linkmap.pm +++ b/IkiWiki/Plugin/linkmap.pm @@ -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; } #}}} diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index d00b6854f..4e0e9e8c7 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -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}; diff --git a/IkiWiki/Plugin/pagetemplate.pm b/IkiWiki/Plugin/pagetemplate.pm index 69a2433a8..205f5a9d7 100644 --- a/IkiWiki/Plugin/pagetemplate.pm +++ b/IkiWiki/Plugin/pagetemplate.pm @@ -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}) { diff --git a/IkiWiki/Plugin/pinger.pm b/IkiWiki/Plugin/pinger.pm index c6fa76e3f..614d42885 100644 --- a/IkiWiki/Plugin/pinger.pm +++ b/IkiWiki/Plugin/pinger.pm @@ -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; diff --git a/IkiWiki/Plugin/polygen.pm b/IkiWiki/Plugin/polygen.pm index 5208a44ec..70378cf1b 100644 --- a/IkiWiki/Plugin/polygen.pm +++ b/IkiWiki/Plugin/polygen.pm @@ -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 diff --git a/IkiWiki/Plugin/postsparkline.pm b/IkiWiki/Plugin/postsparkline.pm index 9e885741e..6fc96f8b3 100644 --- a/IkiWiki/Plugin/postsparkline.pm +++ b/IkiWiki/Plugin/postsparkline.pm @@ -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) { diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm index f1a38ea48..8df60cfe2 100644 --- a/IkiWiki/Plugin/shortcut.pm +++ b/IkiWiki/Plugin/shortcut.pm @@ -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}, diff --git a/IkiWiki/Plugin/sparkline.pm b/IkiWiki/Plugin/sparkline.pm index 69b3512c2..bcff46aeb 100644 --- a/IkiWiki/Plugin/sparkline.pm +++ b/IkiWiki/Plugin/sparkline.pm @@ -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}) { diff --git a/IkiWiki/Plugin/table.pm b/IkiWiki/Plugin/table.pm index 11474c8f0..892ea182e 100644 --- a/IkiWiki/Plugin/table.pm +++ b/IkiWiki/Plugin/table.pm @@ -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; diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm index aa1f57c07..c33dbbb83 100644 --- a/IkiWiki/Plugin/template.pm +++ b/IkiWiki/Plugin/template.pm @@ -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}); diff --git a/IkiWiki/Plugin/testpagespec.pm b/IkiWiki/Plugin/testpagespec.pm index f9ec90d87..4faef7be1 100644 --- a/IkiWiki/Plugin/testpagespec.pm +++ b/IkiWiki/Plugin/testpagespec.pm @@ -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); } } diff --git a/IkiWiki/Plugin/teximg.pm b/IkiWiki/Plugin/teximg.pm index 8c3e88c69..6a6bdd4fa 100644 --- a/IkiWiki/Plugin/teximg.pm +++ b/IkiWiki/Plugin/teximg.pm @@ -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>"; } } #}}} diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index c241fd40b..990fcaaa1 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -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 } diff --git a/IkiWiki/Setup.pm b/IkiWiki/Setup.pm index 2b76efc16..3b7a11253 100644 --- a/IkiWiki/Setup.pm +++ b/IkiWiki/Setup.pm @@ -97,6 +97,8 @@ sub setup () { #{{{ loadplugins(); checkconfig(); + require IkiWiki::Render; + if ($config{render}) { commandline_render(); } diff --git a/debian/changelog b/debian/changelog index f10200a52..3c535fd5f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 diff --git a/debian/control b/debian/control index a50c13c26..36d83c640 100644 --- a/debian/control +++ b/debian/control @@ -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 index 000000000..3d6661d9c --- /dev/null +++ b/doc/bugs/Broken_URL_to_your_blog_script.mdwn @@ -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 index 000000000..f6c0266ba --- /dev/null +++ b/doc/bugs/Missing_build-dep_on_perlmagick__63__.mdwn @@ -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 index 000000000..c0cc3fd9a --- /dev/null +++ b/doc/bugs/Undefined_subroutine_IkiWiki::refresh.mdwn @@ -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]] diff --git a/doc/bugs/__96____96__clear:_both__39____39___for___96__.page__42____39____63__.mdwn b/doc/bugs/__96____96__clear:_both__39____39___for___96__.page__42____39____63__.mdwn index e389ce3ed..a1b5ba94a 100644 --- a/doc/bugs/__96____96__clear:_both__39____39___for___96__.page__42____39____63__.mdwn +++ b/doc/bugs/__96____96__clear:_both__39____39___for___96__.page__42____39____63__.mdwn @@ -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]] diff --git a/doc/bugs/html_errors.mdwn b/doc/bugs/html_errors.mdwn index 5a60e0449..aef2f7f71 100644 --- a/doc/bugs/html_errors.mdwn +++ b/doc/bugs/html_errors.mdwn @@ -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 index 000000000..521ba62f8 --- /dev/null +++ b/doc/bugs/package_build_fails_in_non-English_environment.mdwn @@ -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]] diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 6b49ec58d..4dc55e302 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -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($;@)` diff --git a/doc/plugins/write/tutorial.mdwn b/doc/plugins/write/tutorial.mdwn index 8b12fd183..94b72c763 100644 --- a/doc/plugins/write/tutorial.mdwn +++ b/doc/plugins/write/tutorial.mdwn @@ -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 diff --git a/doc/rcs/mercurial.mdwn b/doc/rcs/mercurial.mdwn index 5eaae1997..b4baf07f4 100644 --- a/doc/rcs/mercurial.mdwn +++ b/doc/rcs/mercurial.mdwn @@ -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]] diff --git a/doc/style.css b/doc/style.css index b98507991..0e3bfb3e6 100644 --- a/doc/style.css +++ b/doc/style.css @@ -35,12 +35,14 @@ 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; diff --git a/doc/tips/blog_script.mdwn b/doc/tips/blog_script.mdwn index b0f5f14c1..1dfd71538 100644 --- a/doc/tips/blog_script.mdwn +++ b/doc/tips/blog_script.mdwn @@ -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. diff --git a/doc/todo/Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename.mdwn b/doc/todo/Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename.mdwn index b7b8296ba..b97c81efa 100644 --- a/doc/todo/Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename.mdwn +++ b/doc/todo/Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename.mdwn @@ -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 index 000000000..ac6eb8c51 --- /dev/null +++ b/doc/todo/color_plugin.mdwn @@ -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 +<span class="color">foo bar baz</span>. + +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 +> """]] diff --git a/doc/todo/darcs.mdwn b/doc/todo/darcs.mdwn index c31ce105c..84c99daba 100644 --- a/doc/todo/darcs.mdwn +++ b/doc/todo/darcs.mdwn @@ -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]] diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 0a1098f70..77b538c02 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -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 index 000000000..8214385d2 --- /dev/null +++ b/doc/todo/pedigree_plugin.mdwn @@ -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 index 000000000..33ae450b2 --- /dev/null +++ b/doc/users/smcv.mdwn @@ -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. diff --git a/docwiki.setup b/docwiki.setup index 0a6a86678..ba3dd680d 100644 --- a/docwiki.setup +++ b/docwiki.setup @@ -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, diff --git a/ikiwiki.in b/ikiwiki.in index e0a591824..3bb881c43 100755 --- a/ikiwiki.in +++ b/ikiwiki.in @@ -123,7 +123,10 @@ sub main () { #{{{ } elsif ($config{cgi}) { require IkiWiki::CGI; - cgi(); + eval {cgi()}; + if ($@) { + cgierror($@); + } } elsif ($config{render}) { require IkiWiki::Render; diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index 8aef6cc1a..71cddfdd0 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 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 "" diff --git a/t/basewiki_brokenlinks.t b/t/basewiki_brokenlinks.t index baee285e2..994e3e377 100755 --- a/t/basewiki_brokenlinks.t +++ b/t/basewiki_brokenlinks.t @@ -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")); diff --git a/templates/inlinepage.tmpl b/templates/inlinepage.tmpl index 71d57b008..ffcb897a8 100644 --- a/templates/inlinepage.tmpl +++ b/templates/inlinepage.tmpl @@ -1,4 +1,7 @@ <div class="inlinepage"> + +<div class="inlineheader"> + <TMPL_IF NAME="AUTHOR"> <span class="author"> <TMPL_IF NAME="AUTHORURL"> @@ -15,7 +18,14 @@ <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--> diff --git a/templates/page.tmpl b/templates/page.tmpl index 166f3c560..d39c9aa2a 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -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> |