X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e7ddbb822ac6251bc2204b86495d86f631937d1f..951522ebc3fdd129f8f696fe1104546845ead4cb:/IkiWiki/Plugin/poll.pm diff --git a/IkiWiki/Plugin/poll.pm b/IkiWiki/Plugin/poll.pm index e92d0292f..320d2fa77 100644 --- a/IkiWiki/Plugin/poll.pm +++ b/IkiWiki/Plugin/poll.pm @@ -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;