diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-09-09 14:44:58 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-09-09 14:44:58 -0400 |
commit | 6f46cc3b3134e947bb2c5f1ae7dfdd85c9d9dc0c (patch) | |
tree | 1153c6722899aa5bf55b774903419184d56c4403 /IkiWiki/Plugin | |
parent | 848d0d0a3bdbae74133f3a14c13923c696f28ffb (diff) |
progress: New plugin to generate progress bars (willu)
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/progress.pm | 74 |
1 files changed, 74 insertions, 0 deletions
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 <<EODIV +<div class="progress"> + <div class="progress-done" style="width: $fill">$fill</div> +</div> +EODIV +} # }}} + +sub format(@) { #{{{ + my %params = @_; + + # If HTMLScrubber has removed the style attribute, then bring it back + + $params{content} =~ s!<div class="progress-done">($percentage_pattern)</div>!<div class="progress-done" style="width: $1">$1</div>!g; + + return $params{content}; +} #}}} + +1 |