From: Joey Hess <joey@kodama.kitenet.net>
Date: Tue, 9 Sep 2008 18:44:58 +0000 (-0400)
Subject: progress: New plugin to generate progress bars (willu)
X-Git-Tag: 2.64~92
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/6f46cc3b3134e947bb2c5f1ae7dfdd85c9d9dc0c?ds=inline

progress: New plugin to generate progress bars (willu)
---

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
diff --git a/debian/changelog b/debian/changelog
index 6ef68a7f6..fb1da867c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
 
diff --git a/debian/copyright b/debian/copyright
index a24970e29..3311b6626 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -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
diff --git a/doc/plugins/progress.mdwn b/doc/plugins/progress.mdwn
new file mode 100644
index 000000000..987d1ec06
--- /dev/null
+++ b/doc/plugins/progress.mdwn
@@ -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"]]
diff --git a/doc/style.css b/doc/style.css
index 44a6e0fe1..595a38dfa 100644
--- a/doc/style.css
+++ b/doc/style.css
@@ -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;
diff --git a/doc/todo/progressbar_plugin.mdwn b/doc/todo/progressbar_plugin.mdwn
index 3401bca85..263e7a69d 100644
--- a/doc/todo/progressbar_plugin.mdwn
+++ b/doc/todo/progressbar_plugin.mdwn
@@ -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]]
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index fcf1112d9..a6599e046 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -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 ""