]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/poll.pm
* More build deps updates.
[git.ikiwiki.info.git] / IkiWiki / Plugin / poll.pm
index e92d0292f317d90eee975bcdb6d5aaf995632934..320d2fa775e6660736608b999a202d3c664e5cbb 100644 (file)
@@ -22,7 +22,7 @@ sub preprocess (@) { #{{{
 
        my $open=yesno($params{open});
        my $showtotal=yesno($params{total});
-       my $percent=yesno($params{percent});
+       my $showpercent=yesno($params{percent});
        $pagenum{$params{page}}++;
 
        my %choices;
@@ -46,7 +46,7 @@ sub preprocess (@) { #{{{
        my $ret="";
        foreach my $choice (@choices) {
                my $percent=$total > 0 ? int($choices{$choice} / $total * 100) : 0;
-               if ($percent) {
+               if ($showpercent) {
                        $ret.="$choice ($percent%) ";
                }
                else {
@@ -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 >=0 ? $2-1 : 0)." \"$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;