From 6f46cc3b3134e947bb2c5f1ae7dfdd85c9d9dc0c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 9 Sep 2008 14:44:58 -0400 Subject: progress: New plugin to generate progress bars (willu) --- IkiWiki/Plugin/progress.pm | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 IkiWiki/Plugin/progress.pm (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/progress.pm b/IkiWiki/Plugin/progress.pm new file mode 100644 index 000000000..e459637b8 --- /dev/null +++ b/IkiWiki/Plugin/progress.pm @@ -0,0 +1,74 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::progress; + +use warnings; +use strict; +use IkiWiki 2.00; + +my $percentage_pattern = qr/[0-9]+\%/; # pattern to validate percentages + +sub import { #{{{ + hook(type => "getsetup", id => "progress", call => \&getsetup); + hook(type => "preprocess", id => "progress", call => \&preprocess); + hook(type => "format", id => "progress", call => \&format); +} # }}} + +sub getsetup () { #{{{ + return + plugin => { + safe => 1, + rebuild => undef, + }, +} #}}} + +sub preprocess (@) { #{{{ + my %params=@_; + + my $fill; + + if (defined $params{percent}) { + $fill = $params{percent}; + ($fill) = $fill =~ m/($percentage_pattern)/; # fill is untainted now + } + elsif (defined $params{totalpages} and defined $params{donepages}) { + add_depends($params{page}, $params{totalpages}); + add_depends($params{page}, $params{donepages}); + + my @pages=keys %pagesources; + my $totalcount=0; + my $donecount=0; + foreach my $page (@pages) { + $totalcount++ if pagespec_match($page, $params{totalpages}, location => $params{page}); + $donecount++ if pagespec_match($page, $params{donepages}, location => $params{page}); + } + + if ($totalcount == 0) { + $fill = "100%"; + } + else { + my $number = $donecount/$totalcount*100; + $fill = sprintf("%u%%", $number); + } + } + else { + error("need either `percent` or `totalpages` and `donepages` parameters"); + } + + return < +
$fill
+ +EODIV +} # }}} + +sub format(@) { #{{{ + my %params = @_; + + # If HTMLScrubber has removed the style attribute, then bring it back + + $params{content} =~ s!
($percentage_pattern)
!
$1
!g; + + return $params{content}; +} #}}} + +1 -- cgit v1.2.3