progress: New plugin to generate progress bars (willu)

master
Joey Hess 2008-09-09 14:44:58 -04:00
parent 848d0d0a3b
commit 6f46cc3b31
7 changed files with 121 additions and 108 deletions

View File

@ -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

1
debian/changelog vendored
View File

@ -3,6 +3,7 @@ ikiwiki (2.64) UNRELEASED; urgency=low
* Avoid uninitialised value when --dumpsetup is used and no srcdir/destdir * Avoid uninitialised value when --dumpsetup is used and no srcdir/destdir
specified. specified.
* ddate: Stop clobbering timeformat when not enabled. * ddate: Stop clobbering timeformat when not enabled.
* progress: New plugin to generate progress bars (willu)
-- Joey Hess <joeyh@debian.org> Mon, 08 Sep 2008 19:21:20 -0400 -- Joey Hess <joeyh@debian.org> Mon, 08 Sep 2008 19:21:20 -0400

4
debian/copyright vendored
View File

@ -24,8 +24,8 @@ Files: mercurial.pm
Copyright: © 2006 Emanuele Aina Copyright: © 2006 Emanuele Aina
License: GPL-2+ License: GPL-2+
Files: monotone.pm, listdirectives.pm Files: monotone.pm, listdirectives.pm, progress.pm
Copyright: © 2007 William Uther Copyright: © 2007, 2008 William Uther
License: GPL-2+ License: GPL-2+
Files: tla.pm Files: tla.pm

View File

@ -0,0 +1,19 @@
[[!template id=plugin name=progress author="[[Will]]"]]
[[!tag type/meta]]
Provides a \\[[!progress ]] [[ikiwiki/directive]] that displays a
progress bar.
There are two possible parameter sets. The first is a single parameter
`percent` which holds a percentage figure for how complete the progress bar is.
The second possible set of parameters is a pair of [PageSpecs|[ikiwiki/PageSpec]],
`totalpages` and `donepages`. The progress plugin counts the number of
pages in each pagespec and shows the percentage of the total pages that are
done.
This plugin is included in ikiwiki, but is not enabled by default.
If it is turned on it can show what percentage of pages have discussion pages:
\[[!progress totalpages="* and !*/Discussion" donepages="*/Discussion"]]

View File

@ -249,6 +249,22 @@ div.poll {
border: 1px solid #aaa; border: 1px solid #aaa;
} }
div.progress {
margin-top: 1ex;
margin-bottom: 1ex;
border: 1px solid #888;
width: 400px;
background: #eee;
color: black !important;
padding: 1px;
}
div.progress-done {
background: #ea6 !important;
color: black !important;
text-align: center;
padding: 1px;
}
input#openid_url { input#openid_url {
background: url(wikiicons/openidlogin-bg.gif) no-repeat; background: url(wikiicons/openidlogin-bg.gif) no-repeat;
background-color: #fff; background-color: #fff;

View File

@ -127,101 +127,4 @@ Any comments? --[[Paweł|ptecza]]
>>>>> I like it, but I think that Joey should take a look at that patch too :) >>>>> I like it, but I think that Joey should take a look at that patch too :)
>>>>> --[[Paweł|ptecza]] >>>>> --[[Paweł|ptecza]]
#!/usr/bin/perl >>>>>> Reviewed, looks excellent, added. [[done]] --[[Joey]]
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("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
} # }}}
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
Here is a potential documentation page:
-----
[[!template id=plugin name=progress author="[[Will]]"]]
[[!tag type/meta]]
Provides a \\[[!progress ]] [[ikiwiki/Directive]] that is
replaced with a progress bar.
There are two possible parameter sets. The first is a single parameter
`percent` which holds a percentage figure for how complete the progress bar is.
The second possible set of parameters is a pair of [[ikiwiki/PageSpec]]s,
`totalpages` and `donepages`. The progress plugin counts the number of
pages in each pagespec and shows the percentage of the total pages that are
done.
This plugin is included in ikiwiki, but is not enabled by default.
If it is turned on it can show what percentage of pages have discussion pages:
\[[!progress totalpages="* and !*/Discussion" donepages="*/Discussion"]]

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-09-05 13:41-0400\n" "POT-Creation-Date: 2008-09-09 14:40-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -129,7 +129,7 @@ msgstr ""
msgid "deleting bucket.." msgid "deleting bucket.."
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:192 #: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:193
msgid "done" msgid "done"
msgstr "" msgstr ""
@ -187,18 +187,18 @@ msgstr ""
msgid "There are no broken links!" msgid "There are no broken links!"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:31 #: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:30
#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62 #: ../IkiWiki/Plugin/cutpaste.pm:45 ../IkiWiki/Plugin/cutpaste.pm:61
#: ../IkiWiki/Plugin/testpagespec.pm:26 #: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format #, perl-format
msgid "%s parameter is required" msgid "%s parameter is required"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/cutpaste.pm:67 #: ../IkiWiki/Plugin/cutpaste.pm:66
msgid "no text was copied in this page" msgid "no text was copied in this page"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/cutpaste.pm:70 #: ../IkiWiki/Plugin/cutpaste.pm:69
#, perl-format #, perl-format
msgid "no text was copied in this page with id %s" msgid "no text was copied in this page with id %s"
msgstr "" msgstr ""
@ -862,11 +862,11 @@ msgstr ""
msgid "generating wrappers.." msgid "generating wrappers.."
msgstr "" msgstr ""
#: ../ikiwiki.in:181 #: ../ikiwiki.in:182
msgid "rebuilding wiki.." msgid "rebuilding wiki.."
msgstr "" msgstr ""
#: ../ikiwiki.in:184 #: ../ikiwiki.in:185
msgid "refreshing wiki.." msgid "refreshing wiki.."
msgstr "" msgstr ""