X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/18b3e970ffcc0f74d68538b7094f76442a294609..7481329bdd11d81c4b3e85a446ab1e4bfcc298c8:/IkiWiki/Plugin/sparkline.pm diff --git a/IkiWiki/Plugin/sparkline.pm b/IkiWiki/Plugin/sparkline.pm index bcff46aeb..e28d2605a 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 2.00; +use IkiWiki 3.00; use IPC::Open2; my $match_num=qr/[-+]?[0-9]+(?:\.[0-9]+)?/; @@ -14,11 +14,21 @@ my %locmap=( left => 'TEXT_LEFT', ); -sub import { #{{{ +sub import { + hook(type => "getsetup", id => "sparkline", call => \&getsetup); hook(type => "preprocess", id => "sparkline", call => \&preprocess); -} # }}} - -sub preprocess (@) { #{{{ +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => undef, + section => "widget", + }, +} + +sub preprocess (@) { my %params=@_; my $php; @@ -66,7 +76,7 @@ sub preprocess (@) { #{{{ my ($x, $y, $color, $diameter, $text, $location)= split(/\s*,\s*/, $value); if (! defined $diameter || $diameter < 0) { - error gettext("bad featurepoint diameter"); + error gettext("invalid featurepoint diameter"); } $x=int($x); $y=int($y); @@ -76,7 +86,7 @@ sub preprocess (@) { #{{{ if (defined $location) { $location=$locmap{$location}; if (! defined $location) { - error gettext("bad featurepoint location"); + error gettext("invalid featurepoint location"); } } $php.=qq{\$sparkline->SetFeaturePoint($x, $y, '$color', $diameter}; @@ -92,7 +102,7 @@ sub preprocess (@) { #{{{ my $height=int($params{height} || 20); if ($height < 2 || $height > 100) { - error gettext("bad height value"); + error gettext("invalid height value"); } if ($style eq "Bar") { $php.=qq{\$sparkline->Render($height);\n}; @@ -103,7 +113,7 @@ sub preprocess (@) { #{{{ } my $width=int($params{width}); if ($width < 2 || $width > 1024) { - error gettext("bad width value"); + error gettext("invalid width value"); } $php.=qq{\$sparkline->RenderResampled($width, $height);\n}; } @@ -112,16 +122,16 @@ sub preprocess (@) { #{{{ # Use the sha1 of the php code that generates the sparkline as # the base for its filename. - eval q{use Digest::SHA1}; + eval q{use Digest::SHA}; error($@) if $@; my $fn=$params{page}."/sparkline-". - IkiWiki::possibly_foolish_untaint(Digest::SHA1::sha1_hex($php)). + IkiWiki::possibly_foolish_untaint(Digest::SHA::sha1_hex($php)). ".png"; will_render($params{page}, $fn); if (! -e "$config{destdir}/$fn") { my $pid; - my $sigpipe=0;; + my $sigpipe=0; $SIG{PIPE}=sub { $sigpipe=1 }; $pid=open2(*IN, *OUT, "php"); @@ -140,7 +150,7 @@ sub preprocess (@) { #{{{ waitpid $pid, 0; $SIG{PIPE}="DEFAULT"; - if ($sigpipe) { + if ($sigpipe || ! defined $png) { error gettext("failed to run php"); } @@ -148,7 +158,8 @@ sub preprocess (@) { #{{{ writefile($fn, $config{destdir}, $png, 1); } else { - # can't write the file, so embed it in a data uri + # in preview mode, embed the image in a data uri + # to avoid temp file clutter eval q{use MIME::Base64}; error($@) if $@; return "graph'; -} # }}} +} 1