X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/d4d535f17c9348644ac4f166a22fbe12d47578d9..42b6a6178c9432ca13799a1d0dfc2a7d8d37886b:/IkiWiki/Plugin/sparkline.pm diff --git a/IkiWiki/Plugin/sparkline.pm b/IkiWiki/Plugin/sparkline.pm index 27e4ff154..0b9ddd8d2 100644 --- a/IkiWiki/Plugin/sparkline.pm +++ b/IkiWiki/Plugin/sparkline.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::sparkline; use warnings; use strict; -use IkiWiki; +use IkiWiki 2.00; use IPC::Open2; my $match_num=qr/[-+]?[0-9]+(?:\.[0-9]+)?/; @@ -60,13 +60,13 @@ sub preprocess (@) { #{{{ } } elsif (! length $value) { - return "[[sparkline parse error \"$key\"]]"; + return "[[sparkline ".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 bad featurepoint diameter]]"; + return "[[sparkline ".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 bad featurepoint location]]"; + return "[[sparkline ".gettext("bad featurepoint location")."]]"; } } $php.=qq{\$sparkline->SetFeaturePoint($x, $y, '$color', $diameter}; @@ -87,41 +87,37 @@ sub preprocess (@) { #{{{ } if ($c eq 0) { - return "[[sparkline missing values]]"; + return "[[sparkline ".gettext("missing values")."]]"; } my $height=int($params{height} || 20); if ($height < 2 || $height > 100) { - return "[[sparkline bad height value]]"; + return "[[sparkline ".gettext("bad height value")."]]"; } if ($style eq "Bar") { $php.=qq{\$sparkline->Render($height);\n}; } else { if (! exists $params{width}) { - return "[[sparkline missing width parameter]]"; + return "[[sparkline ".gettext("missing width parameter")."]]"; } my $width=int($params{width}); if ($width < 2 || $width > 1024) { - return "[[sparkline bad width value]]"; + return "[[sparkline ".gettext("bad width value")."]]"; } $php.=qq{\$sparkline->RenderResampled($width, $height);\n}; } - if ($params{preview}) { - return "[[sparkline previewing not implemented]]"; - } - $php.=qq{\$sparkline->Output();\n?>\n}; # Use the sha1 of the php code that generates the sparkline as # the base for its filename. eval q{use Digest::SHA1}; error($@) if $@; - my $fn=$params{page}."/sparkline-". + my $fn=$params{destpage}."/sparkline-". IkiWiki::possibly_foolish_untaint(Digest::SHA1::sha1_hex($php)). ".png"; - will_render($params{page}, $fn); + will_render($params{destpage}, $fn); if (! -e "$config{destdir}/$fn") { my $pid; @@ -145,15 +141,22 @@ sub preprocess (@) { #{{{ waitpid $pid, 0; $SIG{PIPE}="DEFAULT"; if ($sigpipe) { - return "[[".gettext("sparkline failed to run php")."]]"; + return "[[sparkline ".gettext("failed to run php")."]]"; } - writefile($fn, $config{destdir}, $png, 1); + if (! $params{preview}) { + writefile($fn, $config{destdir}, $png, 1); + } + else { + # can't write the file, so embed it in a data uri + eval q{use MIME::Base64}; + error($@) if $@; + return ""; + } } - return 'graph'; + return 'graph'; } # }}} 1