]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/postsparkline.pm
* external: Fix support of XML::RPC::fault.
[git.ikiwiki.info.git] / IkiWiki / Plugin / postsparkline.pm
index 2bc93088d960a527cef001a7912398b533c1e048..9e885741e073bc4ded2e3947366ea6265d8249db 100644 (file)
@@ -3,7 +3,7 @@ package IkiWiki::Plugin::postsparkline;
 
 use warnings;
 use strict;
 
 use warnings;
 use strict;
-use IkiWiki;
+use IkiWiki 2.00;
 
 sub import { #{{{
        IkiWiki::loadplugin('sparkline');
 
 sub import { #{{{
        IkiWiki::loadplugin('sparkline');
@@ -21,6 +21,13 @@ sub preprocess (@) { #{{{
                return "";
        }
 
                return "";
        }
 
+       if (! exists $params{time} || $params{time} ne 'mtime') {
+               $params{timehash} = \%IkiWiki::pagectime;
+       }
+       else {
+               $params{timehash} = \%IkiWiki::pagemtime;
+       }
+
        if (! exists $params{formula}) {
                return "[[postsparkline ".gettext("missing formula")."]]";
        }
        if (! exists $params{formula}) {
                return "[[postsparkline ".gettext("missing formula")."]]";
        }
@@ -37,21 +44,31 @@ sub preprocess (@) { #{{{
        my @list;
        foreach my $page (keys %pagesources) {
                next if $page eq $params{page};
        my @list;
        foreach my $page (keys %pagesources) {
                next if $page eq $params{page};
-               if (pagespec_match($page, $params{pages}, $params{page})) {
+               if (pagespec_match($page, $params{pages}, location => $params{page})) {
                        push @list, $page;
                }
        }
        
                        push @list, $page;
                }
        }
        
-       @list = sort { $IkiWiki::pagectime{$b} <=> $IkiWiki::pagectime{$a} } @list;
+       @list = sort { $params{timehash}->{$b} <=> $params{timehash}->{$a} } @list;
 
 
-       delete $params{pages};
-       delete $params{formula};
        my @data=eval qq{IkiWiki::Plugin::postsparkline::formula::$formula(\\\%params, \@list)};
        if ($@) {
                return "[[postsparkline error $@]]";
        }
        my @data=eval qq{IkiWiki::Plugin::postsparkline::formula::$formula(\\\%params, \@list)};
        if ($@) {
                return "[[postsparkline error $@]]";
        }
+
+       if (! @data) {
+               # generate an empty graph
+               push @data, 0 foreach 1..($params{max} / 2);
+       }
+
+       my $color=exists $params{color} ? "($params{color})" : "";
+
+       delete $params{pages};
+       delete $params{formula};
+       delete $params{ftime};
+       delete $params{color};
        return IkiWiki::Plugin::sparkline::preprocess(%params, 
        return IkiWiki::Plugin::sparkline::preprocess(%params, 
-               map { $_ => "" } reverse @data);
+               map { $_.$color => "" } reverse @data);
 } # }}}
 
 sub perfoo ($@) {
 } # }}}
 
 sub perfoo ($@) {
@@ -63,7 +80,7 @@ sub perfoo ($@) {
        my $count=0;
        my @data;
        foreach (@_) {
        my $count=0;
        my @data;
        foreach (@_) {
-               $cur=$sub->($IkiWiki::pagectime{$_});
+               $cur=$sub->($params->{timehash}->{$_});
                if (defined $prev) {
                        if ($prev != $cur) {
                                push @data, "$prev,$count";
                if (defined $prev) {
                        if ($prev != $cur) {
                                push @data, "$prev,$count";
@@ -114,7 +131,7 @@ sub interval ($@) {
        my $max=$params->{max};
        my @data;
        for (my $i=1; $i < @_; $i++) {
        my $max=$params->{max};
        my @data;
        for (my $i=1; $i < @_; $i++) {
-               push @data, $IkiWiki::pagectime{$_[$i-1]} - $IkiWiki::pagectime{$_[$i]};
+               push @data, $params->{timehash}->{$_[$i-1]} - $params->{timehash}->{$_[$i]};
                last if --$max <= 0;
        }
        return @data;
                last if --$max <= 0;
        }
        return @data;