Add patch
parent
146c3b98cd
commit
0eab8e9e67
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue