progress: New plugin to generate progress bars (willu)
parent
848d0d0a3b
commit
6f46cc3b31
|
@ -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
|
|
@ -3,6 +3,7 @@ ikiwiki (2.64) UNRELEASED; urgency=low
|
|||
* Avoid uninitialised value when --dumpsetup is used and no srcdir/destdir
|
||||
specified.
|
||||
* 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
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@ Files: mercurial.pm
|
|||
Copyright: © 2006 Emanuele Aina
|
||||
License: GPL-2+
|
||||
|
||||
Files: monotone.pm, listdirectives.pm
|
||||
Copyright: © 2007 William Uther
|
||||
Files: monotone.pm, listdirectives.pm, progress.pm
|
||||
Copyright: © 2007, 2008 William Uther
|
||||
License: GPL-2+
|
||||
|
||||
Files: tla.pm
|
||||
|
|
|
@ -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"]]
|
|
@ -249,6 +249,22 @@ div.poll {
|
|||
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 {
|
||||
background: url(wikiicons/openidlogin-bg.gif) no-repeat;
|
||||
background-color: #fff;
|
||||
|
|
|
@ -127,101 +127,4 @@ Any comments? --[[Paweł|ptecza]]
|
|||
>>>>> I like it, but I think that Joey should take a look at that patch too :)
|
||||
>>>>> --[[Paweł|ptecza]]
|
||||
|
||||
#!/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("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"]]
|
||||
>>>>>> Reviewed, looks excellent, added. [[done]] --[[Joey]]
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\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"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -129,7 +129,7 @@ msgstr ""
|
|||
msgid "deleting bucket.."
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:192
|
||||
#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:193
|
||||
msgid "done"
|
||||
msgstr ""
|
||||
|
||||
|
@ -187,18 +187,18 @@ msgstr ""
|
|||
msgid "There are no broken links!"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:31
|
||||
#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
|
||||
#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:30
|
||||
#: ../IkiWiki/Plugin/cutpaste.pm:45 ../IkiWiki/Plugin/cutpaste.pm:61
|
||||
#: ../IkiWiki/Plugin/testpagespec.pm:26
|
||||
#, perl-format
|
||||
msgid "%s parameter is required"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/cutpaste.pm:67
|
||||
#: ../IkiWiki/Plugin/cutpaste.pm:66
|
||||
msgid "no text was copied in this page"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/cutpaste.pm:70
|
||||
#: ../IkiWiki/Plugin/cutpaste.pm:69
|
||||
#, perl-format
|
||||
msgid "no text was copied in this page with id %s"
|
||||
msgstr ""
|
||||
|
@ -862,11 +862,11 @@ msgstr ""
|
|||
msgid "generating wrappers.."
|
||||
msgstr ""
|
||||
|
||||
#: ../ikiwiki.in:181
|
||||
#: ../ikiwiki.in:182
|
||||
msgid "rebuilding wiki.."
|
||||
msgstr ""
|
||||
|
||||
#: ../ikiwiki.in:184
|
||||
#: ../ikiwiki.in:185
|
||||
msgid "refreshing wiki.."
|
||||
msgstr ""
|
||||
|
||||
|
|
Loading…
Reference in New Issue