Add patch

master
http://www.cse.unsw.edu.au/~willu/ 2008-08-09 08:31:53 -04:00 committed by Joey Hess
parent 146c3b98cd
commit 0eab8e9e67
1 changed files with 69 additions and 0 deletions

View File

@ -50,3 +50,72 @@ Any comments? --[[Paweł|ptecza]]
> to have a progress bar marking how many bugs were compete for a
> particular milestone. -- [[Will]]
>> Attached is a [[patch]] (well, source) for this. You also need to add the proposed CSS above to `style.css`.
>> At the moment this plugin interacts poorly with the [[plugins/htmlscrubber]] plugin.
>> HTMLScrubber plugin removes the `style` attribute from the `progress-done` `div` tag, and so it defaults
>> to a width of 100%. -- [[Will]]
#!/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);
} # }}}
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("Missing parameters to progress plugin. Need either `percent` or `totalpages` and `donepages` parameters.");
}
return <<EODIV
<div class="progress">
<div class="progress-done" style="width: $fill">$fill</div>
</div>
EODIV
} # }}}
1