From fc11e4ad8106ffe9e2e27aeae72055e1f371e755 Mon Sep 17 00:00:00 2001
From: joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Date: Sun, 26 Nov 2006 20:50:46 +0000
Subject: bugfixes

---
 IkiWiki/Plugin/poll.pm | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

(limited to 'IkiWiki')

diff --git a/IkiWiki/Plugin/poll.pm b/IkiWiki/Plugin/poll.pm
index e92d0292f..bca8f5d54 100644
--- a/IkiWiki/Plugin/poll.pm
+++ b/IkiWiki/Plugin/poll.pm
@@ -94,6 +94,7 @@ sub cgi ($) { #{{{
 		if (defined $oldchoice && $oldchoice eq $choice) {
 			# Same vote; no-op.
 			IkiWiki::redirect($cgi, "$config{url}/".htmlpage($page));
+			exit;
 		}
 
 		my $content=readfile(srcfile($pagesources{$page}));
@@ -104,28 +105,13 @@ sub cgi ($) { #{{{
 			my $escape=shift;
 			my $params=shift;
 			return "\\[[poll $params]]" if $escape;
-			return $params unless --$num == 0;
-			my @bits=split(' ', $params);
-			my @ret;
-			while (@bits) {
-				my $n=shift @bits;
-				if ($n=~/=/) {
-					# val=param setting
-					push @ret, $n;
-					next;
+			if (--$num == 0) {
+				$params=~s/(^|\s+)(\d+)\s+"?\Q$choice\E"?(\s+|$)/$1.($2+1)." \"$choice\"".$3/se;
+				if (defined $oldchoice) {
+					$params=~s/(^|\s+)(\d+)\s+"?\Q$oldchoice\E"?(\s+|$)/$1.($2-1)." \"$oldchoice\"".$3/se;
 				}
-				my $c=shift @bits;
-				$c=~s/^"(.*)"/$1/g;
-				next unless defined $n && defined $c;
-				if ($c eq $choice) {
-					$n++;
-				}
-				if (defined $oldchoice && $c eq $oldchoice) {
-					$n--;
-				}
-				push @ret, $n, "\"$c\"";
 			}
-			return "[[poll ".join(" ", @ret)."]]";
+			return "[[poll $params]]";
 		};
 		$content =~ s{(\\?)\[\[poll\s+([^]]+)\s*\]\]}{$edit->($1, $2)}seg;
 
-- 
cgit v1.2.3